关于 claude-remind-mcp
claude-remind-mcp 是用于搜索 Claude Code 对话历史的本地 MCP 服务,帮助开发者查找旧方案并恢复会话。它使用持久化 BM25 索引,并尽力清除常见密钥格式;运行时不发起网络请求。
主要功能
- 01按 BM25 搜索历史消息
- 02读取消息和会话摘要
- 03生成 claude --resume 命令
- 04持久化并增量更新索引
- 05清除常见密钥格式
适用场景
- 01查找重复错误的既有修复
- 02跨项目搜索解决方案
- 03重返代码库时回顾过往工作
- 04恢复未完成的 Claude Code 会话
MCP 相关
它向 MCP 客户端提供搜索、消息、会话和恢复工具。服务通过本地 stdio 运行,并搜索已索引的 Claude Code 历史记录。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y claude-remind-mcpCLAUDE_CONFIG_DIROverride the directory Claude Code stores logs in (default: ~/.claude). Must be an absolute path.CLAUDE_REMIND_DIROverride where the index is persisted (default: ~/.claude-remind). Must be an absolute path.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
4收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | |
| query | string | 是 | 自由文本搜索查询。 |
| format | enum | 否 | 摘要长度:compact=400、detailed=1000、full=2000 个字符。compact | detailed | full |
| project | string | 否 | 可选。与会话的 cwd 进行子字符串匹配(例如 'my-app')。 |
| sinceDays | integer | 否 | 可选。仅包含最近 N 天内更新的会话。 |
详细介绍
claude-remind-mcp
一个用于搜索本地 Claude Code对话历史的 Model Context Protocol (MCP) 服务。它使用 BM25 为 ~/.claude/projects/ 下的所有历史会话建立索引、对机密信息进行脱敏,并让正在运行的 Claude Agent 回忆并继续使用你已经解决过的问题方案,无需从头重新解释问题。
如果你曾发现自己在一个月内重复解决同一个 Docker、部署或身份验证问题,那么这个工具适合你。此软件包仅在本地运行(不进行网络调用),使用纯 JavaScript(不包含原生模块),并以单个可通过 npx 安装的二进制文件发布。

