memory-garden
This server provides a read-only cognitive-retrospection interface over a personal Obsidian vault: you can search past notes, trace how views on a topic changed over time, retrieve evidence, and run a full bounded agent to produce cited conclusions about cognitive shifts.
search_sources: keyword + optional date-window search across the user's own records, returning source candidate IDs.
read_source: read the full text and location info of a source already discovered in the current session (required before citing).
get_topic_timeline: chronological, same-topic expressions; the most recent entry is only a candidate for the user's current view, not a confirmed fact.
find_change_candidates: propose change endpoint pairs (earliest vs latest) for a given topic; wording differences alone are flagged as candidates, not conclusions.
discover_cognitive_shifts: scan the whole vault for potentially overlooked change candidates; recent records are only candidates needing user confirmation.
find_interval_events: search for experiences/decisions/events within a date interval, with the caveat that temporal adjacency does not imply causation.
search_hypothesis_evidence: search separately for supporting and challenging evidence for a causal hypothesis; both sides should be queried.
get_user_verdicts: retrieve the user's prior confirmations/denials for a topic; previously denied explanations must not be reused.
ask_garden: run the complete cognitive-retrospection agent (local deterministic path) and return a structured, cited answer with bounded reasoning.
Provides cognitive-retrospect tools over a user's Obsidian vault, enabling agents to discover viewpoint changes across dated notes, verify claims with citable evidence, and surface candidate shifts while keeping the vault read-only.
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., "@memory-gardenScan my notes for when my opinion on AI safety shifted."
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.
Memory Garden — 个人认知回溯 Agent
English TL;DR: A personal cognitive-retrospect Agent over long-term Obsidian notes. It discovers when your stated views actually changed, verifies claims against read-only sources with citable evidence, and refuses to invent causal stories. Automated tests and reproducible evaluation code are included; the Quick Start runs offline on a bundled synthetic vault with no API key.
面向个人长期 Obsidian 记录的认知回溯 Agent:主动发现观点、判断与选择发生变化的候选, 用受限的只读工具核对原始来源、追踪时间区间内的经历并检验支持与反例; 证据不足时向用户提问,而不是为用户虚构一个完整的因果故事。
Obsidian Vault(只读访问,哈希校验)
│ 只读同步:来源/修订链/事件时间与记录时间分离/作者归属
▼
SQLite + FTS5(trigram) ──► 可切换检索(BM25 / 字符哈希 / Embedding / RRF 混合)
│ │
▼ ▼
立场快照管道(离线 LLM 抽取) 认知工具(8个只读领域工具,MCP 同源暴露)
│ │
▼ ▼
发现引擎(变化分类学+显式对比句)◄── 单 Agent Harness(预算/引用守卫/结构化答案)
│ │
▼ ▼
候选呈现(限额+新颖度)──► 用户反应/判定 ──► 写回排序权重与判定记忆认知回溯试图降低的三类认知负担
Memory Garden 不把“查找旧记录”作为唯一价值——普通笔记检索已经可以覆盖直接查找。 它更关注三类仅靠回忆难以稳定完成的任务:
核对被重新解释的旧观点。人的回忆可能在事后形成更连贯的叙事;带时间戳的原始记录 可以为“当时究竟如何表述”提供核对依据。
发现未主动检索的变化。常规检索通常需要先给出主题;Agent 可以定期扫描纵向记录,提出 “3 月写过 X,8 月写过 Y——这是否构成变化”之类的待确认候选。
约束因果补全。生成模型容易在证据不足时补全因果叙事;系统要求区间内事件不直接等同于原因, 同时检索支持与反例,并在证据不足时向用户提问。
Related MCP server: Obsidian Palace MCP
与普通笔记问答的差异
大模型擅长比较文本,但它不能仅靠自身:发现尚未提供给它的私人纵向记录;证明某句话来自 哪个文件和哪一天;区分"重复记录、并行表述与真实转变";判断较近记录是否仍代表当前观点; 主动检索被当前叙事遗漏的反例。Memory Garden 把这些做成数据边界与证据协议:
候选 ≠ 结论:措辞差异只是"值得核对",确认只能来自用户;
较近记录 ≠ 当前观点:最近一条统一标注为
latest_memory_candidate,必须向用户确认;时间相邻 ≠ 因果:区间内事件只标
within_interval,回答里禁止因果断言;用户判定 > 模型结论:被否认的解释会被记录且不再复用(有端到端测试)。
发现:从运行时扫描到数据结构问题
Memory Garden 把发现拆成离线/在线两层,让语义比较成为一等公民:
立场快照(离线):每条带日期的个人记录经 LLM 抽取为
{主题, 立场, 原文引用, 语气强度, 是否本人观点};"无立场"是合法输出(引用/草稿/事件记录不硬造快照); 快照带 schema 版本,提示词迭代可整版重抽;LLM 不可用时降级为确定性抽取。变化分类学(离线/低频):同主题快照按时间相邻对比 + 首尾对照(防慢漂移漏检), 分类为措辞漂移/深化/真变化/并列新立场/语境性立场——只有真变化与并列新立场成为候选。
显式对比句(高精度信号):"以前我以为…现在…"正则直取,作者亲口承认的变化直接成为候选。
评分限额(在线):候选分 = 变化置信度 × 主题重要度 × 新颖度(近 7 天展示过则降权)× 反应权重, 每周只打扰 3–5 条;呈现两端原话+日期并排,让差距自己说话,不解释因果。
反应写回:一键反应(属实/不是/无聊)直接写回该主题的排序权重,使后续候选排序逐步适应个人反馈。
工程验证
仓库提供自动化测试、评测实现、指标定义、脱敏合成用例和复现命令。私有 Vault、人工标注数据及其 评测产物仅在本地保存,不进入公开仓库:
pytest覆盖同步、检索、Embedding 缓存、隐私开关、工具调用、引用守卫、MCP 与 Web 接口;eval-agent使用隔离临时库和 12 个脱敏合成用例,对比单次回答、无判定记忆 Agent 与完整 Agent 3 种配置;eval-retrieval按 source path 计算 HitRate/Recall/Precision@5、MRR 与 nDCG@5,并保持各路线候选深度一致;公开
mock仅用于验证 Embedding 接口、缓存和评测管线,不代表真实语义模型效果。
完整指标口径见 docs/RETRIEVAL_EVAL_PROTOCOL.md。这些检查用于验证工程链路和约束行为,
不能据此推断真实用户的长期受益;后者需要通过持续真实使用和用户反馈另行验证。
她:知微
助手默认叫知微——取自《易经》"知微知彰":在变化显形之前,先看见它的微光。
名字可在网页设置页(右上角"设置")里改;性格在根目录 soul.md 里改,每条消息热加载,改完即生效。
判定按钮与"还没确定的"提示只在结论型回答(追溯到的变化/明确不构成变化)后出现; 开放式交流类的回复不会被一排表单打断。
首次使用无需修改仓库文件:在网页右上角“设置”中填写 Vault 路径与 API Key
(仅保存在本机 .local/settings.json,且已由 .gitignore 排除),重启一次即可生效。
Quick start
没有可用 Vault 时也可运行:设置 MG_PUBLIC_DEMO_MODE=true 后,init 会强制使用仓库内的合成 Vault(evals/cognitive_mvp_vault),无需 API Key,且可离线复现。
git clone https://github.com/drephantom/memory-garden.git
cd memory-garden
Copy-Item .env.example .env # 填写 Obsidian Vault 路径;启用 LLM 时再配置连接与密钥文件
uv sync
uv run memory-garden init # 只读同步 + 向量
uv run memory-garden extract-snapshots # 离线立场快照(自动选择 LLM/确定性)
uv run memory-garden ask "自主判断这个主题,我的想法以前到现在有没有变化?"
uv run memory-garden discover # 全库发现候选(限额呈现)
uv run memory-garden serve # 本地 Web UI (127.0.0.1:8766)评测与验证:
uv run pytest
uv run ruff check src tests
uv run mypy src/memory_garden
uv run memory-garden eval-agent # 隔离临时库,输出仅保存在本机
uv run memory-garden eval-retrieval # 脱敏合成用例,输出仅保存在本机
uv run memory-garden eval-discovery # 发现精度
uv run memory-garden verify-vault # Vault 只读 + 同步幂等校验
# 明确配置并开启两个云端检索开关后:只打印聚合运行元数据
uv run python scripts/run_private_api_rag_smoke.py --group real_dev --case-index 0 --source-limit 60检索与 Embedding 配置
默认配置是 MG_RETRIEVAL_MODE=hybrid、MG_EMBEDDING_BACKEND=local_hash、
MG_RERANKER_BACKEND=local_heuristic:SQLite FTS5 BM25 与 512 维字符 2/3-gram
哈希向量先经 RRF 融合,再对最多 30 个候选做离线确定性重排,全程无需 API Key。
CLI 可在子命令前临时选择:
uv run memory-garden --retrieval-mode bm25 ask "自主判断"
uv run memory-garden --retrieval-mode hash_vector ask "自主判断"
uv run memory-garden --retrieval-mode embedding ask "自主判断" # backend 必须是 mock/api
uv run memory-garden --retrieval-mode hybrid ask "自主判断"
uv run memory-garden --retrieval-mode hybrid --reranker none ask "自主判断" # RRF 基线
uv run memory-garden --embedding-backend api --retrieval-mode hybrid --reranker api ask "自主判断"API Embedding 必须同时配置 MG_EMBEDDING_BACKEND=api、MG_LLM_EMBEDDING_MODEL、
MG_EMBEDDING_PROVIDER/BASE_URL/API_KEY(_FILE),并显式设置
MG_ALLOW_CLOUD_EMBEDDING=true。它与 MG_LLM_* 生成连接相互独立,因此可同时使用
DeepSeek 生成与 SiliconFlow 检索。三条云端连接采用 fail-closed:Embedding 或 Rerank 的专用
Base URL/Key 缺失时直接拒绝,绝不回退到生成模型连接,避免把私人笔记误发到错误 provider。
启用后,系统会向 /embeddings 发送查询文本,以及每条检索原子的标题、标题层级、标签、正文;
不会发送文件路径,原始 Vault 仍只读,向量仅写入派生 SQLite。Web 启动不自动批量发送云端向量,
设置页提供带二次确认的“显式构建当前向量缓存”操作。mock 仅供 CI/测试。
SiliconFlow 示例(密钥文件放仓库外;不要把 Key 本身写进 .env):
MG_EMBEDDING_BACKEND=api
MG_EMBEDDING_PROVIDER=siliconflow
MG_EMBEDDING_BASE_URL=https://api.siliconflow.cn/v1
MG_EMBEDDING_API_KEY_FILE=D:/path/outside-repo/siliconflow.key
MG_LLM_EMBEDDING_MODEL=BAAI/bge-m3
MG_LLM_EMBEDDING_DIMENSION=1024
MG_ALLOW_CLOUD_EMBEDDING=false
MG_RERANKER_BACKEND=api
MG_RERANKER_PROVIDER=siliconflow
MG_RERANKER_BASE_URL=https://api.siliconflow.cn/v1
MG_RERANKER_API_KEY_FILE=D:/path/outside-repo/siliconflow.key
MG_RERANKER_MODEL=BAAI/bge-reranker-v2-m3
MG_RERANKER_FUSION=rank_fusion
MG_ALLOW_CLOUD_RERANK=false两个允许开关故意保持 false;确认发送边界后再分别改为 true。
MG_RERANKER_BACKEND=api 另需配置 MG_RERANKER_PROVIDER/BASE_URL/API_KEY(_FILE)/MODEL
并显式设置 MG_ALLOW_CLOUD_RERANK=true。它会把查询与 RRF 候选的标题、标题层级、标签、
正文发送到 /rerank;不开此开关时工厂直接拒绝构建。MG_RERANKER_FUSION=replace 使用
cross-encoder 排名替换 RRF 排名,rank_fusion 则合并两种名次。默认 local_heuristic 仍是
离线、可审计的第二阶段规则基线,不冒充神经 cross-encoder。
完整链路为:查询 → BM25/Embedding 候选 → RRF → cross-encoder 重排(可选与 RRF 名次再融合)→ 证据注入 → 模型生成与引用守卫。代码支持不等于真实模型效果;只有真实请求成功且评估命令产生指标后, 才可描述为“使用真实模型完成评估”。
MCP:同一套工具,两个世界
uv run memory-garden mcp 以 stdio 启动 MCP Server,把8个只读领域工具与1个完整回溯入口
ask_garden 暴露给任意 MCP 客户端
(Claude Desktop 等)。工具边界(只读、"已发现来源"才能 read、发现工具的运行时收缩)
与内部 Agent 循环完全同源——不是两套实现。
目录
src/memory_garden/
config.py 设置加载(进程环境 > .env)
db.py SQLite schema v3 + 无损增量迁移(Embedding 缓存身份/来源/认知数据)
importer.py 只读同步:哈希修订链、移动身份稳定、event_time/recorded_at 分离、作者归属
retrieval.py 统一工厂:BM25 / 字符n-gram / mock或API Embedding / RRF 混合
llm.py OpenAI 兼容客户端(工具循环/embeddings/rerank/重试/密钥脱敏)
tools.py 8 个只读认知工具(含全库发现工具的运行时收缩)
agent.py Agent Harness:预算/证据计划/引用守卫/本地确定性降级/结构化答案
snapshots.py 立场快照管道 + 变化分类学 + 显式对比句 + 发现引擎(评分四因子)
cognitive.py 发现扫描持久化、呈现追踪、一键反应、六选一判定记忆
evaluation.py 协议消融评测 / 检索与重排对照 / 发现精度
mcp_server.py MCP stdio 服务(工具与内部循环同源)
web.py 极简本地 UI(FastAPI 单文件,无前端构建链)
cli.py init/sync/ask/discover/extract-snapshots/eval-*/serve/mcp/verify-vault
tests/ 自动化测试(含 Embedding 缓存、API cross-encoder、评估口径、数据集隔离与三入口统一)
evals/ 脱敏合成 Vault 与公开回归用例;私有 golden 不入库
docs/ ARCHITECTURE.md / DEMO.md
scripts/ 显式授权的私有 API 烟测(临时库,只输出聚合运行元数据)已知边界(诚实清单)
发现质量依赖"同一主题被反复带日期地记录"——写作越稀疏,沉默信号与对比信号越弱;
主题实体归并目前是"词面 + LLM 沿用已知主题表"的轻量版,完整聚类与别名评测在 roadmap;
多路融合和第二阶段重排不保证优于最佳单路,必须在独立、人工复核的 golden 上分别比较;
默认重排是可审计的规则基线;API cross-encoder 只是可选实现,不能仅凭链路跑通宣称效果提升;
判定记忆的主题匹配用词交集(个人规模可行),不是向量语义匹配;
对话云端模式会发送问题与工具筛出的少量片段;API Embedding 会发送查询和标题/标签/正文; API Rerank 会发送查询和 RRF 候选的标题/标题层级/标签/正文。三者分别配置,两个检索云端开关默认关闭;Vault 文件 本身仅以只读方式访问。
长期愿景(展望,不在当前路线图内)
现在,这里只有本地的 Obsidian 记录。长期的想象是:每个人都有一座自己的记忆花园—— 人与人的交流经由各自的 Agent 发生,互动留下"记忆的种子",持续交互长成树与花园; 相似主题可能帮助人们找到同路人,私密记录只有在使用者主动授权后才参与交流。
这是“花园”这个名字的由来,也是第一阶段优先完善单人系统与隐私边界的原因: 任何记忆离开本地前,都必须由使用者显式授权,并能明确核对发送范围;数据发送边界由使用者决定。
Available Tools
9 toolsask_gardenB
运行完整认知回溯 Agent(本地确定性路径),返回带引用的结构化结论。
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does add useful traits: the operation is local, deterministic, and returns cited structured conclusions. However, it does not disclose whether the agent performs any writes, what sources it consults, or any limitations, which leaves gaps for a complex agent tool.
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 no filler words. Every clause adds meaning: the operation, its mode, and its return format are all present.
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 output schema exists, return values are covered by structured data. However, the description is thin for a complex 'full cognitive retrospective Agent' with several similar siblings, and lacks any context about what the agent does with the question or how it relates to the other tools.
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 documenting the 'question' parameter, but it does not. It provides no guidance on question format, scope, language, or what makes a well-formed input for this agent.
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 ('run') and resource ('full cognitive retrospective Agent'), and clarifies that it returns structured conclusions with citations. It does not explicitly differentiate from siblings, but the agent-based framing is distinct from the search/read/discovery tools listed.
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?
No guidance is given about when to use this tool versus the sibling tools such as discover_cognitive_shifts, search_sources, or get_topic_timeline. The phrase 'local deterministic path' hints at a specific mode of operation but not at selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_cognitive_shiftsC
全库发现可能被忽视的变化候选;较近记录只是 recent 候选,需用户确认。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It does reveal that the output is a set of candidates, not final decisions, and that user confirmation is expected ('需用户确认'). However, it does not clarify whether the operation is read-only, what the 'recent' candidate notion means behaviorally, or how the tool treats records beyond the database-wide scan.
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 short and front-loads the core purpose, which is good. However, the second clause, '较近记录只是 recent 候选,需用户确认', is awkward and ambiguous, mixing languages and leaving the exact meaning of 'recent 候选' unclear. It is concise in length but not in clarity.
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 tool with one optional parameter and no annotations, the description is too thin. It covers the general purpose but fails to explain the meaning of 'cognitive shifts', how 'recent candidates' relate to the full-result set, when to use it over find_change_candidates, or what the 'limit' parameter controls. The output schema exists, so return-value structure does not need elaboration, but the behavioral and usage gaps remain significant.
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% and the description never mentions the only parameter, 'limit'. The tool name and phrase '全库' imply a scan, but there is no explanation that limit caps the number of returned candidates or how the default of 5 behaves. The description adds no meaning beyond the bare 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 states a specific action ('discover') against a specific resource ('entire database') with a clear object ('potentially overlooked change candidates'). It gives some scoping ('全库', the whole database), which helps differentiate from sibling tools, though it never explicitly compares itself to find_change_candidates or clarifies the relationship between 'cognitive shifts' and 'change candidates'.
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 phrase '需用户确认' hints that results require user confirmation, but the description gives no explicit guidance on when to choose this tool over siblings like find_change_candidates or get_topic_timeline. There are no stated exclusions, prerequisites, or alternative conditions, so an agent is left to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_change_candidatesA
围绕明确主题提出变化候选端点对(最早端点 × 最近端点);措辞差异不等于变化。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 does disclose a key interpretation rule ('wording differences do not equal change') and implies the output is a set of endpoint pairs, which gives meaningful insight into the algorithm's behavior. It does not mention whether the tool is read-only, whether it requires special permissions, or any other operational constraints, leaving some gaps.
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, dense sentence with no filler: the core purpose is front-loaded, and the caveat about wording differences follows naturally. Every clause adds value, and the structure is easy to parse quickly.
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?
The tool is simple (2 params, no nested objects) and an output schema exists, so the description need not detail return formats. However, the description does not explain the 'endpoint pair' concept, clarify the 'limit' behavior, nor situate the tool among its eight siblings, leaving an agent to guess when to choose this over alternatives.
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 both parameters. It adds meaning to 'topic' by specifying it should be a clear/definite theme, but 'limit' is completely unaddressed and its semantics (max number of candidates, rank ordering) must be inferred from the schema's default value. A more thorough description would explain both parameters explicitly.
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 action ('提出变化候选端点对' — propose change candidate endpoint pairs) and its unique resource/format ('最早端点 × 最近端点'), which distinguishes it from siblings like find_interval_events or get_topic_timeline. It also adds a precise boundary condition ('措辞差异不等于变化'), reinforcing what counts as a change, 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?
The phrase '围绕明确主题' (around a clear topic) implies that this tool is appropriate when the user has a well-specified theme, giving some usage context. However, it does not explicitly name alternatives or state when not to use this tool compared to the listed siblings, leaving the routing decision partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_interval_eventsB
在两个日期端点构成的区间内搜索经历/决定/事件候选。时间相邻不等于因果。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| date_to | Yes | ||
| date_from | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It adds a useful interpretive warning that temporal adjacency does not mean causation, and the word 'candidates' hints at non-definitive output. However, it does not disclose ordering, filtering behavior, or any side effects, which is acceptable given the output schema exists.
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 fluff. The core purpose is front-loaded, and the causality warning earns its place as a meaningful interpretive note. It is appropriately sized for its scope.
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?
The description gives only the core search action and an interpretive caveat. It does not clarify what query or limit do, what date format to use, or how this tool differs from the many siblings in the context. Given the tool has 4 parameters and a rich sibling set, more elaboration is needed for an agent to invoke it correctly in the right situation.
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 references 'two date endpoints,' which maps to date_from and date_to, but provides no meaning for query or limit. The schema's parameter names alone may be insufficient for an agent to understand how to form a query.
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 action and resource: search for experience/decision/event candidates within a date interval. It clearly distinguishes itself from siblings like get_topic_timeline by focusing on event candidates rather than a timeline, though it does not explicitly name the sibling it is not.
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 prefer this tool over the listed siblings such as find_change_candidates or get_topic_timeline. The caveat about temporal adjacency not implying causality is interpretive advice, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_topic_timelineB
按时间整理同一主题的历次表达;最近一条只是 recent 候选。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description must carry the transparency burden. It does add behavioral nuance: results are time-ordered and the newest entry is only a 'recent candidate', not a final truth. It does not mention permissions, side effects, or return behavior, but this appears to be a read-only timeline tool and an output schema exists.
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 compact and front-loaded with the core behavior, followed by one interpretive caveat. It avoids unnecessary words, though the mixed-language phrase 'recent 候选' is somewhat cryptic and could be more clearly phrased.
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 two-parameter tool with an output schema, the description covers the core purpose and a key behavioral nuance. It is incomplete because the 'limit' parameter is unaddressed and the 'recent candidate' concept is left unexplained, but the output schema reduces the need to describe return values in detail.
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 explain the parameters. It indirectly explains 'topic' through '同一主题', but it never explains the 'limit' parameter, its default, or how it affects the returned timeline. This leaves the optional parameter semantically undocumented.
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: it chronologically organizes the historical expressions of the same topic. This is clearly distinct from search or source-reading siblings, though it does not explicitly name any alternative or contrast with 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?
The chronological 'same topic' framing implies when this tool is appropriate, and the caveat about the latest item being only a 'recent candidate' hints at how to interpret results. However, it does not explicitly state when not to use it or which sibling tool to prefer instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_verdictsA
读取用户对该主题此前的确认/否认判定;被否认的解释不得复用。
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It plainly states this is a read operation ('读取') and adds a meaningful policy: denied explanations must not be reused. This goes beyond the tool name and tells the agent a consequence of the returned verdicts.
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 clauses, no filler. The core read action comes first, and the important reuse constraint is appended second. Every word earns its place.
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 one-parameter read tool with an output schema, the description covers the action, the target resource, and the key policy. It lacks only explicit usage guidance relative to sibling tools, but the tool is otherwise callable without further clarification.
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 clarify the parameter. It does so by binding 'topic' to the subject of the verdicts ('用户对该主题此前的确认/否认判定'), which adds semantic meaning beyond the schema's bare 'Topic' label.
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 starts with a specific verb ('读取' / read) and a specific resource: the user's prior confirm/deny verdicts for the topic. This clearly differentiates it from sibling tools like search_sources or get_topic_timeline, which address different information.
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 second clause, '被否认的解释不得复用', implies the tool should be consulted before reusing an explanation, but no explicit when-to-use or when-not-to-use guidance is given. It does not name alternatives or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_sourceA
读取本轮已发现来源的原文与定位信息(引用前必须先读)。
| Name | Required | Description | Default |
|---|---|---|---|
| atom_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It clarifies this is a read operation and constraints the scope to sources discovered in the current round, but it does not describe side effects, prerequisites beyond reading, or output behavior. The output schema likely covers return values, so this is adequate but not rich.
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 front-loaded sentence that states the action, target, returned data, and a critical usage requirement. No filler or redundancy.
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 tool with one required parameter and an output schema, the description is nearly complete. The main omission is explicit atom_id semantics, but the rest of the invocation context is clear enough.
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% and the description never mentions atom_id or how it maps to a source. The parameter name and type provide some inference, but the description adds no explicit semantic guidance beyond the tool name. This is a clear gap for a single required 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?
Description states a specific verb ('读取' / read), a specific resource ('本轮已发现来源' / sources discovered in this round), and what is returned ('原文与定位信息' / full text and location information). It also distinguishes itself from the sibling search_sources by emphasizing pre-discovered sources.
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 gives an explicit usage condition: '引用前必须先读' (must read before citing). It clearly signals when to use the tool, though it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_hypothesis_evidenceA
对原因假设分侧检索:stance=support 或 challenge;两侧都必须调用。
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| stance | Yes | ||
| hypothesis | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and it adds value by specifying the allowed stance values and requiring both sides to be called. These are non-obvious behaviors not visible in the schema. It could be more explicit about read-only semantics, but '检索' and the search-oriented name imply a non-mutating 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 entire guidance is one compact sentence that front-loads the purpose and then packs in the stance values and the mandatory two-call pattern. There is no filler 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 three-parameter tool with an output schema, the description covers the core invocation details: purpose, stance values, and the requirement to call both sides. The main omission is the meaning of the optional 'query' parameter, but because it has a default and is not required, this does not block correct use.
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 description clarifies that 'stance' takes either support or challenge and interprets 'hypothesis' as a causal hypothesis, which is meaningful given 0% schema description coverage. However, it does not explain the optional 'query' parameter at all, leaving one parameter semantically unaddressed.
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 evidence for a causal hypothesis and divides the search by stance ('support' or 'challenge'), giving a specific verb and resource. It does not explicitly compare itself to siblings such as search_sources, but the stance-based scope is enough to identify its distinct role.
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 instruction '两侧都必须调用' is an explicit, actionable usage rule: the agent must invoke the tool with both support and challenge stances. It gives clear context for how to use the tool, although it does not mention when to prefer it over sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_sourcesA
按关键词与时间窗检索用户本人的记录候选,返回 [A{id}] 编号。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| date_to | No | ||
| date_from | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. The verbs '检索' and '返回' clearly indicate a non-destructive read operation that returns candidate IDs, which is useful context. It does not disclose authentication needs, rate limits, or details such as pagination or how time-window boundaries are handled.
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 conveys the action, scope, filtering dimensions, and return format with no filler. It is front-loaded with the verb and ends with the concrete return value.
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?
The description covers the core selection criteria (keyword and time window) and return format, and an output schema exists for return values. However, with no annotations and no parameter-level docs, it leaves limit semantics and date format unspecified, so it is only minimally complete for an agent to call it correctly.
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%, but the description adds meaning for the main parameters: '关键词' maps to query and '时间窗' maps to date_from/date_to. It does not explain the limit parameter or the expected date string format, leaving some of the schema under-explained.
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 ('检索' / search), a resource ('用户本人的记录候选' / the user's own record candidates), and a constraint set (keyword plus time window), with an explicit return of '[A{id}]' IDs. It is clear enough to be distinguished from siblings like search_hypothesis_evidence, though it does not name those alternatives 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 intended use is implied: use this tool when searching the user's own record candidates by keyword and time window. However, there is no explicit guidance about when not to use it or how it compares with sibling search tools such as search_hypothesis_evidence or get_topic_timeline.
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. Dates show when Glama detected each change.
9 tool updates
v2.0.0- First observed
ask_garden - First observed
discover_cognitive_shifts - First observed
find_change_candidates - First observed
find_interval_events - First observed
get_topic_timeline - First observed
get_user_verdicts - First observed
read_source - First observed
search_hypothesis_evidence - First observed
search_sources
TDQS
Most tools have clear roles, but discover_cognitive_shifts and find_change_candidates both surface 'change candidates' and could be confused; search_sources and find_interval_events also overlap in time-based retrieval. The descriptions help clarify scope, but the boundaries are not always immediately obvious.
All names use lowercase snake_case and mostly follow a verb_noun pattern such as search_sources, get_topic_timeline, and find_interval_events. Minor inconsistency exists between verbs like discover, find, and search for similar retrieval actions, but the overall pattern remains predictable.
Nine tools is a well-scoped size for a cognitive retrospection domain. Each tool contributes to a distinct stage of the workflow, from source discovery through evidence retrieval to the final ask_garden synthesis, with no obvious bloat.
The toolset covers the main cognitive backtracking pipeline: search sources, read them, build timelines, identify change candidates, find interval events, gather hypothesis evidence, and check user verdicts. A minor gap is that there is no explicit tool to record or update user confirmations/verdicts, but this may be handled outside the server.
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
Native Clarity decision mapping, MindScan episode reflection, and read-only evidence tools.
MCP-native notes and memory for ChatGPT, Claude, and other AI tools.
Token-efficient MCP memory for Markdown vaults. Tiered search, GraphRAG, AI memories.
Your versioned memory across every AI tool — context maps, personal memory, and tasks over MCP.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables read-only access to Obsidian vaults with semantic search, tag filtering, and metadata queries. Provides secure, intelligent note retrieval and summarization for LLMs without modifying your vault.2213ISC
- AlicenseNot gradedqualityFmaintenanceTurns your Obsidian vault into an AI memory palace, enabling AI assistants to store knowledge with intent-based organization, retrieve information through full-text search, auto-link related notes, and query using Dataview syntax while maintaining provenance tracking.13AGPL 3.0
- AlicenseNot gradedqualityAmaintenanceTurns your Obsidian vault into an MCP-enabled workspace with tools for reading/writing notes, managing folders, running semantic searches, and maintaining long-term memory—all while keeping data local to your vault.220,898154MIT
- AlicenseNot gradedqualityAmaintenanceSyncs Obsidian notes into a temporal knowledge graph and exposes 23 MCP tools for AI assistants to read, search, and write to your vault, enabling persistent memory across conversations.74MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/drephantom/memory-garden'
If you have feedback or need assistance with the MCP directory API, please join our Discord server