Narsil MCP

oficial

Servidor MCP ultrarrápido 🔥 de primera clase en Rust 🦀 con motor neuronal, perfilado de seguridad y frontend gráfico opcional

¿Qué puedes hacer con Narsil MCP?

  • Encuentra símbolos en 32 lenguajes — Busca funciones, clases o interfaces por nombre o patrón usando find_symbols o workspace_symbol_search.
  • Rastrea datos contaminados para auditorías de seguridad — Sigue la entrada del usuario a través del código base con trace_taint y detecta vulnerabilidades de inyección como SQLi o XSS.
  • Analiza relaciones de llamadas a funciones — Mapea llamantes, llamados y rutas entre funciones con get_call_graph, get_callers y find_call_path.
  • Genera una lista de materiales de software — Exporta un SBOM en formato CycloneDX o SPDX y verifica dependencias contra la base de datos OSV con generate_sbom y check_dependencies.
  • Infiera tipos sin verificadores externos — Obtén tipos inferidos para variables de Python, JavaScript o TypeScript usando infer_types y encuentra posibles errores de tipo.
  • Consulta el código base como un grafo de conocimiento — Ejecuta consultas SPARQL contra el grafo RDF o exporta capas CCG jerarquizadas para consumo de IA con sparql_query y export_ccg.

Documentación

narsil-mcp

El servidor MCP ultrarrápido y centrado en la privacidad para inteligencia de código profunda

License Rust Tests MCP

Un servidor MCP (Model Context Protocol) desarrollado en Rust que proporciona a los asistentes de IA una comprensión profunda del código a través de 90 herramientas especializadas.

¿Por qué narsil-mcp?

Característicanarsil-mcpXRAYSerenaGitHub MCP
Lenguajes32430+ (LSP)N/D
Búsqueda neuronalNoNoNo
Análisis de contaminaciónNoNoNo
SBOM/LicenciasNoNoParcial
Offline/LocalNo
WASM/NavegadorNoNoNo
Grafos de llamadasParcialNoNo
Inferencia de tiposNoNoNo

Características principales

  • Inteligencia de código - Extracción de símbolos, búsqueda semántica, análisis de grafos de llamadas
  • Búsqueda semántica neuronal - Encuentra código similar usando embeddings (Voyage AI, OpenAI)
  • Análisis de seguridad - Análisis de contaminación, escaneo de vulnerabilidades, cobertura OWASP/CWE
  • Seguridad de la cadena de suministro - Generación de SBOM, auditoría de dependencias, cumplimiento de licencias
  • Análisis avanzado - Grafos de flujo de control, análisis de flujo de datos, detección de código muerto

¿Por qué elegir narsil-mcp?

  • Escrito en Rust - Ultrarrápido, seguro en memoria, binario único (~30MB)
  • Impulsado por Tree-sitter - Análisis preciso e incremental para 32 lenguajes
  • Configuración cero - Apunta a los repositorios y listo
  • Compatible con MCP - Funciona con Claude, Cursor, VS Code Copilot, Zed y cualquier cliente MCP
  • Privacidad primero - Totalmente local, ningún dato sale de tu máquina
  • Indexación paralela - Utiliza todos los núcleos mediante Rayon
  • Extractos inteligentes - Se expande a ámbitos sintácticos completos
  • Seguridad primero - Detección de vulnerabilidades y análisis de contaminación integrados
  • Embeddings neuronales - Búsqueda semántica opcional con Voyage AI u OpenAI
  • Soporte WASM - Ejecución en navegador con compilación WebAssembly
  • Transmisión en tiempo real - Resultados a medida que avanza la indexación para repositorios grandes

Lenguajes soportados

LenguajeExtensionesSímbolos extraídos
Rust.rsfunciones, estructuras, enumeraciones, traits, implementaciones, módulos
Python.py, .pyifunciones, clases
JavaScript.js, .jsx, .mjsfunciones, clases, métodos, variables
TypeScript.ts, .tsxfunciones, clases, interfaces, tipos, enumeraciones
Go.gofunciones, métodos, tipos
C.c, .hfunciones, estructuras, enumeraciones, typedefs
C++.cpp, .cc, .hppfunciones, clases, estructuras, espacios de nombres
Java.javamétodos, clases, interfaces, enumeraciones
C#.csmétodos, clases, interfaces, estructuras, enumeraciones, delegados, espacios de nombres
Bash.sh, .bash, .zshfunciones, variables
Ruby.rb, .rake, .gemspecmétodos, clases, módulos
Kotlin.kt, .ktsfunciones, clases, objetos, interfaces
PHP.php, .phtmlfunciones, métodos, clases, interfaces, traits
Swift.swiftclases, estructuras, enumeraciones, protocolos, funciones
Verilog/SystemVerilog.v, .vh, .sv, .svhmódulos, tareas, funciones, interfaces, clases
Scala.scala, .scclases, objetos, traits, funciones, valores
Lua.luafunciones, métodos
Haskell.hs, .lhsfunciones, tipos de datos, clases de tipos
Elixir.ex, .exsmódulos, funciones
Clojure.clj, .cljs, .cljc, .ednlistas (AST básico)
Dart.dartfunciones, clases, métodos
Julia.jlfunciones, módulos, estructuras
R.R, .r, .Rmdfunciones
Perl.pl, .pm, .tfunciones, paquetes
Zig.zigfunciones, variables
Erlang.erl, .hrlfunciones, módulos, registros
Elm.elmfunciones, tipos
Fortran.f90, .f95, .f03, .f08, .f, .for, .fppprogramas, subrutinas, funciones, módulos
PowerShell.ps1, .psm1, .psd1funciones, clases, enumeraciones
Nix.nixvinculaciones
Groovy.groovy, .gradlemétodos, clases, interfaces, enumeraciones, funciones

Instalación

Vía gestores de paquetes (Recomendado)

macOS / Linux (Homebrew):

brew tap postrv/narsil
brew install narsil-mcp

