token-context-mcp
Token Context MCP
token-context-mcp는 등록된 저장소를 인덱싱하고 작은 소스 해시 기반 코드 컨텍스트 패킷을 반환하는 읽기 전용 로컬 MCP 서버입니다. 구문 분석이 완전한 의미 모델이라고 주장하지 않으면서 광범위한 저장소 크롤링을 줄이도록 설계되었습니다.
0.1.0에 구현된 기능
명시적 저장소 등록. MCP 도구는
repo_id를 받으며 임의 경로는 절대 받지 않습니다.Python, JavaScript 및 TypeScript/TSX용 Tree-sitter 파싱
파일, 심볼, 어휘적 엣지, 매니페스트 및 소스 해시가 포함된 SQLite 스냅샷
토큰 예산이 적용된 저장소 맵, 소스 기반 스켈레톤, 심볼 컨텍스트 및 범위가 제한된 영향 슬라이스
MCP
stdio를 통한 엄격한 읽기 전용 도구 표면시크릿/메타데이터에 대한 하드 거부 규칙, 경로 탐색/리파스 포인트 검사 및 리소스 제한
보편적 절감을 주장하는 대신 증거를 보고하는 보안, 통합 및 벤치마크 하네스
Related MCP server: io.github.pmgarg/cgraphy
비목표 및 보안 경계
이 서버는 파일을 편집하지 않고, 셸 명령을 실행하지 않으며, HTTP로 수신하지 않고, 네트워크 API를 호출하지 않으며, 임의의 저장소 경로를 허용하지 않습니다. stdio는 OS 샌드박스가 아닙니다. 강제된 네트워크 경계가 필요한 경우 no-egress/최소 권한 정책으로 배포하세요. 도구 결과는 여전히 MCP 호스트의 LLM 컨텍스트에 배치될 수 있습니다.
빠른 시작
uv sync --extra dev
uv run token-context register --repo-id demo --root D:\AI\some-repo
uv run token-context index --repo-id demo
uv run token-context status --repo-id demo
uv run token-context serve기본적으로 레지스트리는 현재 Windows 사용자에 대해 %APPDATA%\token-context-mcp\repos.toml에 전역으로 저장되며 현재 작업 디렉터리와 독립적입니다. 명시적인 공유/이식 가능 TOML 경로를 사용하려면 TOKEN_CONTEXT_CONFIG를 설정하세요. Codex의 경우 구성된 stdio MCP 명령을 통해 패키지를 실행하세요. 서버가 나열하는 읽기 전용 도구만 사용하세요.
저장소를 안전하게 등록
등록은 업로드, Git 작업 또는 소스 코드 변경이 아니라 명시적인 로컬 허용 목록 결정입니다. --repo-id는 MCP 요청에 사용되는 안정적인 식별자이며, --root는 서버가 읽을 수 있는 유일한 정식 저장소 디렉터리입니다.
Set-Location D:\AI\token-context-mcp
uv run token-context register --repo-id video-lecturer --root D:\AI\video_lecturer
uv run token-context index --repo-id video-lecturer
uv run token-context status --repo-id video-lecturerD:\AI와 같은 광범위한 상위 경로가 아닌 특정 프로젝트 루트를 사용하세요. 관련 변경 후 index를 다시 실행하세요. 변경되지 않은 파싱 결과를 재사용합니다. 기존 등록 및 인덱스 데이터베이스는 동일한 Windows 사용자로 실행되는 모든 MCP 프로세스에서 공유됩니다.
하나의 터미널 또는 이식 가능한 배포에 대해 다른 레지스트리 위치를 사용하려면 MCP 서버를 등록, 인덱싱 및 시작하기 전에 설정하세요:
$env:TOKEN_CONTEXT_CONFIG = 'D:\trusted-shared-config\repos.toml'
uv run token-context register --repo-id myrepo --root D:\projects\myrepo
uv run token-context index --repo-id myrepo코딩 에이전트에서 사용
이는 로컬 MCP stdio 서버입니다. 로컬 프로세스를 시작할 수 있고 PATH에 uv가 있는 클라이언트에서 작동합니다. 동일한 Windows 사용자로 실행되는 각 클라이언트 프로세스는 동일한 전역 저장소 레지스트리를 자동으로 읽습니다. 레지스트리 또는 해당 정책을 변경한 후에는 클라이언트를 다시 시작하세요.
클라이언트 | 로컬 | 설정 상태 |
Codex CLI / IDE | 예 | 이 머신에 설치되어 엔드투엔드 테스트를 완료했습니다. |
Claude Code | 예 | 지원됨. 사용자 또는 프로젝트 범위에서 추가하세요. |
GitHub Copilot CLI | 예 | CLI 사용자 구성 또는 프로젝트 구성을 통해 지원됩니다. |
GitHub Copilot Chat in VS Code | 예 |
|
Google Antigravity IDE / CLI | 예 | 전역 또는 작업 영역 |
Claude Desktop | 조건부 | Desktop Extensions를 통해 로컬 MCP를 지원하지만, 이 프로젝트는 아직 |
클라우드/웹 에이전트는 이 Windows 머신에서 이 서버를 시작할 수 없습니다. 별도로 배포되고 인증된 HTTP MCP 서비스가 필요합니다. 이 프로젝트는 의도적으로 로컬 stdio 전송만 제공합니다.
Codex
Codex를 token-context-mcp에 연결하는 방법은 두 가지입니다:
방법 A: Codex CLI를 통해
codex mcp add token-context -- uv run --directory D:\AI\token-context-mcp token-context serve --transport stdio
codex mcp get token-context방법 B: 직접 구성 파일 (~/.codex/config.toml)
PowerShell PATH에서 codex 명령을 사용할 수 없는 경우 %USERPROFILE%\.codex\config.toml에 서버를 직접 추가하세요:
[mcp_servers.token-context]
command = "uv"
args = ["run", "--directory", "D:\\AI\\token-context-mcp", "token-context", "serve", "--transport", "stdio"]GUI용 팁: Codex가
uv를 찾을 수 없으면"uv"를 절대 경로로 바꾸세요:"C:\\Users\\<YourUser>\\AppData\\Roaming\\Python\\Python312\\Scripts\\uv.exe".
Claude (Claude Code 및 Claude Desktop)
1. Claude Code (CLI)
claude mcp add --transport stdio --scope user token-context -- uv run --directory D:\AI\token-context-mcp token-context serve --transport stdio
claude mcp get token-context2. Claude Desktop (Windows 앱)
%APPDATA%\Claude\claude_desktop_config.json 파일을 열거나 생성하고(예: C:\Users\<YourUser>\AppData\Roaming\Claude\claude_desktop_config.json) 다음을 추가하세요:
{
"mcpServers": {
"token-context": {
"command": "uv",
"args": [
"run",
"--directory",
"D:\\AI\\token-context-mcp",
"token-context",
"serve",
"--transport",
"stdio"
]
}
}
}task2-demo 등록 및 사용
1. 저장소 등록 및 인덱싱
PowerShell에서 다음 명령을 실행하세요(%APPDATA%\token-context-mcp\repos.toml에 전역으로 등록됨):
# Register repository
uv run --directory D:\AI\token-context-mcp token-context register --repo-id task2-demo --root D:\AI\video_lecturer\task\task2_demo
# Build index
uv run --directory D:\AI\token-context-mcp token-context index --repo-id task2-demo
# Check status
uv run --directory D:\AI\token-context-mcp token-context status --repo-id task2-demo2. Codex / Claude / Antigravity용 예제 프롬프트
Codex, Claude 또는 Antigravity를 다시 시작한 후 채팅에 다음 프롬프트를 보내세요:
Use token-context for repo_id "task2-demo".
Start with get_repo_map at 512 tokens to inspect the project structure,
then use get_file_skeleton for "src/lecturer_demo/cli.py".클라이언트가 서버를 시작할 수 없는 경우 먼저 PowerShell에서 uv run --directory D:\AI\token-context-mcp token-context serve --transport stdio를 실행하여 Python 환경을 확인하세요. GUI 클라이언트는 때때로 터미널의 PATH를 상속하지 않습니다. 이 경우 command를 uv.exe의 절대 경로로 설정한 다음 클라이언트를 다시 시작하세요.
공식 클라이언트 설정 참조: OpenAI Codex, Claude Code, GitHub Copilot CLI, GitHub Copilot in IDEs, Antigravity 및 Claude Desktop.
토큰 및 리소스 제한
전역 레지스트리에는 시행 가능한 [server] 정책이 있습니다. 변경 사항을 적용하려면 TOML을 편집하고 Codex를 다시 시작하세요:
[server]
max_request_bytes = 65536
max_result_tokens = 2048
max_graph_nodes = 75
max_symbol_results = 15
network_policy = "declared-deny-not-enforced"max_result_tokens는 맵, 스켈레톤 및 심볼 컨텍스트의 출력을 제한합니다. 이는 모델 컨텍스트 소비의 주요 제어 수단입니다.max_graph_nodes는 영향 슬라이스 순회를 제한합니다.max_symbol_results는 검색 결과를 제한합니다.max_request_bytes는 과도하게 큰 MCP 입력을 거부합니다.
값이 낮을수록 토큰이 줄어들지만 더 많은 잘림과 후속 호출이 발생합니다. 서버는 반환하는 컨텍스트만 제한합니다. 전체 Codex/모델 세션에 대해 공급자 청구 하드 한도를 부과할 수는 없습니다.
명령
register: 정식 비-링크 저장소 루트를 로컬 TOML 레지스트리에 추가합니다.index: 원자적 SQLite 스냅샷과 JSON 매니페스트를 빌드합니다.status: 저장된 스냅샷을 검사하고 빌드 이후 변경된 파일을 감지합니다.serve: MCPstdio서버를 시작합니다.benchmark-report: 계측된 JSONL 실행 로그에서 요약 통계를 계산합니다.release-materials: SBOM/출처 시작 아티팩트를 생성합니다. 서명 및 OS 샌드박스 증거는 배포 책임으로 남습니다.
도구 계약
get_repo_mapfind_symbolsget_file_skeletonget_symbol_contextget_impact_sliceget_index_status
모든 결과는 index_run_id, freshness, 예산, 경고 및 소스 증거가 포함된 JSON 엔벨로프입니다. 어휘적 엣지는 명시적으로 ambiguous로 표시됩니다. 해결되지 않은 엣지는 관계가 존재하지 않는다는 증거가 아닙니다.
개발
uv run pytest
uv run token-context release-materials --output supply-chain위협 모델, 통합 지침 및 벤치마크 프로토콜은 SECURITY.md 및 docs/를 참조하세요.
Available Tools
10 toolsfind_symbolsFind symbolsC
Find source-backed symbols by name or qualified-name pattern. Returns IDs and spans, never arbitrary files.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | ||
| pattern | Yes | ||
| profile | No | ||
| repo_id | Yes | ||
| max_tokens | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it does add real behavioral context: results are "source-backed" and return "IDs and spans, never arbitrary files," which tells the agent the result shape and constraints. It omits read-only nature, pagination, and any failure/empty-result behavior for a 6-param 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, front-loaded with the core action and followed by the return-value constraint. No wasted words, though the extreme brevity is part of why parameter detail is missing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no annotations, no output schema, and 0% schema description coverage, the definition is under-specified. It states return contents but leaves parameter meaning and usage boundaries to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate — but it only hints at the pattern parameter. kind, profile, limit, max_tokens, and repo_id are undocumented anywhere, leaving half the parameter surface opaque (e.g., what kind values are valid, what profile selects).
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?
"Find source-backed symbols by name or qualified-name pattern" gives a specific verb (find) and resource (symbols) plus the lookup key. It clearly distinguishes a symbol search from file-level siblings like search_source, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool is useful (name/qualified-name lookup) but offers no explicit when-to-use, when-not-to-use, or routing guidance among the many symbol-related siblings (inspect_symbol, get_symbol_context, search_source). An agent must infer the boundary itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_skeletonFile skeletonC
Imports and source-backed headers from one file. Function bodies elided by default.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| profile | No | ||
| repo_id | Yes | ||
| max_tokens | No | ||
| include_private | No |
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 that function bodies are elided by default, which is a meaningful behavioral trait, but says nothing about permissions, whether the operation is read-only, truncation behavior from max_tokens, or what the profile parameter alters.
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 with no filler, and the core output (imports and headers) is front-loaded. The phrasing 'Imports and source-backed headers' is slightly awkward but compact.
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 5-parameter tool with no annotations, no output schema, and 0% schema description coverage, this description is far too thin. It omits parameter meanings, privacy behavior, truncation behavior, and any sense of output shape beyond the elision default.
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% across 5 parameters, so the description must compensate but largely does not. 'One file' weakly implies path/repo_id, and 'by default' weakly hints at profile or include_private configurability, but max_tokens, include_private, and the profile semantics remain 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 states the specific resource (one file) and what is returned (imports and source-backed headers), and distinguishes the resource from siblings like search_source or inspect_symbol by naming the skeleton concept. It is clear but does not explicitly differentiate itself from the sibling set.
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 such as inspect_symbol, get_symbol_context, or search_source. The agent must infer that a file skeleton is preferred over symbol-level or source-text tools, which is not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_impact_sliceImpact candidate sliceC
Traverse observed caller/callee edges from a symbol. Candidate impact slice, not complete blast radius.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| profile | No | ||
| repo_id | Yes | ||
| direction | No | both | |
| max_nodes | No | ||
| symbol_id | Yes | ||
| max_tokens | No | ||
| min_confidence | No | ||
| filter_ambiguous | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It usefully discloses that edges are 'observed' and the result is a 'candidate impact slice, not complete blast radius,' but omits permissions, return behavior, and limits for its 9 parameters.
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, front-loaded sentences with no wasted words. The scope caveat is placed immediately after the core action, making the description easy to scan.
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 9 parameters, no output schema, and no annotations, the description is too thin. It gives the core purpose and a scope caveat but leaves parameter behavior and invocation guidance almost entirely undocumented.
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% for 9 parameters, and the description adds no meaning beyond 'from a symbol' and 'caller/callee edges.' It does not explain depth, profile, max_nodes, max_tokens, min_confidence, or filter_ambiguous.
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 action: traverse observed caller/callee edges from a symbol. The added caveat 'Candidate impact slice, not complete blast radius' clarifies scope, though it does not name sibling alternatives like get_module_dependents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance or alternatives are provided. The caveat 'not complete blast radius' hints at a limitation but does not route the agent to another tool or condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_index_statusIndex statusB
Active snapshot metadata and paths changed since indexing. Run before relying on graph results.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the timing guidance and that it reports index freshness/changed paths, but it does not explicitly state read-only safety, side effects, permissions, or freshness semantics, leaving behavioral traits partly implicit.
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 with no filler and usage guidance front-loaded after the return summary. The first sentence is a fragment, but the description avoids bloat.
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 no annotations, no output schema, and no parameter descriptions, the description is under-informative: it covers return content at a high level but omits repo_id semantics and safety/profile details. It is not complete enough for an agent to call without additional assumptions.
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 define repo_id, but it never mentions the parameter. The single required parameter's meaning, format, and scope are left to inference from its name alone.
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 supplies the data returned (active snapshot metadata, changed paths since indexing) but never uses a clear verb and does not differentiate this status check from the graph-query siblings. An agent can infer it is a read, but the purpose is not stated as explicitly as a 'returns X' statement would be.
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 a clear trigger: run before relying on graph results. No when-not condition or alternative tool is named, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_module_dependentsModule dependentsC
Lexical import relationships for indexed path or module. Dynamic imports flagged. Not semantic resolution.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| module | No | ||
| profile | No | ||
| repo_id | Yes | ||
| max_tokens | 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 meaningful caveats: results are lexical rather than semantic, and dynamic imports are flagged separately. However, it never clarifies directionality (do dependents mean files that import this module, or its imports?), nor result format, limits, or indexing requirements.
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 fragments, front-loaded with the core purpose and the caveat, with no filler. It is telegraphic to the point of strain but every clause carries 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?
For a 5-parameter tool with no schema descriptions, no annotations, and no output schema, the description leaves too much unaddressed: required repo_id, profile, max_tokens, and the direction of the relationship. An agent could not invoke this reliably without guessing.
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% across 5 parameters and the description only addresses two of them (path, module). repo_id is required yet unexplained, and profile and max_tokens are never mentioned, 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?
States a specific resource (lexical import relationships) and scopes it to an indexed path or module, which is enough to tell it apart from siblings like get_repo_map or find_symbols. The verb is implicit ('get' in the name), but the returned concept is clearly identified.
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 reference to sibling alternatives such as get_impact_slice or get_symbol_context. The phrase 'for indexed path or module' hints at applicability but does not guide tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repo_mapRepository mapB
Ranked definitions for a repo_id within budget. Compact entries are [id, path:line, kind/name]; format='full' adds signatures and evidence. For orientation, not proof of full coverage.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| format | No | ||
| profile | No | ||
| repo_id | Yes | ||
| budget_tokens | No | ||
| include_tests | No | ||
| include_omitted_ids | No |
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 usefully discloses the entry format, the budget constraint ('within budget'), and a coverage caveat, but says nothing about auth, performance, or how budget truncation interacts with include_omitted_ids.
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 dense sentences, front-loaded with the core purpose and output contract, with the caveat last. 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 7-parameter tool with no annotations and no output schema, leaving four parameters unexplained and omitting any routing guidance to the many sibling discovery tools is a substantial gap, even though the format and coverage caveat are handled well.
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% with 7 parameters. Only format='full' vs compact is explained and budget_tokens is hinted at via 'within budget'. query, profile, include_tests, and include_omitted_ids are entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('Ranked definitions for a repo_id') and the two output shapes, which distinguishes it from siblings like get_file_skeleton and get_symbol_context. It does not explicitly name the sibling it complements, so it stops 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?
'For orientation, not proof of full coverage' implies when the tool is appropriate, but there is no explicit when-to-use versus alternatives such as get_file_skeleton or inspect_symbol. Usage is suggested rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_symbol_contextSymbol contextC
Bounded source packet for indexed symbol and observed edges. Check freshness and ambiguity warnings. A body larger than max_tokens is read in windows with body_offset_line.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| profile | No | ||
| repo_id | Yes | ||
| symbol_id | Yes | ||
| max_tokens | No | ||
| include_body | No | ||
| body_offset_line | No | ||
| include_omitted_ids | No |
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 usefully discloses that the result is bounded and that large bodies are read in windows via max_tokens and body_offset_line, but it omits permissions, error behavior, and freshness/ambiguity warning semantics.
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-loads the core purpose, then adds two relevant behavioral notes. It avoids repetition, though the wording is terse enough that some important details feel compressed rather than clarified.
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 an 8-parameter tool with no annotations, no output schema, and 0% schema description coverage, the description is materially incomplete. It covers the surface purpose and windowing behavior but leaves most parameters, return structure, and alternative-tool selection unexplained.
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, so the description must compensate. It explains only max_tokens and body_offset_line indirectly; depth, profile, include_body, include_omitted_ids, repo_id, and symbol_id remain undocumented beyond their titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource: a bounded source packet for an indexed symbol plus observed edges. It communicates what the tool returns, but it does not distinguish the tool from siblings such as inspect_symbol or get_file_skeleton, so an agent must infer the boundary.
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 output-related advice ('Check freshness and ambiguity warnings') but does not state when to choose this tool over alternatives like inspect_symbol or find_symbols. No prerequisites, exclusions, or selection criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_symbolInspect symbol (composite)C
Resolve a symbol and its immediate graph in one call. view='full' returns a context packet: body, callee/caller signatures, related tests. Use before editing a symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | normal | |
| query | Yes | ||
| repo_id | Yes | ||
| budget_tokens | No |
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 doesn't state whether this is read-only, whether there are rate limits or caching behavior, what 'immediate graph' means in practice, or how the view modes affect behavior. The token budget implication is only hinted at.
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 tight sentences, front-loaded with purpose. No wasted words, though the 'view=full' detail would be better placed after establishing the baseline behavior.
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 4-param composite tool with no annotations and no output schema, the description is thin. It doesn't explain the return packet shape beyond a partial list, doesn't document the budget_tokens interaction, and leaves view semantics mostly opaque.
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 for undocumented params. It mentions view='full' but doesn't explain what 'minimal' or 'normal' return, doesn't clarify the required 'query' semantics (symbol name? pattern?), and never mentions repo_id or budget_tokens.
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: 'Resolve a symbol and its immediate graph in one call.' Clear on what the tool does, though it doesn't distinguish itself from sibling get_symbol_context, which likely overlaps significantly.
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?
Says 'Use before editing a symbol,' which implies a workflow context. But it gives no explicit when-not-to-use guidance and doesn't differentiate from close siblings like get_symbol_context or find_symbols.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_repositoriesRegistered repositoriesA
List registered repository IDs. Call this first; roots are never exposed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 adds one useful behavioral fact ('roots are never exposed'), which tells the agent something about result scoping. However it omits return volume, ordering, and whether an index must exist, leaving the safety/behavioral profile thin for a tool with zero annotation coverage.
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, purpose front-loaded, followed by the usage cue and the scoping note. Every clause earns its place with 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?
A zero-param read tool with no output schema is largely self-describing; the description names what is returned (IDs) and a scope caveat. It could have mentioned whether an index must be built first, but nothing essential to invoking it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to clarify beyond confirming it is a no-argument listing call.
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 ('List registered repository IDs') and even specifies the return granularity (IDs, not full repo objects). It doesn't explicitly differentiate from siblings like get_repo_map or get_index_status, but the resource is distinct enough that confusion is unlikely.
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?
'Call this first' gives a clear ordering cue for the workflow, which is meaningful for a discovery tool. It does not name an alternative or a when-not condition, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_sourceSearch sourceB
Full-text search ranked by enclosing symbol. expand='graph' (default for profile 'locate') adds resolved callers/callees as neighbors. Call before reading files.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| expand | No | auto | |
| profile | No | ||
| repo_id | Yes | ||
| expand_k | No | ||
| max_tokens | No | ||
| expand_hops | No | ||
| min_confidence | 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 does disclose two real behaviors: symbol-based ranking and graph expansion that adds resolved callers/callees as neighbors. It says nothing about permissions, cost/latency, ranking fallback, or what happens with the non-enum parameters, so transparency is partial.
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, front-loaded with the core purpose, then the expand behavior, then a usage cue. No padding, though the parameter detail sentence is dense and cryptic without surrounding context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 9-parameter tool with no annotations, no output schema, and 0% schema description coverage needs considerably more from the description. It explains only one parameter interaction and omits the meaning, defaults, and effects of most arguments, leaving an agent under-equipped to invoke it 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% and there are 9 parameters, so the description must compensate. It only clarifies expand='graph' and its interaction with profile 'locate', leaving limit, max_tokens, expand_k, expand_hops, and min_confidence completely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Full-text search") and adds a distinguishing behavioral detail: results are ranked by enclosing symbol. It does not, however, differentiate itself from siblings like find_symbols or inspect_symbol, so an agent cannot tell from the text alone which search tool to pick.
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?
"Call before reading files" gives an implied usage context, suggesting this is a discovery/entry-point tool. But there is no when-not guidance and no explicit routing to alternatives such as find_symbols for symbol lookups, so the guidance stays at implication level.
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.
1 tool update
v0.3.3- Changed
get_symbol_context1 field changed- added
Input schema / properties / body_offset_lineAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Body Offset Line" +}
3 tool updates
v0.2.0- Changed
get_impact_slice2 fields changed- added
Input schema / properties / filter_ambiguousAdded value: +{ + "default": true, + "title": "Filter Ambiguous", + "type": "boolean" +} - added
Input schema / properties / min_confidenceAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Min Confidence" +}
- Added
inspect_symbol - Changed
search_source4 fields changed- added
Input schema / properties / expandAdded value: +{ + "default": "auto", + "enum": [ + "auto", + "none", + "graph" + ], + "title": "Expand", + "type": "string" +} - added
Input schema / properties / expand_hopsAdded value: +{ + "default": 1, + "title": "Expand Hops", + "type": "integer" +} - added
Input schema / properties / expand_kAdded value: +{ + "default": 3, + "title": "Expand K", + "type": "integer" +} - added
Input schema / properties / min_confidenceAdded value: +{ + "default": 0.6, + "title": "Min Confidence", + "type": "number" +}
9 tool updates
v0.1.0- First observed
find_symbols - First observed
get_file_skeleton - First observed
get_impact_slice - First observed
get_index_status - First observed
get_module_dependents - First observed
get_repo_map - First observed
get_symbol_context - First observed
list_repositories - First observed
search_source
TDQS
Scored across 10 tools
Most tools target distinct phases (list repos, index status, search, orient, read context, traverse graph), but boundaries blur in places: get_symbol_context and inspect_symbol both return source packets plus edges for a symbol, and get_impact_slice, get_module_dependents, and search_source(expand='graph') all traverse relationships. Descriptions attempt to differentiate via 'one call', 'lexical vs semantic', and 'candidate vs complete', but an agent could still misselect among them.
Every tool follows a consistent verb_noun snake_case pattern (get_*, find_*, list_*, search_*, inspect_*). Prefixes map cleanly to intent: get for retrieval, find/list/search for discovery. No mixed conventions.
Ten tools is well-scoped for a code-context/index server. Each tool earns its place across discovery, search, orientation, symbol reading, and graph traversal, with no redundant filler.
Coverage spans repository listing, index freshness, symbol search, orientation maps, file skeletons, bounded source context, and impact traversal — a solid read-only surface with no obvious dead ends. Minor gaps like direct line-range/file-read or cross-repo comparison are workable around via existing tools.
Maintenance
Related MCP Connectors
Cache source-backed repository context so coding agents can reuse knowledge across sessions.
Hosted code graph over MCP: exact callers, dependencies, and cross-repo blast radius for AI agents.
Codebase intelligence for agents: 152 structured artifacts across 21 programs, one call.
Team memory for AI coding agents and code reviews, reviewed by humans and served over MCP.
Related MCP Servers
- AlicenseAqualityAmaintenanceLocal, read-only MCP server for coding agents. Indexes repeated implementations in your repository (FastAPI routes, pytest fixtures, Pydantic and SQLAlchemy models) and returns source-backed examples with a bounded read plan, or a typed UNKNOWN when evidence is insufficient. No LLM or network calls.13 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI coding agents to query a codebase as a knowledge graph, providing token-budgeted context, search, and impact analysis via MCP tools.33 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to locally search, query, and understand codebases with token-efficient context, dependency graphs, history, architecture diagrams, and metrics through MCP.15 npm3MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to retrieve token-budgeted project context, search code symbols, look up definitions, and access project memory and cross-project learnings through local MCP tools. It reduces redundant exploration by supplying the smallest useful context from a deterministic, local-first index.MIT