Connecting memory to any assistant with MCP
One protocol, every client. And a handshake with seven steps, six of which fail silently.
The short answer: the Model Context Protocol is a common interface between assistants and external tools. Build a memory that speaks it once and Claude, ChatGPT, Gemini, Cursor and VS Code can all read it — no per-vendor integration.
Why this matters more than it sounds
Built-in assistant memory is per-vendor. What Claude remembers, ChatGPT does not, and switching tools means starting over. MCP breaks that: the memory lives outside any assistant, and each one connects to it.
That also changes the risk calculation on adopting a memory system. If it speaks MCP, it survives you changing your mind about which assistant you prefer.
Local server or remote
A local server runs on your machine and connects to desktop clients. Simple, private, and unreachable from your phone or when the machine is asleep.
A remote server runs over HTTPS and works from anywhere, including mobile. It needs real authentication, which is where most of the difficulty lives.
Many setups use both: local for speed at the desk, remote for everything else.
The handshake, and where it breaks
Connecting a remote server is not one request. A client walks a discovery chain, and a failure at any step produces the same unhelpful message: could not connect.
- Client sends an unauthenticated request. The server must return
401 with a
WWW-Authenticateheader pointing at its resource metadata. Omit that header and the client has no idea where to authenticate. - Client fetches the protected resource metadata. The
resourcevalue must match the server's canonical URI exactly — clients compare it literally, so a trailing slash is a hard failure. - Client fetches the authorization server metadata and looks for
S256in the supported PKCE methods. - Client registers itself, if dynamic registration is offered.
- You sign in and approve.
- Client exchanges the code, proving possession with the PKCE verifier.
- Only now does the actual protocol conversation begin.
Six of those seven fail without telling you which. That is why we built the MCP endpoint checker — it walks the same chain and names the step that broke.
Quirks worth knowing
- Transport. Streamable HTTP is current; the older standalone HTTP+SSE transport is deprecated and no longer accepted for new directory submissions.
- ChatGPT is remote-only — no local stdio servers.
- Gemini requires Streamable HTTP and rejects hyphens in server names.
- Without OAuth your server learns nothing about who is calling — no user, no session. Any multi-tenant memory needs it.
What a memory server should expose
Fewer tools than you would guess. Search, fetch one item, a small standing briefing, and a recent-changes view covers most of it. Annotate each with a read-only hint so the assistant knows nothing is destructive — and because directory listings require the annotations anyway.
Resist a tool per operation. Every tool definition costs context on every single request, which is its own quiet token cost.
Common questions
What is MCP in simple terms?
A standard way for AI assistants to call external tools and read external data, so a tool built once works across assistants instead of needing separate integrations for each.
Can one MCP server serve Claude and ChatGPT at the same time?
Yes. That is the point of a shared protocol. Expect small per-client quirks around transport and naming, but the server itself is one implementation.
Why does my MCP server fail with no error message?
Almost always the discovery chain. The most common causes are a missing
WWW-Authenticate header on the 401, and a resource identifier that
does not match the URL exactly — usually a trailing slash.