Windows (Scoop):

scoop bucket add narsil https://github.com/postrv/scoop-narsil
scoop install narsil-mcp

Rust/Cargo (todas las plataformas):

cargo install narsil-mcp

Node.js/npm (todas las plataformas):

npm install -g narsil-mcp
# or
yarn global add narsil-mcp
# or
pnpm add -g narsil-mcp

Nix:

# Run directly without installing
nix run github:postrv/narsil-mcp -- --repos ./my-project

# Install to profile
nix profile install github:postrv/narsil-mcp

# With web visualization frontend
nix profile install github:postrv/narsil-mcp#with-frontend

# Development shell
nix develop github:postrv/narsil-mcp

Script de instalación en un clic

macOS / Linux:

curl -fsSL https://raw.githubusercontent.com/postrv/narsil-mcp/main/install.sh | bash

Windows (PowerShell):

irm https://raw.githubusercontent.com/postrv/narsil-mcp/main/install.ps1 | iex

Windows (Git Bash / MSYS2):

curl -fsSL https://raw.githubusercontent.com/postrv/narsil-mcp/main/install.sh | bash

Nota para usuarios de Windows: El instalador de PowerShell proporciona mejores mensajes de error e integración nativa con Windows. Configurará automáticamente tu PATH y verificará las herramientas de compilación necesarias si se compila desde el código fuente.

Desde el código fuente

Requisitos previos:

# Clone and build
git clone [email protected]:postrv/narsil-mcp.git
cd narsil-mcp
cargo build --release

# Binary will be at:
# - macOS/Linux: target/release/narsil-mcp
# - Windows: target/release/narsil-mcp.exe

Compilaciones con funcionalidades específicas

narsil-mcp soporta diferentes conjuntos de funcionalidades para distintos casos de uso:

# Default build - native MCP server (~30MB)
cargo build --release

# With RDF knowledge graph and CCG tools (~35MB) - SPARQL queries, Code Context Graph
cargo build --release --features graph

# With neural vector search (~32MB) - adds TF-IDF similarity
cargo build --release --features neural

# With ONNX model support (~50MB) - adds local neural embeddings
cargo build --release --features neural-onnx

# With embedded visualization frontend (~31MB)
cargo build --release --features frontend

# Full-featured build with graph + frontend (~40MB)
cargo build --release --features graph,frontend

# For browser/WASM usage
cargo build --release --target wasm32-unknown-unknown --features wasm
FuncionalidadDescripciónTamaño
native (por defecto)Servidor MCP completo con todas las herramientas~30MB
graph+ Grafo de conocimiento RDF, herramientas SPARQL, CCG~35MB
frontend+ Interfaz web de visualización integrada~31MB
neural+ Búsqueda vectorial TF-IDF, embeddings de API~32MB
neural-onnx+ Inferencia con modelo ONNX local~50MB
wasmCompilación para navegador (sin sistema de archivos, git)~3MB

Importante: La bandera CLI --graph requiere que el binario se compile con --features graph. Si pasas --graph a un binario compilado sin esta funcionalidad, verás una advertencia y las herramientas SPARQL/CCG no estarán disponibles. Consulta Solución de problemas a continuación.

Para instrucciones detalladas de instalación, solución de problemas y guías específicas por plataforma, consulta docs/INSTALL.md.

Uso

Uso básico

macOS / Linux:

# Index a single repository
narsil-mcp --repos /path/to/your/project

# Index multiple repositories
narsil-mcp --repos ~/projects/project1 --repos ~/projects/project2

# Enable verbose logging
narsil-mcp --repos /path/to/project --verbose

# Force re-index on startup
narsil-mcp --repos /path/to/project --reindex

Windows (PowerShell / CMD):

# Index a single repository
narsil-mcp --repos C:\Users\YourName\Projects\my-project

# Index multiple repositories
narsil-mcp --repos C:\Projects\project1 --repos C:\Projects\project2

# Enable verbose logging
narsil-mcp --repos C:\Projects\my-project --verbose

# Force re-index on startup
narsil-mcp --repos C:\Projects\my-project --reindex

Conjunto completo de funcionalidades

narsil-mcp \
  --repos ~/projects/my-app \
  --git \           # Enable git blame, history, contributors
  --call-graph \    # Enable function call analysis
  --persist \       # Save index to disk for fast startup
  --watch \         # Auto-reindex on file changes
  --lsp \           # Enable LSP for hover, go-to-definition
  --streaming \     # Stream large result sets
  --remote \        # Enable GitHub remote repo support
  --neural \        # Enable neural semantic embeddings
  --neural-backend api \  # Backend: "api" (Voyage/OpenAI) or "onnx"
  --neural-model voyage-code-2 \  # Model to use
  --neural-dimension 3072 \  # Override embedding dimensions (auto-detected per model)
  --graph           # Enable SPARQL/RDF knowledge graph and CCG tools (requires --features graph build)

Nota sobre --graph: Esta bandera habilita las consultas SPARQL y las herramientas de Code Context Graph (CCG), pero solo si el binario se compiló con --features graph. El binario por defecto no incluye esta funcionalidad. Si necesitas capacidades SPARQL/CCG, compila desde el código fuente con:

cargo build --release --features graph

Si pasas --graph a un binario sin la funcionalidad, verás una advertencia al inicio y el servidor continuará sin las herramientas SPARQL/CCG.

Nota: Los embeddings neuronales requieren una clave API (o un endpoint personalizado). La forma más sencilla de configurarlo es con el asistente interactivo:

# Run the neural API key setup wizard
narsil-mcp config init --neural

El asistente:

  • Detectará tu editor (Claude Desktop, Claude Code, Zed, VS Code, JetBrains)
  • Te pedirá tu proveedor de API (Voyage AI, OpenAI o personalizado)
  • Validará tu clave API
  • La añadirá automáticamente a la configuración MCP de tu editor

