Agent
Claude Code, Codex, Cursor-style workflows, or another MCP client.
How Satori gives MCP coding agents repo-aware search, exact symbol reads, call-graph context, and freshness checks without hiding state or failures.
Agent requests route through a fixed six-tool registry. The MCP runtime enforces freshness/fingerprint gates and orchestrates search. Core sync provides deterministic file-state truth for indexing.
Claude Code, Codex, Cursor-style workflows, or another MCP client.
Exposes six agent-safe operations instead of a wide internal API.
Coordinates indexing, search, sync, freshness, and lifecycle state.
Vector store, call-graph sidecar, local snapshots, and Merkle state.
@zokizuan/satori-coreOwns indexing, sync, chunking, metadata, and retrieval primitives.
@zokizuan/satori-mcpOwns the MCP server, six-tool contract, lifecycle state, and agent envelopes.
@zokizuan/satori-cliInstalls managed client config, copies first-party skills, and exposes shell tool calls.
Satori exposes six MCP tools. The point is not a large API; it is a small set of operations that return state, warnings, and next steps when context is unsafe. The MCP server does not expose source-code write tools.
list_codebasesLists tracked roots grouped by ready, indexing, failed, or requires-reindex state.
Refuses to flatten state into a single success/failure bit.
search_codebaseFinds relevant code with scoped semantic search, grouping, freshness checks, and navigation hints.
Refuses stale or unsafe context when index gates require attention.
file_outlineMaps symbols in a file and resolves exact labels or IDs through sidecar metadata.
Refuses to guess when exact symbol resolution is ambiguous.
call_graphTraverses callers and callees from a search-provided symbolRef.
Refuses to fake graph data when the sidecar is absent or not ready.
read_fileReads files, line ranges, or exact symbols with optional annotated outline status.
Refuses unlimited context dumps; large reads are bounded.
manage_indexCreates, syncs, reindexes, checks status, clears, and handles force-reindex recovery paths.
Refuses destructive ambiguity: clear is explicit and backend timeouts preserve local state.
Satori treats index state as part of the contract. Agents do not just receive search results; they also receive status, freshness, and recovery guidance when the index is unsafe or incomplete.
{ embeddingProvider, embeddingModel, embeddingDimension,
vectorStoreProvider, schemaVersion
}
Prevents silent reads from incompatible embedding models/dimensions or schema-mode mismatches.
The behavior below is shown directly because it is the core trust model: search is freshness-aware, sync is incremental, and cloud lifecycle operations are verified before local state is discarded.
Freshness gate -> operator parse -> dense/BM25 retrieval -> deterministic filters -> rerank policy -> grouping -> stable tie-breaks.
Dense vector hits and BM25 sparse keyword hits merge through reciprocal rank fusion, so concepts and exact tokens both count.
TypeScript, JavaScript, and Python have the strongest graph and outline support. Other languages use AST chunking or text fallback with explicit unsupported states.
Uses .gitignore, .satoriignore, and
configured patterns. Signature checks converge even without
watcher events.
Stat-first scan, hash-on-change, deterministic Merkle root, and vector updates only for added, removed, or modified files.
Cloud and local providers use different result budgets. Rerank is capability-driven, docs scope skips rerank, and failures degrade with warnings.
Search can start from a package path inside an indexed parent. Satori resolves the effective root while keeping navigation fallbacks executable.
Remote collections repair local ready state only with valid completion marker proof, matching codebase path, and matching runtime fingerprint.
Clear and force-reindex mutate local snapshot/Merkle state only after remote deletion is verified or the collection is already absent.
This is the intended architecture flow, not a simulated chat transcript.
search_codebase returns ranked code groups with freshness state and navigation hints.
file_outline and read_file.open_symbol resolve the implementation span without guessing.
call_graph provides nearby dependency context when the sidecar is ready.
Requires-reindex, missing sidecar, noisy results, and backend timeout states return recovery guidance.
Satori does not edit code. It gives the coding agent enough repo evidence to avoid blind changes.