MemoryRouter

by Unknown

Not rated
Website

About

Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.

Details

Author
Unknown
Categories
AI, Other, Knowledge Base

MemoryRouter's remote MCP server — protocol support, OAuth scopes, tools, vault model, and platform setup.

MemoryRouter runs a remoteModel Context Protocolserver that gives any MCP-capable client durable, portable memory. One vault, many AI apps.

This is the address you paste into ChatGPT, Claude, Claude Cowork, Codex, or any other MCP client. Authentication is OAuth 2.1 with PKCE — you never paste an API key into a connector.

The server implements the2026-07-28revision, which isstateless: every request describes itself, and there is no session handshake to lose. Concretely:

- server/discoverreports supported versions, capabilities, and cache hints.
- Each modern request carries_metaprotocol version and client capabilities, mirrored byMCP-Protocol-Version,Mcp-Method, andMcp-Nameheaders.
- Every successful result carries aresultTypediscriminator and per-response server info.
- Tool and resource catalogs are deterministic and cacheable.

Older handshake-era clients still work: they sendinitialize, and the server negotiates a legacy version without ever claiming a modern one. No client is dropped.

Session-based MCP couples your memory to a live connection. If the connection drops or the client restarts, the session is gone. MemoryRouter's durability lives in thevault, not in a session — so a stateless protocol is the right fit. Any request, from any client, at any time, reaches the same memories.

The server exposes exactly ten tools. If a client shows you something else, it is not coming from MemoryRouter.

Two MCP resources are also available when the host exposes resources:memory://vault/statsandmemory://vault/recent.

Two deletion tools exist, and they are deliberately different:

- delete_memoriesremoves specific memories by their ids (up to 500 per call). Ids come fromsearch_memoriesorinspect_memoryresults. It requires thememories:deletescope and an explicitconfirmationargument, and the host should show the user what will be deleted before calling it. Deleting a raw memory does not delete reflections built from it.
- forget_all_memoriesiswhole-vault only. It requires thememories:deletescope, the exact confirmation phraseDELETE ALL MEMORIES, and returns a result confirming both primary and mirrored storage were cleared. Anything short of that returns "nothing was deleted" and never reaches storage.

Astore_memoryreceipt is not a deletion handle. The dashboard atapp.memoryrouter.aialso supports per-memory deletion.

TheReflection Hierarchyis live end to end: three memory tiers, consolidation, lineage, and per-memory deletion, all usable from inside a chat.

The consolidation round trip works like this:
- The model callsconsolidate_memories. The server checks out the oldest unconsolidated memories under a 15 minute lease and returns their texts, dates, and the server-authoredreflection_contractinstructions.
- The model reads the texts and writes 5 to 10 standalone reflection entries, rating each entry's importance from 1 to 10, following the contract verbatim.
- The model callscommit_reflectionswith the batch id and its entries. The server embeds and stores them at the tier above, links lineage to every source, and marks the sources consolidated.

So in ChatGPT or Claude you can literally say "consolidate my memories" and the model you are already talking to does the reflecting. If the lease expires before commit, nothing is lost: the memories return to the pool and the next checkout picks them up.

memory_statusreports reflection debt (how much unconsolidated material the vault carries), andsearch_memoriesresults includeconsolidation_availablewhen the vault crosses the consolidation threshold, so the model knows when reflection is worth suggesting.

inspect_memoryis the receipts tool: give it any memory id from a search result and it returns the lower-tier memories that reflection was built from, chainable all the way down to raw. Ask "why do you believe that?" and the model can show you.

search_memoriesaccepts two optional filters on top of the query:

- tiers: a non-empty subset of[1, 2, 3]to restrict results to raw memories, reflections, or high-level reflections. Omit to search all tiers blended.
- importance: an integer 1 to 10 minimum threshold. Only reflections carry importance ratings, so this filters to tier 2 and 3 content.

Tier guide: tier 3 holds the highest-level consolidated reflections (identity, principles, what matters most); tier 2 holds reflections of specific meaningful events; tier 1 holds raw verbatim memories. Match filters to the question rather than applying one rigid recipe:

- Broad "most important things we've done" questions: tiers[3], importance 8 or higher, a large limit such as 250. Time-bounded variants ("most important things last month") use date search with the same filters.
- Big-picture overviews ("what do you know about this area or period"): tiers[3]alone, with no importance filter. Importance filtering is optional and can exclude useful context.
- Specific-topic lookups ("find the decision about X"): omit tiers entirely so raw, tier 2, and tier 3 are searched together, and leave importance unset. A high importance filter hides the specific detail being sought.
- Specific meaningful events where raw noise is unwanted: tiers[2](optionally[2, 3]).
- Exact verbatim or forensic detail: if the detail is not already in context, drill down by lineage: search tiers[3]to find the relevant thread, then useinspect_memoryon the result to see the tier 2 reflections it consolidated, then inspect those to reach the raw memories underneath. Direct tiers[1]search works when you know exact wording to match.

Mixtures of tiers are legitimate; adjust the importance threshold to the question instead of always setting it high. Only reflections (tiers 2 and 3) carry importance ratings.

The served tool descriptions teach this playbook to every connected model automatically.

Every result row is tagged with itstier, and reflection rows include theirimportance.

date_search_memoriesretrieves memories from a specific time window:from(required ISO 8601 date or datetime), optionalto,query,tiers,importance, andmax_tokens(1000 to 200000). Omitqueryfor a chronological review; include it to rank by relevance within the window. Truncated pages returnnext_to/next_fromcontinuation cursors. Relative phrases like "lately" must be resolved to concrete ISO dates before calling.