Alternativamente, puedes configurar manualmente una de estas variables de entorno:

  • EMBEDDING_API_KEY - Clave API genérica para cualquier proveedor
  • VOYAGE_API_KEY - Clave API específica de Voyage AI
  • OPENAI_API_KEY - Clave API específica de OpenAI
  • EMBEDDING_SERVER_ENDPOINT - URL de endpoint de API de embedding personalizado (opcional, permite usar modelos autoalojados)

Configuración

¡v1.1.0+ introduce configuración opcional para un control detallado sobre las herramientas y el rendimiento. ¡Todo el uso existente sigue funcionando - la configuración es completamente opcional!

Inicio rápido

# Generate default config interactively
narsil-mcp config init

# List available tools
narsil-mcp tools list

# Apply a preset via CLI
narsil-mcp --repos ~/project --preset minimal

Detección automática del editor

narsil-mcp detecta tu editor y aplica un preajuste óptimo automáticamente:

EditorPreajusteHerramientasTokens de contextoPor qué
ZedMínimo26~4,686Inicio rápido, contexto mínimo
VS CodeEquilibrado51~8,948Buen equilibrio de funcionalidades
Claude DesktopCompleto90~12,001Máximas capacidades

Ahorro de tokens:

  • Preajuste mínimo: 61% menos tokens vs Completo
  • Preajuste equilibrado: 25% menos tokens vs Completo

Preajustes

Elige un preajuste según tu caso de uso:

# Minimal - Fast, lightweight (Zed, Cursor)
narsil-mcp --repos ~/project --preset minimal

# Balanced - Good defaults (VS Code, IntelliJ)
narsil-mcp --repos ~/project --preset balanced --git --call-graph

# Full - All features (Claude Desktop, comprehensive analysis)
narsil-mcp --repos ~/project --preset full --git --call-graph

# Security-focused - Security and supply chain tools
narsil-mcp --repos ~/project --preset security-focused

Archivos de configuración

Configuración de usuario (~/.config/narsil-mcp/config.yaml):

version: "1.0"
preset: "balanced"

tools:
  # Disable slow tools
  overrides:
    neural_search:
      enabled: false
      reason: "Too slow for interactive use"

performance:
  max_tool_count: 50  # Limit total tools

Configuración de proyecto (.narsil.yaml en la raíz del repositorio):

version: "1.0"
preset: "security-focused"  # Override user preset

tools:
  categories:
    Security:
      enabled: true
    SupplyChain:
      enabled: true

Los perfiles de repositorio con nombre son útiles para espacios de trabajo con múltiples repositorios:

version: "1.0"
profiles:
  platform:
    repos:
      - ~/src/api
      - ~/src/web
    git: true
    call_graph: true
    persist: true
    preset: balanced
narsil-mcp --profile platform
narsil-mcp config profiles

Prioridad: Banderas CLI > Variables de entorno > Configuración de proyecto > Configuración de usuario > Valores por defecto

Variables de entorno

# Select repos/profile
export NARSIL_REPOS=~/src/api,~/src/web
export NARSIL_PROFILE=platform

# Apply preset
export NARSIL_PRESET=minimal

# Enable specific categories
export NARSIL_ENABLED_CATEGORIES=Repository,Symbols,Search

# Disable specific tools
export NARSIL_DISABLED_TOOLS=neural_search,generate_sbom

Comandos CLI

# View effective config
narsil-mcp config show

# Validate config file
narsil-mcp config validate ~/.config/narsil-mcp/config.yaml

# List tools by category
narsil-mcp tools list --category Search

# Search for tools
narsil-mcp tools search "git"

# Export config
narsil-mcp config export > my-config.yaml

# List named repository profiles
narsil-mcp config profiles

Más información:

Interfaz de visualización

Explora grafos de llamadas, importaciones, referencias a símbolos y flujo de control de forma interactiva en tu navegador.

# Build with embedded frontend
cargo build --release --features frontend

# Run with HTTP server
narsil-mcp --repos ~/project --http --call-graph
# Open http://localhost:3000

Cinco vistas de grafo:

VistaDescripción
Grafo de llamadasRelaciones de llamadas a funciones con control de profundidad y filtrado de dirección
Grafo de importacionesDependencias de importación a nivel de archivo en todo el código base
Grafo de símbolosTodas las referencias a un símbolo, con agrupación por archivos
HíbridoGrafo combinado de llamadas + importaciones con presupuesto dividido
Flujo de controlCFG real con bloques básicos, ramas y aristas de retroceso de bucles

Características:

  • Grafos interactivos con Cytoscape.js: arrastrar, zoom y doble clic para profundizar
  • Superposición de métricas de complejidad con código de colores (verde/amarillo/naranja/rojo)
  • Superposición de vulnerabilidades de seguridad resaltando fuentes y sumideros de contaminación
  • Seis algoritmos de disposición (dagre, dirigido por fuerza, primero en anchura, concéntrico, circular, cuadrícula)
  • Barra lateral de árbol de archivos con visor de código con resaltado de sintaxis
  • Estado basado en URL (enlaces compartibles, navegación adelante/atrás del navegador)
  • Soporte para modo oscuro
  • Panel de detalles del nodo con extractos de código y navegación al código fuente

Documentación completa: Consulta docs/frontend.md para configuración, endpoints de API y modo de desarrollo.

Búsqueda semántica neuronal

Encuentra código similar usando embeddings neuronales, incluso cuando los nombres de variables y la estructura difieren.

# Quick setup with wizard
narsil-mcp config init --neural

# Or manually with Voyage AI
export VOYAGE_API_KEY="your-key"
narsil-mcp --repos ~/project --neural --neural-model voyage-code-2

Soporta Voyage AI, OpenAI, endpoints personalizados y modelos ONNX locales.

Documentación completa: Consulta docs/neural-search.md para configuración, backends y casos de uso.

Inferencia de tipos

Inferencia de tipos integrada para Python, JavaScript y TypeScript, sin necesidad de mypy o tsc.

