Coding agents
Antigravity
Give Antigravity memory that survives the session. Add the Korely MCP server to your MCP config with your API key in a header.
Connect Korely's MCP server and, before answering, Antigravity can pull the active typed facts and relevant memories it has stored, and write new ones as it learns. The intelligence, entity and typed-fact extraction, contradiction resolution, bi-temporal validity, runs server-side. Antigravity just calls the tools.
Prerequisites
- A Korely API key (
kor_live_...). The hobby tier is free. - Antigravity installed, with MCP support (Manage MCP Servers in the IDE).
- For the fallback bridge only: Node.js with
npxon yourPATH, the bridge runs as a Node process.
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
an Authorization: Bearer header. Register it in the global
config at ~/.gemini/config/mcp_config.json (or
.agents/mcp_config.json in the workspace). In the IDE you can
open the live file via
Manage MCP Servers → View raw config.
{ "mcpServers": { "korely": { "serverUrl": "https://api.korely.ai/agent/mcp", "headers": { "Authorization": "Bearer kor_live_..." } } }}
Replace kor_live_... with your real key. Restart Antigravity
(or reload MCP servers) and korely should show as connected.
Fallback, the mcp-remote bridge
If your build does not send the header to a remote server (see
antigravity-cli #25),
register Korely as a local command server that runs
mcp-remote instead:
{ "mcpServers": { "korely": { "command": "npx", "args": [ "-y", "mcp-remote", "https://api.korely.ai/agent/mcp", "--header", "Authorization:${KORELY_AUTH}" ], "env": { "KORELY_AUTH": "Bearer kor_live_..." } } }} mcp-remote speaks stdio to Antigravity and forwards each call to
https://api.korely.ai/agent/mcp over Streamable HTTP, injecting
the Authorization header.
About the bridge. mcp-remote is a
third-party, open-source npm proxy (geelen/mcp-remote, the
de-facto community bridge for remote MCP servers), it is not published or
maintained by Korely or Google. It needs Node.js on your machine and runs
locally as a command server. With static-header auth no OAuth
is involved, so nothing is cached or logged in by it.
If a server doesn't load
-
Use the IDE's View raw config to open whichever file is
actually live, and check that
korelyis in it. -
With the bridge, confirm
npxresolves in the environment Antigravity launches from, the bridge is a Node process.
What Antigravity can do
Once connected, Antigravity 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 Antigravity 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..."Antigravity › 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.