MemoryRouter runs a full OAuth 2.1 authorization server with PKCE (S256), dynamic client registration, Client ID Metadata Documents, refresh-token rotation, and revocation.

Four scopes exist, and they areindependent:

There is deliberatelyno hierarchy and no admin scope.memories:writedoes not grant recall, reflect authority does not grant deletion, and delete authority is never inherited from write. A connector configured to save notes therefore cannot erase your vault.

Authorization defaults toread-only. Clients request more only when they need it, and the server answers an under-scoped call with a reauthorization challenge instead of performing the action.

A read-only OAuth token is also downgraded at the downstream API-key layer, so even an internal routing mistake cannot turn a read connection into a write. Existing read-only key conventions (mk_ro_,mk-ro-, and:read/:offmodes) keep working and are never widened.

Vaults: personal, project, and organization

One OAuth connection is bound to one vault, chosen during sign-in.

That is the entire isolation model, and it is worth being precise about:

- Personal, project, and organization vaults areseparate vaults. You pick which one a connection uses when you authorize it.
- To switch vaults, disconnect and reconnect the connector and choose a different vault.
- Project and organization "handles" that appear inside a conversation arebehavioral labels for compatibility, not server-verified arguments. The MCP tools do not currently accept a project or vault parameter, so a model cannot select or escape a scope by asking.

If you need strict isolation, use a separate vault and a separate connection.Do not rely on conversational scope labels as a security boundary.

The canonical chooser separates connection, capture, and historical import:

"Model-directed" means the AI decides whether and when to search or save. It is not guaranteed on every turn. A connection makes future tool calls possible; it never implies that historical chats were imported. Generic MCP compatibility must be proven per client: Streamable HTTP support alone does not prove OAuth discovery/callback, scope, tool, or resource behavior.

Claude Code, Codex, and OpenClaw use local hooks outside the generic remote MCP transport. Claude Code 2.1.0 durably captures one typed prompt plus one final user-visible response for a completed turn and excludes tool/intermediate transcript data. Codex hooks require a MemoryRouter API key in addition to OAuth. OpenClaw uses relay hooks; inference and provider keys remain in OpenClaw.

See theplatform comparisonfor plans, distribution/listing state, exact capture units, limitations, and current manual acceptance boundaries.

A save or delete is refused as insufficient scope.The connection lacksmemories:writeormemories:delete. This is not retriable — disconnect, reconnect, and approve the scope. ChatGPT surfaces this as a reauthorization prompt.

Recall returns nothing.Confirm withmemory_statusthat you are connected to the vault you expect. A common cause is being connected to a different vault than the one holding the memories.

Claude or ChatGPT never uses memory.On those surfaces, tool use is model-directed. Ask explicitly ("check my memory for…"), or use Claude Code / Codex where hooks make it deterministic.

A tool you read about does not exist.Only the ten tools above exist. Server-side project arguments are not implemented.

Consolidation is refused as insufficient scope.consolidate_memoriesandcommit_reflectionsneed thememories:reflectscope. Disconnect, reconnect, and approve reflect access when your client requests it.

For clients with a doctor command, runnpx memoryrouter-claude doctorornpx memoryrouter-codex doctorfor a local diagnosis.

The advertisedresourcevalue is the full/mcpURL, matching what you type into the client, and access tokens are bound to that same RFC 8707 resource.

- Memories are stored in the vault you selected during OAuth; they are not shared between vaults.
- memory_statusreturns anopaquevault reference. Your memory key is never exposed to the model, in tool output, or in a client-readable token claim.
- Whole-vault deletion is permanent and confirmed against both primary and mirrored storage.
- Per-memory deletion is available via thedelete_memoriestool or the dashboard.

Add private persistent memory to every user in a multi-user AI product.

]([](https://docs.memoryrouter.ai/quickstart)%5B)<<<https://docs.memoryrouter.ai/quickstart)

Canonical MemoryRouter setup, capture, distribution, and historical-import behavior for every supported consumer surface.

The DataFast MCP server lets MCP-compatible clients such as Codex, Claude Code, and Cursor query your analytics and manage your account through natural language.

Inkrun's remote MCP server lets AI agents like Claude turn Markdown into themed, consistent and reproducible on-brand PDFs with a single tool call

Transform your scattered documentation into AI-ready knowledge that works seamlessly with Claude, Cursor, VS Code, and other AI tools.

Autofill PDF is an MCP server that connects your Instafill.ai workspace to the Claude and ChatGPT MCP clients, allowing users to upload, search, and automatically fill PDF forms directly from chat.

Share your team's Coding Best Practices with Cursor, VS Code, Claude code, Windsurf, JetBrains IDEs and other coding tools supporting remote MCP connection.

A local MCP server that gives Claude Code, Cursor and Codex read access to your DynamoDB schema and items, with every write staged for human review.

Lance is an agent that runs on its own cloud Mac and handles everything on the App Store Connect side of shipping an iOS app. It connects to coding agents like Claude Code and Codex through MCP and takes over the parts they can't do: creating apps on App Store Connect, setting up notifications / widgets, filling out listing metadata, uploading builds to TestFlight, submitting for review, and responding to App Review feedback. Because it has its own Mac, it can also build, run, and test users' apps and capture screenshots.

Connect your Moodle LMS to ChatGPT, Claude and other MCP clients: build courses, upload content, review grades and pull reports from the chat.

Connect your Google, Outlook and iCloud calendars to Claude, ChatGPT and any MCP client through one secure server. Let your AI assistant read your schedule, check your availability, and create, update and delete events.](https://docs.memoryrouter.ai/platform-comparison)

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.