HerramientaDescripción
infer_typesObtiene los tipos inferidos para todas las variables en una función
check_type_errorsEncuentra posibles discrepancias de tipos
get_typed_taint_flowAnálisis de seguridad mejorado con información de tipos
def process(data):
    result = data.split(",")  # result: list[str]
    count = len(result)       # count: int
    return count * 2          # returns: int

Integración con Forgemax (Experimental)

Para flujos de trabajo agénticos a gran escala, narsil-mcp se puede usar a través de Forgemax — un gateway MCP en Modo Código que colapsa las 90 herramientas en solo 2 (search + execute), reduciendo la sobrecarga del esquema de herramientas de ~12,000 tokens a ~1,000.

# Install Forgemax
cargo install forgemax

# Run narsil-mcp through Forgemax (uses forge.toml in repo root)
forgemax

El archivo forge.toml incluido configura narsil-mcp con valores predeterminados sensatos:

[servers.narsil]
command = "narsil-mcp"
args = ["--repos", ".", "--git", "--call-graph", "--persist", "--watch"]
transport = "stdio"

[sandbox]
timeout_secs = 10
max_heap_mb = 64
max_concurrent = 8

El LLM escribe JavaScript que llama a través de objetos proxy tipados dentro de un aislado V8 en sandbox: las credenciales, rutas de archivo y estado interno nunca salen del host. Este enfoque es particularmente útil al trabajar con múltiples servidores MCP simultáneamente, ya que mantiene el contexto total de herramientas pequeño y predecible.

Configuración MCP

Agregue narsil-mcp a su asistente de IA creando un archivo de configuración. Estas son las configuraciones recomendadas:


Claude Code (.mcp.json en la raíz del proyecto - Recomendado):

Cree .mcp.json en el directorio de su proyecto para configuración por proyecto:

{
  "mcpServers": {
    "narsil-mcp": {
      "command": "narsil-mcp",
      "args": ["--repos", ".", "--git", "--call-graph"]
    }
  }
}

Luego inicie Claude Code en su proyecto:

cd /path/to/project
claude

Usar . para --repos indexa automáticamente el directorio actual. Claude ahora tiene acceso a 90 herramientas de inteligencia de código.

Consejo: Agregue --persist --index-path .claude/cache para un inicio más rápido en ejecuciones posteriores.

Para configuración global, edite ~/.claude/settings.json en su lugar. Consulte Integración con Claude Code para configuraciones avanzadas.


Cursor (.cursor/mcp.json):

{
  "mcpServers": {
    "narsil-mcp": {
      "command": "narsil-mcp",
      "args": ["--repos", ".", "--git", "--call-graph"]
    }
  }
}

VS Code + GitHub Copilot (.vscode/mcp.json):

{
  "servers": {
    "narsil-mcp": {
      "command": "narsil-mcp",
      "args": ["--repos", ".", "--git", "--call-graph"]
    }
  }
}

Nota para Copilot Enterprise: El soporte MCP requiere VS Code 1.102+ y debe ser habilitado por el administrador de su organización.


Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "narsil-mcp": {
      "command": "narsil-mcp",
      "args": ["--repos", "/path/to/your/projects", "--git"]
    }
  }
}

Zed (settings.json → Servidores de Contexto):

{
  "context_servers": {
    "narsil-mcp": {
      "command": "narsil-mcp",
      "args": ["--repos", ".", "--git"]
    }
  }
}

Nota para Zed: narsil-mcp se inicia inmediatamente e indexa en segundo plano, evitando tiempos de espera de inicialización.


Plugin de Claude Code

Para usuarios de Claude Code, proporcionamos un plugin con comandos de barra y una habilidad para un uso efectivo de las herramientas.

Instalar vía Marketplace (Recomendado):

# Add the narsil-mcp marketplace
/plugin marketplace add postrv/narsil-mcp

# Install the plugin
/plugin install narsil@narsil-mcp

O instalar directamente desde GitHub:

/plugin install github:postrv/narsil-mcp/narsil-plugin

Qué incluye:

ComponenteDescripción
/narsil:security-scanEjecutar auditorías de seguridad integrales
/narsil:exploreExplorar bases de código desconocidas
/narsil:analyze-functionAnálisis profundo de funciones específicas
/narsil:find-featureEncontrar dónde se implementan características
/narsil:supply-chainAnalizar seguridad de la cadena de suministro
HabilidadGuía a Claude sobre el uso efectivo de 90 herramientas
Configuración MCPInicia automáticamente narsil-mcp con valores predeterminados sensatos

Consulte narsil-plugin/README.md para documentación completa.

Integración con Ralph Automation

Ralph es un conjunto de automatización de Claude Code para desarrollo autónomo de código. Cuando narsil-mcp está disponible, Ralph obtiene capacidades mejoradas de inteligencia de código:

CaracterísticaSin narsil-mcpCon narsil-mcp
Escaneo de seguridadBásico (clippy)Detección de vulnerabilidades OWASP/CWE
Comprensión de códigoBasada en archivosGrafos de llamadas, referencias de símbolos
Análisis de arquitecturaManualCapas automáticas CCG L0/L1/L2
Análisis de dependenciascargo treeGrafos de importación, detección circular

Configuración:

# Install narsil-mcp (Ralph auto-detects it)
cargo install narsil-mcp

# Ralph's quality gates use these tools:
narsil-mcp scan_security --repo <name>
narsil-mcp check_type_errors --repo <name> --path src
narsil-mcp find_injection_vulnerabilities --repo <name>

Ralph se degrada con gracia cuando narsil-mcp no está disponible: todas las características principales de automatización funcionan sin él.

Documentación: Consulte Ralph README para detalles completos de integración.

Guías y Tutoriales

Consulte docs/playbooks para guías de uso práctico:

