Skip to main content
Glama
saitarrun

semantic-code-intelligence

Inteligencia Semántica de Código

Búsqueda semántica local y recorridos de código con citas para repositorios de software.

Semantic Code Intelligence analiza un repositorio en fragmentos conscientes de símbolos, indexa esos fragmentos con FAISS y BM25, fusiona ambos conjuntos de resultados y reordena los candidatos más fuertes con un cross-encoder. Los resultados incluyen rutas de archivo exactas y rangos de líneas. Todo se ejecuta localmente; no se requiere clave de API en la nube.

Qué ofrece

  • Búsqueda híbrida de código semántica y léxica

  • Impulso exacto de símbolos, rutas y términos contextuales

  • Etiquetas de fiabilidad de búsqueda basadas en el acuerdo de recuperación

  • Análisis AST de Python y análisis estructural para lenguajes de programación comunes

  • Citas exactas como src/auth.py:L42-L67

  • Panel de control en el navegador y API REST

  • Interfaces CLI, MCP y LSP

  • Recorridos de código locales impulsados por Ollama con un respaldo de evidencia determinista

  • Persistencia de índices FAISS, BM25 y SQLite

  • Vigilancia incremental del sistema de archivos

  • Gráficos de símbolos y dependencias

  • Benchmarks reproducibles de indexación y recuperación

Related MCP server: codebase-analyser

Requisitos

  • macOS o Linux

  • Python 3.10 o más reciente

  • Git

  • Aproximadamente 2–4 GB de espacio libre en disco para dependencias de Python y cachés de modelos locales

  • Opcional: uv para una gestión de entornos más rápida

  • Opcional: Ollama para recorridos de código generados

Las primeras operaciones de indexación y reordenamiento requieren acceso a Internet para descargar los pesos de los modelos de Hugging Face. Después de que los modelos estén en caché, la recuperación funciona sin conexión.

Inicio rápido desde una máquina limpia

1. Clonar el repositorio

git clone https://github.com/saitarrun/Semantic-code-intelligence.git
cd semantic-code-intelligence

2. Crear un entorno e instalar la aplicación

Usando uv:

uv venv
source .venv/bin/activate
uv pip install -e .

Usando herramientas estándar de Python:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .

Windows no es actualmente un objetivo probado, pero el comando de activación equivalente es .venv\Scripts\activate.

3. Descargar los modelos de recuperación y crear un índice

Las descargas de modelos están deliberadamente deshabilitadas por defecto para que las solicitudes normales de la aplicación nunca generen tráfico de red inesperado. Habilite explícitamente las descargas durante el primer índice y consulta:

export CODE_INTEL_ALLOW_MODEL_DOWNLOADS=1

code-intel index .
code-intel query "Where is HybridRetrievalPipeline implemented?" --citations-only

unset CODE_INTEL_ALLOW_MODEL_DOWNLOADS

Esto prepara:

  • sentence-transformers/all-MiniLM-L6-v2 para embeddings densos

  • cross-encoder/ms-marco-MiniLM-L-6-v2 para reordenamiento

El índice del repositorio se almacena en .code_intel_index/. El directorio contiene el índice FAISS, los datos BM25 y los metadatos SQLite y no debe ser confirmado.

4. Iniciar la aplicación web

code-intel serve --host 127.0.0.1 --port 8000

Abra http://127.0.0.1:8000.

El panel de control incluye:

  • Búsqueda semántica

  • Recorrido de código

  • Mapa de dependencias

  • Herramientas de diff y LSP

  • Controles de selección de repositorio y reindexación

  • Indicadores de latencia por etapa y fiabilidad de recuperación

Indexar otro repositorio

Los datos del índice se almacenan dentro del repositorio de destino por defecto:

code-intel index /absolute/path/to/project

Buscar en ese repositorio:

code-intel query \
  "How are access tokens validated?" \
  --dir /absolute/path/to/project

Use un directorio de índice separado cuando el repositorio fuente deba permanecer intacto:

code-intel index /absolute/path/to/project \
  --index-dir /absolute/path/to/index-storage

code-intel query \
  "Where is the database connection pool created?" \
  --dir /absolute/path/to/project \
  --index-dir /absolute/path/to/index-storage

