Skip to main content
Glama
Memstate AI - Agent Memory System

Memstate AI - Agent Memory System

Official
by memstate-ai

Memstate AI - MCP

npm version License: MIT MCP Node memstate-mcp MCP server

为 AI 智能体提供版本化记忆。 存储事实、检测冲突并追踪决策随时间的变化——以托管 MCP 服务器的形式提供。

仪表盘 · 文档 · 定价


为什么选择 Memstate?

RAG(大多数其他记忆系统)

Memstate AI

每次对话的 Token 使用量

~7,500

~1,500

智能体可见性

黑盒

完全透明

记忆版本控制

无

完整历史记录

记忆扩展时的 Token 增长

O(n)

O(1)

所需基础设施

是

无 — 托管 SaaS

其他记忆系统将所有内容转储到您的上下文窗口中,并祈祷效果良好。Memstate 为您的智能体提供了一个结构化、版本化的知识库,它可以精确地进行导航——只加载所需内容,了解发生了什么变化,并知晓事实何时发生冲突。


Related MCP server: BuildAutomata Memory MCP Server

基准测试

我们构建了一个 开源基准测试套件,用于测试对智能体记忆真正重要的事情:您的系统能否存储事实、跨会话准确回忆、在事物发生变化时检测冲突,并随着项目的演进保持上下文?

正面交锋:Memstate AI vs Mem0

两个系统均在相同条件下进行了测试,使用相同的智能体(Claude Sonnet 4.6,温度 0)、相同的场景和相同的评分标准。

指标

Memstate AI

Mem0

胜出者

总分

69.1

15.4

Memstate

准确性(事实回忆)

74.1

12.6

Memstate

冲突检测

85.5

19.0

Memstate

上下文连续性

63.7

10.1

Memstate

Token 效率

22.3

30.6

Mem0

评分权重:准确性 40%,冲突检测 25%,上下文连续性 25%,Token 效率 10%。

分场景细分

该基准测试运行了五个模拟多会话智能体工作流的真实场景:

场景

Memstate AI

Mem0

Web 应用架构演进

43.2

55.6

身份验证系统迁移

66.2

10.2

数据库模式演进

72.7

7.0

API 版本冲突

86.5

0.9

团队决策逆转

77.2

3.3

Mem0 在第一个场景(简单的架构追踪)中获胜,但在需要处理矛盾、跨会话上下文和决策逆转追踪的场景中表现严重不佳——在五个场景中的三个场景得分接近于零。

为什么 Memstate 胜出

基准测试揭示了一个根本性的架构差异:

Mem0 使用基于嵌入(Embedding)的语义搜索。 事实被分块、嵌入并按相似度检索。这适用于简单的查找,但在以下情况会失效:

  • 事实与先前的事实相矛盾(系统无法区分当前事实与过时事实)

  • 需要精确回忆(嵌入返回的是“相似”结果,而非精确结果)

  • 读写延迟很重要(新记忆需要几秒钟才能变得可搜索)

Memstate 使用结构化、版本化的键值存储。 每个事实都位于一个明确的键路径(keypath)上,并具有完整的版本历史。这意味着:

  • 内置冲突检测 —— 当新事实与旧事实冲突时,系统会知晓并保留两个版本

  • 回忆是确定性的 —— 您得到的是存储的确切内容,而不是近似匹配

  • 跨会话连续性可靠 —— 智能体导航的是结构化树,而不是寄希望于语义搜索能浮现出正确的上下文

  • Token 成本保持 O(1) —— 智能体先加载摘要,仅在需要时深入细节,而不是将所有可能相关的嵌入转储到上下文窗口中

公平性说明

  • 两个系统使用了相同的智能体模型、温度和评估标准

  • Mem0 在写入和读取之间被给予了 10 秒的摄入延迟,以考虑其异步嵌入管道

  • Mem0 在 Token 效率上得分更高,但该指标应在上下文中解读——较低的 Token 使用量可能仅仅反映了返回的信息较少。一个检索不完整或不正确事实的系统每次响应使用的 Token 更少,但可能需要更多的后续调用,最终为了达到相同的答案需要消耗更多的 Token

  • 基准测试源代码包含在此存储库中,以实现完全的可复现性

  • Mem0 在自定义配置或使用不同嵌入模型时可能会有不同的表现


