AIMFP
PYPI · AIMFP
Database-driven directives and project tracking for modular functional-procedural AI coding
Available components
Last scanned (8 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 →
get_incomplete_items ~51
Get incomplete items for any parent type
| Name | Type | Req | Description |
|---|---|---|---|
| for_id | integer | yes | Parent ID |
| for_table | string | yes | "tasks", "subtasks", "sidequests" (accepts singular) |
No output schema declared.
No examples provided.
get_incomplete_milestones ~78
Get all non-completed milestones
| Name | Type | Req | Description |
|---|---|---|---|
| detail_level | string | – | 'lean' (default): descriptions are null. 'full': descriptions included. |
| include_task_counts | boolean | – | Attach task_counts to each milestone: {pending, in_progress, blocked, completed, total} (zeros included), from one grouped query. |
No output schema declared.
No examples provided.
get_incomplete_sidequests ~19
Get all non-completed sidequests
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_incomplete_subtasks ~19
Get all non-completed subtasks
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_incomplete_subtasks_by_task ~31
Get incomplete subtasks for specific task
| Name | Type | Req | Description |
|---|---|---|---|
| task_id | integer | yes | Task ID |
No output schema declared.
No examples provided.
get_incomplete_tasks ~88
Get all unfinished tasks (pending, in_progress, blocked) as flat task rows. Does NOT include subtasks, sidequests or items: use get_open_work for the whole open tree (tasks with their open items and subtasks, plus sidequests) in one call.
| Name | Type | Req | Description |
|---|---|---|---|
| detail_level | string | – | 'lean' (default): descriptions are null. 'full': descriptions included. |
No output schema declared.
No examples provided.
get_incomplete_tasks_by_milestone ~58
Get open tasks for a milestone with related subtasks/sidequests
| Name | Type | Req | Description |
|---|---|---|---|
| milestone_id | integer | yes | ID of the milestone to query tasks for |
| skip_pending | boolean | – | If true, excludes pending tasks |
No output schema declared.
No examples provided.
get_infrastructure_by_type ~46
Get all infrastructure of specific type
| Name | Type | Req | Description |
|---|---|---|---|
| type | string | yes | Infrastructure type (e.g., 'language', 'package', 'testing', 'database', 'build_tool') |
No output schema declared.
No examples provided.
get_interactions_by_file ~100
Get all interactions involving functions in a file or a set of files (file_ids), each with source and target function names and file paths — one call for a feature's whole dependency picture.
| Name | Type | Req | Description |
|---|---|---|---|
| file_id | integer | – | File ID to look up interactions for |
| file_ids | array | – | Several file IDs at once (combined with file_id): every edge touching any of them, each once, with source/target names and paths. |
No output schema declared.
No examples provided.
get_interactions_by_function ~92
Get all interactions for a function (both as source and target) — trace dependency graphs
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | – | With function_name: only the function defined in this project-relative file. |
| function_id | integer | – | Exact function ID (takes precedence over function_name). |
| function_name | string | – | Function name to look up (all functions with that name unless file_path narrows it). |
No output schema declared.
No examples provided.
get_items_for_sidequest ~50
Get items for sidequest
| Name | Type | Req | Description |
|---|---|---|---|
| sidequest_id | integer | yes | Sidequest ID |
| status | string | – | 'pending', 'in_progress', 'completed' (NULL = all) |
No output schema declared.
No examples provided.
get_items_for_subtask ~50
Get items for subtask
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | – | 'pending', 'in_progress', 'completed' (NULL = all) |
| subtask_id | integer | yes | Subtask ID |
No output schema declared.
No examples provided.
get_items_for_task ~51
Get items for task, optionally filtered by status
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | – | 'pending', 'in_progress', 'completed' (NULL = all) |
| task_id | integer | yes | Task ID |
No output schema declared.
No examples provided.
get_merge_history ~142
(For use with InterCommAIMFP) Read tool over the existing merge_history and work_branches tables: which branches were integrated, when, with how many conflicts, by whom. Lets the master answer 'has this branch already been applied?' (idempotency / resume after interruption) and gives a human an audit trail. Pure read; small surface over data merge_worker_branch records.
| Name | Type | Req | Description |
|---|---|---|---|
| branch | string | – | Optional source-branch filter (exact match on merge_history.source_branch and work_branches.branch_name) |
| since | string | – | Optional ISO timestamp lower bound on merge_history.merge_timestamp (e.g. '2026-06-26') |
No output schema declared.
No examples provided.
get_milestones_by_path ~91
Get all milestones for a completion path
| Name | Type | Req | Description |
|---|---|---|---|
| completion_path_id | integer | yes | Completion path ID |
| detail_level | string | – | 'lean' (default): descriptions are null. 'full': descriptions included. |
| include_task_counts | boolean | – | Attach task_counts to each milestone: {pending, in_progress, blocked, completed, total} (zeros included), from one grouped query. |
No output schema declared.
No examples provided.
get_milestones_by_status ~96
Get milestones filtered by status
| Name | Type | Req | Description |
|---|---|---|---|
| detail_level | string | – | 'lean' (default): descriptions are null. 'full': descriptions included. |
| include_task_counts | boolean | – | Attach task_counts to each milestone: {pending, in_progress, blocked, completed, total} (zeros included), from one grouped query. |
| status | string | yes | 'pending', 'in_progress', 'completed', 'blocked' |
No output schema declared.
No examples provided.
get_module_by_name ~39
Get module by name. Returns module record with path, purpose, and external_dependencies.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | Module name to look up |
No output schema declared.
No examples provided.
get_module_by_path ~28
Get module by directory path.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Directory path to look up |
No output schema declared.
No examples provided.
get_module_dependencies ~51
Get cross-module dependencies. Finds interactions where a function in this module calls a function in a different module via module_files junction. Returns aggregated counts per target module.
| Name | Type | Req | Description |
|---|---|---|---|
| module_id | integer | yes | Module ID |
No output schema declared.
No examples provided.
get_module_files ~32
Get all files assigned to a module via module_files junction table.
| Name | Type | Req | Description |
|---|---|---|---|
| module_id | integer | yes | Module ID |
No output schema declared.
No examples provided.
get_module_for_file ~39
Find which module a file belongs to. Reverse lookup via module_files junction table.
| Name | Type | Req | Description |
|---|---|---|---|
| file_id | integer | yes | File ID to look up |
No output schema declared.
No examples provided.
get_module_functions ~37
Get all functions in module files. Joins through module_files junction to files to functions.
| Name | Type | Req | Description |
|---|---|---|---|
| module_id | integer | yes | Module ID |
No output schema declared.
No examples provided.
get_module_types ~37
Get all types in module files. Joins through module_files junction to files to types.
| Name | Type | Req | Description |
|---|---|---|---|
| module_id | integer | yes | Module ID |
No output schema declared.
No examples provided.
get_next_completion_path ~19
Get lowest order_index with status != completed
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_notes_comprehensive ~227
Query notes with structured filters (id, type, reference, source, severity, directive). Use note_id to read one note in full, e.g. after search_notes returned a preview.
| Name | Type | Req | Description |
|---|---|---|---|
| directive_name | string | – | 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, newest first (default: all) |
| note_id | integer | – | Exact note ID — returns that single note with full content. Errors if not found or excluded by other filters |
| note_type | string | – | Filter by note_type |
| preview_chars | integer | – | Cap each note's content at this many characters (default: full content) |
| reference_id | integer | – | Filter by reference ID |
| reference_table | string | – | Filter by reference table |
| severity | string | – | Filter by severity ('info', 'warning', 'error') |
| source | string | – | Filter by source ('ai', 'user', 'directive') |
No output schema declared.
No examples provided.
get_open_work ~130
Every open task (pending, in_progress, blocked) with its open items and open subtasks (each with open items), plus open sidequests with their open items, in one read-only call. Ordered in_progress first, then by priority. Replaces get_incomplete_tasks followed by one get_items_for_task per task.
| Name | Type | Req | Description |
|---|---|---|---|
| include_descriptions | boolean | – | Add truncated descriptions to each task, subtask and sidequest. Off keeps the payload small. |
| milestone_id | integer | – | Limit to tasks of one milestone (and their subtasks and sidequests). Omit for all open work. |
No output schema declared.
No examples provided.
get_pending_notices ~105
Get one-time release notices this project has not yet been shown. Returns ONLY unacknowledged notices, already filtered for applicability — a notice pinned to a schema version stays hidden until that database has actually reached it. An empty result is the normal steady state. Called automatically by aimfp_run(is_new_session=true), which puts the result in data.notices and omits the key entirely when nothing is pending, so you never need to call this yourself in a normal session.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_project ~15
Get project metadata (single entry)
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_project_fields ~32
Get field names and types for a specific table
| Name | Type | Req | Description |
|---|---|---|---|
| table | string | yes | Table name to get fields for |
No output schema declared.
No examples provided.
get_project_json_parameters ~37
Get available fields for table to use with generic add/update operations
| Name | Type | Req | Description |
|---|---|---|---|
| table | string | yes | Table name to get available fields for |
No output schema declared.
No examples provided.
get_project_root ~17
Get project root directory from infrastructure table
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_project_schema ~16
Get complete schema for project database
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_project_tables ~16
List all tables in project database
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_recent_directive_errors ~131
Tail the JSON-lines directive error log, newest first, optionally filtered to one directive. Each record carries directive_id, error_type, message, timestamp, and a full traceback when the failure came from a handler exception. The database keeps only the last error per directive (store_last_error_only defaults to 1), so this file is the only place error history survives.
| Name | Type | Req | Description |
|---|---|---|---|
| directive_id | integer | – | Filter to one directive, or omit for all |
| limit | integer | – | Maximum records to return, newest first |
| project_root | string | – | Project root; defaults to the session root |
No output schema declared.
No examples provided.
get_settings_fields ~32
Get field names and types for a specific table
| Name | Type | Req | Description |
|---|---|---|---|
| table | string | yes | Table name to get fields for |
No output schema declared.
No examples provided.
get_settings_json_parameters ~37
Get available fields for table to use with generic add/update operations
| Name | Type | Req | Description |
|---|---|---|---|
| table | string | yes | Table name to get available fields for |
No output schema declared.
No examples provided.
get_settings_schema ~17
Get complete schema for user settings database
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_settings_tables ~17
List all tables in user settings database
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_sidequest_files ~88
Get the files worked on for a sidequest (task_files junction). Files are linked automatically when reserved, finalized, cataloged, or updated (and when their functions/types are finalized, cataloged, or updated) while a work item is in_progress — the most recent in_progress sidequest, else subtask, else task.
| Name | Type | Req | Description |
|---|---|---|---|
| sidequest_id | integer | yes | Sidequest ID |
No output schema declared.
No examples provided.
get_sidequest_flows ~31
Get flow IDs for a sidequest
| Name | Type | Req | Description |
|---|---|---|---|
| sidequest_id | integer | yes | Sidequest ID |
No output schema declared.
No examples provided.
get_sidequests_comprehensive ~123
Advanced sidequest search
| Name | Type | Req | Description |
|---|---|---|---|
| date_range_created | array | – | [start_date, end_date] |
| date_range_updated | array | – | [start_date, end_date] |
| limit | integer | – | Maximum results |
| priority | string | – | 'low', 'medium', 'high', 'critical' |
| status | string | – | 'pending', 'in_progress', 'completed', 'blocked' (NULL = all) |
| subtask_id | integer | – | Filter by paused subtask |
| task_id | integer | – | Filter by paused task |
No output schema declared.
No examples provided.
get_source_directory ~17
Get project source directory from infrastructure table
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_state_operations_template ~41
Return the Python state_operations.py template content for AI to adapt to the project's language. Use this to retrieve the CRUD helper template for .state/runtime.db.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_structure_health ~127
Report the project's modularity layer and every gap in it: themes -> flows -> files, open paths -> themes, open milestones -> flows, module membership. Gaps: flows without theme, themes without flows, files without flow (and no no_flow_reason), files under a module path but in no module, open paths without themes, open milestones without flows, oversized flow descriptions (split candidates). The same report appears in aimfp_status, aimfp_end and watchdog reminders.
| Name | Type | Req | Description |
|---|---|---|---|
| include_summary | boolean | – | Also return the themes/flows/paths/milestones map (default true) |
No output schema declared.
No examples provided.
get_subtasks_by_task ~56
Get subtasks for task, optionally filtered by status
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | – | 'pending', 'in_progress', 'completed', 'blocked' (NULL = all) |
| task_id | integer | yes | Task ID |
No output schema declared.
No examples provided.
get_subtasks_comprehensive ~108
Advanced subtask search
| Name | Type | Req | Description |
|---|---|---|---|
| date_range_created | array | – | [start_date, end_date] |
| date_range_updated | array | – | [start_date, end_date] |
| limit | integer | – | Maximum results |
| priority | string | – | 'low', 'medium', 'high', 'critical' |
| status | string | – | 'pending', 'in_progress', 'completed', 'blocked' (NULL = all) |
| task_id | integer | – | Filter by task |
No output schema declared.
No examples provided.
get_supportive_context ~126
Returns supportive context reference documents by variant. All variants auto-provided: core + coding by aimfp_run(is_new_session=true) for initialized projects, case2 by aimfp_run when Case 2 active, init by aimfp_init(). Also callable on demand to reload stale context.
| Name | Type | Req | Description |
|---|---|---|---|
| variant | string | – | Which context to load: 'core' (workflow, routing, edge cases — default), 'init' (discovery depth, initialization), 'coding' (file loop, DRY, interactions, types), 'case2' (Use Case 2 pipeline) |
No output schema declared.
No examples provided.
get_system_prompt ~194
Returns the AIMFP system prompt (AIMFP's record-keeping backbone) plus where and how to place it. The user's FIRST move — especially for plugin installs where nothing was downloaded — is to ask the AI to add the AIMFP system prompt; the AI calls this and writes the file. Does NOT write anything: returns the prompt text + target path + placement policy; the AI does the write, keeping AIMFP's 'never write outside .aimfp-project/' guarantee. AIMFP content is always placed FIRST; if the existing instructions file is extensive the AI must review/consolidate with the user instead of blindly prepending.
| Name | Type | Req | Description |
|---|---|---|---|
| existing_content | string | – | Current text of the target instructions file (e.g. CLAUDE.md) if it already exists — read it and pass it in so the placement guidance can account for size/consolidation. Omit/empty if there is no exi… |
No output schema declared.
No examples provided.
get_task_context ~257
Get complete context for resuming work on a specific task/subtask/sidequest. Single call retrieves item + associated items + linked files + their functions and modules + flows + optionally interactions and notes. Files are linked automatically when reserved, finalized, cataloged, or updated (and when their functions/types are finalized, cataloged, or updated) while a work item is in_progress — the most recent in_progress sidequest, else subtask, else task. A task's context includes its subtasks' files. Uses cached project root internally.
| Name | Type | Req | Description |
|---|---|---|---|
| detail_level | string | – | 'lean' (default): the work item in full; items with descriptions only while open; flows id/name; files with their functions as id/name; modules id/name/path/purpose. 'full': every record as stored (f… |
| include_history | boolean | – | Include note history for task |
| include_interactions | boolean | – | Include function dependency interactions |
| task_id | integer | yes | ID of the task/subtask/sidequest |
| task_type | string | – | Type of task: 'task', 'subtask', 'sidequest'. Auto-detected from task_id if omitted. |
No output schema declared.
No examples provided.
get_task_files ~92
Get the files worked on for a task, including files linked to its subtasks (task_files junction). Files are linked automatically when reserved, finalized, cataloged, or updated (and when their functions/types are finalized, cataloged, or updated) while a work item is in_progress — the most recent in_progress sidequest, else subtask, else task.
| Name | Type | Req | Description |
|---|---|---|---|
| task_id | integer | yes | Task ID |
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.