AIMFP
PYPI · AIMFP
Database-driven directives and project tracking for modular functional-procedural AI coding
Available components
Last scanned (6 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.
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 | 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 →
get_category_by_name ~29
Get category by name (fairly frequent)
| Name | Type | Req | Description |
|---|---|---|---|
| category_name | string | yes | Category name |
No output schema declared.
No examples provided.
get_claude_permissions ~180
Returns the Claude Code allowlist (.claude/settings.local.json contents) that pre-approves every AIMFP MCP tool, so the user is not prompted once per tool on first use. Allowlist is derived live from the tool registry so it can never drift. Does NOT write any file — returns ready-to-write JSON + target path; the AI writes/merges it, keeping AIMFP's 'never write outside .aimfp-project/' guarantee intact. Call when the user asks to set up AIMFP permissions or skip approval prompts.
| Name | Type | Req | Description |
|---|---|---|---|
| existing_settings | string | – | Current text of the project's .claude/settings.local.json if it already exists (read it and pass it in). When given, the result is a merge that preserves all non-AIMFP permissions and other top-level… |
No output schema declared.
No examples provided.
get_completion_loop_target ~30
Get where to loop back after completing directive
| Name | Type | Req | Description |
|---|---|---|---|
| from_directive | string | yes | Directive name |
No output schema declared.
No examples provided.
get_completion_paths_by_status ~34
Get completion paths filtered by status
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | yes | 'pending', 'in_progress', 'completed' |
No output schema declared.
No examples provided.
get_core_fields ~28
Get field names and types for a specific table
| Name | Type | Req | Description |
|---|---|---|---|
| table | string | yes | Table name |
No output schema declared.
No examples provided.
get_core_schema ~21
Get complete schema for core database (all tables and fields)
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_core_tables ~16
List all tables in core database
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_current_branch ~15
Get current Git branch name
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_current_commit_hash ~17
Get current Git HEAD commit hash
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_current_progress ~145
Single entry point for scoped project status queries. Replaces 5-10 separate helper calls with one flexible query.
| Name | Type | Req | Description |
|---|---|---|---|
| detail_level | string | – | 'minimal' (counts), 'lean' (default: key columns, open work first, 50 rows), 'full' (every column, every row). 'standard' is accepted as 'lean'. |
| filters | object | – | WHERE-like conditions: {field: value} or {field: {operator: value}} |
| scope | string | – | What to retrieve: 'tasks', 'milestones', 'completion_paths', 'files', 'functions', 'flows', 'themes', 'infrastructure', 'all' |
No output schema declared.
No examples provided.
get_databases ~18
Get list of all available databases with metadata
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_directive_by_name ~92
Load a directive's workflow steps, preferences, and linked notes by name. ALWAYS call BEFORE executing any workflow — directives are the authoritative source, not memory.
| Name | Type | Req | Description |
|---|---|---|---|
| directive_name | string | yes | Directive name to look up |
| project_root | string | – | Project root directory. When provided, also retrieves directive preferences from user_preferences.db and linked notes (send_with_directive=1) from project.db. |
No output schema declared.
No examples provided.
get_directive_content ~84
Read and return the full MD documentation file for a directive. Resolves the md_file_path from aimfp_core.db to an absolute path within the installed package, reads the file, and returns content + absolute path + token estimate.
| Name | Type | Req | Description |
|---|---|---|---|
| directive_name | string | yes | Directive name (e.g., 'fp_purity', 'aimfp_init', 'project_file_write') |
No output schema declared.
No examples provided.
get_directive_execution_stats ~148
Read execution statistics from directive_executions joined to directive names and statuses, for one user directive or all of them. Includes a derived error_rate per row. This is how the AI sees what the user's automation did while no session was open — executions, successes, errors, average and maximum duration, and the last recorded error. On a database at schema 1.3 or later, each row also carries skip_count, consecutive_skip_count, last_skip_time, last_skip_reason, condition_latched and last_condition_eval_time.
| Name | Type | Req | Description |
|---|---|---|---|
| directive_id | integer | – | One directive, or omit for all |
| project_root | string | – | Project root; defaults to the session root |
No output schema declared.
No examples provided.
get_directive_flows ~138
General-purpose query for directive flows by category, type, or directive names. Complements the navigation helpers (get_flows_from_directive, get_flows_to_directive, get_wildcard_flows), which answer where a specific directive routes.
| Name | Type | Req | Description |
|---|---|---|---|
| flow_category | string | – | Filter by category: 'project', 'fp', 'user_preferences', 'git' |
| flow_type | string | – | Filter by type: 'status_branch', 'completion_loop', 'conditional', 'error' |
| from_directive | string | – | Filter by source directive name |
| to_directive | string | – | Filter by target directive name |
No output schema declared.
No examples provided.
get_directive_keywords ~29
Get all intent keywords for a specific directive
| Name | Type | Req | Description |
|---|---|---|---|
| directive_id | integer | yes | Directive ID |
No output schema declared.
No examples provided.
get_directives_by_category ~28
Get all directives in a category
| Name | Type | Req | Description |
|---|---|---|---|
| category_name | string | yes | Category name |
No output schema declared.
No examples provided.
get_directives_by_type ~65
Get all directives filtered by type (orchestration vs reference)
| Name | Type | Req | Description |
|---|---|---|---|
| include_md_content | boolean | – | Include full MD file content |
| type | string | yes | One of: 'fp', 'project', 'git', 'user_system', 'user_preference' |
No output schema declared.
No examples provided.
get_directives_for_helper ~34
Get all directives that use a helper (reciprocal lookup)
| Name | Type | Req | Description |
|---|---|---|---|
| helper_name | string | yes | Helper name |
No output schema declared.
No examples provided.
get_directives_with_intent_keywords ~69
Search directives by intent keywords and return full directive objects
| Name | Type | Req | Description |
|---|---|---|---|
| include_keyword_matches | boolean | – | Include which keywords matched |
| keywords | – | yes | Single keyword or array of keywords |
| match_mode | string | – | "any" for OR logic, "all" for AND logic |
No output schema declared.
No examples provided.
get_file_by_name ~59
Look up a tracked file by name — use BEFORE reading source files. Returns metadata, path, and ID for follow-up queries.
| Name | Type | Req | Description |
|---|---|---|---|
| file_name | string | yes | File name to look up (e.g., 'calculator_id_42.py') |
No output schema declared.
No examples provided.
get_file_by_path ~56
Look up a tracked file by path — use BEFORE reading source files. Returns file metadata and ID for follow-up queries.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | File path to look up (e.g., 'src/calculator.py') |
No output schema declared.
No examples provided.
get_file_ids_from_flows ~40
Get all file IDs associated with flows
| Name | Type | Req | Description |
|---|---|---|---|
| flow_ids | array | yes | Array of flow IDs [1, 3, 5] |
No output schema declared.
No examples provided.
get_files_by_flow ~27
Get all files for a flow
| Name | Type | Req | Description |
|---|---|---|---|
| flow_id | integer | yes | Flow ID |
No output schema declared.
No examples provided.
get_files_by_flow_context ~39
Get all files for a flow with functions embedded in each file dict.
| Name | Type | Req | Description |
|---|---|---|---|
| flow_id | integer | yes | Flow ID to get files for |
No output schema declared.
No examples provided.
get_flow_by_name ~32
Get flow by name (fairly frequent)
| Name | Type | Req | Description |
|---|---|---|---|
| flow_name | string | yes | Flow name to look up |
No output schema declared.
No examples provided.
get_flows_for_file ~28
Get all flows for a file
| Name | Type | Req | Description |
|---|---|---|---|
| file_id | integer | yes | File ID |
No output schema declared.
No examples provided.
get_flows_for_milestone ~50
Get the flows a milestone builds or changes (id, name, description). Use for task flow_ids and before starting milestone work.
| Name | Type | Req | Description |
|---|---|---|---|
| milestone_id | integer | yes | Milestone ID |
No output schema declared.
No examples provided.
get_flows_for_theme ~28
Get all flows for a theme
| Name | Type | Req | Description |
|---|---|---|---|
| theme_id | integer | yes | Theme ID |
No output schema declared.
No examples provided.
get_flows_from_directive ~45
Get all flows originating from a directive (what comes next?). Returns raw flow data - AI evaluates conditions.
| Name | Type | Req | Description |
|---|---|---|---|
| from_directive | string | yes | Source directive name |
No output schema declared.
No examples provided.
get_flows_to_directive ~43
Get all directive flows leading to a directive (what leads here?). Useful for understanding directive prerequisites.
| Name | Type | Req | Description |
|---|---|---|---|
| to_directive | string | yes | Target directive name |
No output schema declared.
No examples provided.
get_fp_directive_index ~27
Get lightweight FP directive index grouped by category (names only, not full definitions)
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_from_core ~53
Get records by ID(s), or all records if empty array
| Name | Type | Req | Description |
|---|---|---|---|
| id_array | array | yes | Array of integer IDs to fetch, **empty array [] returns ALL records** |
| table | string | yes | Table name |
No output schema declared.
No examples provided.
get_from_core_where ~90
Flexible filtering with structured JSON conditions
| Name | Type | Req | Description |
|---|---|---|---|
| conditions | object | yes | Field-value pairs (AND logic), e.g., `{"type": "fp", "category": "purity"}` |
| limit | integer | – | Maximum rows to return |
| orderby | string | – | Sort order, e.g., "name ASC" or "id DESC" |
| table | string | yes | Table name |
No output schema declared.
No examples provided.
get_from_project ~53
Get records by ID(s) - **EMPTY ARRAY NOT ALLOWED**
| Name | Type | Req | Description |
|---|---|---|---|
| id_array | array | yes | Array of integer IDs - **MUST contain at least one ID** |
| table | string | yes | Table name |
No output schema declared.
No examples provided.
get_from_project_where ~60
Flexible filtering with structured JSON conditions
| Name | Type | Req | Description |
|---|---|---|---|
| conditions | object | yes | Field-value pairs (AND logic) |
| limit | integer | – | Maximum rows to return |
| orderby | string | – | Sort order |
| table | string | yes | Table name |
No output schema declared.
No examples provided.
get_from_settings ~53
Get records by ID(s) - **EMPTY ARRAY NOT ALLOWED**
| Name | Type | Req | Description |
|---|---|---|---|
| id_array | array | yes | Array of integer IDs - **MUST contain at least one ID** |
| table | string | yes | Table name |
No output schema declared.
No examples provided.
get_from_settings_where ~43
Flexible filtering with structured JSON conditions
| Name | Type | Req | Description |
|---|---|---|---|
| conditions | object | yes | Field-value pairs (AND logic) |
| table | string | yes | Table name in user_preferences.db |
No output schema declared.
No examples provided.
get_from_user_custom ~64
Get records by ID(s) from user_directives.db - **EMPTY ARRAY NOT ALLOWED**
| Name | Type | Req | Description |
|---|---|---|---|
| id_array | array | yes | Array of integer IDs - **MUST contain at least one ID** |
| table | string | yes | Table name in user_directives.db |
No output schema declared.
No examples provided.
get_from_user_custom_where ~52
Flexible filtering with structured JSON conditions on user_directives.db tables
| Name | Type | Req | Description |
|---|---|---|---|
| conditions | object | yes | Field-value pairs combined with AND logic |
| table | string | yes | Table name in user_directives.db |
No output schema declared.
No examples provided.
get_function_by_name ~139
Look up a tracked function by name with file location — use BEFORE reading source files. Returns purpose, parameters, returns, and file path.
| Name | Type | Req | Description |
|---|---|---|---|
| details_only | boolean | – | If true, return only id/name + purpose/parameters/returns (when AI already has the rest) |
| file_id | integer | – | Only the function defined in this tracked file. |
| file_path | string | – | Only the function defined in this project-relative file (names are not unique across files). |
| function_name | string | yes | Function name to look up |
| include_details | boolean | – | If false, omit purpose/parameters/returns for lightweight listing |
No output schema declared.
No examples provided.
get_functions_by_file ~96
Get all tracked function signatures for a file — use BEFORE reading source code. Often provides everything needed without opening the file.
| Name | Type | Req | Description |
|---|---|---|---|
| details_only | boolean | – | If true, return only id/name + purpose/parameters/returns (when AI already has the rest) |
| file_id | integer | yes | File ID to get functions for |
| include_details | boolean | – | If false, omit purpose/parameters/returns for lightweight listing |
No output schema declared.
No examples provided.
get_git_status ~19
Get comprehensive Git state snapshot (orchestrator)
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_helper_by_name ~32
Get specific helper function details (high-frequency)
| Name | Type | Req | Description |
|---|---|---|---|
| helper_name | string | yes | Helper name to look up |
No output schema declared.
No examples provided.
get_helpers_are_sub ~21
Get all sub-helpers (is_sub_helper=true)
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_helpers_are_tool ~19
Get all MCP tools (is_tool=true)
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_helpers_by_database ~40
Get all helpers for a specific database
| Name | Type | Req | Description |
|---|---|---|---|
| target_database | string | yes | Database name ('core', 'project', 'settings', 'user_custom') |
No output schema declared.
No examples provided.
get_helpers_for_directive ~70
Get the list of MCP tools available for a directive workflow. Use to discover which tools to call when executing a directive's steps.
| Name | Type | Req | Description |
|---|---|---|---|
| directive_name | string | yes | Name of the directive to get helpers for |
| include_helpers_data | boolean | – | If true, includes full helper_functions data |
No output schema declared.
No examples provided.
get_hooks ~136
Get AIMFP's library surface for code running OUTSIDE AIMFP (src/aimfp/hooks/). Hooks are NOT MCP tools and you cannot call them — they are imported by code that is not AIMFP, such as a generated Use Case 2 automation runner firing from cron or systemd with no AI session open. Your relationship to a hook is that you WRITE CODE CALLING IT during user_directive_implement. Queries is_hook=1 affirmatively; it replaced get_helpers_not_tool_not_sub, which described hooks as the absence of two other flags and so returned an empty list silently for as long as nothing populated that gap.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_incomplete_completion_paths ~18
Get all non-completed paths
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.