快速入门

在 memstate.ai/dashboard 获取您的 API 密钥,然后添加到您的 MCP 客户端配置中:

{
  "mcpServers": {
    "memstate": {
      "command": "npx",
      "args": ["-y", "@memstate/mcp"],
      "env": {
        "MEMSTATE_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

无需 Docker。无需数据库。无需基础设施。60 秒内即可运行。


客户端设置

Claude Desktop

配置位置:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %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_HERE

Cursor

在 Cursor 设置 → MCP → 添加服务器 — 与上述 Claude Desktop 的 JSON 格式相同。

Cline / Windsurf / Kilo Code / Roo Code

全部支持相同的 stdio MCP 配置格式。添加到您客户端的 MCP 设置文件中。


核心工具

工具

使用时机

memstate_remember

存储 Markdown、任务摘要、决策。服务器自动提取键路径并检测冲突。用于大多数写入操作。

memstate_set

将单个键路径设置为短值(例如 config.port = 8080)。不适用于长文本。

memstate_get

浏览项目或子树的所有记忆。在每个任务开始时使用。

memstate_search

当您不知道确切键路径时,按含义进行语义搜索。

memstate_history

查看知识随时间的变化情况 —— 完整的版本链。

memstate_delete

软删除键路径。创建墓碑记录;保留完整历史记录。

memstate_delete_project

软删除整个项目及其所有记忆。

键路径(Keypaths)的工作原理

记忆以分层点符号组织:

project.my_app.database.schema
project.my_app.auth.provider
project.my_app.deploy.environment

键路径会自动添加前缀:keypath="database" 且 project_id="my_app" → project.my_app.database。您的智能体可以深入了解它确切需要的内容 —— 无需全上下文转储。


工作原理

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 details

无论存在多少总记忆,Token 成本保持恒定。


添加到您的智能体指令

复制到您的 AGENTS.md 或系统提示词中:

## 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)

环境变量

变量

默认值

描述

MEMSTATE_API_KEY

(必需)

来自 memstate.ai/dashboard 的 API 密钥

MEMSTATE_MCP_URL

https://mcp.memstate.ai

自托管部署的覆盖地址

验证您的连接

MEMSTATE_API_KEY=your_key npx @memstate/mcp --test

打印所有可用工具并确认您的 API 密钥有效。

专为值得了解自身所知的 AI 智能体而构建。

Available Tools

7 tools
memstate_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.

NameRequiredDescriptionDefault
project_idYesRequired. Project containing the memory.
keypathYesRequired. Keypath to delete (auto-prefixed with 'project.{project_id}.').
recursiveNoIf true, delete the entire keypath subtree. Default: false.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: soft-deletion (not permanent), tombstone creation, history preservation, undeletion capability, and auto-prefixing behavior. It also references memstate_history for viewing deletions. The only minor gap is lack of explicit mention about permissions or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections, uses bold headings for emphasis, includes practical examples, and every sentence adds value. It's appropriately sized for a tool with important behavioral nuances and sibling distinctions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (soft-deletion with history preservation), the description provides comprehensive context. With no annotations but an output schema present, it covers behavioral aspects thoroughly while appropriately deferring return value details to the output schema. It addresses key sibling relationships and usage scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some value by providing concrete examples with project_id='myapp' and showing recursive behavior, but doesn't significantly enhance the parameter understanding beyond what the schema already documents clearly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('soft-delete a memory by keypath') and distinguishes it from siblings by explaining it creates tombstone versions and preserves history. It explicitly contrasts with memstate_set and memstate_remember for updating content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit 'USE THIS WHEN' and 'NOT FOR' sections that provide clear guidance on when to use this tool versus alternatives. It mentions specific scenarios (removing outdated memories, cleaning up subtrees) and names alternative tools for different use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

NameRequiredDescriptionDefault
project_idYesRequired. Project ID to soft-delete.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so well. It discloses key behavioral traits: it's a soft-delete (not permanent), creates tombstone versions for all memories, preserves history, hides the project from listings, and can be restored by creating a new project with the same ID. It doesn't mention rate limits or auth needs, but covers the essential destructive nature and recovery mechanism adequately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the core action. The 'USE THIS WHEN' section is helpful but slightly repetitive of the purpose. The example usage is concise and adds clarity. Minor improvements could tighten it, but overall it's efficient with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (destructive operation with recovery), no annotations, and an output schema (which handles return values), the description is complete. It covers purpose, usage, behavior, and parameters adequately, providing all necessary context for an agent to invoke it correctly without over-explaining.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the baseline is 3. The description adds value by providing an example usage (memstate_delete_project(project_id='old-project')) which clarifies the parameter's role in context, though it doesn't add deep semantic details beyond what the schema already states ('Required. Project ID to soft-delete.').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('soft-delete an entire project and all its memories') and distinguishes it from siblings like memstate_delete (which likely deletes individual memories) by specifying it affects the entire project. It explains the outcome (creates tombstone versions, preserves history, hides from listings) which clarifies the scope beyond just the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It includes an explicit 'USE THIS WHEN' section that provides clear guidance: 'You want to remove all memories for a project, e.g. cleaning up test data or decommissioning a project.' This directly tells the agent when to use this tool versus alternatives, with practical examples.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

NameRequiredDescriptionDefault
project_idNoProject to retrieve from. If omitted, lists all projects.
keypathNoSubkeypath within project. If omitted with project_id, returns the full project tree.
memory_idNoAlternative: get a single memory by its UUID
recursiveNoInclude subtree (default: true)
include_contentNoIf true, include full memory content in response (not just keypaths)
at_revisionNoOptional revision number for time-travel queries
content_limitNoMax memories to hydrate when include_content=true (default: 200, max: 1000)

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and adds valuable behavioral context. It explains that 'Keypath is auto-prefixed' and 'Default recursive=true', which are important behavioral traits not evident from the schema alone. It also provides example usage patterns showing different parameter combinations and their effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections, bullet points for examples, and zero wasted text. Every sentence serves a purpose: establishing context, providing usage guidelines, showing examples, and noting important defaults. It's appropriately sized for a tool with 7 parameters and complex usage patterns.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters, multiple usage patterns) and the presence of an output schema, the description is complete. It covers purpose, guidelines, behavioral traits, and provides concrete examples. The output schema existence means the description doesn't need to explain return values, and it adequately addresses the tool's scope and limitations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some value through the usage examples that show how parameters combine (e.g., project_id alone vs. with keypath, include_content=true), but doesn't provide significant additional semantic meaning beyond what's already documented in the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Browse and retrieve memories' with specific verbs and resources. It distinguishes from siblings by explicitly contrasting with memstate_remember (for saving markdown/summaries) and memstate_set (for one keypath value), making the distinction clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: 'Use BEFORE starting tasks to fetch existing knowledge' and includes dedicated 'USE THIS WHEN:' and 'NOT FOR:' sections. It names specific alternatives (memstate_remember, memstate_set) and gives concrete scenarios for when to use this tool (list projects, browse project tree, get content at keypath).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

NameRequiredDescriptionDefault
project_idNoRequired with keypath
keypathNoGet history for this keypath
memory_idNoOr get history for a specific memory chain by ID

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it returns 'all versions with timestamps' and marks the latest with 'is_latest=true.' However, it lacks details on potential limitations like rate limits, pagination, or error conditions, which would be helpful for a read operation with historical data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded: it starts with the core purpose, followed by usage guidelines, examples, and return details. Every sentence adds value—no waste. The use of bold headers and code examples improves readability without unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no annotations, but with an output schema), the description is complete enough. It covers purpose, usage, parameters, and return values. Since an output schema exists, the description doesn't need to explain return values in detail, and it adequately addresses the context provided by sibling tools and schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the baseline is 3. The description adds value by clarifying parameter semantics: it explains that 'project_id' is 'Required with keypath' (though this is also in the schema) and provides example usage with both 'keypath' and 'memory_id', showing how they are used alternatively. This enhances understanding beyond the schema's basic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'View version history for a keypath or memory chain.' It specifies the verb ('view') and resource ('version history'), and distinguishes it from siblings by explicitly naming alternatives (memstate_get for current content, memstate_remember/memstate_set for saving). This is specific and avoids tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidelines with dedicated sections: 'USE THIS WHEN:' lists debugging, auditing, and recovery scenarios, and 'NOT FOR:' explicitly names when not to use it (reading current content or saving) and specifies alternative tools (memstate_get, memstate_remember, memstate_set). This gives clear context and exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

NameRequiredDescriptionDefault
project_idYesRequired. Project to store in (e.g. 'myapp'). Auto-creates if new.
contentYesMarkdown or text to remember (max 100,000 chars). Server extracts keypaths and creates structured memories automatically.
sourceNoSource type: agent, readme, docs, meeting, code
contextNoOptional hint to guide keypath extraction

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: content limit (100,000 chars), async processing with timing (~15-18s), immediate job_id return, automatic project creation, and server-side organization/conflict detection/versioning. It doesn't mention error conditions or retry behavior, keeping it from a perfect score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with clear sections, front-loaded key information, and every sentence adds value. It uses bold headings for guidance, includes practical examples, and provides critical constraints without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (async processing, automatic extraction), 100% schema coverage, and presence of an output schema, the description provides excellent context. It covers purpose, usage guidelines, behavioral traits, constraints, and examples, making it complete enough for an agent to understand when and how to use this tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds minimal parameter semantics beyond the schema: it reinforces content limits and provides example values in the code snippets, but doesn't significantly enhance understanding of parameters beyond what the schema already documents well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Save markdown, task summaries, or any text' with server-side extraction of keypaths and structured memory creation. It explicitly distinguishes from sibling tools by stating this is the 'PREFERRED way to save information' and contrasting with memstate_set for specific keypath assignments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance with dedicated 'USE THIS WHEN:' and 'NOT FOR:' sections, listing specific use cases (task summaries, meeting notes, docs) and clear exclusions (setting one specific keypath to short values). It names the alternative tool (memstate_set) for excluded scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

NameRequiredDescriptionDefault
project_idYesRequired. Project to store in (e.g. 'myapp'). Auto-creates if new.
keypathYesRequired. Hierarchical path like 'config.port' or 'status'. Auto-prefixed with 'project.{project_id}.'
valueYesThe value to store (max 2,000 chars). Short, simple values only — not markdown.
categoryNoCategory: decision, preference, fact, task, context, requirement, note, code, learning
topicsNoOptional additional topics/tags

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and delivers well. It discloses key behavioral traits: value limit (2,000 chars), auto-prefixing of keypath, and that it's for storage/mutation (implied by 'set'). It doesn't mention error conditions, permissions, or rate limits, but provides substantial operational context beyond basic function.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly structured and concise. It opens with the core purpose, provides clear usage guidelines in dedicated sections, includes practical examples, and adds important constraints. Every sentence earns its place with no wasted words, and information is front-loaded appropriately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (storage operation with 5 parameters), 100% schema coverage, and presence of an output schema, the description is complete. It covers purpose, usage guidelines, constraints, and provides examples. The output schema means return values don't need explanation in the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds minimal parameter semantics beyond the schema: it reinforces that value should be 'short, simple values only' and provides concrete examples of keypath usage. However, it doesn't explain the optional 'category' parameter's purpose or provide guidance on when to use topics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Set one keypath to a short value' with specific examples of what to store (config, status, version numbers). It explicitly distinguishes from sibling memstate_remember by stating 'Only for simple key=value facts' and 'NOT FOR: Task summaries, markdown, or text with multiple facts.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance with dedicated sections: 'USE THIS WHEN:' for appropriate scenarios (storing one specific value at known keypath) and 'NOT FOR:' for exclusions (task summaries, markdown, multi-fact text). It names the alternative tool (memstate_remember) and includes a value length threshold (2,000 chars) for when to switch tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.0.2
    • Changedmemstate_search1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Natural language search query"New value: +"Natural language search query. Leave empty to explore/list all memories ordered by keypath."
  2. 7 tool updatesv1.0.1
    • First observedmemstate_delete
    • First observedmemstate_delete_project
    • First observedmemstate_get
    • First observedmemstate_history
    • First observedmemstate_remember
    • First observedmemstate_search
    • First observedmemstate_set

TDQS

A4.7/5.0

Scored across 7 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides 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
    -
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables 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.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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.
    36 npm
    3
    MIT