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-L67Panel 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-intelligence2. 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_DOWNLOADSEsto prepara:
sentence-transformers/all-MiniLM-L6-v2para embeddings densoscross-encoder/ms-marco-MiniLM-L-6-v2para 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 8000Abra 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/projectBuscar en ese repositorio:
code-intel query \
"How are access tokens validated?" \
--dir /absolute/path/to/projectUse 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-storageForzar una reconstrucción limpia después de cambiar el comportamiento del analizador o de los embeddings:
code-intel index /absolute/path/to/project --forceBú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 10Mostrar citas sin imprimir código:
code-intel query "database transaction rollback" --citations-onlySeleccionar 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 hybridDeshabilitar el reordenamiento con cross-encoder cuando la latencia importa más que la precisión:
code-intel query "configuration loader" --no-rerankCómo funciona la clasificación
El pipeline híbrido por defecto realiza estas etapas:
Expandir intenciones comunes de desarrolladores con términos deterministas del dominio del código.
Recuperar hasta 50 candidatos densos de FAISS.
Recuperar hasta 50 candidatos léxicos de BM25.
Fusionar hasta 60 candidatos únicos con Reciprocal Rank Fusion.
Reordenar hasta 40 candidatos con un cross-encoder local.
Impulsar coincidencias exactas de símbolos, rutas y términos contextuales.
Eliminar citas duplicadas y limitar resultados repetitivos del mismo archivo.
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 extractiveRecorridos locales generados con Ollama
Instale e inicie Ollama, luego descargue el modelo por defecto:
ollama pull qwen2.5-coder:7bEjecutar 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:11434Si 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/projectInspeccionar estadísticas del índice:
code-intel stats --dir /absolute/path/to/projectMostrar todos los comandos:
code-intel --help
code-intel query --helpAPI REST
Iniciar el servidor:
code-intel serve --host 127.0.0.1 --port 8000Verificación de salud:
curl http://127.0.0.1:8000/api/healthIndexar 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 |
|
| Estado del servicio y del índice |
|
| Archivos, líneas, fragmentos y manifiesto del índice |
|
| Progreso de indexación SSE |
|
| Indexación síncrona de repositorios |
|
| Búsqueda densa, dispersa o híbrida |
|
| Respuesta de código con citas |
|
| Respuesta con citas en streaming |
|
| Gráfico de símbolos y dependencias |
|
| Iniciar o detener la vigilancia incremental |
|
| Definiciones, referencias y datos de hover |
|
| Generar un diff unificado propuesto |
|
| 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/projectUse 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-intelligencePara 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 fiabilidadcode_intel_symbol_graph: datos de dependencias y gráfico de llamadas para un repositorio o símbolocode_intel_index: construir o actualizar un índice desde el agente de codificacióncode_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/projectIniciar el vigilante incremental:
code-intel watch --dir /absolute/path/to/projectEl 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 |
|
| Establecer a |
|
| Modelo Ollama usado para recorridos generados |
|
| URL base de la API de Ollama |
| Orígenes de localhost | Orígenes de navegador separados por comas permitidos por la API |
|
| 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 |
| Escaneo de repositorios y fragmentación estructural de código |
| Embeddings, FAISS, BM25, SQLite y vigilancia |
| Expansión de consultas, fusión, reordenamiento, fiabilidad y citas |
| Prompts fundamentados, síntesis Ollama y respaldo determinista |
| Endpoints FastAPI y panel de control en el navegador |
| Interfaces de línea de comandos |
| Gráficos de símbolos y dependencias |
| Servidor de Protocolo de Contexto de Modelo |
| Puente de Protocolo de Servidor de Lenguaje |
| Generación de repositorios sintéticos y evaluación de recuperación |
Pruebas
Ejecutar la suite de pruebas completa:
uv run pytest -qO con un entorno activado:
pytest -qLa 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 30El 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/projectEl 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/tagsSiempre puede usar el modo de evidencia determinista:
code-intel ask "your question" --provider extractiveLos 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-kcuando la respuesta abarque varios archivos.Reindexa con
--forcedespué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 8010Estado 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 toolscode_intel_indexC
Build or refresh the semantic and lexical indexes for a local repository.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| index_dir | No | Optional index storage directory. | |
| repo_path | No | Repository root; defaults to the server --dir. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Repository-relative or absolute file path. | |
| end_line | No | Inclusive; at most 400 lines are returned. | |
| repo_path | No | Repository root; defaults to the server --dir. | |
| start_line | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two 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.
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.
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.
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.
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.
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_searchB
Search indexed code with hybrid semantic and lexical retrieval, exact citations, match reasons, and reliability scoring.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | hybrid | |
| query | Yes | Question, behavior, or symbol to find. | |
| top_k | No | ||
| rerank | No | ||
| index_dir | No | Optional index storage directory. | |
| repo_path | No | Repository root; defaults to the server --dir. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose some behavioral traits: hybrid semantic/lexical retrieval, exact citations, match reasons, and reliability scoring. However it omits key operational facts such as whether the index must already exist, which repo/index is targeted by default, and whether results are bounded or truncated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause adds information. It is efficient, though the terse packing of output traits without any usage context borders on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no annotations, no output schema, and half the parameters undocumented, the description is only partially complete. It hints at the return content (citations, match reasons, reliability) but leaves prerequisites and most parameter behavior unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, and the description adds no parameter meaning at all – it does not explain mode options (hybrid/dense/sparse), rerank, top_k limits, index_dir, or repo_path defaults. An agent must infer the effect of switching from hybrid to dense/sparse with no help.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search indexed code") and names the retrieval techniques (hybrid semantic + lexical) plus output traits, so the agent knows this is a code search tool. It does not name or differentiate itself from siblings like code_intel_symbol_graph or code_intel_read_file, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this over code_intel_symbol_graph (symbol relations) or code_intel_read_file (direct reads), nor any preconditions such as needing the repository indexed first. Usage is only weakly implied by the verb "Search".
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | Optional function, class, or symbol name. | |
| index_dir | No | Optional index storage directory. | |
| repo_path | No | Repository root; defaults to the server --dir. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It 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.
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.
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.
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.
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.
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.
4 tool updates
v0.1.0- First observed
code_intel_index - First observed
code_intel_read_file - First observed
code_intel_search - First observed
code_intel_symbol_graph
TDQS
Scored across 4 tools
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).
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.
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.
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
Related MCP Connectors
Token-efficient search for coding agents over public and private documentation.
Search indexed code, trace dependencies, assess change impact, and recall repository memory.
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Project memory, semantic code search, and grounded agent context.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI coding assistants to search and retrieve information from a locally ingested knowledge base using hybrid search, grounded in user-curated documentation.16MIT
- FlicenseNot gradedqualityDmaintenanceEnables 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-
- AlicenseAqualityAmaintenanceEnables 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.21MIT
- AlicenseAqualityBmaintenanceEnables 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.2MIT