mem0-mcp-server
Click on "Install 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., "@mem0-mcp-serverRemember that I like dark mode"
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.
mem0-mcp-server
A local MCP server that exposes Mem0 as persistent memory tools to any MCP client: Codex, Claude Desktop, Cursor, and anything else that speaks MCP over stdio.
Everything runs on your own machine. Data lives under ~/.mem0/, there is no
cloud API and no API key required.
Why this exists
MCP clients like Codex already support memory tools over MCP, but most "memory server" setups push you toward a hosted service. This project is the opposite: Mem0 runs locally (Qdrant in embedded mode, SQLite for history), and the server is a thin MCP bridge in front of it.
The server is intentionally small. It implements just enough of the MCP protocol to expose a set of memory tools. No framework, no extra runtime, one Python file.
Related MCP server: GroundMemory
How it works
MCP client ── stdio ──▶ mcp_server.py ──▶ mem0.Memory (your Python env)
│
├─ Qdrant (local vector store)
└─ SQLite (history)The client starts mcp_server.py as a subprocess and talks to it over
newline-delimited JSON-RPC on stdin/stdout.
Tools
Tool | What it does |
| Store a memory (raw text by default, no LLM call) |
| Semantic search |
| List memories, newest first |
| Fetch one memory by ID |
| Replace the text/metadata of a memory |
| Delete one memory |
| Clear memories for a user and/or agent |
Requirements
Python 3.10 or newer
An MCP client (Codex, Claude Desktop, Cursor, ...)
Optional but recommended:
fastembedfor local semantic search
Install
The project is pip-installable:
python -m venv .venv
source .venv/bin/activate
pip install .If you prefer an editable install while developing:
pip install -e .Optional extras:
pip install ".[fastembed]" # local embeddings, recommended
pip install ".[ollama]" # use a local Ollama instance for embeddingsAlready have a Python environment with Mem0 installed? Then you don't need
to install anything. Just point your MCP client at
<REPO_DIR>/mcp_server.py and use that environment's Python.
Quick test
Run this before wiring up a client, so you know the server itself works:
mem0-mcp-server --self-testOr, without installing:
MEM0_DIR=/tmp/mem0_home \
<VENV_PYTHON> <REPO_DIR>/mcp_server.py --self-testThe self-test writes one memory ("我喜欢喝美式咖啡"), searches for it, and prints both results.
Register with an MCP client
In the commands below, <VENV_PYTHON> is the absolute path to your Python
interpreter and <REPO_DIR> is the absolute path to this repository.
Codex CLI
codex mcp add mem0-local -- \
<VENV_PYTHON> \
<REPO_DIR>/mcp_server.pyRestart Codex, then try: "list my mem0 memories" or "remember that I like dark mode".
Claude Desktop
claude mcp add mem0-local -- \
<VENV_PYTHON> \
<REPO_DIR>/mcp_server.pyCursor
Open the MCP settings in Cursor, add a new stdio server, and set the command to:
<VENV_PYTHON> <REPO_DIR>/mcp_server.pyIf you installed the package, you can also register the console script
mem0-mcp-server directly instead of pointing at mcp_server.py.
Embedding options
The server picks an embedding backend in this order:
OPENAI_API_KEYis set → OpenAI embeddings (1536 dims)fastembedis installed → FastEmbed withBAAI/bge-small-zh-v1.5(512 dims, works well for Chinese, first run downloads the model)Ollama is running and the
ollamapackage is installed → Ollama embeddingsNothing available →
MockEmbeddings, fully offline but all scores are 1.0
Environment variables:
Variable | Default | Purpose |
|
| FastEmbed model name |
|
| Ollama base URL |
|
| Ollama model name |
|
| Where memory data is stored |
Automatic memory hooks (Codex only)
The hooks/ directory contains two scripts that give Codex automatic memory:
on_session_start.py— prints recent memories at session start; Codex reads them as developer context.on_stop.py— saves the last user request + assistant reply after every turn. Each turn is captured once, deduplicated via~/.mem0/captured_turns/.
Install them:
cp <REPO_DIR>/hooks/hooks.json ~/.codex/hooks.jsonThen edit ~/.codex/hooks.json and replace the <VENV_PYTHON> and
<REPO_DIR> placeholders with real paths. The first time Codex runs the
hooks, it will ask you to review and trust them under /hooks.
These hooks are Codex-specific. Other MCP clients don't have this hook mechanism, so they get the memory tools but not automatic context loading or automatic turn saving.
Data and privacy
All data stays on your machine under
~/.mem0/(or$MEM0_DIR).Telemetry is disabled: the server sets
MEM0_TELEMETRY=falseat startup.Proxy environment variables are stripped at startup because the server only talks to local services, and a
socks://proxy can crash httpx during initialization.With no
OPENAI_API_KEY, no network request is made at all.
Known limitations
Default is
infer=False: memories are stored as raw text, without Mem0's LLM-based fact extraction, deduplication, or entity linking.This is a minimal MCP implementation. It covers the tools listed above and nothing more.
The server has been tested mainly with Codex. It speaks standard MCP, so other clients should work, but if something misbehaves, open an issue.
Project layout
mem0-mcp-server/
├── LICENSE
├── README.md
├── pyproject.toml
├── mcp_server.py
└── hooks/
├── hooks.json
├── on_session_start.py
└── on_stop.pyLicense
MIT. See LICENSE.
mem0-mcp-server(中文)
一个本地 MCP 服务器,把 Mem0 的记忆能力以 MCP 工具的形式暴露给任意客户端:Codex、Claude Desktop、Cursor,以及其他支持 stdio MCP 的 agent。
全部在本机运行,数据默认存在 ~/.mem0/,不依赖云端 API,也不需要 API key。
为什么做这个
Codex 这类 MCP 客户端本身支持通过 MCP 调用记忆工具,但常见的“记忆服务器”方案 往往把你往托管服务上引。这个项目反过来:Mem0 完全本地运行(Qdrant 嵌入式模式 + SQLite 历史记录),服务器只是它前面的一层很薄的 MCP 桥。
实现刻意保持精简:只实现了一组记忆工具需要的 MCP 协议部分,没有框架、没有额外 运行时,核心就是一个 Python 文件。
工作原理
MCP 客户端 ── stdio ──▶ mcp_server.py ──▶ mem0.Memory(你的 Python 环境)
│
├─ Qdrant(本地向量库)
└─ SQLite(历史记录)客户端把 mcp_server.py 作为子进程启动,通过 stdin/stdout 上的换行分隔
JSON-RPC 通信。
可用工具
工具 | 作用 |
| 存一条记忆(默认原文存储,不调 LLM) |
| 语义检索 |
| 列出记忆,新的在前 |
| 按 ID 取单条记忆 |
| 按 ID 修改记忆文本/元数据 |
| 按 ID 删除一条记忆 |
| 按 user/agent 清空记忆 |
环境要求
Python 3.10 及以上
一个 MCP 客户端(Codex、Claude Desktop、Cursor 等)
可选但推荐:
fastembed,用于本地语义检索
安装
项目支持 pip 安装:
python -m venv .venv
source .venv/bin/activate
pip install .开发时可以用可编辑安装:
pip install -e .可选依赖:
pip install ".[fastembed]" # 本地 embedding,推荐
pip install ".[ollama]" # 用本地 Ollama 做 embedding如果你已经有一个装好 Mem0 的 Python 环境,那什么都不用装,直接用那个环境的
Python 指向 <REPO_DIR>/mcp_server.py 注册即可。
快速自测
接客户端之前先跑一下,确认服务器本身没问题:
mem0-mcp-server --self-test不想安装也可以:
MEM0_DIR=/tmp/mem0_home \
<VENV_PYTHON> <REPO_DIR>/mcp_server.py --self-test自测会写入一条记忆(“我喜欢喝美式咖啡”)、检索它,然后打印结果。
注册到 MCP 客户端
下面命令里的 <VENV_PYTHON> 是你的 Python 解释器绝对路径,<REPO_DIR> 是
本仓库的绝对路径。
Codex CLI
codex mcp add mem0-local -- \
<VENV_PYTHON> \
<REPO_DIR>/mcp_server.py重启 Codex 后试试:“列出我的 mem0 记忆”,或者“记住我喜欢深色模式”。
Claude Desktop
claude mcp add mem0-local -- \
<VENV_PYTHON> \
<REPO_DIR>/mcp_server.pyCursor
打开 Cursor 的 MCP 设置,新增一个 stdio 服务器,命令填:
<VENV_PYTHON> <REPO_DIR>/mcp_server.py如果用 pip 安装过,也可以直接把控制台命令 mem0-mcp-server 注册进去,不用
指向 mcp_server.py。
Embedding 说明
服务器按下面的优先级选择 embedding:
设置了
OPENAI_API_KEY→ OpenAI embedding(1536 维)装了
fastembed→ FastEmbed +BAAI/bge-small-zh-v1.5(512 维,中文效果 好,首次运行会自动下载模型)本地 Ollama 在运行且装了
ollama包 → Ollama embedding都没有 →
MockEmbeddings,完全离线,但所有分数都是 1.0
环境变量:
变量 | 默认值 | 作用 |
|
| FastEmbed 模型名 |
|
| Ollama 地址 |
|
| Ollama 模型名 |
|
| 记忆数据存放位置 |
自动记忆钩子(仅 Codex)
hooks/ 里有两个脚本,给 Codex 提供自动记忆:
on_session_start.py:会话开始时打印最近的记忆,Codex 会把它当作 developer context 读入。on_stop.py:每轮回复结束后,把“用户请求 + Codex 回复”存进本地 Mem0, 每个 turn 只存一次,通过~/.mem0/captured_turns/去重。
安装:
cp <REPO_DIR>/hooks/hooks.json ~/.codex/hooks.json然后把 ~/.codex/hooks.json 里的 <VENV_PYTHON> 和 <REPO_DIR> 占位符换成
真实路径。Codex 第一次运行钩子时,会要求你在 /hooks 里审查并信任它们。
这套钩子是 Codex 专用的。其他 MCP 客户端没有这种钩子机制,所以它们能用记忆 工具,但没有自动加载上下文和自动保存每一轮对话的功能。
数据与隐私
所有数据都在本机
~/.mem0/(或$MEM0_DIR)下。遥测已关闭:服务器启动时会设置
MEM0_TELEMETRY=false。启动时会清掉代理环境变量,因为本服务只访问本地服务,而
socks://代理会让 httpx 初始化崩溃。不设置
OPENAI_API_KEY时,完全不会发起网络请求。
已知边界
默认
infer=False:记忆按原文存储,不做 Mem0 的 LLM 事实抽取、去重和实体 链接。这是最小实现,MCP 协议只覆盖上面列出的工具。
目前主要用 Codex 测过。它实现的是标准 MCP,其他客户端理论上能用,但如果出 问题,欢迎提 issue。
目录结构
mem0-mcp-server/
├── LICENSE
├── README.md
├── pyproject.toml
├── mcp_server.py
└── hooks/
├── hooks.json
├── on_session_start.py
└── on_stop.py许可证
MIT,见 LICENSE。
Available Tools
7 toolsadd_memoryA
Store a memory in the local OSS Mem0 store. By default the text is stored verbatim with no LLM call (offline, free). Set infer=true to run Mem0's LLM fact extraction (requires a configured LLM).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text content to remember. | |
| infer | No | If true, use the LLM to extract facts. Default false (raw storage). | |
| user_id | No | Scope the memory to a user. Defaults to 'default_user'. | |
| agent_id | No | Optionally scope the memory to an agent. | |
| metadata | No | Optional metadata attached to the memory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on full responsibility for behavioral disclosure. It clearly explains that by default the text is stored verbatim with no LLM call (offline, free), and that setting infer=true triggers LLM fact extraction. This goes beyond the schema by adding cost/offline context and a requirement. It does not mention return values or side effects, but the key behavioral traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, each earning its place. The first states the core purpose, and the second explains the default vs. infer behavior. It is front-loaded with the primary action and contains zero fluff, making it exemplary in conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity (5 parameters, no annotations, no output schema), the description covers the main action, default behavior, and a key option (infer) with its prerequisite. It does not explicitly state the return value, which would be helpful since there is no output schema, but the description is sufficiently complete for an agent to understand when and how to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers 100% of parameters with meaningful descriptions, so a baseline of 3 applies. The description adds some context around the infer parameter (offline/free, requires configured LLM) but does not enrich the semantics of user_id, agent_id, or metadata beyond their schema descriptions. Overall, the added value is moderate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb+resource statement: 'Store a memory in the local OSS Mem0 store.' This immediately distinguishes it from sibling tools like search_memories, get_memories, update_memory, and delete_memory, establishing it as the creation tool. It also adds specificity about the default verbatim storage behavior, deepening the clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for use: it is for storing a memory, with a clear distinction between the default offline/free mode and the LLM-based infer mode. It states a key prerequisite ('requires a configured LLM') for the infer option. However, it does not explicitly mention alternatives or when not to use the tool, so it lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_all_memoriesA
Delete all memories for a user and/or agent. At least one scope is required.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Delete memories scoped to this user. | |
| agent_id | No | Delete memories scoped to this agent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden for behavioral disclosure. It states the destructive action ('Delete all memories') but does not warn about permanence, irreversibility, or clarify the ambiguous 'and/or' scoping semantics (whether both scopes are AND or OR). This is a significant gap for a bulk delete operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action, and contains no filler. Every word contributes meaning, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple bulk delete tool with two well-documented parameters and no output schema, the description covers the core essentials. However, it leaves out safety-related context (e.g., that deletion is permanent) and the precise scoping logic, which are important for a destructive operation. The absence of annotations elevates the need for such details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by specifying that at least one scope is required, a constraint not captured in the schema's 'required' array. It also clarifies that user_id and agent_id serve as scope filters, though the 'and/or' relationship could be more explicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Delete' and resource 'all memories for a user and/or agent', clearly distinguishing it from the sibling 'delete_memory' by the 'all' qualifier. It also adds the scope requirement, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an important usage constraint ('At least one scope is required') but does not explicitly state when to use this tool versus alternatives like delete_memory. The intended use case (bulk deletion) is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_memoryA
Delete a single memory by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | Memory ID to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for disclosing behavioral traits. It only restates the action and does not mention permanence, side effects, error handling, or required permissions. This is a destructive operation, so more transparency about irreversibility would be expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero filler. Every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter delete tool, the description is nearly complete. It covers what and how, and the schema handles the parameter. However, it could note permanence or mention that delete_all_memories exists for bulk deletion, though not strictly necessary given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 'by ID', which reinforces the memory_id parameter but does not provide additional details like format, uniqueness, or where the ID comes from.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and the resource ('a single memory') with a specific method ('by ID'). It distinguishes from sibling tool delete_all_memories by explicitly saying 'single', making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: this is for deleting one memory, not all. However, there is no explicit guidance on when to choose this over delete_all_memories or other sibling tools, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memoriesA
List stored memories, newest first, with optional user/agent filters.
| Name | Required | Description | Default |
|---|---|---|---|
| top_k | No | Max results. Default 20. | |
| user_id | No | Filter by user. Defaults to 'default_user'. | |
| agent_id | No | Filter by agent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It reveals ordering and filter options but does not state return format, pagination, default behavior beyond the schema, or explicitly confirm it is read-only. The word 'List' implies non-mutating behavior, but additional detail would be helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core purpose ('List stored memories') and immediately specifies ordering and filters. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with zero required parameters and a fully described schema, the description sufficiently covers the primary behavior, ordering, and filtering options. An output schema is absent, but the description's clarity allows an agent to understand what the tool does. It could mention default top_k behavior, but the schema already covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes all three parameters with 100% coverage, so the baseline is 3. The description adds a general reference to 'optional user/agent filters' but does not add meaning beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('List') and resource ('stored memories'), and specifies ordering ('newest first'). It also indicates optional filters, which distinguishes it from siblings like search_memories and get_memory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—listing memories with optional user/agent filters—but does not explicitly differentiate it from search_memories or state when not to use it. No alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memoryB
Retrieve a single memory by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | Memory ID returned by add/search/list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It only states the basic read operation, but does not mention what happens on not-found (error, null), return format, or any other behavioral details. The description adds little beyond the tool's name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler. It is front-loaded with the key action and directly states the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and lack of output schema, the description is still incomplete because it does not specify the return value, error behavior, or any caveats. For a retrieval tool, these are critical expectations that the description should address.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter is already well documented in the schema ('Memory ID returned by add/search/list.'). The description does not need to add parameter info, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and resource ('a single memory') with a clear method ('by its ID'), which fully distinguishes it from sibling tools like get_memories (plural), search_memories, and add_memory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you have a memory ID), but it does not explicitly state when to prefer this over alternatives like get_memories or search_memories, nor does it mention exclusions. No explicit guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_memoriesB
Search memories by semantic similarity. Uses local embeddings.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query. | |
| top_k | No | Max results. Default 10. | |
| user_id | No | Filter by user. Defaults to 'default_user'. | |
| agent_id | No | Filter by agent. | |
| threshold | No | Minimum score. Default 0.1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'local embeddings' as a behavioral trait, but omits whether the operation is read-only, how similarity scores are computed, or what the return format looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant or irrelevant information. It is front-loaded with the core purpose and then adds the local embedding detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and five parameters, the description leaves gaps. It does not explain the return value, the meaning of the similarity score, or how filtering by user/agent interacts with the search. More detail is needed for full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter is already well-documented. The description adds no extra meaning to the parameters, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches memories using semantic similarity, with a specific verb and resource. It distinguishes from siblings like get_memories, which likely perform exact retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the 'semantic similarity' phrasing, suggesting use when similarity-based search is needed. However, no explicit guidance is given on when to prefer this over get_memories or other alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_memoryB
Overwrite the text (and optionally metadata) of a memory by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | New memory text. | |
| metadata | No | New metadata (replaces old metadata). | |
| memory_id | Yes | Memory ID to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. 'Overwrite' hints at destructive action, but it does not clarify whether metadata is fully replaced when provided, what happens if metadata is omitted, whether the memory must exist, error behavior, or return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that immediately states the action and target. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though the schema describes parameters well, the description lacks important context for a mutation tool: metadata replacement semantics, behavior on nonexistent ID, output expectations, and any permissions/limitations. This is incomplete for an agent to use confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% parameter coverage, so a baseline of 3 is appropriate. The description adds minimal semantic value beyond the schema, though it does note that metadata is optional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'overwrite' and identifies the resource ('a memory by ID'), which clearly distinguishes it from sibling tools like add_memory, get_memory, and delete_memory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: overwriting suggests modifying an existing memory. However, there is no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites.
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.
7 tool updates
v0.1.0- First observed
add_memory - First observed
delete_all_memories - First observed
delete_memory - First observed
get_memories - First observed
get_memory - First observed
search_memories - First observed
update_memory
TDQS
Scored across 7 tools
Each tool targets a distinct operation: add, search, list, get by ID, update, delete, and bulk delete. The singular get_memory and plural get_memories are clearly differentiated by their descriptions.
All tools follow a consistent snake_case verb_noun pattern (e.g., add_memory, search_memories, delete_all_memories), with appropriate singular/plural forms matching their semantics.
Seven tools is well-scoped for a memory store, covering CRUD, search, and bulk deletion without redundancy or excessive granularity.
The surface provides full lifecycle coverage: create (add), read (list, get by ID, search), update, and delete (single and all). No obvious gaps for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP memory server. One memory your agents share — across models, devices and apps.
Cloud-hosted MCP server for durable AI memory
Private persistent memory for Claude, ChatGPT & Gemini via MCP - semantic search, zero-code setup.
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
Related MCP Servers
- AlicenseAqualityCmaintenanceA local, fully-offline MCP memory server that enables persistent storage and retrieval of information using SQLite with both keyword and semantic vector search capabilities.101913MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP-native, local-first memory server that gives AI agents persistent, structured memory across sessions and tools, enabling them to maintain identity and context without reconfiguration.3MIT
- AlicenseAqualityDmaintenanceAn MCP server that provides persistent memory capabilities for AI agents using Mem0, enabling storage, search, and management of contextual information across conversations with support for multiple backends and LLM providers.18MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides memory management tools for AI agents, enabling adding, searching, updating, and deleting memories via the Mem0 API.16MIT