aidemd-mcp/server
@aidemd-mcp/server
모든 AI 기반 IDE에 의도 중심 개발(intent-driven development)을 도입하는 MCP 서버입니다.
코드와 함께 존재하는 .aide 사양 파일을 관리하세요. 이는 아키텍트가 계획하고, 구현자가 빌드하며, QA가 검증하는 도메인 컨텍스트입니다.
기능
프로젝트 전체 사양 검색: 코드베이스의 모든 수준에서 의도, 연구 및 QA 사양을 표면화하는 점진적 공개 트리 제공
원-커맨드 프로젝트 부트스트랩:
aide_init을 통해 방법론 문서, 파이프라인 명령 및 이 MCP 서버를 단일 가이드 흐름으로 프로젝트에 연결자동 명명 규칙 강제:
aide_scaffold가.aide/intent.aide이름 변경 규칙을 처리하여 사양 충돌 방지상태 검사 유효성 검사:
aide_validate를 통해 고아 사양, 누락된 설명, 깨진 링크 및 명명 충돌을 드리프트 발생 전에 감지업그레이드 드리프트 감지:
aide_upgrade를 통해 프로젝트의 AIDE 방법론 아티팩트를 표준 버전과 비교하고 카테고리별로 업데이트 작성
Related MCP server: Foundry MCP
설치
빠른 시작 (Claude Code)
가장 빠른 방법은 모든 것을 자동으로 연결하는 단일 npx 명령어를 사용하는 것입니다:
npx @aidemd-mcp/server@latest init이 명령어는 다음을 수행합니다:
AIDE MCP 서버 항목을
.mcp.json에 병합 (파일 생성 또는 이미 존재할 경우 항목 건너뜀)/aide:init슬래시 명령어를.claude/commands/aide/init.md에 작성 (존재할 경우 건너뜀)aide-tree런처를.aide/bin/aide-tree.mjs에 작성 (존재할 경우 건너뜀)
모든 작업은 멱등성(idempotent)을 가지므로 언제든지 안전하게 다시 실행할 수 있습니다.
실행 후 Claude Code를 열고 /aide:init을 실행하여 설정을 완료하세요.
수동 구성
Claude Code 이외의 클라이언트를 사용하거나 수동 구성을 선호하는 경우, 클라이언트의 MCP 구성 파일에 서버 항목을 추가하세요.
Claude Code
claude mcp add aide npx -- -y @aidemd-mcp/server@latest또는 프로젝트의 .mcp.json에 추가하세요:
{
"mcpServers": {
"aide": {
"command": "npx",
"args": ["-y", "@aidemd-mcp/server@latest"]
}
}
}[!NOTE] 위의 빠른 시작 명령어는 Claude Code 사용자를 위해 이를 자동으로 처리합니다.
Claude Desktop
구성 파일 위치:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"aide": {
"command": "npx",
"args": ["-y", "@aidemd-mcp/server@latest"]
}
}
}[!NOTE] Claude Desktop은 터미널 PATH를 상속하지 않습니다. nvm이나 Homebrew를 사용하여 Node를 관리하는 경우
npx를 찾지 못할 수 있습니다. 터미널에서which npx를 실행하여 절대 경로를 얻은 후 위 구성의"npx"를 해당 경로로 바꾸세요.
Claude Desktop은 구성 변경 후 완전히 종료했다가 다시 시작해야 합니다.
Cursor
~/.cursor/mcp.json에 추가하세요:
{
"mcpServers": {
"aide": {
"command": "npx",
"args": ["-y", "@aidemd-mcp/server@latest"]
}
}
}VS Code / Copilot
.vscode/mcp.json에 추가하세요:
{
"servers": {
"aide": {
"command": "npx",
"args": ["-y", "@aidemd-mcp/server@latest"]
}
}
}[!NOTE] VS Code / Copilot은
"mcpServers"가 아닌"servers"를 루트 키로 사용합니다. 잘못된 루트 키를 사용하면 서버가 조용히 로드되지 않습니다.
Windsurf
.windsurf/mcp.json에 추가하세요:
{
"mcpServers": {
"aide": {
"command": "npx",
"args": ["-y", "@aidemd-mcp/server@latest"]
}
}
}도구
aide_discover
프로젝트에서 .aide 사양 파일을 스캔하고 각 사양의 유형, 위치 및 요약을 보여주는 점진적 공개 트리 맵을 반환합니다.
입력:
path(문자열, 선택 사항): 드릴다운할 하위 디렉토리. 제공되면 응답은 루트에서 대상까지의 계단식 의도 계보인 상위 체인(각 상위 항목은 설명 및 정렬 상태를 표시)으로 열리고, 그 뒤에 요약 및 경고가 포함된 상세 하위 트리가 이어집니다. 생략하면 얕은 프로젝트 전체 맵(위치 및 유형만)을 반환합니다.
aide_read
전체 컨텍스트와 함께 .aide 사양 파일을 읽고, 파일 내용, 분류된 유형(intent/research/plan/todo), 동일 디렉토리 내 관련 사양 및 내용에서 발견된 링크를 반환합니다.
입력:
path(문자열, 필수): 읽을.aide파일의 경로.
aide_scaffold
자동 명명 규칙 강제와 함께 새로운 .aide 사양 파일을 생성합니다. 이름 변경 규칙을 처리합니다: 의도 사양은 기본적으로 .aide이지만 동일 폴더에 research.aide가 있으면 intent.aide가 됩니다. research.aide를 생성하면 기존 .aide는 자동으로 intent.aide로 이름이 변경됩니다.
입력:
directory(문자열, 필수):.aide파일이 생성될 디렉토리.type(문자열, 필수): 생성할.aide파일의 유형.intent,research,both,todo,plan중 하나.
aide_validate
프로젝트의 .aide 사양 파일에 대한 상태 검사를 실행합니다. 고아 사양, 누락된 사양, 명명 충돌(동일 폴더 내 .aide 및 intent.aide), 깨진 링크, 고아 연구 파일 및 누락된 프런트매터 설명을 감지합니다.
입력:
path(문자열, 선택 사항): 유효성을 검사할 하위 디렉토리. 생략 시 기본값은 전체 프로젝트입니다.
aide_init
한 번에 하나씩 진행되는 가이드 마법사를 사용하여 AIDE 개발 환경을 프로젝트에 부트스트랩합니다. 첫 번째 호출(카테고리 없음) 시 상태 및 감지된 프레임워크와 함께 각 단계의 요약을 반환합니다. 후속 호출(카테고리 포함) 시 해당 카테고리에 대해 보류 중인 모든 파일을 디스크에 쓰고 매니페스트를 반환합니다.
입력:
framework(문자열, 선택 사항): 자동 감지 대신 특정 프레임워크를 강제합니다.claude,cursor,windsurf,copilot중 하나.path(문자열, 선택 사항): 사용자 지정 프로젝트 루트 경로. 기본값은 서버 작업 디렉토리입니다.category(문자열, 선택 사항): 이 카테고리에 대해would-create인 모든 파일을 작성하고 매니페스트를 반환합니다.framework,methodology,commands,agents,skills,mcp,brain,ide중 하나. 메타데이터 전용 요약을 얻으려면 첫 번째 호출 시 생략하세요.brainPath(문자열, 선택 사항): 확인된 브레인 볼트 경로.category=brain일 때 필수입니다.
aide_upgrade
이 프로젝트의 AIDE 방법론 아티팩트를 표준 버전과 비교하고 카테고리별로 그룹화된 구조화된 diff를 반환합니다. 첫 번째 호출(카테고리 없음) 시 드리프트 상태와 함께 모든 카테고리의 가벼운 요약을 반환합니다. 후속 호출(카테고리 포함) 시 해당 카테고리에 대해 diff가 발생했거나 누락된 모든 파일을 디스크에 쓰고 매니페스트를 반환합니다.
입력:
framework(문자열, 선택 사항): 자동 감지 대신 특정 프레임워크를 강제합니다.claude,cursor,windsurf,copilot중 하나.path(문자열, 선택 사항): 사용자 지정 프로젝트 루트 경로. 기본값은 서버 작업 디렉토리입니다.category(문자열, 선택 사항): 이 카테고리에 대해 드리프트가 발생했거나 누락된 모든 파일을 작성하고 매니페스트를 반환합니다.pointer-stub,methodology-docs,version-metadata,commands,agents,skills,mcp,ide중 하나. 메타데이터 전용 요약을 얻으려면 첫 번째 호출 시 생략하세요.
시작하기
서버를 MCP 클라이언트에 추가한 후, 에이전트에게 aide_init을 실행하여 AIDE 방법론을 프로젝트에 부트스트랩하도록 요청하세요. 이는 방법론 문서를 설치하고, 파이프라인 명령을 스캐폴딩하며, 모든 것을 연결합니다.
그런 다음 다음을 시도해 보세요: "인증 모듈을 위한 의도 사양 스캐폴딩" — 에이전트가 aide_discover를 사용하여 프로젝트를 매핑하고 aide_scaffold를 사용하여 올바른 명명 규칙으로 올바른 위치에 사양을 생성합니다.
개발
npm install
npm run build
npm test라이선스
Available Tools
11 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.
Each file it would remove must record a closed status: completed (re-checked — every checkbox really checked) or abandoned. A file from before statuses existed, with no status but every checkbox checked, also passes. It refuses anything still proposed or approved, a completed file with an open item, a brief.aide with no plan.aide beside it, and a folder with no ephemerals. An abandoned plan takes its brief with it, and where there is no plan.aide a closed todo.aide is removed on its own. A refusal names each open file or item with its file and line, and nothing is removed. Record a closing status with aide_frontmatter first; this tool never sets or infers one.
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. |
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 exact removal scope, status eligibility rules, refusal behavior with file/line reporting, all-or-nothing refusal semantics, and dryRun behavior, plus a clear statement that it never reads or rewrites specs/code/session state. This is unusually rich behavioral context for a destructive file operation.
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 front-loaded with the core action and then expands into the necessary safety conditions. Despite being multi-paragraph, each sentence contributes a concrete rule, refusal case, or invocation constraint, and no part is redundant 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?
For a complex destructive tool with no annotations and no output schema, the description is nearly complete: it covers prerequisites, eligibility, refusal behavior, dryRun, and cross-platform intent. The main remaining gap is that it does not describe the success response or reporting format for a real non-dryRun call.
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 both parameters are already documented. The description reinforces that path is the module directory and that dryRun is an optional preview, but it does not add substantial new parameter-level meaning beyond the schema. Baseline 3 is appropriate when the schema handles parameter documentation.
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: remove a module's pipeline ephemerals (plan.aide, todo.aide, brief.aide) once its cycle has closed. It clearly delimits what is removed from what remains durable (code, intent specs, research specs, session.aide), so an agent can distinguish this cleanup operation from sibling inspection, validation, or frontmatter 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?
It gives explicit timing and prerequisites: call after the module cycle closes and record a closing status with aide_frontmatter first. It also says when the tool refuses (proposed/approved status, open items, orphan brief.aide, empty folder) and notes that dryRun is optional and never required, so the agent knows when and how to invoke it directly.
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, type tags and each spec's one-line description; a plan or todo tag carries its status, e.g. [plan: approved]. Only the head of each file is read. 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, type tags with plan/todo status, and spec descriptions). |
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 well: it discloses that only the head of each file is read, that responses open with an ancestor chain with alignment status, and that subtree output includes summaries and anomaly warnings. It does not address permissions, failures on a non-existent path, or depth limits of the scan.
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 the core behavior, which is good, but the two-mode explanation is duplicated almost verbatim between the description body and the schema description, and the length is heavy for a one-parameter read tool. The file-type glossary earns its place as reference material; the duplication does not.
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 (and does) describe the return shape for both modes, and the tag taxonomy explains how to interpret [plan: approved]-style tags. Gaps remain on error behavior for invalid paths and on how deep the subtree scan descends.
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% and the single path parameter's schema description already spells out both modes, so the description largely restates it. The file-type taxonomy adds interpretive value for reading results but does not deepen understanding of the parameter itself, so this is the baseline 3.
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?
A specific verb and resource ('Scan for .aide spec files in this project') plus the return artifact ('tree map of where specs live'). The two modes are clearly scoped (project-wide map vs. subtree drill-down), but no sibling tool (aide_read, aide_inspect, aide_info) is named to contrast with, which is the only thing separating this from a 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?
Explicit usage contexts are given: 'Use this once to understand the project's spec architecture' and 'Use this to drill into the area you're working on', plus the workflow rule 'Read .aide files BEFORE reading code.' No when-not-to-use cases or named alternatives, 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_frontmatterA
Read or change one governed frontmatter value of an AIDE file, leaving every other byte untouched. Intent specs carry alignment (unreviewed, aligned, misaligned). plan.aide, brief.aide and todo.aide carry one status lifecycle: proposed, approved, completed, abandoned. Only allowed moves are accepted, completed is refused while any item is unchecked or, for a brief, until its plan is completed, and a refusal names the allowed next values. Call with path alone to read a file's governed value without changing it. The session record, research specs and brain.aide carry no governed values. The tool never chooses a value; the caller decides.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path of the AIDE file, relative to the project root | |
| field | No | Governed field to change: alignment (intent specs) or status (plans, todo lists, briefs). Omit with value to read. | |
| value | No | New value for field. Omit with field to read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden well: it states that only allowed lifecycle moves are accepted, describes refusal conditions (unchecked items, incomplete plan for briefs), says refusals name allowed next values, and clarifies that the tool never chooses a value. It does not cover permissions or return shape, but the mutation safety profile is clear.
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 definition is dense but front-loaded around read-or-change behavior, and every sentence contributes operational detail. It could be structured with clearer separation between lifecycle rules and refusal rules, but there is little waste.
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 three-parameter mutation tool with no annotations and no output schema, the description is quite complete: it covers read versus write usage, which files have governed values, lifecycle transitions, and refusal behavior. Minor gaps remain around exact read return format and error cases for invalid paths.
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 already 100%, so the baseline is 3. The description adds meaning beyond the schema by mapping fields to file types (alignment for intent specs, status for plan/brief/todo) and listing the lifecycle values, which helps the agent select valid field/value combinations.
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 first sentence states a specific verb pair ('Read or change') and resource ('one governed frontmatter value of an AIDE file') with clear scope ('leaving every other byte untouched'). It does not name or distinguish itself from sibling tools such as aide_read, but the purpose is unambiguous.
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 gives explicit usage conditions: pass path alone to read, use alignment on intent specs, use status on plan/brief/todo files, and avoid the tool entirely for session records, research specs and brain.aide. It lacks explicit routing to sibling tools, so it falls short of the top score.
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 running server — never against the latest published version, so files that match the version the project runs are current even when a newer release exists. 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, launch, versionsBehind, highlights } or null) — soft notification. Non-null when the running server is older than the latest published version, whatever launch the project's aide entry uses — a global install or npx, pinned or not. installed is the running server's version. launch (global or local) picks the remedy: global → npm i -g @aidemd-mcp/server@{latest}; local → first install latest into the npx cache, then move the project's aide pin to it with aide_upgrade({ category: "mcp", targetVersion: latest }), never a hand edit of .mcp.json; if the install fails, switch nothing; once the newer server runs, /aide:upgrade offers to switch the entry to the global command. versionsBehind (1 or more) counts the published releases after installed up to latest; highlights holds 0–3 one-line notes of what they added or fixed (empty when the release notes were unavailable). Show the count and highlights briefly, never the changelog. Either upgrade takes effect only in a new session. It never gates the pipeline. Null when there is no aide entry, the running version is unknown, the server 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: npx-launch, 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 behavioral burden and does so thoroughly: it explains that no path validation or disk stat occurs, that missing `.aide/versions.json` collapses to `[]`, that offline checks fail silently, that upgrades only take effect in a new session, and that soft fields never gate the pipeline. It also documents every `brain.status` value, its shape, and its remediation.
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 front-loaded with purpose and uses bold field headers and status lists to make a complex return contract navigable. It is long, and the sync remediation text is repeated almost verbatim for `no-mcp-entry` and `mcp-drift`, which is a minor conciseness cost for an otherwise structured definition.
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 and no annotation coverage, so the description must fully explain the tool's return shape and operational meaning. It does: every top-level field, null condition, status enum, fault shape, hint array, and gating consequence is documented.
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 schema has zero parameters, so baseline is 4; the description adds meaningful context by stating no parameters are needed and that the tool uses the server's working directory. That is the only parameter-like semantic relevant here.
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 precise role: a boot-time reporter invoked by the orchestrator at startup. It then enumerates the exact top-level fields returned (`outdated`, `behind`, `brainMigration`, `brain`), making the tool's scope unmistakable and distinct from diagnostic siblings like `aide_inspect` or `aide_validate`.
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 explicitly states when the tool is used (boot-time startup), how the orchestrator must branch on each field, and which conditions are soft notifications versus hard gates. It also tells the agent to halt only when `brain.status` is not `'ok'`, and that the other fields never gate the pipeline.
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 — session record: The Session record (session.aide) step never carries content and the tool never writes it. When it is would-create, its instructions tell you to call aide_scaffold with directory "." and type "session" — do that, unprompted. When .aide/session.aide exists it is exists and is never overwritten.
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, 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.For MCP: when the aide step is would-create, its
globalPackagenames the aide server's global package. Ifinstalledis false, the step also carriesinstructions: act on them before merging — run itsinstallCommandvia Bash first — running AIDE's setup is the consent. If the install fails, tell the user plainly and stop: never merge an entry whose command is not installed. Then use AskUserQuestion with Merge/Skip and merge theprescriptionentry (the globalaidemd-mcpcommand) 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) | |
| 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. | |
| 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 exist, so the description carries the full burden and meets it: it discloses that the tool writes files to disk itself, that it never overwrites the brain config or session record, how would-skip/would-overwrite statuses behave, and what happens on failed MCP installs. It even documents the response shape (manifest fields, brainSummary fields) without an output schema.
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 purpose is front-loaded and the structure is legible, but the text is very long and repeats the overwrite logic twice (branch-logic block, then again in the numbered wizard steps), and includes self-referential noise like 'not prose'. Much of the length is load-bearing for a multi-step wizard, but it could be tightened considerably.
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 3-parameter orchestration tool with no output schema and no annotations, the description supplies everything an agent needs: return shapes for both call modes, per-category step statuses, exception handling for MCP/brain/session/IDE steps, and the interaction pattern. Nothing material is left to inference.
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?
With 100% schema coverage the baseline is 3, and the description goes beyond it by explaining the semantic difference between omitting `category` (metadata-only summary) versus supplying it (writes files and returns a manifest), and by describing when to use `framework` to override detection. It does not add anything about `path` beyond what the schema already says.
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?
Opens with a specific verb+resource: 'Bootstrap the AIDE development environment into a project', and immediately distinguishes itself from siblings by naming aide_upgrade, aide_brain, and aide_scaffold in their respective exception clauses. An agent can tell exactly what this tool does and which sibling handles the adjacent work.
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 two-call protocol (call without `category` first, then per-category), a category ordering walk, and per-case rules (pure-create = apply silently, overwrite-bearing = prompt, inherent-decision = always prompt). It also states exclusions and handoffs ('do not use the Write tool for new files', 'never replace an existing aide entry').
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 a new AIDE working file from its blank template, under its canonical name. It never overwrites: a request for a file that already exists, filled or empty, is a no-op reported as a skip line — remove a file first with aide_cleanup to replace it. New files start with their starting value: an intent spec alignment: unreviewed, a plan or todo list status: proposed. Handles the naming rules, so never pick a name yourself: in a module folder, 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. The project root intent spec always lands at .aide/intent.aide: pass directory ".aide" or "." (both mean the project's .aide folder for intent, research and both). A bare .aide/.aide left by an older project, with no intent.aide beside it, is renamed to .aide/intent.aide with its content kept; if .aide/intent.aide exists, nothing changes. Folders are never treated as spec files. A plan needs an intent spec beside it: scaffolding a plan in a folder with no intent spec (.aide or intent.aide; a research.aide alone does not count) is refused and creates nothing — write the folder's intent spec first. For a root-level plan, pass directory ".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; refused unless the folder already holds an intent spec
session — The project's session record, always at .aide/session.aide whatever directory you pass: the empty placeholder with every section heading. Its single source; never write the placeholder by hand.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Type of file to create: intent, research, both, todo, plan, or session (always .aide/session.aide) | |
| directory | Yes | Directory where the .aide file(s) will be created. For the project root intent spec pass ".aide" or "."; it lands at .aide/intent.aide |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly: it discloses no-overwrite behavior, skip-line reporting, initial values, naming rules, auto-renames, root special cases, plan prerequisites, and session file handling. These are meaningful behavioral traits beyond parameter mechanics.
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 core purpose and no-overwrite rule are front-loaded, and most sentences carry necessary edge-case information. It is dense and lengthy for a two-parameter tool, but the complexity of naming, renaming, and prerequisite behavior justifies most of the detail.
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, lack of annotations, and no output schema, the description is complete: it covers creation behavior, prerequisites, side effects, naming rules, edge cases, and failure/no-op outcomes. An agent would have little reason to guess about how to invoke this 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 already 100%, so the baseline would be 3, but the description adds substantial meaning: it explains the semantic effect of each type, including research-triggered renames, the research+intent pair for both, plan refusal, and the always-fixed session path. Directory semantics for '.aide' and '.' are also clarified beyond 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?
The first sentence states a specific verb and resource: 'Create a new AIDE working file from its blank template, under its canonical name.' It also distinguishes this creation behavior from deletion/replacement by naming aide_cleanup explicitly.
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 gives clear usage conditions and exclusions: existing files become no-ops, plans are refused without an intent spec, and replacement requires aide_cleanup first. It does not broadly compare against other creation/setup siblings such as aide_init, but the when/when-not guidance is strong.
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, a result that carriesprescriptionis merged into the existing MCP config by you (read → merge → write). A result that carriespinMoveorglobalSwitchis never merged by hand: the tool writes it (see the MCP step). 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: the canonical aide entry runs the global command aidemd-mcp. The entry is read under the aide key, or under aidemd-mcp when there is no aide key; the key is never renamed. Without targetVersion, an entry that launches through npx reports differs with globalSwitch: { key, name, installed, installCommand } and no prescription. Tell the user npx launches time out at session start and ask; on yes, run installCommand via Bash first unless installed is true (a failed install: say so and stop). Then category: "mcp" makes the tool rewrite only that entry's command and args to the global command, every other byte unchanged; it re-checks the global install and, while the package is missing, keeps differs and returns instructions naming the install command — install, then call again. A missing aide entry returns the global prescription plus globalPackage; when the package is not installed it also carries instructions — act on them: install first, then merge, and never merge after a failed install. An older server cannot switch itself, so a pinned project first moves its pin to a newer version with targetVersion (only under the aide key; an npx entry under aidemd-mcp gets instructions to call without targetVersion and switch instead) — an exact published x.y.z, normally aide_info's behind.latest, valid only with no category or with category: "mcp". With it, a local (npx) aide entry is judged by its version pin alone: an older, missing or non-exact pin reports differs with pinMove: { from, to } (from is null when unpinned) and no prescription; a pin at or ahead of the target matches and is never moved back. Install the target first (npx -y @aidemd-mcp/server@{to} sync --help prints help starting Usage: and exits 2 by design; anything else means the install failed — then stop and move nothing). Then category: "mcp" with the same targetVersion makes the tool write the move itself, changing only the version inside the package argument — the command form, cmd /c, -y, other servers, formatting and line endings stay byte-identical — and returns status: "updated" with pinMove. A result that keeps status: "differs" with instructions means nothing was written (the pin changed since it was checked, the config cannot be edited byte-safely, or the entry is not a locatable @aidemd-mcp/server spec): relay the instructions. A global entry is never moved; the target is ignored for it. A moved pin takes effect only in a new session — tell the user to start one. 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. | |
| targetVersion | No | Exact published x.y.z version to judge the project's local aide entry's npx pin against (normally aide_info's behind.latest). With category "mcp" the tool moves the pin to it, changing only the version; with no category the move is shown read-only as pinMove. Not valid with any other category. A global entry is never moved. |
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 that the category call writes files directly to disk, that the agent never sees canonicalContent, that brain changes are guarded by beforeHash and refused when bytes drift, and that config edits are byte-preserving (line endings, formatting, 'every other byte unchanged'). Failure modes are also surfaced — failed installs must stop the flow, malformed results must not be overwritten, refused results carry instructions. This is unusually rich behavioral disclosure for a zero-annotation 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?
Structure is genuinely good — purpose first, then the two-call pattern, a numbered agent checklist, then per-category notes — so it is front-loaded. But the 'MCP step' paragraph alone is a multi-hundred-word run-on covering exit code 2, npx timeouts, pinned-vs-global entries, and shim detection, far beyond what is needed to select and invoke the tool. Much of this is error-path guidance that belongs in tool responses, not the selection surface.
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 6-parameter, zero-annotation, no-output-schema tool, the description is complete: it names the manifest fields (filePath, status, name), the brain outcomes (inserted/adapt/change/applied/refused), the mcp result variants (prescription, pinMove, globalSwitch, malformed, instructions), and the ordering constraints among calls. An agent would not need to guess at any return shape before invoking.
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, and the description earns above it by explaining cross-parameter semantics: which calls are legal together (targetVersion only with no category or category 'mcp'), the brainChange preview-vs-apply pairing with beforeHash, and per-category effects of 'category'. Most of this is restated from the schema fields rather than added, and the added value is buried in dense prose rather than attached to the parameters.
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 opening sentence is a specific verb+resource+output: 'Compare the AIDE methodology artifacts ... against the canonical versions and return structured JSON results grouped by category.' It also draws a hard boundary ('NOT for editing user .aide specs — it inspects methodology infrastructure only'). It does not differentiate against the many adjacent siblings (aide_info, aide_validate, aide_brain, aide_scaffold), and its own dual inspect/write nature is only reconciled deep in the body.
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?
Trigger conditions are explicit and enumerated ('update AIDE, sync AIDE, refresh AIDE, check for AIDE updates'), and the when-not case is stated. The two-call progressive-disclosure protocol and the one-at-a-time AskUserQuestion wizard are spelled out step by step. What is missing is routing to alternatives: no sentence says 'use aide_info to just read the version' or 'use aide_brain for brain edits', so sibling selection is left to inference.
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 (a spec whose folder, subfolders included, holds no code — only AIDE files, Markdown and dot-files; the project root intent spec in .aide/ is never orphaned, and a plan's presence never decides it), plans with no intent spec beside them (plan-without-spec — write the folder's spec, never delete the plan), 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), missing descriptions (specs with no description field in frontmatter), files whose frontmatter cannot be parsed, and intent specs whose alignment is missing (missing-alignment) or not one of unreviewed, aligned, misaligned (invalid-alignment).
| 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?
With no annotations, the description carries the full burden, and it does disclose useful detection semantics (root intent spec never orphaned, plan presence never decides orphaning, valid alignment enums). However, it never states whether validation is purely read-only or can mutate files, nor what the response looks like, leaving the most important behavioral question unanswered.
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 purpose is front-loaded in the first clause, but the remainder is one long run-on sentence with deeply nested parentheticals that are hard to parse. The enumerated checks earn their place, but the structure could be far clearer as a list.
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 and no annotations, so the description should cover return shape and mutation behavior; it covers the check catalog but not the result structure or whether findings are returned as codes/severities. Adequate to know what it looks for, incomplete for knowing how to consume 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?
Schema coverage is 100% and the single optional `path` parameter is fully documented in the schema ("Subdirectory to validate (defaults to entire project)"). The description adds nothing about scoping or path semantics, so baseline 3 is appropriate.
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 verb+resource ("Health check for .aide spec files") and enumerates the exact defect classes it detects, so an agent knows precisely what the tool does. It never names a sibling (e.g., aide_inspect, aide_cleanup) to differentiate itself, which is the only thing separating it from a 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?
Usage is implied by "health check" and by the remediation aside for plan-without-spec ("write the folder's spec, never delete the plan"), but there is no explicit when-to-use, when-not-to-use, or alternative-tool routing. The agent must infer that this is the pre-flight/diagnostic step before aide_fix-style work.
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.
6 tool updates
v0.15.0- Changed
aide_cleanup1 field changed- removed
Input schema / properties / allowEmptyPlanRemoved value: -{ - "description": "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.", - "type": "boolean" -}
- Changed
aide_discover1 field changed- changed
Input schema / properties / path / descriptionPrevious value: -"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)."New value: +"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, type tags with plan/todo status, and spec descriptions)."
- Added
aide_frontmatter - Changed
aide_init2 fields changed- removed
Input schema / properties / aideModeRemoved 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" -} - removed
Input schema / properties / brainModeRemoved 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" -}
- Changed
aide_scaffold3 fields changed- changed
Input schema / properties / directory / descriptionPrevious value: -"Directory where the .aide file(s) will be created"New value: +"Directory where the .aide file(s) will be created. For the project root intent spec pass \".aide\" or \".\"; it lands at .aide/intent.aide" - changed
Input schema / properties / type / descriptionPrevious value: -"Type of .aide file to create"New value: +"Type of file to create: intent, research, both, todo, plan, or session (always .aide/session.aide)" - changed
Input schema / properties / type / enumPrevious value: -[ - "intent", - "research", - "both", - "todo", - "plan" -]New value: +[ + "intent", + "research", + "both", + "todo", + "plan", + "session" +]
- Changed
aide_upgrade1 field changed- added
Input schema / properties / targetVersionAdded value: +{ + "description": "Exact published x.y.z version to judge the project's local aide entry's npx pin against (normally aide_info's behind.latest). With category \"mcp\" the tool moves the pin to it, changing only the version; with no category the move is shown read-only as pinMove. Not valid with any other category. A global entry is never moved.", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$", + "type": "string" +}
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 11 tools
Most tools have clear distinct roles: discover/read, scaffold/cleanup/frontmatter, validate, init/upgrade, and code inspect are separable. There is some overlap around brain configuration and health, since aide_info, aide_brain, aide_init, and aide_upgrade all touch brain state or config, but the descriptions explicitly explain when each should be used.
All names use the same snake_case with the aide_ prefix, making the set predictable. However, several names are noun-like or ambiguous (aide_info, aide_brain, aide_frontmatter) rather than consistently verb_noun, which is a minor deviation from the strongest pattern.
Eleven tools is well within the appropriate range for a methodology/spec-management server. Each tool appears to earn its place by covering a distinct phase: discovery, reading, scaffolding, cleanup, validation, initialization, upgrading, brain access, and code inspection.
The surface covers the AIDE spec lifecycle well: discovery, reading, creation, cleanup, validation, frontmatter changes, initialization, upgrades, and brain integration. A minor gap is that there is no dedicated tool for editing arbitrary .aide spec body content, though this may be intentionally delegated to 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).763 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
- AlicenseAqualityCmaintenanceEnables AI coding assistants to understand codebase architecture in real time by parsing source code into a relationship graph and exposing call chains, dependencies, class hierarchies, and conventions via MCP tools.144MIT