MCP server
POST /mcp is a Model Context Protocol server over Streamable HTTP. It exposes the memory vault bound to the key, so an MCP client such as Claude Code or opencode can search and edit notes with the same credential it uses for inference. The server speaks protocol versions 2026-07-28 and 2025-11-25.
Before you start#
- The key must be bound to a vault, and the MCP toggle of the key must be on. Both are set in the dashboard under the key's memory settings.
- The endpoint authenticates with the same key:
Authorization: Bearerorx-api-key. - Only the vault bound to the key is reachable.
Tools#
| Tool | What it does |
|---|---|
memory_search | Full-text search across the vault, ranked by relevance, recency and links |
memory_read | Read a note by path, up to 64 KiB at a time |
memory_write | Create or replace a note |
memory_append | Append text to a note |
memory_link | Add a [[wikilink]] between two notes |
memory_list | List the paths of notes under a prefix |
memory_read takes path, offset and limit; memory_write takes path, content and optionally expect_version; memory_append takes path and text; memory_link takes from and to; memory_list takes prefix. An argument the server does not know is ignored.
The same tools are available to the models when the tools toggle is on; Memory vault describes how those turns run.
Resources#
Every note is also a resource: vault://notes/<path>, with the path percent-encoded, served as text/markdown. A resource read uses the same window as memory_read: a note longer than 64 KiB comes back as its first 64 KiB with a marker that names the offset to read on from. Resource reads draw on the same account read budget as the read tools.
Limits#
Every request to /mcp counts against the key's requests per minute and takes one of the account's concurrent slots, as an inference request does. The write tools (memory_write, memory_append, memory_link) have a cap of their own per key: 20 calls a minute, in bursts of up to 10. A request past a limit is refused with 429 and a retry-after in whole seconds; reading and searching stay available while the write cap is full. The account also has vault budgets across every surface: 120 writes and 120 reads a minute, in bursts of up to 60, shared with the dashboard and the models' memory tools.
Handshake#
A client of the 2025-11-25 revision starts with initialize, then sends notifications/initialized, then calls tools/list; one of the sessionless 2026-07-28 revision can call tools/list straight away. With cURL the first step is:
The server is stateless: each request stands on its own and is authenticated by the key, so there is no session id to keep. Responses are JSON or an SSE stream, whichever the client asked for with Accept.
Client configuration#
Most clients take a URL and a header. For Claude Code that is a project .mcp.json:
The vault is the same one the dashboard edits, so a note the model writes shows up there with its version history.