AIMFP
PYPI · AIMFP
Database-driven directives and project tracking for modular functional-procedural AI coding
Available components
Last scanned (10 hours ago)
Scores higher than 74% 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 4 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.
Checks we ran (15)
- Malware scan
- Known CVEs
- Install scripts
- Dependency health
- Source repository
- Provenance
- License
- Maintenance
- Security disclosure
- Schema quality
- Tool coverage
- Injection markers
- Destructive annotations
- Judged manipulation
- MCP protocol
Checks we could not complete (1)
These are gaps on our side, not findings about this package. We only credit what we can confirm, so a category made up entirely of them scores 0.
- Stability in Stability & Change Management (scores 0 for this)Stability not yet verified: not enough scan history yet (needs a 30-day window).
Does not apply to this package (2)
- Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
- Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
The score does not measure everything. What the score does not measure →
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 5 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 | Known build tool | 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 →
reserve_types ~59
Batch-reserve type IDs before writing multiple type definitions. Include definition_json and description for every type.
| Name | Type | Req | Description |
|---|---|---|---|
| types | array | yes | Array of type objects [{name, definition_json, description, links, file_id, skip_id_naming?}, ...] |
No output schema declared.
No examples provided.
restore_project_backup ~195
Restore selected databases from a backup archive, side-by-side rather than in place. Every requested member is extracted to a temporary file FIRST; only once all extractions succeed is anything live touched. The current file is then moved into backups/ as 'replaced-<timestamp>-<filename>' and the restored copy moved into position. Nothing is ever deleted, so the displaced state remains recoverable.
| Name | Type | Req | Description |
|---|---|---|---|
| backup_name | string | – | Archive to restore from (e.g. 'aimfp-backup-2026-08-09.zip'). Defaults to the most recent. Get valid names from list_project_backups. |
| databases | – | – | Which members to restore: any of 'project', 'user_preferences', 'user_directives', 'blueprint', or 'all'. Accepts a list or comma-separated string. Defaults to everything the archive contains. Be spe… |
No output schema declared.
No examples provided.
scan_call_graph ~155
Build the interaction graph for already-cataloged functions: which tracked function calls which. Read-only — returns tuples shaped for add_interactions, which does the writing. Run AFTER catalog_files and catalog_functions. Resolution is conservative and strictest-first (explicit import, then same-file, then module alias, then project-wide unique name), following re-export chains through modules that define no functions of their own. Ambiguous targets are dropped and counted rather than guessed at, because a wrong edge sends future refactors chasing dependencies that do not exist.
| Name | Type | Req | Description |
|---|---|---|---|
| module_path | string | – | Project-relative subtree to limit analysis to. Only the CALLING side is narrowed — functions outside it still resolve as targets, so cross-module edges are never lost. |
No output schema declared.
No examples provided.
scan_source_tree ~184
Read-only inventory of an existing codebase for adoption into AIMFP tracking. Walks source_directory applying the watchdog's exact exclusion stack (built-in exclusions + watchdog_excluded_* settings + .watchdogignore), extracts signatures, and reports tracked vs untracked. Writes nothing — review the inventory, then register with catalog_files/catalog_functions/catalog_types.
| Name | Type | Req | Description |
|---|---|---|---|
| include_nested | boolean | – | Include functions defined inside other functions |
| include_private | boolean | – | Include underscore-prefixed functions and types |
| module_path | string | – | Project-relative subtree to narrow the scan to (e.g. 'src/aimfp/helpers/project'). Defaults to the whole source_directory. Use this to adopt a large codebase one module at a time. |
| untracked_only | boolean | – | Report only files with no existing database record. Use on re-scans to see just what is new. |
No output schema declared.
No examples provided.
search_directives ~196
Find directives by type, category, or keyword when you know the domain but not the exact directive name. Multi-word input is split into words; a row matches if ANY word prefix-matches ("disk space free" finds get_free_disk_space). Rows matching more words rank first. Punctuation is ignored, so no FTS syntax is needed or honored. Common stopwords (the, of, and, ...) are ignored unless the query is nothing but stopwords. Keyword results are ordered by name/description relevance.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Directive category filter (e.g., 'purity', 'error_handling', 'task_management') |
| keyword | string | – | Free-text search over directive names, descriptions, and intent keywords, one or more words (e.g. 'task decomposition') |
| type | string | – | Directive type filter: 'fp', 'project', 'user-system', 'user-pref', 'git' |
No output schema declared.
No examples provided.
search_functions ~191
Search tracked functions by name or purpose with relevance ranking. Multi-word input is split into words; a row matches if ANY word prefix-matches ("disk space free" finds get_free_disk_space). Rows matching more words rank first. Punctuation is ignored, so no FTS syntax is needed or honored. Common stopwords (the, of, and, ...) are ignored unless the query is nothing but stopwords. Results are capped by limit; total_count reports all matches.
| Name | Type | Req | Description |
|---|---|---|---|
| details_only | boolean | – | If true, return only id/name + purpose/parameters/returns |
| include_details | boolean | – | If false, omit purpose/parameters/returns for lightweight listing |
| limit | integer | – | Maximum functions returned, best matches first (default 20) |
| search_string | string | yes | Free-text search over function name and purpose, one or more words (e.g. 'disk space free') |
No output schema declared.
No examples provided.
search_modules ~173
Search modules by name, purpose, or description with relevance ranking. Multi-word input is split into words; a row matches if ANY word prefix-matches ("disk space free" finds get_free_disk_space). Rows matching more words rank first. Punctuation is ignored, so no FTS syntax is needed or honored. Common stopwords (the, of, and, ...) are ignored unless the query is nothing but stopwords. Results are capped by limit; total_count reports all matches.
| Name | Type | Req | Description |
|---|---|---|---|
| detail_level | string | – | 'lean' (default): description is null, purpose kept. 'full': description included. |
| limit | integer | – | Maximum modules returned, best matches first (default 20) |
| search_string | string | yes | Free-text search over module name, purpose, and description, one or more words |
No output schema declared.
No examples provided.
search_notes ~280
Search past decisions and context by keyword. Multi-word input is split into words; a row matches if ANY word prefix-matches ("disk space free" finds get_free_disk_space). Rows matching more words rank first. Punctuation is ignored, so no FTS syntax is needed or honored. Common stopwords (the, of, and, ...) are ignored unless the query is nothing but stopwords. Returns capped previews by default; read a note in full with get_notes_comprehensive(note_id=X).
| Name | Type | Req | Description |
|---|---|---|---|
| directive_name | string | – | Optional filter by directive name |
| exclude_note_types | array | – | List of note_type values to exclude from results (e.g., ['completed', 'obsolete']) |
| limit | integer | – | Maximum notes returned, best matches first (default 20) |
| note_type | string | – | Optional filter by note_type |
| preview_chars | integer | – | Cap each note's content at this many characters (default 300; 0 = full content) |
| reference_id | integer | – | Optional filter by reference ID |
| reference_table | string | – | Optional filter by reference table |
| search_string | string | yes | Free-text search over note content, one or more words (e.g. 'hash digest') |
| severity | string | – | Optional filter by severity |
| source | string | – | Optional filter by source |
No output schema declared.
No examples provided.
search_tracking_notes ~69
Search tracking note content with optional filters
| Name | Type | Req | Description |
|---|---|---|---|
| directive_name | string | – | Optional filter by directive_name |
| note_type | string | – | Optional filter by note_type |
| reference_type | string | – | Optional filter by reference_type |
| search_string | string | yes | Search string for note content |
No output schema declared.
No examples provided.
search_types ~185
Search tracked types by name or description with relevance ranking. Multi-word input is split into words; a row matches if ANY word prefix-matches ("disk space free" finds get_free_disk_space). Rows matching more words rank first. Punctuation is ignored, so no FTS syntax is needed or honored. Common stopwords (the, of, and, ...) are ignored unless the query is nothing but stopwords. Results are capped by limit; total_count reports all matches.
| Name | Type | Req | Description |
|---|---|---|---|
| details_only | boolean | – | If true, return only id/name + definition_json/description/links |
| include_details | boolean | – | If false, omit definition_json/description/links for lightweight listing |
| limit | integer | – | Maximum types returned, best matches first (default 20) |
| search_string | string | yes | Free-text search over type name and description, one or more words |
No output schema declared.
No examples provided.
search_user_directive_notes ~124
Search note content in user_directives.db with optional additional filters
| Name | Type | Req | Description |
|---|---|---|---|
| exclude_note_types | array | – | List of note_type values to exclude from results (e.g., ['completed', 'obsolete']) |
| limit | integer | – | Maximum number of notes to return (default 100) |
| note_type | string | – | Optional filter by note_type |
| reference_type | string | – | Optional filter by reference_type |
| search_string | string | yes | Search string for note content (case-insensitive LIKE match) |
| severity | string | – | Optional filter by severity |
No output schema declared.
No examples provided.
search_user_directives ~111
Search user directives with optional filters. At least one filter required.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | – | Filter by domain (exact match, e.g. 'home_automation', 'aws_infrastructure') |
| name | string | – | Filter by directive name (LIKE match, case-insensitive) |
| source_file | string | – | Filter by source_file path (LIKE match) |
| status | string | – | Filter by status (exact match) |
| trigger_type | string | – | Filter by trigger_type (exact match) |
No output schema declared.
No examples provided.
set_custom_return_statement ~107
Add a custom return statement for a helper function. Extends core return_statements with user-defined guidance, context, or preferences. To modify: delete first, then set new statement.
| Name | Type | Req | Description |
|---|---|---|---|
| active | boolean | – | Whether statement is active (default true) |
| description | string | – | Why this was added (optional context) |
| helper_name | string | yes | Helper function name (should match aimfp_core.db helper_functions.name) |
| statement | string | yes | Custom return statement text |
No output schema declared.
No examples provided.
summarize_state_changeset ~168
(For use with InterCommAIMFP) Cheap, low-token counts summary of ONE branch's changeset — add/modify/delete per entity kind, add/remove per reference kind, touched files/modules, and warning count — WITHOUT returning the full ~8k-token object. Affordable to read for every pending branch before deciding apply order. Identify the changeset by changeset_id (loads the persisted artifact) or by branch+base_commit (re-exports). Pure read.
| Name | Type | Req | Description |
|---|---|---|---|
| base_commit | string | – | 3-way base / branch point (used with branch) |
| branch | string | – | Git ref whose changeset to summarize (requires base_commit) |
| changeset_id | string | – | Handle from a prior export_state_changeset (loads the persisted artifact, no git work) |
No output schema declared.
No examples provided.
swap_completion_paths_order ~42
Swap order_index of two completion paths
| Name | Type | Req | Description |
|---|---|---|---|
| id1 | integer | yes | First completion path ID |
| id2 | integer | yes | Second completion path ID |
No output schema declared.
No examples provided.
sync_git_state ~20
Update project.last_known_git_hash with current Git HEAD
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
toggle_tracking_feature ~36
Enable/disable tracking feature
| Name | Type | Req | Description |
|---|---|---|---|
| enabled | boolean | yes | Enable or disable |
| feature_name | string | yes | Tracking feature name |
No output schema declared.
No examples provided.
unlink_files_from_task ~99
Remove file links from a task, subtask, or sidequest — e.g. a file auto-linked to the wrong in_progress item. Does not touch the files.
| Name | Type | Req | Description |
|---|---|---|---|
| file_ids | array | yes | File IDs to unlink |
| task_id | integer | yes | ID of the task, subtask, or sidequest |
| task_type | string | – | 'task', 'subtask', or 'sidequest' (default 'task') |
No output schema declared.
No examples provided.
update_completion_path ~73
Update completion path
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | New description (NULL = don't update) |
| id | integer | yes | Completion path ID |
| name | string | – | New name (NULL = don't update) |
| status | string | – | 'pending', 'in_progress', 'completed' (NULL = don't update) |
No output schema declared.
No examples provided.
update_directive_preference ~75
Update existing directive preference in directive_preferences table
| Name | Type | Req | Description |
|---|---|---|---|
| active | boolean | – | Update active status |
| description | string | – | Update description |
| directive_name | string | yes | Directive name |
| preference_key | string | yes | Preference key to update (must exist) |
| preference_value | string | – | New preference value |
No output schema declared.
No examples provided.
update_file ~108
Update file metadata
| Name | Type | Req | Description |
|---|---|---|---|
| file_id | integer | yes | File ID to update |
| language | string | – | Language (NULL = don't update) |
| name | string | – | New file name (NULL = don't update) |
| no_flow_reason | string | – | Mark the file as belonging to no flow, with why (config, data) — structure checks then skip it. Empty string clears it (NULL = don't update). |
| path | string | – | New file path (NULL = don't update) |
No output schema declared.
No examples provided.
update_flow ~93
Update flow metadata
| Name | Type | Req | Description |
|---|---|---|---|
| confidence_score | number | – | New confidence score (NULL = don't update) |
| description | string | – | What the flow does now; replaces the old text. Not an evolution log: history goes in add_note(note_type='evolution') (NULL = don't update) |
| flow_id | integer | yes | Flow ID to update |
| name | string | – | New name (NULL = don't update) |
No output schema declared.
No examples provided.
update_function ~82
Update function metadata
| Name | Type | Req | Description |
|---|---|---|---|
| function_id | integer | yes | Function ID to update |
| name | string | – | New function name (NULL = don't update) |
| parameters | array | – | New parameters (NULL = don't update) |
| purpose | string | – | New purpose (NULL = don't update) |
| returns | object | – | New return specification (NULL = don't update) |
No output schema declared.
No examples provided.
update_function_file_location ~56
Move function to different file (rarely used)
| Name | Type | Req | Description |
|---|---|---|---|
| function_id | integer | yes | Function ID to move |
| new_file_id | integer | yes | New file ID |
| old_file_id | integer | yes | Current file ID |
No output schema declared.
No examples provided.
update_functions_for_file ~53
Update multiple functions in a single file
| Name | Type | Req | Description |
|---|---|---|---|
| file_id | integer | yes | File ID |
| functions | array | yes | Array of function update objects [{function_id, name, purpose, parameters, returns}, ...] |
No output schema declared.
No examples provided.
update_interaction ~160
Update interaction metadata
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | New description (NULL = don't update) |
| interaction_id | integer | yes | Interaction ID to update |
| interaction_type | string | – | 'call', 'chain', 'borrow', 'compose', 'pipe' (NULL = don't update) |
| is_indirect | boolean | – | Mark (true) or clear (false) the deliberate-indirect flag (NULL = don't update). True for a deliberate edge the code makes indirectly (dispatch through a tuple/table of functions, a chain data-flow l… |
| source_function_id | integer | – | New source (NULL = don't update) |
| target_function_id | integer | – | New target (NULL = don't update) |
No output schema declared.
No examples provided.
update_item ~91
Update a single item's status, name, or description. Primary use: marking items in_progress or completed as work progresses.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | New description (NULL = don't update) |
| id | integer | yes | Item ID |
| name | string | – | New name (NULL = don't update) |
| status | string | – | 'pending', 'in_progress', 'completed' (NULL = don't update) |
No output schema declared.
No examples provided.
update_items ~120
Batch-update multiple items with the same field values. Primary use: marking multiple items completed at once when parent completes.
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | Field-value pairs to apply to all items (e.g., {status: 'completed'}) |
| ids | array | yes | Array of item IDs to update |
| reference_id | integer | yes | ID of the parent task, subtask, or sidequest that owns every item in ids |
| reference_table | string | yes | Parent the items must belong to: 'tasks', 'subtasks', or 'sidequests' |
No output schema declared.
No examples provided.
update_milestone ~116
Update milestone status, name, or description. When completing, check if all milestones in the path are done to cascade completion.
| Name | Type | Req | Description |
|---|---|---|---|
| completion_path_id | integer | – | New completion path ID (NULL = don't update) |
| description | string | – | New description (NULL = don't update) |
| id | integer | yes | Milestone ID |
| name | string | – | New name (NULL = don't update) |
| status | string | – | 'pending', 'in_progress', 'completed', 'blocked' (NULL = don't update) |
No output schema declared.
No examples provided.
update_module ~79
Update module metadata. Only non-None fields are updated.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | New description |
| external_dependencies | array | – | New dependencies list |
| module_id | integer | yes | Module ID to update |
| name | string | – | New name |
| path | string | – | New path |
| purpose | string | – | New purpose |
No output schema declared.
No examples provided.
update_note ~188
Update note metadata
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | – | Update note content |
| directive_name | string | – | Update directive name |
| id | integer | yes | Note ID to update |
| note_type | string | – | Update note_type |
| reference_id | integer | – | Update reference ID |
| reference_table | string | – | New reference table (NULL = don't update). The project.db table the note is attached to (e.g. 'files', 'tasks', 'flows', 'completion_path'). Must be an existing project.db table name, exactly: unknow… |
| send_with_directive | boolean | – | Update send_with_directive flag. If true and directive_name set, note is included when that directive is retrieved. |
| severity | string | – | Update severity |
| source | string | – | Update source |
No output schema declared.
No examples provided.
update_project ~131
Update project metadata
| Name | Type | Req | Description |
|---|---|---|---|
| goals | array | – | Array of goal strings (NULL = don't update) |
| name | string | – | Project name (NULL = don't update) |
| purpose | string | – | Project purpose (NULL = don't update) |
| status | string | – | 'active', 'paused', 'completed', 'abandoned' (NULL = don't update) |
| user_directives_status | string | – | NULL, 'pending_discovery', 'pending_parse', 'in_progress', 'active', 'disabled' (NULL = don't update) |
| version | integer | – | Version number (NULL = don't update) |
No output schema declared.
No examples provided.
update_project_entry ~43
Update existing entry
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | Field-value pairs to update |
| id | integer | yes | Record ID |
| table | string | yes | Table name |
No output schema declared.
No examples provided.
update_project_root ~49
Update project root in infrastructure table. Failsafe: Inserts if not exists (should never happen, initialized by SQL).
| Name | Type | Req | Description |
|---|---|---|---|
| new_project_root | string | yes | New project root path (absolute path) |
No output schema declared.
No examples provided.
update_project_state ~205
Orchestrated state change for tasks, milestones, and paths. Maps actions (start_task, complete_task, block_task, etc.) to correct status updates and note creation.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Operation: 'start_task', 'complete_task', 'pause_task', 'resume_task', 'block_task', 'unblock_task', 'start_subtask', 'complete_subtask', etc. |
| create_note | boolean | – | Auto-log action as note in notes table |
| data | object | – | Action-specific data (e.g., blocked_by, completion_notes) data.audit_override_reason completes a task/subtask/sidequest despite blocking tracking-audit findings (recorded as a warning note); completi… |
| target_id | integer | yes | ID of target entity |
| target_type | string | yes | Entity type: 'task', 'subtask', 'sidequest', 'milestone', 'completion_path' |
No output schema declared.
No examples provided.
update_settings_entry ~53
Update entry in user settings database
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | Field-value pairs to update |
| record_id | integer | yes | Record ID to update |
| table | string | yes | Table name in user_preferences.db |
No output schema declared.
No examples provided.
update_sidequest ~202
Update sidequest metadata
| Name | Type | Req | Description |
|---|---|---|---|
| audit_override_reason | string | – | Complete despite blocking tracking-audit findings in the linked files. Recorded as a warning note with the outstanding counts; use only when the drift is understood and will be fixed in follow-up wor… |
| description | string | – | New description (NULL = don't update) |
| flow_ids | array | – | Array of flow IDs (NULL = don't update) |
| id | integer | yes | Sidequest ID |
| name | string | – | New name (NULL = don't update) |
| paused_subtask_id | integer | – | New paused subtask ID (NULL = don't update) |
| paused_task_id | integer | – | New paused task ID (NULL = don't update) |
| priority | string | – | 'low', 'medium', 'high', 'critical' (NULL = don't update) |
| status | string | – | 'pending', 'in_progress', 'completed', 'blocked' (NULL = don't update) |
No output schema declared.
No examples provided.
update_source_directory ~30
Update existing source directory in infrastructure table
| Name | Type | Req | Description |
|---|---|---|---|
| new_source_dir | string | yes | New source directory path |
No output schema declared.
No examples provided.
update_subtask ~163
Update subtask metadata
| Name | Type | Req | Description |
|---|---|---|---|
| audit_override_reason | string | – | Complete despite blocking tracking-audit findings in the linked files. Recorded as a warning note with the outstanding counts; use only when the drift is understood and will be fixed in follow-up wor… |
| description | string | – | New description (NULL = don't update) |
| id | integer | yes | Subtask ID |
| name | string | – | New name (NULL = don't update) |
| priority | string | – | 'low', 'medium', 'high', 'critical' (NULL = don't update) |
| status | string | – | 'pending', 'in_progress', 'completed', 'blocked' (NULL = don't update) |
| task_id | integer | – | New task ID (NULL = don't update) |
No output schema declared.
No examples provided.
update_task ~186
Update task metadata
| Name | Type | Req | Description |
|---|---|---|---|
| audit_override_reason | string | – | Complete despite blocking tracking-audit findings in the linked files. Recorded as a warning note with the outstanding counts; use only when the drift is understood and will be fixed in follow-up wor… |
| description | string | – | New description (NULL = don't update) |
| flow_ids | array | – | Array of flow IDs [1, 3, 5] (NULL = don't update) |
| id | integer | yes | Task ID |
| milestone_id | integer | – | New milestone ID (NULL = don't update) |
| name | string | – | New name (NULL = don't update) |
| priority | string | – | 'low', 'medium', 'high', 'critical' (NULL = don't update) |
| status | string | – | 'pending', 'in_progress', 'completed', 'blocked' (NULL = don't update) |
No output schema declared.
No examples provided.
update_theme ~68
Update theme metadata
| Name | Type | Req | Description |
|---|---|---|---|
| confidence_score | number | – | New confidence score (NULL = don't update) |
| description | string | – | New description (NULL = don't update) |
| name | string | – | New name (NULL = don't update) |
| theme_id | integer | yes | Theme ID to update |
No output schema declared.
No examples provided.
update_type ~83
Update type metadata
| Name | Type | Req | Description |
|---|---|---|---|
| definition_json | object | – | New definition (NULL = don't update) |
| description | string | – | New description (NULL = don't update) |
| file_id | integer | – | New file_id (NULL = don't update) |
| name | string | – | New name (NULL = don't update) |
| type_id | integer | yes | Type ID to update |
No output schema declared.
No examples provided.
update_type_function_role ~68
Update relationship role only
| Name | Type | Req | Description |
|---|---|---|---|
| function_id | integer | yes | Function ID |
| role | string | yes | 'factory', 'transformer', 'operator', 'pattern_matcher', 'accessor', 'validator', 'combinator' |
| type_id | integer | yes | Type ID |
No output schema declared.
No examples provided.
update_user_custom_entry ~138
Update entry in user_directives.db table. Every key must be a column of the table (compared without case). On user_directives the approval columns (approved, approved_at, approved_by, approval_hash) and status='active' are refused: approval is a person's decision, recorded by the user's own path (`aimfp directives approve`, or a host calling aimfp.hooks.approval), and activation goes through activate_user_directive.
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | yes | Field-value pairs to update |
| record_id | integer | yes | Record ID to update |
| table | string | yes | Table name in user_directives.db |
No output schema declared.
No examples provided.
update_user_setting ~68
Update existing project-wide user setting in user_settings table
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | New description (optional) |
| scope | string | – | New scope (optional) |
| setting_key | string | yes | Setting key to update (must exist) |
| setting_value | string | – | New setting value |
No output schema declared.
No examples provided.
user_directives_allowed_check_constraints ~67
Returns list of allowed values for CHECK constraint enum fields in user_directives.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.
user_preferences_allowed_check_constraints ~65
Returns list of allowed values for CHECK constraint enum fields in user_preferences.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.
validate_action_config ~196
Checks an action_config against AIMFP's envelope for its action_type BEFORE the row is written; add_user_custom_entry and update_user_custom_entry refuse a non-conforming config. AIMFP validates the ENVELOPE ONLY. api_call, script_execution and notification are generic, so AIMFP can specify them fully. function_call and command name a target that exists in the caller's own project, so AIMFP checks that a target is named and well-formed but never that it resolves - caller_resolved=true marks exactly that, and means 'the shape is right, now check it resolves'. Unknown keys are errors, not ignored. On failure, errors names every offending key and grammar carries the expected envelope.
| Name | Type | Req | Description |
|---|---|---|---|
| action_config | object | yes | The config to check, as an object or a JSON string |
| action_type | string | yes | 'api_call', 'script_execution', 'function_call', 'command', or 'notification' |
No output schema declared.
No examples provided.
validate_trigger_config ~194
Checks a trigger_config against AIMFP's grammar for its trigger_type BEFORE the row is written. add_user_custom_entry and update_user_custom_entry refuse a non-conforming config, so calling this first turns a rejected insert into a fixed config. Time triggers are a discriminated union on 'kind' (interval/daily/weekly/monthly); event, condition and manual have fixed shapes. Unknown keys are errors, not ignored - a typo'd schedule key is the silent failure this exists to surface, because a schedule that never fires produces no log line and no recorded error. On failure, errors names every offending key and grammar carries the expected shape for that trigger_type, so the AI is told what IS expected rather than guessing.
| Name | Type | Req | Description |
|---|---|---|---|
| trigger_config | object | yes | The config to check, as an object or a JSON string |
| trigger_type | string | yes | 'time', 'event', 'condition', or 'manual' |
No output schema declared.
No examples provided.
verify_fanout_ready ~130
(For use with InterCommAIMFP) Pre-fan-out preflight on current main: cheap insurance against silent fan-out corruption. Asserts (a) every relevant row has a stable identity key (hierarchy slugs + function/type entity_key — i.e. backfill_semantic_keys has nothing left to do), (b) .aimfp-project/project.db is committed (clean working tree for that path) so every clone shares the same base, and (c) no schema migration is pending. Returns {ready, blockers}. Run on main BEFORE spawning workers. Pure read.
Input schema present but exposes no named parameters.
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 5 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 5 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.
What did VerifyMCP test on the AIMFP MCP server?
VerifyMCP ran 15 checks on AIMFP, covering Malware scan, Known CVEs, Install scripts, Dependency health and 11 more. One item could not be completed, a gap on our side rather than a finding about AIMFP: Stability. One category scores 0 for that reason, because we only credit what we can confirm. Endpoint Security and Transport & Reachability do not apply to a PyPI package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.