aidemd-mcp/server
Manage .aide specs and AIDE methodology for intent-driven development in AI IDEs via MCP.
Discover specs: scan for
.aidefiles and return a progressive-disclosure tree map; with a path, show ancestor intent chain plus detailed subtree.Read specs: read a spec with full context—classified type, related specs, links.
Scaffold specs: create
intent/research/both/todo/planspecs with automatic naming (intent.aiderules).Validate specs: health-check for orphaned/missing specs, naming conflicts, broken links, missing descriptions.
Upgrade AIDE: compare project methodology artifacts to canonical versions and apply per-category updates (pointer-stub, methodology-docs, commands, agents, skills, mcp, ide, readme, brain).
Boot info: report outdated AIDE artifacts and brain MCP precondition status (
ok | no-brain-aide | no-mcp-entry | mcp-drift).Brain entry-point: on-demand return brain
orientation/configinstructions or remediation prose for brain setup issues.Init bootstrap: guided wizard to install AIDE across framework, methodology, commands, agents, skills, MCP, brain, IDE, README.
Inspect code: look up JSDoc, signature, and kind for TS/JS symbols without opening files.
Multi-IDE support: Claude Code, Cursor, Windsurf, Copilot.
Integrates with Obsidian as a brain backend for storing and retrieving project context, allowing the MCP server to manage a knowledge vault via the Obsidian MCP server.
@aidemd-mcp/server
MCP server that brings intent-driven development to any AI-powered IDE.
Manage .aide spec files that live next to your code — the domain context
that architects plan from, implementors build from, and QA validates against.
Learn more at aidemd.dev.
Features
Project-wide spec discovery with a progressive disclosure tree that surfaces intent, research, and QA specs at every level of your codebase
One-command project bootstrap via
aide_init— wires methodology docs, pipeline commands, and this MCP server into your project in a single guided flowAutomatic naming convention enforcement —
aide_scaffoldhandles the.aide/intent.aiderename rules so you never create conflicting specsGuarded pipeline cleanup via
aide_cleanup— removes a closed module's plan, todo and brief only when every checkbox is checked, and refuses with the exact open items otherwiseHealth-check validation via
aide_validate— detects orphaned specs, missing descriptions, broken links, and naming conflicts before they cause driftCode introspection via
aide_inspect— returns JSDoc, signatures, and kind for named symbols without opening files, giving agents Tier 2 progressive disclosure for codeUpgrade drift detection via
aide_upgrade— compares your project's AIDE methodology artifacts against canonical versions and writes updates per-categoryRuntime brain entry-point via
aide_brain— on-demand tool that returns ready-to-execute prose telling the agent which MCP tools to call and how to reach whatever brain backend is wired, without the agent knowing which backend it is
Related MCP server: Foundry MCP
Installation
Quick Start (Claude Code)
Pick a launch mode — init asks, recommends global, and never switches an existing entry.
Global — pick it on a personal machine: reliable startup, stays on the installed version.
npm i -g @aidemd-mcp/server
aidemd-mcp initLocal — pick it for shared repos and cloud/CI: pinned to one exact version that /aide:upgrade moves forward.
npx -y @aidemd-mcp/server@0.11.1 init--mode global|local skips the question (non-interactive runs default to local).
This command:
Merges the AIDE MCP server entry into
.mcp.jsonWrites the bundled brain config template to
.aide/config/brain.aide(the brain location stays unset until/aide:brain configfills it and writes the brain MCP entry)Writes every pipeline slash command to
.claude/commands/aide/Installs 10 canonical pipeline agents to
.claude/agents/aide/and thekanban-maintainerboard agent to.claude/agents/kanban/Installs skills (
study-playbook,brain,aide,aide-handoff,kanban,aide-brain-author) to.claude/skills/Installs the methodology docs hub to
.aide/docs/Writes the
aide-treelauncher to.aide/bin/aide-tree.mjsAdds an AIDE badge to
README.md(appends if not present)
All operations are additive — files that already exist are never overwritten. Safe to re-run at any time.
init asks for no brain location, path or token, and rejects backend flags such as --vault-path. --brain <integration> picks the bundled template (today only obsidian, the default).
After running, open Claude Code and run /aide. On the first run it routes to /aide:brain config, which fills the brain location in .aide/config/brain.aide, writes the brain MCP entry through sync, and seeds the brain. Anything else init could not finish is named in its closing follow-up list.
Syncing brain.aide to .mcp.json
Run this after editing .aide/config/brain.aide — for example, when you update the brain path argument in mcpServerConfig.args or rename the brain in the name field:
Global:
aidemd-mcp syncLocal (use the version your aide entry pins):
npx -y @aidemd-mcp/server@0.11.1 syncsync reads .aide/config/brain.aide, copies mcpServerConfig verbatim into .mcp.json under the fixed brain key, and writes the name field as the server label. Every other key in mcpServers (including your aide entry and any personal MCP integrations) is left byte-identical. If a legacy obsidian key is present it is removed in the same write. The command is idempotent — running it twice produces the same .mcp.json bytes, and the second invocation prints already in sync without touching the file. Exit code is 0 on success (including the no-change case), 1 on a missing or malformed brain.aide or invalid .mcp.json, and 2 on --help.
Example output after updating the brain path in mcpServerConfig.args:
Read .aide/config/brain.aide
Wrote brain MCP entry into .mcp.json
command: mcpvault
args: [D:/notes/new-brain]
Done.Manual Configuration
If you use a client other than Claude Code, or prefer to configure manually, add the server entry to your client's MCP config file.
Claude Code
Global — recommended on your own machine. Install once, then register:
npm i -g @aidemd-mcp/server
claude mcp add aide -- aidemd-mcpOr add to your project's .mcp.json:
{
"mcpServers": {
"aide": {
"command": "aidemd-mcp"
}
}
}Local, pinned — for shared repos and cloud/CI:
claude mcp add aide -- npx -y @aidemd-mcp/server@0.11.1Or add to your project's .mcp.json:
{
"mcpServers": {
"aide": {
"command": "npx",
"args": ["-y", "@aidemd-mcp/server@0.11.1"]
}
}
}The Quick Start command above handles this automatically for Claude Code users.
Claude Desktop
Config file locations:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Global — recommended on your own machine (after npm i -g @aidemd-mcp/server):
{
"mcpServers": {
"aide": {
"command": "aidemd-mcp"
}
}
}Local, pinned — for shared repos and cloud/CI:
{
"mcpServers": {
"aide": {
"command": "npx",
"args": ["-y", "@aidemd-mcp/server@0.11.1"]
}
}
}Claude Desktop does not inherit the terminal PATH. If you use nvm or Homebrew to manage Node,npx may not be found. Run which npx in your terminal to get the absolute path and replace "npx" with it in the config above.
Claude Desktop requires a full quit-and-reopen after any config change.
Cursor
Add to ~/.cursor/mcp.json:
Global — recommended on your own machine (after npm i -g @aidemd-mcp/server):
{
"mcpServers": {
"aide": {
"command": "aidemd-mcp"
}
}
}Local, pinned — for shared repos and cloud/CI:
{
"mcpServers": {
"aide": {
"command": "npx",
"args": ["-y", "@aidemd-mcp/server@0.11.1"]
}
}
}VS Code / Copilot
Add to .vscode/mcp.json:
Global — recommended on your own machine (after npm i -g @aidemd-mcp/server):
{
"servers": {
"aide": {
"command": "aidemd-mcp"
}
}
}Local, pinned — for shared repos and cloud/CI:
{
"servers": {
"aide": {
"command": "npx",
"args": ["-y", "@aidemd-mcp/server@0.11.1"]
}
}
}VS Code / Copilot uses"servers" as the root key, not "mcpServers". Using the wrong root key causes the server to silently fail to load.
Windsurf
Add to ~/.windsurf/mcp.json:
Global — recommended on your own machine (after npm i -g @aidemd-mcp/server):
{
"mcpServers": {
"aide": {
"command": "aidemd-mcp"
}
}
}Local, pinned — for shared repos and cloud/CI:
{
"mcpServers": {
"aide": {
"command": "npx",
"args": ["-y", "@aidemd-mcp/server@0.11.1"]
}
}
}Tools
aide_discover
Scan the project for .aide spec files and return a progressive disclosure tree map showing each spec's type, location, and summary.
Inputs:
path(string, optional): Subdirectory to drill into. When provided, the response opens with the ancestor chain — the cascading intent lineage from root to target, each ancestor showing its description and alignment status — followed by the detailed subtree with summaries and warnings. When omitted, returns a shallow project-wide map (locations and types only).
aide_read
Read an .aide spec file with full context, returning the file content, its classified type (intent/research/plan/todo), related specs in the same directory, and links found in the content.
Inputs:
path(string, required): Path to the.aidefile to read.
aide_scaffold
Create new .aide spec files with automatic naming convention enforcement. Handles the rename rules: intent specs are .aide by default but become intent.aide when research.aide exists in the same folder; creating a research.aide auto-renames any existing .aide to intent.aide.
Inputs:
directory(string, required): Directory where the.aidefile(s) will be created.type(string, required): Type of.aidefile to create. One of:intent,research,both,todo,plan.
aide_cleanup
Remove a closed module's pipeline ephemerals — brief.aide, todo.aide and plan.aide — and nothing else. The preconditions are enforced in code. Where the module has a plan.aide, every plan checkbox must be checked and a todo.aide, if present, must be fully checked. Where it has no plan.aide, a fully checked todo.aide is removed on its own, while a brief.aide (removed only together with its plan), a todo.aide with no checkboxes, or a folder with no ephemerals is refused. A refusal removes nothing and names each unchecked item with its file and line. It never touches intent specs, code or .aide/session.aide, and it refuses paths outside the project. Cross-platform with no shell, so cleanup needs no rm permission — allow the tool by name.
Inputs:
path(string, required): Module folder that holds the ephemerals, relative to the project root.dryRun(boolean, optional): Report what would be removed, or what blocks removal, without removing anything. For inspection only — the real call is already safe.allowEmptyPlan(boolean, optional): Let aplan.aidewith no checkboxes pass. Overrides nothing else, and has no effect where there is noplan.aide.
aide_inspect
Return the JSDoc block, signature, and kind for a named function, method, class, interface, or type alias in the workspace — Tier 2 progressive disclosure for code. Agents can understand a symbol's contract without opening the file.
Inputs:
name(string, required): Symbol name to look up.file(string, optional): Restrict search to a single file (relative to project root).
aide_validate
Run a health check on .aide spec files in the project. Detects orphaned specs, missing specs, naming conflicts (.aide and intent.aide in the same folder), broken links, orphaned research files, and missing frontmatter descriptions.
Inputs:
path(string, optional): Subdirectory to validate. Defaults to the entire project when omitted.
aide_info
Boot-time precondition reporter. Returns two independent fields the orchestrator branches on separately: outdated (an array of stale AIDE artifact keys, comparing the project's versions.json against the shipped manifest), and brain (a { status, name?, hints } object reporting whether the project's brain.aide config is wired into .mcp.json). brain.status is a closed five-status union: ok | no-brain-aide | brain-aide-invalid | no-mcp-entry | mcp-drift, derived by comparing .aide/config/brain.aide against .mcp.json — no disk path validation. brain-aide-invalid means the file is present but unusable and carries a fault: either missing-sections (naming the required sections that are absent) or malformed (with a reason, which also covers a file that cannot be read). name is the user-declared label from brain.aide; it is absent on no-brain-aide and brain-aide-invalid. /aide:brain config is the recovery for both no-brain-aide and brain-aide-invalid. hints is an array of candidate vault locations the orchestrator can surface during recovery.
Inputs:
(none)
aide_brain
On-demand brain entry-point tool. Call this when you need to reach the brain mid-task — do NOT call it on every /aide boot. Boot-time brain precondition state is already reported by aide_info.brain.status; firing aide_brain at boot duplicates that work unnecessarily.
Returns { status, instructions } — exactly two fields. No backend, no connector, no name. status mirrors aide_info.brain.status (ok | no-brain-aide | brain-aide-invalid | no-mcp-entry | mcp-drift). instructions is always non-empty: on ok it is the verbatim body of the selected section (orientation or config, per the optional kind input) from the user's .aide/config/brain.aide (no server substitution); on the failure states it carries remediation prose. no-brain-aide and brain-aide-invalid both route to /aide:brain config; brain-aide-invalid is composed from the detector's fault — either the missing required sections, named, or the malformed reason (including a file that is present but unreadable, which is never reported as absent). no-mcp-entry and mcp-drift tell the user to run sync with the launcher their aide entry uses (aidemd-mcp sync or npx -y @aidemd-mcp/server@<version> sync).
Inputs:
(none)
aide_init
Bootstrap the AIDE development environment into a project using a guided one-at-a-time wizard. On the first call (no category), returns a summary of every step with status and detected framework. On subsequent calls (with category), writes all pending files for that category to disk and returns a manifest.
Inputs:
framework(string, optional): Force a specific framework instead of auto-detecting. One of:claude,cursor,windsurf,copilot.path(string, optional): Custom project root path. Defaults to the server working directory.category(string, optional): Write allwould-createfiles for this category and return a manifest. One of:framework,methodology,commands,agents,skills,mcp,brain,ide,readme. Omit on the first call to get a metadata-only summary.aideMode(string, optional): Launch mode for the aide MCP entry,global(recommended) orlocal. Pass withcategory=mcp.brainMode(string, optional): Launch mode for the brain template's launcher,globalorlocal. Pass withcategory=brain.
aide_upgrade
Compare the AIDE methodology artifacts in this project against canonical versions and return a structured diff grouped by category. On the first call (no category), returns a lightweight summary of every category with drift status. On subsequent calls (with category), writes all diffed or missing files for that category to disk and returns a manifest.
Inputs:
framework(string, optional): Force a specific framework instead of auto-detecting. One of:claude,cursor,windsurf,copilot.path(string, optional): Custom project root path. Defaults to the server working directory.category(string, optional): Write all drifted or missing files for this category and return a manifest. One of:pointer-stub,methodology-docs,version-metadata,commands,agents,skills,mcp,ide,readme. Omit on the first call to get a metadata-only summary.
Getting Started
After adding the server to your MCP client, ask your agent to run aide_init to bootstrap the AIDE methodology into your project. This installs the methodology docs, scaffolds pipeline commands, and wires everything up.
Then try: "Scaffold an intent spec for my authentication module" — the agent will use aide_discover to map your project and aide_scaffold to create the spec in the right place with the right naming conventions.
Development
npm install
npm run build
npm testLicense
Available Tools
10 toolsaide_brainA
On-demand brain entry-point tool. Call this when you need to reach the brain mid-task — do NOT call it on every /aide boot. Boot-time brain precondition state is already reported by aide_info.brain.status; firing aide_brain at boot duplicates that work unnecessarily. It is also how a brain config is set up, repaired or written for any backend, one decision at a time. Every mode is read-only: no call writes to disk.
Optional source parameter — which read runs. Omitted means "host".
"host"— one section of the host's.aide/config/brain.aide, described below."template"—{ template, purpose }: one section of the bundled template (or its launcher, withkind: "launcher") as verbatim bytes, and that section's one-line purpose from the published contract. The answer is the same whatever state the host's config is in. Use it as a worked example when writing that section for another backend."contract"—{ sections }: every contract section in order, each withmarker,role(liveorseed) andpurpose, and no section text."draft"— a structural check of the draft config atpath, with the same rules and fault vocabulary as the host config check, so a draft that passes is ready to swap in. Returns{ outcome, instructions }:valid;invalidwithfault(missing-sectionsand itssections, ormalformedand itsreason);absentwhen no file is atpath;refusedwhenpathis outside the project, and nothing is read. It checks structure, never content.
Optional kind parameter — host and template reads only: any section marker of the published brain contract (see the enum), live or seed; "launcher" only with source: "template". Omitting it means "orientation", the runtime briefing for reaching the brain mid-task. "config" is the integration's wiring flow that /aide:brain config runs. Seed sections are fetched one per call while seeding. path is required with source: "draft" and accepted nowhere else; any other combination is rejected before the tool runs.
Host read response shape: exactly { status, instructions, found, purpose? }. No backend, no connector, no name, no kind.
found: true—instructionsis that section's verbatim bytes from the host's.aide/config/brain.aide: no trimming, no normalization, no${...}substitution.purposeis that section's one-line purpose from the published contract; use it when adapting the section for another backend.found: false—instructionsis remediation, andpurposeis absent. An absent file → run/aide:brain config. A requested section missing from the file → with the user's consent, callaide_upgradewithcategory: "brain". A malformed or unreadable file → the exact fault, a hand fix with the user, then re-check withaide_info. Do not proceed as if the section were available.
The section is returned on every status where the config exists and is well-formed, including brain-aide-invalid with missing sections, no-mcp-entry and mcp-drift.
status mirrors the BrainState tagged union from buildBrainState, with five values: ok, no-brain-aide, brain-aide-invalid, no-mcp-entry, mcp-drift. Branch on found for "did I get the section" and on status for "is the brain healthy".
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Which section: any section marker of the published contract, live or seed, or `launcher` with `source: "template"` only. Omitted means `orientation`. Not accepted with `contract` or `draft`. Seed sections are fetched one per call while seeding. | |
| path | No | Project-relative path of a draft brain config. Required with `source: "draft"` and accepted nowhere else; a path outside the project is refused unread. | |
| source | No | Which read runs. Omitted means `host`: one section of the host's `.aide/config/brain.aide`. `template`: one section or the launcher of the bundled template, with its purpose. `contract`: every contract section with its role and purpose. `draft`: a structural check of the draft config at `path`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and succeeds: it declares 'Every mode is read-only: no call writes to disk', documents the exact host response shape, enumerates all five status values, and explains that 'draft' never reads content and refuses paths outside the project. These are behaviors the agent could not infer from the schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and usage caveat, then organized by parameter and response shape with bold headers and bullets. It is long and partially restates the schema's enum descriptions, but nearly every sentence carries operational detail (status values, fault vocabulary, remediation branches) rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must define returns — and it does, giving the exact host response shape, found:true/false semantics, the four draft outcomes, and the contract/template payload shapes. Nothing an agent needs to call this correctly or interpret its result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters and their enums; the baseline would be 3. The description goes further by specifying per-source response shapes, the 'source: draft requires path' constraint, and the incompatibility of path with any other source, though it retreads some enum text already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource — an on-demand entry point that reads brain sections — and explicitly separates itself from siblings by contrasting with aide_info.brain.status (boot-time reporting) and naming aide_upgrade for remediation. An agent can identify what this tool does and what it is not without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not ('do NOT call it on every /aide boot') with the reason, plus a named alternative for boot state. It also routes to /aide:brain config, aide_upgrade, and aide_info for specific failure cases, so the agent has a decision path for almost every scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aide_cleanupA
Remove a module's pipeline ephemerals (plan.aide, todo.aide, brief.aide) once that module's cycle has closed, leaving the code and the intent specs as the durable record. It never removes, rewrites or reads anything else: intent specs, research specs, code, and .aide/session.aide are all out of reach.
Where plan.aide exists, it refuses unless every plan checkbox is checked and any todo.aide present is fully checked; a missing todo.aide does not block. Where there is no plan.aide, it removes a todo.aide that is fully checked, and refuses a brief.aide (which is removed only together with its plan), a todo.aide with no checkboxes, or a folder with no ephemerals at all. A refusal lists each unchecked item with its file and line, and nothing is removed. By default a plan.aide with no checkboxes is refused; passing allowEmptyPlan: true lets such a plan pass, overrides nothing else, and has no effect where there is no plan.aide.
Call it directly, because the real call is already safe. dryRun is an optional preview for inspection only and is never a required step before the real call.
This is the cross-platform replacement for a shell delete, so it can be permitted by name.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | The module directory whose ephemerals to remove, relative to the project root | |
| dryRun | No | Optional. Removes nothing and only reports what a real call would remove. Agents closing a module omit it. | |
| allowEmptyPlan | No | Optional, off by default. Lets a plan.aide with no checkboxes pass. Overrides nothing else, and has no effect where there is no plan.aide. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses exactly what is destroyed versus protected, the refusal conditions (unchecked items, empty/unchecked todo.aide, brief.aide without plan), the refusal reporting format (each unchecked item with file and line, nothing removed), and the allowEmptyPlan exception. This is unusually rich for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is dense but well front-loaded, opening with the core action before enumerating edge cases. Some phrasing about allowEmptyPlan is duplicated between description and schema, but overall every sentence carries decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive cleanup tool with no annotations and no output schema, the description covers all the behavioral ground an agent needs: scope, protected files, refusal conditions, error reporting, and the two optional flags. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented in the schema with nearly identical wording to the description (allowEmptyPlan's 'overrides nothing else' phrasing appears in both). The description adds little syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — removing a module's pipeline ephemerals (plan.aide, todo.aide, brief.aide) after the cycle closes — and explicitly bounds it by naming everything it never touches (intent specs, research specs, code, session.aide). An agent can distinguish this cleanup tool from siblings like aide_validate or aide_inspect without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear use conditions (only once a module's cycle has closed, only when checks are complete) and explicit invocation guidance ('Call it directly... dryRun... is never a required step'). It does not name sibling alternatives for the cleanup decision, but the when-to-use context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aide_discoverA
Scan for .aide spec files in this project. Returns a tree map of where specs live, following progressive disclosure.
Without a path: returns a lightweight project-wide map — file locations and types only, no content. Use this once to understand the project's spec architecture.
With a path: the response opens with the ancestor chain — the cascading intent lineage from project root down to the target directory, with each ancestor showing its description and alignment status (aligned/misaligned when set). The ancestor chain gives you the full inherited context before you read a single spec body. After the ancestor chain comes the detailed subtree of the target directory — summaries extracted from file content and anomaly warnings. Use this to drill into the area you're working on.
.aide files are progressive disclosure specs that live next to orchestrator code — they contain intent (strategy, implementation contracts, anti-patterns), research (sources, data, patterns), or QA checklists (todo). Read .aide files BEFORE reading code — they are the context layer between folder structure and implementation details.
File types (.aide, intent.aide, research.aide, plan.aide, todo.aide):
.aide — Intent spec (default). Strategy, contracts, anti-patterns.
intent.aide — Same as .aide, used only when research.aide exists in the same folder.
research.aide — Raw research. Sources, data points, pattern synthesis.
plan.aide -- Architect's implementation plan. Checkboxed steps for the implementor.
todo.aide — QA re-alignment document. Captures where implementation drifted from intent.
Never have both .aide and intent.aide in the same folder.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Subdirectory to drill into. When provided, the response opens with the ancestor chain — the cascading intent lineage from root to target, each ancestor showing its description and alignment status — followed by the detailed subtree with summaries and warnings. When omitted, returns a shallow project-wide map (locations and types only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: different responses based on path, ancestor chain with alignment status, summaries and warnings, and explains .aide file types. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer but well-structured with clear sections. Front-loaded main purpose. Could be slightly more concise, but every sentence adds value for this complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but the description thoroughly explains the output structure (ancestor chain, subtree) and file types. Covers both modes comprehensively given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter 'path'. The description adds significant context beyond schema: different outcomes, ancestor chain structure, and usage scenarios, enhancing agent understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Scan' and the resource '.aide spec files', returning a 'tree map'. It distinguishes between two modes (with/without path), which differentiates it from siblings like aide_read and aide_inspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance on when to use without path (project-wide overview) and with path (drill into area). Does not explicitly state when not to use, but the progressive disclosure concept and file type explanations provide clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aide_infoA
Boot-time reporter called by the orchestrator at startup. Returns independent top-level fields that the orchestrator must branch on separately:
outdated (array of stale artifact keys) — soft notification.
Compares the host's .aide/versions.json against the canonical manifest shipped with this npm package. Each element names an artifact key that is behind. An empty array means everything is current. A missing .aide/versions.json (old install predating version tracking) silently collapses to []. Staleness is informational — the orchestrator continues with a heads-up to the user.
behind ({ installed, latest } or null) — soft notification. Non-null only when the project's aide entry launches a globally installed server that is older than the latest published version. Suggest npm i -g @aidemd-mcp/server once and continue — it never gates the pipeline. Null when the server is launched locally, is current, or the version check could not run (offline checks pass silently).
brainMigration ({ staleSections, legacyLauncher } or null) — soft notification. Non-null when the brain config has sections whose text matches an earlier template version, or a legacy brain launcher (legacyLauncher lists the reasons: unpinned, unversioned, older-pin, missing-auto-confirm). Mention it once and suggest /aide:brain config; it never gates the pipeline and never changes brain.status.
brain (precondition state) — hard gate.
Reports whether the host's brain MCP entry is wired and consistent. Shape: { status, name?, fault?, hints } — name is absent on no-brain-aide and brain-aide-invalid; fault is present only on brain-aide-invalid. The orchestrator must halt and direct the user to resolve the issue before continuing if status is not 'ok'. No path validation is performed — the package never stats any directory on disk; state derives entirely from comparing .aide/config/brain.aide against .mcp.json.
The five brain.status values:
ok—.aide/config/brain.aideexists, satisfies the required-section contract, and the host's.mcp.jsonbrainentry matches the parsedmcpServerConfig.nameis the user-declared descriptive label from brain.aide. The pipeline may proceed.no-brain-aide—.aide/config/brain.aideis absent. Nonamefield. Remediation: run/aide:brain config, which creates the config.brain-aide-invalid— the file exists but falls short.fault.kindismissing-sections(withfault.sectionsnaming each missing required section) ormalformed(withfault.reason). Nonamefield. Remediation: run/aide:brain config.no-mcp-entry— brain.aide parsed successfully but the host's.mcp.jsonis absent, malformed, or has nomcpServers.brainkey.nameis present. Remediation: run sync with the same launcher the project'saideMCP entry uses —aidemd-mcp syncwhen the project'saideMCP entry runs the globally installedaidemd-mcp, ornpx -y @aidemd-mcp/server@<version> syncwith the version that entry pins when it runs through npx.mcp-drift— brain.aide and.mcp.jsonboth exist but theirbrainentries disagree oncommandorargs.nameis present. Remediation: run sync with the same launcher the project'saideMCP entry uses —aidemd-mcp syncwhen the project'saideMCP entry runs the globally installedaidemd-mcp, ornpx -y @aidemd-mcp/server@<version> syncwith the version that entry pins when it runs through npx.
hints is always present on every status — an array of candidate brain root paths the orchestrator can surface during recovery.
No parameters needed — uses the server's working directory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses that staleness is informational only, that a missing versions.json silently collapses to [], that `behind` is null when offline, that no path validation or directory stat ever occurs, and exactly which statuses require halting. These are genuine behavioral traits beyond anything the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The response is long, but it is front-loaded with the soft-vs-hard-gate distinction and uses bolded field names as scannable anchors, so the structure aids navigation. It is dense rather than wasteful, though the two lengthy remediation paragraphs about `no-mcp-entry`/`mcp-drift` contain duplicated wording that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must fully describe the return shape — and it does, covering every top-level field, the null conditions, the five `brain.status` values with their faults and remediations, and the always-present `hints` array. An agent has everything needed to interpret and branch on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The description adds a small amount of useful context by noting that the call relies on the server's working directory, which explains how a zero-arg tool determines its target, but there are no parameter semantics to enrich further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific use case — 'Boot-time reporter called by the orchestrator at startup' — and enumerates the exact fields returned (outdated, behind, brainMigration, brain), making the resource and function unambiguous. However, it never differentiates itself from plausible siblings like aide_inspect or aide_validate, which also sound like status/config readers, so it falls short of the rubric's 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the invocation context (called by the orchestrator at startup) and gives explicit branching guidance: soft notifications that never gate, versus `brain` as a hard gate where the orchestrator 'must halt' when status is not 'ok'. It never names an alternative tool to use instead, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aide_initA
Bootstrap the AIDE development environment into a project. Returns structured JSON for agent consumption — not prose.
The tool uses a two-call pattern for progressive disclosure:
First call (no category param): Returns a lightweight summary — every step with name, status (would-create/would-overwrite/would-skip/exists), category, and filePath, but NO content fields. Also returns brainHints (brain root candidates) and detected framework. Use this to understand what needs to be done and which categories require user prompts.
Second call (with category param): The tool writes all would-create AND approved would-overwrite files directly to disk itself and returns a manifest — steps with filePath, status (created, overwritten, or exists), and name, but NO content. would-skip steps stay would-skip in the manifest (tool writes nothing for them). The agent never sees file content and never uses the Write tool for new files.
Exception — MCP steps: For MCP steps, the manifest includes prescription data (key name and entry object) so the agent can read the existing config, merge, and write. The tool never touches MCP config directly.
Exception — brain category: The Brain config (brain.aide) step carries brainSummary on every call, including the summary: sections (each section's marker, role, seedPath for seeds, and templateBytes), missingSections, staleSections, legacyLauncher reasons and templateIntegration. It never carries section text, purposes, repair blocks or before/after bodies. Missing sections are inserted with aide_upgrade category: "brain", seeds are read one at a time with aide_brain, and migrations are previewed and applied one at a time through aide_upgrade. Sections the user edited and custom launchers are never offered. The tool creates .aide/config/brain.aide when it is absent and never overwrites an existing one.
Exception — IDE VS Code steps: IDE steps that need external tooling (VS Code CLI) return instructions for the agent to execute, since those aren't simple file writes.
Agent branch logic — silent-on-create, prompt-on-overwrite:
After the first call, walk the categories using this rule:
Pure-create category (all steps are
would-create,would-skip, orexists): apply silently by calling withcategory=Ximmediately — no AskUserQuestion. A category with nothing on disk to overwrite has no decision the user can inform.Overwrite-bearing category (any step is
would-overwrite): pause and use AskUserQuestion with structured options. Name the files that would be overwritten. If the user approves, call withcategory=X— the tool overwrites and returnsoverwrittenin the manifest. If the user declines an overwrite but wants the new files, call withcategory=X— the tool writes onlywould-createsteps; thewould-overwritestep stayswould-overwritein the manifest.Inherent-decision categories (framework, brain root path, MCP config merge, launch mode, IDE choice): always use AskUserQuestion regardless of disk state. These are not file-write decisions — filesystem contents cannot resolve them.
IMPORTANT — one-at-a-time wizard pattern using AskUserQuestion:
Do NOT present a summary table of all categories. Do NOT offer "all" as an option. Do NOT ask conversational questions — use the AskUserQuestion tool with structured options at every pause point.
Call without
categoryfirst to get the metadataPresent ONLY the detected framework — use AskUserQuestion with Yes/{alternatives} options. STOP.
Walk categories in order: methodology, commands, agents, skills, mcp, brain, ide, readme. For each:
Pure-create: apply silently (call with
category=X), report results, move to next.Overwrite-bearing: use AskUserQuestion naming the would-overwrite files. STOP. Wait for selection, then call with
category=X. Report manifest (created N, overwrote M). Move to next.Inherent decision: always use AskUserQuestion. STOP.
For brain: read
brainSummaryfrom the step, then direct the user to/aide:brain config. Call withcategory=brainonly to receive the manifest; the tool creates.aide/config/brain.aideonly when absent and never overwrites an existing one./aide:brain configasks the brain's launch mode and passesbrainMode.For MCP: when the aide step is would-create, first ask the aide server's launch mode with AskUserQuestion — "Global (recommended)" (personal machine, reliable startup; stays on its installed version; one-time
npm i -g.) or "Local" (shared repos, cloud/CI; pinned to one version that /aide:upgrade moves forward; flaky cold start.) — and call withcategory=mcpandaideMode. If the returned step carriesglobalPackagewithinstalled: false, ask whether to run itsinstallCommand; run it via Bash only on yes. If the user declines or the install fails, call again withaideMode: "local"and tell the user the server will launch locally. Then use AskUserQuestion with Merge/Skip and merge theprescriptionentry into the existing config yourself (read → merge → write). Never replace an existing aide entry. STOP.For IDE: use AskUserQuestion with multiSelect for Zed/VS Code/Neither. STOP.
Each pause point is ONE AskUserQuestion → wait for selection → then proceed. Never show multiple categories at once. Never ask open-ended conversational questions.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Custom project root path (defaults to server working directory) | |
| aideMode | No | Launch mode for the aide MCP entry, chosen by the user (global recommended). Pass with category=mcp. Omitted means local. | |
| category | No | Write all would-create and approved would-overwrite files for this category to disk and return a manifest (status: created/overwritten/exists; would-skip steps pass through unchanged). Omit on the first call to get a metadata-only summary of all steps. | |
| brainMode | No | Launch mode for the bundled brain template's launcher, chosen by the user in /aide:brain config. Pass with category=brain. Omitted means local. | |
| framework | No | Force a specific framework instead of auto-detecting. Use this when re-calling after the user confirms or overrides detection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden — and it delivers. It discloses that the tool writes files directly to disk, that `would-overwrite` steps require approval, that `would-skip` steps are never written, that it never touches MCP config, and that it never overwrites an existing `.aide/config/brain.aide`. That is unusually rich behavioral context for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the body is extremely long and partly redundant — the branch logic section and the numbered wizard section re-explain the same one-at-a-time rules, and much of the text is agent-turn UI guidance rather than tool semantics. Substantial trimming is possible without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns — and it does in detail: the metadata summary (statuses, brainHints, framework), the write manifest (created/overwritten/exists), MCP `prescription` data, and the brain `brainSummary` shape. For a tool of this complexity, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: the `category` param's role in the two-call pattern, `aideMode` pairing with category=mcp (including the global-vs-local tradeoff and npm install fallback), `brainMode` with category=brain, and `framework` as a forced override on re-call. This goes beyond the schema's field-level text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Bootstrap the AIDE development environment into a project," and immediately frames it as a two-call progressive-disclosure tool. The role is unambiguous. It never names a sibling (aide_scaffold, aide_upgrade, aide_cleanup), so it does not explicitly differentiate itself from adjacent tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Extensive when-to-use guidance: call without `category` first, then per-category, with explicit branch rules for pure-create vs overwrite-bearing vs inherent-decision categories. However, it gives no when-not-to-use and never routes the agent to alternative tools such as aide_upgrade or aide_cleanup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aide_inspectA
Return JSDoc, signature, and kind for a named symbol without opening the full file — Tier 2 progressive disclosure for code. When an agent knows a function name from an import list or orchestrator file, call inspect to learn what the symbol does, what it accepts, and what it returns, based on its contract alone. Searches across TypeScript and JavaScript source files (ts, tsx, js, jsx, mjs, cjs). Use the optional file parameter to narrow the search to a single file when the location is already known.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Optional file path to narrow search to a single file | |
| name | Yes | Symbol name to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool operates without opening the full file (lightweight), and searches across multiple file extensions (ts, tsx, js, jsx, mjs, cjs). It could mention return format or performance constraints, but overall it is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences plus one additional sentence on file types) and front-loaded with the core functionality. Every sentence adds value, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the input and what is returned (JSDoc, signature, kind) adequately for a simple lookup tool. No output schema is needed; the description covers the return values. It fits well within the sibling tools context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. The description adds context beyond schema: it explains how to use the optional file parameter to narrow the search when location is known. This provides meaningful guidance beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns JSDoc, signature, and kind for a named symbol without opening the full file, distinguishing it from siblings like aide_read which opens the full file. The verb 'inspect' and resource 'symbol' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises when to use this tool: when an agent knows a function name from an import list or orchestrator file. It also explains the optional file parameter for narrowing search. However, it does not explicitly state when not to use it or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aide_readA
Read an .aide spec file with full context. Returns the file content, its classified type (intent/research/plan/todo), related specs in the same directory, and links found in the content (relative paths, inline references, URLs). Use this after aide_discover to drill into a specific spec.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the .aide file to read |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It details the output structure (content, type, related specs, links), which goes beyond a minimal description. However, it does not mention error handling or read-only status, though that is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: first defines functionality, second gives usage guidance. No unnecessary words, front-loaded with key details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (1 param, no output schema). The description fully explains the return value and usage context, making it complete for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no additional meaning for the 'path' parameter beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'read', the resource '.aide spec file', and details the returned information (file content, type, related specs, links). It also explicitly distinguishes from sibling tool aide_discover.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to use this tool after aide_discover, providing clear context on when to use it versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aide_scaffoldA
Create new .aide spec files with automatic naming convention enforcement. Handles the naming rules: intent specs are .aide by default, but become intent.aide when research.aide exists in the same folder. Creating a research.aide auto-renames any existing .aide to intent.aide.
Types:
intent — Strategy, contracts, anti-patterns
research — Sources, data, patterns (triggers rename of existing .aide)
both — Creates research.aide + intent.aide pair
todo — QA re-alignment document for QA agents
plan -- Architect's implementation plan (no naming interaction with intent/research)
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Type of .aide file to create | |
| directory | Yes | Directory where the .aide file(s) will be created |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses key behaviors: naming rules, auto-renaming of existing .aide files when creating research.aide, and the specific purpose of each type. It could mention potential side effects like overwriting, but the information is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a clear main sentence followed by bullet points for types. Every sentence contributes meaning without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no output schema, no annotations), the description covers all necessary aspects: purpose, naming conventions, type meanings, and usage context. An agent can correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds significant value beyond the schema by detailing each type's purpose and naming interactions, which helps the agent decide values for the 'type' parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates .aide spec files and enforces naming conventions. It explains the types and interactions, distinguishing it from sibling tools like aide_read or aide_validate, which are for different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for each type (intent, research, etc.) and when to use them, but does not explicitly state when not to use this tool or suggest alternatives. The sibling tools cover other operations, making usage relatively clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aide_upgradeA
Compare the AIDE methodology artifacts in this project against the canonical versions and return structured JSON results grouped by category. Use this when the user asks to update AIDE, sync AIDE, refresh AIDE, check for AIDE updates, or bring AIDE up to date. This is NOT for editing user .aide specs — it inspects methodology infrastructure only.
The tool uses a two-call pattern for progressive disclosure:
First call (no category param): Returns a lightweight summary — every category with file names, statuses, and counts, but NO file content. Use this to understand what has drifted and present a summary to the user. Ask which categories they want to apply.
Second call (with category param): The tool writes all differs/missing files directly to disk itself and returns a manifest — file results with filePath, status ("updated", "created", or "unchanged"), and name, but NO canonicalContent. The agent never sees file content and never uses the Write tool for methodology files.
Repeat the second call for each category the user confirms.
As the calling agent, you must:
Call without
categoryfirst to get the summaryPresent each drifted category (differs/missing) and ask the user which to apply
For each confirmed category, call again with
category=X— the tool writes the files and returns a manifest. Report what was updated/created to the user.For the
mcpcategory, the manifest still includesprescriptiondata — merge the entry into the existing MCP config yourself (read → merge → write). Ifmalformed, tell the user — do not overwrite.For
ide, the manifest may includeinstructionsfor VS Code extension install — execute that command for the user. Zed config is written directly by the tool.For
brain, the summary reportsmissingSections, outdated section text asstaleSectionsand a legacy brain launcher aslegacyLauncher(its reasons), each named separately. The brain category then works through three calls, each one decision at a time: a.category: "brain"(after the user's yes) inserts every missing section from the latest bundled template — byte-identical, in the file's line endings — only when the config launches the template's own brain server. It returns{ outcome: "inserted", inserted }(markers only; empty when nothing is missing) or{ outcome: "adapt", adapt, instructions }naming the sections the user must write for their backend. b.category: "brain"withbrainChange: <marker | "launcher">returns one{ outcome: "change", target, before, after, beforeHash }diff to show the user. It is read-only. For a non-template config it returnsmissingwith the template's version of an absent section instead. c. The same call plus thatbeforeHash, only on the user's yes to that one diff, returnsapplied, or arefusedre-fetch instruction when the bytes changed since the preview. Never batch changes under one yes. Every refusal'sinstructionsnames the next step.
IMPORTANT — one-at-a-time wizard pattern using AskUserQuestion: Do NOT present all categories at once. Walk the user through ONE category at a time using AskUserQuestion with Yes/Skip options. Stop after each question and wait for confirmation before calling with that category.
Categories: pointer-stub, methodology-docs, version-metadata, commands, agents, skills, mcp, ide, readme, brain.
Upgrade surface (user code and user .aide specs are never touched):
AIDE pointer stub in the agent config file
Canonical methodology docs under .aide/docs/
versions.json metadata under .aide/docs/
Slash commands for all pipeline phases
Pipeline agent files, skill templates
MCP server entry in the project's MCP config
IDE file association config (Zed settings, VS Code extension)
The user-owned brain config, only through the brain category: missing sections and confirmed migrations, one consented change at a time
Supports Claude Code, Cursor, Windsurf, and Copilot. Auto-detects the framework or accepts an override.
MCP step: only AIDE's own launch forms for the aide entry are judged, and a prescription never switches the mode. An npx entry matches only when it is npx -y pinned to this server's version, so a differs there is how the pin moves forward deliberately. An aidemd-mcp entry matches as the bare command or an absolute-path shim of it; a path-launched one may carry tip, an informational remark to mention once — never drift, never a merge question. Any other (custom) command under the aide key is left alone and reports matches. The brain entry is not part of the mcp step; a legacy brain launcher is changed only through the brain category's brainChange: "launcher" preview and apply, on the user's yes.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Custom project root path (defaults to server working directory) | |
| category | No | When provided, applies that category. For package-owned categories the call writes all differs/missing files to disk and returns a manifest (no canonicalContent). For `brain` it inserts missing sections (no `brainChange`), previews one change (`brainChange` alone), or applies it (`brainChange` + `beforeHash`); it never rewrites an existing section outside an applied change. When omitted, return all categories as metadata-only summaries (no canonicalContent fields). | |
| framework | No | Force a specific framework instead of auto-detecting. Auto-detection checks for framework-specific files/directories and defaults to Claude Code. | |
| beforeHash | No | The `beforeHash` a `brainChange` preview returned. Turns the call into the guarded apply: the change is written only if the current bytes still hash to this value. | |
| brainChange | No | Brain-category-only selector for one stale section (its marker) or the legacy launcher (`launcher`). Without `beforeHash` the call previews that one change read-only; with `beforeHash` it applies it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the entire burden and does so: it discloses that the tool writes files to disk itself, that no canonicalContent is ever returned, the exact outcome shapes for the brain category, the beforeHash guard and refusal behavior on changed bytes, that user code and specs are never touched, and the MCP matching rules. This is unusually rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and usage are front-loaded in the first two paragraphs, and given the tool's branching brain/mcp behavior, most sentences carry operational weight. It is nevertheless very long and includes recursive prose (the nested brain steps) that partly duplicates the schema's own descriptions, costing some crispness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description must cover returns and it does: manifests, statuses, outcome values, refusal instructions, and the mcp prescription/tip semantics. Combined with 100% parameter coverage, an agent has everything needed to call this correctly across all five parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains that omitting category yields metadata-only summaries, that the second call is what performs writes, and that brainChange alone previews while brainChange + beforeHash applies. The only shortfall is that it reads more as workflow narration than as per-parameter discrimination.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: compare AIDE methodology artifacts against canonical versions and return grouped JSON. It scopes the tool precisely, both positively (methodology infrastructure) and negatively (NOT user .aide specs), which cleanly separates it from sibling tools like aide_init, aide_cleanup, and aide_brain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit triggers are listed (update AIDE, sync AIDE, refresh AIDE, check for updates), an exclusion is stated, and the full agent workflow — call without category, ask per category, repeat with category — is spelled out. The one-at-a-time wizard pattern with AskUserQuestion leaves no ambiguity about when and how to sequence calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aide_validateB
Health check for .aide spec files in the project. Detects orphaned specs (in folders with no orchestrator), missing specs (orchestrators with 3+ helper imports but no .aide), naming conflicts (.aide + intent.aide in same folder), broken links, orphaned research (research.aide without intent spec), and missing descriptions (specs with no description field in frontmatter).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Subdirectory to validate (defaults to entire project) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It lists the specific checks performed, which is good, but it omits details about the output format, side effects, or whether any changes are made. The description is somewhat transparent but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence but front-loaded with the main purpose. It lists multiple items clearly separated by commas. Could be improved with bullet points, but it's reasonably concise and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (multiple checks) and the absence of an output schema, the description covers the input and the nature of the checks. However, it fails to describe what the tool produces (e.g., a report, exit code), which is important for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter 'path' is documented in the schema. The description adds that it defaults to the entire project, which is a slight extension. This meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'health check' and resource '.aide spec files', and lists distinct detections like orphaned specs, missing specs, naming conflicts, etc. This clearly differentiates it from sibling tools like aide_init or aide_read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives, nor does it mention prerequisites or when not to use it. It simply states what it does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.11.1- Changed
aide_brain4 fields changed- changed
Input schema / properties / kind / descriptionPrevious value: -"Which section of brain.aide to return. `\"orientation\"` (default when omitted) returns the runtime briefing for mid-task brain access. `\"config\"` returns the integration-specific wiring flow used by `/aide:brain config`."New value: +"Which section: any section marker of the published contract, live or seed, or `launcher` with `source: \"template\"` only. Omitted means `orientation`. Not accepted with `contract` or `draft`. Seed sections are fetched one per call while seeding." - changed
Input schema / properties / kind / enumPrevious value: -[ - "orientation", - "config" -]New value: +[ + "orientation", + "config", + "playbook-index", + "study-playbook", + "update-playbook", + "research-index", + "kanban-index", + "kanban-create", + "kanban-work", + "kanban-manage", + "kanban-move", + "kanban-complete", + "kanban-stash", + "kanban-review", + "launcher" +] - added
Input schema / properties / pathAdded value: +{ + "description": "Project-relative path of a draft brain config. Required with `source: \"draft\"` and accepted nowhere else; a path outside the project is refused unread.", + "type": "string" +} - added
Input schema / properties / sourceAdded value: +{ + "description": "Which read runs. Omitted means `host`: one section of the host's `.aide/config/brain.aide`. `template`: one section or the launcher of the bundled template, with its purpose. `contract`: every contract section with its role and purpose. `draft`: a structural check of the draft config at `path`.", + "enum": [ + "host", + "template", + "contract", + "draft" + ], + "type": "string" +}
- Added
aide_cleanup - Changed
aide_init3 fields changed- added
Input schema / properties / aideModeAdded value: +{ + "description": "Launch mode for the aide MCP entry, chosen by the user (global recommended). Pass with category=mcp. Omitted means local.", + "enum": [ + "global", + "local" + ], + "type": "string" +} - added
Input schema / properties / brainModeAdded value: +{ + "description": "Launch mode for the bundled brain template's launcher, chosen by the user in /aide:brain config. Pass with category=brain. Omitted means local.", + "enum": [ + "global", + "local" + ], + "type": "string" +} - removed
Input schema / properties / brainPathRemoved value: -{ - "description": "Resolved brain root path. Required when category=brain. The agent provides this after interviewing the user.", - "type": "string" -}
- Changed
aide_upgrade3 fields changed- added
Input schema / properties / beforeHashAdded value: +{ + "description": "The `beforeHash` a `brainChange` preview returned. Turns the call into the guarded apply: the change is written only if the current bytes still hash to this value.", + "type": "string" +} - added
Input schema / properties / brainChangeAdded value: +{ + "description": "Brain-category-only selector for one stale section (its marker) or the legacy launcher (`launcher`). Without `beforeHash` the call previews that one change read-only; with `beforeHash` it applies it.", + "enum": [ + "orientation", + "config", + "playbook-index", + "study-playbook", + "update-playbook", + "research-index", + "kanban-index", + "kanban-create", + "kanban-work", + "kanban-manage", + "kanban-move", + "kanban-complete", + "kanban-stash", + "kanban-review", + "launcher" + ], + "type": "string" +} - changed
Input schema / properties / category / descriptionPrevious value: -"Write all differs/missing files for this category to disk and return a manifest. Omit on the first call to get a metadata-only summary of all categories."New value: +"When provided, applies that category. For package-owned categories the call writes all differs/missing files to disk and returns a manifest (no canonicalContent). For `brain` it inserts missing sections (no `brainChange`), previews one change (`brainChange` alone), or applies it (`brainChange` + `beforeHash`); it never rewrites an existing section outside an applied change. When omitted, return all categories as metadata-only summaries (no canonicalContent fields)."
4 tool updates
v0.6.1- Added
aide_brain - Changed
aide_init2 fields changed- changed
Input schema / properties / brainPath / descriptionPrevious value: -"Resolved brain vault path. Required when category=brain. The agent provides this after interviewing the user."New value: +"Resolved brain root path. Required when category=brain. The agent provides this after interviewing the user." - changed
Input schema / properties / category / descriptionPrevious value: -"Write all would-create files for this category to disk and return a manifest. Omit on the first call to get a metadata-only summary of all steps."New value: +"Write all would-create and approved would-overwrite files for this category to disk and return a manifest (status: created/overwritten/exists; would-skip steps pass through unchanged). Omit on the first call to get a metadata-only summary of all steps."
- Added
aide_inspect - Changed
aide_upgrade1 field changed- changed
Input schema / properties / category / enumPrevious value: -[ - "pointer-stub", - "methodology-docs", - "version-metadata", - "commands", - "agents", - "skills", - "mcp", - "ide", - "readme" -]New value: +[ + "pointer-stub", + "methodology-docs", + "version-metadata", + "commands", + "agents", + "skills", + "mcp", + "ide", + "readme", + "brain" +]
7 tool updates
v0.3.15- First observed
aide_discover - First observed
aide_info - First observed
aide_init - First observed
aide_read - First observed
aide_scaffold - First observed
aide_upgrade - First observed
aide_validate
TDQS
Scored across 10 tools
Each tool has a largely distinct role (cleanup, upgrade, info, brain, init, discover, inspect, read, scaffold, validate). A few boundaries blur — init vs upgrade both write methodology files, and info vs brain both surface brain state — but the descriptions explicitly disambiguate these cases.
All ten tools share the `aide_` prefix followed by a single short snake_case token (aide_read, aide_scaffold, aide_validate, etc.). The convention is uniform throughout, with only a minor verb-vs-noun variance (aide_info, aide_brain) that remains readable.
Ten tools is well within the ideal 3-15 range and each maps to a concrete operation in the AIDE methodology lifecycle. Nothing appears redundant or gratuitous for the server's scope.
The surface covers discovery, read, inspect, scaffold, validate, init, upgrade, cleanup, and brain/info state, giving broad lifecycle coverage. Minor gaps exist — no explicit spec update/edit or rename tool — but agents can work around these via normal file editing.
Maintenance
Related MCP Connectors
Spec-driven development for AI coding agents: live requirements, stories and traceability over MCP
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Turn PRDs and product ideas into structured specs so coding agents build your intent, not theirs.
Code-map tools for AI agents: see a repo's structure first, then edit only what matters.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceThis is a connector to allow Claude Desktop (or any MCP client) to read and search any directory containing Markdown notes (such as an Obsidian vault).395 npm1,352AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceEnables spec-driven development workflows with AI assistants, providing tools for managing specification lifecycles, task dependencies, code navigation, testing, and automated reviews through a unified CLI and MCP interface.4MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI-powered architecture analysis and visualization of codebases, exposing 17 MCP tools for querying components, dependencies, and generating interactive diagrams.16 npm5MIT

NEAT MCP Serverofficial
AlicenseNot gradedqualityAmaintenanceProvides AI agents with a live architecture model of a codebase, enabling queries for root cause analysis, blast radius, and dependency traversal through MCP tools.139 npm22Apache 2.0