GuíaDescripción
Primeros pasosConfiguración rápida y primeras llamadas a herramientas
Comprender una base de códigoExplorar proyectos desconocidos
Corregir un errorDepurar con grafos de llamadas y análisis de contaminación
Auditoría de seguridadEncontrar vulnerabilidades con escaneo OWASP/CWE
Revisión de códigoRevisar cambios de manera efectiva

Cada guía muestra las cadenas de herramientas exactas que Claude usa para responder sus preguntas.

Uso en WebAssembly (Navegador)

narsil-mcp puede ejecutarse completamente en el navegador a través de WebAssembly, perfecto para IDEs basados en navegador, herramientas de revisión de código o plataformas educativas.

npm install @narsil-mcp/wasm
import { CodeIntelClient } from '@narsil-mcp/wasm';

const client = new CodeIntelClient();
await client.init();
client.indexFile('src/main.rs', rustSourceCode);
const symbols = client.findSymbols('Handler');

Documentación completa: Consulte docs/wasm.md para instrucciones de compilación, ejemplos de React y referencia de API.

Herramientas Disponibles (90)

Gestión de Repositorios y Archivos

HerramientaDescripción
list_reposListar todos los repositorios indexados con metadatos
get_project_structureObtener árbol de directorios con iconos de archivo y tamaños
get_fileObtener contenido de archivo con rango de líneas opcional
get_excerptExtraer código alrededor de líneas específicas con contexto
reindexActivar reindexación de repositorios
discover_reposAuto-descubrir repositorios en un directorio
validate_repoVerificar si la ruta es un repositorio válido
get_index_statusMostrar estadísticas de índice y características habilitadas

Búsqueda y Navegación de Símbolos

HerramientaDescripción
find_symbolsEncontrar estructuras, clases, funciones por tipo/patrón
get_symbol_definitionObtener fuente de símbolo con contexto circundante
find_referencesEncontrar todas las referencias a un símbolo
get_dependenciesAnalizar importaciones y dependientes
workspace_symbol_searchBúsqueda difusa de símbolos en el espacio de trabajo
find_symbol_usagesUso de símbolos entre archivos con importaciones
get_export_mapObtener símbolos exportados de un archivo/módulo

Búsqueda de Código

HerramientaDescripción
search_codeBúsqueda por palabra clave con clasificación de relevancia
semantic_searchBúsqueda semántica clasificada BM25
hybrid_searchBM25 + TF-IDF combinado con fusión de clasificación
search_chunksBúsqueda sobre fragmentos de código conscientes del AST
find_similar_codeEncontrar código similar a un fragmento (TF-IDF)
find_similar_to_symbolEncontrar código similar a un símbolo

Fragmentación Consciente del AST

HerramientaDescripción
get_chunksObtener fragmentos conscientes del AST para un archivo
get_chunk_statsEstadísticas sobre fragmentos de código
get_embedding_statsEstadísticas del índice de embeddings

Búsqueda Semántica Neural (requiere --neural)

HerramientaDescripción
neural_searchBúsqueda semántica usando embeddings neuronales (encuentra código similar incluso con nombres diferentes)
find_semantic_clonesEncontrar clones semánticos Tipo-3/4 de una función
get_neural_statsEstadísticas del índice de embeddings neuronales

Análisis de Grafo de Llamadas (requiere --call-graph)

HerramientaDescripción
get_call_graphObtener grafo de llamadas para repositorio/función
get_callersEncontrar funciones que llaman a una función
get_calleesEncontrar funciones llamadas por una función
find_call_pathEncontrar ruta entre dos funciones
get_complexityObtener complejidad ciclomática/cognitiva
get_function_hotspotsEncontrar funciones altamente conectadas

Análisis de Flujo de Control

HerramientaDescripción
get_control_flowObtener CFG mostrando bloques básicos y ramas
find_dead_codeEncontrar bloques de código inalcanzables

Análisis de Flujo de Datos

HerramientaDescripción
get_data_flowDefiniciones y usos de variables
get_reaching_definitionsQué asignaciones alcanzan cada punto
find_uninitializedVariables usadas antes de inicialización
find_dead_storesAsignaciones que nunca se leen

Inferencia de Tipos (Python/JavaScript/TypeScript)

HerramientaDescripción
infer_typesInferir tipos para variables en una función sin verificadores de tipos externos
check_type_errorsEncontrar posibles errores de tipo sin ejecutar mypy/tsc
get_typed_taint_flowAnálisis de contaminación mejorado combinando flujo de datos con inferencia de tipos

Grafo de Importación/Dependencia

HerramientaDescripción
get_import_graphConstruir y analizar grafo de importación
find_circular_importsDetectar dependencias circulares
get_incremental_statusÁrbol de Merkle y estadísticas de cambios

Análisis de Seguridad - Seguimiento de Contaminación

HerramientaDescripción
find_injection_vulnerabilitiesEncontrar inyección SQL, XSS, inyección de comandos, path traversal
trace_taintRastrear flujo de datos contaminados desde una fuente
get_taint_sourcesListar fuentes de contaminación (entrada de usuario, archivos, red)
get_security_summaryEvaluación integral de riesgos de seguridad

Análisis de Seguridad - Motor de Reglas

HerramientaDescripción
scan_securityEscanear con reglas de seguridad (OWASP, CWE, cripto, secretos)
check_owasp_top10Escanear vulnerabilidades OWASP Top 10 2021
check_cwe_top25Escanear debilidades CWE Top 25
explain_vulnerabilityObtener explicación detallada de vulnerabilidad
suggest_fixObtener sugerencias de remediación para hallazgos

Seguridad de la Cadena de Suministro

HerramientaDescripción
generate_sbomGenerar SBOM (CycloneDX/SPDX/JSON)
check_dependenciesVerificar vulnerabilidades conocidas (base de datos OSV)
check_licensesAnalizar licencias para problemas de cumplimiento
find_upgrade_pathEncontrar rutas de actualización seguras para dependencias vulnerables

Integración Git (requiere --git)

