Skip to main content
Glama

Kivgraph

Kivgraph es un servidor MCP local de inteligencia de código entre repositorios para agentes de codificación de IA. Construye un grafo de código semántico canónico a través de múltiples repositorios registrados y responde preguntas sobre símbolos, relaciones entre repositorios, llamadores, dependencias e impacto de cambios.

Indexa un corpus una vez y sirve un grafo inmutable: las aristas se resuelven mediante go/types, el comprobador de TypeScript y rust-analyzer, no mediante la coincidencia de nombres. Esa es la diferencia con una herramienta de búsqueda, y es lo que hace que una respuesta vacía valga algo: una lista de referencias vacía significa que nadie lo llama, no que no se haya encontrado nada, y grep no puede distinguir ambas cosas.

Kivgraph se centra en las relaciones semánticas de código, no en el descubrimiento automático de todos los flujos de ejecución HTTP, gRPC, Kafka o de base de datos entre servicios.

Documentación

Lea la documentación de usuario de Kivgraph para la instalación, los clientes MCP, la inteligencia de código, las relaciones entre repositorios y los grafos de código del espacio de trabajo. El sitio publicado se configura por separado del paquete de lanzamiento; este enlace sigue siendo válido desde cualquier clon.

Related MCP server: MCP Indexer

Qué responde cada herramienta

la pregunta

la herramienta

quién llama a esto, qué lo referencia

find_references

qué se rompe si lo cambio

get_blast_radius

a qué llega esto hacia afuera

trace_dependencies

quién lo usa desde otro repositorio

find_cross_repo_consumers

dónde se declara

find_symbol

qué se declara en este paquete

get_file_outline

dame el código de estos símbolos

get_source

todo sobre este símbolo

get_symbol

qué está indexado y si el grafo está al día

list_repositories, graph_status

Diez herramientas de solo lectura, más una mutación controlada por consentimiento (index_project) que un cliente debe autorizar antes de poder registrar un repositorio o publicar una generación.

Cada fila que nombra un símbolo incluye su repositorio, ruta, nombre cualificado y rango de líneas, de modo que se puede abrir sin una segunda llamada, y todas las herramientas aceptan ese trío en lugar de una clave opaca.

Dónde pierde. Un nombre poco común en un repositorio pequeño es más barato con grep, e indexar un archivo pequeño cuesta más que leerlo. Gana con nombres comunes, con el impacto transitivo, con los consumidores de otro repositorio y con la demostración de una ausencia. Medido en 29 preguntas sobre un corpus de 37 repositorios (benchmarks/graph-tools-comparison/results-all.json, commit 954b9eb, tokenizador o200k_base): 35,961 tokens para Kivgraph frente a 267,980 para grep más lectura, ambos exactos en 28 de las 29, mediana de 5.95x por pregunta a favor de Kivgraph. grep es más barato en 5 de esas 29, todas con recuperación completa en ambos lados: T1_go_trivial pide un nombre que el corpus declara dos veces, y ahí grep cuesta 0.53x lo que Kivgraph.

Un segundo banco de pruebas, benchmarks/mcp-token-cost, compara con la salida de las herramientas del propio host capturada textualmente, pero se ejecuta sobre el único repositorio de Kivgraph, de 13,222 símbolos: 7.64x en las respuestas mismas y 1.60x en una sesión completa, frente a un mínimo de 2.41x impuesto por los cuerpos de código fuente que ambas partes pagan.

Estado

Publicado y en uso. kivgraph version informa de la versión publicada; el backlog y el criterio de aceptación de cada fase están en TASKS.md.

  • Lenguajes: Go, TypeScript, Rust, Python y Dart. Python usa el worker AST incluido en modo de respaldo; esas referencias inferidas son CANDIDATE, nunca EXACT. El modo Python exacto usa el adaptador LSP de Pyright incluido con un servidor Pyright/BasedPyright instalado. Dart usa el Dart Analysis Server proporcionado por el SDK de Dart o Flutter.

  • Dependencias semánticas: las importaciones de Python y Dart pueden publicar una dependencia de paquete cuando exactamente un proveedor registrado es el propietario del paquete solicitado; las aristas entre repositorios a nivel de símbolo requieren una identidad de proveedor explícita.

  • Superficie: diez herramientas de solo lectura sobre STDIO, más una mutación controlada por consentimiento (index_project). El contrato está en docs/protocol/mcp-surface-v3.md.

  • Almacenamiento: LadybugDB es canónico; las consultas se sirven desde un HotSnapshot inmutable publicado atómicamente, nunca desde la base de datos.

  • Plataformas: linux/amd64, darwin/arm64 y windows/amd64.

  • Visor: kivgraph ui sirve una vista 3D de solo lectura del grafo publicado.

