Recon
Recon indexa tu base de código en un grafo de conocimiento y lo expone a través de 14 herramientas MCP. Los agentes de IA obtienen mapeo de dependencias, análisis de radio de impacto, renombrado seguro de múltiples archivos, trazado de flujo de ejecución, consultas Cypher, búsqueda semántica y revisión de PR — sin leer cada archivo. Soporta 13 idiomas, reindexación en vivo en ~50ms y configuración cero.
Documentación
Recon
Dale a tu agente de IA un cerebro. Indexa tu código en 5 segundos.
Un servidor MCP de inteligencia de código: 8 herramientas, 13 lenguajes, grafo de conocimiento, cero configuración.
Resumen · Inicio rápido · Características · Configuración MCP · Herramientas · Panel
Resumen
Tu agente de IA es ciego a la arquitectura. Busca con grep, adivina, y rompe cosas en archivos que nunca leyó.
Recon lo soluciona con una línea:
npx recon-mcp serve
Eso es todo. Tu agente ahora tiene un grafo de conocimiento de todo tu código:
- Pregunta "¿qué se rompe si cambio esta función?" — radio de impacto en ms
- "Traza el flujo de ejecución desde esta ruta de API" — cadena de llamadas entre lenguajes
- "Encuentra código estructuralmente similar a X" — búsqueda híbrida FTS5 + vectorial
- "Renombra esto de forma segura en todo el repositorio" — consciente del grafo, sin falsos positivos
- "Dibújame un diagrama de arquitectura" — Mermaid, un comando
- "Encuentra código muerto y dependencias circulares" — reglas de calidad de código
- "¿Qué pruebas se ven afectadas?" — análisis de impacto en pruebas
Funciona con Claude Code, Cursor, Windsurf y cualquier cliente MCP. Cero configuración. 13 lenguajes. MIT.
¿Por qué Recon?
Los agentes de IA de codificación son ciegos a la arquitectura. Leen un archivo a la vez, buscan identificadores con grep, adivinan en los puntos de llamada y rompen cosas en lugares que nunca vieron.
No puedes solucionar esto con una ventana de contexto más grande. Necesitas estructura.
Recon indexa tu código en un grafo de conocimiento — funciones, clases, cadenas de llamadas, importaciones, comunidades — y lo expone a través de 8 herramientas MCP, 3 prompts y 3 recursos que cualquier agente de IA puede consultar.
Un comando, conciencia total. Tu agente obtiene mapeo de dependencias, análisis de radio de impacto, renombrados seguros, trazado de flujo de ejecución, búsqueda en lenguaje natural y análisis de calidad de código — sin leer cada archivo.
Inicio rápido
# Index your project (zero config)
cd /path/to/your/project
npx recon-mcp index
# Start MCP server for AI agents
npx recon-mcp serve
# Or start HTTP REST API + interactive dashboard
npx recon-mcp serve --http
# → http://localhost:3100
Instalación global (opcional):
npm install -g recon-mcp
recon index && recon serve
Requiere Node.js ≥ 20. Las gramáticas de Tree-sitter se incluyen como dependencias npm. v6 usa almacenamiento SQLite (
.recon/recon.db) — un solo archivo, sin dispersión de JSON.
Características
Inteligencia de código
|
Búsqueda y consulta
|
Lenguajes compatibles
| Lenguaje | Analizador | Qué se indexa |
|---|---|---|
| Go | Tree-sitter + dedicado | Paquetes, funciones, métodos, structs, interfaces, grafo de llamadas, importaciones |
| TypeScript | Dedicado (API del compilador) | Módulos, componentes, funciones, tipos, uso de JSX, importaciones |
| Python | Tree-sitter | Clases, funciones, métodos, herencia, importaciones, llamadas |
| Rust | Tree-sitter | Structs, enums, traits, funciones, bloques impl, importaciones use, llamadas |
| Java | Tree-sitter | Clases, interfaces, enums, métodos, importaciones, llamadas |
| C | Tree-sitter | Funciones, structs, enums, macros, importaciones #include, llamadas |
| C++ | Tree-sitter | Clases, structs, namespaces, enums, funciones, herencia, llamadas |
| Ruby | Tree-sitter | Clases, módulos, métodos, herencia, importaciones require, llamadas |
| PHP | Tree-sitter | Clases, interfaces, funciones, métodos, importaciones use, llamadas |
| C# | Tree-sitter | Clases, interfaces, enums, métodos, importaciones using, llamadas |
| Kotlin | Tree-sitter (opcional) | Clases, interfaces, enums, funciones, declaraciones de importación, llamadas |
| Swift | Tree-sitter (opcional) | Clases, structs, enums, funciones, declaraciones de importación, llamadas |
| Entre lenguajes | Coincidencia de rutas | Rutas de API HTTP mapeadas de manejadores Go a consumidores TypeScript |
Kotlin y Swift requieren gramáticas opcionales:
npm install tree-sitter-kotlin tree-sitter-swiftLa gramática de Go (tree-sitter-go) se incluye por defecto.
Búsqueda mejorada (opcional)
Por defecto, Recon usa búsqueda de texto completo FTS5. Para búsqueda semántica híbrida (encuentra código conceptualmente similar, no solo coincidencias de nombre exactas), instala un paquete opcional:
npm install @huggingface/transformers
Recon lo detecta automáticamente y habilita la búsqueda híbrida FTS5 + vectorial con embeddings de all-MiniLM-L6-v2. Sin configuración adicional ni banderas — solo instala y re-indexa.
Exportación del grafo
Exporta el grafo de conocimiento como Mermaid (pégalo en PRs/documentación de GitHub):
# Mermaid flowchart for a package
recon export --package mcp --limit 20
# Ego graph around a symbol
recon export --symbol handleQuery --depth 2
# Filter by node types and edge types
recon export --type Function,Interface --edges CALLS
También disponible como herramienta MCP recon_export — los agentes pueden generar diagramas directamente en la conversación.
Cómo funciona
You add MCP config → Agent starts Recon automatically → Done.
Cuando tu agente de IA inicia:
- El agente lee la configuración MCP → ejecuta
npx recon-mcp serve npxdescarga Recon desde npm (en caché después de la primera ejecución)- Recon auto-indexa el proyecto (
cwd) → crea.recon/recon.db - El observador de archivos inicia → monitorea archivos fuente para cambios
- El servidor MCP se abre en stdio (stdin/stdout) — sin red, sin puerto
- El agente ve 8 herramientas + 3 prompts + 3 recursos
- El agente recibe instrucciones integradas → sabe cuándo usar cada herramienta
- Editas código → el grafo se actualiza quirúrgicamente en ~50ms → se auto-guarda en disco → el agente siempre tiene datos frescos
Cero configuración. Cero comandos. Totalmente automático.
Integración MCP
Proyecto único
Agrega a la configuración MCP de tu agente de IA:
|
Claude Code (
|
Cursor (
|
cwdle dice a Recon qué proyecto indexar. Escanea el código desde este directorio y crea.recon/allí.
Múltiples proyectos
Indexa y observa múltiples proyectos desde un solo servidor Recon usando --projects:
{
"mcpServers": {
"recon": {
"command": "npx",
"args": ["recon-mcp", "serve", "--projects", "/path/to/frontend"],
"cwd": "/path/to/backend"
}
}
}
Esto crea un grafo fusionado — ambos proyectos se indexan, observan y consultan desde un solo servidor MCP. Usa el parámetro repo en cualquier herramienta para filtrar por proyecto.
Alternativamente, ejecuta servidores separados por proyecto:
{
"mcpServers": {
"recon-backend": {
"command": "npx",
"args": ["recon-mcp", "serve"],
"cwd": "/path/to/backend"
},
"recon-frontend": {
"command": "npx",
"args": ["recon-mcp", "serve"],
"cwd": "/path/to/frontend"
}
}
}
### Multi-Repo (Merged Graph)
For cross-project queries (e.g., tracing API calls from frontend to backend), use multi-repo mode:
```bash
# Index each project with a name
cd /path/to/backend && npx recon-mcp index --repo backend
cd /path/to/frontend && npx recon-mcp index --repo frontend
{
"mcpServers": {
"recon": {
"command": "npx",
"args": ["recon-mcp", "serve"],
"cwd": "/path/to/backend"
}
}
}
Luego filtra por repositorio en las consultas: recon_find({query: "Auth", repo: "backend"}).
Auto-indexación
recon serve maneja la indexación automáticamente:
| Escenario | Comportamiento |
|---|---|
Primera ejecución (sin .recon/) | Indexación completa → crea .recon/recon.db |
| Código cambiado desde la última indexación | Re-indexación incremental (solo archivos cambiados) |
| Sin cambios | Usa índice en caché → inicio instantáneo |
| Forzar re-indexación | recon index --force |
| Omitir auto-indexación | recon serve --no-index |
| Indexar pero sin observador | recon serve --no-watch |
Instrucciones integradas: Recon inyecta automáticamente instrucciones del servidor MCP en el prompt del sistema del agente. El agente usará proactivamente
recon_impactantes de editar,recon_explainpara exploración yrecon_renamepara renombrados seguros — sin necesidad de prompts manuales.
Comandos CLI
recon index # Index codebase (incremental)
recon index --force # Force full re-index
recon index --repo my-backend # Index as named repo (multi-repo)
recon index --embeddings # Include vector embeddings for semantic search
recon serve # Start MCP server on stdio (auto-indexes + live watcher)
recon serve --projects ../frontend # Watch additional project directories
recon serve --http # Start HTTP REST API + dashboard on :3100
recon serve --http --port 8080 # Custom port
recon serve --no-index # Skip auto-indexing and file watcher
recon serve --no-watch # Auto-index but disable file watcher
recon serve --repo my-backend # Serve specific repo only
recon export # Export graph as Mermaid flowchart (Mermaid only)
recon export --symbol handleQuery # Ego graph around a symbol
recon status # Show index stats
recon status --repo my-backend # Status for specific repo
recon clean # Delete index
Auto-indexación:
serveverifica si el índice está actualizado con el commit actual de Git. Si está desactualizado, re-indexa automáticamente antes de iniciar. Usa--no-indexpara omitir.
Configuración
Crea un .recon.json en la raíz de tu proyecto para persistir configuraciones:
// .recon.json
{
"projects": ["../frontend"], // Additional dirs to index + watch
"embeddings": false, // Enable vector embeddings
"watch": true, // Enable live file watcher
"watchDebounce": 1500, // Debounce interval (ms)
"ignore": ["generated/"], // Extra paths to ignore
"crossLanguage": true, // Enable cross-language API matching
"testPatterns": ["**/*.test.*", "**/*.spec.*"], // Test file patterns
"rules": { // Code quality rule config
"deadCode": true,
"circularDeps": true,
"unusedExports": true
}
}
Prioridad: Las banderas CLI siempre anulan .recon.json, que anula los valores predeterminados.
Con un archivo de configuración, tu configuración MCP se mantiene mínima:
{
"mcpServers": {
"recon": {
"command": "npx",
"args": ["recon-mcp", "serve"],
"cwd": "/path/to/project"
}
}
}
No más arrays largos de
args— toda la configuración vive en.recon.json.
Referencia de herramientas
Las 8 herramientas aceptan un parámetro opcional repo para filtrar entre múltiples repositorios.
recon_map
Vista general de arquitectura: paquetes, stack tecnológico, puntos de entrada, salud.
recon_map(repo?: string)
recon_find
Búsqueda inteligente: nombre exacto, comodín (*Handler) o lenguaje natural.
recon_find(query: string, type?: string, language?: string, package?: string, limit?: number)
recon_explain
Contexto completo de 360°: llamadores, llamados, flujos, enlaces entre lenguajes, pruebas.
recon_explain(name: string, file?: string, depth?: number, include_source?: boolean)
recon_impact
Análisis de radio de impacto con pruebas afectadas.
recon_impact(target: string, direction?: "upstream" | "downstream", maxDepth?: number, file?: string)
Niveles de riesgo: LOW (0-2 d1) · MEDIUM (3-9) · HIGH (10-19) · CRITICAL (20+ o entre aplicaciones)
recon_changes
Diff de Git a símbolos afectados, evaluación de riesgo y pruebas afectadas.
recon_changes(scope?: "unstaged" | "staged" | "all" | "branch", base?: string, include_diagram?: boolean)
recon_rename
Renombrado seguro consciente del grafo entre archivos. Simulación por defecto.
recon_rename(symbol: string, new_name: string, file?: string, dry_run?: boolean)
recon_export
Genera diagrama Mermaid.
recon_export(target?: string, scope?: string, depth?: number, direction?: string, limit?: number)
recon_rules
Calidad de código: código muerto, dependencias circulares, exportaciones sin usar, archivos grandes, huérfanos.
recon_rules(rule?: string, package?: string, language?: string)
Recursos MCP
Datos estructurados mediante URIs recon:// — los agentes los LEEN sin hacer una llamada de herramienta.
| Recurso | URI | Descripción |
|---|---|---|
| Estadísticas del índice | recon://stats | Conteos de nodos y relaciones por tipo y lenguaje |
| Detalle de símbolo | recon://symbol/{name} | Definición del símbolo, llamadores, llamados, relaciones |
| Símbolos de archivo | recon://file/{path} | Todos los símbolos en un archivo con tipos y rangos de línea |
Prompts MCP
Tres flujos de trabajo guiados que instruyen a los agentes de IA paso a paso usando las herramientas de Recon:
| Prompt | Descripción | Uso |
|---|---|---|
pre_commit | Análisis de cambios pre-commit → informe de riesgo | pre_commit(scope: "staged") |
architecture | Documentación de arquitectura con diagramas mermaid | architecture() |
onboard | Guía de incorporación para nuevos desarrolladores | onboard(focus: "auth") |
Cada prompt devuelve un mensaje estructurado con instrucciones paso a paso. El agente recibe el mensaje y ejecuta autónomamente cada paso usando las herramientas de Recon.
Panel
Inicia el servidor HTTP para acceder al panel interactivo de inteligencia de código:
recon serve --http # → http://localhost:3100
Características:
- Pestaña de Grafo — Grafo de conocimiento dirigido por fuerza con nodos coloreados por tipo, alternancia de color de comunidad y clic para inspeccionar
- Pestaña de Procesos — Visor de flujo de ejecución con cadenas de llamadas, conteos de ramas y etiquetas de comunidad
- Pestaña de Impacto — Análisis interactivo de radio de impacto con niveles de riesgo y niveles de confianza
- Búsqueda en vivo — Menú desplegable de búsqueda con debounce (200ms) con navegación por teclado (↑↓ Enter Esc)
- Leyenda del grafo — Mapeo de tipo de nodo → forma/color
- Barra lateral de paquetes — Filtra el grafo por paquete con conteos de símbolos
Soporte multi-repositorio
Indexa y consulta múltiples repositorios desde un único directorio .recon/:
cd /path/to/backend && recon index --repo backend
cd /path/to/frontend && recon index --repo frontend
recon serve # Serve all repos (merged graph)
recon serve --repo backend # Serve single repo
Todas las herramientas aceptan un parámetro opcional repo. Los índices por repositorio se almacenan en .recon/recon.db.
Búsqueda
Búsqueda de texto completo FTS5
FTS5 reemplaza al BM25 personalizado, con tokenización camelCase/snake_case integrada en SQLite.
- Tokenizador divide camelCase, PascalCase, snake_case, límites de dígitos (
base64Decode→["base", "64", "decode"]) - Refuerzo de nombres — los nombres de símbolos pesan 3 veces más que las rutas de archivo
- Ranking — función de ranking FTS5 con puntuación de relevancia
- Respaldo — coincidencia de subcadenas cuando FTS5 no devuelve resultados
Búsqueda semántica híbrida
Habilítala con recon index --embeddings, luego usa recon_find({query: "...", semantic: true}).
- Modelo:
Xenova/all-MiniLM-L6-v2(embeddings de 384 dimensiones vía@huggingface/transformers) - Fusión: Fusión de Ranking Recíproco (RRF) —
score = 1/(k + rank), k=60 - Almacenamiento: Persistido en recon.db
Arquitectura
├── src/
│ ├── analyzers/
│ │ ├── ts-analyzer.ts # TypeScript/React extraction (Compiler API)
│ │ ├── cross-language.ts # Go route ↔ TS API call matching
│ │ ├── framework-detection.ts # 20+ framework entry point detection
│ │ └── tree-sitter/ # Multi-language tree-sitter analyzer
│ ├── graph/
│ │ ├── graph.ts # KnowledgeGraph — in-memory Map + adjacency + version
│ │ ├── community.ts # Label propagation community detection
│ │ └── process.ts # Execution flow detection (BFS)
│ ├── watcher/
│ │ └── watcher.ts # Live file watcher — surgical graph updates
│ ├── mcp/
│ │ ├── server.ts # MCP server (stdio transport)
│ │ ├── tools.ts # 8 tool definitions (JSON Schema)
│ │ ├── handlers.ts # Tool dispatch + query logic
│ │ ├── prompts.ts # 3 MCP prompt templates
│ │ ├── hints.ts # Next-step hints for agent guidance
│ │ ├── instructions.ts # AI agent instructions (system prompt)
│ │ ├── augmentation.ts # Compact context injection
│ │ ├── staleness.ts # Index freshness check
│ │ ├── rename.ts # Graph-aware multi-file rename
│ │ └── resources.ts # MCP Resources (recon:// URIs)
│ ├── search/
│ │ ├── fts5.ts # FTS5 full-text search
│ │ ├── hybrid-search.ts # FTS5 + vector RRF fusion
│ │ └── vector-store.ts # In-memory cosine similarity
│ ├── server/
│ │ └── http.ts # Express HTTP REST API + dashboard
│ ├── dashboard/ # Interactive web dashboard
│ │ ├── index.html
│ │ ├── style.css
│ │ └── app.js
│ └── cli/
│ ├── index.ts # Commander CLI
│ └── commands.ts # index, serve, status, clean
Flujo de datos
TS Compiler API → components ─┐
tree-sitter → 13 languages ├─→ KnowledgeGraph ─→ .recon/recon.db (SQLite)
router.go → API routes ─┤ (in-memory) single database:
label propagation → clusters ─┤ + FTS5 Index - nodes, relationships
BFS → execution flows ─┘ + Communities - search index (FTS5)
+ Embeddings - embeddings
+ Processes - metadata
│
┌───────┤
File Watcher (chokidar)
surgical update ~50ms/file
│
┌─────────┴──────────┐
MCP Server (stdio) HTTP REST API
┌───┴────┐────┐ (:3100 + Dashboard)
8 Tools 3 Prompts 3 Resources
│ │ recon://symbol/{name}
┌─────┼────┐ │ recon://file/{path}
│ │ │ │ recon://stats
Claude Cursor … │
Code Antigravity │
│
pre_commit
architecture
onboard
API REST HTTP
recon serve --http # Listen on :3100
recon serve --http --port 8080 # Custom port
| Método | Ruta | Descripción |
|---|---|---|
GET | /api/health | Verificación de salud + estadísticas del índice |
GET | /api/tools | Lista las herramientas disponibles con sus esquemas |
POST | /api/tools/:name | Ejecuta una herramienta (cuerpo = parámetros JSON) |
GET | /api/resources | Lista los recursos y plantillas MCP |
GET | /api/resources/read?uri=... | Lee un recurso por URI |
# Search for a symbol
curl -X POST http://localhost:3100/api/tools/recon_find \
-H 'Content-Type: application/json' \
-d '{"query": "AuthMiddleware"}'
# Read a resource
curl 'http://localhost:3100/api/resources/read?uri=recon://symbol/AuthMiddleware'
CORS habilitado por defecto para clientes de navegador.
Seguridad: El servidor HTTP se vincula a localhost (127.0.0.1) por defecto. Usa
--host 0.0.0.0para exponerlo en la red.
Esquema del grafo
Propiedades de nodos
| Propiedad | Tipo | Descripción |
|---|---|---|
id | string | Identificador único del nodo |
type | NodeType | Función, Método, Struct, Interfaz, Clase, etc. |
name | string | Nombre del símbolo |
file | string | Ruta del archivo fuente |
startLine / endLine | number | Rango de líneas en el archivo |
language | Language | Lenguaje fuente |
package | string | Ruta del paquete/módulo |
exported | boolean | Si el símbolo está exportado |
repo | string? | Nombre del repositorio (multi-repositorio) |
community | string? | Etiqueta de comunidad/clúster (detección automática) |
isTest | boolean? | Si el símbolo está en un archivo de pruebas |
Tipos de relaciones
| Tipo | Significado | Confianza |
|---|---|---|
CONTAINS | Paquete/Módulo → Archivo | 1.0 |
DEFINES | Archivo → Símbolo | 1.0 |
CALLS | Función → Función | 0.5–1.0 |
IMPORTS | Paquete → Paquete / Archivo → Archivo | 1.0 |
HAS_METHOD | Struct/Clase → Método | 1.0 |
IMPLEMENTS | Struct → Interfaz / Clase → Trait | 0.8–0.9 |
EXTENDS | Clase → Clase (herencia) | 0.9 |
USES_COMPONENT | Componente → Componente (JSX) | 0.9 |
CALLS_API | Función TS → Handler Go (multilenguaje) | 0.85–0.95 |
Pruebas
npm test # Run all tests
npx vitest --watch # Watch mode
541 pruebas en 22 suites de pruebas:
| Suite | Pruebas | Cobertura |
|---|---|---|
graph.test.ts | 23 | API KnowledgeGraph — agregar, consultar, eliminar, serializar |
handlers.test.ts | 30 | Despacho de herramientas MCP con grafo simulado |
search.test.ts | 27 | Tokenizador FTS5, ranking, serialización |
rename.test.ts | 28 | Renombrado consciente del grafo, desambiguación, formato |
resources.test.ts | 35 | Análisis de URI de recursos, los 3 tipos de recursos |
tree-sitter.test.ts | 58 | Extracción multilenguaje, consistencia entre lenguajes |
multi-repo.test.ts | 16 | Almacenamiento multi-repositorio, filtrado |
community.test.ts | 13 | Propagación de etiquetas para agrupamiento, integración de handlers |
embeddings.test.ts | 39 | Almacén de vectores, fusión RRF, búsqueda híbrida |
process.test.ts | 21 | Detección de flujo de ejecución, BFS, ciclos |
http.test.ts | 18 | Rutas de API REST HTTP, CORS |
framework-detection.test.ts | 27 | Detección de frameworks por ruta/nombre, multiplicadores |
augmentation.test.ts | 28 | Motor de aumento, verificación de obsolescencia, prompts MCP |
sqlite.test.ts | 32 | Almacenamiento SQLite, migraciones, indexación FTS5 |
find.test.ts | 24 | Búsqueda inteligente — exacta, comodín, lenguaje natural |
rules.test.ts | 29 | Código muerto, dependencias circulares, exportaciones sin uso, huérfanos |
errors.test.ts | 18 | Manejo de errores, casos límite, degradación gradual |
migrate.test.ts | 15 | Migración JSON a SQLite, integridad de datos |
Detección de comunidades
Después de la indexación, Recon detecta automáticamente comunidades de código usando el Algoritmo de Propagación de Etiquetas (LPA):
- Cada función/clase/struct recibe una etiqueta
communitysegún sus conexiones - Las comunidades se nombran según el paquete más común en cada clúster
recon_explainmuestra la pertenencia a comunidadesrecon_impactlista las comunidades afectadas para conciencia entre módulos
Re-indexación en vivo
Recon observa los archivos fuente y actualiza el grafo de conocimiento en tiempo real:
| Característica | Detalle |
|---|---|
| Observador de archivos | chokidar v4 con debounce de 1.5s, awaitWriteFinish para escrituras atómicas |
| Actualización quirúrgica | Eliminar nodos antiguos → re-analizar un solo archivo → insertar nuevos nodos + aristas |
| Velocidad | ~50ms por cambio de archivo |
| Archivos TS | Re-análisis completo: símbolos, imports, llamadas, componentes JSX |
| Archivos Tree-sitter | Re-análisis completo: símbolos, llamadas, herencia, métodos (Python, Rust, Java, etc.) |
| Reconstrucción de aristas | CALLS, IMPORTS, HAS_METHOD, EXTENDS, IMPLEMENTS, USES_COMPONENT |
| Llamadores entrantes | Re-enlazados automáticamente tras la actualización |
| Índice FTS5 | Actualizado automáticamente en SQLite en cada cambio del grafo |
| Multi-proyecto | La bandera --projects observa directorios adicionales |
| Ignorados | node_modules/, .git/, dist/, .next/, build/, coverage/ |
Indexación incremental
Los archivos se procesan con SHA-256. En recon index, solo se re-analizan los archivos modificados:
- TypeScript: granularidad por archivo vía Compiler API
- Tree-sitter: granularidad por archivo para los 13 lenguajes
- Auto-detección:
servecompara hashes de commits de Git para detectar índices obsoletos - Fuerza una re-indexación completa con
--force