HerramientaDescripción
get_blameGit blame para archivo
get_file_historyHistorial de commits para archivo
get_recent_changesCommits recientes en repositorio
get_hotspotsArchivos con alta rotación y complejidad
get_contributorsContribuidores de repositorio/archivo
get_commit_diffDiff para commit específico
get_symbol_historyCommits que cambiaron un símbolo
get_branch_infoRama actual y estado
get_modified_filesCambios en el árbol de trabajo

Integración LSP (requiere --lsp)

HerramientaDescripción
get_hover_infoInformación de tipo y documentación
get_type_infoInformación precisa de tipo
go_to_definitionEncontrar ubicación de definición

Soporte para Repositorios Remotos (requiere --remote)

HerramientaDescripción
add_remote_repoClonar e indexar repositorio de GitHub
list_remote_filesListar archivos vía API de GitHub
get_remote_fileObtener archivo vía API de GitHub

Métricas

HerramientaDescripción
get_metricsEstadísticas de rendimiento y tiempos

SPARQL / Grafo de Conocimiento (requiere --graph)

HerramientaDescripción
sparql_queryEjecutar consulta SPARQL contra grafo de conocimiento RDF
list_sparql_templatesListar plantillas de consulta SPARQL disponibles
run_sparql_templateEjecutar plantilla SPARQL predefinida con parámetros

Grafo de Contexto de Código (CCG) (requiere --graph)

CCG proporciona representaciones estandarizadas y consumibles por IA de bases de código en capas escalonadas.

HerramientaDescripción
get_ccg_manifestManifiesto de Capa 0 (~1-2KB JSON-LD) - identidad del repo, conteos
export_ccg_manifestExportar manifiesto de Capa 0 a archivo
export_ccg_architectureArquitectura de Capa 1 (~10-50KB JSON-LD) - módulos, API
export_ccg_indexÍndice de símbolos de Capa 2 (~100-500KB N-Quads comprimido)
export_ccg_fullDetalle completo de Capa 3 (~1-20MB N-Quads comprimido)
export_ccgExportar todas las capas CCG como un paquete
query_ccgConsultar CCG usando SPARQL
get_ccg_aclGenerar control de acceso WebACL para capas CCG
get_ccg_access_infoObtener información de nivel de acceso CCG
import_ccgImportar capa CCG desde URL o archivo
import_ccg_from_registryImportar CCG desde el registro codecontextgraph.com

Reglas de Seguridad

narsil-mcp incluye reglas de seguridad integradas en rules/:

Conjuntos de Reglas Principales:

  • owasp-top10.yaml - Patrones de vulnerabilidad OWASP Top 10 2021
  • cwe-top25.yaml - Debilidades Más Peligrosas CWE Top 25
  • crypto.yaml - Problemas criptográficos (algoritmos débiles, claves hardcodeadas)
  • secrets.yaml - Detección de secretos (claves API, contraseñas, tokens) Reglas específicas por lenguaje:
  • rust.yaml - Patrones de seguridad en Rust (transmute inseguro, límites FFI, inyección de comandos, TOCTOU)
  • elixir.yaml - Patrones de Elixir/BEAM (agotamiento de átomos, binary_to_term, Code.eval, inyección SQL en Ecto)
  • go.yaml - Patrones de seguridad en Go (inyección SQL, TLS, inyección de comandos)
  • java.yaml - Vulnerabilidades en Java (XXE, deserialización, inyección LDAP)
  • csharp.yaml - Problemas de seguridad en C# (deserialización, XSS, path traversal)
  • kotlin.yaml - Patrones de Kotlin/Android (WebView, intents, secretos)
  • bash.yaml - Vulnerabilidades en scripts de shell (inyección de comandos, eval)

Infraestructura y configuración:

  • iac.yaml - Infraestructura como código (Terraform, CloudFormation, Kubernetes)
  • config.yaml - Seguridad en archivos de configuración (credenciales hardcodeadas, configuraciones inseguras)

Se pueden cargar reglas personalizadas con scan_security --ruleset /path/to/rules.yaml.

Arquitectura

+-----------------------------------------------------------------+
|                         MCP Server                               |
|  +-----------------------------------------------------------+  |
|  |                   JSON-RPC over stdio                      |  |
|  +-----------------------------------------------------------+  |
|                              |                                   |
|  +---------------------------v-------------------------------+  |
|  |                   Code Intel Engine                        |  |
|  |  +------------+ +------------+ +------------------------+  |  |
|  |  |  Symbol    | |   File     | |    Search Engine       |  |  |
|  |  |  Index     | |   Cache    | |  (Tantivy + TF-IDF)    |  |  |
|  |  | (DashMap)  | | (DashMap)  | +------------------------+  |  |
|  |  +------------+ +------------+                              |  |
|  |  +------------+ +------------+ +------------------------+  |  |
|  |  | Call Graph | |  Taint     | |   Security Rules       |  |  |
|  |  |  Analysis  | |  Tracker   | |   Engine               |  |  |
|  |  +------------+ +------------+ +------------------------+  |  |
|  +-----------------------------------------------------------+  |
|                              |                                   |
|  +---------------------------v-------------------------------+  |
|  |                Tree-sitter Parser                          |  |
|  |  +------+ +------+ +------+ +------+ +------+             |  |
|  |  | Rust | |Python| |  JS  | |  TS  | | Go   | ...         |  |
|  |  +------+ +------+ +------+ +------+ +------+             |  |
|  +-----------------------------------------------------------+  |
|                              |                                   |
|  +---------------------------v-------------------------------+  |
|  |                Repository Walker                           |  |
|  |           (ignore crate - respects .gitignore)             |  |
|  +-----------------------------------------------------------+  |
+-----------------------------------------------------------------+

Rendimiento

Benchmark realizado en Apple M1 (criterion.rs):

Rendimiento de análisis