Requisitos

  • Go 1.26 o posterior para compilar desde el código fuente. El indexador comprueba tipos con el go/types enlazado en el binario, por lo que solo puede leer repositorios y dependencias escritos para su propia versión de lenguaje o anterior; kivgraph doctor informa de ese límite.

  • Indexar Rust necesita cargo y rust-analyzer. El paquete de lanzamiento incluye el analizador; no incluye un toolchain de Rust.

  • Indexar TypeScript necesita Node.js 22 o posterior para el worker.

  • Indexar Python necesita Python 3.10 o posterior para el worker incluido. Es un modo de respaldo consciente de la sintaxis e informa explícitamente de nombres dinámicos o no resueltos; el modo exacto requiere además un servidor de lenguaje compatible con Pyright.

  • Indexar Dart necesita el ejecutable dart; una instalación de Flutter lo proporciona. El cargador usa el protocolo del Analysis Server y no modifica el proyecto Flutter.

Instalación

Instalar el MCP con un solo script

El instalador detecta la plataforma, descarga la última versión MCP publicada para ella, verifica tanto el archivo de la versión como las sumas de verificación del paquete, y lo instala sin requerir Go ni pnpm. La versión contiene el servidor Go, la biblioteca LadybugDB fijada, el worker de TypeScript, el worker AST de Python incluido, el rust-analyzer fijado, el manifiesto de gramáticas y el visor web, cuyos recursos son 2.3 MB del paquete. scripts/build-bundle.sh --mcp-only produce un paquete sin el visor para quien lo quiera.

Paquetes publicados: Linux amd64 y macOS arm64.

Requisitos de ejecución: Bash, Node.js 22 o posterior, Python 3.10 o posterior al indexar Python, curl, tar y sha256sum o shasum. El paquete incluye su propio rust-analyzer; indexar repositorios Rust requiere además cargo en el PATH, e indexar Dart necesita el SDK de Dart o Flutter.

En macOS los binarios no están notarizados. Una versión descargada con curl no está en cuarentena y se ejecuta; una copia descargada con un navegador necesita xattr -dr com.apple.quarantine. Consulte docs/development/macos.md.

Instale la última versión con un solo comando:

curl -fsSL https://github.com/Luqueee/kivgraph/releases/latest/download/install.sh | bash

Desde un clon, el mismo instalador se puede ejecutar directamente:

./scripts/install.sh

Para instalar una versión específica en lugar de la última:

KIVGRAPH_VERSION=v0.9.1 ./scripts/install.sh

El script instala el paquete en ~/.local/opt/kivgraph y coloca los lanzadores en ~/.local/bin. Nunca modifica un repositorio registrado, crea un índice ni reemplaza archivos de configuración. Para usar otra ubicación, establezca KIVGRAPH_INSTALL_ROOT y KIVGRAPH_BIN_DIR.

Añada el directorio de lanzadores al shell actual y verifique ambos entornos de ejecución:

export PATH="$HOME/.local/bin:$PATH"
kivgraph version
kivgraph-ts-worker <<'EOF'
hello
EOF

Compruebe si hay una versión más reciente o actualice el paquete instalado:

kivgraph update --check
kivgraph update

La actualización es atómica, conserva la configuración y el estado del grafo, verifica las sumas de verificación de la versión y del paquete, y reemplaza solo el paquete instalado. Reinicie el cliente MCP después de actualizar para que lance el nuevo binario.

Cuando se invoca kivgraph sin un comando desde una terminal interactiva, comprueba si hay una versión más reciente con un tiempo de espera de 800 ms y una caché de 24 horas en el directorio de caché de la plataforma ($XDG_CACHE_HOME en Linux y $HOME/Library/Caches en macOS), en kivgraph/update-check.json. La comprobación opcional nunca bloquea el comando cuando la red no está disponible.

La salida interactiva de los comandos usa colores ANSI semánticos cuando el destino es una terminal. Establezca NO_COLOR o redirija la salida para mantenerla sin formato.

Configurar un cliente MCP e instalar la skill

El instalador de la versión no edita la configuración del cliente automáticamente. Después de instalar Kivgraph, ejecute los comandos de integración sin --target para detectar los agentes de codificación presentes en esta máquina y seleccione uno o más de ellos:

kivgraph mcp install --scope user
kivgraph skill install --scope user

