Gives AI agents a shared local knowledge graph to store, search, and hand off project context and decisions across sessions.
Also known as wandercom/kindex
- Stars
- 50
- Tools
- —
- Downloads, 30 days
- 3,674
- Latest version
- 0.37.0
- Last commit
- Nov 13, 2026
- License
- —
What is Kindex MCP?
Kindex is an MCP server. Gives AI agents a shared local knowledge graph to store, search, and hand off project context and decisions across sessions.
Summary generated from the project's README
About Kindex MCP server
Agents that work in separate memory silos can share one local SQLite knowledge graph through Kindex, installed either as a free MCP plugin or as a standalone CLI. It stores decisions, constraints and context as typed, weighted nodes with provenance and decay, then injects only as much of that as your token budget allows. Claude Code, Codex, Gemini CLI, Google Antigravity, OpenCode and Cursor all read and write the same graph, which gives continuity across restarts, handoffs between vendors and live coordination when several agents run at once. Each person gets their own graph under a home directory while every repository carries a git-tracked `.kin` store.
Setup is local. You install with pip, uv tool, uvx or from source, run `kin init`, and then either add the plugin or use a `kin setup-*-mcp` command to write each client's config; a bare registration is just `kin-mcp` over stdio. Installing the `llm` extra brings Anthropic-powered extraction for `kin learn` and `kin ask`, and the `vectors` extra adds sqlite-vec semantic search. Without a provider configured, data stays on the machine.
The MCP surface exposes more than 50 tools, including `search`, `add`, `context`, `link`, `supersede`, `stale_check`, `graph_merge`, `dream`, `task_claim`, `lock_acquire` and session tag tools. A background pass called Dream merges strong duplicates and stages weaker links for review, and the repository-bound `kindex-lite` launcher restricts an agent to a single repo's graph.
What you can do with it
- 1Carry decisions between coding sessionsHave a coding agent record a durable architectural decision to the graph, then let a different agent recall it at the start of the next session.
- 2Coordinate parallel agents with locksRun several agents on one project and use claim and lock tools so they do not collide on the same task.
- 3Search the graph before addingAsk the agent to check existing knowledge for a constraint before it writes a near-duplicate node.
- 4Keep an agent to one repositoryPoint a client at a single repo's graph so it cannot fall back to global memory.
- 5Merge and review graph duplicatesTrigger the consolidation pass to merge strong duplicates and queue weaker links for human review.
Written from the project's README. Every use case is checked against a quote from it.
How to install Kindex MCP
Formats verified 10 Nov 2026Install Kindex MCP in Claude Code
$ claude mcp add kindex -- uvx kindexInstall Kindex MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"kindex": {
"command": "uvx",
"args": [
"kindex"
]
}
}
}Install Kindex MCP in VS Code
.vscode/mcp.json
{
"servers": {
"kindex": {
"type": "stdio",
"command": "uvx",
"args": [
"kindex"
]
}
}
}Install Kindex MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"kindex": {
"command": "uvx",
"args": [
"kindex"
]
}
}
}Install Kindex MCP in Codex
~/.codex/config.toml
[mcp_servers.kindex] command = "uvx" args = ["kindex"]
Install Kindex MCP in Gemini CLI
~/.gemini/settings.json
{
"mcpServers": {
"kindex": {
"command": "uvx",
"args": [
"kindex"
]
}
}
}Automated checks
Ran Nov 13, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachablePass
- Open source license (OSI)No licenseFinding
- Commit or release in the last yearPass
- Package name not close to a popular packagePass
- Remote endpoint uses HTTPSNot checked
- Destructive tools are labelledNot checked
- No hidden instructions to the modelPass
- No critical advisory in the package or its dependenciesPass
README
View on GitHubKindex
Every agent is smart inside its own silo. Kindex lets them work together.
Kindex does one thing. It knows what you know.
Claude Code, Codex, Gemini CLI, Google Antigravity, OpenCode, Cursor, and other MCP-capable agents each remember for themselves, and none of them can read the others. Kindex is the local knowledge graph they all read and write: continuity across sessions and restarts, handoffs between vendors, shared decisions and constraints, and live coordination while several of them work at once. Available as a free MCP plugin or standalone CLI.
Memory plugins capture what happened. Kindex captures what it means and how it connects. Most memory tools are session archives with search. Kindex is a weighted knowledge graph with typed nodes, provenance, and decay, that surfaces constraints and decisions and manages exactly how much context to inject based on your available token budget.
Kindex is the index for an individual and a codebase: your own graph, and the repository's git-tracked .kin/. Kinbase is the company product above it, in development: engineering direction, architecture, standards, ownership, and history, held by named authorities and composed into every coding session. Same engine, same protocol, physically separate stores.
Docs: kindex.tools is the canonical public site, served by the companion Fly static app. This repo also publishes its docs/ directory at wandercom.github.io/kindex. Human setup lives in docs/human-guide.md; agent operating rules live in docs/mcp-agent-guide.md.
Install
Development preview: Claude function hooks and signet-eval coexistence
adds repo-local durable tasks, secret minimization at Kindex-owned boundaries,
and separately selectable modern/legacy adapters. The default remains compatible
legacy hooks. The modern adapter is a Claude Code mod: it installs on Claude Code
2.1.287 or newer when that host's claude plugin validate accepts it (last
verified on 2.1.288). This is not a promise that all Claude logs can be redacted
or a published 1.0 release.
Pick whichever installer you already use. They all install the same kin and kin-mcp binaries.
# pip
pip install 'kindex[mcp]'
# uv (single binary, no virtualenv)
uv tool install 'kindex[mcp]'
# uvx (no install — runs from cache, useful for one-off MCP invocation)
uvx --from 'kindex[mcp]' kin-mcp --help
# from source
git clone https://github.com/wandercom/kindex && cd kindex && make install
Upgrading to v0.36.0
[!WARNING] Before upgrading, stop every Kindex daemon, MCP server, and older CLI process. A v0.35.x process does not reject schema v12 and can write non-canonical session paths after migration.
Dream is Kindex's background knowledge-consolidation pass: it finds related
nodes, safely merges strong duplicates, and stages weaker links for review.
The first v0.36.0 process to open an older graph creates a transaction-safe
pre-migration snapshot under
$XDG_STATE_HOME/kindex/snapshots/<db>-<hash>/migrations/ (defaulting below
~/.local/state/kindex/snapshots/) before atomically migrating schema v11 to
v12. The owner-private snapshot passes SQLite integrity and source-version
checks, and a partial file is deleted if creation or validation fails.
Concurrent v0.36+ processes serialize this step through a dedicated
rollback-journal SQLite lock and recheck the schema after waiting. Migration
recovery points are retained outside the rotating ten-file
automated-merge snapshot pool. Older duplicate active session tags become paused
history, one active tag per normalized project and name is enforced, and Dream
suggestions carry an explicit title-or-node-ID identity contract and title
ambiguity is refused. No node or edge rows are deleted; legacy
domain-co-membership edges remain available as stored history but no longer
participate in semantic traversal or health metrics. kin status exposes the
durably recorded recovery path; normal stores also record it in kin changelog.
Rolling back the schema migration
Do not open the migrated database with v0.35.x: that version has no forward-schema guard and can write old, non-canonical session identity. Instead:
- While v0.36 is still installed, run
kin statusand record theRecoverypath. It names the latest validated migration attempt; older attempts remain in the samemigrations/directory. - Stop every Kindex process again.
- Move the live database's
-waland-shmsidecars aside. - Copy the recorded snapshot over the live database.
- Only then install or run v0.35.x and verify the graph.
This differs from recovering a bad automated merge,
which does not change package versions. Graph-health consumers must also
recalibrate: existing node/edge/orphan/component outputs now describe the
semantic graph, while explicit stored counts expose retained lifecycle and
legacy rows. Machine-readable stats identify this contract as metrics_schema: 2.
Then initialize the graph:
kin init
Extras — combine in one install ('kindex[mcp,llm,reminders]') or use 'kindex[all]':
| Extra | Adds |
|---|---|
mcp |
kin-mcp MCP server (for Claude Code, Codex, Gemini, Antigravity, OpenCode, Cursor, etc.) |
llm |
Anthropic-powered extraction (kin learn, kin ask) |
vectors |
sqlite-vec for semantic similarity search |
reminders |
Natural-language time parsing for kin remind |
all |
Everything above |
Homebrew and apt packages aren't published yet. Use
pip,uv tool,uvx, or source until they are.
Install as Agent MCP Plugin
Each agent reads MCP servers from a different config file. The kin setup-*-mcp commands write the right shape into the right path; the manual snippet is shown alongside in case you'd rather edit the file yourself.
Claude Code
As a plugin (MCP server, skills, and session hooks in one install):
claude plugin marketplace add wandercom/kindex
claude plugin install kindex@kindex
or, inside a session, /plugin install kindex --marketplace wandercom/kindex.
What the plugin runs:
- MCP server (
scripts/claude-plugin/kin-mcp): your installedkin-mcpwhen one is onPATH, so the server and thekinCLI share one version and one database. Otherwise it runs the matching PyPI release withuvx --from 'kindex[mcp]==<version>' kin-mcp, which downloads kindex and its dependencies from PyPI once and caches them. That needs uv; without uv or kindex it exits with an install hint. - Hooks (
hooks/hooks.json, throughscripts/claude-plugin/kin): session start, prompt submit, pre-tool-use, pre-compact and stop call your installedkinto prime context, check prompts against the graph and capture the session. Without an installedkinthey do nothing. They source~/.profilefirst so akininstalled by pipx, uv or Homebrew is found. - Skills:
kindex-prime,kindex-capture,kindex-learn.
Everything stays on your machine: the graph is a local SQLite database
(~/.kindex/ and per-repo .kin/). Nothing is sent anywhere unless you
configure an LLM or embedding provider (see Privacy).
Or as a bare MCP server:
claude mcp add --scope user --transport stdio kindex -- kin-mcp
kin init
Or add .mcp.json to any repo to register the server for that project:
{ "mcpServers": { "kindex": { "command": "kin-mcp" } } }
Registration scope does not restrict graph access. For an agent that should use
only one repository's memory, run kindex-lite --repo /absolute/path/to/repo
instead. It binds the MCP server to that repository's .kin graph and Kinbase
reads, without global-graph fallback. Kinbase submission and write-capable status
require the launcher's --allow-kinbase-submit; --no-kinbase omits Kinbase entirely.
See repository-bound MCP
for configuration and the isolation boundary.
The MCP server exposes 50+ native tools to supported clients: search, add, context, show, ask, learn, link, edit, supersede, list_nodes, status, suggest, candidate_*, verify, invalidate, stale_check, graph_stats, graph_merge, dream, changelog, ingest, tag_start, tag_update, tag_resume, query_context, task_claim, coord_*, lock_acquire, lock_release, remind_*, mode_*, and more.
For explicitly scoped read-only query preparation and optional additive retained
evidence, see query context. The supported pilot paths
are kin context-query and full MCP query_context.
Offline recall cues are an experimental, disabled-by-default lexical sidecar.
Explicitly prepare a bounded batch with kin recall-cues build --limit 100
(repeat --node ID to select sources), and inspect counts with
kin recall-cues status; both accept the shared --config, --data-dir,
--profile and --json flags after the subcommand. MCP exposes the same
operations as recall_cues_build(node_ids=None, limit=100) and
recall_cues_status().
Enable supplemental retrieval in your selected configuration:
recall_cues:
enabled: true
candidate_limit: 20 # 1..100 additional source candidates
rank_weight: 0.10 # relative ranking weight; not factual confidence
Builds make no provider calls and change only derived metadata. Each source
gets at most three aliases or framed exact source spans; source alias origin
does not assert human authorship. The index uses only the supporting source
wording, while answers and context receive only original source nodes. This
extractive arm cannot invent missing synonyms or demonstrate personalized
memory benefits. It has an additional candidate/index budget, so compare it
with ordinary retrieval explicitly. Source changes invalidate cues immediately;
run an explicit bounded rebuild to refresh them. Roll back retrieval by setting
enabled: false; stored sidecars remain available for later rebuilding. There
is no automatic maintenance, generation service, or background scheduling.
For coding agents, install both the MCP server and the instruction file. The
instruction file tells the model how to use kindex: start a session tag, read
tracked .kin/config, check project policy, search before adding, capture
durable decisions, and end the tag with a summary.
Codex
kin setup-codex-mcp
kin setup-codex-hooks
kin setup-agents-md --install --global
kin ingest codex-sessions # optional: backfill saved Codex sessions
setup-codex-hooks installs a SessionStart hook (alongside the prompt/tool attention hooks), so Codex begins each session with the same auto-primed context and "use kindex" / .kin directive as Claude Code. Codex runs new or changed hooks only after you trust them, at its startup review prompt or in /hooks; until then it does not run them, SessionStart included.
Or hand-edit ~/.codex/config.toml:
[mcp_servers.kindex]
command = "kin-mcp"
Gemini CLI
kin setup-gemini-mcp
kin setup-gemini-md --install
Or hand-edit ~/.gemini/settings.json:
{ "mcpServers": { "kindex": { "command": "kin-mcp", "args": [] } } }
Google Antigravity
kin setup-antigravity-mcp
kin setup-antigravity-hooks
kin setup-antigravity-md --install
setup-antigravity-mcp writes the standalone MCP config shape used by
Antigravity's editor/shared config and CLI config. setup-antigravity-hooks
installs PreInvocation priming/prompt checks, PreToolUse advisory attention and
permission gating for Kindex config writes, and Stop-time reinforcement enqueue.
Or hand-edit ~/.gemini/config/mcp_config.json and
~/.gemini/antigravity-cli/mcp_config.json:
{ "mcpServers": { "kindex": { "command": "kin-mcp", "args": [] } } }
Muse
kin setup-muse-mcp
Muse reads ~/.config/muse/settings.json (camelCase mcpServers; never add a
legacy mcp_servers key, which makes Muse drop every MCP server). Muse already
loads Claude Code and Codex personal rules, so kin setup-agents-md --install --global
covers its directives. Muse does not run Claude or Codex hooks, and Kindex does
not yet install Muse-native hooks. Or hand-edit:
{ "mcpServers": { "kindex": { "type": "stdio", "command": "/opt/homebrew/bin/kin-mcp", "args": [], "mode": "optional" } } }
OpenCode
kin setup-opencode-mcp
kin setup-opencode-hooks
kin setup-agents-md --install --global
Or hand-edit ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"kindex": { "type": "local", "command": ["kin-mcp"], "enabled": true }
}
}
OpenCode reads AGENTS.md natively, so install the MCP server and the shared AGENTS.md instructions together.
The OpenCode plugin supplies periodic supervisor advice on the primary user message. See supervision and independent health for configuration and notification setup.
Cursor
kin setup-cursor-mcp
kin setup-cursor-hooks
kin setup-cursor-rules --install # writes ~/.cursor/rules/kindex.mdc
Or hand-edit ~/.cursor/mcp.json:
{ "mcpServers": { "kindex": { "type": "stdio", "command": "kin-mcp" } } }
Cursor integration includes MCP, always-applied rules, and native supervisor hooks. The adapter has automated boundary coverage; authenticated Cursor model delivery and IDE activity discovery remain unverified. No Cursor account is needed to use Kindex with the other supported agents. See supervision and independent health.
Remote agents (HTTPS behind Cloudflare Access)
kindex-remote (extra kindex[remote]) serves your graph over streamable HTTP
to agents on other machines. It listens on loopback only; a Cloudflare Tunnel
publishes it and a Cloudflare Access application authenticates every caller:
Managed OAuth for interactive agents (Claude Code, Codex, claude.ai connectors)
and a service token for headless ones. The server also verifies the Access JWT
(Cf-Access-Jwt-Assertion: signature, audience, issuer) on every request.
kindex-remote --access-team-domain <team>.cloudflareaccess.com \
--access-aud <application AUD tag> --public-host app.example.com --port 8767
Only graph tools are served (search, context, add/edit/learn/link, tasks, tags,
coordination, watches, ask). Tools that run commands, read host paths or ingest
from the host (reminders, ingest, modes, maintenance, Kinbase, task_execute)
are not, nor is graph_stats. add accepts only URL referents, task tools
refuse project_path, and show does not resolve saved sources. Tool calls run
one at a time on a worker thread, off the request loop.
The Access application needs Managed OAuth with dynamic client registration
enabled (and the client's callback URLs allowed) for interactive agents. Connect
one with claude mcp add --transport http kindex https://app.example.com/mcp
(OAuth opens a browser once); a headless client sends CF-Access-Client-Id and
CF-Access-Client-Secret headers instead.
Why Kindex
Context-aware by design
Five context tiers auto-select based on available tokens. When other plugins dump everything into context, Kindex gives you 200 tokens of executive summary or 4000 tokens of deep context — whatever fits. Your plugin doesn't eat the context window.
| Tier | Budget | Use Case |
|---|---|---|
| full | ~4000 tokens | Session start, deep work |
| abridged | ~1500 tokens | Mid-session reference |
| summarized | ~750 tokens | Quick orientation |
| executive | ~200 tokens | Post-compaction re-injection |
| index | ~100 tokens | Existence check only |
Knowledge graph, not log file
Nodes have types, weights, domains, and audiences. Edges carry provenance and decay over time. The graph understands what matters — not just what was said.
Operational guardrails
Constraints block deploys. Directives encode preferences. Watches flag attention items. Checkpoints run pre-flight. No other memory plugin has this.
Answers from dated evidence
kin ask answers in one model call from dated evidence: the matching nodes in chronological order with today's date and your standing directives, trimmed to the messages that bear on the question, within a small budget for a single fact and a wider one for counts, lists, orderings, summaries and advice. Conversation facts and per-person profiles written by kin digest let it answer from a few thousand tokens, and relative dates in the evidence arrive already resolved. With conversations.claims: true in your config, kin digest records turn-level claims instead of per-conversation facts, each tied to the message it came from (its place in the conversation and its words); kin digest --claims converts conversations digested earlier. In a terminal the answer streams as it is written. The answer rules cover updated values, counts across conversations, date arithmetic and missing details. The defaults suit an agent asking about its own graph: today's date is the clock's (or --as-of), reasoning effort is ask.effort (medium), and a question that gets a version, name or date wrong is told what the record says. ask.preset: benchmark restores the configuration the published LoCoMo, LongMemEval-S and BEAM scores were measured with (docs/benchmarks/); pass each question's date with --as-of to reproduce them. A directive kin digest reads from an imported chat applies once you confirm it (kin set-state <id> confirmed true), and conversations.profiles: true also writes per-person profiles. kin ingest conversations --directory DIR stores chat transcripts without loss for it to search. The MCP ask tool returns the same dated evidence to the agent that called it (and drafts the answer itself with answer=true); context(level="evidence") returns it for a topic.
Claim revisions include source expiry, so changing or removing an expiry refreshes derived claims on the next requested claims backfill. Retraction also clears that conversation's claim revision, allowing an identical re-import to regenerate claims. Older revision keys refresh once on the next explicit kin digest --claims, including conversations without expiry; this can use the configured model budget. Claims remain off by default, and upgrading does not start a backfill.
Team and org ready
.kin inheritance chains let a service repo inherit from a platform context, which inherits from an org voice. Private/team/org/public scoping with PII stripping on export. Enterprise-ready from day one.
In Practice
A 162-file fantasy novel vault — characters, locations, magic systems, plot outlines — ingested in one pass. Cross-referenced by content mentions. Searched in milliseconds.
$ kin status
Nodes: 192
Edges: 11,802
Orphans: 3
$ time kin search "the Baker"
# Kindex: 10 results for "the Baker"
## [document] The Baker - Hessa's Profile and Message Broker System (w=0.70)
→ Thieves Guild, Five Marks, Thieves Guild Operations
## [person] Mia and The Baker (Hessa) -- Relationship (w=0.70)
→ Sebastian and Mia, Mia -- Motivations and Goals
0.142 total
$ kin graph stats
Nodes: 192
Edges: 11,802
Density: 0.3218
Components: 5
Avg degree: 122.94
192 nodes. 11,802 edges. 5 context tiers. Hybrid FTS5 + graph traversal in 142ms.
Getting Agents to Actually Use It
Installing the MCP plugin gives the agent the tools. But agents won't use them proactively unless you tell them to. Kindex ships with recommended instruction blocks that turn passive tools into active habits. For the full agent playbook, see docs/mcp-agent-guide.md.
# Claude Code
kin setup-claude-md --install
# Codex (and OpenCode — both honor AGENTS.md)
kin setup-agents-md --install --global
# Gemini CLI
kin setup-gemini-md --install
# Google Antigravity
kin setup-antigravity-md --install
# Cursor — writes ~/.cursor/rules/kindex.mdc with alwaysApply: true
kin setup-cursor-rules --install
This adds session lifecycle rules (start/orient/during/segment/end), explicit capture triggers (discoveries, decisions, tasks, key files, notable outputs), and search-before-add discipline. The difference between "the agent has a knowledge graph" and "the agent actively maintains a knowledge graph" is this block.
For durable work, agents should use Kindex's persistent task and knowledge
surfaces rather than host-session-only task state. Use task_add, task_list,
and task_done for work that must survive the current conversation; search
before adding knowledge; prefer edit or supersede over duplicate nodes; and
treat tracked .kin files as shipped project state, not local cache.
If the host also exposes session-local task tools, use those only for temporary
planning; durable work belongs in Kindex.
For MCP clients in a repository, retain either project- or global-qualified
references when reads supply them, and pass them unchanged to follow-up tools.
In dual-graph sessions, use those qualified evidence IDs in source_refs when
a new node or task derives from existing knowledge. Ordinary single-store and
profile responses keep legacy raw IDs; source_refs does not accept those raw
IDs. Search again after restarting the MCP server because qualified reference
tokens are bound to its store selection. See Profiles for read
scopes and write routing.
The Claude SessionStart hook (kin setup-hooks) and Codex hooks (kin setup-codex-hooks) reinforce these directives at the start of supported sessions with a "Session directives" block that reminds the agent to use kindex MCP tools throughout the session.
What gets captured
With the directives active, the agent will:
- Search the graph before starting work and before adding nodes
- Add discoveries, decisions, key files, notable outputs, and new terms as they emerge
- Link related concepts when connections are found
- Learn from long files and outputs via bulk extraction
- Tag sessions to track work context across conversations
- Remind with actions for deferred tasks (shell commands or headless agent wakeups)
Kindex MCP questions
How do I add Kindex MCP to Claude Code?
Run claude mcp add kindex -- uvx kindex in your terminal. Add --scope user to make it available in every project.
How do I add Kindex MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
Where does Kindex store its data?
It keeps a local SQLite graph in ~/.kindex/ plus a per-repository git-tracked .kin/ directory, so nothing leaves your machine unless you configure a provider.
How do I install Kindex for an MCP client?
Install the package with the mcp extra via pip or uv, then register kin-mcp with your agent. Plugins and setup commands also exist for Claude Code and Codex.
Can several different AI agents share the same memory?
Yes, Kindex is designed as one local knowledge graph that multiple MCP-capable agents read and write, giving continuity across sessions and handoffs between vendors.
What tools does the Kindex MCP server expose?
It exposes more than 50 native tools such as search, add, context, ask, learn, link, supersede, status, dream, and task_claim.
Can I limit an agent to one repository's memory?
Yes, run kindex-lite with a --repo path to bind the server to that repository's .kin graph without global-graph fallback.