Forzar una reconstrucción limpia después de cambiar el comportamiento del analizador o de los embeddings:

code-intel index /absolute/path/to/project --force

Búsqueda semántica

Se recomienda el modo híbrido. Combina similitud de lenguaje natural con coincidencia exacta de identificadores:

code-intel query "How does the application serve the web UI?"

Búsqueda exacta de símbolos:

code-intel query "Where is serve_ui implemented?"

Devolver más resultados:

code-intel query "authentication middleware" --top-k 10

Mostrar citas sin imprimir código:

code-intel query "database transaction rollback" --citations-only

Seleccionar una estrategia de recuperación individual para diagnósticos:

code-intel query "PaymentProcessor" --mode sparse
code-intel query "logic responsible for charging a customer" --mode dense
code-intel query "charge customer payment" --mode hybrid

Deshabilitar el reordenamiento con cross-encoder cuando la latencia importa más que la precisión:

code-intel query "configuration loader" --no-rerank

Cómo funciona la clasificación

El pipeline híbrido por defecto realiza estas etapas:

  1. Expandir intenciones comunes de desarrolladores con términos deterministas del dominio del código.

  2. Recuperar hasta 50 candidatos densos de FAISS.

  3. Recuperar hasta 50 candidatos léxicos de BM25.

  4. Fusionar hasta 60 candidatos únicos con Reciprocal Rank Fusion.

  5. Reordenar hasta 40 candidatos con un cross-encoder local.

  6. Impulsar coincidencias exactas de símbolos, rutas y términos contextuales.

  7. Eliminar citas duplicadas y limitar resultados repetitivos del mismo archivo.

  8. Devolver una etiqueta de fiabilidad con la evidencia que la respalda.

La fiabilidad no es una puntuación de confianza de un LLM. Informa señales de recuperación observables, como el acuerdo denso/léxico, coincidencias exactas de símbolos, superposición de rutas y similitud semántica.

Recorridos de código

Modo de evidencia determinista

Este modo no requiere Ollama. Devuelve símbolos recuperados, ámbitos, dependencias, bloques de código y citas sin inventar comportamiento:

code-intel ask \
  "How does the indexing pipeline persist metadata?" \
  --provider extractive

Recorridos locales generados con Ollama

Instale e inicie Ollama, luego descargue el modelo por defecto:

ollama pull qwen2.5-coder:7b

Ejecutar un recorrido con citas:

code-intel ask "Explain the hybrid retrieval control flow"

Usar otro modelo local o servidor Ollama:

export CODE_INTEL_OLLAMA_MODEL=deepseek-coder-v2:lite
export OLLAMA_BASE_URL=http://127.0.0.1:11434

Si no se puede alcanzar Ollama, la aplicación etiqueta claramente la respuesta como extractive-fallback y devuelve evidencia de código determinista.

CLI interactivo

Iniciar una sesión de búsqueda continua:

code-intel interactive --dir /absolute/path/to/project

Inspeccionar estadísticas del índice:

code-intel stats --dir /absolute/path/to/project

Mostrar todos los comandos:

code-intel --help
code-intel query --help

API REST

Iniciar el servidor:

code-intel serve --host 127.0.0.1 --port 8000

Verificación de salud:

curl http://127.0.0.1:8000/api/health

Indexar un repositorio:

curl -X POST http://127.0.0.1:8000/api/index \
  -H 'Content-Type: application/json' \
  -d '{
    "target_dir": "/absolute/path/to/project",
    "force": false
  }'

Ejecutar búsqueda híbrida:

curl -X POST http://127.0.0.1:8000/api/search \
  -H 'Content-Type: application/json' \
  -d '{
    "query": "Where is token validation implemented?",
    "repo_path": "/absolute/path/to/project",
    "top_k": 5,
    "mode": "hybrid",
    "rerank": true
  }'

Generar un recorrido:

curl -X POST http://127.0.0.1:8000/api/synthesize \
  -H 'Content-Type: application/json' \
  -d '{
    "query": "Explain token validation failure paths",
    "repo_path": "/absolute/path/to/project",
    "top_k": 8,
    "provider": "extractive"
  }'

