Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

AIMFP

PYPI · AIMFP

Database-driven directives and project tracking for modular functional-procedural AI coding

Available components

76 Trust /100

Last scanned (23 hours ago)

Scores higher than 72% of PyPI servers

Category Project Management

Trust breakdown (7 categories)

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.

Changelog

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.

Diagnostics

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 →

MCP tools · 300 exposed · ~27,909 tokens

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 →

Tool Tokens
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.

NameTypeReqDescription
notice_keystringyesNotice identifier from get_pending_notices (e.g. 'backup_interval_intro')
outcomestring–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.

NameTypeReqDescription
directive_idintegeryesID of the directive to activate

No output schema declared.

No examples provided.

add_completion_path ~107

Add completion path stage

NameTypeReqDescription
descriptionstring–Description
namestringyesCompletion path name (e.g., 'setup', 'core dev', 'finish')
order_indexinteger–Order position (1, 2, 3...)
statusstring–'pending', 'in_progress', 'completed'
theme_idsarray–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

NameTypeReqDescription
activeboolean–Whether preference is active
descriptionstring–Optional note on what this preference does, stored with it in directive_preferences
directive_namestringyesDirective name
preference_keystringyesPreference key
preference_valuestringyesPreference 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.

NameTypeReqDescription
linksarrayyesArray 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.

NameTypeReqDescription
file_idintegeryesFile ID (from reserve_file/finalize_file)
flow_idintegeryesFlow 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.

NameTypeReqDescription
file_idintegeryesFile ID to assign
module_idintegeryesModule 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.

NameTypeReqDescription
linksarrayyesList 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.

NameTypeReqDescription
ai_generatedboolean–True if AI-generated
confidence_scorenumber–Confidence score 0-1
descriptionstring–Flow description
namestringyesFlow name
theme_idsarrayyesIDs 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.

NameTypeReqDescription
linksarrayyesArray 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).

NameTypeReqDescription
descriptionstring–What the dependency is (optional)
interaction_typestringyesInteraction type ('call', 'chain', 'borrow', 'compose', 'pipe')
is_indirectboolean–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.
sourcestringyesSource function name
targetstringyesTarget 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.

NameTypeReqDescription
interactionsarrayyesArray 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.

NameTypeReqDescription
descriptionstring–Item description
namestringyesItem name
reference_idintegeryesID of the parent task, subtask, or sidequest
reference_tablestringyes'tasks', 'subtasks', or 'sidequests'
statusstring–'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'.

NameTypeReqDescription
itemsarrayyesArray of {name: string, description?: string} objects
reference_idintegeryesID of the parent task, subtask, or sidequest
reference_tablestringyes'tasks', 'subtasks', or 'sidequests'

No output schema declared.

No examples provided.

add_milestone ~99

Add milestone to completion path

NameTypeReqDescription
completion_path_idintegeryesCompletion path ID this milestone belongs to
descriptionstring–Milestone description
flow_idsarray–Flows this milestone builds or changes. Optional here; link later with add_milestone_flows.
namestringyesMilestone name
statusstring–'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.

NameTypeReqDescription
linksarrayyesArray 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.

NameTypeReqDescription
descriptionstring–What this module does
external_dependenciesarray–Libraries/services this module wraps (e.g., ['walletconnect', 'stripe'])
namestringyesModule name (e.g., 'wallet_connection', 'validation')
pathstringyesDirectory path relative to source root (e.g., 'src/wallet_connection/')
purposestring–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.

NameTypeReqDescription
contentstringyesNote content/message
directive_namestring–Optional directive context for note
note_typestringyes'clarification', 'pivot', 'research', 'entry_deletion', 'warning', 'error', 'info', 'auto_summary', 'decision', 'evolution', 'analysis', 'task_context', 'external', 'summary'
reference_idinteger–ID of the referenced table entry
reference_tablestring–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_directiveboolean–If true and directive_name set, note is included when that directive is retrieved. Turns notes into contextual reminders that travel with their directive.
severitystring–'info', 'warning', 'error' (default 'info')
sourcestring–'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.

NameTypeReqDescription
linksarrayyesArray 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

NameTypeReqDescription
dataobjectyesField-value pairs
tablestringyesTable name

No output schema declared.

No examples provided.

add_settings_entry ~35

Add entry to user settings database

NameTypeReqDescription
dataobjectyesField-value pairs
tablestringyesTable 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.

NameTypeReqDescription
descriptionstring–Sidequest description
flow_idsarray–JSON array of flow IDs
namestringyesSidequest name
paused_subtask_idinteger–If sidequest during subtask
paused_task_idintegeryesID of the task being paused for this sidequest
prioritystring–Sidequest priority (default: critical)
statusstring–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.

NameTypeReqDescription
descriptionstring–Subtask description
namestringyesSubtask name
parent_task_idintegeryesParent task ID
prioritystring–'low', 'medium', 'high', 'critical'
statusstring–'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.

NameTypeReqDescription
descriptionstring–Task description
flow_idsarray–JSON array of flow IDs
milestone_idintegeryesID of the milestone this task belongs to
namestringyesTask name
prioritystring–Task priority (default: medium)
statusstring–Task status (default: pending)

No output schema declared.

No examples provided.

add_theme ~61

Add project theme

NameTypeReqDescription
ai_generatedboolean–True if AI-generated, False if user-created
confidence_scorenumber–Confidence score 0-1
descriptionstring–Theme description
namestringyesTheme name

No output schema declared.

No examples provided.

add_tracking_note ~162

Add tracking note to user_preferences.db (only when tracking enabled)

