Coding agents
Claude Code
Give Claude Code a hosted memory it reaches from every machine. One command connects the Korely MCP server, no OAuth dance, no package to install, just your API key.
Claude Code already carries knowledge across sessions with
CLAUDE.md files and auto memory, notes it saves on your
machine. Auto memory is machine-local: it stays on the computer where Claude
Code wrote it. Korely adds a hosted memory that Claude Code reaches with the
same key from every machine where you add the server. Before answering,
Claude Code can pull the active typed facts and relevant memories it has
stored, and write new ones as it learns. Facts are bi-temporal: when a model
judge decides a new one replaces an earlier one, the old fact is closed with
its end date, not overwritten, and as_of and known_as_of read what
was true, or what the store knew, on any past date. The intelligence,
entity and typed-fact extraction, contradiction resolution, bi-temporal
validity, runs server-side. Claude Code just calls the tools.
Prerequisites
- A Korely API key (
kor_live_...). The hobby tier is free. - Claude Code installed (
claude --version).
Add the Korely MCP server
Korely's agent memory is a remote MCP server at
https://api.korely.ai/agent/mcp, authenticated with your key in a
header, no browser login. Add it with one command:
claude mcp add --transport http korely https://api.korely.ai/agent/mcp \ --header "Authorization: Bearer kor_live_..." claude mcp add uses local scope by default: the server loads
only in this project, on this machine. Add --scope user to make
it available in all your projects on this machine. On another machine, run
the same command with the same key and Claude Code reads the same memory.
Or add it to your project's .mcp.json directly:
{ "mcpServers": { "korely": { "type": "http", "url": "https://api.korely.ai/agent/mcp", "headers": { "Authorization": "Bearer ${KORELY_API_KEY}" } } }}
Export KORELY_API_KEY=kor_live_... in the shell that launches
Claude Code, and approve the server when Claude Code asks about
project-scoped servers.
Run /mcp inside Claude Code to confirm korely is
connected.
Save every session without asking. In the repository,
run korely init --tool claude-code (korely-memory 0.1.26 or
later): hooks hand Claude Code the repository's memory when a session
starts and save the session to it as a memory of kind
session. It also replaces any MCP server named
korely at local scope (user scope with
--global), the one added above included, with a local
server that runs on your machine; --no-mcp removes that
entry and adds none. To keep the remote server, run
korely init --tool claude-code --no-mcp first and add the
server above afterwards. See
Connect a coding assistant.
What Claude Code can do
Once connected, Claude Code has four memory tools:
| Tool | What it does |
|---|---|
korely_get_context | The recall path: assembles the active typed facts plus the most relevant memories into a prompt-ready block. Pure retrieval: the query is embedded once for the vector search, and no generative model runs on the read path. |
korely_add | Store a memory. Typed (subject, predicate, object) facts are extracted server-side, and a model judge closes the earlier fact, with its end date, when it decides a new one replaces it. |
korely_search | Semantic search over stored memories, ranked. |
korely_get_facts | The typed bi-temporal facts known about a user, with point-in-time queries: as_of (what was true then) and known_as_of (what the store knew then). |
Use it
Now Claude Code reaches for memory on its own. Tell it something durable and
it calls korely_add; ask it something personal and it calls
korely_get_context first:
You › Remember that this repo deploys to Hetzner, not Render. → korely_add("This repo deploys to Hetzner, not Render")
# next session, days laterYou › How do we deploy this? → korely_get_context("deploy") → "This repo deploys to Hetzner..."Claude › This repo deploys to Hetzner (you told me earlier), not Render. ...Scoping
Every tool accepts an optional user_id so one key can serve many
end users: a read that names "user-b" never returns a memory
written for "user-a". Omit it on a write and the memory belongs
to no end user (a key confined to one end user writes to that one). Omit it
on a read and the read covers every end user the key can see.
Why this is more than a notepad. Korely keeps each memory's
text as written and also extracts typed facts with
bi-temporal validity from it. When something changes ("this repo now deploys to Hetzner, not Render"), the judge closes the old
fact with its end date instead of overwriting it, so korely_get_context returns
what's true now, and as_of can still replay what was
true before. EU-hosted.
Related
- Korely MCP, the full MCP surface and other clients.
- Get context, the call behind
korely_get_context. - Memory as a tool, the same pattern when you build the agent loop yourself.