Endpoints importantes:

Método

Endpoint

Propósito

GET

/api/health

Estado del servicio y del índice

GET

/api/stats

Archivos, líneas, fragmentos y manifiesto del índice

GET

/api/index/stream

Progreso de indexación SSE

POST

/api/index

Indexación síncrona de repositorios

POST

/api/search

Búsqueda densa, dispersa o híbrida

POST

/api/synthesize

Respuesta de código con citas

POST

/api/synthesize/stream

Respuesta con citas en streaming

GET

/api/graph

Gráfico de símbolos y dependencias

POST

/api/watcher/toggle

Iniciar o detener la vigilancia incremental

GET

/api/lsp/inspect

Definiciones, referencias y datos de hover

POST

/api/patch/generate

Generar un diff unificado propuesto

POST

/api/patch/apply

Aplicar un diff unificado al repositorio seleccionado

Enlace a 127.0.0.1 a menos que se requiera acceso remoto intencionalmente. Los endpoints de parche y apertura de archivos operan en el sistema de archivos local y no deben exponerse a redes no confiables.

Integración MCP

El servidor MCP permite que VS Code, Cursor, Claude Code y otros agentes de codificación compatibles busquen en el código indexado y recuperen rangos de código exactos. Instale e indexe el proyecto primero:

git clone https://github.com/saitarrun/Semantic-code-intelligence.git
cd Semantic-code-intelligence
python -m venv .venv
source .venv/bin/activate
pip install -e .
code-intel index --dir /absolute/path/to/your/project

Use la ruta ejecutable absoluta impresa por which code-intel en los ejemplos a continuación.

VS Code

Cree .vscode/mcp.json en el proyecto que desea que el agente busque:

{
  "servers": {
    "semanticCodeIntelligence": {
      "type": "stdio",
      "command": "/absolute/path/to/Semantic-code-intelligence/.venv/bin/code-intel",
      "args": ["mcp", "--dir", "${workspaceFolder}"],
      "cwd": "${workspaceFolder}"
    }
  }
}

Ejecute MCP: List Servers desde la Paleta de Comandos, inicie semanticCodeIntelligence y apruebe sus herramientas. Si su lista de herramientas antigua está en caché, ejecute MCP: Reset Cached Tools.

Cursor

Cree .cursor/mcp.json en el proyecto de destino:

{
  "mcpServers": {
    "semantic-code-intelligence": {
      "command": "/absolute/path/to/Semantic-code-intelligence/.venv/bin/code-intel",
      "args": ["mcp", "--dir", "${workspaceFolder}"]
    }
  }
}

Claude Code

Registre el servidor stdio local desde el proyecto que desea buscar:

claude mcp add --transport stdio --scope project semantic-code-intelligence -- \
  /absolute/path/to/Semantic-code-intelligence/.venv/bin/code-intel mcp --dir /absolute/path/to/your/project
claude mcp get semantic-code-intelligence

Para otro agente compatible con MCP, configure el mismo ejecutable como un servidor stdio local con argumentos mcp --dir /ruta/absoluta/a/tu/proyecto. El servidor escribe solo mensajes JSON-RPC en stdout, como lo requieren los clientes stdio.

Herramientas MCP disponibles:

  • code_intel_search: recuperación híbrida, densa o dispersa con líneas exactas y metadatos de fiabilidad

  • code_intel_symbol_graph: datos de dependencias y gráfico de llamadas para un repositorio o símbolo

  • code_intel_index: construir o actualizar un índice desde el agente de codificación

  • code_intel_read_file: leer de forma segura hasta 400 líneas dentro del repositorio configurado

El proyecto de destino debe estar indexado antes de las solicitudes de búsqueda. Por defecto, su índice se almacena en <proyecto>/.code_intel_index; pase --index-dir /ruta/al/índice al comando MCP cuando use un directorio de índice separado. Las descargas de modelos siguen siendo opcionales: establezca CODE_INTEL_ALLOW_MODEL_DOWNLOADS=1 si el modelo de embeddings o de reordenamiento no está ya en caché.

LSP y vigilancia del sistema de archivos

Iniciar el puente LSP stdio:

code-intel lsp --dir /absolute/path/to/project

Iniciar el vigilante incremental:

code-intel watch --dir /absolute/path/to/project

El vigilante observa los archivos fuente compatibles y actualiza el estado del índice después de los cambios. Use Ctrl+C para detener cualquiera de los dos procesos.

Configuración

Variables de entorno:

Variable

Valor por defecto

Descripción

CODE_INTEL_ALLOW_MODEL_DOWNLOADS

0

Establecer a 1 para permitir descargas de modelos de Hugging Face

CODE_INTEL_OLLAMA_MODEL

qwen2.5-coder:7b

Modelo Ollama usado para recorridos generados

OLLAMA_BASE_URL

http://127.0.0.1:11434

URL base de la API de Ollama

CODE_INTEL_CORS_ORIGINS

Orígenes de localhost

Orígenes de navegador separados por comas permitidos por la API

CODE_INTEL_PIPELINE_CACHE_SIZE

4

Número máximo de pipelines de repositorio en caché por la API

Configuración programática:

from pathlib import Path

from semantic_code_intel.config import CodeIntelConfig
from semantic_code_intel.indexing.engine import HybridIndexer
from semantic_code_intel.retrieval.pipeline import HybridRetrievalPipeline

project = Path("/absolute/path/to/project")
config = CodeIntelConfig(project_root=project)
config.retrieval.dense_top_k = 75
config.retrieval.sparse_top_k = 75
config.retrieval.final_top_k = 8

HybridIndexer(config).index_codebase(project)
response = HybridRetrievalPipeline(config).query(
    "Where is request authentication enforced?",
    top_k=8,
)

for result in response.results:
    print(result.citation, result.chunk.symbol_name, result.score)

print(response.reliability, response.reliability_reasons)

Archivos compatibles

El escáner por defecto incluye:

  • Python

  • JavaScript y TypeScript

  • Go

  • Rust

  • Java

  • C y C++

  • C#

  • Ruby

  • PHP

  • Swift

  • Kotlin y Scala

  • Scripts de shell

  • SQL

  • HTML y CSS

  • JSON, YAML, TOML y Markdown

Los directorios generados comunes, entornos virtuales, carpetas de dependencias, archivos de bloqueo, binarios, activos minificados, .git, .code_intel_index y oss_evaluation se excluyen por defecto. Consulte ParserConfig en semantic_code_intel/config.py para personalizar extensiones y patrones de ignorado.

Arquitectura

flowchart LR
    A[Repository] --> B[Scanner and ignore rules]
    B --> C[Python AST or polyglot parser]
    C --> D[Symbol-aware chunks]
    D --> E[Local embedding model]
    E --> F[(FAISS)]
    D --> G[Code-aware tokenizer]
    G --> H[(BM25)]
    D --> I[(SQLite metadata)]

    Q[Query] --> X[Intent expansion]
    X --> F
    X --> H
    F --> R[Reciprocal Rank Fusion]
    H --> R
    R --> J[Cross-encoder reranker]
    J --> K[Exact symbol and path boosts]
    K --> L[Diversity and reliability]
    L --> M[CLI, API, Web, MCP, LSP]

Módulos principales:

Paquete

Responsabilidad

parser

Escaneo de repositorios y fragmentación estructural de código

indexing

Embeddings, FAISS, BM25, SQLite y vigilancia

retrieval

Expansión de consultas, fusión, reordenamiento, fiabilidad y citas

generation

Prompts fundamentados, síntesis Ollama y respaldo determinista

api

Endpoints FastAPI y panel de control en el navegador

cli

Interfaces de línea de comandos

graph

Gráficos de símbolos y dependencias

mcp

Servidor de Protocolo de Contexto de Modelo

lsp

Puente de Protocolo de Servidor de Lenguaje

benchmark

Generación de repositorios sintéticos y evaluación de recuperación

Pruebas

Ejecutar la suite de pruebas completa:

uv run pytest -q

O con un entorno activado:

pytest -q

La suite cubre analizadores, FAISS, BM25, expansión de consultas, impulso de coincidencia exacta, fusión, citas, endpoints de API, comportamiento de síntesis local, MCP, LSP, parches, vigilancia y generación de benchmarks.

