MemStack MCP Server
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., "@MemStack MCP ServerWhat budget did the planner set for the trip team?"
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.
MemStack
面向 Agent 的可移植分层记忆栈。 纯 Python 标准库实现,零第三方依赖,可直接嵌入现有 Agent,也可以作为独立 HTTP 记忆服务或 MCP server 运行。
写入:原始 episode + 事实 / 偏好 / 流程 / 摘要 / 实体索引,自动去重、合并、冲突取代
时间:双时间(事件时间 + 写入时间)、
active / superseded / archived / deleted生命周期;写入时把yesterday / last week / N years ago归一化为绝对日期(原文保留)检索:dense + BM25 + 实体 + 先验 + 图扩展(PPR),多粒度熵路由,时间策略,重排,MMR,token 预算;原文 episode 预算保底,抽取事实不再挤掉证据
证据链(v4):多跳/枚举聚合类查询自动分解为子查询逐跳检索、分名额合并,只补缺口不挤占首轮证据;可选 LLM 化分解(失败自动回退规则版)
巩固:离线去重、冲突消解、会话摘要、衰减归档、用户画像块
多 Agent:agent 注册、团队(open/closed)共享记忆、跨 agent 授权(grant)、事件总线
接入:Python API / 工厂(
build_stack)/ OpenAI function-calling 工具 / HTTP 网关 / MCP server(零 SDK,stdio) / Agent 中间件可移植:
Embedder / Extractor / Store / Reranker / Clock全部是 Protocol,默认实现可整体替换LLM 可选:设置
MEMSTACK_LLM_MODEL+OPENAI_API_KEY即自动切换 LLM 抽取 / 摘要 / 查询分解,兼容任意 OpenAI 风格端点
详细设计见 ARCHITECTURE.md;测评 API 成本预估:python cost_estimate.py。
快速开始
要求:Python 3.10+,核心无需安装任何依赖。
# 可选:本地安装为可导入包
pip install -e .评测阶段的可选依赖(不装也能跑,只是对应基线/后端会被跳过):
pip install mem0ai # 让 qa_eval.py 能跑官方 mem0 仓库基线from memstack import MemoryStack, Scope
stack = MemoryStack() # 默认 SQLite :memory:,也可传 SQLiteStore("memory.db")
user = Scope(user_id="nora", agent_id="assistant")
session = Scope(user_id="nora", agent_id="assistant", session_id="s1")
stack.remember(
[
{"role": "user", "content": "I live in Lisbon. I work as a data analyst at Northwind Labs."},
{"role": "assistant", "content": "Noted."},
],
session,
event_time=1767225600, # 可选;不传则用当前时间
)
bundle = stack.recall("Where does the user live now?", user, token_budget=600)
print(bundle.text)
print(bundle.confidence, bundle.gaps, bundle.should_continue)检索结果不是一段纯文本,而是带来源、状态、时间、分数的 ContextBundle:
## Retrieved memory
- [FACT|score=1.00|active|from=2026-01-01|src=ep-...] slot=user.location | value=Lisbon | evidence="I live in Lisbon."多 Agent 协作(团队共享记忆 + 事件总线)
from memstack import build_hub
hub = build_hub(db="team.db") # 设置了 LLM 环境变量时自动启用 LLM 抽取
hub.register_agent("planner", role="planner")
hub.register_agent("executor", role="executor")
hub.create_team("trip", members=["planner", "executor"], policy="closed")
hub.remember_as("planner", [{"role": "user", "content": "预算上限 5000 元。"}],
team_id="trip", share=True)
bundle = hub.recall_as("executor", "这次旅行的预算是多少?", teams=["trip"])
print(bundle.text) # 私有 + 团队共享的合并上下文,带来源段落
hub.post_event("trip", "planner", "plan_ready", "行程已确认,等待付款")
events = hub.pull_events("executor", "trip") # 增量拉取事件流closed 团队非成员不可读;跨 agent 读他人私有记忆需显式 grant("executor", "planner", "read")。
完整示例:python examples/multiagent_orchestration.py。
LLM 开箱即用(可选)
export MEMSTACK_LLM_MODEL=gpt-4o-mini # 或 deepseek-chat / vLLM / Ollama 任意 OpenAI 兼容端点
export OPENAI_API_KEY=sk-...
export OPENAI_BASE_URL=https://.../v1 # 非 OpenAI 官方时设置
python -c "from memstack import build_stack; s = build_stack(db='m.db'); \
s.remember('用户说搬家到了柏林'); print(s.recall('用户住在哪').text)"不设置环境变量时系统退化为零依赖规则抽取,完全不联网。
模型基座(可选,评测/推理用)
内置基座免去手写端点,直接按名字选用(定义见 memstack/backends.py):
# 本地 Ollama 上的 Qwen3.5-9B(OpenAI 兼容 /v1)
python qa_eval.py --reader llm --judge llm --model-base qwen35-9b-local
# 或走环境变量
export MEMSTACK_LLM_BASE=qwen35-9b-local端点与密钥可用 OPENAI_BASE_URL / MEMSTACK_API_KEY / MEMSTACK_REASONING_EFFORT
覆盖,不写死在代码里。Qwen3.5-9B 默认开启思考会让 content 为空,该基座默认
reasoning_effort="none"。
LLM 化查询分解(可选,用于多跳/枚举类问题的证据链;输出非法 JSON 或调用失败自动回退规则版,检索链路不断):
from memstack import MemoryStack, LLMQueryDecomposer, OpenAICompatClient
client = OpenAICompatClient(model="gpt-4o-mini")
stack = MemoryStack(query_decomposer=LLMQueryDecomposer(client))
bundle = stack.recall("What hobbies does Evan pursue?", scope)
print(bundle.trace["evidence_chain"]["decomposer"]) # "llm" 或 "rule-fallback"MCP server(零 SDK)
python -m memstack.mcp_server --hub --db mem.db # stdio JSON-RPC,可被 Cursor/Claude Desktop 直接挂载
python -m memstack.mcp_server list-tools # 查看 12 个工具(记忆 + 多 agent)
python examples/mcp_client.py # 用标准库驱动 server 的演示客户端客户端 mcp.json 配置:
{"mcpServers": {"memstack": {"command": "python", "args": ["-m", "memstack.mcp_server", "--hub", "--db", "mem.db"]}}}Related MCP server: kmp-mcp
目录
memstack/
├── memstack/
│ ├── core.py # 门面:remember / recall / forget / consolidate / blocks
│ ├── multiagent.py # 多 Agent:注册、团队共享、授权(grant)、事件总线
│ ├── mcp_server.py # 零 SDK 的 MCP server(stdio JSON-RPC)
│ ├── factory.py # build_stack / build_hub:LLM 环境变量驱动的开箱即用工厂
│ ├── types.py # MemoryItem / Scope / ContextBundle / 枚举
│ ├── config.py # 全部可调参数
│ ├── interfaces.py # 可移植性 Protocol
│ ├── embeddings.py # 零依赖 hashing 向量 + 批量余弦(numpy 可选加速)
│ ├── extraction.py # 规则抽取器 / LLM 抽取器 / 摘要器
│ ├── storage.py # SQLite 存储(memories / edges / blocks / audit)
│ ├── graph.py # 实体链接、溯源边、Personalized PageRank
│ ├── retrieval.py # 混合召回、熵路由、时间策略、重排、预算组装
│ ├── consolidation.py # 睡眠期去重、冲突消解、摘要、衰减、画像
│ ├── tools.py # OpenAI 工具 schema、dispatch、Agent 中间件
│ ├── llm.py # 零 SDK 的 OpenAI 兼容客户端
│ └── server.py # 标准库 HTTP 网关
├── examples/ # 运行示例:多 agent 编排 / 框架集成 / MCP 客户端
├── demo.py # 端到端演示
├── benchmark.py # 合成基准(同预算对比 + 消融)
├── public_eval.py # LoCoMo / LongMemEval 检索层评测
├── qa_eval.py # LoCoMo / LongMemEval QA 层评测:LLM reader + judge + 官方 mem0 基线
├── cost_estimate.py # OpenAI 兼容 API 评测成本估算
├── tests/ # 26 个 unittest(含多 agent / MCP)
├── results/ # 公开评测原始结果(JSON / Markdown)
├── PUBLIC_EVAL.md # v1 公开数据集结果与解读
├── IMPROVEMENTS.md # 改进说明 + v2/v3 综合评测 + SOTA 分数对照
├── LICENSE # Apache-2.0
├── README.md / README_EN.md
└── ARCHITECTURE.md运行
python demo.py
python benchmark.py
python -m unittest discover -s tests -v
python -m memstack.server --db ./memstack.db --port 8765
# 公开数据集(复现文档结果;首次运行自动从镜像下载)
python public_eval.py --dataset locomo --limit 300 --turns 3 --episode-chars 900 \
--out results/locomo_300_comprehensive.json
python public_eval.py --dataset locomo --turns 3 --episode-chars 900 --no-download \
--out results/locomo_full_comprehensive.json # 全量 1986 题(约 15 分钟)
python public_eval.py --dataset longmemeval --turns 2 --episode-chars 700 \
--out results/longmemeval_comprehensive.json
# QA 层:本地小模型当 reader + judge(离线,无需 API key)
python qa_eval.py --limit 50 --budget 600 --reader hf --judge hf \
--out results/locomo_qa.json
# QA 层:换成任意 OpenAI 兼容端点
MEMSTACK_LLM_MODEL=gpt-4o-mini OPENAI_API_KEY=sk-... \
python qa_eval.py --limit 200 --reader llm --judge llmHTTP 接口:
GET /health
POST /v1/remember {messages, scope, event_time?, metadata?}
POST /v1/search {query, scope?, top_k?, token_budget?, include_history?}
POST /v1/forget {ids?|query?, scope?, hard?}
POST /v1/consolidate {scope?}
GET /v1/profile?user_id=..合成基准(实测)
同一 500-token 上下文预算,3 个用户 × 4 个会话 × 11 个问题(共 33 题),规则化 reader; 数值是机制级合成结果,不可与论文原表或生产 benchmark 直接比较。
方法 | 准确率 | token/题 | 证据命中 | 陈旧回答 | 时延 ms |
No memory | 0.0% | 0.0 | 0.0% | 0.0% | 0.0 |
Full context(不限预算) | 100.0% | 544.0 | 90.9% | 0.0% | 0.0 |
Full context(500 token) | 81.8% | 515.3 | 78.8% | 6.1% | 0.1 |
Naive vector Top-4 | 69.7% | 251.7 | 81.8% | 21.2% | 3.3 |
MemStack(完整) | 100.0% | 474.9 | 100.0% | 0.0% | 65.0 |
w/o temporal | 90.9% | 475.0 | 100.0% | 9.1% | 79.8 |
w/o graph | 100.0% | 482.0 | 100.0% | 0.0% | 74.5 |
w/o routing | 100.0% | 475.1 | 100.0% | 0.0% | 77.2 |
w/o rerank | 100.0% | 460.2 | 100.0% | 0.0% | 82.0 |
w/o consolidation | 100.0% | 402.8 | 100.0% | 0.0% | 72.2 |
episodes only | 60.6% | 483.7 | 100.0% | 27.3% | 49.8 |
结论:
同预算下,MemStack 100% vs 截断全上下文 81.8% vs 朴素向量 69.7%;
陈旧回答 0%,朴素向量 21.2%,只存原始 episode 27.3%;
达到不限预算全上下文的准确率,同时少用约 13% token(544→475);历史越长,差距越大;
图扩展 / 粒度路由 / 重排在本合成集上饱和(准确率无差异),差异主要体现在证据覆盖与成本; 时间感知是当前唯一显著改变准确率的消融。
公开数据集评测(实测)
详细协议、分题型结果、SOTA 分数对照与效度威胁见 IMPROVEMENTS.md; v1 结果保留在 PUBLIC_EVAL.md。
数据集 | 方法 | Unit R@k | All-Unit | Turn Token | Ans Token | NDCG | Tokens |
LoCoMo(全量 1986 题) | MemStack(v4.1 + episode 保底) | 85.4% | 75.6% | 70.7% | 43.1% | 0.636 | 636 |
MemStack-mr(v3 词袋补证) | 83.6% | 73.6% | 69.3% | 41.8% | 0.623 | 622 | |
MemStack-ep | 89.0% | 79.8% | 77.4% | 46.3% | 0.712 | 746 | |
Mem0-like | 83.0% | 73.4% | 69.7% | 42.0% | 0.637 | 667 | |
Zep-like | 84.3% | 74.3% | 69.8% | 42.1% | 0.639 | 633 | |
A-MEM-like | 67.5% | 57.3% | 55.8% | 33.1% | 0.444 | 626 | |
LoCoMo(300 题分层) | MemStack(v4 证据链) | 83.8% | 70.4% | 69.3% | 37.3% | 0.626 | 648 |
MemStack-mr(v3 词袋补证) | 81.8% | 69.0% | 66.9% | 35.5% | 0.616 | 636 | |
MemStack-ep | 86.9% | 72.1% | 72.8% | 39.7% | 0.653 | 740 | |
BM25 only | 57.6% | 46.8% | 69.3% | 20.6% | 0.576 | 668 | |
Dense only | 23.6% | 17.5% | 50.4% | 13.6% | 0.236 | 644 | |
LongMemEval oracle(500 题) | MemStack | 100% | 87.6% | 64.5% | 52.5% | 1.000 | 759 |
MemStack-mr | 100% | 86.4% | 64.5% | 52.4% | 1.000 | 761 | |
MemStack-ep | 100% | 95.8% | 57.2% | 52.7% | 1.000 | 450 | |
MemoryOS-like | 100% | 96.8% | 58.0% | 53.7% | 1.000 | 506 | |
Dense / BM25 / Full | 100% | 35.2% | 72–75% | 50–56% | 1.000 | 792 |
同 800-token 预算下,MemStack / MemStack-ep / MemoryOS-like 的证据会话覆盖显著高于纯会话检索;
0.4.1 的 episode 预算保底把 LongMemEval 的 All-Unit 从 79.2% 提到 87.6%、Ans Token 45.8%→52.5%:抽取事实不再把原文证据挤出上下文;
v4 证据链(query 分解 → 逐跳检索 → 分名额合并)相对 v3 词袋补证:LoCoMo 全量 All-Unit 73.6%→75.6%、Ans Token 41.8%→43.1%;机制细节见 IMPROVEMENTS.md §2.5;
LongMemEval oracle 中所有 session 都是证据,所以 Unit R 对所有方法都是 100%,有区分度的是 All-Unit;
LoCoMo 多跳 All-Unit 仍有天花板(全量 26% 左右):枚举题 gold 证据散布在 7–19 个会话、600-token 预算内不可全召回。
口径:这是检索层评测,不是 LLM-as-judge QA;LoCoMo 为 300 题分层子集,LongMemEval 为 oracle 版本。 LongMemEval 为控制 CPU 成本关闭实体图,因此其 MemStack 数字是保守下界;SOTA 数字来自各自论文/博客,不能直接对比。 原始文件:
results/locomo_full_comprehensive_v041.json·results/locomo_300_comprehensive_v041.json·results/longmemeval_comprehensive_v041.json。
QA 层(LLM reader + judge)
qa_eval.py 在检索结果之上做生成与判分。下表为全量结果,reader 与 judge 均为本地 Qwen3.5-9B(Ollama qwen35-9b-local):
LoCoMo 全量 1986 题(600 token 预算,2726s)
方法 | Unit R@k | All-Unit | 总体准确率 | 可答题准确率 | 拒答准确率 | F1 | EM |
MemStack | 84.2% | 74.1% | 54.3% | 47.2% | 78.7% | 37.4% | 20.3% |
MemStack-mr | 82.7% | 72.5% | 52.5% | 45.8% | 75.6% | 36.5% | 19.8% |
LongMemEval oracle 全量 500 题(800 token 预算,1334s)
方法 | Unit R@k | All-Unit | 总体准确率 | F1 | EM |
MemStack | 100% | 85.6% | 43.4% | 32.9% | 24.4% |
MemStack-ep(只存原始 episode) | 100% | 96.4% | 46.8% | 36.3% | 25.0% |
各系统(Mem0 / Zep / Letta / Memobase / A-MEM / MemoryOS / Supermemory 等)的公开分数、口径差异、预算敏感性与差距归因见 记忆系统公开数据集跑分对比.md。
分题型(MemStack):时序 47.4%(0.4.1 前是 7.5%)、单跳 54.7%、多跳 36.2%、开放域 13.5%、对抗拒答 78.7%;
--grounding adaptive只对开放域放开世界知识,300 题子集上开放域 8.3%→35.0%。LongMemEval 上
MemStack与MemStack-ep的差距从 12.6pp 收敛到 3.4pp(episode 保底生效);multi-session / preference 仍是弱项。换任意 OpenAI 兼容端点(含 GPT-4o-mini)即可复跑同口径数字:
MEMSTACK_LLM_MODEL=gpt-4o-mini OPENAI_API_KEY=... python qa_eval.py --dataset locomo --reader llm --judge llm。本次数字是 9B 本地模型自判,与 Mem0 66.9 / Zep 75.14 / Memobase 75.78(GPT-4o-mini judge)不可直接比较。
设计原则(一句话版)
原文与知识都保留:episode 做证据,fact/preference/procedure 做路由;不要把唯一副本压成摘要。
追加式而不是覆盖式:冲突用
superseded + valid_to表达,历史查询仍可回答。检索是多信号的:纯向量对专名、数字、时间不敏感;dense + BM25 + entity + prior + graph 融合。
粒度由查询决定:不是所有问题都该看 turn、fact 或 summary;用熵路由 + 意图先验做软选择。
上下文是预算问题:只注入 top-K、去重(MMR)、带来源、可解释,而不是把整库塞进去。
复杂查询走证据链(v4):多跳/枚举聚合类问题分解成子查询逐跳检索、分名额合并,只补缺口、不挤占首轮证据。
更新与遗忘是一等公民:软删除、级联隐藏证据、审计、离线巩固。
框架无关:只依赖 Protocol;Python / 工具调用 / HTTP / 任意 Agent 都能接。
局限
默认抽取器是规则化的,适合演示与受控基准;生产应换成
LLMExtractor(接口已留好)。证据链的查询分解器同样是规则化的(枚举/桥接/时序正则),LLM 化分解在路线图中。
SQLite + 暴力向量扫描面向单机、中小规模;大规模请替换
MemoryStore/ 向量索引。图扩展是 O(E) 的 PPR,没有社区划分、增量图索引或分布式图存储。
多模态、代码仓库状态、团队级共享记忆与 ACL 尚未实现。
合成基准的 reader 是规则化模拟,不能替代真实 LLM 端到端评测。
qa_eval.py的全量公开 QA 已跑(LoCoMo 1986 题、LongMemEval 500 题),但 reader/judge 仍是 9B 本地模型、预算 600–800 token;与论文的 GPT-4o 级判分不可比,对外报分需换端点复跑。默认
--grounding strict(只用召回记忆作答),开放域题因此只有 13.5%;--grounding adaptive可放开这一类,但两种口径要分开报。规则抽取器对 multi-session 聚合与隐式偏好(LongMemEval preference 6.7%)仍弱;这两类更适合 LLM 抽取 + 聚合类检索。
官方 mem0 基线是
infer=False+ 纯 dense 的检索下限,不等于 mem0 论文的完整管线。
更完整的取舍、压力测试与路线图见 ARCHITECTURE.md。
Available Tools
12 toolsagent_grantC
把某个 agent 的私有记忆授权给另一个 agent(或 team:id)读取。
| Name | Required | Description | Default |
|---|---|---|---|
| access | No | read | |
| principal | Yes | ||
| owner_agent | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for a mutation tool. It does not disclose required permissions, whether the grant is idempotent or revocable, what happens to existing grants, or the effect of the 'access' field. Worse, it says '读取' (read) while the schema permits write, leaving the actual behavioral scope of the grant unclear.
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?
A single compact sentence front-loads the action and the resource/direction, with no wasted text. It is efficient, though its brevity is as much under-specification as concision.
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 mutation tool with no annotations, no output schema, and 0% parameter coverage, the description should explain the access parameter, permission requirements, and reversibility. It omits all of these and its read-only phrasing conflicts with the write option, so it is not complete enough to invoke 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?
Schema coverage is 0%, so the description should compensate for all three parameters. It clarifies that owner_agent supplies the memory and principal is the receiving agent or team:id, but leaves 'access' (read vs write enum) entirely undefined and omits format details for the identifiers.
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?
States a specific verb (grant/authorize) and resource (an agent's private memory) plus the direction of access. It is clearly a permissions-granting tool, distinguishable from the memory_* and event_* siblings by its authorization framing. It stops short of naming which sibling it complements (agent_recall/agent_remember), but the core purpose is 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?
There is no guidance on when to use this versus memory_search, memory_add, or agent_recall, nor any prerequisites, exclusions, or the conditions under which a grant is appropriate. The agent must infer the entire usage context from the one-line purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_recallC
以 agent 身份检索:私有记忆 + 有权限的团队共享记忆 + 被授权(grant)的他人记忆,返回带来源段落的上下文。
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| teams | No | ||
| top_k | No | ||
| agent_id | Yes | ||
| token_budget | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the access model (private + permissioned team + granted) and that results carry source snippets. It says nothing about permission failure behavior, rate limits, or how token_budget constrains output, which matters for a retrieval tool with a budget parameter.
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?
A single compact sentence with the core scope front-loaded and no filler. It is efficient, though it spends its length on scope enumeration rather than on the parameters that need explanation.
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 five-parameter retrieval tool with no annotations, no output schema, and zero schema description coverage, the description is thin. It partially covers the return shape ('带来源段落的上下文') but leaves the budget and count parameters, and any auth requirements, unexplained.
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 0%, so the description must compensate for five undocumented parameters, and it largely fails: only the scope concepts loosely map to agent_id and teams. top_k and token_budget — the two parameters that control result size and cost — are never mentioned.
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?
States a specific verb (检索/retrieve) and resource (记忆/memory), and enumerates the three scopes searched: private, permissioned team shared, and granted others'. This distinguishes it from generic memory_search by scope, though it never names the sibling explicitly.
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 the tool is used when acting as a specific agent_id, but gives no explicit when-to-use guidance and never contrasts it with memory_search or the other memory siblings. The choice between agent_recall and memory_search is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_registerB
注册一个 agent(多 agent 协作的前提),返回档案;重复注册会更新角色与元数据。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| role | No | member | |
| metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two important traits: it returns a profile record and re-registering updates role/metadata instead of erroring. However, it does not say whether metadata is merged or replaced, who may register, or whether a name is globally unique.
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?
A single compact sentence with the core purpose front-loaded and the upsert caveat appended after a semicolon. No filler, though the parenthetical precondition could be folded in more cleanly.
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?
No annotations and no output schema mean the description should do more, and it does cover the mutation semantics and that a profile is returned. It still falls short on the nested metadata payload and on the identity/uniqueness model, which matter for a 3-parameter registration 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?
Schema description coverage is 0%, so the description must compensate; it only mentions role and metadata obliquely in the update clause. The required 'name' key, the default role of "member", and especially the nested metadata object's expected keys are left entirely unexplained.
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 gives a specific verb (注册) and resource (agent), plus the payoff (returns a profile) and the upsert behavior. It is clearly distinguishable from the siblings (memory_*, agent_remember/recall/grant), though it never names them.
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?
"多 agent 协作的前提" implies when to call it (before any multi-agent work) and the duplicate-registration case is spelled out, but there is no explicit when-not guidance or pointer to an alternative for reading existing agents (e.g. agent_recall).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_rememberC
以 agent 身份写入记忆;team_id 存在时同步写入团队共享空间。
| Name | Required | Description | Default |
|---|---|---|---|
| share | No | ||
| team_id | No | ||
| agent_id | Yes | ||
| messages | Yes | ||
| metadata | No | ||
| event_time | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it only discloses one trait: that supplying team_id also writes into a team shared space. It says nothing about idempotency, overwrite/dedup behavior, permission or auth requirements, failure modes, or what the 'share' default of true actually implies.
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 single sentence is front-loaded and free of filler, so it reads efficiently. But given six parameters, nested objects, and zero schema documentation, this level of brevity is under-specification rather than disciplined 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?
For a 6-parameter mutation tool with nested objects, no annotations, and no output schema, the description covers only the team-sharing branch. An agent still lacks the information needed to call it correctly and predict its effects.
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 0% across 6 parameters, and the description only explains team_id's side effect. Required fields (agent_id, messages), the share default, metadata, and event_time receive no semantic clarification anywhere, leaving the agent to guess formats such as event_time encoding or the accepted message shapes.
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?
States a specific verb and resource ('以 agent 身份写入记忆' – write memory as an agent), which tells the agent this is an agent-scoped write rather than a generic one. It does not, however, distinguish itself from the sibling memory_add, so an agent cannot tell which write tool to pick from the description alone.
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?
There is no statement of when to use this tool versus memory_add, memory_search, or memory_consolidate, and no prerequisites or exclusions. The team_id clause describes a behavioral effect rather than a selection rule, so usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_postC
向团队发布事件(agent 间消息);as_memory=true 时同步存入共享记忆。
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| sender | Yes | ||
| team_id | Yes | ||
| as_memory | No | ||
| event_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose that as_memory=true has a synchronous side effect of writing to shared memory, but it never says whether the event is broadcast to all team members, whether it is persisted/replayable, what permissions sender needs, or what failure modes exist.
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?
One compact sentence with the core action front-loaded and no filler. However, brevity here is under-specification rather than economy, given four required undocumented parameters.
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?
A mutation/publish tool with no annotations, no output schema, and 0% schema coverage needs the description to do far more work. It covers one flag out of five parameters and omits delivery semantics and return shape entirely.
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 0% for 5 parameters. The description explains only as_memory (the flag and its effect); team_id, sender, event_type, and text carry no format, constraint, or accepted-value information anywhere. event_type in particular is an unconstrained string with no examples, which leaves the agent guessing.
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 states a specific verb and resource: publish an event to a team, characterized as an inter-agent message. The publish/pull split against sibling event_pull is inferable from the verb, but the sibling is never named, so differentiation is implicit rather than explicit.
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 only conditional given is that as_memory=true also writes to shared memory, which is a parameter behavior, not guidance on when to use this tool. Nothing says when to prefer event_post over event_pull or memory_add, nor what a team_id must already exist for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
event_pullC
增量拉取团队事件流(since_id 之后的事件)。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| team_id | Yes | ||
| agent_id | Yes | ||
| since_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses only that results are incremental from a cursor; it says nothing about ordering, whether limit truncates results, how to detect end-of-stream, or what the response contains, all of which matter for a polling tool with no annotations.
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?
A single short sentence with the incremental/cursor constraint front-loaded and no filler. It is efficient, though the brevity contributes to the missing behavioral 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 four parameters at 0% schema coverage, no annotations, and no output schema, the description leaves too much unexplained: cursor semantics for paging, limit behavior, response shape, and scope of agent_id vs team_id are all absent.
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 0%, so the description must compensate for four undocumented parameters. It only explains since_id as a cursor (events after it) and says nothing about agent_id, team_id, or the meaning/limits of the limit parameter.
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 states a specific verb (增量拉取 / incrementally pull) and resource (团队事件流 / team event stream), and the parenthetical clarifies the cursor-based scope (events after since_id). This distinguishes it from event_post, though it never names that sibling explicitly.
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?
Incremental/cursor semantics imply the polling use case, so an agent can infer when to call it. However, there is no explicit statement of when to use this versus event_post or how it relates to the memory/recall siblings, and no preconditions (e.g., required agent/team membership) are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_addA
把一段对话、事件或文档写入长期记忆;系统会自动抽取事实、去重与处理冲突。
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 记忆作用域;多租户/多用户隔离。 | |
| messages | Yes | 字符串或 [{role, content}] 消息列表 | |
| metadata | No | ||
| event_time | No | 事件发生时间(ISO8601),省略则为当前时间 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It does disclose genuinely non-obvious behavior – automatic fact extraction, deduplication, and conflict handling – which is valuable for a write tool, but it omits scope/isolation requirements, idempotency, whether the call is synchronous, and how conflicts are surfaced to the caller.
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?
A single sentence with the write action and its automatic side effects front-loaded, and no filler. Nothing in it is redundant.
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 mutation tool with a nested scope object and no output schema, the description covers what goes in and what the system does with it. The gap is that with no output schema and no annotations, nothing is said about what the caller gets back or how to recover the extracted/conflicting facts.
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 75%: scope (with its isolation meaning), messages, and event_time are documented in the schema, but metadata is undocumented in both places. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.
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 names a specific verb (写入) and resource (长期记忆), and lists the input types (对话、事件、文档), so an agent immediately knows it is a write/ingest tool. It does not differentiate from the near-sibling agent_remember or memory_consolidate, which are also write-ish operations.
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 only implied by the accepted content types (conversation, event, document); there is no explicit statement of when to choose memory_add over agent_remember or memory_consolidate, and no prerequisites or exclusions are given. An agent can guess the context but is not routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_consolidateA
离线巩固:去重、冲突消解、生成会话摘要、刷新画像。建议在会话结束后调用。
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 记忆作用域;多租户/多用户隔离。 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does disclose that the tool merges/removes memories (dedupe, conflict resolution), which hints at mutation of existing data, but says nothing about reversibility, permissions, expected duration, or whether it runs synchronously — all material for a consolidation job.
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?
Two short sentences, operations front-loaded, timing recommendation second. No filler and nothing repeated from the schema.
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 no-annotation, no-output-schema, mutation-style tool, the description should at least address scope defaults and the nature of the result. It covers what and when but leaves the agent guessing about the effect of omitting scope and what a successful run returns.
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 the single 'scope' object already documents its four sub-fields (user_id, agent_id, tenant_id, session_id) and their multi-tenant isolation purpose. The description adds nothing about scope semantics, and notably does not say what happens when the optional scope is omitted (all users? current session?). Baseline 3 applies since the schema does the work.
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 names the resource (memory) and enumerates four concrete operations: dedupe, conflict resolution, session summarization, and profile refresh. This distinguishes it from siblings like memory_search, memory_add, and memory_forget, which cover retrieval, insertion, and deletion rather than batch consolidation. It stops short of a single crisp verb+object statement, but the operation list is specific enough to act on.
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?
'建议在会话结束后调用' gives an explicit trigger condition — call it at the end of a session — which is the main decision an agent needs to make. There is no guidance on when NOT to call it, no mention of cost or idempotency, and no reference to an alternative sibling if the agent only needs one of the four operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_forgetB
按 id 或查询软删除记忆;默认保留审计记录,hard=true 才物理删除。
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| hard | No | ||
| query | No | ||
| scope | No | 记忆作用域;多租户/多用户隔离。 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden; it does add real behavioral value by disclosing that deletes are soft by default with audit records retained, and that hard=true is a physical deletion. It omits permissions/authorization, whether hard delete is reversible, and critically what happens when neither ids nor query is supplied given zero required parameters.
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?
A single tight sentence, front-loaded with the verb and the two selection modes, with the destructive-flag detail placed last where it matters. Nothing redundant, though the density means the parameter interaction stays unexplained.
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 destructive 4-parameter tool with zero required params, a nested scope object, no annotations and no output schema, the description covers the safety-critical soft/hard distinction but leaves open the risk of an unscoped mass delete, permission requirements, and return/confirmation behavior.
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 25%, with only the nested scope object documented. The description rescues the meaning of `hard` (default false, physical vs audit-preserving) and loosely maps ids/query as the two selection paths, but says nothing about how ids and query interact, how scope narrows the deletion, or which nested scope fields matter.
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?
States a specific verb plus resource (delete memories) and names both selection modes (by id or by query), along with the soft/hard delete distinction. None of the sibling tools (memory_search, memory_add, memory_profile, memory_consolidate...) covers deletion, so an agent can route here without sibling ambiguity, though the description never states that explicitly.
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 by the 'soft-delete by default, hard=true physically deletes' framing, which gives a usable default-vs-escalation rule. There is no explicit when-not or caution about irreversible hard deletes, and no named alternative for non-destructive cleanup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_profileA
读取用户画像块与记忆库统计,适合在会话开始时加载。
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 记忆作用域;多租户/多用户隔离。 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description has to carry the behavioral load, and it does imply read-only semantics via 读取 and states the two classes of content returned. However, it is silent on what happens when scope is omitted (global vs. default user), whether anything is mutated or cached, and how large or paginated the response is.
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?
One sentence that leads with what is read and follows with when to use it; no filler, no repetition of the name.
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 zero-required-parameter read tool this covers the essentials, but with no output schema and no annotations, the agent still cannot tell what a call without scope returns or what the statistics payload looks like. A brief note on default scoping behavior would close the remaining gap.
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%, including a description on the nested scope object, so the schema already does the parameter work and baseline 3 applies. The description never mentions the scope parameter or its user/agent/tenant/session dimensions, adding no meaning beyond the schema.
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 pairs a specific verb (读取/read) with two named resources (用户画像块 / user profile blocks and 记忆库统计 / memory store statistics), which clearly separates it from siblings like memory_search or agent_recall that query individual memories. It stops short of explicitly naming an alternative, but the scope of what it returns is 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?
It gives a concrete usage context — '适合在会话开始时加载' (best loaded at session start) — which tells the agent this is a bootstrap/priming call rather than an on-demand query. It does not name exclusions or point to a sibling for the non-session-start case, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_searchC
检索与当前任务相关的长期记忆,返回带来源与置信度的上下文片段。
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | 要检索的问题或关键词 | |
| scope | No | 记忆作用域;多租户/多用户隔离。 | |
| top_k | No | ||
| token_budget | No | ||
| include_history | No | 是否包含已失效/历史事实;省略时由系统根据 query 自动判断 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full disclosure burden, yet it only notes that results carry source and confidence. It says nothing about ranking behavior, whether expired facts are merged, tenancy isolation effects, or cost/latency tradeoffs from token_budget — all of which matter for a retrieval tool with history semantics.
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?
A single compact sentence with no filler, and the key behavior (source- and confidence-tagged snippets) is front-loaded. It is arguably too terse rather than bloated, so conciseness itself is not the problem.
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 5 parameters, a nested scope object, no annotations, and no output schema, the description should explain scope isolation, budget controls, and the include_history auto-detection behavior. It covers none of these, leaving the agent to infer how retrieval limits and history inclusion actually work.
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 60% and the description adds zero parameter meaning. top_k and token_budget have no descriptions anywhere, and the nested scope object's isolation semantics are only hinted at in the schema's own text, not clarified by the description.
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 gives a specific verb+resource (检索/长期记忆) and states what comes back (带来源与置信度的上下文片段). However, it does not differentiate itself from sibling retrieval tools such as agent_recall or memory_profile, which an agent must disambiguate on its own.
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?
There is no statement of when to use this versus agent_recall, memory_profile, or memory_add, and no prerequisites or exclusions. The phrase '与当前任务相关' implies a usage context but gives no routing criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
team_createA
创建团队共享记忆空间。closed 团队仅成员可读;open 团队任何人可读。
| Name | Required | Description | Default |
|---|---|---|---|
| policy | No | closed | |
| members | Yes | ||
| team_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It usefully discloses the access-control semantics of open vs closed (who can read), which is real behavioral context, but omits permissions required, behavior when team_id already exists, and whether creation is idempotent.
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?
Two short sentences, zero waste, and the core action is front-loaded ahead of the policy clarification.
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 creation/mutation tool with no annotations, no output schema, and zero schema coverage, the description is only partially complete: access semantics are covered, but required identifier formats and creation edge cases are not.
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 0% across three parameters, so the description must compensate. It does explain the policy enum values clearly, but leaves members (presumably user/agent identifiers?) and team_id completely unexplained.
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?
States a specific verb and resource: creating a team shared memory space. The word 'team' differentiates it from memory_add/memory_search siblings, though it never names an alternative explicitly.
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 by the name and the policy explanation, but there is no explicit guidance on when to call this versus memory_add or agent_remember, nor any stated prerequisites (does the team need to exist first?).
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.
12 tool updates
v0.4.1- First observed
agent_grant - First observed
agent_recall - First observed
agent_register - First observed
agent_remember - First observed
event_post - First observed
event_pull - First observed
memory_add - First observed
memory_consolidate - First observed
memory_forget - First observed
memory_profile - First observed
memory_search - First observed
team_create
TDQS
Scored across 12 tools
每个工具都明确针对一个资源与动作的组合,但有两组功能重叠:memory_add 与 agent_remember(两者都写入记忆,区别只在身份和团队同步),memory_search 与 agent_recall(都返回上下文,区别只在作用域)。描述说明了区别,但代理仍可能选错。其余工具(profile、consolidate、forget、grant、event_post/pull)各自界限分明。
所有 12 个工具都采用一致的 noun_verb 命名模式(memory_*、agent_*、team_*、event_*),并使用 snake_case,命名空间前缀恰好对应相关资源族。没有风格混用。
12 个工具在较单一领域的合理范围内,每个工具都对应一个明确能力(记忆增删查改与巩固、agent 身份、团队空间、事件流)。稍显庞杂的是 agent_* 和团队相关工具集,但对于多代理记忆系统,数量仍无可厚非。
记忆生命周期和事件流有良好的增删改查覆盖,但团队空间存在死胡同:team_create 会生成 closed 团队(仅成员可读),却没有用于添加/移除成员、列出团队或删除团队的工具。同样也没有 agent 列表/注销或直接按 ID 获取记忆的工具,迫使代理只能依赖搜索。
Maintenance
Related MCP Connectors
Persistent memory, hybrid search and a goal graph for AI agents, over stdio or remote HTTP.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Memory, reflection and safety for AI agents. Hosted or local, no vector database.
Memory for AI agent teams across tools, sessions, repositories, and teammates.
Related MCP Servers
- AlicenseAqualityAmaintenanceLong-term and multimodal memory for AI agents. Store facts and conversations with add_memory, recall them with search_memories — 8 tools over stdio/SSE/HTTP. Per-character memory isolation, LLM-based semantic deduplication, FAISS + JSON storage, and a fully local option (Ollama, no API key). Drop-in compatible with Mem0.8154 PyPI494Apache 2.0
- AlicenseNot gradedqualityAmaintenanceProvides a local stdio MCP server that gives AI coding agents a typed, temporal, evidence-backed memory on embedded SQLite, letting them record decisions and constraints, ask why something happened, navigate memory by time, trace proof paths between refs, and export or supersede stored state without rewriting it. It also exposes read-only ChronoLoom view tools so a person and their agent can steer the same multidimensional memory view by semantic intent rather than raw coordinates.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables agents to retrieve relevant context via a zero-dependency hybrid search engine that blends sparse keyword-based lexical ranking with dense vector similarity scores into one fused result set, then refines it with knowledge graph triplet expansion and lost-in-the-middle context reordering. It also provides episodic memory consolidation, recency decay, and semantic query caching, exposed as a JSON-RPC 2.0 stdio MCP server for clients such as Claude Desktop, Cursor, and Windsurf.7MIT
- AlicenseNot gradedqualityBmaintenanceEnables development agents to keep persistent memory: proposing and reviewing workspace-scoped content, running hybrid search over accepted sources, and resuming projects with auditable history and provenance. It exposes 32 MCP tools over stdio and authenticated Streamable HTTP, with optional embeddings and rerank.Apache 2.0