codegraph-mcp
codegraph-mcp
Claude Code(CLI 및 VS Code 확장 프로그램)에 코드베이스의 쿼리 가능한 모델을 제공하는 로컬 MCP 서버 — 정의된 위치, 호출 관계, 의존성, 이전 세션에서 내려진 결정 등을 제공합니다. 이 서버가 없으면 에이전트는 매 세션마다 grep과 파일 단위 읽기를 통해 아키텍처를 다시 발견해야 합니다. 이 서버가 있으면 구조적 질문에 구조적 답변을 얻을 수 있습니다:
더 안전한 변경 — 함수를 수정하기 전에 에이전트는 영향 범위(
analyze_impact), 모든 호출 지점(find_callers), 모든 언급(find_references), 모든 의존 모듈(who_imports)을 확인합니다. grep이 우연히 찾아낸 것을 편집하는 대신 말이죠.더 빠른 방향 파악 —
repo_map호출 한 번으로 가져오기 중심성에 따라 프로젝트를 매핑합니다.find_symbol과semantic_search("인증 토큰이 어디서 검증되나요?")는 올바른 코드로 바로 이동합니다.연속성 —
save_note/recall_notes는 저장소별로 결정 사항과 주의 사항을 세션 간에 유지합니다.더 저렴한 탐색 — 위의 결과로 에이전트는 전체 파일 대신 시그니처를 읽습니다(
file_skeleton,read_symbol). 또한 투명한 프록시가 대화 기록을 와이어 레벨에서 압축합니다.usage_stats는 측정된 절감 효과를 보고합니다.
100% 이식 가능: 순수 JavaScript + WASM 문법. node-gyp 없음, 네이티브 컴파일 없음. npm install은 Windows, macOS, Linux에서 동일하게 작동합니다.
에이전트에 노출되는 도구
이해 및 탐색
도구 | 기능 |
| 프로젝트 맵: 언어, 개수, 가져오기 중심성에 따른 주요 파일; |
| 이름으로 함수/클래스/메서드/타입 정의를 저장소 전체에서 찾습니다 |
| 의미로 코드/노트를 찾습니다("인증 토큰이 어디서 검증되나요?") |
변경 안전성
도구 | 기능 |
| 함수를 변경하기 전에 전이적 호출자(영향 범위)를 확인합니다 |
| 식별자의 모든 언급 — 호출 지점은 |
| 모듈의 직접 의존자(역방향 가져오기 그래프) |
집중 읽기
도구 | 기능 |
| 파일의 가져오기 + 모든 시그니처, 본문 없음(토큰 10–50배 절감) |
| 파일을 읽지 않고 하나의 심볼의 전체 소스를 읽습니다 |
메모리 및 운영
도구 | 기능 |
| 세션을 유지하는 저장소별 영구 메모 |
| 증분 또는 전체 재스캔 강제 |
| 도구별 호출 수 + 절감 토큰 수; |
지원 언어: JavaScript, TypeScript, TSX, Python, Go, Rust, Java, Ruby, C, C++, C#, PHP, GDScript. 인덱서가 추출할 수 없는 파일은 repo_map에 의해 계산되고 보고되므로 부분 적용 범위도 항상 표시됩니다.
Related MCP server: code-grapher
설치
Node.js ≥ 20 및 Claude Code 필요. Windows / macOS / Linux에서 동일:
git clone https://github.com/denzharkov/codegraph-mcp
cd codegraph-mcp && npm install
node bin/codegraph-mcp.js install # registers in Claude Code (user scope)그게 전부입니다 — install 명령이 claude mcp add를 실행하고, 서버는 CLI 및 VS Code 확장 프로그램에서 작동합니다(둘 다 MCP 구성을 공유합니다). claude mcp list 또는 Claude Code 내에서 /mcp로 확인하세요.
서버는 시작된 디렉토리(Claude Code는 프로젝트 디렉토리에서 MCP 서버를 시작합니다) 또는 --root / CODEGRAPH_ROOT로 지정된 경로를 인덱싱합니다. 사용자 범위 대신 단일 프로젝트로 제한하려면 해당 프로젝트에 .mcp.json을 추가하세요:
{
"mcpServers": {
"codegraph": {
"command": "node",
"args": ["/absolute/path/to/codegraph-mcp/bin/codegraph-mcp.js"]
}
}
}제거하려면: node bin/codegraph-mcp.js uninstall.
제로 구성
CLAUDE.md 편집이나 프롬프트 조정이 필요 없습니다: 서버는 MCP instructions 필드를 통해 사용 지침("함수를 변경하기 전에 analyze_impact 실행, grep 대신 find_symbol, 파일을 읽기 전에 file_skeleton, …")을 제공하며, Claude Code는 연결 시 이를 에이전트 컨텍스트에 자동으로 주입합니다. 설치, 등록, 완료.
투명한 프록시(보장된 절감)
위의 MCP 도구는 에이전트가 사용하기로 선택할 때만 토큰을 절약합니다. 프록시 계층은 반대 방향으로 작동합니다 — ContextForge처럼 Claude Code와 Anthropic API 사이에 위치하며 에이전트 동작과 무관하게 트래픽을 압축합니다:
기록 중복 제거: 대화에 동일한 도구 결과(같은 파일을 두 번 읽음, 반복된 명령 출력)가 포함된 경우, 첫 번째 이후의 모든 발생은 요청이 기기에서 나가기 전에 짧은 스텁으로 대체됩니다. 첫 번째 발생은 그대로 유지되므로 모델이 실제로 사용할 수 있는 것을 잃지 않습니다 — 그리고 프롬프트 캐시 접두사는 보존됩니다(새 꼬리만 다시 작성되므로 중복 제거는 이전 턴에서 캐시 미스를 일으키지 않습니다).
오래된 읽기 스켈레톤화: 파일을 읽고, 편집하고, 다시 읽은 경우 기록의 이전 전체 복사본은 tree-sitter 시그니처 스켈레톤(가져오기 + 줄 범위가 있는 선언)으로 대체됩니다. 가장 최근 읽기는 항상 그대로 유지됩니다. 비코드 파일은 머리+꼬리 잘림으로 대체됩니다. 변환은 콘텐츠의 순수 함수이므로 반복 요청은 동일한 바이트를 생성하고 프롬프트 캐시는 단일 재작성 후 다시 안정화됩니다.
프롬프트 근거: 메시지는 모델에 도달하기 전에 변환됩니다 — 안전한 방식입니다. 단어는 절대 다시 작성되지 않습니다. 대신 프록시는 메시지가 언급하는 식별자에 대한 검증 가능한 사실(종류,
file:lines, 심볼 그래프의 한 줄 문서)의 명확히 표시된 블록을 추가합니다. 모델은 도구 왕복을 소비하여 동일한 사실을 발견하는 대신 방향을 잡고 시작합니다. 정확한 대소문자 일치만 근거가 되며, 가장 최근 메시지만 새 블록을 받고, 블록은 메모화되어 기록이 프롬프트 캐시에 대해 바이트 안정적으로 유지됩니다.인증 헤더는 변경 없이 통과합니다(API 키 또는 OAuth). 프록시가 구문 분석할 수 없는 것은 그대로 전달됩니다. 스트리밍(SSE)은 파이프됩니다.
codegraph-mcp wrap # like 'cf wrap claude': proxy + claude in one command
codegraph-mcp proxy --port 3210 # or run the proxy standaloneVS Code 확장 프로그램의 경우 프록시를 실행하고 프로젝트 또는 전역 설정을 통해 확장 프로그램을 프록시에 지정하세요:
{ "env": { "ANTHROPIC_BASE_URL": "http://127.0.0.1:3210" } }누적 절감 효과는 ~/.codegraph/proxy-stats.json에 추적되며 프록시 시작 시 출력됩니다.
CLI 사용법
node bin/codegraph-mcp.js index # index cwd, print stats
node bin/codegraph-mcp.js index --root ~/proj # index another directory
node bin/codegraph-mcp.js dashboard # HTML report, opens in browser
node bin/codegraph-mcp.js map # interactive architecture map
node bin/codegraph-mcp.js # start stdio MCP server (cwd)아키텍처 맵(.codegraph/map.html)은 인덱스에서 완전히 파생된 계층적 C4 스타일의 저장소 보기입니다:
개요 — 가중치가 적용된 가져오기 엣지가 있는 하위 시스템 카드(최상위 디렉토리)와 자동 파생 시작점(허브, 진입점, 가장 큰 모듈);
하위 시스템 — 한 디렉토리의 파일과 가져오기 엣지, 축소된 이웃 하위 시스템; 파일을 클릭하여 의존자와 의존성을 추적하고, 다시 클릭하여 드릴인;
파일 — 파일 내 호출 화살표가 있는 심볼, 가져오는 모듈과 가져오는 모듈이 탐색 가능한 열로 표시됩니다.
모든 레벨은 구조뿐만 아니라 목적을 설명합니다: 설명은 코드 자체의 문서에서 가져옵니다 — 파일 및 심볼의 모듈 docstring 및 헤더 주석, 폴더 및 저장소 자체의 README / __init__.py / index.* — 폴더 카드, 도구 설명 및 사이드 패널에 표시됩니다.
레벨은 딥 링크가 가능하며(#d=src, #f=src/proxy.js), /로 검색하고, Esc는 한 레벨 위로, 드래그로 이동, 휠로 확대/축소합니다. 자체 포함 HTML, 오프라인.
대시보드(--no-open은 파일만 작성)는 .codegraph/dashboard.html에 생성됩니다: 토큰 절감, 도구별 사용량, 인덱싱된 언어 및 가장 많이 가져온 파일. 정적 HTML, 서버 없음, 라이트/다크 인식. 에이전트는 usage_stats에서 dashboard=true로 요청 시 생성할 수도 있습니다.
작동 방식
파일은
web-tree-sitter를 통해 tree-sitter WASM 문법(tree-sitter-wasms패키지)으로 구문 분석됩니다 — 플랫폼별 바이너리 없음.추출기는 각 AST를 한 번 순회하여 언어 사양에 따라 정의, 호출 엣지 및 가져오기를 수집합니다(src/languages.js).
그래프는 대상 저장소 내
.codegraph/index.json에 저장됩니다. 새로 고침은 증분(mtime+size)이며 제한되므로 쿼리가 빠르게 유지됩니다.node_modules, 빌드 출력, 벤더 및 축소 파일은 건너뜁니다. 간단한 루트.gitignore패턴이 존중됩니다.semantic_search는 로컬 임베딩 모델(all-MiniLM-L6-v2 via transformers.js, 선택적 의존성)을 사용합니다. 첫 사용 시~/.codegraph/models에 ~25 MB를 다운로드하고 저장소별 심볼 벡터를.codegraph/vectors.bin에 캐시합니다. 오프라인이거나 의존성이 없으면 키워드 검색으로 자동 대체됩니다 — 다른 모든 것은 그와 무관하게 작동합니다.
프로젝트의 .gitignore에 .codegraph/를 추가하세요(캐시 및 개인 메모입니다).
라이선스
MIT
Available Tools
12 toolsanalyze_impactA
Transitive callers of a symbol — the blast radius. Run BEFORE changing a signature or behavior.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Symbol name to analyze (exact, case-insensitive) | |
| depth | No | Max caller depth (default 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It conveys the operation is analytical/non-mutating and clarifies the traversal is transitive, but says nothing about cost, latency, how the depth cap is honored, or the shape of the result set — gaps that remain unaddressed by either annotations or an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses with zero filler: the identity of the result is front-loaded, then the timing advice. Every word earns its place and nothing is repeated from the schema.
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 low-complexity, two-parameter read tool with no destructive behavior, the description covers what the tool produces and when to reach for it. It is slightly thin on what the returned caller list looks like, though with no output schema the omission is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented in the schema, so the baseline of 3 applies. The word 'transitive' loosely hints at the meaning of depth, but the description adds no format, default, or range detail beyond what the schema already states.
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?
It names a specific resource and scope — 'transitive callers of a symbol' — and labels the concept ('the blast radius'), which implicitly separates it from siblings like find_references or who_imports that return non-transitive results. An agent can tell what it gets back without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Run BEFORE changing a signature or behavior' gives a concrete trigger condition that maps to a real workflow moment. It does not, however, name an alternative (e.g. find_references for direct callers) or state when this tool is unnecessary, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_skeletonA
File outline: imports + every signature with line ranges, no bodies. Use before reading a file in full.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Repo-relative file path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the output shape (imports + signatures with line ranges, no bodies), which is valuable since no output schema exists. However, it says nothing about failure modes (missing/unreadable files), large-file behavior, or permissions, leaving real gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the output contract is front-loaded, and the usage cue follows. No filler and nothing redundant.
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 low-complexity single-parameter read tool, the description covers what matters most: what the outline contains and when to invoke it. The absence of output schema makes the enumerated return content especially useful; only edge-case behavior is unaddressed.
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?
Single parameter with 100% schema coverage already documented as 'Repo-relative file path.' The description adds nothing about the path parameter, so the baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (file outline) and precisely enumerates its contents: imports plus every signature with line ranges, explicitly excluding bodies. This distinguishes it from symbol-level tools like read_symbol, though it never names a sibling directly, so the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: 'Use before reading a file in full,' which establishes this as a cheap reconnaissance step preceding a token-expensive full read. It provides the when without naming alternatives or stating exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_referencesA
Every mention of an identifier repo-wide (calls marked [call], plus types, variables, imports), with the enclosing symbol. Word-boundary, case-sensitive.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Identifier to find (exact, case-sensitive) | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose matching semantics: word-boundary, case-sensitive, all reference kinds, and that results carry the enclosing symbol. It omits any note on result caps, performance, or the 300-item limit behavior, so it is good but not complete.
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 tight sentences with the scope front-loaded and zero filler; the parenthetical efficiently enumerates reference kinds without padding.
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 2-param read tool with no output schema and no annotations, the description covers intent and result content partially but says nothing about the undocumented 'limit' parameter, result truncation, or pagination across a repo-wide search. Usable but leaves an agent guessing on scale-related behavior.
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 50%. The description reinforces 'name' semantics (word-boundary, case-sensitive matching, which goes slightly beyond the schema's 'exact, case-sensitive'), but the 'limit' parameter is undocumented in both the schema and the description, leaving half the surface unexplained.
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 names a specific verb and resource: 'Every mention of an identifier repo-wide', and enumerates the reference kinds included (calls marked [call], types, variables, imports), which implicitly distinguishes it from siblings like who_imports (imports only) and find_symbol (declaration lookup). It stops short of explicitly naming which sibling to use instead, so 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose — an agent can infer this is for finding all usages of an identifier — but there is no explicit when-to-use, when-not-to-use, or alternative routing (e.g., vs. find_symbol, who_imports, or analyze_impact). Adequate but with a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_symbolB
Find a definition by name, repo-wide. Returns file:line, signature and container.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Filter by kind: function|method|class|struct|interface|type|enum|const | |
| name | No | Symbol name (case-insensitive; substring match unless exact=true) | |
| exact | No | Exact name match only (default false) | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it partially does so by disclosing the return shape ('file:line, signature and container'), which matters since no output schema exists. It does not state read-only status, permission needs, or behavior on ambiguous matches, leaving real gaps.
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 short sentences, zero filler, with the core action and scope front-loaded before the return-value note.
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 lookup with no annotations and no output schema, the description covers purpose, scope, and return shape adequately. It falls short only in not distinguishing itself from sibling retrieval tools or explaining the limit parameter.
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 75%, so kind, name, and exact are already documented, and the description adds nothing beyond the looser 'by name, repo-wide' framing. The undocumented 'limit' (bound 1-50, semantics never explained) is left entirely to the schema's numeric bounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Find'), resource ('a definition'), and scope ('by name, repo-wide'), plus what it returns. It is clearly distinguishable from read_symbol, but it never names or contrasts with the sibling, so differentiation is left to inference.
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 when-to-use guidance, no exclusions, and no alternatives named, despite an obvious sibling set (semantic_search for fuzzy lookup, read_symbol for reading a known symbol, find_references for usages). The agent must guess which lookup tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_symbolA
Full source of ONE symbol (function/class/method) without reading the whole file.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Repo-relative file path to disambiguate | |
| name | No | Symbol name (exact, case-insensitive) | |
| index | No | 1-based pick when several matches exist |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral load. It discloses the return content (full source) and the read-only nature implied by 'read', but says nothing about behavior when a symbol isn't found, when multiple matches exist beyond the index hint, or handling of binary/generated files.
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 front-loaded sentence that states the core value proposition (one symbol's full source) with the key contrast (no whole-file read). No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-symbol extractor with fully documented parameters and no output schema, the definition covers what the tool returns and its efficiency benefit. Minor gaps remain around multi-match resolution and not-found behavior, but nothing critical for correct 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?
Schema description coverage is 100%, so each of the three parameters (file, name, index) is already documented in the schema. The description adds no additional parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (ONE symbol: function/class/method) and clarifies it returns full source without loading the whole file. This is clear, but it doesn't differentiate from the closely related sibling find_symbol or file_skeleton, so an agent could confuse the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the phrase 'without reading the whole file', which suggests using this instead of a full file read. There is no explicit guidance on when to choose this over find_symbol, file_skeleton, or semantic_search, and no stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recall_notesB
Saved project notes: most relevant first with a query, newest first without. Safe to call argless at task start.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | What are you working on / looking for (omit for the latest notes) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It covers ordering behavior (relevant vs newest) which is a useful trait, but says nothing about authentication needs, rate limits, whether notes are scoped to a project or user, or what happens with an empty result set. For a read tool with zero structured behavior hints, this is thin.
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 compact sentences with no filler. Ordering rules are front-loaded and the safe-argless note follows. Efficient for a simple two-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is short and the tool is simple, but with no annotations, no output schema, and only 50% schema coverage, the description should fill more gaps (permissions, scoping, return contents, limit default). It leaves the agent guessing about how the tool behaves beyond ordering.
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 50%, with `query` described in the schema but `limit` undocumented. The description explains the semantic effect of omitting query (get latest notes), which adds meaning beyond the schema. However, it doesn't explain the limit parameter's behavior or defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource (saved project notes) and the ordering behavior, distinguishing it from save_note. The verb 'recall' is clear, though the description spends a word on ordering rather than explicitly stating 'retrieve'. Still clear enough that an agent knows what it does.
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 'Safe to call argless at task start' gives a clear implied usage context for calling without parameters. However, it doesn't explain when the query variant should be used vs alternatives like semantic_search, save_note, or other sibling tools. The guidance is present but narrow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reindexB
Force a re-scan of the repository. Use full=true to rebuild the index from scratch.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Rebuild everything (default: incremental) |
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 reveals the incremental-by-default behavior, which is useful, but for an expensive forced re-scan it says nothing about cost, duration, whether the call blocks, or whether it invalidates existing cached results.
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 short sentences, zero padding, and the core action is front-loaded ahead of the parameter note. Every sentence 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?
There is no output schema and no annotations, so the description should ideally cover what the re-scan affects (index state, other tools' results) and rough cost. It covers the action and the full flag but leaves the operational consequences unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents 'full' as a boolean meaning 'Rebuild everything (default: incremental).' The description restates this without adding format, default, or interaction details beyond the schema, which is the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('re-scan') and resource ('the repository'), making the action clear. It lacks differentiation from siblings, though 'reindex' is fairly distinct in this set (save_note, repo_map, semantic_search) so the risk of confusion is low.
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 via 'Use full=true to rebuild the index from scratch,' which is a hint about when to choose full mode, but it never states when to call reindex at all versus relying on automatic indexing or other tools. No exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repo_mapA
Project map: languages, symbol counts, key files ranked by import centrality. Call FIRST to orient. html=true also writes an interactive architecture map.
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | Also write .codegraph/map.html (interactive import graph) | |
| limit | No | Max files to show (default 25) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It discloses that html=true writes an interactive architecture map and that the tool ranks files by import centrality, which is valuable behavioral context. It doesn't mention side effects of the default mode or rate limits, but the write behavior is covered.
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-loaded with the core output and usage instruction. Very little waste, though the phrasing is compact to the point of being terse.
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 read-only mapping tool with no output schema and full parameter coverage, the description provides enough to invoke correctly and understand the html side effect. It could be improved with a note on typical output size or performance considerations, but it is largely 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?
Schema coverage is 100%, so the schema fully documents both parameters (html and limit). The description adds the html behavior (writes map.html) but doesn't add details for limit beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it produces a project map covering languages, symbol counts, and key files ranked by import centrality. Distinguishes itself from read-oriented siblings, though it could more explicitly differentiate from file_skeleton or find_symbol.
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 says 'Call FIRST to orient,' which gives clear usage priority. However, it doesn't mention when not to use it or name alternatives for deeper analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_noteA
Save a short project note (decision, gotcha, convention) that survives across sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags for recall | |
| text | No | The note text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose one meaningful behavioral trait, cross-session persistence, and frames notes as short. It omits scope (per-project vs global), storage/indexing side effects, deduplication, and whether saving triggers anything downstream, which matters for an unannotated write 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?
A single sentence that front-loads the verb and resource and uses a parenthetical to enumerate the covered note types. There is no filler and nothing to trim.
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 two-parameter tool with full schema coverage and no output schema, the description supplies the essential purpose plus the persistence rationale. It is nearly complete, with the only gap being call scope and any storage-side behavior a caller might need to anticipate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'tags' and 'text' are already documented and the baseline is 3. The description adds only the qualitative sense of 'short' and examples of note content, but nothing about tag format, reuse, or why text is not a required field despite being the payload.
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 pairs a specific verb (save) with a specific resource (short project note) and clarifies the note's content domain with concrete examples (decision, gotcha, convention). The save-vs-recall split against the sibling recall_notes is implied by the verb, but no sibling is named explicitly, which keeps it just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It signals the appropriate content to record and the reason to do so ('survives across sessions'), which implies when to use it. However, it never states when not to save, nor points to recall_notes for retrieval, leaving the usage boundary to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_searchA
Find code/notes BY MEANING ("where is auth token validated") when the exact name is unknown. Local embeddings; keyword fallback offline.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Natural-language description of what you are looking for | |
| scope | No | What to search (default code) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the useful behavioral fact that local embeddings are used with keyword fallback when offline, which is real operational context. However it omits whether the operation is read-only, whether results are paginated, or how relevance is ranked.
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 compact sentences with zero waste. The core purpose is front-loaded, and the mechanism/fallback note follows 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?
For a 3-parameter search tool with no output schema, the description covers purpose, when-to-use, and the meaningful operational detail (local embeddings, offline keyword fallback). It is nearly complete; only ranking or pagination behavior for the limit parameter is unaddressed.
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 67%; the schema documents 'query' and 'scope' but leaves 'limit' without a description. The description itself doesn't add parameter syntax beyond the query example, but the baseline for this coverage level is reasonable and the query example clarifies intended input. It could have documented limit semantics, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Find code/notes') with the defining mechanism ('BY MEANING') and an illustrative natural-language example. It implicitly distinguishes itself from siblings like find_symbol, which presumably match exact names – the description explicitly notes this tool handles the case 'when the exact name is unknown'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use signal: use it when the exact name is unknown, with a concrete example query. It doesn't explicitly name find_symbol as the alternative to use for known names, but the conditional phrasing effectively steers the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usage_statsB
Usage counters and estimated tokens saved. dashboard=true also writes an HTML report and returns its path.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard | No | Also write .codegraph/dashboard.html |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses a side effect: dashboard=true writes an HTML report and returns its path, which is behavior beyond the schema. However, it says nothing about permissions, cost, whether reads are non-destructive, or the shape of the returned counters.
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 tight sentences with no filler, and the core output is front-loaded followed by the conditional behavior. Slightly under-specified, but nothing is wasted.
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 zero-required-parameter stats tool with no output schema and no annotations, the description is adequate but thin. It does not describe the returned counters/token format, so an agent knows roughly what to expect but not the response structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the single parameter. The description adds value beyond the schema by clarifying that dashboard=true not only writes the file but also returns its path, which the schema's terse 'Also write .codegraph/dashboard.html' does not mention.
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 the resource (usage counters and estimated tokens saved), which is distinct from the code-graph siblings, but it lacks a clear action verb and never explicitly frames this as a stats/reporting tool. An agent can infer the purpose but must do some work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, nor any prerequisites or context. The only condition given is the dashboard=true flag behavior, which is a parameter detail rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
who_importsB
Files that import a given module — its direct dependents.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Repo-relative path of the module/file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does add one meaningful trait — the results are 'direct dependents' only, implying no transitive closure — but says nothing about read-only semantics (obvious for a query), result limits, or ordering.
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?
One tight sentence with the subject and scope front-loaded and zero filler. It is efficient, though terseness shades into under-specification rather than maximal usefulness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description must stand alone; it adequately conveys the return payload (importing files) and the direct-only scope, but omits any guidance on when to prefer it over the related reference/impact tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'path' parameter, so the schema already defines the repo-relative input. The description adds no format, default, or resolution semantics beyond that, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and result: 'Files that import a given module — its direct dependents.' An agent immediately knows what it gets back. It does not name the closely related siblings (find_references, analyze_impact) to distinguish itself, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no routing to alternatives such as find_references or analyze_impact, which appear to overlap in this namespace. Usage can only be inferred from the one-line purpose.
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.
12 tool updates
v0.17.0- First observed
analyze_impact - First observed
file_skeleton - First observed
find_references - First observed
find_symbol - First observed
read_symbol - First observed
recall_notes - First observed
reindex - First observed
repo_map - First observed
save_note - First observed
semantic_search - First observed
usage_stats - First observed
who_imports
TDQS
Scored across 12 tools
Most tools target clearly different operations: find_symbol (definitions), find_references (all usages), semantic_search (by meaning), who_imports (module dependents), and analyze_impact (transitive callers) are well-differentiated by their descriptions. Minor overlap exists between find_references and who_imports (both touch imports) and between read_symbol and file_skeleton (both read code), but the granularity distinctions keep them separable.
All names use consistent snake_case, and most follow a verb_noun or action-oriented pattern (save_note, find_symbol, read_symbol, find_references, analyze_impact, recall_notes). A few deviate into noun phrases (repo_map, file_skeleton, usage_stats, semantic_search) and one is a bare verb (reindex), but the pattern remains readable and predictable.
12 tools is well-scoped for a code-navigation/graph server, with each tool covering a distinct facet (index, map, locate, read, outline, search, references, impact, stats, notes). No redundancy and no tool feels extraneous.
Coverage spans indexing (reindex), orientation (repo_map, file_skeleton), discovery (find_symbol, semantic_search, find_references, who_imports), impact analysis, and notes persistence (save_note/recall_notes). The main gap is a plain literal/regex text search tool, though the semantic_search keyword fallback partly compensates.
Maintenance
Related MCP Connectors
Codebase graphs, caller impact analysis, and recorded project context for AI coding agents.
Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
- SeturosOAuthcom.seturos
Shared work memory for Claude Code, Codex, Cursor and chat, scoped to each repository.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables efficient code navigation and retrieval through natural language search, BM25 ranking, and fuzzy matching across multiple programming languages. It drastically reduces token usage by allowing Claude to query specific code symbols and logic instead of reading entire files.1383 npm13MIT
- FlicenseNot gradedqualityDmaintenanceEnables Claude to intelligently analyze and query codebases using knowledge graphs, supporting natural language code search, relationship discovery, and incremental updates.11-
- 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.9 npm1MIT
- FlicenseNot gradedqualityAmaintenanceProvides efficient code navigation and graph-based analysis for AI agents, enabling symbol resolution, callers, implementations, and type schemas with minimal token usage.-