Aplomo MCP Server
This server gives coding agents read-only, repository-aware tools to prepare changes, reuse existing code, enforce abstraction gates, and review plans/diffs.
Prepare a change:
aplomo_prepare_changereturns repository structure, architecture rules, and relevant patterns for one request.Understand the repository:
aplomo_understand_repodetects technologies and summarizes modules and symbols.Find existing implementations:
aplomo_find_existing_patternsperforms a bounded search before adding a new abstraction.Validate new abstractions:
aplomo_validate_abstractionrequires reuse or an explicit responsibility/lifecycle justification.Review an implementation plan:
aplomo_review_planchecks coverage of patterns, scope, compatibility, and validation.Review architecture:
aplomo_review_architecturesummarizes architecture configuration and repository structure.Review the current diff:
aplomo_review_diffchecks for risky size, possible secrets, and missing test changes.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Aplomo MCP ServerFind existing patterns for caching before I add a new one."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Aplomo
One repository standard for Cursor, Codex, and Claude Code.
Coding agents are good at writing code. They are less reliable at proving that a new service, class, or module belongs in this repository instead of duplicating something that already exists.
Aplomo gives Cursor, Codex, and Claude Code the same repository-aware workflow. You describe the change normally; Aplomo finds the canonical design patterns, searches for reusable implementations, requires a justification before another abstraction is introduced, and reviews the final diff for duplication and missing validation.
"Add invoice retries and tests"
│
▼
Cursor / Codex / Claude Code
│
├─ one repository preflight
│ pattern catalog · bounded search · architecture
├─ reuse candidate or justify a new abstraction
├─ implementation with focused tests
└─ duplicate · boundary · test · secret review
│
▼
your repository remains in controlAplomo does not proxy prompts, choose a model, or upload repository contents. Its current MCP tools are read-only and its hook events stay in a local, gitignored file.
Why teams use it
One source of truth. Put engineering rules in
.engineering/; Aplomo generates the native files each supported agent expects.Normal requests. No prompt prefix, wrapper chat, or new task syntax.
Less integration drift. The same preflight and final review follow a request when a developer changes coding assistants.
Pattern reuse first. The agent sees relevant implementations before inventing another abstraction.
No-copy gate. A new class, service, interface, or module must reuse a candidate or state why its responsibility or lifecycle is materially different.
Design patterns are repository-owned.
.engineering/patterns.mdrecords canonical implementations and when they should be extended.Bounded reads. Every repository search reports its file and character budget, actual consumption, and whether the result was truncated.
Safe adoption. Existing configuration that Aplomo does not own is preserved and reported instead of silently overwritten.
Local by default. Repository analysis and lifecycle metadata stay on the machine or cloud agent running the task.
Related MCP server: mcp-codebase-intelligence
Install in a repository
Requirements: Python 3.12 or newer, Git, and either uv or pipx.
uv tool install git+https://github.com/marcmendez/aplomo.git
cd your-repository
aplomo init --agents cursor codex claudeWith pipx, replace the first command with:
pipx install git+https://github.com/marcmendez/aplomo.gitRestart or reopen the coding assistant so it loads the new project integration. From then on, make the same requests you already make:
Add pagination to the users endpoint and cover the edge cases with tests.The generated launcher is pinned to Aplomo's isolated Python environment. It does not rely on the PATH inherited by a desktop app.
Choose only the agents you use
aplomo init --agents cursor
aplomo init --agents codex claudeAgent | Native integration | Guide |
Cursor | project rule, MCP server, lifecycle hooks | |
Codex |
| |
Claude Code |
|
Cursor Cloud
Cursor Cloud runs in its own VM. It does not inherit the Aplomo installation or MCP process from your laptop.
Commit
.engineering/and the generated Cursor files.In the cloud environment setup, install Aplomo and regenerate the machine-local launcher:
uv tool install git+https://github.com/marcmendez/aplomo.git aplomo installAdd an stdio MCP server in the Cursor dashboard or Cloud Agent API with:
command: ./.engineering/aplomo-runtime args: mcp --root .
The command runs inside the Cloud VM and reads that checkout only. Cursor documents the VM model and supported MCP transports in its Cloud Agent capabilities and Cloud Agent API.
What gets installed
.engineering/config.yaml is the source of truth; everything else is a native adapter or local runtime file.
your-repository/
├── .engineering/
│ ├── config.yaml # agents and enabled integrations
│ ├── architecture.yaml # boundaries and repository rules
│ ├── patterns.md # canonical patterns and extension rules
│ ├── decisions/ # architecture decisions
│ ├── aplomo-runtime # machine-local launcher, gitignored
│ └── events.jsonl # local lifecycle events, gitignored
├── .cursor/ # Cursor adapters
├── .codex/ # Codex adapters
├── .claude/ # Claude Code adapters
├── .agents/skills/ # portable agent skill
├── AGENTS.md # managed Aplomo section for Codex
└── CLAUDE.md # managed Aplomo section for Claude CodeChange .engineering/config.yaml, then regenerate rather than editing generated adapters:
aplomo installThe reuse-before-create contract
Aplomo treats a new abstraction as a decision, not as the default output of a coding agent.
aplomo_prepare_changereturns the repository map, relevant architecture, the pattern catalog, and a bounded search for existing implementations.The agent starts from the canonical implementation listed in
.engineering/patterns.mdwhen one applies.Before adding a class, service, interface, or module,
aplomo_validate_abstractionsearches for candidates.If candidates exist, the result is
needs_justification. The agent must extend one or explain the materially different responsibility or lifecycle.aplomo_review_diffchecks tracked and untracked files for duplicate class/interface/type declarations, missing tests, possible secrets, and excessive diff size.
This does not pretend that lexical analysis can prove two implementations are semantically identical. It creates an explicit, reviewable gate at the point where duplication usually enters the codebase.
See Patterns, abstraction gates, and read budgets for the status contract, operating guidance, and known limits.
Maintain the pattern catalog
Each entry in .engineering/patterns.md names the responsibility, canonical implementation, extension rule, exception rule, and validation:
## Retry policy
- Responsibility: decide whether a failed operation can be retried
- Canonical implementation: `src/shared/retry.py`
- Extend when: another workflow follows the same attempt and status rules
- Create a new abstraction only when: retry lifecycle or ownership is different
- Validation: `tests/shared/test_retry.py`Read management
Repository-wide reads are not free: they add latency, consume model context, and become noisy in large monorepos. Aplomo uses a configurable source-read budget instead of blindly loading the tree:
context:
max_files: 80
max_chars: 200000
max_matches: 12Candidate files are ranked deterministically by path and query relevance. Each result includes files_available, files_read, chars_read, the configured limits, truncated, and a stop_reason such as complete, match_limit, file_budget, or character_budget.
If truncated is true, “no candidate found” means only “none was found inside this budget.” The agent should refine the query first and widen the budget deliberately only when the scoped search is insufficient. This keeps routine requests cheap without turning the budget into a false proof that no pattern exists.
Plugin and CLI
This repository includes a portable Agent Plugin manifest and Aplomo review skill. The skill can fall back to an agent's native search, test, and diff tools. The CLI installation above adds the full local experience: native project configuration, the repository-aware MCP server, hooks, and the PATH-independent runtime launcher.
The split is deliberate. A public hosted MCP server would require sending repository context to a remote service; Aplomo keeps that context where the coding agent is already running.
Evidence, not promises
The release gate currently covers:
37 automated tests on Python 3.12 and 3.13;
6 deterministic acceptance checks for three-agent configuration, safe installation, byte-for-byte regeneration, MCP initialize/list/call, real subprocess startup, and real hook persistence;
a clean-wheel installation into a fresh Git repository in CI;
manifest/version synchronization and read-only tool annotations.
We also publish the first paired Codex pilot instead of turning it into a marketing claim. Across three small tasks, baseline and Aplomo both passed all 10 hidden checks. Aplomo used two MCP review calls per task, 23% more uncached-plus-output tokens, and 44% more wall time in this single-run sample. It did not establish token savings or a quality uplift. The useful conclusion is narrower: the workflow reached parity while enforcing the same repository checks, and its overhead is now measured. See the benchmark method and pilot result. That pilot measured the 1.0 workflow; the bounded-read and abstraction-gate additions are covered deterministically and still need a repeated agent benchmark.
That benchmark is intentionally reproducible:
uv run python benchmarks/run_codex.py --repetitions 3 --output benchmark-results.jsonWe will only claim productivity or quality improvements after repeated, representative tasks show them.
Commands
aplomo init Detect the stack, create .engineering/, and install adapters
aplomo install Regenerate managed adapters from .engineering/config.yaml
aplomo doctor Check configuration, generated files, and the real MCP runtime
aplomo eval Run deterministic acceptance checks
aplomo hook Normalize one lifecycle event
aplomo mcp Run the repository-aware MCP server over stdioDevelopment and support
git clone https://github.com/marcmendez/aplomo.git
cd aplomo
uv sync --python 3.12
uv run pytest -q
uv run aplomo eval
uv buildRead CONTRIBUTING.md before changing generated integrations. Bugs and feature requests belong in GitHub Issues; security reports follow SECURITY.md.
License
Available Tools
7 toolsaplomo_find_existing_patternsARead-onlyIdempotent
Search a bounded set of source files for existing implementations before adding an abstraction.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'bounded set' and 'before adding an abstraction' context but does not disclose return format or result behavior, which is acceptable given the annotations.
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?
A single sentence with no filler. It front-loads the core action and resource while adding the key workflow context.
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 simple read-only search tool, the annotations cover safety and the description covers scope and timing. There is no output schema, but the tool's role is clear enough that missing return-format details are a minor gap.
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 0% and the description adds no explicit parameter guidance. The query and limit parameters are inferable from their names and schema constraints, but the description does not explain semantics beyond what the input schema already provides.
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: 'Search a bounded set of source files'. It also gives the purpose, 'before adding an abstraction', which distinguishes it from the sibling tools that validate, review, or prepare changes.
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 frames when to use this tool: before adding an abstraction. It does not explicitly name alternatives or exclusions, but the temporal condition is enough to route an agent toward this discovery step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aplomo_prepare_changeCRead-onlyIdempotent
Prepare one coding request with repository structure, relevant existing patterns, and architecture rules in a single call.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| request | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by naming the content the tool gathers, but it does not disclose output format, limitations, or side effects beyond what annotations already imply.
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 one efficient sentence with no wasted words. It front-loads the main action and resource, though the phrase 'one coding request' is slightly awkward and the sentence could have been more direct.
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 the description does not explain what the tool returns, how to use the returned context, or how the two parameters relate. The mention of repository structure, patterns, and architecture rules gives some sense of the gathered content, but important operational context 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 description coverage is 0%, and the description does not explain the 'query' or 'request' parameters at all. The word 'request' in 'coding request' gives a weak hint, but 'query' remains completely ambiguous. With no parameter explanation in either the schema or the description, the agent cannot confidently know how to fill these fields.
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 action ('Prepare') and a resource ('one coding request'), and it clarifies what that preparation includes: repository structure, existing patterns, and architecture rules. This helps distinguish the tool from sibling tools that handle those concerns individually, though 'prepare' remains somewhat abstract.
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 phrase 'in a single call' implies this tool should be used to combine multiple context-gathering steps that siblings like aplomo_understand_repo and aplomo_find_existing_patterns perform separately. However, there is no explicit guidance about when to choose this tool over those alternatives or when it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aplomo_review_architectureARead-onlyIdempotent
Summarize architecture configuration and repository structure for an architecture review.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds the context of summarizing both configuration and repository structure, which is useful but not a significant behavioral disclosure beyond what annotations imply. Given the strong annotation coverage, a 3 is appropriate.
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, well-structured sentence that immediately states the action and purpose. It is front-loaded with the core verb and resource, contains no filler words, and every part earns its place. This is an example of efficient, high-quality writing.
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 that there are no parameters, no output schema, and annotations cover the safety profile, the description is largely complete. It clearly indicates the tool produces a summary of architecture configuration and repository structure, which tells the agent what to expect. While it could specify the format of the summary, this is a minor gap for a zero-parameter summarization 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?
The tool has zero parameters, so the schema is empty. The description does not need to elaborate on parameters, and the baseline for 0-param tools is 4. There is no additional parameter information required, and the description adequately communicates the tool's purpose without referencing 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 description clearly states the action 'Summarize' and the specific resources 'architecture configuration and repository structure' with a clear purpose 'for an architecture review'. This distinguishes it from siblings like review_plan (which reviews a plan) and review_diff (which reviews a diff), making it easy for an agent to select the correct tool.
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 by stating it is for an architecture review, implying when it should be used. However, it does not explicitly mention when not to use it or point to alternative tools such as understand_repo or find_existing_patterns, which might also be relevant in similar contexts. This falls short of a 5 but is still clear enough for typical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aplomo_review_diffARead-onlyIdempotent
Review the current git diff for risky size, secrets, and missing test changes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint, covering the safety profile. The description adds that it reviews for specific categories, which is more purpose than behavioral disclosure. No additional side effects or constraints are mentioned, so it adds marginal value beyond annotations.
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, front-loaded sentence that immediately states the action and scope. There is no filler or redundancy; every word earns its place.
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 tool with no parameters, clear annotations, and no output schema, the description adequately covers what the tool does. An agent can correctly call it without further information. Nothing essential 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?
There are zero parameters, so the schema is trivially complete (coverage 100%). The description does not need to explain parameters, and the baseline for 0-param tools is 4. It does not add extra parameter info, but none is needed.
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 ('review') and resource ('current git diff'), and specifies the exact concerns (risky size, secrets, missing test changes). It clearly distinguishes from siblings like review_plan and review_architecture, which focus on different artifacts.
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 phrase 'current git diff' gives clear context that this tool is for reviewing the diff, which implies the appropriate use case. However, it does not explicitly state when not to use it or mention alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aplomo_review_planBRead-onlyIdempotent
Check whether an implementation plan covers patterns, scope, compatibility, and validation.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the read-only safety profile is covered. The description adds the evaluation criteria but does not disclose behavior such as output format, side effects, or how results are presented, which keeps this at a mid-level score.
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, front-loaded with the core action and resource, and contains no filler or redundant wording. Every word contributes to the meaning, making it appropriately concise.
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 with one parameter and safety is covered by annotations, so the basics are present. However, there is no output schema and no mention of what the tool returns (e.g., a pass/fail verdict or a list of missing items), and no usage context relative to siblings, leaving meaningful gaps.
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 input schema provides no description for the 'plan' parameter (0% coverage), but the tool description clarifies that it represents an implementation plan and enumerates the aspects it should cover. For a single self-named string parameter, this adequately compensates for the missing schema documentation, though input format is not specified.
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 identifies a specific resource, 'implementation plan', and lists the criteria being checked: patterns, scope, compatibility, and validation. This distinguishes it from siblings like review_diff or review_architecture, though the verb 'Check whether' is somewhat generic and it does not explicitly differentiate itself from other review 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?
The description gives no guidance on when to use this tool versus alternatives. It does not reference any sibling tools, prerequisites, or exclusions, leaving the agent to infer the appropriate context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aplomo_understand_repoBRead-onlyIdempotent
Detect technologies and summarize modules and symbols in the repository.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description does not contradict these. However, the description adds no behavioral context beyond the basic action—no mention of scope limits, cost, auth, output shape, or whether it analyzes only local code versus external references.
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 11-word sentence that front-loads the main action and contains no filler. Given the zero-parameter surface, this level of brevity is appropriate.
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, with no parameters and full annotation coverage, and the description conveys its purpose. Still, it does not indicate what the output looks like (list of technologies? symbol summaries? structure), and there is no output schema to compensate, so the definition is only minimally complete.
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 input schema has zero parameters and schema description coverage is 100%, so there is no missing documentation for the description to supply; the no-parameter baseline is 4.
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 action verbs 'Detect' and 'summarize' and clearly scopes to 'modules and symbols in the repository.' It is immediately clear what the tool does, though it does not explicitly contrast itself with sibling analysis tools such as aplomo_find_existing_patterns or aplomo_review_architecture.
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?
There is no explicit statement about when to invoke this tool versus alternatives. The wording simply restates the tool's function; an agent would have to infer that repository reconnaissance is a prerequisite to the planning/review siblings, which is not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aplomo_validate_abstractionBRead-onlyIdempotent
Require reuse or an explicit responsibility/lifecycle justification before adding an abstraction.
| Name | Required | Description | Default |
|---|---|---|---|
| justification | No | ||
| proposed_name | Yes | ||
| responsibility | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the core evaluation criterion — reuse or responsibility/lifecycle justification — as behavioral context for what makes an abstraction acceptable. It does not describe the outcome format or rejection behavior, but the annotations reduce the need for mutation/side-effect 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?
The description is a single front-loaded sentence with no filler or repetition. It delivers the core policy in a compact, scannable form and every word contributes to meaning. The brevity is a strength, even though some of that brevity creates ambiguity elsewhere.
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, the agent cannot tell whether validation returns a boolean, an explanation, or an error. The phrase 'lifecycle justification' is undefined, and the relationship between the 'reuse' criterion and the required 'responsibility' parameter is left unclear. For a validation tool, the pass/fail behavior is essential missing 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 description coverage is 0%, so the description must compensate for explaining parameters, but it only loosely maps to them. It mentions 'responsibility/lifecycle justification' without clarifying the required 'responsibility' field or the optional 'justification' field, and it never explains 'proposed_name' or how 'reuse' maps to a parameter. This is insufficient semantic help for an agent invoking the tool.
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 an explicit policy gate: 'Require reuse or an explicit responsibility/lifecycle justification before adding an abstraction.' This makes clear the tool validates or rejects abstraction proposals and distinguishes it from sibling review tools by focusing specifically on adding abstractions. It stops short of a 5 because the action verb is somewhat implicit and the description reads more like a rule than a behavioral specification.
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 phrase 'before adding an abstraction' gives a clear temporal trigger for when this tool should be used. However, it does not name sibling alternatives or state when not to use it, leaving the agent to infer how this differs from aplomo_review_architecture or aplomo_review_plan. This is implied usage guidance rather than explicit routing.
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.
2 tool updates
v1.1.0- Added
aplomo_prepare_change - Added
aplomo_validate_abstraction
5 tool updates
v0.1.0- First observed
aplomo_find_existing_patterns - First observed
aplomo_review_architecture - First observed
aplomo_review_diff - First observed
aplomo_review_plan - First observed
aplomo_understand_repo
TDQS
Scored across 7 tools
Tools are mapped to distinct workflow phases (understanding, pattern search, change preparation, abstraction validation, plan/architecture/diff review), so misselection is unlikely. The only mild overlap is between understand_repo and review_architecture, which both involve summarizing repository structure.
All tools share the aplomo_ prefix and use a consistent verb_noun snake_case pattern (prepare_change, understand_repo, review_plan, etc.). The pattern makes the action of each tool predictable from its name.
Seven tools is a tight, well-scoped set for a code-review and change-preparation server. Each tool covers a distinct step without redundancy or bloat.
The set covers the full intended workflow: understanding the repo, finding existing patterns, preparing a change, validating abstractions, and reviewing the plan, architecture, and diff. No obvious dead ends or critical missing operations for the server's apparent review/preparation purpose.
Maintenance
Related MCP Connectors
Shared memory for coding agents. Stop re-explaining your codebase every session.
Code intelligence for LLMs. Analyze, search, and retrieve code from any public git repository.
Codebase graphs, caller impact analysis, and recorded project context for AI coding agents.
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
Related MCP Servers
FlicenseNot gradedqualityCmaintenanceProvides AI coding agents with structured access to indexed codebases via semantic search, symbol analysis, and file reading tools.12-- AlicenseNot gradedqualityCmaintenanceProvides a semantic understanding of your codebase by parsing with tree-sitter and building a graph of symbols and dependencies. Enables AI assistants to navigate code, analyze changes, and discover architecture using 18 tools with minimal context overhead.18 npm1MIT
- AlicenseNot gradedqualityBmaintenanceProvides token-efficient code retrieval for coding agents by indexing repositories and enabling ranked snippet search, symbol outlines, and surgical line reads.109 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables LLM agents to efficiently understand and navigate a codebase by providing semantic search over symbols and a reference graph, replacing expensive grep/glob calls with structured tools like definition lookup, caller/callee queries, and change-impact analysis.3MIT