Benchmarking

Ejecutar un benchmark sintético reproducible:

code-intel benchmark \
  --workspace ./benchmark_workspace \
  --loc 40000 \
  --queries 30

El ejecutor escribe benchmark_report.json que contiene:

  • Tamaños de dataset e índice

  • Rendimiento de indexación

  • Percentiles de latencia densa, dispersa, de reordenador y de extremo a extremo

  • Tasa de aciertos y rango recíproco medio

  • Registros de consultas ejecutadas

  • Metadatos de Python, plataforma, hardware, paquetes y modelos

Los resultados del benchmark dependen del hardware, el estado de la caché del modelo, la composición del repositorio y el conjunto de consultas. Trate las cifras históricas como mediciones, no como garantías.

Solución de problemas

El modelo no está disponible localmente

Ejecute la operación fallida una vez con descargas habilitadas:

CODE_INTEL_ALLOW_MODEL_DOWNLOADS=1 code-intel index /absolute/path/to/project --force
CODE_INTEL_ALLOW_MODEL_DOWNLOADS=1 code-intel query "warm up reranker" --dir /absolute/path/to/project

Índice no encontrado

Los valores de --dir y --index-dir usados para consultar deben coincidir con los usados para indexar.

code-intel stats --dir /absolute/path/to/project

El recorrido dice que Ollama no está disponible

Verifique el servidor local y los modelos instalados:

ollama list
curl http://127.0.0.1:11434/api/tags

Siempre puede usar el modo de evidencia determinista:

code-intel ask "your question" --provider extractive

Los resultados de búsqueda son débiles

  • Use el nombre exacto de la clase, función, método, endpoint o configuración cuando se conozca.

  • Prefiere el modo híbrido para el uso normal.

  • Aumenta --top-k cuando la respuesta abarque varios archivos.

  • Reindexa con --force después de cambiar la configuración del parser o del embedding.

  • Comprueba la etiqueta de fiabilidad; una fiabilidad baja significa que las señales de recuperación no coinciden claramente.

El puerto del servidor ya está en uso

Elige otro puerto:

code-intel serve --host 127.0.0.1 --port 8010

Estado del proyecto

Este proyecto está en desarrollo activo. Revisa los parches generados antes de aplicarlos, mantén la API vinculada a localhost para el uso normal y valida las afirmaciones de los benchmarks en tus propios repositorios de destino.

Licencia

Todavía no se ha añadido ninguna licencia de código abierto. El acceso público al repositorio no otorga por sí mismo permiso para copiar, modificar o redistribuir el código.

Available Tools

4 tools
code_intel_indexC

Build or refresh the semantic and lexical indexes for a local repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
index_dirNoOptional index storage directory.
repo_pathNoRepository root; defaults to the server --dir.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries the full behavioral burden. It doesn't disclose cost/duration (indexing can be slow), whether it blocks, whether it overwrites existing indexes, or what happens on failure. 'Refresh' hints at mutation but no depth.

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?

Single clear sentence with verb and scope front-loaded, zero waste.

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 mutation tool with no annotations, no output schema, and an undocumented 'force' parameter, the description is too thin. It leaves the agent guessing about cost, prerequisites, and the effect of force.

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 coverage is 67%, with index_dir and repo_path already documented in the schema. The 'force' parameter (schema has no description) is undocumented anywhere, and the description doesn't compensate. Baseline 3 given partial coverage.

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?

States a specific verb ('Build or refresh') and resource ('semantic and lexical indexes for a local repository'). It's distinct from siblings like code_intel_search, though it doesn't explicitly name 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?

No guidance on when to run this versus using existing indexes, nor prerequisites like whether search requires prior indexing. Purely descriptive, no when-to-use direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

code_intel_read_fileB

Read a bounded line range from a source file inside the configured repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRepository-relative or absolute file path.
end_lineNoInclusive; at most 400 lines are returned.
repo_pathNoRepository root; defaults to the server --dir.
start_lineNo

TDQS