LenguajeTamaño de entradaTiempoRendimiento
Rust (archivo grande)278 KB131 µs1.98 GiB/s
Rust (archivo mediano)27 KB13.5 µs1.89 GiB/s
Python~4 KB16.7 µs-
TypeScript~5 KB13.9 µs-
Mixto (5 archivos)~15 KB57 µs-

Latencia de búsqueda

OperaciónTamaño del corpusTiempo
Coincidencia exacta de símbolo1,000 símbolos483 ns
Coincidencia por prefijo de símbolo1,000 símbolos2.7 µs
Coincidencia difusa de símbolo1,000 símbolos16.5 µs
Texto completo BM251,000 docs80 µs
Similitud TF-IDF1,000 docs130 µs
Híbrida (BM25+TF-IDF)1,000 docs151 µs

Indexación de extremo a extremo

RepositorioArchivosSímbolosTiempoMemoria
narsil-mcp (este repo)531,733220 ms~50 MB
rust-analyzer2,847~50K2.1s89 MB
kernel linux78,000+~500K45s2.1 GB

Métricas clave:

  • Análisis Tree-sitter: rendimiento sostenido de ~2 GiB/s
  • Búsqueda de símbolos: <1µs para coincidencia exacta
  • Búsqueda de texto completo: <1ms para la mayoría de consultas
  • La búsqueda híbrida ejecuta BM25 + TF-IDF en paralelo mediante rayon

Desarrollo

# Run the full test suite
cargo test

# Run benchmarks (criterion.rs)
cargo bench

# Run with debug logging
RUST_LOG=debug cargo run -- --repos ./test-fixtures

# Format code
cargo fmt

# Lint
cargo clippy

# Test with MCP Inspector
npx @modelcontextprotocol/inspector ./target/release/narsil-mcp --repos ./path/to/repo

Solución de problemas

Errores de compilación de Tree-sitter

Si ves errores sobre compiladores de C faltantes o tree-sitter durante la compilación:

# macOS
xcode-select --install

# Ubuntu/Debian
sudo apt install build-essential

# For WASM builds
brew install emscripten  # macOS

Errores de la API de búsqueda neuronal

# Check your API key is set
echo $VOYAGE_API_KEY  # or $OPENAI_API_KEY

# Common issue: wrong key format
export VOYAGE_API_KEY="pa-..."  # Voyage keys start with "pa-"
export OPENAI_API_KEY="sk-..."  # OpenAI keys start with "sk-"

El índice no encuentra archivos

# Check .gitignore isn't excluding files
narsil-mcp --repos /path --verbose  # Shows skipped files

# Force reindex
narsil-mcp --repos /path --reindex

Problemas de memoria con repositorios grandes

# For very large repos (>50K files), increase stack size
RUST_MIN_STACK=8388608 narsil-mcp --repos /path/to/huge-repo

# Or index specific subdirectories
narsil-mcp --repos /path/to/repo/src --repos /path/to/repo/lib

La funcionalidad de grafos no funciona

Si pasas --graph y ves una advertencia como:

WARN: --graph flag was passed but the binary was built without the 'graph' feature.
SPARQL and CCG tools will not be available.

Esto significa que estás usando un binario que no fue compilado con la característica graph. Para solucionarlo:

# Build from source with the graph feature
cargo build --release --features graph

# Or with multiple features
cargo build --release --features graph,frontend

# Then run with --graph
./target/release/narsil-mcp --repos ~/project --graph

¿Por qué es una característica separada? La característica graph añade la base de datos RDF Oxigraph (~5 MB adicionales de tamaño de binario) que no es necesaria para la mayoría de los casos de uso. Se mantiene opcional para que el binario por defecto sea más pequeño.

Cómo verificar si el grafo está habilitado: Revisa los registros de inicio:

  • graph=true significa que la característica está compilada Y habilitada
  • graph=false significa que la característica no está compilada, O no se pasó --graph

Hoja de ruta

Completado

  • Extracción de símbolos multi-lenguaje (32 lenguajes)
  • Búsqueda de texto completo con Tantivy (ranking BM25)
  • Búsqueda híbrida (BM25 + TF-IDF con RRF)
  • Fragmentación de código consciente del AST
  • Integración de Git blame/historial
  • Análisis de grafo de llamadas con métricas de complejidad
  • Análisis de grafo de flujo de control (CFG)
  • Análisis de flujo de datos (DFG) con definiciones alcanzables
  • Detección de código muerto y almacenamiento muerto
  • Análisis de contaminación para vulnerabilidades de inyección
  • Motor de reglas de seguridad (OWASP, CWE, cripto, secretos)
  • Generación de SBOM (CycloneDX, SPDX)
  • Verificación de vulnerabilidades en dependencias (OSV)
  • Análisis de cumplimiento de licencias
  • Grafo de importaciones con detección de dependencias circulares
  • Resolución de símbolos entre lenguajes
  • Indexación incremental con árboles de Merkle
  • Persistencia del índice
  • Modo vigilancia para cambios en archivos
  • Integración con LSP
  • Soporte para repositorios remotos
  • Respuestas en streaming

Novedades

