Memstate AI - Agent Memory System
OfficialMemstate AI is a hosted, versioned memory system for AI agents that lets you store, retrieve, search, and manage structured knowledge across sessions via the Model Context Protocol (MCP).
Store memories from markdown/text (
memstate_remember): Save task summaries, decisions, meeting notes, or any prose — the server automatically extracts keypaths, detects conflicts, and versions everythingSet specific key-value facts (
memstate_set): Store simple values at explicit hierarchical keypaths (e.g.config.database.port = 5432)Browse and retrieve memories (
memstate_get): List all projects, browse a project tree, retrieve a subtree by keypath, or fetch a single memory by ID — supports time-travel via revision numbersSemantic search (
memstate_search): Find memories by natural language meaning when you don't know the exact keypath, with optional filtering by project or categoryView version history (
memstate_history): Audit how a memory changed over time, see all past values with timestamps, and recover previous versionsSoft-delete memories (
memstate_delete/memstate_delete_project): Remove individual keypaths, subtrees, or entire projects while preserving full history via tombstones — deletions are reversibleConflict detection: Automatically identifies and preserves contradicting facts to maintain a reliable knowledge base
Constant token cost: Load summaries first and drill into details on demand — O(1) token usage regardless of memory scale
Cross-session continuity: Deterministic recall across sessions, compatible with Claude Desktop, Cursor, Cline, Windsurf, Kilo Code, and Roo Code
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Memstate AI - Agent Memory System search my memories for the project deployment steps"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Memstate AI - MCP
Versioned memory for AI agents. Store facts, detect conflicts, and track how decisions change over time — exposed as a hosted MCP server.
Why Memstate?
RAG (most other memory systems) | Memstate AI | |
Token usage per conversation | ~7,500 | ~1,500 |
Agent visibility | Black box | Full transparency |
Memory versioning | None | Full history |
Token growth as memories scale | O(n) | O(1) |
Infrastructure required | Yes | None — hosted SaaS |
Other memory systems dump everything into your context window and hope for the best. Memstate gives your agent a structured, versioned knowledge base it navigates precisely — load only what you need, know what changed, know when facts conflict.
Related MCP server: BuildAutomata Memory MCP Server
Benchmarks
We built an open-source benchmark suite that tests what actually matters for agent memory: can your system store facts, recall them accurately across sessions, detect conflicts when things change, and maintain context as a project evolves?
Head-to-Head: Memstate AI vs Mem0
Both systems were tested under identical conditions using the same agent (Claude Sonnet 4.6, temperature 0), the same scenarios, and the same scoring rubric.
Metric | Memstate AI | Mem0 | Winner |
Overall Score | 69.1 | 15.4 | Memstate |
Accuracy (fact recall) | 74.1 | 12.6 | Memstate |
Conflict Detection | 85.5 | 19.0 | Memstate |
Context Continuity | 63.7 | 10.1 | Memstate |
Token Efficiency | 22.3 | 30.6 | Mem0 |
Scoring weights: Accuracy 40%, Conflict Detection 25%, Context Continuity 25%, Token Efficiency 10%.
Per-Scenario Breakdown
The benchmark runs five real-world scenarios that simulate multi-session agent workflows:
Scenario | Memstate AI | Mem0 |
Web App Architecture Evolution | 43.2 | 55.6 |
Auth System Migration | 66.2 | 10.2 |
Database Schema Evolution | 72.7 | 7.0 |
API Versioning Conflicts | 86.5 | 0.9 |
Team Decision Reversal | 77.2 | 3.3 |
Mem0 won the first scenario (simple architecture tracking), but struggled severely on scenarios requiring contradiction handling, cross-session context, and decision reversal tracking — scoring near zero on three of five scenarios.
Why Memstate Wins
The benchmark reveals a fundamental architectural difference:
Mem0 uses embedding-based semantic search. Facts are chunked, embedded, and retrieved by similarity. This works for simple lookups but breaks down when:
Facts contradict earlier facts (the system can't distinguish current vs. outdated)
Precise recall is needed (embeddings return "similar" results, not exact ones)
Write-to-read latency matters (new memories take seconds to become searchable)
Memstate uses structured, versioned key-value storage. Every fact lives at an explicit keypath with a full version history. This means:
Conflict detection is built in — when a new fact contradicts an old one, the system knows and preserves both versions
Recall is deterministic — you get back exactly what was stored, not an approximate match
Cross-session continuity is reliable — the agent navigates a structured tree rather than hoping semantic search surfaces the right context
Token cost stays O(1) — the agent loads summaries first and drills into detail only when needed, instead of dumping all potentially-relevant embeddings into the context window
Fairness Notes
Both systems used the same agent model, temperature, and evaluation rubric
Mem0 was given a 10-second ingestion delay between writes and reads to account for its async embedding pipeline
Mem0 scores higher on token efficiency, but this metric should be read in context — lower token usage can simply reflect less information being returned. A system that retrieves incomplete or incorrect facts uses fewer tokens per response but may require more follow-up calls, ultimately costing more tokens to reach the same answer
The benchmark source code is included in this repository for full reproducibility
Mem0 may perform differently with custom configuration or a different embedding model
Quick Start
Get your API key at memstate.ai/dashboard, then add to your MCP client config:
{
"mcpServers": {
"memstate": {
"command": "npx",
"args": ["-y", "@memstate/mcp"],
"env": {
"MEMSTATE_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}No Docker. No database. No infrastructure. Running in 60 seconds.
Client Setup
Claude Desktop
Config location:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"memstate": {
"command": "npx",
"args": ["-y", "@memstate/mcp"],
"env": { "MEMSTATE_API_KEY": "YOUR_API_KEY_HERE" }
}
}
}Claude Code
claude mcp add memstate npx @memstate/mcp -e MEMSTATE_API_KEY=YOUR_API_KEY_HERECursor
In Cursor Settings → MCP → Add Server — same JSON format as Claude Desktop above.
Cline / Windsurf / Kilo Code / Roo Code
All support the same stdio MCP config format. Add to your client's MCP settings file.
Core Tools
Tool | When to use |
| Store markdown, task summaries, decisions. Server extracts keypaths and detects conflicts automatically. Use for most writes. |
| Set a single keypath to a short value (e.g. |
| Browse all memories for a project or subtree. Use at the start of every task. |
| Semantic search by meaning when you don't know the exact keypath. |
| See how a piece of knowledge changed over time — full version chain. |
| Soft-delete a keypath. Creates a tombstone; full history is preserved. |
| Soft-delete an entire project and all its memories. |
How keypaths work
Memories are organized in hierarchical dot-notation:
project.my_app.database.schema
project.my_app.auth.provider
project.my_app.deploy.environmentKeypaths are auto-prefixed: keypath="database" with project_id="my_app" → project.my_app.database. Your agent can drill into exactly what it needs — no full-context dumps.
How It Works
Agent: memstate_remember(project_id="my_app", content="## Auth\nUsing SuperTokens...")
↓
Server extracts keypaths: [project.my_app.auth.provider, ...]
↓
Conflict detection: compare against existing memories at those keypaths
↓
New version stored — old version preserved in history chain
↓
Next session: memstate_get(project_id="my_app") → structured summaries only
↓
Agent drills into project.my_app.auth only when it needs auth detailsToken cost stays constant regardless of how many total memories exist.
Add to Your Agent Instructions
Copy into your AGENTS.md or system prompt:
## Memory (Memstate MCP)
### Before each task
- memstate_get(project_id="my_project") — browse existing knowledge
- memstate_search(query="topic", project_id="my_project") — find by meaning
### After each task
- memstate_remember(project_id="my_project", content="## Summary\n- ...", source="agent")
### Tool guide
- memstate_remember — markdown summaries, decisions, task results (preferred)
- memstate_set — single short values only (config flags, status)
- memstate_get — browse/retrieve before tasks
- memstate_search — semantic lookup when keypath unknown
- memstate_history — audit how knowledge evolved
- memstate_delete — remove outdated memories (history preserved)Environment Variables
Variable | Default | Description |
| (required) | API key from memstate.ai/dashboard |
|
| Override for self-hosted deployments |
Verify Your Connection
MEMSTATE_API_KEY=your_key npx @memstate/mcp --testPrints all available tools and confirms your API key works.
Built for AI agents that deserve to know what they know.
Available Tools
7 toolsmemstate_deleteA
Soft-delete a memory by keypath. Creates a tombstone version preserving full history. The memory can be un-deleted by setting a new value at the same keypath.
USE THIS WHEN: You need to remove outdated or incorrect memories, clean up a keypath subtree, or mark memories as no longer relevant. NOT FOR: Updating content (use memstate_set or memstate_remember to overwrite with new content instead).
memstate_delete(project_id="myapp", keypath="config.old_setting") memstate_delete(project_id="myapp", keypath="config", recursive=true) → deletes config and all children
History is preserved. Use memstate_history to see the deletion in the version chain. Keypath is auto-prefixed.
Inputs: project_id (required), keypath (required), recursive. Returns: result
memstate_delete_projectA
Soft-delete an entire project and all its memories. Creates tombstone versions for every memory, preserving full history. The project is hidden from listings but can be restored by creating a new project with the same ID.
USE THIS WHEN: You want to remove all memories for a project, e.g. cleaning up test data or decommissioning a project.
memstate_delete_project(project_id="old-project")
All memories get individual tombstone versions. History is preserved via memstate_history.
Inputs: project_id (required). Returns: result
memstate_getA
Browse and retrieve memories. Use BEFORE starting tasks to fetch existing knowledge.
USE THIS WHEN: You need to read what's already stored — list projects, browse a project tree, or get content at a keypath. NOT FOR: Saving new content (use memstate_remember for markdown/summaries, memstate_set for one keypath value).
memstate_get() → list all projects memstate_get(project_id="myapp") → full project tree memstate_get(project_id="myapp", keypath="database") → subtree memstate_get(project_id="myapp", keypath="db", include_content=true) → with full content memstate_get(memory_id="mem_abc123") → single memory by ID
Keypath is auto-prefixed. Default recursive=true.
Inputs: project_id, keypath, memory_id, recursive, +3 more. Returns: result
memstate_historyA
View version history for a keypath or memory chain. Use when you need to see how a value changed over time.
USE THIS WHEN: Debugging past state, auditing changes, or recovering a previous value. NOT FOR: Reading current content (use memstate_get) or saving (use memstate_remember or memstate_set).
memstate_history(project_id="myapp", keypath="config.database.port") memstate_history(memory_id="mem_abc123")
Returns all versions with timestamps; latest is marked is_latest=true.
Inputs: project_id, keypath, memory_id. Returns: result
memstate_rememberA
Save markdown, task summaries, or any text. Server extracts keypaths and creates structured memories automatically. This is the PREFERRED way to save information.
USE THIS WHEN: Saving task summaries, meeting notes, docs, or any text with multiple facts. The server handles organization, conflict detection, and versioning. NOT FOR: Setting one specific keypath to a short value (e.g. config.port = "8080") — use memstate_set for that.
memstate_remember(project_id="myapp", content="## Task Summary\n- Added OAuth\n- Files: auth.go, middleware.go", source="agent") memstate_remember(project_id="myapp", content="Architecture decision: migrated to JWT tokens for session management")
Content limit: 100,000 chars. Processing is async (~15-18s); returns job_id immediately.
Inputs: project_id (required), content (required), source, context. Returns: result
memstate_searchA
Find memories by meaning (semantic search). Use BEFORE starting tasks when you don't know the exact keypath.
USE THIS WHEN: You want to find relevant memories by topic or meaning, not by exact keypath. NOT FOR: Saving content (use memstate_remember for markdown/summaries, memstate_set for one keypath value).
memstate_search(query="how is authentication configured", project_id="myapp") memstate_search(query="database connection settings", project_id="myapp")
Returns summaries with similarity scores. Use memstate_get(memory_id="...") to fetch full content of a result.
Inputs: query (required), project_id, limit, categories, +2 more. Returns: result
memstate_setA
Set one keypath to a short value. Only for simple key=value facts like config, status, or version numbers.
USE THIS WHEN: You need to store ONE specific value at a known keypath (e.g. a port number, a status flag, a version string). NOT FOR: Task summaries, markdown, or text with multiple facts — use memstate_remember instead.
memstate_set(project_id="myapp", keypath="config.database.port", value="5432") memstate_set(project_id="myapp", keypath="status.deployment", value="production") memstate_set(project_id="myapp", keypath="version.current", value="2.1.0")
Value limit: 2,000 chars. If longer, use memstate_remember instead. Keypath is auto-prefixed.
Inputs: project_id (required), keypath (required), value (required), category, +1 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose with minimal overlap. The descriptions explicitly differentiate tools (e.g., memstate_remember vs. memstate_set, memstate_get vs. memstate_search) and include 'USE THIS WHEN' and 'NOT FOR' sections that prevent confusion. The tools cover different aspects of memory management without redundancy.
All tools follow a consistent 'memstate_verb' naming pattern (e.g., memstate_delete, memstate_get, memstate_search). This uniformity makes it easy to identify the server's tools and their functions at a glance, with no deviations in style or structure across the set.
With 7 tools, the server is well-scoped for an agent memory system. Each tool serves a specific, necessary function (e.g., create, read, update, delete, search, history, project management), and there are no extraneous tools. The count aligns with the domain's complexity without being overwhelming or insufficient.
The tool set provides comprehensive coverage for memory management, including CRUD operations (memstate_remember/set for create/update, memstate_get for read, memstate_delete for delete), search (memstate_search), version history (memstate_history), and project-level management (memstate_delete_project). There are no obvious gaps; agents can handle full memory lifecycles and workflows effectively.
Maintenance
Related MCP Connectors
Persistent memory for AI agents. EU-hosted, privacy-first, hybrid recall, contradiction detection.
Hosted persistent memory with semantic search, importance and TTL for AI agents.
Persistent knowledge graph for AI-augmented teams. Store decisions, findings, and standing rules across agent sessions with semantic search and typed connections. Includes cross-session memory, audit trail, workspace isolation, and secret detection. Built for teams running agents that need to remember. Free until launch with team tier as default, anon trial available.
Patent-pending semantic memory for AI agents: quality-gated writes, conflict tracking. Free trial.
Related MCP Servers
AlicenseAqualityFmaintenanceAn MCP server that integrates with mem0.ai to help users store, retrieve, and search coding preferences for more consistent programming practices.9662Apache 2.0- FlicenseNot gradedqualityDmaintenanceProvides AI agents with persistent, searchable memory that survives across conversations using semantic search, temporal versioning, and smart organization. Enables long-term context retention and cross-session continuity for AI assistants.14-
- FlicenseNot gradedqualityNot gradedmaintenanceEnables ChatGPT Desktop to save and manage conversation memories locally in SQLite, providing memory search, summarization, and markdown export capabilities to replace the built-in memory feature when in developer mode.-
- AlicenseNot gradedqualityDmaintenanceA local, persistent memory system for AI coding assistants that stores decisions, patterns, and session context via MCP tools. It enables cross-session memory management using SQLite and optional vector search without external dependencies or cloud storage.51 npm3MIT