LayerMap
Servidor MCP local que proporciona a los agentes de codificación un grafo de llamadas resuelto por compilador para TypeScript/JavaScript, Go, Python y Java. Una sola llamada rastrea los llamadores de una función hasta 8 niveles hasta rutas y manejadores HTTP, además de los llamados y cada referencia. Solo lectura; se ejecuta en tu máquina.
Documentación
![]()
LayerMap
Inglés · 中文
Una sesión real de Claude Code en Miniflux, reproducida: una llamada al mapa encuentra cada endpoint, y luego el agente los confirma en el código fuente.
Un mapa en capas de tu código para agentes de programación. LayerMap ofrece a Claude Code, Codex, DeepSeek Harness y otros clientes MCP tres herramientas de solo lectura que responden, en una sola llamada, lo que un agente normalmente deduce con docenas de búsquedas:
- ¿Qué llama a esto, y qué afecta cambiarlo? Llamadores rastreados hasta 8 niveles, hasta las rutas HTTP, handlers, jobs y comandos desde los que se originan.
- ¿A qué llama? Callees hasta 8 niveles.
- ¿Qué hay aquí? Módulos, las declaraciones de cada archivo y cada uso de un símbolo.
Mapea TypeScript, JavaScript, Go, Python y Java con el compilador propio de cada lenguaje, de modo que las llamadas a través de interfaces, clases base, plantillas y decoradores se resuelven como las resuelve el compilador, incluidas las que la búsqueda de texto no encuentra.
Ejemplo
En Miniflux, una llamada a Storage.MarkFeedAsRead encuentra las cuatro
formas en que una solicitud llega a él, cada una con su ruta:
DECLARATION internal/storage/entry.go: Storage.MarkFeedAsRead m656-680 exported
← called by internal/api/feed.go: handler.markFeedAsRead m140-155 @149
← called by internal/fever/handler.go: handler.handleWriteFeeds m492-519 @508
← called by internal/googlereader/handler.go: handler.markAllAsReadHandler m1261-1338 @1311
← called by internal/ui/feed_mark_as_read.go: handler.markFeedAsRead m14-30 @24
[1] internal/api/feed.go: handler.markFeedAsRead m140-155
← used as value by internal/api/api.go: Serve f25-84 @61 "/feeds/{feedID}/mark-all-as-read"
[1] internal/googlereader/handler.go: handler.markAllAsReadHandler m1261-1338
← used as value by internal/googlereader/handler.go: Serve f44-64 @62 "/mark-all-as-read"
[1] internal/ui/feed_mark_as_read.go: handler.markFeedAsRead m14-30
← used as value by internal/ui/ui.go: Serve f18-180 @77 "/feed/{feedID}/mark-all-as-read"
… (the Fever API, then on down to main.go: main)
m y f marcan métodos y funciones con sus líneas; @ es la línea de la llamada, y la ruta entre comillas
es la ruta bajo la que está registrada.
Resultados
Preguntas de impacto ("¿qué endpoints HTTP afecta cambiar esto?") en proyectos públicos de Go, Python y Java, evaluadas a ciegas contra conjuntos de verdad verificados con la propia cadena de herramientas de cada lenguaje:
| Con LayerMap | Sin él | |
|---|---|---|
Endpoints encontrados, con un máximo de 15 solicitudes (gpt-5.5, 6 tareas × 3 ejecuciones) | 97.9% | 58.8% |
| Usado sin que se le pida por Claude Code / Codex (plugin instalado) | 6 de 6 / 6 de 6 | — |
| Endpoints encontrados, sin límite de solicitudes (Claude Code / Codex) | 99.3% / 98.0% | 99.0% / 98.6% |
| Costo, sin límite de solicitudes (Claude Code en USD / Codex en tokens de entrada) | −32% / −55% | |
| Tiempo, sin límite de solicitudes | +24% / +17% |
Con un presupuesto ajustado, el mapa encuentra mucho más del código afectado, con aproximadamente un 24% más de tokens. Sin límite, ambos agentes llegan igualmente. El mapa hace la ejecución más barata, y los agentes exploran más ampliamente, lo que lleva más tiempo. Son muestras pequeñas sobre tareas escritas por los autores de LayerMap. El informe tiene la configuración, las tareas publicadas y las limitaciones.
En qué se diferencia LayerMap
Otras herramientas dan a los agentes parte de esto. LayerMap combina la precisión del compilador con trazados de cadena completa en un único mapa local:
| Grafos de código Tree-sitter (codegraph, GitNexus, …) | Servidores de lenguaje e IDEs (la herramienta LSP de Claude Code, Serena, JetBrains) | Búsqueda por embeddings (Claude Context, Augment) | LayerMap | |
|---|---|---|---|---|
| Cómo se enlazan las llamadas | Coincidencia por nombres, imports y reglas de frameworks, a menudo con puntuaciones de confianza | La resolución propia del compilador | No se enlazan; se recupera código similar | Resuelto por el compilador o verificador de tipos de cada lenguaje |
| Llamadores rastreados hasta rutas y handlers | En varias herramientas, con profundidad variable | Un nivel por solicitud (JetBrains: 5 por defecto) | — | Hasta 8 niveles en una sola llamada |
| Mantenido como mapa | Sí, con vigilancia de archivos | No, se responde en vivo desde un servidor en ejecución | Un índice de fragmentos de código | Sí, actualizado en cada llamada |
| Se ejecuta en tu máquina | Sí; algunos envían telemetría anónima | Sí | Normalmente con embeddings en la nube | Sí, y no envía nada |
Otra herramienta encaja mejor si necesitas:
- más lenguajes, ya que los grafos de tree-sitter cubren 30 o más;
- Windows;
- renombrar y refactorizar, desde servidores de lenguaje;
- búsqueda por significado, desde búsqueda por embeddings;
- búsqueda en muchos repositorios, con Sourcegraph.
Instalación
Claude Code
/plugin marketplace add coffeecoproject/layermap
/plugin install layermap@layermap
Codex
codex plugin marketplace add coffeecoproject/layermap
codex plugin add layermap@layermap
DeepSeek Harness
npx layermap setup dsh
Esto añade LayerMap a cada perfil de dsh. Cada sesión mapea el proyecto en el que se inició dsh, y
npx layermap remove dsh lo deshace.
En cada agente, inicia una nueva sesión en un repositorio Git y pregunta como de costumbre. LayerMap le dice al agente
cuándo el mapa ayuda. En el primer lanzamiento, npx descarga el paquete fijado layermap desde npm.
Claude Code pregunta una vez antes de que cada herramienta de mapa se ejecute en un proyecto. Elige "no preguntar de nuevo", o ejecuta
npx layermap allow claude para permitir las herramientas de solo lectura del plugin en todas partes.
Sin plugins: ejecuta npx layermap setup claude o npx layermap setup codex. La configuración hace tres
cosas:
- registra el servidor;
- permite que sus herramientas de solo lectura se ejecuten sin aviso;
- añade una frase marcada al archivo de instrucciones del agente.
Usa --scope project para configurarlo para todo un equipo, y npx layermap remove … para deshacerlo. Para cualquier
otro cliente MCP, ejecuta npx -y layermap mcp como servidor stdio en el repositorio.
Requisitos:
- Node.js 22.22 o posterior.
- macOS o Linux (x64 o arm64).
- Un repositorio Git.
- Para proyectos Java, un JDK 21 o posterior.
Cómo funciona
La primera llamada en un repositorio construye su mapa: segundos para un proyecto pequeño, unos minutos para uno grande. Las llamadas posteriores reanalizan solo lo que cambió, de modo que el mapa siempre coincide con el árbol de trabajo.
Los mapas permanecen en tu caché de usuario (~/Library/Caches/layermap, ~/.cache/layermap o
LAYERMAP_CACHE), nunca en el repositorio. LayerMap se ejecuta completamente en tu máquina y no envía
nada a ningún lugar (privacidad,
seguridad).
| Herramienta | Uso |
|---|---|
project_explore_map | Un directorio, un archivo, o los llamadores y callees de una declaración (direction INCOMING o OUTGOING, depth hasta 8). |
project_search_map | Encontrar declaraciones por palabras en sus nombres, rutas o documentación. |
project_find_references | Cada uso de una declaración, compilado desde el código fuente actual. |
Lo mismo desde la línea de comandos:
npx layermap explore src/api/users.ts --name createUser --direction INCOMING --depth 8
npx layermap search "invoice total"
npx layermap refs src/billing/tax.ts calculateTax
Preguntas frecuentes
¿Cuánto tarda el primer mapa? En un Mac reciente:
- Miniflux (400 archivos Go): unos 3 s.
- El servidor de Polar (1,900 archivos Python): alrededor de un minuto.
- Conductor (1,500 archivos Java y 1,300 archivos TypeScript): menos de dos minutos.
¿Qué no puede ver? Llamadas que el compilador no puede resolver estáticamente: inyección de dependencias, enrutamiento desconocido de frameworks, reflexión y nombres calculados. Las herramientas indican dónde se detiene un trazado, y una relación faltante no prueba su ausencia.
¿Windows? Todavía no.
¿Cómo lo elimino?
- Claude Code:
/plugin uninstall layermap@layermap. - Codex:
codex plugin remove layermap@layermap. - Luego elimina el directorio de caché.
Desarrollo
Necesitas pnpm, Go 1.24 y un JDK 21+. Una cadena de herramientas faltante deja su lenguaje sin analizar.
Ejecuta pnpm install. En la primera instalación, pnpm pregunta qué dependencias pueden ejecutar scripts de compilación; permite
solo esbuild, ya que el paquete SQLite incluye binarios precompilados:
pnpm approve-builds esbuild '!@photostructure/sqlite'
Luego ejecuta pnpm test, pnpm typecheck o pnpm lint.
pnpm package construye el paquete npm.