Kivgraph
Kivgraph
Kivgraph는 로컬 AI 코딩 에이전트를 위한 저장소 간 코드 인텔리전스 MCP 서버입니다. 여러 등록된 저장소에 걸쳐 표준 의미론적 코드 그래프를 구축하고 심볼, 저장소 관계, 호출자, 의존성 및 변경 영향에 대한 질문에 답합니다.
코퍼스를 한 번 인덱싱하고 불변 그래프를 제공합니다. 엣지는 이름 매칭이 아니라 go/types, TypeScript 체커 및 rust-analyzer에 의해 해석됩니다. 이것이 검색 도구와의 차이점이며, 빈 답변에 가치를 부여하는 이유입니다 — 빈 참조 목록은 아무것도 찾지 못했다는 뜻이 아니라 아무도 호출하지 않는다는 뜻이며, grep은 이 둘을 구분할 수 없습니다.
Kivgraph는 서비스 간 모든 HTTP, gRPC, Kafka 또는 데이터베이스 런타임 흐름의 자동 발견이 아니라 의미론적 코드 관계에 초점을 맞춥니다.
문서
설치, MCP 클라이언트, 코드 인텔리전스, 저장소 관계 및 워크스페이스 코드 그래프에 대해서는 Kivgraph 사용자 문서를 읽으십시오. 게시된 사이트는 릴리스 번들과 별도로 구성됩니다. 이 링크는 모든 체크아웃에서 유효합니다.
Related MCP server: MCP Indexer
각 도구가 답하는 것
질문 | 도구 |
이것을 누가 호출하는가, 무엇이 이것을 참조하는가 |
|
이것을 변경하면 무엇이 깨지는가 |
|
이것이 외부로 무엇에 도달하는가 |
|
다른 저장소에서 누가 이것을 사용하는가 |
|
이것이 어디에 선언되어 있는가 |
|
이 패키지에 무엇이 선언되어 있는가 |
|
이 심볼들의 코드를 보여줘 |
|
이 심볼 하나에 대한 모든 것 |
|
무엇이 인덱싱되었고 그래프가 최신인가 |
|
읽기 전용 도구 10개와, 클라이언트가 저장소를 등록하거나 세대를 게시하기 전에 승인해야 하는 동의 게이트 변형 작업(index_project) 하나가 있습니다.
심볼을 명명하는 모든 행은 저장소, 경로, 정규화된 이름 및 줄 범위를 포함하므로 추가 호출 없이 열 수 있으며, 모든 도구는 불투명한 키 대신 그 세 가지를 받아들입니다.
어디에서 약한가. 하나의 작은 저장소에 있는 희귀한 이름은 grep이 더 저렴하며, 작은 파일을 인덱싱하는 것은 읽는 것보다 비용이 더 듭니다. Kivgraph는 흔한 이름, 전이적 영향, 다른 저장소의 소비자, 그리고 부재 증명에서 우위를 점합니다. 37개 저장소 코퍼스에 대한 29개 질문으로 측정했을 때(benchmarks/graph-tools-comparison/results-all.json, 커밋 954b9eb, 토크나이저 o200k_base): Kivgraph는 35,961 토큰, grep 및 읽기는 267,980 토큰으로, 29개 중 28개에서 양쪽 모두 정확했으며, 질문당 중앙값 5.95x로 Kivgraph가 유리했습니다. grep은 29개 중 5개에서 더 저렴했으며, 모두 양쪽 모두 완전 재현율을 보였습니다: T1_go_trivial은 코퍼스가 두 번 선언하는 이름을 요청하며, 거기서 grep은 Kivgraph 비용의 0.53x입니다.
두 번째 하네스인 benchmarks/mcp-token-cost는 호스트 자체 도구 출력을 그대로 캡처하여 비교하지만, 13,222개 심볼의 Kivgraph 자체 단일 저장소에서 실행됩니다: 양쪽 모두가 부담하는 소스 본문이 설정한 2.41x 하한선을 기준으로 답변 자체에서는 7.64x, 전체 세션에서는 1.60x입니다.
상태
출시되어 사용 중입니다. kivgraph version은 게시된 릴리스를 보고합니다. 각 단계의 백로그와 승인 게이트는 TASKS.md에 있습니다.
언어: Go, TypeScript, Rust, Python 및 Dart. Python은 폴백 모드에서 번들된 AST 워커를 사용합니다. 추론된 참조는
CANDIDATE이며 결코EXACT가 아닙니다. 정확한 Python 모드는 설치된 Pyright/BasedPyright 서버와 함께 번들된 Pyright LSP 어댑터를 사용합니다. Dart는 Dart 또는 Flutter SDK가 제공하는 Dart Analysis Server를 사용합니다.의미론적 의존성: Python 및 Dart 가져오기는 요청된 패키지를 정확히 하나의 등록된 제공자가 소유할 때 패키지 의존성을 게시할 수 있습니다. 심볼 수준의 교차 저장소 엣지는 명시적 제공자 ID가 필요합니다.
표면: STDIO를 통한 10개의 읽기 전용 도구와 하나의 동의 게이트 변형 작업(
index_project). 계약은 docs/protocol/mcp-surface-v3.md에 있습니다.스토리지: LadybugDB가 표준입니다. 쿼리는 원자적으로 게시된 불변 HotSnapshot에서 제공되며 데이터베이스에서 직접 제공되지 않습니다.
플랫폼:
linux/amd64,darwin/arm64및windows/amd64.뷰어:
kivgraph ui는 게시된 그래프의 읽기 전용 3D 뷰를 제공합니다.
요구 사항
소스에서 빌드하려면 Go 1.26 이상이 필요합니다. 인덱서는 바이너리에 링크된
go/types로 타입 검사를 수행하므로 자체 언어 버전 이하로 작성된 저장소와 의존성만 읽을 수 있습니다.kivgraph doctor가 그 상한을 보고합니다.Rust 인덱싱에는
cargo와rust-analyzer가 필요합니다. 릴리스 번들에는 분석기가 포함되어 있지만 Rust 툴체인은 포함되어 있지 않습니다.TypeScript 인덱싱에는 워커를 위한 Node.js 22 이상이 필요합니다.
Python 인덱싱에는 번들된 워커를 위한 Python 3.10 이상이 필요합니다. 구문 인식 폴백이며 동적 또는 확인되지 않은 이름을 명시적으로 보고합니다. 정확한 모드에는 추가로 Pyright 호환 언어 서버가 필요합니다.
Dart 인덱싱에는
dart실행 파일이 필요합니다. Flutter 설치가 이를 제공합니다. 로더는 Analysis Server 프로토콜을 사용하며 Flutter 프로젝트를 수정하지 않습니다.
설치
하나의 스크립트로 MCP 설치
설치 프로그램은 플랫폼을 감지하고 해당 플랫폼용 최신 게시 MCP 릴리스를 다운로드하고 릴리스 아카이브와 번들 체크섬을 모두 검증한 후 Go나 pnpm 없이 설치합니다. 릴리스에는 Go 서버, 고정된 LadybugDB 라이브러리, TypeScript 워커, 번들된 Python AST 워커, 고정된 rust-analyzer, 문법 매니페스트 및 웹 뷰어가 포함되며, 뷰어 자산은 번들에서 2.3MB를 차지합니다. scripts/build-bundle.sh --mcp-only는 뷰어가 필요 없는 사람들을 위해 뷰어 없는 번들을 생성합니다.
게시된 번들: Linux amd64 및 macOS arm64.
런타임 요구 사항: Bash, Node.js 22 이상, Python 인덱싱 시 Python 3.10 이상, curl, tar, sha256sum 또는 shasum. 번들은 자체 rust-analyzer를 포함합니다. Rust 저장소 인덱싱에는 추가로 PATH에 cargo가 필요하며, Dart 인덱싱에는 Dart 또는 Flutter SDK가 필요합니다.
macOS에서 바이너리는 공증(notarization)되지 않았습니다. curl로 다운로드한 릴리스는 격리되지 않아 실행되지만, 브라우저로 다운로드한 복사본은 xattr -dr com.apple.quarantine이 필요합니다. docs/development/macos.md를 참조하십시오.
최신 릴리스를 한 명령으로 설치합니다:
curl -fsSL https://github.com/Luqueee/kivgraph/releases/latest/download/install.sh | bash체크아웃에서 동일한 설치 프로그램을 직접 실행할 수 있습니다:
./scripts/install.sh최신 릴리스 대신 특정 릴리스를 설치하려면:
KIVGRAPH_VERSION=v0.9.1 ./scripts/install.sh스크립트는 번들을 ~/.local/opt/kivgraph에 설치하고 실행기를 ~/.local/bin에 배치합니다. 등록된 저장소를 수정하거나 인덱스를 생성하거나 구성 파일을 교체하지 않습니다. 다른 위치를 사용하려면 KIVGRAPH_INSTALL_ROOT와 KIVGRAPH_BIN_DIR을 설정하십시오.
실행기 디렉터리를 현재 셸에 추가하고 두 런타임을 모두 확인합니다:
export PATH="$HOME/.local/bin:$PATH"
kivgraph version
kivgraph-ts-worker <<'EOF'
hello
EOF최신 릴리스가 있는지 확인하거나 설치된 번들을 업데이트합니다:
kivgraph update --check
kivgraph update업데이트는 원자적이며 구성과 그래프 상태를 보존하고 릴리스 및 번들 체크섬을 검증하며 설치된 번들만 교체합니다. 업데이트 후 MCP 클라이언트를 다시 시작하여 새 바이너리를 실행하십시오.
kivgraph가 대화형 터미널에서 명령 없이 호출되면 800ms 타임아웃과 24시간 캐시로 최신 릴리스를 확인하며, 캐시는 플랫폼 캐시 디렉터리(Linux의 $XDG_CACHE_HOME 및 macOS의 $HOME/Library/Caches)의 kivgraph/update-check.json에 저장됩니다. 선택적 확인은 네트워크를 사용할 수 없을 때 명령을 차단하지 않습니다.
대화형 명령 출력은 대상이 터미널일 때 의미론적 ANSI 색상을 사용합니다. NO_COLOR를 설정하거나 출력을 리디렉션하여 일반 텍스트로 유지하십시오.
MCP 클라이언트 구성 및 스킬 설치
릴리스 설치 프로그램은 클라이언트 구성을 자동으로 편집하지 않습니다. Kivgraph를 설치한 후 --target 없이 통합 명령을 실행하여 이 머신에 있는 코딩 에이전트를 감지하고 하나 이상을 선택하십시오:
kivgraph mcp install --scope user
kivgraph skill install --scope userKivgraph는 각 클라이언트의 알려진 로컬 구성 또는 설치 루트를 확인하고 감지된 에이전트를 표시합니다. ↑/↓(또는 j/k)로 이동하고, space로 에이전트를 토글하고, a로 모두 선택하고, n으로 모두 선택 해제하고, Enter로 확인하고, q 또는 Esc로 취소합니다. 감지된 것이 없으면 선택기가 선택된 에이전트 없이 시작됩니다. --target은 스크립트 기반의 비대화형 설치에만 사용하십시오.
지원되는 MCP 대상은 claude-code, claude-desktop, codex, opencode 및 oh-my-pi입니다. 지원되는 스킬 대상은 claude-code, codex, opencode 및 oh-my-pi입니다. Claude Desktop에는 로컬 스킬 대상이 없습니다. 기본 범위는 user입니다. 프로젝트 로컬 구성에는 --scope project를 사용하십시오. --dry-run을 사용하여 쓰지 않고 계획을 검사하십시오. 기존의 호환되지 않는 항목은 오류로 중지됩니다. 교체하거나 제거하려면 --force가 필요합니다. 기존 파일은 모드 0600으로 원자적으로 쓰여지며 교체 또는 제거 전에 *.kivgraph.bak 백업을 받습니다.
등록을 명시적으로 검사하거나 제거합니다:
kivgraph mcp status --target claude-code --scope user
kivgraph mcp remove --target claude-code --scope user
kivgraph skill status --target claude-code --scope user
kivgraph skill remove --target claude-code --scope userMCP 서버를 시작하기 전에 그래프를 초기화하고 게시합니다:
kivgraph init \
--repository project=/absolute/path/to/project \
--languages go,typescript,rust
kivgraph doctor
kivgraph index --fullinit은 자체 포함 구성을 작성합니다. --config가 다른 곳을 가리키면 상태, 캐시 및 레지스트리가 해당 디렉터리에 연결되므로 임시 인덱스가 실제 인덱스를 건드리지 않습니다. index --full은 원자적으로 다시 게시합니다 — 어떤 단계에서 실패해도 이전 세대가 계속 서빙됩니다. 이미 실행 중인 서버는 스스로 새 세대를 따릅니다.
일상적으로:
kivgraph graph status # what is published, and whether a tree has moved
kivgraph doctor # toolchains, storage, and the type-checking ceiling
kivgraph ui # read-only 3D viewer, default 0.0.0.0:7777
kivgraph logs --follow # what it indexed, served and answered, as it happens
kivgraph tool-stats # per-tool cost, calls, and failures
kivgraph stop # terminate this user's serve and ui, never an index
kivgraph clean --keep-activekivgraph ui는 기본적으로 비루프백 주소에 바인딩합니다. 그래프가 저장소가 있는 곳에서 인덱싱되고 다른 곳에서 조회되기 때문입니다. 인증이 없으므로 노출하는 내용을 정확히 로그에 기록하며 --addr이 이를 제한합니다.
logs와 tool-stats는 서버에 묻지 않고 상태 디렉터리의 추가 전용 레코드를 읽습니다. 그래서 답할 수 있는 것입니다: serve가 유지하는 도구별 카운터는 시작될 때 생성되고 중지되면 사라집니다. 파일을 읽으면 답변이 지금까지 실행된 모든 서버를 포괄합니다.
MCP 클라이언트가 STDIO를 통해 서버를 시작하도록 구성합니다:
{
"mcpServers": {
"kivgraph": {
"command": "/home/user/.local/bin/kivgraph",
"args": [
"serve",
"--config",
"/home/user/.config/kivgraph/config.yaml"
]
}
}
}kivgraph serve는 그래프가 존재하기 전에 시작됩니다. 게시된 세대가 없으면 핸드셰이크를 완료하고 쿼리 도구를 게시하지 않으며 재빌드 명령을 instructions에 넣습니다. 클라이언트가 프로세스 자체를 시작하므로 종료는 크래시로 읽힙니다. MCP 프레이밍을 stdout에만 쓰고 로그는 stderr에 기록합니다.
그래프가 담는 것과 담지 않는 것
엣지는 충분한 증거와 올바른 출처가 있을 때만 EXACT입니다. 이름, 경로, 별칭 또는 단일 후보에서 생성되지 않으며, 해석할 수 없는 참조는 삭제되지 않고 이유, 저장소 및 언어와 함께 UNRESOLVED로 게시됩니다. graph_status는 둘 다 세분화하여 보고합니다.
그래서 일부 답변은 엣지가 아니라 부재입니다. Rust 표준 라이브러리가 인덱싱되면 impl Add for u32는 매크로로 생성되며 어떤 소스 범위에도 존재하지 않으므로, 그 사용은 아무도 열 수 없는 엣지가 되는 대신 심볼당 한 번 PROVIDER_DEFINITION_NOT_INDEXED로 선언됩니다.
Kivgraph가 머신에서 파생하는 제공자 — 현재는 툴체인 이름을 딴 rust:1.96.1이라는 Rust 표준 라이브러리 — 는 기본적으로 읽기 결과에서 제외됩니다. 하나의 툴체인은 약 2만 개의 심볼이며, Clone 검색은 core로 답할 것입니다. include_derived가 이를 요청하며, graph_status는 이들이 기여하는 바를 세분화하여 합계를 읽기 쉽게 유지합니다.
개발
make build
make test
make semantic-coverage
make test-ladybugmake test-ladybug는 고정된 네이티브 라이브러리를 링크하는 태그를 실행하는 유일하게 지원되는 방법입니다. 기여 규칙은 AGENTS.md에 있으며, CLAUDE.md가 해당 문서를 링크합니다.
make semantic-coverage는 Go, TypeScript, Python 및 Dart의 릴리스 게이트입니다. 이 명령은 testdata/semantic-coverage/manifest.json의 기계 판독 가능 매트릭스를 검증하고, 정확한 TypeScript, Go 및 Dart 스위트를 실행하며, 정확한 Python 스위트를 위해 Pyright 호환 언어 서버를 요구합니다. 언어는 기능에 픽스처가 있지만 실행 가능한 회귀 테스트가 없는 경우 완료된 것으로 간주되지 않습니다.
스토리지 및 그래프 벤치마크
LadybugDB 검증, 합성 코퍼스 생성기, 로드 및 쿼리 벤치마크, 그리고 doctor, rebuild, rollback, snapshot 명령은 docs/development/storage-benchmarks.md에 문서화되어 있습니다. 문서는 ACCEPT_LADYDB_WITH_LIMITS로 마무리됩니다.
공개 사이트
landing/는 랜딩 페이지와 사용자 문서를 담고 있습니다. 릴리스 번들에는 포함되지 않으며, make landing-check와 make landing-build로 검증되고, 포트 6767에서 제공됩니다. 사이트가 게시하는 내용, MCP 참조가 캡처된 방법, 그리고 아직 미해결인 사항은 docs/development/landing-site.md에 기록되어 있습니다.
구조
cmd/kivgraph/ Main executable.
internal/ Kivgraph internal packages.
ts-worker/ TypeScript worker.
web/ Graph viewer served by `kivgraph ui`.
landing/ Landing page and documentation site (not part of any release).
testdata/ Test fixtures and corpora.
benchmarks/ Benchmark results.
docs/ Documentation and ADRs.
scripts/ Auxiliary automation.라이선스
Kivgraph는 Apache License 2.0에 따라 배포됩니다.
타사 라이선스
Kivgraph와 함께 배포되는 종속성에 대한 고지 사항과 라이선스는 THIRD_PARTY_NOTICES.md에 기록되어 있습니다. 이 목록은 배포 가능한 제품에 종속성이 추가될 때마다 업데이트됩니다.
Available Tools
12 toolsfind_by_intentBRead-only
Which symbols a plain-language description likely names, and the files to open.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| repo | No | ||
| view | No | ||
| limit | No | ||
| cursor | No | ||
| intent | Yes | ||
| keywords | No | ||
| path_prefix | No | ||
| response_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful behavioral context: results are approximate ('likely names') and include both symbols and files to open. However, it does not disclose pagination, ranking, or how the intent is interpreted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short, front-loaded phrase with no filler or redundancy. It conveys the essence of the tool efficiently, though it is compact enough that some information is sacrificed for brevity.
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 nine parameters, no output schema, and only a read-only annotation, the description is far too sparse to fully guide an agent. It omits parameter semantics, result structure, pagination behavior, and how to shape a good intent query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the schema's lack of documentation. It only indirectly covers 'intent' via 'plain-language description' and leaves the other eight parameters including kind, repo, limit, cursor, and keywords entirely 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 states the core function: mapping a plain-language description to likely symbols and files to open. This clearly distinguishes it from siblings like find_symbol, which target exact symbol lookups. However, it is phrased as a noun phrase rather than an explicit verb+resource statement, which slightly weakens clarity.
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 'plain-language description' implies this tool should be used when the user describes intent rather than naming an exact symbol. But it does not explicitly explain when to prefer find_by_intent over find_symbol or find_references, nor does it list exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_cross_repo_consumersCRead-only
Consumers of a symbol in other repositories, exact uses kept apart from package-level dependencies. A language server stops at its workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| repo | No | ||
| view | No | ||
| limit | No | ||
| cursor | No | ||
| language | No | ||
| repository | No | ||
| stable_key | No | ||
| qualified_name | No | ||
| response_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers safety, and the description adds meaningful behavioral context: it separates exact uses from package-level dependencies and notes that a language server stops at its workspace, implying this tool spans workspaces. It does not disclose pagination, cursor behavior, or result shape, so the additional 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?
The description is very concise and front-loads the core purpose in the first clause. Both sentences earn their place, and there is no filler or repetition, though the elliptical noun-phrase style and lack of a verb make it slightly less polished than the strongest examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 optional parameters, no parameter descriptions, and no output schema, the description is too sparse to allow correct invocation: an agent can guess the tool's purpose but not what to pass for path, repo, stable_key, qualified_name, or response_format. It provides enough context for selection but not enough for reliable execution.
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 10 parameters and 0% schema description coverage, the description carries the burden of explaining parameter meaning, but it does not mention path, repo, stable_key, qualified_name, view, cursor, or any other parameter. The only hint is the word 'symbol', which could relate to qualified_name or stable_key, but no explicit mapping is 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?
The description clearly identifies the tool as finding consumers of a symbol in other repositories, and the phrase 'exact uses kept apart from package-level dependencies' distinguishes it from dependency-level queries. It lacks an explicit verb and is phrased as a noun fragment, so it does not fully meet the top bar, but the resource and scope are intelligible.
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 this tool: when you need consumers beyond the current repository and want exact uses rather than package-level dependencies. However, it never names alternatives such as find_references or states explicitly when not to use this tool, leaving usage guidance to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_referencesARead-only
Who calls or references a symbol. Type-checked, not name-matched: grep cannot separate homonyms, and an empty answer means nobody calls it. A bare name suffices: an ambiguous one returns its candidates, so no lookup call first. view: "files" answers which files without a line each.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| path | No | ||
| repo | No | ||
| view | No | ||
| limit | No | ||
| cursor | No | ||
| language | No | ||
| direction | No | ||
| confidence | No | ||
| edge_kinds | No | ||
| repository | No | ||
| stable_key | No | ||
| qualified_name | No | ||
| include_derived | No | ||
| response_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses type-checked behavior, homonym handling, the meaning of an empty result, ambiguity resolution, and the 'view: files' behavior. This is rich behavioral context that materially changes how an agent interprets 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?
Four sentences, each earning its place: purpose, behavioral distinction, usage shortcut, and a view variant. The most important information is front-loaded, and there is 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?
The description covers the minimal invocation path well and explains key result semantics, but with 15 optional parameters and no output schema it leaves advanced usage undocumented. There is no mention of pagination via cursor/limit, language or repo scoping, or what the default response shape is. It is adequate for basic calls but not fully complete given the parameter surface.
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 the description must compensate, but it only explains two parameters: the bare 'name' usage and 'view: files'. The remaining 13 parameters—path, repo, limit, cursor, language, direction, confidence, edge_kinds, repository, stable_key, qualified_name, include_derived, response_format—receive no semantic explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line, 'Who calls or references a symbol,' states a clear verb and resource. The description goes further by contrasting with grep and explaining type-checked semantics, but it does not explicitly distinguish this from sibling tools like find_symbol or trace_dependencies.
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 practical usage context: a bare name suffices, ambiguous names return candidates, and an empty answer means nobody calls it. It does not explicitly state when to prefer an alternative sibling tool, so exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_symbolARead-only
Where a symbol is declared, by name, qualified name, prefix or substring. Narrow with kind, repo and path_prefix.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| mode | No | ||
| name | Yes | ||
| repo | No | ||
| view | No | ||
| limit | No | ||
| cursor | No | ||
| path_prefix | No | ||
| include_derived | No | ||
| response_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no meaningful annotations, so the description carries the behavioral burden. It conveys that this is a search/lookup operation with flexible name matching and filters, but it does not disclose pagination behavior, result shape, or index/search limitations.
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 lead with the tool's purpose and then list the narrowing options, with no filler or repetition. Each phrase adds 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 10 parameters, 0% schema description coverage, no annotations, and no output schema, this short description leaves important call behavior unspecified, including pagination, output formatting, and derived-symbol handling. It is a strong summary but not complete enough for an agent to configure the tool confidently in all cases.
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 must add parameter meaning. It does explain the required name parameter's matching flexibility and maps kind, repo, and path_prefix as narrowing filters, but it leaves mode, view, limit, cursor, include_derived, and response_format 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 opens with the core action, finding where a symbol is declared, and specifies the matching modes (name, qualified name, prefix, substring). This clearly distinguishes it from sibling tools like find_references (where used) and get_symbol (retrieve symbol details).
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 states the intended scenario (locate a declaration site) and how to narrow results with kind, repo, and path_prefix. It does not name sibling alternatives or explicitly state when not to use it, but the declaration-focused wording supplies clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_blast_radiusBRead-only
What a change to this symbol reaches, by repository, package, depth and relation kind. Grep does not follow a chain.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| view | No | ||
| depth | No | ||
| kinds | No | ||
| limit | No | ||
| cursor | No | ||
| max_nodes | No | ||
| confidence | No | ||
| edge_kinds | No | ||
| repository | No | ||
| stable_key | No | ||
| qualified_name | No | ||
| include_derived | No | ||
| response_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety; the description adds the key behavioral trait that this tool follows a dependency chain and reports reach by repository, package, depth, and relation kind. It does not, however, disclose output shape, pagination behavior, or how confidence and edge kinds are applied—details that would matter for a graph-query 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?
The description is two compact sentences with no filler, and the main idea is front-loaded. The second sentence about grep earns its place by clarifying the tool's transitive nature, even though the phrasing is 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?
Despite its simplicity, the tool has a large optional parameter set, no schema descriptions, and no output schema. The description does not explain which identifier parameter to use, how pagination works, what response_format values are accepted, or what the returned blast radius looks like, making it insufficient for confident 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?
With 0% schema description coverage and 14 parameters, the description must compensate, but it only hints at repository, depth, relation kind, and symbol identity. Parameters such as cursor, max_nodes, confidence, include_derived, stable_key, and response_format receive no guidance, leaving the agent to guess their meaning or required combinations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly conveys the tool's purpose even without an explicit verb: it shows what a change to a symbol reaches across repositories, packages, depth, and relation kinds. This distinguishes it from ordinary reference lookup, though it does not explicitly name sibling tools such as trace_dependencies or find_cross_repo_consumers.
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 'Grep does not follow a chain' implies the tool should be used when transitive dependency traversal is needed, rather than simple text search. However, it provides no explicit when-to-use guidance against sibling tools like find_cross_repo_consumers or trace_dependencies, leaving the choice largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_outlineARead-only
Declarations under a path, grouped by file, with kind, signature and range. Use it for a package; one small file is cheaper to read.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| path | Yes | ||
| view | No | ||
| limit | No | ||
| cursor | No | ||
| repository | Yes | ||
| include_members | No | ||
| response_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals output behavior beyond the readOnlyHint annotation: results are grouped by file and include kind, signature, and range. It also gives a cost-oriented hint. This adds useful context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences. The core meaning is front-loaded, and the second sentence adds practical usage guidance without redundancy.
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 basic use with only required parameters, the description is adequate: it tells the agent what the tool returns and when to use it. However, with no output schema, minimal annotations, and several optional parameters that affect pagination and response format, the description leaves meaningful gaps for an agent trying to fully understand invocation options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are 8 parameters, but the description only clarifies the notion of a path and, ambiguously, 'kind' as an output field. Parameters like limit, cursor, view, include_members, and response_format are left completely unexplained, so the description does not compensate for the schema 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 states a specific operation: retrieving declarations under a path, grouped by file, with kind, signature, and range. This clearly goes beyond restating the tool name, though it does not name a sibling or explicitly contrast itself with get_source or get_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?
It gives explicit guidance to use this for a package and hints that reading a single small file directly is cheaper. It does not name the alternative tool or provide a formal when-not-to-use list, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sourceBRead-only
The code of several symbols in one call. Prefer it to reading each range: no line numbers, one call across files and repositories.
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes | ||
| context_lines | No | ||
| response_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile. The description adds useful behavioral context: it returns source for multiple symbols, excludes line numbers, and spans files/repositories. It does not explain response format or potential limitations, but it does not contradict the annotation and discloses the most relevant behavioral trait.
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 short sentences with the core purpose front-loaded and the usage rationale following. There is minor redundancy of 'one call' appearing twice, but otherwise every phrase earns its place and there is 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?
With no output schema, no parameter descriptions in the schema, and only a terse description, the definition omits key invocation details. The agent cannot infer how to structure the symbol objects (path, repository, stable_key, qualified_name), what context_lines does, or what response_format values are accepted. This is incomplete for a tool with three parameters and zero schema-level documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining parameters. It only implies that 'symbols' is the main input by saying 'several symbols' and gives a hint about cross-repository support. context_lines and response_format are completely unexplained, leaving the agent without enough information to set them correctly.
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 that the tool returns the code of several symbols in one call, making the core purpose clear. It also distinguishes itself from per-range reads by noting cross-file and cross-repository support, which helps differentiate it from the sibling get_symbol. It lacks an explicit verb like 'retrieves', but the meaning is still unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit usage preference: prefer this tool over reading each range when you need multiple symbols, citing benefits like no line numbers and one call across files/repositories. It does not name particular alternative tools or state exclusions, but the guidance is clear enough for an agent to make a reasonable choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_symbolBRead-only
One symbol's package, signature, visibility and line range, by stable key or by repository, path and qualified name.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| repository | No | ||
| stable_key | No | ||
| qualified_name | No | ||
| response_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the safety profile is covered. The description adds useful context about the returned symbol data and the two lookup modes, but it does not disclose behavior for ambiguous matches, missing symbols, or precedence when multiple parameters are provided. Given the read-only annotation, this is acceptable but not thorough.
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 dense sentence with no filler, front-loading the returned data before the lookup modes. Every phrase adds relevant information and the length is appropriate for the tool's complexity.
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, five optional parameters, and eleven sibling tools, the description is thin on operational context. It does not explain response_format, valid parameter combinations, ambiguity/error behavior, or how get_symbol relates to find_symbol and get_source, so an agent receives insufficient guidance for reliable 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 0%, so the description carries the burden of explaining parameters. It does map stable_key to one lookup mode and repository, path, qualified_name to another, adding meaning beyond bare schema names. However, response_format is left unexplained, and with no required parameters the agent cannot be certain which parameter combinations are valid or whether the modes are mutually exclusive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific action ('get'), a specific resource ('one symbol'), and the returned metadata (package, signature, visibility, line range). It also distinguishes the lookup style from search-oriented siblings by mentioning exact retrieval via stable key or repository/path/qualified name, though it does not explicitly contrast it with a sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use get_symbol instead of siblings such as find_symbol, find_references, or get_source. The description implies an exact-lookup use case but does not state exclusions, prerequisites, or scenarios where another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_statusARead-only
The published generation: counts, provenance, and whether a repository moved since it was indexed. Call it when an answer looks stale.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation, and the description adds meaning beyond that: it discloses the kind of status information returned (counts, provenance, moved flag) and ties it to staleness checking. No contradiction with annotations was found.
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 carry all the essential content: what the tool reports and when to call it. The wording is front-loaded and contains no filler or redundant restating of the tool name.
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-parameter read-only status tool, the description covers what it returns and when to use it. Since no output schema exists, the explicit enumeration of counts, provenance, and repository-moved status partially compensates, though terms like 'published generation' and 'provenance' are left somewhat underspecified.
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 0 parameters, so the parameter burden is minimal. With no parameters to document, the baseline of 4 applies; the description appropriately says nothing about parameters because there are none to explain.
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 the resource—the published generation—and specifies three concrete data categories it exposes: counts, provenance, and repository-moved status. It is clearly distinct from retrieval/indexing siblings like find_symbol or index_project, though it lacks a direct verb like 'reports' or 'returns'.
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 an explicit trigger: 'Call it when an answer looks stale.' This gives clear context for when to use the tool. It does not spell out when not to use it or name specific alternatives, but the sibling list makes the status-versus-search distinction apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_projectIndex projectADestructive
Registers projects and rebuilds the graph once, after explicit user approval. Pass every project in one call: a rebuild costs the whole corpus. It never writes inside the source projects.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| path | No | ||
| projects | No | ||
| confirmed | No | ||
| languages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| index | Yes | |
| counts | Yes | |
| project | Yes | |
| projects | Yes | |
| snapshot_id | Yes | |
| generation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description clarifies exactly what is affected—the graph is rebuilt—and explicitly states that source projects are never written to. It also adds the cost implication of a rebuild, which is valuable behavioral context and does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying essential information: purpose, approval, batching/cost, and source safety. The key constraints are front-loaded and there is 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?
The description covers the critical workflow, safety boundary, and rebuild cost, and an output schema exists to describe return values. However, with five undocumented parameters and ambiguity about how to supply a single project versus multiple projects, the agent still has to fill significant gaps before calling the tool 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%, so the description must compensate for explaining the parameters. It only indirectly covers projects via 'pass every project in one call' and confirmed via 'explicit user approval'; name, path, languages, and the relationship between the top-level fields and the projects array are left 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 states a specific action: register projects and rebuild the graph, which clearly distinguishes this from the read-only find/get/list siblings. It does not explicitly name an alternative or contrast itself with sibling tools, so it stops just short of the top score.
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 concrete operational guidance: only run after explicit user approval, and pass every project in one call because a rebuild costs the whole corpus. It does not explicitly say when not to use the tool or which sibling to prefer in other situations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_repositoriesCRead-only
The repositories the published graph covers, with the commit each was indexed at.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals safe read-only behavior, so the description does not need to restate that. It does add useful context about the output's scope—repositories covered by the published graph and their indexed commits. However, it does not mention pagination behavior, ordering, or whether results are stable snapshots, which would be valuable for a cursor-based list.
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 compact sentence with no filler. It front-loads the core subject and includes only the essential distinguishing detail—the associated commit—without redundant phrasing.
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?
While the tool is simple and read-only, the description omits parameter semantics, pagination behavior, and any connection to the broader published-graph state. There is no output schema to compensate, so an agent lacks enough detail to confidently construct a correct paginated call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the parameters limit and cursor have no schema-level documentation. The description adds nothing about their meaning or interaction, leaving the agent to guess that cursor is for pagination. This is a significant gap in a tool whose only two parameters are entirely undocumented.
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 the exact resource—repositories covered by the published graph—and adds the meaningful detail that each entry includes the commit it was indexed at. The tool name supplies the verb 'list,' so the overall purpose is clear. It differentiates from sibling tools like find_symbol or trace_dependencies by its repository-level scope, even though it does not explicitly compare itself to them.
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 guidance on when to use this tool versus alternatives, how pagination works, or what context would make it the right choice. The description only says what the tool returns, leaving the agent to infer when to call it. This is a clear gap given the tool has siblings and two pagination parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_dependenciesBRead-only
What this symbol reaches outward, bounded by depth. Pass to for the route by which it reaches one named symbol. Grep does not follow a chain.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| path | No | ||
| repo | No | ||
| view | No | ||
| depth | No | ||
| limit | No | ||
| cursor | No | ||
| to_path | No | ||
| language | No | ||
| max_nodes | No | ||
| confidence | No | ||
| edge_kinds | No | ||
| repository | No | ||
| stable_key | No | ||
| qualified_name | No | ||
| include_derived | No | ||
| response_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers safety, and the description adds some behavioral context: traversal is outward, depth-bounded, and can return a route to a named symbol. It does not disclose cycle handling, response shape, performance characteristics, or failure modes, so the disclosure remains minimal but not contradictory.
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 short and front-loaded with the core behavior, but the grammar is awkward and incomplete ('Pass to for the route...'), which hurts readability. Each sentence contributes something, but the overall structure is fragmented rather than cleanly specifying behavior, parameters, and alternatives.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 17 parameters, no output schema, and no parameter descriptions, the description covers only the basic notion of outward traversal and a single routing parameter. An agent would struggle to know what `edge_kinds`, `stable_key`, `view`, `cursor`, or `response_format` control, and what the tool returns. The definition is far from 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 description coverage is 0%, and the tool has 17 parameters. The description meaningfully explains only `depth` and `to`; the remaining 15 parameters such as `edge_kinds`, `max_nodes`, `stable_key`, `confidence`, and `response_format` receive no guidance. This is far too little semantic support for an API of this size.
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 communicates that the tool traces what a symbol reaches outward, bounded by depth, which identifies it as a transitive dependency tracer. It also explains that passing `to` yields the route to one named symbol. However, it does not explicitly distinguish itself from sibling tools like find_references or get_blast_radius, and the phrasing is elliptical.
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 line 'Grep does not follow a chain' gives a hint that this tool should be used when transitive or multi-hop dependency chains are needed, rather than simple text search. But it does not mention when to prefer or avoid sibling tools such as find_references or get_blast_radius, leaving most usage decisions implicit.
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.9.2- First observed
find_by_intent - First observed
find_cross_repo_consumers - First observed
find_references - First observed
find_symbol - First observed
get_blast_radius - First observed
get_file_outline - First observed
get_source - First observed
get_symbol - First observed
graph_status - First observed
index_project - First observed
list_repositories - First observed
trace_dependencies
TDQS
Scored across 12 tools
Each tool targets a distinct query type—semantic search, identifier search, symbol metadata, reference/consumer lookup, forward/reverse graph traversal, and index administration—but get_blast_radius vs trace_dependencies and find_references vs find_cross_repo_consumers are close enough that an agent must read descriptions carefully to pick correctly.
Most tools follow a verb_noun pattern (find_*, get_*, list_repositories, index_project, trace_dependencies), forming clear families for search and retrieval. graph_status is the notable outlier, reading as a noun phrase rather than a verb-object command.
Twelve tools is well within the ideal range for a code-intelligence server, and each tool earns its place: symbol search, references, cross-repo consumers, dependency/impact analysis, source/outline retrieval, and index administration. None of the tools feels redundant.
The surface covers discovery, metadata, source/outline retrieval, references/consumers, dependency and blast-radius analysis, plus index status and registration, so core workflows are well supported. Minor gaps exist around arbitrary file-content reads and project removal or re-indexing semantics, but agents can work around them.
Maintenance
Related MCP Connectors
Search indexed code, trace dependencies, assess change impact, and recall repository memory.
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Ask who calls a route, what a change breaks or who reads a field, across a system's repos.
Codebase graphs, caller impact analysis, and recorded project context for AI coding agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables querying and analyzing code relationships by building a lightweight graph of TypeScript and Python symbols. Supports symbol lookup, reference tracking, impact analysis from diffs, and code snippet retrieval through natural language.-
- AlicenseNot gradedqualityDmaintenanceEnables semantic code search across multiple repositories using natural language queries. Provides intelligent code discovery, symbol lookups, and cross-repo dependency analysis for AI coding agents.MIT
- AlicenseNot gradedqualityAmaintenanceSupercharge your Agent with Semantic Code Intelligence and save 💰 in the process!662MIT
- AlicenseNot gradedqualityAmaintenanceSupercharges AI coding agents with a pre-indexed semantic code graph, enabling instant symbol relationships, impact analysis, and context retrieval across 20+ languages.128,535 npm74,173MIT