What you get
- Persistent memory across sessions, tools, and machines. Whatever your agent saves today is still there tomorrow — and on your other devices.
- Agent-agnostic. MCP is an open standard. We support every client that speaks it.
- 8 memory tools out of the box:
memory_write,memory_search,memory_user_context,memory_list_user,memory_delete_user,memory_bulk_write,memory_list_collections,memory_stats. - Tenant isolation. Your API key scopes every call to your account; no other tenant can see your data.
Two ways to connect
stdio (best for desktop IDEs)
The MCP client spawns a small Python server on your machine. Low latency, isolated process per user. Needs Python 3.10+.
curl -fsSL https://maxmem.it/install/maxmem-mcp.sh | bash export PATH="$HOME/.local/bin:$PATH" export MAXMEM_API_KEY=mm_live_xxxxxxxxxxxxxxxxxxxxxxxxx
streamable-http (no install, for any client)
Point your MCP client at our shared HTTPS endpoint. Nothing to install.
URL: https://mcp.maxmem.it/mcp Header: X-MaxMem-Api-Key: mm_live_xxxxxxxxxxxxxxxxxxxxxxxxx
Step 1 — Generate an API key
- Sign in to your MaxMem dashboard.
- Open API Keys.
- Create a key. Pick the scopes your agent actually needs — a research agent usually only needs
memory:read. - Copy the
mm_live_...value once. You cannot retrieve it again (only the prefix is stored).
Step 2 — Configure your MCP client
Claude Code
stdio transport, project or global config.
{
"mcpServers": {
"maxmem": {
"command": "maxmem-mcp",
"env": { "MAXMEM_API_KEY": "mm_live_xxxxxxxxxxxxxxxxxxxxxxxxx" }
}
}
}
Remote transport (no install):
{
"mcpServers": {
"maxmem": {
"url": "https://mcp.maxmem.it/mcp",
"headers": { "X-MaxMem-Api-Key": "mm_live_xxxxxxxxxxxxxxxxxxxxxxxxx" }
}
}
}
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS).
{
"mcpServers": {
"maxmem": {
"command": "maxmem-mcp",
"env": { "MAXMEM_API_KEY": "mm_live_xxxxxxxxxxxxxxxxxxxxxxxxx" }
}
}
}
Cursor
Edit .cursor/mcp.json (repo-scoped) or ~/.cursor/mcp.json (global).
{
"mcpServers": {
"maxmem": {
"command": "maxmem-mcp",
"env": { "MAXMEM_API_KEY": "mm_live_xxxxxxxxxxxxxxxxxxxxxxxxx" }
}
}
}
Continue.dev / Cline / any generic client
If your client supports a command + env stdio definition, use the same three keys above. If it only supports remote servers, use the HTTPS URL form.
Custom agent via the official MCP SDK (Python)
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
import asyncio
async def main():
params = StdioServerParameters(
command="maxmem-mcp",
env={"MAXMEM_API_KEY": "mm_live_..."},
)
async with stdio_client(params) as (r, w):
async with ClientSession(r, w) as s:
await s.initialize()
res = await s.call_tool("memory_search", {
"query": "what does the user prefer?",
"external_user_id": "user-42",
})
print(res.content[0].text)
asyncio.run(main())
Tool reference
| Tool | What it does |
|---|---|
memory_list_collections | Discover memory collections for your tenant. |
memory_write | Persist a memory entry: content, collection_id, external_user_id, optional memory_type (episodic / semantic / procedural / preference), tags. |
memory_search | Semantic search over stored memories. Filters: external_user_id, collection_ids, memory_types, tags. |
memory_user_context | Compact per-user summary, ready to paste into a system prompt. |
memory_list_user | Full list of memories for a user. |
memory_delete_user | GDPR right-to-erasure. Irreversible. |
memory_bulk_write | Persist many entries in one call. |
memory_stats | Aggregate statistics for your tenant. |
Security
- API keys are stored in your client's config (stdio) or an HTTP header (remote). Never in tool arguments, never logged.
- Revocation is immediate from the dashboard.
- Each call is scoped to the tenant owning the API key; a stolen key from one tenant can never reach another's data.
external_user_idis normalized before hitting the vector store (lowercased for emails, stripped of+/spaces for phones, stripped of WhatsApp suffixes). Same human → same memory key, regardless of format.
Troubleshooting
- 401 / "Authentication required" — the key is wrong, revoked, or missing the required scope (e.g.
memory:write). - 403 "Scope insufficient" — add the missing scope to the key (dashboard → API Keys → Edit).
- Your client says "Connection closed" right after start — make sure
MAXMEM_API_KEYis set in the environment block your client passes to the spawned process, not just your shell. - Remote URL returns 421 Misdirected Request — upgrade your MCP client; very old versions of the SDK reuse HTTPS connections across hosts and confuse the server.
Quotas & pricing
Your plan determines concurrent collections, max entries, monthly search / write operations, and rate limits. See the billing page in your dashboard.