v1.6.x (Actual)

  • Fragmentación a prueba de fallos - Se corrigió el corte inseguro de cadenas a nivel de bytes en chunk_file() y extract_signature() que causaba que hybrid_search, search_chunks y get_chunk_stats fallaran al procesar archivos con caracteres UTF-8 multibyte (emoji, CJK, caracteres acentuados). Todo el corte de bytes ahora usa content.get() seguro con respaldo.
  • Operaciones de ordenación seguras ante NaN - Se corrigieron 5 ubicaciones en los módulos de búsqueda, embeddings, git, índice y extracción donde partial_cmp().unwrap() entraría en pánico con valores float NaN. Todas las ordenaciones ahora usan unwrap_or(Ordering::Equal).
  • Fragmentación con defensa en profundidad - Se añadieron envoltorios catch_unwind alrededor de todos los bucles chunk_file() de todo el repositorio para que un pánico en un archivo lo omita en lugar de bloquear todo el servidor MCP.
  • Revisión del frontend de visualización - SPA completa con enrutamiento HashRouter, barra lateral de árbol de archivos, visor de código con resaltado de sintaxis, panel de control y páginas de resumen por repositorio.
  • Rendimiento de la vista de grafos - El grafo de importaciones ahora usa datos del índice en caché en lugar de recorridos del sistema de archivos; el grafo de símbolos itera directamente sobre la caché de archivos en lugar de viajes de ida y vuelta a markdown; todas las vistas respetan max_nodes para terminación temprana.
  • Grafos de flujo de control reales - La vista de flujo ahora usa el constructor CFG real (cfg::analyze_function) con bloques básicos, condiciones de rama y bordes de retroceso de bucle adecuados en lugar del stub de bloque único.
  • División del presupuesto del grafo híbrido - La vista híbrida asigna un presupuesto de nodos 60/40 entre los grafos de llamadas e importaciones para obtener resultados equilibrados.
  • Corrección #14: dimensiones de embedding configurables - Se añadió el argumento CLI --neural-dimension y la búsqueda default_dimension_for_model() para que modelos como text-embedding-3-large usen las dimensiones correctas (3072) en lugar de las 1536 hardcodeadas.
  • Corrección #13: compilación del frontend Nix - Se añadió la derivación frontendDist en flake.nix usando buildNpmPackage para que nix profile install github:postrv/narsil-mcp#with-frontend funcione.
  • Reglas de seguridad para Rust - 18 nuevas reglas (RUST-004 a RUST-021) que cubren inyección de comandos, transmute, límites FFI, TOCTOU, ReDoS, static mut, SSRF y más.
  • Reglas de seguridad para Elixir - 18 nuevas reglas (EX-001 a EX-018) que cubren agotamiento de átomos, deserialización binary_to_term, inyección Code.eval, inyección SQL en Ecto, XSS en Phoenix, seguridad de distribución de Erlang.
  • Migración de serde_yaml a serde-saphyr - serde_yaml obsoleto reemplazado por una biblioteca YAML mantenida activamente y libre de pánicos.
  • Favicon personalizado - El frontend ahora usa el icono de marca narsil-mcp en lugar del logo por defecto de Vite.
  • Seguridad de dependencias - Actualizado time a 0.3.47 (RUSTSEC-2026-0009), bytes a 1.11.1 (RUSTSEC-2026-0007).
  • Conteo de pruebas aumentado de 1,611 a 1,763 (+152 pruebas).

v1.5.x

  • Resolución determinista del grafo de llamadas - La propagación de sugerencias de ámbito desambigua la resolución del llamado (por ejemplo, App::run() se resuelve correctamente a src/app/mod.rs::run).
  • 8 correcciones de análisis de grafos - Claves de nodo calificadas, filtrado de puntos calientes, manejo de expresiones CFG, análisis de rutas de importación.
  • Mejoras en Nix flake - Helper mkPkg DRY, eliminación de frameworks macOS innecesarios, estrategia de prueba --lib para compilaciones en sandbox.

v1.4.x

  • Grafo de conocimiento SPARQL / RDF - Consulta datos de inteligencia de código con SPARQL a través de Oxigraph.
  • Grafo de contexto de código (CCG) - 12 herramientas para representaciones de base de código estandarizadas y consumibles por IA con capas escalonadas (L0-L3).
  • Análisis de seguridad consciente de tipos - Seguimiento de contaminación mejorado con inferencia de tipos e implementaciones de traits.
  • CFG/DFG multi-lenguaje - Análisis de flujo de control y flujo de datos extendido a Go, Java, C#, Kotlin.
  • Escaneo de infraestructura como código - Nuevas reglas iac.yaml para Terraform, CloudFormation, Kubernetes.
  • Reglas de seguridad específicas por lenguaje - Nuevas reglas para Go, Java, C#, Kotlin, Bash.
  • 6 nuevos lenguajes - Erlang, Elm, Fortran, PowerShell, Nix, Groovy.
  • 90 herramientas en total - Subiendo de 79 con nuevas capacidades SPARQL, CCG y de análisis.

v1.2.x

  • Parámetro exclude_tests - 22 herramientas soportan el filtrado de archivos de prueba.
  • Paquete npm - Instalación mediante npm install -g narsil-mcp.

v1.1.x

  • Distribución multiplataforma - Instalación mediante Homebrew, Scoop, npm, Cargo o descarga directa.
  • Preajustes de herramientas configurables - Preajustes mínimo, equilibrado, completo y enfocado en seguridad.
  • Detección automática de editor - Valores predeterminados óptimos para Zed, VS Code, Claude Desktop.
  • Asistente de configuración interactivo - narsil-mcp config init para una configuración sencilla.
  • Soporte para 32 lenguajes - Se añadieron Dart, Julia, R, Perl, Zig y más.
  • Rendimiento mejorado - Inicio más rápido con indexación en segundo plano.

v1.0.x

  • Búsqueda semántica neuronal - Encuentra código similar usando embeddings de Voyage AI u OpenAI.
  • Inferencia de tipos - Infiere tipos en Python/JavaScript/TypeScript sin herramientas externas.
  • Análisis de contaminación multi-lenguaje - Escaneo de seguridad para PHP, Java, C#, Ruby, Kotlin.
  • Compilación WASM - Ejecución en navegador para playgrounds de código y herramientas educativas.
  • 147 reglas de seguridad incluidas - Detección OWASP, CWE, cripto, secretos, Rust, Elixir.
  • Configuraciones de IDE incluidas - Plantillas para Claude Desktop, Cursor, VS Code, Zed.

Licencia

Licenciado bajo cualquiera de:

a su elección.

Créditos

Construido con:

  • tree-sitter - Análisis incremental
  • tantivy - Búsqueda de texto completo
  • tokio - Tiempo de ejecución asíncrono
  • rayon - Paralelismo de datos
  • serde - Serialización