AIMFP
PYPI · AIMFP
Database-driven directives and project tracking for modular functional-procedural AI coding
Available components
Last scanned (23 hours ago)
Scores higher than 72% of PyPI servers
Category Project Management
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs setuptools.build_meta at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 0 of 1 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency84
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to aryanduntley/aimfp). View diagnostics → Pass
- License check failed: the license (PolyForm-Noncommercial-1.0.0) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 3 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability72
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 29231 tokens (~97/item across 300 items; 300 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety96
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 30 of 36 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "detect_conflicts_before_merge" implies "merge" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
- An AI judge read all 301 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
- Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 1 Nov 26 +15
- Malware scan: unverified → pass ▲ security
- 31 Oct 26 61
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Analysed pypi/aimfp@1.70.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | pypi |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | aryanduntley/aimfp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/aryanduntley/aimfp/.github/workflows/python-publish.yml@refs/tags/v1.70.0 |
| Rekor log index | 3615397773 |
| Predicate type | PyPI publish attestation https://docs.pypi.org/attestations/publish/v1 |
| Subject digest | sha256:fcce2705118cfc740b66bc24b6173123b4aa8c35fdcb0d00ace41d8fdde7cac7 |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | setuptools.build_meta |
Background: Why install scripts are a supply-chain risk →
Dependencies 1 package
| Packages resolved | 1 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
acknowledge_notice ~131
Mark a notice as delivered so it never fires again for this project. Writes to acknowledged_notices in user_preferences.db; the notice text itself lives in the read-only core database and is untouched. Call only AFTER acting on the notice — for an action_required notice that means after the user has actually answered, not merely been asked.
| Name | Type | Req | Description |
|---|---|---|---|
| notice_key | string | yes | Notice identifier from get_pending_notices (e.g. 'backup_interval_intro') |
| outcome | string | – | Short record of what the user decided (e.g. 'set backup_interval_days=14'). Kept for audit and worth filling in. |
No output schema declared.
No examples provided.
activate_user_directive ~66
Set directive status to 'active' and record activated_at timestamp, only for a directive a person approved and that is unchanged since (approval content hash). Does NOT deploy services - AI handles deployment via directive workflow.
| Name | Type | Req | Description |
|---|---|---|---|
| directive_id | integer | yes | ID of the directive to activate |
No output schema declared.
No examples provided.
add_completion_path ~107
Add completion path stage
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Description |
| name | string | yes | Completion path name (e.g., 'setup', 'core dev', 'finish') |
| order_index | integer | – | Order position (1, 2, 3...) |
| status | string | – | 'pending', 'in_progress', 'completed' |
| theme_ids | array | – | Themes (stable project areas) this path advances. Optional here; link later with add_path_themes. |
No output schema declared.
No examples provided.
add_directive_preference ~80
Add/update user preference for directive
| Name | Type | Req | Description |
|---|---|---|---|
| active | boolean | – | Whether preference is active |
| description | string | – | Optional note on what this preference does, stored with it in directive_preferences |
| directive_name | string | yes | Directive name |
| preference_key | string | yes | Preference key |
| preference_value | string | yes | Preference value |
No output schema declared.
No examples provided.
add_file_flows ~53
Batch-assign multiple files to flows. Skips existing links silently. More efficient than multiple add_file_to_flow calls.
| Name | Type | Req | Description |
|---|---|---|---|
| links | array | yes | Array of [file_id, flow_id] tuples to create |
No output schema declared.
No examples provided.
add_file_to_flow ~72
Assign a finalized file to an architectural flow. Every finalized file needs at least one flow assignment to stay architecturally connected.
| Name | Type | Req | Description |
|---|---|---|---|
| file_id | integer | yes | File ID (from reserve_file/finalize_file) |
| flow_id | integer | yes | Flow ID (from add_flow or get_all_flows) |
No output schema declared.
No examples provided.
add_file_to_module ~56
Assign a file to a module. Creates module_files junction entry. Same pattern as add_file_to_flow.
| Name | Type | Req | Description |
|---|---|---|---|
| file_id | integer | yes | File ID to assign |
| module_id | integer | yes | Module ID to assign to |
No output schema declared.
No examples provided.
add_files_to_module ~57
Batch assign multiple files to modules. More efficient than multiple add_file_to_module calls. Skips duplicates silently, fails fast on missing entities.
| Name | Type | Req | Description |
|---|---|---|---|
| links | array | yes | List of [file_id, module_id] tuples to assign |
No output schema declared.
No examples provided.
add_flow ~126
Add a project flow (evolving behaviour/architecture description) linked to at least one theme. theme_ids is required: a flow never exists without a theme.
| Name | Type | Req | Description |
|---|---|---|---|
| ai_generated | boolean | – | True if AI-generated |
| confidence_score | number | – | Confidence score 0-1 |
| description | string | – | Flow description |
| name | string | yes | Flow name |
| theme_ids | array | yes | IDs of the theme(s) this flow belongs to — at least one. Every flow belongs to a theme; pick from get_all_themes() or add_theme() first. |
No output schema declared.
No examples provided.
add_flow_themes ~80
Batch-link flows to themes (flow_themes). Every flow must belong to at least one theme; use this to fix theme-less flows or give a flow a second theme.
| Name | Type | Req | Description |
|---|---|---|---|
| links | array | yes | Array of [flow_id, theme_id] pairs. One pair links one; many pairs (any mix of flow_ids) apply atomically. |
No output schema declared.
No examples provided.
add_interaction ~149
Record a dependency between two functions by name (call, chain, borrow, compose, pipe). Interactions are how the AI traces dependency graphs. An edge already tracked is not duplicated (already_existed=true).
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | What the dependency is (optional) |
| interaction_type | string | yes | Interaction type ('call', 'chain', 'borrow', 'compose', 'pipe') |
| is_indirect | boolean | – | True for a deliberate edge the code makes indirectly (dispatch through a tuple/table of functions, a chain data-flow link): audit_interactions never reports it as stale. |
| source | string | yes | Source function name |
| target | string | yes | Target function name |
No output schema declared.
No examples provided.
add_interactions ~125
Batch-record function dependencies by ID. More efficient than multiple add_interaction calls for tracking all cross-function dependencies. Edges already tracked (same source, target, type) are skipped and counted in skipped_count; ids stay in input order.
| Name | Type | Req | Description |
|---|---|---|---|
| interactions | array | yes | Array of tuples [(source_function_id, target_function_id, interaction_type, description[, is_indirect]), ...] - type: 'call', 'chain', 'borrow', 'compose', 'pipe'. Optional 5th element is_indirect (b… |
No output schema declared.
No examples provided.
add_item ~112
Create a single work item under a task, subtask, or sidequest. Items are the smallest trackable units of work.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Item description |
| name | string | yes | Item name |
| reference_id | integer | yes | ID of the parent task, subtask, or sidequest |
| reference_table | string | yes | 'tasks', 'subtasks', or 'sidequests' |
| status | string | – | 'pending', 'in_progress', 'completed' (default: pending) |
No output schema declared.
No examples provided.
add_items ~87
Batch-create multiple work items under a single parent in one call. All items created with status 'pending'.
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | Array of {name: string, description?: string} objects |
| reference_id | integer | yes | ID of the parent task, subtask, or sidequest |
| reference_table | string | yes | 'tasks', 'subtasks', or 'sidequests' |
No output schema declared.
No examples provided.
add_milestone ~99
Add milestone to completion path
| Name | Type | Req | Description |
|---|---|---|---|
| completion_path_id | integer | yes | Completion path ID this milestone belongs to |
| description | string | – | Milestone description |
| flow_ids | array | – | Flows this milestone builds or changes. Optional here; link later with add_milestone_flows. |
| name | string | yes | Milestone name |
| status | string | – | 'pending', 'in_progress', 'completed', 'blocked' |
No output schema declared.
No examples provided.
add_milestone_flows ~93
Batch-link milestones to the flows (evolving behaviour) they build or change (milestone_flows). A milestone that introduces new behaviour should get a NEW flow (add_flow) rather than growing an existing flow's description.
| Name | Type | Req | Description |
|---|---|---|---|
| links | array | yes | Array of [milestone_id, flow_id] pairs. One pair links one; many pairs (any mix of milestone_ids) apply atomically. |
No output schema declared.
No examples provided.
add_module ~133
Create a new module (reusable code boundary). A module maps to a directory. Files are assigned explicitly via add_file_to_module. Use external_dependencies to record wrapped libraries.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | What this module does |
| external_dependencies | array | – | Libraries/services this module wraps (e.g., ['walletconnect', 'stripe']) |
| name | string | yes | Module name (e.g., 'wallet_connection', 'validation') |
| path | string | yes | Directory path relative to source root (e.g., 'src/wallet_connection/') |
| purpose | string | – | Domain concern this module owns (one sentence) |
No output schema declared.
No examples provided.
add_note ~263
Record a decision, architecture change, or context event in the project's audit trail. Supports typed notes with optional directive linking.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | Note content/message |
| directive_name | string | – | Optional directive context for note |
| note_type | string | yes | 'clarification', 'pivot', 'research', 'entry_deletion', 'warning', 'error', 'info', 'auto_summary', 'decision', 'evolution', 'analysis', 'task_context', 'external', 'summary' |
| reference_id | integer | – | ID of the referenced table entry |
| reference_table | string | – | project.db table this note is attached to (e.g. 'files', 'tasks', 'flows', 'completion_path'). Must be an existing project.db table name, exactly: unknown names are refused, because the getters that… |
| send_with_directive | boolean | – | If true and directive_name set, note is included when that directive is retrieved. Turns notes into contextual reminders that travel with their directive. |
| severity | string | – | 'info', 'warning', 'error' (default 'info') |
| source | string | – | 'ai', 'user', or 'directive' (default 'ai') |
No output schema declared.
No examples provided.
add_path_themes ~74
Batch-link completion paths to the themes (stable project areas) they advance (completion_path_themes). Themes change rarely, like paths.
| Name | Type | Req | Description |
|---|---|---|---|
| links | array | yes | Array of [completion_path_id, theme_id] pairs. One pair links one; many pairs (any mix of completion_path_ids) apply atomically. |
No output schema declared.
No examples provided.
add_project_entry ~35
Add new entry to project database
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | Field-value pairs |
| table | string | yes | Table name |
No output schema declared.
No examples provided.
add_settings_entry ~35
Add entry to user settings database
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | Field-value pairs |
| table | string | yes | Table name |
No output schema declared.
No examples provided.
add_sidequest ~129
Create an urgent interruption that pauses the current task. Use for bug fixes, blockers, or unexpected work discovered mid-task.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Sidequest description |
| flow_ids | array | – | JSON array of flow IDs |
| name | string | yes | Sidequest name |
| paused_subtask_id | integer | – | If sidequest during subtask |
| paused_task_id | integer | yes | ID of the task being paused for this sidequest |
| priority | string | – | Sidequest priority (default: critical) |
| status | string | – | Sidequest status (default: pending) |
No output schema declared.
No examples provided.
add_subtask ~100
Create a focused sub-unit of work under a parent task. The parent is paused until all subtasks complete.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Subtask description |
| name | string | yes | Subtask name |
| parent_task_id | integer | yes | Parent task ID |
| priority | string | – | 'low', 'medium', 'high', 'critical' |
| status | string | – | 'pending', 'in_progress', 'completed', 'blocked' |
No output schema declared.
No examples provided.
add_task ~107
Create a task under a milestone with flow associations. Tasks are created ONE at a time as work progresses, not all at once.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Task description |
| flow_ids | array | – | JSON array of flow IDs |
| milestone_id | integer | yes | ID of the milestone this task belongs to |
| name | string | yes | Task name |
| priority | string | – | Task priority (default: medium) |
| status | string | – | Task status (default: pending) |
No output schema declared.
No examples provided.
add_theme ~61
Add project theme
| Name | Type | Req | Description |
|---|---|---|---|
| ai_generated | boolean | – | True if AI-generated, False if user-created |
| confidence_score | number | – | Confidence score 0-1 |
| description | string | – | Theme description |
| name | string | yes | Theme name |
No output schema declared.
No examples provided.
add_tracking_note ~162
Add tracking note to user_preferences.db (only when tracking enabled)
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | Note content/message |
| directive_name | string | – | Directive that created this note |
| metadata_json | string | – | Additional context as JSON string |
| note_type | string | yes | 'fp_analysis', 'user_interaction', 'validation', 'performance', 'debug' |
| reference_id | integer | – | Optional ID if referencing project.db entity |
| reference_name | string | – | Name of referenced entity (e.g., function name, file path) |
| reference_type | string | – | Type of reference (e.g., 'function', 'file', 'directive') |
| severity | string | – | 'info', 'warning', 'error' (default 'info') |
No output schema declared.
No examples provided.
add_types_functions ~106
Link tracked types to the functions that use them with a role (factory, transformer, validator, etc.). Enables 'what functions use TypeX?' queries. Links already tracked are skipped and counted in skipped_count instead of failing the batch.
| Name | Type | Req | Description |
|---|---|---|---|
| relationships | array | yes | Array of tuples [(type_id, function_id, role), ...] - role: 'factory', 'transformer', 'operator', 'pattern_matcher', 'accessor', 'validator', 'combinator' |
No output schema declared.
No examples provided.
add_user_custom_entry ~85
Add entry to user_directives.db table. Returns inserted record with ID. Every key must be a column of the table; on user_directives the approval columns and status='active' are refused, so a new directive always starts unapproved.
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | Field-value pairs to insert |
| table | string | yes | Table name in user_directives.db |
No output schema declared.
No examples provided.
add_user_directive_note ~190
Add note to user_directives.db notes table for AI record-keeping
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | Note content/message |
| metadata_json | string | – | Additional context as JSON string |
| note_type | string | yes | 'implementation', 'validation', 'execution', 'dependency', 'error', 'optimization', 'user_feedback', 'lifecycle', 'testing', 'general', 'deferred', 'completed', 'obsolete', 'entry_deletion' |
| reference_id | integer | – | Optional ID linking to user_directives, helper_functions, etc. |
| reference_name | string | – | Name of referenced entity (e.g., directive name, helper name, file path) |
| reference_type | string | – | Type of reference: 'directive', 'helper', 'dependency', 'file' |
| severity | string | – | 'info', 'warning', 'error' (default 'info') |
No output schema declared.
No examples provided.
add_user_setting ~68
Add new project-wide user setting to user_settings table
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Description of the setting |
| scope | string | – | Setting scope (default 'project') |
| setting_key | string | yes | Setting key (must be unique) |
| setting_value | string | yes | Setting value |
No output schema declared.
No examples provided.
aimfp_end ~120
Session termination orchestrator. Gathers session audit data: reads watchdog state and final reminders, queries all files and functions from DB for AI to cross-reference, reads recent notes and task state. Stops watchdog process if running. Returns structured audit data for AI to interpret and act on. No analysis logic — AI determines what is stale or missing. Also runs the tracking audit (functions, interactions, descriptions) over the session's uncommitted changes (or the in-progress work item's files without git) and returns data.audit with counts, verdict and report_path.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
aimfp_init ~53
Phase 1 mechanical setup orchestrator for project initialization. Atomically creates directories, databases with schemas, and templates. No deep logic - pure mechanical operations.
| Name | Type | Req | Description |
|---|---|---|---|
| project_root | string | yes | Path to project root directory |
No output schema declared.
No examples provided.
aimfp_run ~84
Main entry point orchestrator. Called on session start (is_new_session=true) for full context bundle, and at work checkpoints (is_new_session=false) for watchdog alerts only.
| Name | Type | Req | Description |
|---|---|---|---|
| is_new_session | boolean | – | Whether this is a new session start. Use true for first interaction, new session, or after long breaks. Use false (default) for continuation work. |
No output schema declared.
No examples provided.
aimfp_status ~159
Project status in three tiers. Default 'quick' is the cheap position check for completion loops; 'summary' is the reload after lost or compacted context. Structure (themes/flows/modules) is attached to the work and files shown, never listed whole.
| Name | Type | Req | Description |
|---|---|---|---|
| type | string | – | Tier: 'quick' (default) = position only (path, milestone, focused work with item names, their flows/themes, other open work, structure gap count), for completion loops and 'where am I' checks. 'summa… |
No output schema declared.
No examples provided.
apply_audit_fixes ~923
Apply audit findings in ONE call and ONE transaction, with a restore manifest written in the same transaction. Name report categories (report + apply) so thousands of IDs never pass through the conversation, hold back reviewed false positives for this call with exclude={category: [ids]} or for good with exempt=[...], and/or pass explicit changes. Every report finding is re-checked against its row first: an edge whose endpoints changed since the audit, or an entity already gone or renamed, is skipped with a reason. One entry_deletion note lists every deleted row (cascaded edges and type links included) and the old values of every changed row, so any change can be undone. Judgement categories (unconfirmed_interactions, dangling_mentions, missing_functions, untracked_files) are refused: they need prose, a mark, or reconcile_paths. Description review lists (unbaselined_needs_review, stale_descriptions) apply as baselines once reviewed: exclude the ones whose prose you are rewriting.
| Name | Type | Req | Description |
|---|---|---|---|
| add_interactions | array | – | Edges to add (interaction_type defaults to 'call'). |
| add_type_links | array | – | types_functions links to add. |
| apply | array | – | Finding categories of the report to apply. missing_interactions=add, stale_interactions=delete (indirect edges kept), repoint_interactions=move source/target, stale_functions/stale_types=delete (casc… |
| baseline_hash_function_ids | array | – | Functions whose current code hash is recorded as matching their description. Only after reviewing purpose/parameters/returns. |
| cleanup | boolean | – | Delete the report file after a successful real run. |
| delete_function_ids | array | – | Functions to delete; their interactions and type links cascade and are recorded in the manifest. |
| delete_interaction_ids | array | – | Interactions to delete. |
| delete_type_ids | array | – | Types to delete; their type links cascade and are recorded in the manifest. |
| dry_run | boolean | – | Do everything, then roll back: the result is exactly what a real run does. |
| exclude | object | – | Findings of applied categories to hold back (reviewed false positives), as {category: [ids]}: interaction_id for stale/repoint_interactions, function_id for stale_functions/param_mismatch/unbaselined… |
| exempt | array | – | Reviewed findings that are NOT drift (schema 1.16): [{category, function_id | type_id, reason?}], reason defaulting to the call's. Audits list them under 'exempted' (info) instead of the category, so… |
| mark_indirect_ids | array | – | Interactions to mark is_indirect: deliberate edges the code makes indirectly. Audits never flag them; report deletes skip them. |
| reason | string | yes | Why these changes are made; recorded in the restore-manifest note. |
| refresh_signature_function_ids | array | – | Functions whose parameters are re-read from the source (names, order, types, required/default), keeping each surviving parameter's description. |
| repoint_interactions | array | – | Edges to move to a new source and/or target. |
| report | string | – | report_path returned by an audit tool (project-relative path, absolute path, or bare file name in the audit folder). |
| unexempt_ids | array | – | audit_exemptions ids (exemption_id in an audit's 'exempted' list) to remove; the finding is reported again. Removed rows go into the manifest. |
| unmark_indirect_ids | array | – | Interactions to clear is_indirect on. |
No output schema declared.
No examples provided.
apply_state_changeset ~227
(For use with InterCommAIMFP) Apply a semantic changeset onto the current-main project.db as a 3-way merge (base@base_main_commit vs branch intent vs current main). Accepts EITHER the inline changeset object OR a changeset_id handle (loaded server-side). Auto-applies non-overlapping changes, mints canonical IDs for genuinely new entities, rewrites all references to canonical IDs, and returns EVERY conflict as structured data for the master/AI to review — it never guesses on a conflict. Mutates the working .aimfp-project/project.db in place after taking a backup; a genuine failure rolls back and restores the backup.
| Name | Type | Req | Description |
|---|---|---|---|
| changeset | object | – | The changeset object produced by export_state_changeset (provenance, entities[], references[]). Optional when changeset_id is given. |
| changeset_id | string | – | Handle returned by export_state_changeset; loads the persisted changeset from .aimfp-project/changesets/ so you never re-transcribe the full object. Used only when changeset is omitted. |
No output schema declared.
No examples provided.
audit_descriptions ~528
Audit function and type descriptions for drift from the code. Read-only. stale_descriptions: the function's code changed after its purpose/parameters/returns were written (functions.source_hash, recorded on every prose write, differs from the current code hash; formatting, comments and docstrings never change the hash). dangling_mentions: a description names a callable that exists nowhere — 'name()' or 'snake_name(...)' not defined, imported or called anywhere in the tracked Python files, not tracked, not a builtin or Python keyword, and not vocabulary the code writes in its string literals (a whole-string identifier or 'name(' in a string: DSL built-ins such as jsonencode, parse_json); attribute calls, ALLCAPS and 'file(s)' plurals are ignored. Described functions with no hash yet are triaged against the code: unbaselined_descriptions (info) pass and can be baselined in one call; unbaselined_needs_review (info) carry triage reasons (recorded parameter names or return type differing from the code, a purpose under three words, snake_case/backticked names in the prose that neither the function nor the rest of its file uses — names, imports, string words, plural or singular forms count), the recorded prose and a code excerpt; a name found nowhere in the repo (any file under the project root the exclusion stack keeps) ranks priority 'high' with signature mismatches, one found elsewhere ranks 'low', and lists are sorted high first. stale_descriptions carry the same triage, priority and excerpt. Warnings only — never blocks a task. Scope selectors combine as a union; with none, the whole project (tracked files plus untracked source files) is audited. Writes the full report to <project folder>/audit/ and returns counts + samples + report_path.
| Name | Type | Req | Description |
|---|---|---|---|
| file_ids | array | – | Tracked file IDs to audit. |
| module_path | string | – | Audit every file under this project-relative directory. |
| paths | array | – | Project-relative file paths to audit (tracked or not). |
| since_commit | string | – | Audit files changed since this git ref ('HEAD' = uncommitted work, or a branch/commit): committed, staged, unstaged and new untracked files. |
| task_id | integer | – | Audit the files linked to this task (a task includes its subtasks' files). |
| task_type | string | – | 'task' (default), 'subtask' or 'sidequest' — the kind of work item task_id names. |
No output schema declared.
No examples provided.
audit_functions ~404
Audit tracked files, functions and types against the source. Read-only. Python files (full fidelity): missing_functions (public, untracked), stale_functions (tracked, gone from the source; a module-level `f = partial(...)`, lambda or alias binding of the name counts as defined), incomplete_functions (purpose/parameters/returns empty), malformed_json (not one JSON encoding of a list/object; double-encoded is fixable), reserved_functions (never finalized), param_mismatch (recorded parameters vs the signature: names, order, required vs default), missing_types, stale_types (name defined nowhere in the file), incomplete_types, missing_type_links (a tracked type named in a signature with no types_functions link, role suggested), files_without_functions (informational). Every file: missing_files (tracked, gone from disk), untracked_files. Regex languages only report names_only_missing (warning) and never claim anything stale. Tracking _private functions is optional: untracked ones are never reported, tracked ones get every check. Scope selectors combine as a union; with none, the whole project (tracked files plus untracked source files) is audited. Writes the full report to <project folder>/audit/ and returns counts + samples + report_path.
| Name | Type | Req | Description |
|---|---|---|---|
| file_ids | array | – | Tracked file IDs to audit. |
| module_path | string | – | Audit every file under this project-relative directory. |
| paths | array | – | Project-relative file paths to audit (tracked or not). |
| since_commit | string | – | Audit files changed since this git ref ('HEAD' = uncommitted work, or a branch/commit): committed, staged, unstaged and new untracked files. |
| task_id | integer | – | Audit the files linked to this task (a task includes its subtasks' files). |
| task_type | string | – | 'task' (default), 'subtask' or 'sidequest' — the kind of work item task_id names. |
No output schema declared.
No examples provided.
audit_interactions ~570
Audit tracked interactions against the call graph the code makes, for the callers in scope. Read-only. Expected edges: calls AND functions used as values (map(fn, xs), partial, dispatch dicts built in the body), credited through untracked same-file helpers, resolved through imports, aliases and re-exports. Categories: missing_interactions (code makes it, DB lacks it), stale_interactions (provably gone: every use of the target's name in the caller resolves to something else — another function, a local or loop variable, a method on a value — or there is none), repoint_interactions (a stale edge that is the same dependency moved: call moved to another function in the same file, or target moved under the same name — one change, not delete+add), unconfirmed_interactions (may be real but unprovable, each with a reason: name resolves ambiguously, called through a record field or factory several functions are stored under, a callback parameter of the target's name, the name as a string in a lookup position (call argument such as getattr's, subscript key, list/tuple/set element; never a dict-literal key, comparison or assignment), a non-Python target: mark indirect or delete), indirect_interactions (is_indirect edges) and non_call_interactions (chain/compose/pipe/borrow types): informational, never flagged. Confirmed without being expected (never reported, never asked to be added): self-recursion, functions held in a module-level table the caller reads (dispatch), a .field() call when the target is the only tracked function stored under that field anywhere (Rec(field=target)), a non-Python function called as name( in the caller's string literals (SQL). Python callers only (full fidelity); other files listed in unchecked_files. Scope selectors combine as a union; with none, the whole project (tracked files plus untracked source files) is audited. Writes the full report to <project folder>/audit/ and returns counts + samples + report_path.
| Name | Type | Req | Description |
|---|---|---|---|
| file_ids | array | – | Tracked file IDs to audit. |
| module_path | string | – | Audit every file under this project-relative directory. |
| paths | array | – | Project-relative file paths to audit (tracked or not). |
| since_commit | string | – | Audit files changed since this git ref ('HEAD' = uncommitted work, or a branch/commit): committed, staged, unstaged and new untracked files. |
| task_id | integer | – | Audit the files linked to this task (a task includes its subtasks' files). |
| task_type | string | – | 'task' (default), 'subtask' or 'sidequest' — the kind of work item task_id names. |
No output schema declared.
No examples provided.
audit_tracking ~434
Run EVERY tracking audit over one scope with one code index and one report: files, functions, types, parameters, JSON encoding, type links (audit_functions), interactions with repoints (audit_interactions), stale prose and dangling mentions (audit_descriptions), plus modularity gaps (structure_gaps). Read-only. The same audit gates task/subtask/sidequest completion (over the item's linked files), runs in aimfp_end over uncommitted work, runs per changed file in the watchdog, and runs in CI as `aimfp audit`. Scope selectors combine as a union; with none, the whole project (tracked files plus untracked source files) is audited. Writes the full report to <project folder>/audit/ and returns counts + samples + block/warn verdict + report_path.
| Name | Type | Req | Description |
|---|---|---|---|
| file_ids | array | – | Tracked file IDs to audit. |
| full | array | – | Finding categories to return inline in full, whatever sample_limit says (e.g. ['stale_descriptions']). Unknown category names are an error. |
| include | array | – | Audits to run (default all): functions (files, functions, types, parameters, JSON, type links), interactions (missing/stale/repoint edges), descriptions (stale prose, dangling mentions), structure (m… |
| module_path | string | – | Audit every file under this project-relative directory. |
| paths | array | – | Project-relative file paths to audit (tracked or not). |
| sample_limit | integer | – | Findings shown inline per category (default 5; 0 = counts only). The report file always has every finding. |
| since_commit | string | – | Audit files changed since this git ref ('HEAD' = uncommitted work, or a branch/commit): committed, staged, unstaged and new untracked files. |
| task_id | integer | – | Audit the files linked to this task (a task includes its subtasks' files). |
| task_type | string | – | 'task' (default), 'subtask' or 'sidequest' — the kind of work item task_id names. |
No output schema declared.
No examples provided.
backfill_semantic_keys ~150
(For use with InterCommAIMFP) Mint stable identity keys for any rows that lack one: slugs on work-hierarchy rows (milestones, tasks, subtasks, sidequests, items) and entity_key on functions/types — e.g. rows that predate those columns. OPTIONAL one-time prep: run once on main (and commit) only when a pre-v1.11 project is about to start multi-agent parallel work, so every clone inherits stable baseline keys that export_state_changeset can match. Unnecessary for solo projects (keys never read) and for projects started fresh on v1.11+ (keys minted at creation — no-op). Idempotent.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
batch_update_progress ~124
Update multiple project items atomically. Used after code generation or bulk operations to ensure consistency.
| Name | Type | Req | Description |
|---|---|---|---|
| continue_on_error | boolean | – | Stop on first error or continue processing remaining updates |
| transaction | boolean | – | All-or-nothing commit vs independent updates |
| updates | array | yes | List of update objects: [{target_type, target_id, action, data}, ...] data.audit_override_reason completes a task/subtask/sidequest despite blocking tracking-audit findings (recorded as a warning not… |
No output schema declared.
No examples provided.
blueprint_has_changed ~37
Check if ProjectBlueprint.md has changed using Git or filesystem timestamp
| Name | Type | Req | Description |
|---|---|---|---|
| blueprint_path | string | yes | Absolute path to ProjectBlueprint.md file |
No output schema declared.
No examples provided.
catalog_files ~121
Register existing files in project.db in a single phase. For code already on disk: rows are written finalized (is_reserved=0) with ID naming off, because existing filenames are fixed and cannot carry an _id_ suffix. Use INSTEAD OF reserve_files/finalize_files when adopting an existing codebase. Idempotent on path; re-cataloging keeps a stored name or language that is omitted.
| Name | Type | Req | Description |
|---|---|---|---|
| files | array | yes | Array of {name, path, language} objects. 'path' is project-relative and is the identity key. |
No output schema declared.
No examples provided.
catalog_functions ~139
Register existing functions in project.db in a single phase. Use INSTEAD OF reserve_functions/finalize_functions when adopting an existing codebase. Idempotent on (file_id, name), so a re-scan after source changes refreshes signatures instead of duplicating them. Only supplied fields are overwritten: an omitted or blank purpose, parameters or returns keeps the stored value, so a refresh never erases prose.
| Name | Type | Req | Description |
|---|---|---|---|
| functions | array | yes | Array of {name, file_id, purpose, parameters, returns} objects. 'parameters' is a list of param dicts and 'returns' a dict; both are JSON-encoded on write. |
No output schema declared.
No examples provided.
catalog_types ~99
Register existing type definitions in project.db in a single phase. Use INSTEAD OF reserve_types/finalize_types when adopting an existing codebase. Idempotent on (file_id, name); definition is always refreshed, an omitted description keeps the stored one.
| Name | Type | Req | Description |
|---|---|---|---|
| types | array | yes | Array of {name, file_id, definition, description} objects. 'definition' is a dict describing the type shape and is JSON-encoded on write. |
No output schema declared.
No examples provided.
check_directive_health ~324
Assess every user directive and report which need attention. The health states, in the order they are checked: 'unapproved' (status is active but no person approved it, so dispatch withholds it); 'needs_reapproval' (approved, but the trigger, action or implementation file changed since, or it was approved before schema 1.5 without a content hash; dispatch and activation refuse it until the user approves again); 'error' (the directive's own status is error); 'overdue' (next_scheduled_time is in the past, meaning the runner said when it would next fire and did not); 'skipping' (consecutive_skip_count is at or above skip_threshold with no run since the last skip, meaning the runner is alive but keeps skipping occurrences, usually because the host is down at the scheduled time); 'degraded' (error rate at or above the threshold); 'never_run' (active but never executed; when dispatch errors exist, the detail says the runner is running but refusing or failing to dispatch, otherwise that the runner may not be deployed); or 'ok'. Returns a verdict per directive with a one-line explanation and the skip fields, plus a count per state, designed to render as a single sentence at session start.
| Name | Type | Req | Description |
|---|---|---|---|
| error_rate_threshold | number | – | Error rate at or above which a directive is reported degraded |
| project_root | string | – | Project root; defaults to the session root |
| skip_threshold | integer | – | Consecutive skipped occurrences at or above which a directive is reported skipping |
No output schema declared.
No examples provided.
check_scheduled_backup_due ~98
Check whether a scheduled backup is overdue, measured from the LAST BACKUP. Distinct from the inactivity rule (backup_duration), which measures time since the last project change and therefore only ever fires on dormant projects — an actively developed project would otherwise never be backed up. Governed by backup_interval_days; 0 disables scheduling. Called automatically by aimfp_run(is_new_session=true); available standalone for hosts that want the check on demand.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
clear_watchdog ~55
Clear watchdog reminders after they have been reviewed and handled. Reminders persist in .aimfp-project/watchdog/reminders.json until this is called. Call after addressing all watchdog findings (file deletions, unregistered files, etc.).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
core_allowed_check_constraints ~65
Returns list of allowed values for CHECK constraint enum fields in aimfp_core.db. Parses schema to extract CHECK(field IN (...)) constraints.
| Name | Type | Req | Description |
|---|---|---|---|
| field | string | yes | Field name to get allowed values for |
| table | string | yes | Table name to check for CHECK constraints |
No output schema declared.
No examples provided.
How do I install the AIMFP MCP server?
AIMFP runs locally as a PyPI package, launched with uvx aimfp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · aimfp
claude mcp add aryanduntley-aimfp -- uvx aimfp
What is the AIMFP MCP server?
AIMFP is an MCP server listed in the public MCP registry as io.github.aryanduntley/aimfp. Database-driven directives and project tracking for modular functional-procedural AI coding. This page covers its PyPI package (aimfp).
Is the AIMFP MCP server safe to use?
AIMFP scores 76 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the AIMFP MCP server expose?
AIMFP exposes 300 tools: acknowledge_notice, activate_user_directive, add_completion_path, add_directive_preference, add_file_flows, and 295 more. Their descriptions and schemas cost roughly 27,909 tokens of context every time the server is loaded.
Is the AIMFP MCP server still maintained?
AIMFP is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the AIMFP MCP server under?
AIMFP declares the PolyForm-Noncommercial-1.0.0 licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.