token-savior
⚔ token-savior
Hör auf, deiner KI ganze Codebasen zu füttern. Gib ihr stattdessen ein Skalpell.
Ein MCP-Server, der deine Codebasis strukturell indiziert und chirurgische Abfragewerkzeuge bereitstellt – damit dein KI-Agent 200 Zeichen statt 200 Dateien liest.
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 keysGemessen über 782 echte Sitzungen: 99 % Token-Reduktion.
Warum es existiert
Jede KI-Codierungssitzung beginnt gleich: Der Agent greift zu cat oder grep, liest ein Dutzend Dateien, um eine Funktion zu finden, und bläht dann seinen Kontext auf, um zu verstehen, was sonst noch kaputtgehen könnte. Am Ende ist die Hälfte deines Token-Budgets weg, bevor die erste Änderung vorgenommen wurde.
token-savior ersetzt dieses Muster vollständig. Es erstellt einmalig einen strukturellen Index, hält ihn automatisch mit Git synchron und beantwortet Fragen wie „Wo ist X“, „Was ruft X auf“ und „Was geht kaputt, wenn ich X ändere“ in Sub-Millisekunden – mit Antworten, die auf die Antwort zugeschnitten sind, nicht auf die Codebasis.
Zahlen
Token-Einsparungen über echte Sitzungen hinweg
Projekt | Sitzungen | Abfragen | Verwendete Zeichen | Zeichen (naiv) | Einsparung |
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 % |
GESAMT | 92 | 782 | 5.981.476 | 664.229.092 | 99 % |
„Zeichen (naiv)“ = Gesamtgröße aller Quelldateien, die der Agent mit
cat/grepgelesen hätte. Diese Einsparungen sind modellunabhängig – der Index reduziert den Druck auf das Kontextfenster unabhängig vom Anbieter.
Abfrage-Reaktionszeit (Sub-Millisekunde bei 1,1 Mio. Zeilen)
Abfrage | RMLPlus | FastAPI | Django | CPython |
| 0,01 ms | 0,01 ms | 0,03 ms | 0,08 ms |
| 0,00 ms | 0,00 ms | 0,00 ms | 0,01 ms |
| 0,02 ms | 0,00 ms | 2,81 ms | 0,45 ms |
| 0,01 ms | 0,02 ms | 0,03 ms | 0,10 ms |
Performance beim Index-Aufbau
Projekt | Dateien | Zeilen | Index-Zeit | Speicher |
Kleines Projekt | 36 | 7.762 | 0,9 s | 2,4 MB |
FastAPI | 2.556 | 332.160 | 5,7 s | 55 MB |
Django | 3.714 | 707.493 | 36,2 s | 126 MB |
CPython | 2.464 | 1.115.334 | 55,9 s | 197 MB |
Mit dem persistenten Cache überspringen nachfolgende Neustarts den vollständigen Aufbau. CPython geht von 56 s → unter 1 s bei einem Cache-Treffer.
Was es abdeckt
Sprache / Format | Dateien | Extrakte |
Python |
| Funktionen, Klassen, Methoden, Importe, Abhängigkeitsgraph |
TypeScript / JS |
| Funktionen, Pfeilfunktionen, Klassen, Interfaces, Typ-Aliase |
Go |
| Funktionen, Methoden (Receiver), Structs, Interfaces, Typ-Aliase |
Rust |
| Funktionen, Structs, Enums, Traits, impl-Blöcke, macro_rules |
C# |
| Klassen, Interfaces, Structs, Enums, Methoden, XML-Dokumentationskommentare |
Markdown / Text |
| Abschnitte durch Überschriftenerkennung |
JSON |
| Verschachtelte Schlüsselstruktur bis Tiefe 4, |
YAML |
| Verschachtelte Schlüsselhierarchie, Array-Marker, Tiefenbegrenzung 4 |
TOML |
| Tabellen, Schlüssel-Wert-Paare, verschachtelte Struktur |
INI / Properties |
| Abschnitte, Schlüssel-Wert-Paare |
Environment |
| Variablennamen, Werte (mit Maskierung von Geheimnissen) |
XML / Plist / SVG |
| Elementhierarchie, Attribute |
HCL / Terraform |
| Blöcke, verschachtelte Ressourcen, Schlüssel-Wert-Paare |
Conf |
| Schlüssel-Wert-Paare, Blockstruktur |
Dockerfile |
| Anweisungen, Multi-Stage-Builds, FROM/RUN/COPY/ENV |
Alles andere |
| Zeilenzahlen (generischer Fallback) |
51 Werkzeuge
Navigation
Werkzeug | Was es tut |
| Wo ein Symbol definiert ist – Datei, Zeile, Typ, 20-Zeilen-Vorschau |
| Vollständiger Quellcode einer Funktion oder Methode |
| Vollständiger Quellcode einer Klasse |
| Alle Funktionen in einer Datei oder einem Projekt |
| Alle Klassen mit Methoden und Basisklassen |
| Alle Importe mit Modul, Namen, Zeile |
| Datei- oder Projektstruktur auf einen Blick |
| Indizierte Dateien mit optionalem Glob-Filter |
| Dateianzahl, Pakete, Top-Klassen/Funktionen |
| Regex-Suche über alle indizierten Dateien |
| Erzwingt eine vollständige Neuindizierung (selten benötigt) |
Kontext & Entdeckung
Werkzeug | Was es tut |
| Alles in einem: Symbolquelle + Abhängigkeiten + Aufrufer in einem Aufruf (spart 3 Aufrufe) |
| Findet alle Dateien, die mit einem Feature-Schlüsselwort zusammenhängen, und verfolgt dann Importe transitiv |
| Erkennt API-Routen und Seiten (Next.js App Router, Express, pages/api) |
| Erkennt React-Komponenten (Funktionen, die JSX zurückgeben) in |
| Findet alle Referenzen auf eine Umgebungsvariable in der gesamten Codebasis |
Wirkungsanalyse
Werkzeug | Was es tut |
| Was ein Symbol aufruft/verwendet |
| Was ein Symbol aufruft/verwendet |
| Direkte + transitive Abhängige in einem Aufruf |
| Kürzester Abhängigkeitspfad zwischen zwei Symbolen (BFS) |
| Dateien, die von einer bestimmten Datei importiert werden |
| Dateien, die aus einer bestimmten Datei importieren |
Git & Diffs
Werkzeug | Was es tut |
| Branch, voraus/zurück, gestaged, nicht gestaged, nicht verfolgt |
| Geänderte Dateien als Zusammenfassungen auf Symbolebene, keine Diffs |
| Änderungen auf Symbolebene seit einem beliebigen Git-Ref |
| Kompakte Review-Ansicht – Symbole statt textueller Diffs |
| Kompakte Commit-Zusammenfassung aus geänderten Dateien |
Sicheres Bearbeiten
Werkzeug | Was es tut |
| Ersetzt die Quelle eines Symbols, ohne den Rest der Datei zu berühren |
| Fügt Inhalt vor oder nach einem Symbol ein |
| Erstellt einen Snapshot einer Reihe von Dateien vor der Bearbeitung |
| Wiederherstellung aus einem Checkpoint |
| Diff zwischen Checkpoint und aktuellem Stand auf Symbolebene |
| Listet verfügbare Checkpoints auf |
Testen & Ausführen
Werkzeug | Was es tut |
| Leitet wahrscheinlich betroffene pytest-Dateien aus geänderten Symbolen ab |
| Führt nur betroffene Tests aus – kompakte Zusammenfassung, keine Rohprotokolle |
| Bearbeiten + Ausführen betroffener Tests in einem Aufruf |
| Bearbeiten + Validieren + automatisches Rollback bei Fehler |
| Erkennt Test-/Lint-/Build-/Run-Befehle aus Projektdateien |
| Führt eine erkannte Aktion mit begrenzter Ausgabe aus |
Konfigurationsanalyse
Werkzeug | Was es tut |
| Scannt Konfigurationsdateien auf Duplikate, Geheimnisse, Tippfehler und verwaiste Schlüssel |
Führt drei Prüfungen durch (individuell umschaltbar über den checks-Parameter):
Duplikate – Derselbe Schlüssel wird zweimal in derselben Datei definiert, plus Levenshtein-basierte Tippfehlererkennung (z. B.
db_hsotvsdb_host)Geheimnisse – Regex-Muster für bekannte Geheimnisformate (API-Schlüssel, Token, private Schlüssel) plus Shannon-Entropie-Analyse für Strings mit hoher Entropie
Waisen – Querverweise von Konfigurationsschlüsseln mit der tatsächlichen Code-Verwendung. Erkennt Schlüssel, die dein Code nie liest, und Umgebungsvariablen, die dein Code erwartet, die aber nicht gesetzt sind. Versteht
os.environ,process.env,os.Getenv,std::env::varund mehr.
Unterstützte Formate: .yaml, .yml, .toml, .ini, .cfg, .properties, .env, .xml, .plist, .hcl, .tf, .conf, .json
Codequalität
Werkzeug | Was es tut |
| Findet Funktionen/Klassen ohne Aufrufer (schließt Einstiegspunkte, Tests, dekorierte Routen aus) |
| Bewertet Funktionen nach Komplexitätsscore (Zeilen, Verzweigungen, Verschachtelung, Parameteranzahl) |
| Vergleicht aktuelle Funktionssignaturen mit einem Git-Ref – markiert entfernte/umbenannte Parameter, geänderte Standardwerte |
Docker
Werkzeug | Was es tut |
| Prüft Dockerfiles: Basis-Images, exponierte Ports, ENV/ARG-Querverweise, |
Multi-Projekt
Werkzeug | Was es tut |
| Querverweise von Importen über Projekte hinweg, um gemeinsame Abhängigkeiten zu finden |
Statistiken
Werkzeug | Was es tut |
| Kumulative Token-Einsparungen pro Projekt über Sitzungen hinweg |
vs LSP
LSP beantwortet „Wo ist dies definiert?“ – token-savior beantwortet „Was geht kaputt, wenn ich es ändere?“
LSP sind Punktabfragen: ein Symbol, eine Datei, eine Position. Es kann finden, wo LLMClient definiert ist und wer direkt darauf verweist. Frage „Was geht transitiv kaputt, wenn ich LLMClient refaktoriere?“ und LSP hat nichts – die KI müsste Dutzende von Referenz-Suchaufrufen rekursiv verketten und bei jedem Schritt Dateien lesen.
get_change_impact("TestCase") auf CPython findet 154 direkte Abhängige und 492 transitive Abhängige in 0,45 ms und gibt 16 KB Zeichen zurück, anstatt 41 MB zu lesen. Und im Gegensatz zu LSP erfordert es null Sprachserver – eine Binärdatei deckt Python + TS/JS + Go + Rust + C# + Konfigurationsdateien + Dockerfiles sofort ab.
Installieren
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]"Konfigurieren
Claude Code / Cursor / Windsurf / Cline
Füge dies zu .mcp.json in deinem Projektstammverzeichnis hinzu:
{
"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
Füge dies zu ~/.hermes/config.yaml hinzu:
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 ist optional, ermöglicht es dem Live-Dashboard jedoch, Einsparungen nach Client zuzuordnen.
Den Agenten dazu bringen, es tatsächlich zu nutzen
KI-Assistenten verwenden standardmäßig grep und cat, selbst wenn bessere Werkzeuge verfügbar sind. Weiche Anweisungen werden rationalisiert. Füge dies zu deiner CLAUDE.md oder Äquivalent hinzu:
GXP
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