NameTypeReqDescription
contentstringyesNote content/message
directive_namestring–Directive that created this note
metadata_jsonstring–Additional context as JSON string
note_typestringyes'fp_analysis', 'user_interaction', 'validation', 'performance', 'debug'
reference_idinteger–Optional ID if referencing project.db entity
reference_namestring–Name of referenced entity (e.g., function name, file path)
reference_typestring–Type of reference (e.g., 'function', 'file', 'directive')
severitystring–'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.

NameTypeReqDescription
relationshipsarrayyesArray 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.

NameTypeReqDescription
dataobjectyesField-value pairs to insert
tablestringyesTable 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

NameTypeReqDescription
contentstringyesNote content/message
metadata_jsonstring–Additional context as JSON string
note_typestringyes'implementation', 'validation', 'execution', 'dependency', 'error', 'optimization', 'user_feedback', 'lifecycle', 'testing', 'general', 'deferred', 'completed', 'obsolete', 'entry_deletion'
reference_idinteger–Optional ID linking to user_directives, helper_functions, etc.
reference_namestring–Name of referenced entity (e.g., directive name, helper name, file path)
reference_typestring–Type of reference: 'directive', 'helper', 'dependency', 'file'
severitystring–'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

NameTypeReqDescription
descriptionstring–Description of the setting
scopestring–Setting scope (default 'project')
setting_keystringyesSetting key (must be unique)
setting_valuestringyesSetting 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.

NameTypeReqDescription
project_rootstringyesPath 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.

NameTypeReqDescription
is_new_sessionboolean–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.

NameTypeReqDescription
typestring–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.

NameTypeReqDescription
add_interactionsarray–Edges to add (interaction_type defaults to 'call').
add_type_linksarray–types_functions links to add.
applyarray–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_idsarray–Functions whose current code hash is recorded as matching their description. Only after reviewing purpose/parameters/returns.
cleanupboolean–Delete the report file after a successful real run.
delete_function_idsarray–Functions to delete; their interactions and type links cascade and are recorded in the manifest.
delete_interaction_idsarray–Interactions to delete.
delete_type_idsarray–Types to delete; their type links cascade and are recorded in the manifest.
dry_runboolean–Do everything, then roll back: the result is exactly what a real run does.
excludeobject–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…
exemptarray–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_idsarray–Interactions to mark is_indirect: deliberate edges the code makes indirectly. Audits never flag them; report deletes skip them.
reasonstringyesWhy these changes are made; recorded in the restore-manifest note.
refresh_signature_function_idsarray–Functions whose parameters are re-read from the source (names, order, types, required/default), keeping each surviving parameter's description.
repoint_interactionsarray–Edges to move to a new source and/or target.
reportstring–report_path returned by an audit tool (project-relative path, absolute path, or bare file name in the audit folder).
unexempt_idsarray–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_idsarray–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.

NameTypeReqDescription
changesetobject–The changeset object produced by export_state_changeset (provenance, entities[], references[]). Optional when changeset_id is given.
changeset_idstring–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.

NameTypeReqDescription
file_idsarray–Tracked file IDs to audit.
module_pathstring–Audit every file under this project-relative directory.
pathsarray–Project-relative file paths to audit (tracked or not).
since_commitstring–Audit files changed since this git ref ('HEAD' = uncommitted work, or a branch/commit): committed, staged, unstaged and new untracked files.
task_idinteger–Audit the files linked to this task (a task includes its subtasks' files).
task_typestring–'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.

NameTypeReqDescription
file_idsarray–Tracked file IDs to audit.
module_pathstring–Audit every file under this project-relative directory.
pathsarray–Project-relative file paths to audit (tracked or not).
since_commitstring–Audit files changed since this git ref ('HEAD' = uncommitted work, or a branch/commit): committed, staged, unstaged and new untracked files.
task_idinteger–Audit the files linked to this task (a task includes its subtasks' files).
task_typestring–'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.

NameTypeReqDescription
file_idsarray–Tracked file IDs to audit.
module_pathstring–Audit every file under this project-relative directory.
pathsarray–Project-relative file paths to audit (tracked or not).
since_commitstring–Audit files changed since this git ref ('HEAD' = uncommitted work, or a branch/commit): committed, staged, unstaged and new untracked files.
task_idinteger–Audit the files linked to this task (a task includes its subtasks' files).
task_typestring–'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.

NameTypeReqDescription
file_idsarray–Tracked file IDs to audit.
fullarray–Finding categories to return inline in full, whatever sample_limit says (e.g. ['stale_descriptions']). Unknown category names are an error.
includearray–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_pathstring–Audit every file under this project-relative directory.
pathsarray–Project-relative file paths to audit (tracked or not).
sample_limitinteger–Findings shown inline per category (default 5; 0 = counts only). The report file always has every finding.
since_commitstring–Audit files changed since this git ref ('HEAD' = uncommitted work, or a branch/commit): committed, staged, unstaged and new untracked files.
task_idinteger–Audit the files linked to this task (a task includes its subtasks' files).
task_typestring–'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.

NameTypeReqDescription
continue_on_errorboolean–Stop on first error or continue processing remaining updates
transactionboolean–All-or-nothing commit vs independent updates
updatesarrayyesList 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

NameTypeReqDescription
blueprint_pathstringyesAbsolute 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.

NameTypeReqDescription
filesarrayyesArray 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.

NameTypeReqDescription
functionsarrayyesArray 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.

NameTypeReqDescription
typesarrayyesArray 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.

NameTypeReqDescription
error_rate_thresholdnumber–Error rate at or above which a directive is reported degraded
project_rootstring–Project root; defaults to the session root
skip_thresholdinteger–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.

NameTypeReqDescription
fieldstringyesField name to get allowed values for
tablestringyesTable name to check for CHECK constraints

No output schema declared.

No examples provided.

Install

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

# add to Claude Code
claude mcp add aryanduntley-aimfp -- uvx aimfp
Common questions

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.