Add Memory to Your OpenRouter Setup

If you use OpenRouter, you switch models more than anyone.
DeepSeek for code. Claude for writing. Gemini for long context. Whatever dropped this week, because it dropped this week.
The switching is the point. The amnesia is the tax.
Every model starts blank. Your project, your preferences, the decision you explained yesterday in a different model, all gone. The router remembers your credits, not you.
Why your context resets
Models are stateless. Memory, when it exists, lives in the app around the model, and each app keeps its own little pile. ChatGPT's memory stays in ChatGPT. Your LibreChat instance knows nothing about either.
So the fix is not a better model. It is one memory that sits outside all of them.
That is what Tabula is: a memory layer that speaks MCP, the same open standard your MCP-capable apps already use. Save a fact once, and every connected model and app can recall it. You can see, edit, export, or delete all of it from one dashboard. Free during beta.
Here is how to wire it into an OpenRouter setup, from easiest to most hands-on.
1. LibreChat
LibreChat supports remote MCP servers natively. Add this to librechat.yaml:
mcpServers:
tabula:
type: streamable-http
url: https://www.tabula360.com/api/mcp/mcp
headers:
Authorization: "Bearer ${TABULA_MCP_TOKEN}"
Put your token in the TABULA_MCP_TOKEN env var (get it at tabula360.com/connect, it is shown once). Restart, and every model you route through OpenRouter now shares one memory. Tell DeepSeek about your project, ask Claude about it tomorrow.
2. Open WebUI
Open WebUI added native MCP support in v0.6.31.
Admin Settings, then External Tools, then add a server. Set the type to MCP (Streamable HTTP), paste https://www.tabula360.com/api/mcp/mcp as the URL, set auth to Bearer and paste your token in the key field. Save.
Same result: the model dropdown changes, your memory does not.
3. Your own scripts
If you call the OpenRouter API directly, you can have memory in about 100 lines: fetch Tabula's five tools over MCP, pass them to the model as regular tool definitions, execute what it calls.
We keep a complete, tested single-file example on GitHub: openrouter-memory.
OPENROUTER_API_KEY=sk-or-... TABULA_MCP_TOKEN=mcp_... \
uv run --with requests openrouter_memory.py "Remember that I prefer TypeScript."
Run it again next week and ask what language you prefer. It knows. So does your ChatGPT, because it is the same memory.
Where mem0 and Supermemory fit
A fair question, because if you build with LLMs you have probably seen them.
mem0 and Supermemory are memory infrastructure for your app. You wire them in, and your app remembers its users. That is their job and they do it well.
Tabula points the other way. It is not a backend for your product, it is your own memory, the one you build by talking to AIs, available in every AI and tool you touch. One remembers your users. The other remembers you. Plenty of people should use both.
Set it up
- Sign up at tabula360.com and save a few facts about yourself
- Grab your MCP token from the Connect page
- Paste one config block into your app, or run the example script
Two minutes per tool, and the next model you try already knows you.
Questions
- Can OpenRouter remember me across models?
- Not by itself. OpenRouter routes your requests to hundreds of models, but every conversation starts blank. Persistent memory has to come from the app you chat in, or from a memory layer like Tabula connected over MCP.
- How do I add memory to LibreChat?
- Add Tabula as a streamable-http MCP server in librechat.yaml, with your Tabula token in the Authorization header. Every model you run inside LibreChat then reads and writes the same memory.
- Does Tabula replace mem0 or Supermemory?
- No. mem0 and Supermemory give an app a memory of its users. Tabula is the user's own memory across every AI and tool they use. If you are building an app, you can use both at once.
- Do I need to give Tabula my OpenRouter API key?
- No. Tabula never touches your model keys. Your app talks to OpenRouter for models and to Tabula for memory, separately.