Signet
OFFICIAL SERVERLocal, shared memory for coding agents, with recall, a knowledge graph and cross-agent messaging over MCP
Symbol-level code navigation, structural editing and cross-session memory for coding agents
By Mibay (individual) Python Local · stdio Developer toolsKnowledge and memory
66 popularity score ★ 1.2k ↓ 1.4k/mo
Opens the app, which asks before it adds the server.
claude mcp add token-savior -- uvx --from token-savior-recall token-savior{
"mcpServers": {
"token-savior": {
"command": "uvx",
"args": [
"--from",
"token-savior-recall",
"token-savior"
]
}
}
}{
"mcpServers": {
"token-savior": {
"command": "uvx",
"args": [
"--from",
"token-savior-recall",
"token-savior"
]
}
}
}{
"servers": {
"token-savior": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"token-savior-recall",
"token-savior"
]
}
}
}[mcp_servers.token-savior]
command = "uvx"
args = ["--from", "token-savior-recall", "token-savior"]gemini mcp add --scope user token-savior uvx -- --from token-savior-recall token-saviorWORKSPACE_ROOTS |
Optional: Comma-separated project folders to index; defaults to the current directory. |
|---|---|
TOKEN_SAVIOR_PROFILE |
Optional: Tool set to advertise: full (default, 72 tools), optimized (15), auto, compact-only. |
TOKEN_SAVIOR_CLIENT |
Optional: Client label such as claude-code; auto-detected when unset. |
TS_MEMORY_DISABLE |
Optional: Set to 1 to turn off the memory engine and its tools. |
TS_CODE_MODE_DISABLE |
Optional: Set to 1 to drop the ts_execute Node sandbox tool. |
TS_BASH_REWRITE |
Optional: Set to 1 to enable the PreToolUse shell command rewriter (with ts init). |
TS_BASH_COMPACT |
Optional: Set to 1 to enable the PostToolUse output compactors (with ts init). |
TOKEN_SAVIOR_MAX_FILES |
Optional: Maximum files indexed per project, default 10000. |
Token Savior indexes a local codebase by symbol (functions, classes, imports and the call graph) so a coding agent can ask where something is defined, fetch one function's source, or see who depends on it, in place of reading whole files and grepping. It also edits by symbol (replace a function, insert next to one, move it to another file and fix imports), runs impacted pytest files or detected project actions, and audits a project for dead code, import cycles, breaking API changes against a git ref, config secrets and Dockerfiles.
A second half is a persistent memory store in local SQLite with full-text search: the agent saves decisions, conventions and reasoning traces, and a compact summary is offered again at the start of the next session. Optional Claude Code hooks, enabled with TS_BASH_COMPACT and TS_BASH_REWRITE plus the `ts init` command, rewrite noisy shell commands before they run and keep long command output in a searchable store.
The tool surface depends on TOKEN_SAVIOR_PROFILE. With no profile set the server starts in `full` and advertises 72 tools at version 4.23.2 (counted in tool_schemas.py and server.py at that tag), not the 68 the README's profile table gives; `optimized`, which the README recommends, advertises 15. Filtered-out tools still run if called by name. The headline benchmark figures in the README are, by its own account, not independently reproducible because the harness repository is not public.
| Runtime | Python 3.11+ |
|---|
Python 3.11 or later; the uvx command needs uv, or install with pip install "token-savior-recall[mcp]" and point the client at the venv's token-savior program. Hybrid vector search needs the memory-vector extra. The ts_execute tool needs Node.js on PATH (TS_CODE_MODE_NODE). Memory auto-extraction needs an Anthropic API key (TS_API_KEY). The Bash hooks need Claude Code, Cursor, Gemini, Codex or OpenClaw and a run of `ts init`.
The README's `uvx token-savior-recall` does not start the server: the package has no program of that name (pyproject.toml at v4.23.2 lists ts, token-savior, token-savior-dashboard, token-savior-bench), so use `uvx --from token-savior-recall token-savior`. By default indexing stops at 10,000 files per project and skips files over 500,000 bytes (TOKEN_SAVIOR_MAX_FILES, TOKEN_SAVIOR_MAX_FILE_SIZE); read_lines returns up to 400 lines and run_project_action times out after 120 s. The PostToolUse compactors do not shrink the current turn. On Claude Code 2.1.28x and later the README says tools go unused unless alwaysLoad is set.
Suits developers running a local coding agent, mainly Claude Code, on medium or large repositories who want fewer file reads and memory that survives sessions. It runs entirely on your machine with no account. It is not a hosted service and is not official to any vendor. If you already use serena for symbol navigation, the README suggests running Token Savior with the compact-only profile for the shell hooks alone; if you only want memory or only navigation, the profile and TS_MEMORY_DISABLE switches trim it down. Pick something else if you cannot install Python 3.11.
list_projectsswitch_projectset_project_rootreindexget_project_summarylist_filesget_structure_summaryread_linesget_function_sourceget_class_sourceget_functionsget_classesget_importsfind_symbolget_dependenciesget_dependentsget_change_impactget_full_contextget_call_chainget_edit_contextget_file_dependenciesget_file_dependentssearch_codebasesearch_in_symbolsget_feature_filesreplace_symbol_sourceedit_lines_in_symbolinsert_near_symbolmove_symboladd_field_to_modelcheckpointget_diagnosticsget_git_statusget_changed_symbolsbuild_commit_summarydetect_breaking_changesfind_impacted_test_filesrun_impacted_testsdiscover_project_actionsrun_project_actionget_routesget_env_usageanalyze_configfind_dead_codefind_hotspotsfind_semantic_duplicatesfind_import_cyclesanalyze_dockerget_db_schemaget_entry_pointsmemory_savememory_searchmemory_getmemory_deletememory_indexmemory_admincorpus_buildcorpus_queryreasoning_savereasoning_search