状态:实验性(
v0.1.x)。工具接口稳定;内部实现可能会变更。
安装
通过 Shell 安装:
claude mcp add claude-remind -- npx -y claude-remind-mcp
通过任何可手动配置的 mcp.json 安装(Cursor、Windsurf 等):
{
"mcpServers": {
"claude-remind": {
"command": "npx",
"args": ["-y", "claude-remind-mcp"]
}
}
}
无需下载模型、无需守护进程,也无需数据库。首次查询会从 ~/.claude/projects/ 建立索引(典型历史记录需几秒钟),并将其保存到 ~/.claude-remind/。后续查询会复用该索引,只重新解析 mtime 已变更的文件。
如果 npx 解析到了错误的软件包,请强制指定解析目标:
npm install -g claude-remind-mcp
使用场景
以下是搜索 Claude Code 历史对话能派上用场的几种场景:
- 反复出现的基础设施错误。 “上个月在暂存环境部署时遇到了
ExpiredTokenException——当时是怎么解决的?” 一次remind_search就会返回对应会话、解决方案片段和恢复会话的命令。 - 跨项目共享知识。 “我在另一个 Coolify 项目中是如何配置 BuildKit 缓存的?” 索引涵盖
~/.claude/projects/下的所有项目,因此你在项目 B 中工作时,也能找到项目 A 的解决方案。 - 回顾自己过去的工作。 几周后重新回到某个代码仓库?搜索“Cognito”“RunPod”“tailwind config”,并阅读最新的会话摘要,无需在代码中反复 grep。
- 避免重复深入排查。 在 Claude 花费 10k 个 token 从头诊断问题之前,它可以先调用
remind_search,看看你是否已经解决过。默认响应约为 1.5 KB。 - 从上次停下的地方继续。 每条搜索结果都包含可直接粘贴的
claude --resume <id>命令,以及原始的cwd和gitBranch,只需粘贴一次,即可回到未完成的对话。
工具
四个可组合使用的工具:搜索 → 阅读 → 恢复。
remind_search
使用 BM25 搜索历史消息。返回排序后的命中结果,其中包含片段、solvedHint、messageUuid,以及可直接粘贴的 claude --resume 命令。
{
query: string;
project?: string; // substring of cwd, e.g. "my-app"
limit?: number; // 1–50, default 5
sinceDays?: number; // age filter
format?: "compact" | "detailed" | "full"; // 400 / 1000 / 2000-char snippet
}
[
{
"sessionId": "abc12345-...",
"messageUuid": "msg-9f8e-...",
"score": 432.8,
"ts": "2026-04-10T11:30:26Z",
"role": "assistant",
"project": "/Users/you/Code/my-app",
"gitBranch": "deploy",
"hasError": false,
"solvedHint": "likely",
"aiTitle": "RunPod serverless deploy walkthrough",
"snippet": "Step-by-step: 1) Push the image to NGC 2) Configure the Network Volume…",
"resumeCommand": "claude --resume abc12345-..."
}
]
查询提示:尽量使用具体词语,例如精确的错误字符串、工具/库名称、文件路径。单独使用 auth 或 docker 这样的通用词会降低相关性。
remind_message
获取一条消息的全文,以及可选的前后对话轮次。可在 remind_search 返回你想完整阅读的 messageUuid 后使用。
{
sessionId: string; // full or 8-char prefix
messageUuid?: string; // omit to read whole session (capped at 50 messages)
contextBefore?: number; // 0–20, default 1
contextAfter?: number; // 0–20, default 1
}
在返回的对话窗口中,匹配到的消息会标记为 isFocus: true。
remind_session
会话结构化摘要:标题、消息数量、使用过的工具名称、涉及的文件、错误数量、时间范围、解决方案提示、最后一条用户消息。
{
sessionId: string; // full or 8-char prefix
}
remind_resume
根据会话 ID(完整 ID 或 8 个字符的前缀)解析出可直接运行的 claude --resume <id> 命令,以及会话的 cwd 和 Git 分支。remind_search 已在每条命中结果中返回这些信息,因此优先使用它;此工具适用于你手头只有 ID 的情况。
工作原理
- 逐行读取
~/.claude/projects/下的所有 JSONL 文件,每行上限为 1 MB,每个文件上限为 50 000 条消息,以控制索引器的资源占用。 - 跳过 Claude Code 的附属条目(
permission-mode、file-history-snapshot、attachment、system-reminder等),仅为实际的user和assistant对话轮次建立索引。 - 在内容进入索引前,清除常见的秘密信息模式(API 密钥、JWT、私钥块、环境变量格式的赋值)。
- 使用 minisearch 根据消息文本、工具名称和项目路径构建 BM25 索引,并以原子方式将其持久化到
~/.claude-remind/。 - 启动时仅重新解析
mtime已更改的文件。 - 为每个会话推导出
hasError、endedCleanly、最后一条用户消息和保守的solvedHint(仅在明确表达积极情绪,或会话干净结束且没有错误时设为likely;仅在明确表达消极情绪时设为unlikely;其他情况均为unknown)。
磁盘上的索引是一个 JSON 文件,可以安全删除;下次查询时会重新构建。
配置
| 环境变量 | 默认值 | 用途 |
|---|---|---|
CLAUDE_CONFIG_DIR | ~/.claude | Claude Code 存储日志的位置。 |
CLAUDE_REMIND_DIR | ~/.claude-remind | 持久化索引的位置。 |
若设置,这两个路径都必须是绝对路径;否则将使用默认值。
隐私
~/.claude-remind/index.json 中的索引文件以 0600 权限写入,包含对话中的索引文本。在内容进入索引前,内置的正则表达式处理会清除常见的秘密信息格式(OpenAI / Anthropic / GitHub / AWS / Stripe / Google / Slack 密钥、JWT、私钥块、常见的 KEY=value 环境变量赋值)。这只能尽力而为;如果你在过去的对话中粘贴了自定义凭据格式,可能无法检测到。删除 ~/.claude-remind/ 即可清除索引。
该服务完全在本地通过 stdio 运行,不会发起网络请求。
开发
git clone https://github.com/emretheus/claude-remind-mcp && cd claude-remind-mcp
npm install
npm run build
npm test
脚本:
npm run build # TypeScript build with executable permissions on dist/index.js
npm run dev # tsc --watch
npm run start # Run the MCP server (stdio)
npm run lint # ESLint
npm run lint:fix # ESLint --fix
npm run format # Prettier write
npm run format:check # Prettier check
npm run typecheck # tsc --noEmit
npm test # Vitest run
要让 Claude Code 实例指向本地检出目录:
claude mcp add claude-remind -- node /absolute/path/to/dist/index.js
在 shell 中对 MCP 握手进行冒烟测试:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' \
| node dist/index.js
Pre-commit 会通过 Husky 运行 lint-staged(对暂存文件运行 ESLint + Prettier)。
要求
- Node.js ≥ 20
- 安装了 Claude Code,且会将文件写入
~/.claude/projects/
该软件包有两个运行时依赖项:@modelcontextprotocol/sdk 和 minisearch。不包含原生模块。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。