Cerebro MCP
Allows exporting a code knowledge graph as an Obsidian vault, and auditing documentation notes to flag stale references to changed code.
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., "@Cerebro MCPmap the project"
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.
Cerebro π§
Persistent code-knowledge memory across AI chat sessions.
Every new chat re-analyzes your project's folders from scratch to understand it, burning tokens re-discovering what a previous chat already learned. Cerebro caches the understanding β not just the files β in a small SQLite "brain" that lives outside the chat. New sessions query it instead of re-reading folders.
Instead of reading 50 files (~100k tokens) to understand a project, the model makes
one cerebro_map() call (~2-3k tokens) plus a few targeted lookups.
How it works
Three layers of "traces", cheapest first:
Structural map (free, no LLM) β
tree-sitterextracts symbols + imports and builds a dependency graph. Imports resolve both relative paths and tsconfig / jsconfig path aliases (@/...), so Next.js / NestJS monorepos get real edges. PageRank ranks the most important modules. Each file is hashed so changes are detectable. Languages: Python, JavaScript / TypeScript (incl. JSX/TSX) and Dart / Flutter.Cached summaries (the big saver) β as a chat understands a file, it calls
cerebro_record(path, summary)to store a 1-3 sentence English summary (English tokenizes ~15-30% cheaper than Spanish). Future sessions reuse it.Freshness β each summary is tied to the file's hash. If the file changed, the trace is flagged stale so only that file gets re-read.
Why not Dijkstra? Code knowledge is a relevance problem, not a shortest-path one. The useful algorithms are graph traversal (BFS/DFS, for impact) and centrality (PageRank, for ranking) β not weighted routing.
Related MCP server: Memory MCP
MCP tools
Tool | Purpose |
| Cheap project overview, modules ranked by centrality. Call first. |
| Summary + symbols + dependencies of a file, without reading it. |
| Hybrid semantic + keyword search; semantic hits resolve to the exact symbol ( |
| Leave a trace: store your understanding of a file. |
| Record a decision / domain rule / gotcha (the why). |
| Recall decisions recorded by past sessions. |
| Files changed since last index + stale summaries. |
| Catch branch switch / git pull / external edits and reindex them. |
| Refresh the structural index (only changed files). |
| Transitive blast radius: everything that (in)directly imports a file. |
| Circular-import groups (architecture smell). |
| Code files nothing imports β dead-code candidates (file-level). |
| Unused-export candidates: functions/classes/methods referenced nowhere in their own project, inside files that are imported (symbol-level dead code). |
| Call sites of a symbol (who calls it, with enclosing fn + line). |
| Internal functions a file calls (outgoing call edges). |
Install
One command (published on PyPI) β add the MCP server to Claude Code:
claude mcp add cerebro -- uvx cerebro-code-memoryOr install the full Claude Code plugin (MCP server + session hooks + cerebro-first subagents):
/plugin marketplace add marcodavidd020/cerebro-code-memory
/plugin install cerebro@cerebroRequires Python β₯ 3.10. Point Cerebro at a repo with CEREBRO_ROOT=/path/to/repo; it
also auto-detects the nearest ancestor .cerebro/ brain (handy in monorepos).
Quick start
One command onboards any repo β it indexes and prints the exact registration line:
uv tool install --from . cerebro # installs the `cerebro` command globally (dev)
cd /path/to/your/repo
cerebro setup --summarize --embed # index (+ warm summaries / semantic index), then prints next stepscerebro setup is idempotent. Then run the claude mcp add β¦ line it prints, reload
your editor, and the cerebro_* tools are available in chat.
Unified CLI
cerebro # no args -> MCP server (stdio); this is what the registration runs
cerebro setup # index this repo + print MCP registration
cerebro index [--force] # build/refresh the index
cerebro search <query> # hybrid semantic + keyword search
cerebro map # project overview
cerebro graph # interactive dependency-graph HTML
cerebro obsidian # export an Obsidian vault
cerebro summarize / embed
cerebro impact / cycles / orphans / callers / calls / recall
cerebro doc-audit <vault> # living docs: flag knowledge notes whose referenced code changedLiving documentation (doc-audit)
cerebro doc-audit <markdown-vault> cross-checks a curated knowledge vault against
the code index: it parses each note's code references (path:line, backticked
symbols) and the note's ultima_verificacion/fecha, then flags notes whose
referenced files changed after they were verified, moved/were deleted, or
mention a symbol that no longer exists. --aliases maps wiki app names to repo
dirs (backend_app=fenix-store-backend,β¦); --fix patches stale notes' frontmatter
to estado: revisar. This is the bridge between an auto-fresh code index and a
human-curated wiki β documentation that can't silently rot.
cerebro doc-refresh <note> closes the loop: it re-audits one stale note against
the live code and prints a briefing β current symbols, summary and dependents for
each reference, plus the new location of any moved file β exactly the context an
agent needs to propose the update (self-healing docs, human-reviewed).
Without a global install, prefix any command with uv run (e.g. uv run cerebro setup).
Point Cerebro at a specific repo with CEREBRO_ROOT=/path/to/repo. It honors
.gitignore plus an optional .cerebroignore (same syntax) for excluding
heavy non-source dirs (backup/, **/uploads/, β¦) without touching your VCS
config. node_modules/, .next/, dist/, build/ are ignored by default.
Works on monorepos: index the whole thing at once (a single brain at the root,
with cross-package alias resolution) or per sub-app (CEREBRO_ROOT per package).
Register with Claude Code
claude mcp add cerebro -- uv --directory /path/to/cerebro run cerebroSet CEREBRO_ROOT to the project you want the brain to cover. See plugin/ for the
optional Claude Code plugin that auto-injects the map at session start and flags
edited files as stale.
Scope (MVP)
In: structural map, cached summaries, freshness, keyword search, tsconfig/jsconfig
alias resolution, .cerebroignore, batch summary warming (cerebro-summarize, via
headless claude -p β no API key), a decision log (cerebro_note /
cerebro_recall, surfaced at session start), and git-aware freshness
(cerebro_sync catches branch switch / pull / external edits across nested repos),
and optional local semantic search (cerebro-embed + --extra semantic: model2vec
embeddings β one vector per symbol β no torch, no API key, nothing leaves the
machine β cerebro_search becomes hybrid semantic + keyword and lands on the exact
symbol (path:line), not just the file), and visualizations (cerebro-graph β
self-contained interactive HTML dependency graph; cerebro-export-obsidian β an
Obsidian vault where imports are [[links]]), and architecture insights
(cerebro_impact transitive blast radius, cerebro_cycles circular imports,
cerebro_orphans dead-code candidates), and a symbol-level call graph
(cerebro_callers / cerebro_calls, tree-sitter name-resolved).
Deferred to v2: a live file watcher, and LSP-backed call graph for type-precise
resolution (the current call graph resolves by name).
License
MIT Β© 2026 Marco Toledo β see LICENSE.
Available Tools
16 toolscerebro_callersA
Find every call site of a function / method / class by NAME across the repo (symbol-level call graph; name-resolved, so it may include same-named symbols). Use to see who actually uses a symbol before you change it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It mentions that results are 'name-resolved' and 'may include same-named symbols', which is a useful behavioral trait. However, it does not disclose whether the call graph includes transitive calls, performance implications, or limitations (e.g., static analysis only).
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 and under 30 words. Every word earns its place: the first sentence defines the action and scope, the second provides usage context. No redundancy or 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?
Given the complexity of a symbol-level call graph and the existence of an output schema, the description covers the core purpose. However, it omits details like whether the tool finds direct call sites only or includes indirect calls, and does not mention any performance or coverage caveats that might be relevant for a repository-wide search.
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 one parameter ('name') with 0% coverage, but the description adds meaning by stating the tool finds call sites 'by NAME', clarifying that the parameter is the symbol name. For a simple string parameter, this is sufficient semantic addition 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 description clearly states the tool finds call sites of a function/method/class by name across the repo. It uses specific verbs ('Find every call site') and identifies the resource ('function/method/class'). However, it does not explicitly distinguish from sibling tools like cerebro_impact or cerebro_calls, though the unique focus on call sites is implicit.
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 usage context ('Use to see who actually uses a symbol before you change it'), which implies when to use it (before modification). However, it lacks explicit when-not-to-use guidance or mentions of alternatives among siblings (e.g., when broader impact analysis via cerebro_impact might be preferred).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_callsA
List the internal functions/methods a file calls β its outgoing call edges (name-resolved). External library calls are omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It clearly states the tool is read-only and lists only name-resolved internal calls. No contradictions; behavior is well disclosed for a simple listing 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?
Single sentence front-loaded with the verb 'List', no redundant information. Every word is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the tool's simple nature (one parameter, list function), the description is mostly sufficient. It could mention expected file types or error conditions, but is adequate for use.
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 0%, and description does not directly explain the 'path' parameter. Although the context implies path is a file, no details about format, accepted paths, or restrictions are given.
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?
Description clearly states the tool lists internal function/method calls for a file (outgoing call edges), and explicitly excludes external library calls. This distinguishes it from sibling tools like cerebro_callers (likely incoming) and cerebro_map.
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?
No explicit when-to-use or alternative recommendations. The description implies use when internal call edges are needed, and not when external calls are desired, but does not name specific sibling tools for that case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_cyclesA
Find circular import groups (files that mutually depend on each other) β an architecture smell worth breaking. Returns each cycle's members.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavior. It states the tool finds cycles and returns members, which suggests a read-only analysis. However, it doesn't disclose potential performance impact or scope (e.g., entire codebase).
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?
Two sentences with no fluff. First sentence explains the action and purpose, second clarifies the output. 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?
An output schema exists, so the description doesn't need to detail return format. However, the description is brief and could benefit from specifying what constitutes a cycle or how results are structured, but it's adequate given the schema.
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 no parameters, so schema coverage is 100%. The description does not need to add parameter details. Baseline for zero parameters is 4, indicating no issues.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds circular import groups, which is a specific verb-resource combination. It distinguishes from sibling tools by focusing on cycles, while others handle calls, dead symbols, etc.
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 implies usage for identifying architecture smells ('worth breaking'), but does not explicitly state when to use or not use this tool over alternatives. Sibling tools are listed but no comparison is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_dead_symbolsA
List unused-export candidates: functions/classes/methods whose name is referenced nowhere in the indexed code, inside files that ARE imported (the symbol-level dead code that cerebro_orphans, which works per-file, can't see). Heuristic β confirm before deleting: dynamic access (obj['x'], string-based DI) and reflection can make a used symbol look dead.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses important limitations: the tool is a heuristic, can miss used symbols due to dynamic access and reflection, and advises caution before deleting. This is transparent but could add more detail on performance or scope.
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?
Two sentences: first delivers core purpose and distinction, second adds critical caveat. Front-loaded and efficient with 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?
Given the tool's heuristic nature and presence of an output schema (presumably documenting return values), the description covers the essential behavioral context. Minor gap: no mention of prefix parameter or typical use scenarios.
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?
Input schema has 0% description coverage for its single parameter 'prefix'. The tool description does not clarify the parameter's meaning or usage, leaving it underdocumented.
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?
Clearly describes the tool's purpose: listing unused-export candidates (functions/classes/methods) based on name references in imported files. Distinguishes itself from sibling 'cerebro_orphans' by specifying the per-file vs symbol-level scope.
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?
Provides contrast with sibling tool 'cerebro_orphans', giving context for when to use this one. Mentions heuristic nature and suggests confirmation before deletion, but lacks explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_endpointsA
Backend HTTP endpoints (NestJS routes) the project exposes β the frontβback
boundary that import edges miss. Search by path / method / handler (e.g.
'POST carts', 'promotions', 'findActive') to answer 'where is this endpoint
handled?' without grepping decorators.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 explains that the tool searches by path/method/handler, but does not disclose other behavioral traits (e.g., output format, result limits, or authentication). The description is adequate for a simple search tool but lacks depth.
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 with an em dash and examples. Every word adds value, and the core purpose is front-loaded. No redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one optional parameter and an output schema (not shown), the description covers the primary use case and search capability. It could mention that results are returned as a list, but the output schema presumably handles that. Sufficient for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the schema provides no parameter explanation. The description compensates by giving search examples, but does not explicitly define the query parameter's role or format. This is adequate but not excellent.
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 identifies the tool as exposing backend HTTP endpoints (NestJS routes) and distinguishes it from sibling tools that handle imports or other code navigation. The verb 'Search' is implied, and the resource is well-defined.
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 search examples (e.g., 'POST carts', 'promotions') and explains the use case: locating where an endpoint is handled without grepping. It implicitly contrasts with tools that follow import edges, offering clear context, though it does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_getA
Everything Cerebro knows about a file WITHOUT reading it: cached summary (with staleness flag), defined symbols, and dependency edges.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 the informational content (summary, symbols, edges) and mentions a staleness flag, but does not specify read-only behavior, required preconditions (e.g., file must be indexed), or side effects.
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 that front-loads the key purpose ('Everything Cerebro knows about a file WITHOUT reading it') and then lists the outputs. No superfluous 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?
Given the simplicity of the tool (single parameter, output schema exists), the description covers the essential behavioral aspects: what it returns and the key caveat (not reading the file). It lacks detail about prerequisites or error conditions, but the output schema likely fills some 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?
With 0% schema coverage, the description must compensate by explaining the 'path' parameter. It does not add any meaning beyond the parameter name and the tool context. The description assumes the user knows it expects a file path, but provides no details on format, required existence, or allowed file types.
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 'Everything Cerebro knows about a file WITHOUT reading it' and lists specific outputs: cached summary, staleness flag, defined symbols, and dependency edges. This distinguishes it from reading the file and from sibling tools that likely have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need cached metadata without reading the file, but it does not explicitly state when to use this tool vs siblings like cerebro_callers or cerebro_stale. No guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_impactA
Transitive blast radius: every file that directly OR indirectly imports
path. Use before changing a widely-used file to see what could break.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must fully convey behavior. It explains the transitive (indirect) nature of the analysis, which is a key behavioral trait beyond a simple import listing. This provides valuable context for the agent.
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?
Two sentences with no extraneous words. The first sentence defines the tool's action, the second provides usage guidance. Highly efficient and front-loaded.
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 single-parameter tool with an output schema (indicated by context), the description adequately covers purpose, usage, and behavioral nuance. No need to explain return values as the output schema is assumed to handle that. Complete for the 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?
The sole parameter 'path' has no schema description (0% coverage). The description clarifies that path references the file to analyze for imports, but does not specify format or constraints (e.g., absolute vs relative). Adds moderate value over the bare 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 description clearly states it shows the transitive blast radius of a file, i.e., all files that directly or indirectly import the given path. This distinguishes it from siblings like cerebro_callers (direct callers) and cerebro_cycles (cycles).
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?
Explicitly states 'Use before changing a widely-used file to see what could break', providing clear context for when to employ the tool. Does not explicitly mention when not to use it, but the guidance is sufficient for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_mapA
Cheap whole-project overview: file/language counts and the most important modules ranked by dependency centrality (PageRank). Call this FIRST in a new session instead of exploring folders.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It describes the tool as 'cheap' (implying low cost) and outlines output content, implying a read-only, non-destructive operation. No contradictions, but could detail any side effects or permissions.
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 extremely concise, consisting of two sentences that convey purpose and usage guidance without any fluff. It is front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (so return values are covered), one optional parameter, and many sibling tools, the description is mostly complete. The only gap is the lack of explanation for the 'top' parameter, but overall it provides adequate context for selection and usage.
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 0%, and the description does not explain the 'top' parameter beyond its default. The parameter is somewhat self-explanatory as a limit, but the description should have clarified its meaning, especially given the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a 'whole-project overview' with specific outputs: file/language counts and modules ranked by dependency centrality. It also distinguishes itself by recommending it as the first call in a new session, differentiating from sibling 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 explicitly says 'Call this FIRST in a new session instead of exploring folders,' giving clear when-to-use guidance. However, it does not explicitly mention when not to use it or list alternatives, but the directive is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_noteA
Record a decision, domain rule, or gotcha β the why that reading code can
never recover (e.g. 'QR_MANUAL = merchant confirms payment by hand', 'Seller was
refactored to Organization'). Future sessions retrieve it with cerebro_recall.
Keep content to 1-3 sentences; topic is an optional short tag.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | ||
| content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 clearly indicates that this is a write/record operation and that future sessions can retrieve it with cerebro_recall. It does not mention any destructive side effects, but the examples imply non-overwriting behavior. A minor gap is not specifying whether updating an existing note is possible.
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, front-loaded with the primary action, and every sentence adds value. It is structured effectively with examples and a guideline, without any unnecessary 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?
Given the low complexity of this note-taking tool and the presence of an output schema (not needed to explain return values), the description is complete. It covers purpose, usage, parameters, and provides examples, ensuring an agent can correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates. It explains the 'content' parameter (1-3 sentences, storing the why) and the optional 'topic' (short tag). It provides concrete examples, making the parameter usage very clear.
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 'Record' and clearly states the resource: decisions, domain rules, or gotchas. It includes concrete examples and distinguishes from the sibling tool 'cerebro_recall' by mentioning retrieval in a future session.
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 states when to use this tool (to capture the 'why' that code cannot convey) and provides a guideline to keep content to 1-3 sentences. It also indicates that 'topic' is an optional short tag, giving clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_orphansB
List code files that nothing imports β dead-code candidates. Framework entrypoints (modules, controllers, pages, configs, tests) are listed separately since they're loaded by convention, not by import.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that framework entrypoints are listed separately, indicating behavioral nuance. However, it does not address safety, permissions, or side effects, which are expected for a listing 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?
Two sentences, each adding value. Front-loaded with purpose and nuance. Could be improved by mentioning the parameter, but overall efficient.
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 list tool with one optional parameter, the description explains the primary behavior and a key nuance. However, the missing parameter explanation and lack of output format details (despite output schema existing) leave 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 schema has one parameter 'prefix' with 0% description coverage, and the description fails to mention or explain it. The agent has no guidance on how to use this parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and resource 'code files that nothing imports', clearly identifying it as dead-code detection. It distinguishes from siblings by noting that framework entrypoints are handled separately.
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 implies usage for finding orphan files but does not explicitly state when to use this over related tools like cerebro_dead_symbols or cerebro_stale. No when-not-to-use or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_recallA
Recall decisions/rules/gotchas recorded by past sessions BEFORE re-deriving them. Pass a query to search by meaning of topic/content, or leave empty for the most recent notes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It implies a read-only recall operation with no destructive side effects, which is adequate but lacks explicit safety guarantees or mention of potential rate limits or permissions.
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?
Two concise sentences with no wasted words. The purpose is front-loaded in the first sentence, and the usage options are covered efficiently.
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 presence of an output schema (so return format need not be explained) and low complexity (2 optional params), the description adequately covers purpose and usage. It lacks mention of limitations or errors, but is sufficient for the tool's simplicity.
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 0%, so description must compensate. It explains the 'query' parameter (search by meaning vs empty for recent) but does not detail 'limit' beyond schema default. This adds value for one parameter but leaves the other partially inferred.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves past recorded notes ('decisions/rules/gotchas') by meaning or most recent. It distinguishes from sibling tools like cerebro_note (recording) and cerebro_search (likely full-text search) by emphasizing recall before re-deriving.
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 explicit guidance: use 'BEFORE re-deriving them' to avoid redundant work, and explains how to pass a query or leave empty for recent notes. It does not explicitly mention when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_recordB
Leave a trace: store your English understanding of a file so future sessions reuse it instead of re-analyzing. Write 1-3 dense sentences in English describing what the file does and its role.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| model | No | ||
| summary | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears all behavioral burden. It tells it's a write operation that persists across sessions, but doesn't clarify if overwriting occurs, permissions required, or return value. With output schema existing but not referenced, transparency is moderate.
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?
Two sentences front-load purpose and usage guidance, with no wasted words. Very concise and efficient.
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 3 parameters, no annotations, and sibling tools, the description is incomplete: it omits parameter explanations, behavioral details like idempotency, and any mention of output. The existing output schema doesn't compensate for missing behavioral 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 0%, yet description only explains 'summary' (1-3 dense sentences). 'path' and 'model' parameters are undocumented, leaving their meaning and usage ambiguous. Only partial help for one parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: storing an English understanding of a file for reuse. It uses a specific verb ('store') and resource ('English understanding'), and implicitly distinguishes from sibling read tools like cerebro_get and cerebro_search by focusing on recording summaries.
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 when to use (to avoid re-analysis) and format guidance (1-3 dense sentences), but lacks explicit when-not-to-use or mention of alternatives like cerebro_note. It provides clear context but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_reindexA
Refresh the static index (symbols, dependency edges, hashes). Only
changed/new/deleted files are reprocessed. Pass paths to limit scope.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses incremental processing, but lacks details on safety, authentication, or side effects (e.g., index lock).
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?
Two concise sentences, front-loaded with main action, 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?
Covers main behavior and optional parameter; with output schema, return values are covered, but could mention if index refresh is blocking or async.
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?
Clarifies that paths limits scope of reindex, adding value over schema's default null; but doesn't specify format or allowed values.
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?
Clearly states verb 'Refresh' and resource 'static index', specifies incremental processing and optional path limit, distinguishing from search/retrieval siblings.
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?
Provides context for using paths and incremental nature, but no explicit when-to-use or when-not-to-use compared to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_searchA
Find relevant files. When the semantic index is built it ranks by meaning (intent), so phrase queries naturally ("where do we validate stock at checkout?"); it also includes keyword/symbol matches. Returns paths to cerebro_get().
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses ranking behavior, inclusion of keyword/symbol matches, and that it returns paths. However, it does not mention index prerequisites, error handling, or whether the tool is read-only.
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 clearly states purpose, second adds behavioral details and output guidance. No superfluous words, front-loaded with core information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description adequately covers purpose, query behavior, and output relationship with cerebro_get. It could be more complete by mentioning index dependency or no-results behavior, but it is sufficient.
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 0%, so description must compensate. It explains that the query parameter accepts natural language phrases or keywords/symbols. The limit parameter is not described, but its default value and type partially mitigate the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds relevant files and distinguishes it by mentioning semantic ranking and keyword/symbol matches. It also hints at its role in a two-step process with cerebro_get. However, it does not specify the types of files (e.g., code, docs) or contrast directly with other cerebro 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 implies usage for semantic or keyword file search and notes that results feed into cerebro_get. It does not explicitly state when to avoid this tool or offer alternatives among the sibling tools like cerebro_calls or cerebro_endpoints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_staleA
What the index no longer trusts: files changed/added/deleted on disk since the last reindex, plus summaries whose source file has changed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It discloses the tool returns files changed/added/deleted and summaries with changed sources, but lacks details on output format, ordering, authentication, or rate limits. The description is adequate but minimal.
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 (one sentence) and front-loads the core concept. However, the phrasing 'What the index no longer trusts' is slightly informal and could be more straightforward.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema (not shown here), the description provides adequate context about the nature of the returned data. It explains the two categories of stale items, which is sufficient for a simple read 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?
There are zero parameters, so baseline is 4. The description adds meaningful context about what the tool returns, which compensates for the lack of 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 clearly states the tool lists files that are no longer trusted due to changes or deletions since the last reindex, and summaries with changed source files. It uses specific verbs and distinguishes from sibling tools like cerebro_search or cerebro_get.
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?
No usage guidance is provided. There is no mention of when to use this tool, when not to, or how it compares to alternatives. The description simply states what it returns without contextual advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cerebro_syncA
Catch changes made outside Claude Code (branch switch, git pull, edits in the raw editor) and reindex only the affected files. Works across nested repos.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that only affected files are reindexed and that it works across nested repos. However, it does not mention potential side effects or permissions needed.
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 long, front-loaded with purpose, and contains no extraneous words. Every sentence adds value.
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 zero parameters and an existing output schema, the description is largely complete. It explains the trigger and scope, but could benefit from noting whether it is automatic or requires invocation.
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 no parameters, and the schema coverage is 100% (trivially). Following the baseline rule for zero parameters, a score of 4 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 clearly states the tool's purpose: catch external changes and reindex only affected files. It uses specific verbs ('catch', 'reindex') and distinguishes from sibling tools like cerebro_reindex by emphasizing incremental reindexing.
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 implies when to use (for changes outside Claude Code) and hints at alternatives (full reindex by other tools), but does not explicitly state when not to use or list alternative tools.
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.
16 tool updates
v0.2.1- First observed
cerebro_callers - First observed
cerebro_calls - First observed
cerebro_cycles - First observed
cerebro_dead_symbols - First observed
cerebro_endpoints - First observed
cerebro_get - First observed
cerebro_impact - First observed
cerebro_map - First observed
cerebro_note - First observed
cerebro_orphans - First observed
cerebro_recall - First observed
cerebro_record - First observed
cerebro_reindex - First observed
cerebro_search - First observed
cerebro_stale - First observed
cerebro_sync
TDQS
Scored across 16 tools
Each tool targets a clearly distinct aspect of code analysis: call sites, call edges, circular imports, dead symbols, endpoints, file info, impact analysis, project overview, note-taking, orphan files, recall, file recording, reindexing, search, stale index, and sync. Even similar tools like dead_symbols vs orphans and note vs record vs recall are differentiated by scope and purpose.
All tools follow a consistent 'cerebro_' prefix with snake_case naming (e.g., cerebro_callers, cerebro_dead_symbols). The second part is either a noun (callers, cycles) or a verb (get, search), maintaining a predictable pattern throughout.
With 16 tools, the server covers a comprehensive set of code intelligence operations without being overly numerous. Each tool serves a specific purpose in the workflow of understanding and navigating a large codebase, fitting well within the typical 3-15 range for focused servers.
The tool set covers core code analysis needs: dead code detection, call graphs, dependency analysis, search, project overview, and knowledge persistence. Minor gaps include lack of direct file content retrieval or file listing, but the server's focus on precomputed index data means these are reasonable omissions.
Maintenance
Related MCP Connectors
Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Project memory, semantic code search, and grounded agent context.
The project brain for AI coding agents β memory, decisions, sprints, knowledge base via MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides AI coding assistants with persistent project memory to retain architectural decisions, code patterns, and domain knowledge across sessions. It stores data locally in a SQLite database, allowing agents to remember, recall, and manage project-specific context using full-text search.3 npmApache 2.0
- AlicenseAqualityBmaintenanceProvides persistent cross-session memory and full-text search for AI coding assistants, storing project context, decisions, and preferences while enabling searchable access to conversation history via local SQLite.81MIT
- AlicenseAqualityBmaintenanceProvides AI coding assistants with persistent memory storage using a local SQLite database. Enables tools to remember project details, notes, and relationships across sessions to maintain context and reduce repetitive explanations.174MIT
- AlicenseBqualityCmaintenanceUltra-lean memory system for AI coding tools that stores project knowledge locally with SQLite and enables AI to remember your project across sessions.1220 npm37MIT