Kivgraph comprueba las raíces de configuración o instalación local conocidas de cada cliente y marca los agentes detectados. Use ↑/↓ (o j/k) para moverse, espacio para alternar un agente, a para seleccionar todos, n para no seleccionar ninguno, Enter para confirmar y q o Esc para cancelar. Si no se detecta ninguno, el selector comienza sin agentes seleccionados. Use --target solo para instalación scriptada y no interactiva.

Los objetivos MCP compatibles son claude-code, claude-desktop, codex, opencode y oh-my-pi. Los objetivos de skill compatibles son claude-code, codex, opencode y oh-my-pi; Claude Desktop no tiene objetivo de skill local. El ámbito predeterminado es user; use --scope project para la configuración local al proyecto. Use --dry-run para inspeccionar un plan sin escribir. Las entradas incompatibles existentes detienen con un error; se requiere --force para reemplazar o eliminar una. Los archivos existentes se escriben atómicamente con modo 0600 y reciben una copia de seguridad *.kivgraph.bak antes del reemplazo o la eliminación.

Inspeccione o elimine un registro explícitamente:

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 user

Inicialice y publique un grafo antes de iniciar el servidor MCP:

kivgraph init \
  --repository project=/absolute/path/to/project \
  --languages go,typescript,rust
kivgraph doctor
kivgraph index --full

init escribe una configuración autocontenida: con --config apuntando a otro lugar, su estado, caché y registro dependen de ese directorio, de modo que un índice desechable nunca toca el real. index --full republica atómicamente: un fallo en cualquier etapa deja sirviendo a la generación anterior. Un servidor ya en ejecución sigue la nueva generación por sí solo.

En el día a día:

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-active

kivgraph ui se vincula a una dirección que no es de loopback por defecto, porque el grafo se indexa donde están los repositorios y se consulta desde otro lugar; no hay autenticación, por lo que registra exactamente lo que expone y --addr lo restringe.

logs y tool-stats leen un registro de solo añadir en el directorio de estado en lugar de preguntar a un servidor, que es por lo que pueden responder: los contadores por herramienta que mantiene un serve se crean cuando arranca y desaparecen cuando se detiene. Leer el archivo también hace que la respuesta abarque todos los servidores que hayan ejecutado alguna vez.

Configure cualquier cliente MCP para iniciar el servidor sobre STDIO:

{
  "mcpServers": {
    "kivgraph": {
      "command": "/home/user/.local/bin/kivgraph",
      "args": [
        "serve",
        "--config",
        "/home/user/.config/kivgraph/config.yaml"
      ]
    }
  }
}

kivgraph serve arranca antes de que exista un grafo: sin una generación publicada completa el handshake, no publica ninguna herramienta de consulta y coloca el comando de reconstrucción en instructions. Un cliente lanza el proceso por sí mismo, por lo que salir se leería como un fallo. Escribe el encuadre MCP exclusivamente en stdout y los registros en stderr.

Lo que el grafo contiene y lo que rechaza

Una arista es EXACT solo con evidencia suficiente y la procedencia correcta. Nunca se crea a partir de un nombre, una ruta, un alias o un único candidato, y una referencia que no se puede resolver se publica como UNRESOLVED con su motivo, repositorio y lenguaje en lugar de descartarse. graph_status informa de ambos, desglosados.

Por eso algunas respuestas son ausencias en lugar de aristas. Con la biblioteca estándar de Rust indexada, impl Add for u32 se genera mediante una macro y no existe en ningún rango de código fuente, por lo que cada uso se declara PROVIDER_DEFINITION_NOT_INDEXED una vez por símbolo en lugar de convertirse en una arista que nadie podría abrir.

Los proveedores que Kivgraph deriva de la máquina — hoy la biblioteca estándar de Rust, llamada rust:1.96.1 por el toolchain — se omiten de los resultados de lectura por defecto: un toolchain tiene alrededor de veinte mil símbolos, y una búsqueda de Clone respondería con core. include_derived los solicita, y graph_status desglosa lo que aportan para que los totales sigan siendo legibles.

Desarrollo

make build
make test
make semantic-coverage
make test-ladybug

make test-ladybug es la única forma admitida de ejecutar la etiqueta que enlaza la biblioteca nativa fijada. Las convenciones de contribución están en AGENTS.md, al que enlaza CLAUDE.md.

