Portable agent memory
Open MCP at the protocol boundary. Any MCP client, any LLM, the same memory.
Most agent-memory products lock you in twice. They bind you to their SDK, and through that SDK to their chosen LLMs. The day you switch models, the memory either stays inside the vendor or doesn’t translate cleanly. IOBOXX is built around the opposite premise: memory is the durable asset, and the model on top of it is interchangeable. We picked the protocol boundary on purpose.
IOBOXX speaks MCP — the Model Context Protocol, an open standard published by Anthropic and adopted across the agent ecosystem. The protocol is the contract. Everything above it is replaceable.
TWO AXESAny MCP client, any LLM
Portability shows up on two independent axes. They compose: each pick on the top row works with each pick on the bottom row, because the model never speaks to IOBOXX directly — the MCP client mediates every call.
- Claude CodeAnthropic CLI agent
- CursorIDE-resident agent
- Claude DesktopDirect MCP transport
- ChatGPTMCP-bridge plugins (2026)
- Custom agent SDKAnything that speaks MCP
- ClaudeSonnet · Opus · Haiku
- GPTGPT-5 · GPT-6
- GeminiPro · Flash
- LlamaMeta Llama 4
- MistralLarge · Medium
- DeepSeekV3 · R-series
- GrokxAI
A Claude-driven agent in Claude Code and a Gemini-driven agent in a custom Python SDK can share the same per-twin memory. Their writes interleave on the deterministic commitlog with per-principal attribution — the Phase 5.6 principal model treats every agent as a first-class user, so reads scope per-principal and audit trails stay honest across multi-model workflows.
CONTRASTWhy the protocol boundary matters
The choice of which boundary memory binds to is the whole architectural question. Three common answers, three very different lock-in profiles:
| Approach | Binds to | Switch model means | Switch agent SDK means |
|---|---|---|---|
| IOBOXX | MCP protocol (Anthropic open standard) | No code change — swap the LLM behind the MCP client. | No data migration — point any MCP-aware client at the same memory. |
| Hosted memory services | Vendor SDK + model bindings (Mem0, Zep, hosted Letta) | Limited to the bindings the vendor ships. | Memory stays inside the vendor SaaS; export rarely round-trips. |
| Vector-DB-as-memory | Agent framework (Pinecone + LangChain, Weaviate + LlamaIndex) | Possible, but you rewrite the agent loop. | Possible, but you re-implement retrieval against the new framework. |
Hosted memory services live above the protocol — in their own SDK. Vector-DB retrieval lives below the agent loop — tangled into the framework. IOBOXX lives at the MCP protocol itself, so the abstraction is the contract every participant already agrees on.
SURFACEWhat the MCP surface exposes
The IOBOXX MCP server exposes 24 tools across reads, writes, semantic queries, structural queries, and agent-curated handoff. A representative slice — chosen to show breadth, not as an exhaustive list:
pingLiveness + auth-path probe.
get_summaryHot-state digest for cold-start context.
semantic_searchVector search across the per-twin embedding index.
load_relevant_contextPer-principal relevance-ordered rehydration.
curate_memoryAgent-curated keep/drop/add at session end.
create_objectWrite a typed object into working memory.
set_attributesEAV attribute writes against an existing object.
traverse_referencesWalk the graph along typed reference edges.
The shape of the surface grew with what the agent actually needs: reads to read, writes to write, semantic queries when the right object isn’t known by name, structural queries when the graph topology matters, and a session-end curate_memory call so the agent can hand off only what was useful. Nothing in that list assumes a specific LLM.
REALWhat makes it real
Calling memory “portable” is cheap. The architectural commitments that make the claim load-bearing:
- Standard MCP transport
Streamable HTTP and WebSocket — the same transport Anthropic specified. No vendor-specific extensions, no proprietary handshake, no out-of-band metadata. Any compliant MCP client connects without a custom shim.
- JWT auth, one trust boundary
Keycloak is the IdP. The same ES256 token validates against SpacetimeDB SQL and against the MCP tower middleware. A token that works for one surface works for the other; there is no MCP-specific auth path to drift.
- No vendor-specific tool surface
The 24 tools name graph operations, not model features. Nothing in the surface assumes a particular LLM, a particular embedding model, or a particular agent framework. The contract is the protocol.
- Sovereign per-twin instance
Each tenant runs its own SpacetimeDB and its own object-store crate. Memory lives on the tenant’s infrastructure, not inside a model vendor’s cloud. Replace the model — the database does not move.
- AGPL-licensed core
The engine is AGPL-3.0. Anyone can self-host. Anyone running it as a service for others must open-source their modifications. The protocol stays open; the implementation stays inspectable.
CLOSINGThe boundary is the abstraction
Every memory product picks a boundary. SDK-bound products own the developer experience but bet on a particular vendor surviving. Framework-bound products own the agent loop but inherit every churn cycle of that framework. The protocol boundary is the only one the whole agent ecosystem has already agreed on, and it’s the only one where “switch the model, keep the memory” is a property of the design rather than a marketing line. That’s why we picked MCP.