token-savior
⚔ token-savior
Deja de alimentar a tu IA con bases de código completas. Dale un bisturí en su lugar.
Un servidor MCP que indexa tu base de código estructuralmente y expone herramientas de consulta quirúrgicas, para que tu agente de IA lea 200 caracteres en lugar de 200 archivos.
find_symbol("send_message") → 67 chars (was: 41M chars of source)
get_change_impact("LLMClient") → 16K chars (154 direct + 492 transitive deps)
get_function_source("compile") → 4.5K chars (exact source, no grep, no cat)
analyze_config() → finds duplicates, secrets, orphan keysMedido en 782 sesiones reales: 99% de reducción de tokens.
Por qué existe esto
Cada sesión de programación con IA comienza de la misma manera: el agente usa cat o grep, lee una docena de archivos para encontrar una función y luego infla su contexto tratando de entender qué más podría romperse. Al final, la mitad de tu presupuesto de tokens se ha ido antes de la primera edición.
token-savior reemplaza ese patrón por completo. Construye un índice estructural una vez, lo mantiene sincronizado con git automáticamente y responde "dónde está X", "qué llama a X" y "qué se rompe si cambio X" en tiempo de sub-milisegundos, con respuestas ajustadas a la respuesta, no a la base de código.
Números
Ahorro de tokens en sesiones reales
Proyecto | Sesiones | Consultas | Caracteres usados | Caracteres (ingenuos) | Ahorro |
project-alpha | 35 | 360 | 4,801,108 | 639,560,872 | 99% |
project-beta | 26 | 189 | 766,508 | 20,936,204 | 96% |
project-gamma | 30 | 232 | 410,816 | 3,679,868 | 89% |
TOTAL | 92 | 782 | 5,981,476 | 664,229,092 | 99% |
"Caracteres (ingenuos)" = tamaño total de fuente de todos los archivos que el agente habría leído con
cat/grep. Estos ahorros son agnósticos al modelo: el índice reduce la presión sobre la ventana de contexto independientemente del proveedor.
Tiempo de respuesta de consulta (sub-milisegundo en 1.1M de líneas)
Consulta | RMLPlus | FastAPI | Django | CPython |
| 0.01ms | 0.01ms | 0.03ms | 0.08ms |
| 0.00ms | 0.00ms | 0.00ms | 0.01ms |
| 0.02ms | 0.00ms | 2.81ms | 0.45ms |
| 0.01ms | 0.02ms | 0.03ms | 0.10ms |
Rendimiento de construcción del índice
Proyecto | Archivos | Líneas | Tiempo de índice | Memoria |
Proyecto pequeño | 36 | 7,762 | 0.9s | 2.4 MB |
FastAPI | 2,556 | 332,160 | 5.7s | 55 MB |
Django | 3,714 | 707,493 | 36.2s | 126 MB |
CPython | 2,464 | 1,115,334 | 55.9s | 197 MB |
Con la caché persistente, los reinicios posteriores omiten la construcción completa. CPython pasa de 56s → menos de 1s con acierto de caché.
Qué cubre
Lenguaje / Formato | Archivos | Extractos |
Python |
| Funciones, clases, métodos, importaciones, grafo de dependencias |
TypeScript / JS |
| Funciones, funciones flecha, clases, interfaces, alias de tipo |
Go |
| Funciones, métodos (receptor), structs, interfaces, alias de tipo |
Rust |
| Funciones, structs, enums, traits, bloques impl, macro_rules |
C# |
| Clases, interfaces, structs, enums, métodos, comentarios de documentación XML |
Markdown / Texto |
| Secciones mediante detección de encabezados |
JSON |
| Estructura de claves anidadas hasta profundidad 4, referencias cruzadas |
YAML |
| Jerarquía de claves anidadas, marcadores de matriz, límite de profundidad 4 |
TOML |
| Tablas, pares clave-valor, estructura anidada |
INI / Propiedades |
| Secciones, pares clave-valor |
Entorno |
| Nombres de variables, valores (con enmascaramiento de secretos) |
XML / Plist / SVG |
| Jerarquía de elementos, atributos |
HCL / Terraform |
| Bloques, recursos anidados, pares clave-valor |
Conf |
| Pares clave-valor, estructura de bloques |
Dockerfile |
| Instrucciones, compilaciones multietapa, FROM/RUN/COPY/ENV |
Todo lo demás |
| Recuento de líneas (reserva genérica) |
51 herramientas
Navegación
Herramienta | Qué hace |
| Dónde se define un símbolo: archivo, línea, tipo, vista previa de 20 líneas |
| Fuente completa de una función o método |
| Fuente completa de una clase |
| Todas las funciones en un archivo o proyecto |
| Todas las clases con métodos y bases |
| Todas las importaciones con módulo, nombres, línea |
| Resumen de la estructura del archivo o proyecto de un vistazo |
| Archivos indexados con filtro glob opcional |
| Recuento de archivos, paquetes, clases/funciones principales |
| Búsqueda por expresión regular en todos los archivos indexados |
| Forzar reindexación completa (raramente necesaria) |
Contexto y descubrimiento
Herramienta | Qué hace |
| Todo en uno: fuente del símbolo + dependencias + llamadores en una sola llamada (ahorra 3 llamadas) |
| Encuentra todos los archivos relacionados con una palabra clave de característica, luego rastrea las importaciones transitivamente |
| Detecta rutas de API y páginas (Next.js App Router, Express, pages/api) |
| Detecta componentes de React (funciones que devuelven JSX) en archivos |
| Encuentra todas las referencias a una variable de entorno en toda la base de código |
Análisis de impacto
Herramienta | Qué hace |
| Qué llama/usa un símbolo |
| Qué llama/usa un símbolo |
| Dependientes directos + transitivos en una sola llamada |
| Ruta de dependencia más corta entre dos símbolos (BFS) |
| Archivos importados por un archivo dado |
| Archivos que importan desde un archivo dado |
Git y diffs
Herramienta | Qué hace |
| Rama, adelantado/atrasado, preparado, no preparado, no rastreado |
| Archivos cambiados como resúmenes a nivel de símbolo, no diffs |
| Cambios a nivel de símbolo desde cualquier referencia de git |
| Vista de revisión compacta: símbolos en lugar de diffs textuales |
| Resumen de commit compacto a partir de archivos cambiados |
Edición segura
Herramienta | Qué hace |
| Reemplaza la fuente de un símbolo sin tocar el resto del archivo |
| Inserta contenido antes o después de un símbolo |
| Crea una instantánea de un conjunto de archivos antes de editar |
| Restaura desde un punto de control |
| Diff entre punto de control y actual a nivel de símbolo |
| Lista los puntos de control disponibles |
Prueba y ejecución
Herramienta | Qué hace |
| Infiere archivos pytest probablemente afectados a partir de símbolos cambiados |
| Ejecuta solo las pruebas afectadas: resumen compacto, no registros sin procesar |
| Edita + ejecuta pruebas afectadas en una sola llamada |
| Edita + valida + reversión automática en caso de fallo |
| Detecta comandos de prueba/lint/compilación/ejecución desde archivos del proyecto |
| Ejecuta una acción descubierta con salida limitada |
Análisis de configuración
Herramienta | Qué hace |
| Escanea archivos de configuración en busca de duplicados, secretos, errores tipográficos y claves huérfanas |
Ejecuta tres comprobaciones (activables individualmente mediante el parámetro checks):
Duplicados — Misma clave definida dos veces en el mismo archivo, además de detección de errores tipográficos basada en Levenshtein (ej.
db_hsotvsdb_host)Secretos — Patrones de expresiones regulares para formatos de secretos conocidos (claves API, tokens, claves privadas) más análisis de entropía de Shannon para cadenas de alta entropía
Huérfanos — Referencias cruzadas de claves de configuración contra el uso real del código. Detecta claves que tu código nunca lee y variables de entorno que tu código espera pero que no están configuradas. Entiende
os.environ,process.env,os.Getenv,std::env::vary más.
Formatos soportados: .yaml, .yml, .toml, .ini, .cfg, .properties, .env, .xml, .plist, .hcl, .tf, .conf, .json
Calidad de código
Herramienta | Qué hace |
| Encuentra funciones/clases con cero llamadores (excluye puntos de entrada, pruebas, rutas decoradas) |
| Clasifica funciones por puntuación de complejidad (líneas, ramas, anidamiento, recuento de parámetros) |
| Compara firmas de funciones actuales contra una referencia de git: marca parámetros eliminados/renombrados, valores predeterminados cambiados |
Docker
Herramienta | Qué hace |
| Audita Dockerfiles: imágenes base, puertos expuestos, referencia cruzada ENV/ARG, advertencias de etiqueta |
Multi-proyecto
Herramienta | Qué hace |
| Referencia cruzada de importaciones entre proyectos para encontrar dependencias compartidas |
Estadísticas
Herramienta | Qué hace |
| Ahorro acumulado de tokens por proyecto a través de sesiones |
vs LSP
LSP responde "¿dónde está definido esto?" — token-savior responde "¿qué se rompe si lo cambio?"
LSP son consultas puntuales: un símbolo, un archivo, una posición. Puede encontrar dónde está definido LLMClient y quién lo referencia directamente. Pregunta "¿qué se rompe transitivamente si refactorizo LLMClient?" y LSP no tiene nada: la IA tendría que encadenar docenas de llamadas de búsqueda de referencias de forma recursiva, leyendo archivos en cada paso.
get_change_impact("TestCase") en CPython encuentra 154 dependientes directos y 492 dependientes transitivos en 0.45ms, devolviendo 16K caracteres en lugar de leer 41M. Y a diferencia de LSP, no requiere servidores de lenguaje: un binario cubre Python + TS/JS + Go + Rust + C# + archivos de configuración + Dockerfiles de forma inmediata.
Instalación
git clone https://github.com/Mibayy/token-savior
cd token-savior
python3 -m venv ~/.local/token-savior-venv
~/.local/token-savior-venv/bin/pip install -e ".[mcp]"Configuración
Claude Code / Cursor / Windsurf / Cline
Agrega a .mcp.json en la raíz de tu proyecto:
{
"mcpServers": {
"token-savior": {
"command": "/path/to/.local/token-savior-venv/bin/token-savior",
"env": {
"WORKSPACE_ROOTS": "/path/to/project1,/path/to/project2",
"TOKEN_SAVIOR_CLIENT": "claude-code"
}
}
}
}Hermes Agent
Agrega a ~/.hermes/config.yaml:
mcp_servers:
token-savior:
command: ~/.local/token-savior-venv/bin/token-savior
env:
WORKSPACE_ROOTS: /path/to/project1,/path/to/project2
TOKEN_SAVIOR_CLIENT: hermes
timeout: 120
connect_timeout: 30TOKEN_SAVIOR_CLIENT es opcional, pero permite que el panel en vivo atribuya los ahorros por cliente.
Haz que el agente realmente lo use
Los asistentes de IA usan grep y cat por defecto incluso cuando hay mejores herramientas disponibles. Las instrucciones suaves son racionalizadas. Agrega esto a tu CLAUDE.md o equivalente:
## Codebase Navigation — MANDATORY
You MUST use token-savior MCP tools FIRST.
- ALWAYS start with: find_symbol, get_function_source, get_class_source,
search_codebase, get_dependencies, get_dependents, get_change_impact
- Only fall back to Read/Grep when token-savior tools genuinely don't cover it
- If you catch yourself reaching for grep to find code, STOPEspacios de trabajo multi-proyecto
Una instancia de servidor cubre cada proyecto en la máquina:
WORKSPACE_ROOTS=/root/myapp,/root/mybot,/root/docs token-saviorCada raíz obtiene su propio índice aislado, cargado de forma perezosa en el primer uso. list_projects muestra todas las raíces registradas. switch_project establece la activa.
Cómo se mantiene sincronizado
El servidor verifica git diff y git status antes de cada consulta (~1-2ms). Los archivos cambiados se vuelven a analizar de forma incremental. No se requiere reindex manual después de ediciones, cambios de rama o pulls.
El índice se guarda en `.codebase-index-cache.json
Latest Blog Posts
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/Mibayy/token-savior'
If you have feedback or need assistance with the MCP directory API, please join our Discord server