make semantic-coverage es la puerta de lanzamiento para Go, TypeScript, Python y Dart. Valida la matriz legible por máquina en testdata/semantic-coverage/manifest.json, ejecuta exactamente las suites de TypeScript, Go y Dart, y requiere un servidor de lenguaje compatible con Pyright para ejecutar exactamente la suite de Python. Un lenguaje no se considera completo cuando una capacidad tiene un fixture pero no una prueba de regresión ejecutable.

Pruebas de referencia de almacenamiento y grafos

La cualificación de LadybugDB, el generador de corpus sintético, las pruebas de referencia de carga y consulta, y los comandos doctor, rebuild, rollback y snapshot están documentados en docs/development/storage-benchmarks.md. Concluye con ACCEPT_LADYBUGDB_WITH_LIMITS.

El sitio público

landing/ contiene la página de aterrizaje y la documentación de usuario. No se distribuye en ningún paquete de lanzamiento, se verifica con make landing-check y make landing-build, y se sirve en el puerto 6767. Lo que publica, cómo se capturó la referencia MCP y lo que sigue pendiente están registrados en docs/development/landing-site.md.

Estructura

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.

Licencia

Kivgraph se distribuye bajo la Apache License 2.0.

Licencias de terceros

Los avisos y licencias de las dependencias distribuidas con Kivgraph se registran en THIRD_PARTY_NOTICES.md. La lista se actualiza cada vez que se añade una dependencia al producto distribuible.

Available Tools

12 tools
find_by_intentB
Read-only

Which symbols a plain-language description likely names, and the files to open.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
repoNo
viewNo
limitNo
cursorNo
intentYes
keywordsNo
path_prefixNo
response_formatNo

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_consumersC
Read-only

Consumers of a symbol in other repositories, exact uses kept apart from package-level dependencies. A language server stops at its workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
repoNo
viewNo
limitNo
cursorNo
languageNo
repositoryNo
stable_keyNo
qualified_nameNo
response_formatNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_referencesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
pathNo
repoNo
viewNo
limitNo
cursorNo
languageNo
directionNo
confidenceNo
edge_kindsNo
repositoryNo
stable_keyNo
qualified_nameNo
include_derivedNo
response_formatNo

TDQS

A3.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_symbolA
Read-only

Where a symbol is declared, by name, qualified name, prefix or substring. Narrow with kind, repo and path_prefix.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
modeNo
nameYes
repoNo
viewNo
limitNo
cursorNo
path_prefixNo
include_derivedNo
response_formatNo

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_radiusB
Read-only

What a change to this symbol reaches, by repository, package, depth and relation kind. Grep does not follow a chain.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
viewNo
depthNo
kindsNo
limitNo
cursorNo
max_nodesNo
confidenceNo
edge_kindsNo
repositoryNo
stable_keyNo
qualified_nameNo
include_derivedNo
response_formatNo

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_outlineA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
pathYes
viewNo
limitNo
cursorNo
repositoryYes
include_membersNo
response_formatNo

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_sourceB
Read-only

The code of several symbols in one call. Prefer it to reading each range: no line numbers, one call across files and repositories.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsYes
context_linesNo
response_formatNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_symbolB
Read-only

One symbol's package, signature, visibility and line range, by stable key or by repository, path and qualified name.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
repositoryNo
stable_keyNo
qualified_nameNo
response_formatNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_statusA
Read-only

The published generation: counts, provenance, and whether a repository moved since it was indexed. Call it when an answer looks stale.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 projectA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
pathNo
projectsNo
confirmedNo
languagesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
indexYes
countsYes
projectYes
projectsYes
snapshot_idYes
generation_idYes

TDQS

A3.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_repositoriesC
Read-only

The repositories the published graph covers, with the commit each was indexed at.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_dependenciesB
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
pathNo
repoNo
viewNo
depthNo
limitNo
cursorNo
to_pathNo
languageNo
max_nodesNo
confidenceNo
edge_kindsNo
repositoryNo
stable_keyNo
qualified_nameNo
include_derivedNo
response_formatNo

TDQS

B3/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 12 tool updatesv0.9.2
    • First observedfind_by_intent
    • First observedfind_cross_repo_consumers
    • First observedfind_references
    • First observedfind_symbol
    • First observedget_blast_radius
    • First observedget_file_outline
    • First observedget_source
    • First observedget_symbol
    • First observedgraph_status
    • First observedindex_project
    • First observedlist_repositories
    • First observedtrace_dependencies

TDQS

A3.5/5.0

Scored across 12 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    A
    maintenance
    Supercharges AI coding agents with a pre-indexed semantic code graph, enabling instant symbol relationships, impact analysis, and context retrieval across 20+ languages.
    128,535 npm
    74,173
    MIT