B3.3/5.0
Behavior3/5

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 useful traits: reads are bounded to a line range and restricted to the configured repository. However, it never states that the operation is read-only/side-effect free, nor how it behaves on a missing file, an out-of-repo absolute path, or a range exceeding the cap.

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?

A single front-loaded sentence with no filler; the core action and its two constraints are stated immediately.

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 a four-parameter read tool with no annotations and no output schema, the description is adequate but thin: it omits read-only confirmation, error/edge-case behavior, and any hint of the return shape (raw lines vs numbered lines). An agent can call it, but cannot fully predict its behavior.

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 75%, so the schema already documents path, end_line, and repo_path; only start_line's default relies on the schema's default keyword. The description's 'bounded line range' and 'inside the configured repository' echoes rather than extends the end_line cap and repo_path semantics, so baseline 3 is appropriate.

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 a specific verb and resource ('Read a bounded line range from a source file') and scopes it to the configured repository, which is enough for an agent to distinguish it from code_intel_search, code_intel_symbol_graph, and code_intel_index. It stops short of explicitly naming which sibling to use when, but the purpose itself is unambiguous.

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 when-to-use guidance, no prerequisites, and no mention of alternatives such as code_intel_search for locating content versus this tool for reading it. An agent must infer the read-content use case purely from the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

code_intel_symbol_graphC

Return repository dependency/call-graph data, optionally centered on a symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolNoOptional function, class, or symbol name.
index_dirNoOptional index storage directory.
repo_pathNoRepository root; defaults to the server --dir.

TDQS

C2.9/5.0
Behavior2/5

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 does state that symbol centering is optional and that graph data is returned, but says nothing about output format, graph depth/limits, whether an index must exist first (relevant given index_dir), or cost/size of the result.

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?

A single tight sentence with no waste, front-loading the resource (dependency/call-graph data) before the optional scoping. Very brief, which is efficient but leaves little room for behavioral detail.

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 a read tool with no annotations and no output schema, the description is minimally adequate. It should mention whether an index is required beforehand and what the returned graph looks like, since an agent has no other source for that.

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 100%, so parameters are already documented. The description only adds that symbol centering is optional, which is already reflected in the schema's 'Optional' prefix; baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Return) and resources (dependency/call-graph data) with a scoping qualifier (optionally centered on a symbol). Clear enough to distinguish from siblings like code_intel_search or code_intel_read_file, though it doesn't explicitly name alternatives.

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 guidance on when to use this tool versus code_intel_search (symbol lookup) or code_intel_index (index building). The optional symbol scoping is implied but no conditions or prerequisites are given.

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. 4 tool updatesv0.1.0
    • First observedcode_intel_index
    • First observedcode_intel_read_file
    • First observedcode_intel_search
    • First observedcode_intel_symbol_graph

TDQS

B3.4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: indexing, hybrid search, dependency/call-graph retrieval, and bounded file reading. Although search and read_file both return code, their boundaries are clear from descriptions (retrieval vs direct file access).

Naming Consistency4/5

All tools share the consistent code_intel_ prefix, which provides a predictable namespace. However, suffixes mix verb forms (search, index) and noun forms (symbol_graph), so the pattern is mostly but not perfectly consistent.

Tool Count5/5

Four tools is well-scoped for a code intelligence server, covering the essential operations of indexing, searching, graph exploration, and reading without redundancy or bloat.

Completeness4/5

The core lifecycle (index → search → explore graph → read file) is covered, but missing operations such as listing indexed repositories, retrieving symbol definitions, or index management could create minor dead ends for some agent workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI coding assistants to search and retrieve information from a locally ingested knowledge base using hybrid search, grounded in user-curated documentation.
    16
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents and IDEs to ingest and search code repositories using hybrid retrieval (dense + sparse) with exact line-level citations for precise code analysis.
    1
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables coding agents to query local notes, decisions, docs, and code with hybrid retrieval (BM25 + embeddings + reranking) and get path:line citations. It provides tools like rag_query for full-corpus search and search_knowledge for project-scoped knowledge recall.
    2
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables coding agents to search a local, offline archive of past sessions and repository Markdown docs using hybrid lexical and semantic retrieval, and read matching records to ground new work in prior knowledge without external calls.
    2
    MIT