Euthynos
OfficialUn agente que lee un archivo puede ver de qué depende ese archivo. No puede ver qué depende del archivo. Las aristas entrantes son invisibles desde dentro, por lo que los agentes compensan leyendo más archivos, lo que consume contexto y aún así se pierden llamantes. Euthynos responde a esas preguntas desde el AST, el grafo de importaciones y el historial de git — cero llamadas LLM, sin red en la ruta de consulta.
Proporciona evidencia. No certifica que un cambio sea seguro.
Instalación
Instalar globalmente. El -g es importante: es lo que coloca el comando euthynos en tu PATH, que es como tu cliente MCP inicia el servidor.
npm install -g euthynosVerifica que se instaló antes de conectar nada:
euthynos --helpLuego regístralo con tu agente:
claude mcp add euthynos -- euthynos mcpO en cualquier configuración de cliente MCP:
{ "mcpServers": { "euthynos": { "command": "euthynos", "args": ["mcp"] } } }Requiere Node.js 18+. Funciona en Windows, macOS y Linux.
Casi siempre es una instalación local en lugar de global. npm install euthynos sin -g coloca el binario en ./node_modules/.bin/, que no está en tu PATH, por lo que tu cliente MCP no tiene nada que ejecutar. Confírmalo con:
npm ls -g euthynos --depth=0Si eso imprime (vacío), reinstala con -g. Para limpiar la copia local accidental, elimina la carpeta node_modules y package.json que creó en el directorio desde el que ejecutaste el comando.
Si está instalado globalmente y aún no se encuentra, tu directorio global de binarios de npm no está en PATH — npm config get prefix muestra dónde está. O apunta tu cliente directamente al binario:
{ "mcpServers": { "euthynos": { "command": "C:\\full\\path\\to\\euthynos.cmd", "args": ["mcp"] } } }Related MCP server: codemap
Las 23 herramientas, por la pregunta que responden
grupo | herramientas | lo que obtienes |
¿Quién depende de esto? |
| Llamantes transitivos con profundidad y confianza, aristas de dependencia a nivel de módulo, y la ruta de llamada más corta entre dos funciones. |
¿Qué alcanza este cambio? |
| Radio de explosión antes de editar; después de editar, qué símbolos se movieron, qué límites de módulo cruzó el diff, y lo que el diff no cubrió. |
Lee exactamente esto |
| Fragmentos de código exactos en lugar de archivos completos. |
Orientarse en un repositorio desconocido |
| Mapa de módulos, métricas estructurales y dónde están los límites débiles. |
Antes de escribirlo de nuevo |
| Detección de casi duplicados antes de añadir una tercera copia, y descubrimiento de pruebas etiquetadas por ruta. |
Cada respuesta declara su propio alcance. Una respuesta negativa dice qué no se examinó en lugar de implicar que no existe nada.
Medido, no afirmado
M2 es un benchmark preregistrado: las tareas, las reglas de validez y las claves de respuesta fueron congeladas por commit antes de que se ejecutara cualquier sesión, el recall fue calificado manualmente a ciegas solo a partir de las respuestas finales, y las sesiones inválidas se publican junto con las válidas. Mismo modelo, mismo repositorio, mismos prompts — un brazo con Euthynos montado, otro sin.
En las tres tareas que alcanzaron la medición completa:
tarea | brazo | tokens nuevos | recall vs clave congelada | falsos positivos |
quién llama a esto | línea base | 70,878 | 12 / 12 | 1 |
Euthynos | 49,476 | 12 / 12 | 0 | |
esta lógica está duplicada | línea base | 33,429 | 15 / 15 | 0 |
Euthynos | 29,120 | 15 / 15 | 0 | |
qué alcanza este cambio | línea base | 56,481 | 15 / 15 | 0 |
Euthynos | 39,242 | 15 / 15 | 0 |
El recall fue idéntico y perfecto en ambos brazos — 42 de 42 elementos requeridos cada uno — mientras que el brazo de Euthynos usó entre un 13 y un 31% menos de tokens nuevos. El agente llegó a la misma respuesta habiendo leído menos. Una trampa preregistrada diseñada para inducir un llamante incorrecto plausible no se activó en ninguno de los brazos.
Lo que esto no dice. 21 de 46 sesiones intentadas fueron válidas; un muro de límite de tasa externo se llevó 14 de ellas. Las tareas de edición guiada y orientación nunca se midieron y no se implica ningún número para ellas. Un arnés, un repositorio. Esto es trabajo ahorrado, no calidad de respuesta mejorada — y preferimos publicar esa frase que un número más grande.
No se publican cifras de latencia. Dos mediciones internamente válidas discreparon y el experimento controlado que las habría resuelto no pudo completarse, por lo que no publicamos ninguna y en su lugar enviamos el arnés — docs/PROVENANCE.md tiene el razonamiento.
Local primero
No se sube nada desde la ruta de consulta. El servidor MCP no realiza ninguna llamada de red ni ninguna llamada LLM. Lee tu árbol de trabajo, incluyendo las ediciones no confirmadas.
Solo lectura. Nunca modifica tu código fuente.
Ruta en caja de arena. El servidor fija sus raíces servibles al inicio; se rechaza una ruta fuera de ellas. No se siguen enlaces simbólicos.
Un directorio en disco:
.euthynos/en la raíz del repositorio, que contiene el índice direccionado por contenido y un registro de telemetría local solo de metadatos. Se crea con su propio.gitignore, y eliminarlo solo cuesta un nuevo escaneo. Opta por no participar conEUTHYNOS_NO_INDEX=1yEUTHYNOS_NO_TELEMETRY=1.Una excepción, opt-in y solo CLI:
euthynos scan --aienvía fragmentos candidatos duplicados a la API de Anthropic para confirmar hallazgos. RequiereANTHROPIC_API_KEY, está desactivado por defecto y no es parte del servidor MCP.
Escala — lo que afirmaremos y lo que no
Euthynos está validado hasta aproximadamente 10,000 archivos. Por debajo de aproximadamente 1,500 es cómodo. Por encima de 10,000 no está validado y no se debe asumir que funcione.
~10,000 archivos es el límite superior del sobre validado, no una garantía.
La memoria es la restricción vinculante en el extremo superior, no la latencia. El corpus analizado se mantiene en memoria: un repositorio de 10,000 archivos toma el RSS del proceso desde aproximadamente 0.6 GB hasta ~1.1 GB durante un bucle de edición. Extrapolando linealmente — una estimación, no una medición — es probable que un heap de Node por defecto se agote en algún lugar alrededor de 25,000–35,000 archivos. Por lo tanto, el límite de descubrimiento de 60,000 archivos en el código no es un límite alcanzable.
No se publican cifras precisas de latencia en V1. Tenemos dos mediciones internamente consistentes que discrepan en los tamaños más grandes, y el experimento controlado que habría resuelto cuál confiar no pudo completarse. En lugar de publicar un número que no podemos respaldar, no publicamos ninguno y enviamos el arnés para que puedas medir tu propia máquina:
node scripts/measurement/gen-scale-repos.mjs
node --expose-gc scripts/measurement/measure-latency.mjs --reps=20El razonamiento está en docs/PROVENANCE.md; el sobre y lo que afecta el rendimiento están en docs/SUPPORTED-SCALE.md.
Otros límites que vale la pena conocer antes de instalar:
El envío es síncrono. Una llamada de herramienta a la vez, y el primer escaneo en frío bloquea la cola durante toda su duración — segundos, que crecen con el tamaño del repositorio. No hay tiempo de espera por llamada; tu cliente MCP debe proporcionar uno que tolere esa primera llamada.
Las lecturas del índice no son gratuitas ni invariantes en escala.
find_symbol,read_functionyfind_referencescuestan tiempo real y crecen con el tamaño del repositorio. Una versión anterior de este archivo afirmaba que se mantenían por debajo de un milisegundo en todas las escalas; esa cifra era una ruta de error de rechazo de argumento, no una lectura. Ver docs/BENCHMARK-INTEGRITY-AUDIT.md.El bucle de edición cuesta varias veces una llamada en caliente, porque los archivos modificados deben ser reanalizados. Cualquier cifra que no diga cuál de los dos midió no te está diciendo mucho.
Los tiempos de construcción en frío dependen de la máquina y del entorno de almacenamiento. Construir el índice está limitado por E/S.
Todas las mediciones hasta la fecha han sido en TypeScript. Otros lenguajes diferirán.
Idiomas
16 analizados, mediante tres estrategias. TypeScript, JavaScript y SFC de Vue a través de la API del compilador de TypeScript; Python, Go, Java, Ruby, Rust, PHP, C, C++, C#, Dart, Kotlin y Swift a través de tree-sitter WASM; COBOL a través de un analizador de líneas determinista.
Cada gramática se ejecuta como WASM puro — sin enlaces nativos, sin precompilaciones específicas de plataforma, sin cadena de herramientas de compilación. La calidad de la resolución del grafo de llamadas es más fuerte para TypeScript.
Lo que Euthynos no afirma
Es un analizador estático. Ve importaciones, declaraciones y aristas de llamada. No ve reflexión, envío dinámico, generación de código en tiempo de ejecución, nombres de símbolos construidos con cadenas, importaciones dinámicas o cableado de frameworks — y nunca finge lo contrario.
Estas frases están prohibidas en su salida y la prohibición se aplica mediante pruebas:
is safe·safe to …·no other consumers·all references·unused·fully tested·no impact· cualquier afirmación de prueba matemática de seguridad
Que callers_of devuelva nada significa que el grafo estático no encontró llamantes, nunca que nada llama a esto. Los nombres ambiguos entre módulos producen ningún borde en lugar de una suposición, por lo que las respuestas son una cota inferior y la cantidad de llamadas no resueltas se muestra junto al resultado.
Verifica las afirmaciones tú mismo
Nada aquí te pide que aceptes un número sin verificar:
qué | dónde |
El benchmark de tokens/recuperación, preregistrado antes de ejecutarse | |
Sus resultados, publicados sin modificar | |
Dónde nuestros propios números publicados eran incorrectos, y cómo | |
Mide la latencia en tu propia máquina |
|
Qué es y qué no es verificable aquí — incluyendo por qué las cifras de latencia se difieren |
Ese último no es un accidente de divulgación. Dos de nuestros entornos de benchmark estaban cronometrando errores de validación de argumentos como si fueran mediciones, y una afirmación publicada era incorrecta por tres órdenes de magnitud. La auditoría documenta qué se rompió, qué fue invalidado, qué se volvió a medir y qué sigue sin respaldo.
Lo que no se publica: las claves de respuesta de M2 y el registro completo de sesiones. Cualquier afirmación sobre esos elementos no está verificada desde este repositorio, y preferimos decirlo que insinuar lo contrario.
Euthynos para Equipos
◈ Euthynos para Equipos
El mismo motor, situado entre un pull request y main.
Aún no está disponible de forma general. No hay una instancia pública a la que puedas acceder hoy. Esta sección describe software que existe y funciona — para que puedas decidir ahora si merece tu atención — no un producto que puedas comprar en este momento. Únete a la lista de acceso anticipado en euthynos.dev →
Conecta un repositorio a través de una GitHub App. Cada push y pull request se escanea del lado del servidor con el motor de este repositorio, y el resultado llega donde realmente se toma la decisión.
◈ Política de fusión, escrita como reglas
Cinco tipos de reglas, cada una con warn o block:
regla | umbral |
| 0–100 |
| 0–100 |
| 0–100 |
| 1–20, entero |
| exacto |
Los límites se aplican del lado del servidor. El formulario es una comodidad; no es el validador.
◈ El grafo de dependencias, por escaneo
Cada escaneo emite un artefacto de grafo interactivo: módulos, bordes de importación y los ciclos que no se pueden cortar limpiamente.
Puntuado en cuatro ejes más duplicación:
depth · seams · locality · leverage
Cada uno se informa como una banda — Strong, Stable, Drifting, At Risk — porque la banda es la parte que significa algo.
◈ Una ejecución de verificación en cada PR
El veredicto se registra contra la regla que lo produjo, por lo que "por qué fui bloqueado" tiene una respuesta que no es una sensación.
Los estados de alerta se mantienen entre escaneos: new · ongoing · resolved ·
archived-until-worse · regressed.
◈ Evidencia que un auditor puede leer
Exporta un rango de fechas y obtén el conjunto de reglas tal como estaba, cada veredicto de fusión en la ventana, cada anulación con su actor y razón escrita, y la cobertura de propiedad por módulo.
No se necesita cuenta para leerlo.
◈ Riesgo de conocimiento, desde el historial de git. Porcentaje de propiedad y factor de autobús por módulo — para que "el módulo más débil también es entendido por una sola persona" sea algo que el panel te dice, en lugar de algo que descubres cuando esa persona se va.
Aquí tampoco hay llamadas LLM. El mismo diff produce el mismo veredicto, cada vez. No se muestrea nada, por lo que no hay nada que alucinar ni nada en lo que inyectar un prompt. Envía la misma rama dos veces, obtén la misma revisión dos veces.
La CLI en este repositorio sigue siendo gratuita, local y con licencia Apache-2.0 — eso es un compromiso, no una prueba. No se comunica con la plataforma, y la plataforma nunca toca tu máquina.
¿Lo quieres cuando esté disponible?
→ Únete a la lista de acceso anticipado en euthynos.dev
La CLI local sigue siendo gratuita para siempre · sin tarjeta de crédito · no se necesita cuenta para usar nada en este repositorio
CLI
El servidor MCP es la superficie principal, pero la CLI funciona de forma independiente:
euthynos scan [path] architecture scan — six metrics, module table
euthynos graph [path] build the call graph; --impact/--callers/--path
euthynos dashboard [path] self-contained interactive HTML, zero runtime deps
euthynos index [path] inspect or rebuild the local index
euthynos mcp start the MCP stdio servereuthynos --help imprime el conjunto completo de banderas y la marca de compilación.
Documentación
docs/ARCHITECTURE.md · docs/SUPPORTED-SCALE.md · docs/SECURITY.md · docs/CONTRIBUTING.md · docs/TRADEMARK.md · docs/PROVENANCE.md · CHANGELOG.md
Seguridad
Reporta vulnerabilidades de forma privada a través de GitHub Security Advisories, no en una incidencia pública. Alcance y expectativas: docs/SECURITY.md.
Licencia
Licencia Apache 2.0 — consulta LICENSE y NOTICE.
Copyright © 2026 Tonil Kumar.
La licencia cubre el código. No cubre el nombre: "Euthynos" se reivindica como una marca comercial no registrada de Tonil Kumar — no se ha solicitado ni concedido ningún registro. Consulta docs/TRADEMARK.md.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityAmaintenanceProvides local codebase intelligence as an MCP server, enabling AI agents to query dependencies, assess change impact, and produce tamper-evident change evidence packets.508Apache 2.0
- Alicense-qualityAmaintenanceMCP server for local-first code intelligence, providing structural code graph, semantic search, and impact analysis to AI agents.1MIT
- Alicense-qualityAmaintenanceLocal-first MCP server that scans a repository once and answers architecture questions from an evidence-backed graph, enabling dependency analysis, impact analysis, and codebase exploration without re-reading the source tree.MIT
- Alicense-qualityAmaintenanceLocal repository intelligence MCP server that builds a reusable graph of code structure for AI coding agents, providing 34 network-free tools for understanding, searching, and analyzing repositories without data leaving the machine.59MIT
Related MCP Connectors
Hosted MCP server for structured code review passes on human- and AI-written code. Free tier.
An MCP server that gives your AI access to the source code and docs of all public github repos
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/euthynos-org/euthynos'
If you have feedback or need assistance with the MCP directory API, please join our Discord server