关于 Chronicle MCP
Chronicle MCP 是本地 stdio 服务,可索引编码工具的聊天记录并提供 BM25 搜索,供需要回溯对话的开发者使用。归档和索引保留在本机,并可压缩检索内容以减少上下文占用。
主要功能
- 01索引本地聊天记录
- 02规范化多种记录格式
- 03使用 BM25 搜索对话
- 04概述代码块并限制消息长度
- 05交互式设置与 MCP 配置
适用场景
- 01回忆先前编码会话中的决策
- 02搜索旧对话中的问题修复
- 03无需重新粘贴完整日志即可取回上下文
- 04在支持的编辑器客户端配置服务
MCP 相关
Chronicle MCP 通过本地 stdio MCP 服务提供聊天记录搜索和检索,并包含工具、资源及 recall_past_work 提示词。设置向导可为选定应用写入服务配置。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx chronicle-mcp-serverCHRONICLE_BASE_DIRFolder for the chat archive and search index. Defaults to ~/.chronicle (or the folder saved with chronicle --chats-folder).TRANSCRIPTS_DIROverride folder scanned by sync_workspace_data(source_type='agent_transcripts'). Defaults to each editor's own transcript folder.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Chronicle MCP:本地 AI 聊天记录搜索与记忆
为 AI 编码 Agent 提供私密、离线的记忆。 Chronicle MCP(chronicle-mcp-server)是一个本地 stdio MCP 服务,可在你自己的设备上为 Cursor、Claude、ChatGPT 和 Cline 的聊天记录建立索引,并提供 BM25 搜索,让 Agent 无需重新粘贴内容即可回忆过去的对话,最多可减少 40% 的上下文 token。你的存档和索引都保存在本地磁盘上:无需云服务、账号或 API 密钥。
优势 · CLI 机制 · 设置向导 · 工具目录 · 安装 · 自动保存 · 测试 · 对比 · 常见问题 · 许可证
Chronicle 是一个模型上下文协议(MCP)服务,可完全在你的设备上同步、清理、格式化并索引 AI 聊天记录。Chronicle 弥合本地编辑器历史记录与大模型上下文之间的鸿沟,让 Agent 能够搜索、比较、检索并引用过去的对话记录。它采用了经过优化的 token 节省启发式方法,压缩代码块并限制消息长度,最多可减少 40% 的上下文窗口占用。
收录于
1.6.2 版本更新内容
- 修复全新安装问题。 早期版本会让 pip 安装 mcp 2.x,但该版本无法用于运行此服务。现在依赖项为
mcp>=1.22,<2。 - 重写工具定义。 每个工具都包含标题、功能与使用时机说明、副作用和返回值,以及注解(
readOnlyHint、destructiveHint等)。每个参数都有文档说明,所有操作选择器均为枚举。 - 提供真实的错误结果。 现在失败时会返回
isError: true,并且会拒绝未知的操作名称,而不会静默执行其他操作。 - 新增运行方式:
uvx chronicle-mcp-server、chronicle serve、chronicle --version和一个 Dockerfile。 - 服务说明、
recall_past_work提示词和两个资源:chronicle://capabilities与chronicle://chats。
1.6.1 版本更新内容
- 在 Python 3.10 至 3.13 上运行 CI,并在每次推送和拉取请求时执行构建和
twine check。 - 准确的工具目录:包含 8 个工具和
start_session提示词,maintain_storage(op_type="capabilities")现在也会报告这些内容。 - 更丰富的 PyPI 元数据(项目链接、关键词、分类器),以及更整洁的仓库,不再包含已提交的构建产物。
有关更早版本,请参阅完整的 CHANGELOG。
核心架构能力
格式规范化引擎
AI 提供商和编辑器客户端会以各种格式保存对话日志。Chronicle 会将这些结构规范化为统一的角色与内容消息格式:
- ChatGPT 导出内容:ChatGPT 会以递归映射节点结构导出对话历史。Chronicle 遍历并扁平化这些映射,按创建时间戳对消息进行时间排序,并提取纯文本消息线程。
- Claude 导出内容:Claude 会将消息组织为嵌套在 chat_messages 字段下的扁平列表。Chronicle 会解析这些列表,将自定义发送者角色(例如 human 和 assistant)映射为标准角色,并清理文本字符串。
- 通用格式和 Markdown 格式:Chronicle 包含用于扁平 JSON 消息列表(例如 Cline 或 Continue)和结构化 Markdown 日志的解析器(将 User 和 Assistant 等标题映射为消息边界)。
上下文令牌优化
大型聊天日志会迅速耗尽上下文窗口并增加 API 成本。Chronicle 实现了主动节省令牌的机制:
- 代码块摘要:自动将冗长的代码块替换为元数据摘要,注明编程语言和行数。需要阅读完整代码片段时,可按需禁用此功能。
- 长度限制:在可配置的字符数阈值处截断极长的单条消息,并附加提示,告知用户如有需要可使用更大的限制重新运行工具。
上下文窗口令牌节省图
为了验证节省效果,我们执行了多轮对话基准测试。下图展示了多轮消息中的总令牌用量:

通过压缩重复语法和大型原始代码片段,Chronicle 最多可节省 40% 的令牌,直接降低 API 使用成本,并避免上下文窗口耗尽。
混合切分与 BM25 评分搜索引擎
为使工作区搜索更加精准,并检索与上下文相关的答案,Chronicle 集成了先进的检索流程:
- 混合文档切分:在索引时将较长的对话切分为逻辑片段。相邻消息间隔超过 1800 秒(30 分钟)时会按时间切分;或者当由 4 条消息组成的词汇滑动组的 Jaccard 相似度低于 0.12 时,会按词汇切分。每个片段都会作为虚拟文档(
filename__chunk_idx)存储和查询。 - Okapi BM25 评分器:用 Okapi BM25 评分(
k1 = 1.5且b = 0.85)取代简单的关键词匹配和原始 TF-IDF。参数b = 0.85会施加强烈的长度惩罚,确保冗长、离题的聊天日志不会盖过简短、精准的错误修复记录。 - 交接回执优先排序:集成了专用工具,用于保存精简的 Agent 状态文件,记录已修改的路径、承诺事项、跳过的测试和后续操作。当前有效的交接回执会自动优先处理,并置顶显示在搜索结果中。
命令行界面机制
cli.py 文件是系统的入口,会通过 pyproject.toml 配置(chronicle = "cli:main")在系统路径上注册统一的 chronicle 命令。
1. 交互式设置向导
Chronicle 提供一个交互式、零依赖的 TTY 设置向导。在交互式终端中运行 chronicle setup,或不带参数执行 chronicle,即可启动设置流程:
提示
设置向导采用高级紫色主题,支持方向键导航、空格键切换、行内输入编辑和实时路径验证!
键盘导航与控制
使用以下按键与选择菜单交互:
| 命令 / 操作 | 按键控制 | 说明 |
|---|---|---|
| 移动高亮项 | ▲ 上 / ▼ 下方向键 | 在交互式列表中移动焦点 |
| 切换复选框 | Spacebar | 选中或取消选中高亮的应用 |
| 输入自定义 IDE | 导航至 Other 并输入 | 直接在行内输入自定义应用目录 |
| 删除字符 | Backspace | 删除自定义输入中的字符 |
| 确认并注入 | Enter | 验证目标是否存在并运行配置注入 |
| 取消设置 | Ctrl + C 或 Escape | 正常中止设置流程 |
向导阶段与操作
向导将引导你完成以下阶段:
| 步骤 | 阶段名称 | 操作 | 结果与行为 |
|---|---|---|---|
| Step 1 | 单体文件拆分引擎 | 输入 JSON 文件路径(或按 Enter 跳过) | 自动拆分统一的聊天记录导出文件 |
| Step 2 | 存储目录配置 | 指定目录路径(或按 Enter 使用默认值) | 创建用于存储聊天记录的本地文件夹 |
| Step 3 | 交互式 IDE 选择 | 切换复选框、浏览子菜单、输入自定义目标 | 进行 TTY 选择并检查路径有效性 |
| Step 4 | 配置注入与实时仪表板 | 查看最终配置摘要 | 将服务配置注入目标 IDE 设置中 |
重要
如何使用向导——分步演示指南
- 启动流程:在终端中运行
chronicle setup,启动向导。- 拆分单体文件:粘贴导出的
conversations.json的路径(来自 ChatGPT 或 Claude)。系统会将其拆分为独立的对话线程,并保存到 chats 文件夹中。- 指定聊天目录:保留默认的
~/universal-chats文件夹,或输入自定义路径。- 选择目标 IDE:
- 按
Down Arrow向下滚动到 VS Code、Trae 等选项。- 按
Space切换选中状态。- 如果选择 Antigravity,勾选后会自动展开其子选项(Antigravity IDE、Antigravity 2.0、Antigravity CLI)!
- 向下滚动到 Other (Enter custom entry),输入任意系统专属文件夹名称,以添加新兴编辑器。
- 实时路径验证:如果自定义配置路径的父目录不存在,底部会显示警告:
⚠ App/IDE "<name>" was not found on your system.。按Backspace删除输入,或输入有效路径以继续。- 完成并启动:按
Enter为所有选中的应用写入 JSON 配置文件。实时环境仪表板将显示工作区配置的完整摘要。
点击展开分步设置指南
步骤 1:启动设置向导
运行设置命令:
chronicle setup
步骤 2:单体文件拆分引擎
向导会询问你是否要将单体聊天记录(例如从 ChatGPT/Claude 导出的单个 conversations.json)拆分为多个文件,并保存到新建的存储文件夹中:
── Chronicle Archive Setup ─────────────────────────────────────
Do you want to split a single conversations.json file?
Enter path to export file (or press ENTER to skip):
步骤 3:配置存储路径
指定 Chronicle 清理并存储所有对话历史记录的文件夹路径:
Enter path to folder containing your conversations [Default: ~/universal-chats]:
✓ Using existing storage directory: /Users/username/universal-chats
Successfully set chats directory to: /Users/username/universal-chats
第 4 步:交互式 IDE 选择器
采用高级紫色主题的交互式选择菜单。使用箭头键导航,按 Spacebar 切换复选框,在行内编辑自定义输入,然后按 Enter 确认:
Please select the applications/IDEs where you want to install Chronicle MCP:
(Use arrow keys to navigate, Space to toggle, Enter to confirm)
[✓] Cursor
[ ] VS Code (Cline / Roo Code)
[ ] Trae IDE
[ ] Claude Code
[ ] Windsurf
[ ] Claude Desktop
[ ] ChatGPT Desktop
❯ [✓] Antigravity
[✓] Antigravity IDE
[ ] Antigravity 2.0
[ ] Antigravity CLI
Other (Enter custom entry):
说明
如果你在“Other”下输入的自定义应用/IDE 名称在系统中不存在,向导内置的路径验证器会立即在底部显示警告:
⚠ App/IDE "mycustomide" was not found on your system.
第 5 步:注入配置并显示实时环境仪表板
确认选择后,Chronicle 会自动解析系统中的 uvx 路径,将 MCP 服务配置写入每个选定的应用,并显示实时环境仪表板摘要:
── Chronicle Environment Live ──────────────────────────────────
✓ Storage Folder : /Users/username/universal-chats
✓ Auto-Saved Configs for: [Cursor, Antigravity IDE]
How to run the server manually:
$ uvx --from chronicle-mcp-server chronicle
recalled in <1ms · 100% local · zero cloud
────────────────────────────────────────────────────────────────
2. 统一的 Chronicle 全局命令
不带子命令运行时,chronicle 命令会根据上下文执行相应操作:
- 交互式 TTY 终端:启动交互式设置向导。
- 非 TTY/子进程:启动供 MCP 客户端使用的 stdio 传输服务。
它接受 --chats-folder 等选项来配置自定义存储目录,并提供 add 和 split 子命令。
3. 跨平台路径解析规则
CLI 使用 Python 的 sys.platform 和 pathlib.Path 实现路径解析逻辑,以匹配各操作系统的标准用户目录约定:
点击展开操作系统路径规范
- macOS(Darwin):将配置解析到用户的 Library 文件夹,通常位于
~/Library/Application Support/下。 - Windows(Win32):使用
%APPDATA%环境变量;如果未设置该变量,则回退到~/AppData/Roaming/。 - Linux:遵循 XDG 基本目录规范,将路径解析到
~/.config/。
4. 原生 IDE 集成与回退引擎
CLI 封装器开箱即支持主流 AI 辅助开发工具和编辑器:
点击展开受支持的环境和回退逻辑
- Cursor:读取并写入
~/.cursor/mcp.json中的配置。 - Claude Code:与
~/.claude.json集成。 - VS Code(Cline/RooCode/Continue):统一各平台的路径:
- macOS:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json - Windows:
%APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json - Linux:
~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
- macOS:
- Trae:将配置解析到:
- macOS:
~/Library/Application Support/Trae/mcp.json - Windows:
%APPDATA%/Trae/mcp.json - Linux:
~/.config/Trae/mcp.json
- macOS:
- 动态回退引擎:对于新兴平台(例如 Kiro、MiniMax、Qwen Code、Grok Build 或 Antigravity),CLI 会使用回退搜索模式。它会先检查用户主目录下的点目录配置(例如
~/.<app_name>/mcp.json)。如果该目录不存在,则会在相应平台的标准应用支持文件夹中创建应用专属配置(例如 macOS 上的~/Library/Application Support/<app_name>/mcp.json)。
5. 使用 shutil.which 防止 ENOENT 错误
宿主客户端(如 Claude Desktop 或 Cline)会在隔离的子进程中启动 MCP 服务,而这些子进程通常不会继承用户登录 Shell 的环境变量(例如在 .bashrc 或 .zshrc 中定义的自定义路径)。
点击展开详情
为解决此问题,chronicle add 工具会在配置期间使用 Python 的 shutil.which("uvx") 扫描宿主机器的路径。它会解析 uvx 的系统绝对路径(例如 /opt/homebrew/bin/uvx 或 /usr/local/bin/uvx),并将该绝对路径直接写入 IDE 的 JSON 配置文件。
点击展开拆分选项和执行方式
- 自动检测架构格式(嵌套对话树或扁平列表)。
- 使用备用字段识别线程标题(依次检查
title、name和chat_title)。 - 清理文件名,移除平台禁止的字符(例如
/、\、*、?、:、"、<、>和|),并限制长度。 - 通过附加递增的数字后缀解决文件名冲突。
chronicle split /path/to/conversations.json --out /path/to/output_directory
7. 全局聊天文件夹配置
默认情况下,Chronicle 会将处理后的存档存储在 ~/.chronicle/chats。你可以使用 --chats-folder 参数配置自定义的全局存储文件夹:
chronicle --chats-folder /path/to/custom/chats
这会将目标路径保存到本地设置文件(~/.chronicle_settings.json),让你能够在多个开发环境中集中管理存档。
工具参考目录
Chronicle 将其功能整合为 8 个带参数的工具(六个核心工具加两个交接工具)、两个提示词和两个资源。这样的设计可降低客户端 AI 模型的认知负担,同时保留服务端的完整功能。所有操作都在本地运行:没有工具会连接网络(openWorldHint: false)。
| 工具 | 标题 | 只读 | 破坏性 | 幂等 |
|---|---|---|---|---|
search_history | 搜索聊天记录 | 是 | 否 | 是 |
get_chat_logs | 读取聊天记录 | 是 | 否 | 是 |
get_handoff_status | 获取交接状态 | 是 | 否 | 是 |
sync_workspace_data | 导入聊天记录 | 否 | 否 | 否 |
compile_project_insights | 汇总项目洞察 | 否 | 否 | 是 |
save_handoff_receipt | 保存交接回执 | 否 | 否 | 否 |
maintain_storage | 维护存储 | 否 | 是(deduplicate 且 dry_run=false 时) | 是 |
manage_session_state | 管理会话状态 | 否 | 是(delete 且 confirm=true 时) | 否 |
验证与错误。 操作选择器(method、view_type、source_type、insight_type、op_type、action)均为枚举值,limit、top_k、page 和 per_page 等计数必须至少为 1。无效值会在工具运行前被拒绝。执行失败时,例如聊天文件缺失、日期无效,或所选操作缺少必需参数,系统会以 isError: true 的 MCP 结果返回错误,并说明需要修正的内容。
1. search_history
- 描述:用于本地聊天记录的统一搜索和筛选接口。支持关键词、Okapi BM25 语义搜索、日期范围筛选和相关聊天查找。
- 参数:
query(str,默认值:""):搜索查询字符串或关键词列表。method(str,默认值:"semantic"):搜索方式。支持以下选项:semantic:使用 Okapi BM25 评分和指数时间衰减进行标准语义检索。keyword:根据文件中的词语进行精确字符串匹配。date_range:筛选在某个日期范围内修改的文件(需要start_date和end_date)。related:查找与参考文件在语义上接近的存档。
keywords(字符串列表,可选):用于关键词搜索的可选关键词列表。start_date(str,可选):用于日期范围筛选的起始日期字符串(YYYY-MM-DD)。end_date(str,可选):用于日期范围筛选的结束日期字符串(YYYY-MM-DD)。limit(int ≥ 1,默认值:50):关键词搜索或日期范围搜索的最大结果数。top_k(int ≥ 1,默认值:10):语义搜索或相关聊天搜索的最大匹配数。client(str,默认值:"default"):子文件夹客户端标识符。file_name(str,可选):用于相关搜索的参考聊天文件名。
2. get_chat_logs
- 描述:用于读取已存储聊天记录的统一接口。可获取分页文件列表、摘要、文件元数据或指定范围内的消息,并提供节省 Token 的选项。
- 参数:
chat_id(str,可选):目标聊天的文件名。省略时列出所有可用文件。view_type(str,默认值:"content"):要检索的信息类型。支持以下选项:content:指定索引范围内的消息文本片段。metadata:文件统计信息,包括消息数量和修改日期。summary:突出显示开头和结尾上下文的结构化摘要。
start_msg(int ≥ 1,默认值:1):消息片段的起始索引(从 1 开始)。end_msg(int ≥ 1,默认值:20):消息片段的结束索引。max_msg_len(int,默认值:1000):消息的字符数上限,以防 Token 数量膨胀。设为 0 表示不限制。summarize_code(bool,默认值:True):将 Markdown 代码块概括为元数据标题。page(int ≥ 1,默认值:1):文件夹列表的页码(省略chat_id时使用)。per_page(int ≥ 1,默认值:50):文件夹列表每页的结果数上限。client(str,默认值:"default"):子文件夹客户端标识符。
3. sync_workspace_data
- 描述:从各种工具和格式接收、导入并同步外部对话记录或工作区日志。
- 参数:
source_type(str):来源类型标识符。支持以下选项:raw_content:从文本缓冲区或剪贴板内容直接导入 JSON。local_path:从本地磁盘路径复制 JSON 文件。agent_transcripts:从已配置的第三方客户端文件夹同步记录(JSON、JSONL、MD)。cursor_agent_transcripts:已弃用。扫描 Cursor 工作区项目记录文件夹。
payload(str、dict 或 list,可选):输入数据载荷(原始 JSON 文本、磁盘上的文件路径或文件夹路径)。title(str,可选):导入内容的目标文件名或标题。source_dir(str,可选):扫描记录时覆盖默认文件夹目录。limit(int ≥ 1,默认值:50):要同步的最大文件数。client(str,默认值:"default"):子文件夹客户端标识符。
4. compile_project_insights
- 描述:汇总并编纂聊天日志中的洞见,包括提取待办事项、索引文件、比较聊天内容以及生成简报。
- 参数:
insight_type(str):编纂格式。支持的选项:action_items:提取待办事项、复选框和任务列表。knowledge_index:重建或列出按主题分类的文件索引。compare_chats:分析并详细列出两个文件中的共同术语和独有术语。project_brief:将多个聊天中的摘要和待办事项综合成一份 Markdown 文档。
target_chats(字符串列表,可选):用于简报或比较的目标聊天文件名列表。file_name(str,可选):提取待办事项的目标聊天文件名。file_name_a(str,可选):用于比较的第一个聊天文件名。file_name_b(str,可选):用于比较的第二个聊天文件名。brief_title(str,默认值:"Project Brief"):编纂简报的标题。rebuild(bool,默认值:False):重新扫描所有文件以更新知识索引。summary_only(bool,默认值:False):查询索引时返回主题文件数量,而非完整文件列表。client(str,默认值:"default"):子文件夹客户端标识符。
5. maintain_storage
- 描述:执行服务操作、存储清理、设置配置和功能查询。
- 参数:
op_type(str):维护操作名称。支持的选项:compress:使用 Gzip 压缩超过指定期限的历史存档。deduplicate:基于内容哈希搜索并删除重复日志。configure:更新自动保存的消息限制、路径和转录文本。capabilities:返回服务元功能和客户端配置。
settings(dict,可选):设置负载字典(用于 configure)。days_old(int ≥ 1,可选):压缩的截止期限(天),默认值为 30。dry_run(bool,默认值:True):列出重复项,但不执行删除。client(str,默认值:"default"):子文件夹客户端标识符。
6. manage_session_state
- 描述:管理活动会话缓存、文件夹监控、文件合并、Markdown 导出和文件删除。
- 参数:
action(str):要执行的操作。支持的选项:save:将活动消息列表提交到存储中。register_auto_save:注册会话,以便在连接终止时自动保存。trigger_auto_save:立即将待处理会话写入磁盘。watch_folder:报告自上次执行以来的文件变更。merge:将新消息追加到现有聊天存档。export_markdown:将 JSON 转录文本转换为 Markdown 文档。delete:永久删除存档文件(需要 confirm=True)。
conversation_name(str,可选):活动对话名称。messages(dict 列表,可选):消息列表负载。force_save(bool,默认值:False):即使聊天会话低于消息数量限制,也保存会话。file_name(str,可选):目标文件名。confirm(bool,默认值:False):确认删除。new_messages(dict 列表,可选):要合并的消息列表。client(str,默认值:"default"):子文件夹客户端标识符。
7. save_handoff_receipt
- Description:保存结构化的交接收据,记录当前运行的状态(待履行事项、工作状态、证据以及使其失效的条件),以便下一个 Agent 安全地继续工作。收据通过
supersedes构成链,经过索引,活动收据会优先显示在搜索结果顶部。 - Parameters:
obligations(dict):留给下一个 Agent 的未兑现承诺和待办事项。work_state(dict):当前工作状态,例如已修改的文件和进度。evidence(dict):支持性证据,例如已运行或跳过的检查。invalidation(dict):使收据过时的条件(例如受监控的文件),以及要采取的next_safe_action。status(str, default: "open"):收据状态。supersedes(str, optional):此收据所替代的早期收据 ID。closure(dict, optional):关闭收据时的关闭详情(closed_by、closed_at、closure_basis、closure_evidence)。receipt_id(str, optional):显式指定的收据 ID。若省略,则会自动生成。
- Returns:已保存的文件名及其
receipt_id,后续收据会将其作为supersedes传入。client(str, default: "default"):子文件夹客户端标识符。
提示词:start_session
- Title:开始 Chronicle 会话
- Description:返回系统指令,告知 Agent 在聊天开始时使用
manage_session_state(action="register_auto_save")注册对话,以便自动保存会话。
提示词:recall_past_work
- Title:回顾以往工作
- Arguments:
topic(str):要查找的主题,例如 "the auth refactor"。 - Description:引导 Agent 检查
get_handoff_status,使用search_history搜索,并通过较小的消息范围使用get_chat_logs阅读最相关的结果。
资源
chronicle://capabilities(JSON):与maintain_storage(op_type="capabilities")返回的服务器能力报告相同。chronicle://chats(text):归档聊天文件的第一页,内容与get_chat_logs列出的相同。
安装和配置
快速设置(推荐)
直接从 PyPI 安装软件包并运行交互式设置向导,即可自动配置存储路径和编辑器集成:
pip install chronicle-mcp-server
chronicle setup
系统先决条件
- Python 3.10 或更高版本。
- Python 软件包
mcp1.22 或更高版本,且低于 2.0(Model Context Protocol SDK;会自动安装)。 - Python
setuptools(作为软件包安装时需要)。
直接运行服务
MCP 客户端通过 stdio 启动 Chronicle。以下任一命令都可用作客户端配置中的服务命令:
uvx chronicle-mcp-server # no install needed
chronicle-mcp-server # after pip install chronicle-mcp-server
chronicle serve # same server, through the main CLI
chronicle --version
环境变量(均为可选):
| 变量 | 用途 |
|---|---|
CHRONICLE_BASE_DIR | 归档文件夹(默认 ~/.chronicle)。优先于 chronicle setup 保存的文件夹。 |
TRANSCRIPTS_DIR | 用于 sync_workspace_data(source_type="agent_transcripts") 的额外转录文件夹。 |
CHRONICLE_LOG_LEVEL | stderr 日志级别(默认 WARNING)。 |
CHRONICLE_AUTO_CONFIGURE_RULES | 设置为 1,可在启动时将会话注册规则写入工作区规则文件。 |
Docker
该镜像运行相同的 stdio 服务,归档文件位于 /data 卷中:
docker build -t chronicle-mcp .
docker run -i --rm -v "$HOME/.chronicle:/data" chronicle-mcp
务必传入 -i,因为 MCP 流量通过 stdin 和 stdout 传输。在客户端配置中,将 docker 用作命令,并将 ["run", "-i", "--rm", "-v", "/path/to/archive:/data", "chronicle-mcp"] 用作参数。在容器内,Chronicle 只能访问挂载的文件夹,因此导入编辑器对话记录时也需要挂载这些文件夹(并将 TRANSCRIPTS_DIR 指向它们)。
MCP Bundle(Claude Desktop、Smithery)
mcpb/ 存放 MCP Bundle 清单,可用于支持 .mcpb 文件的客户端一键安装,也可用于 Smithery 注册表。该 Bundle 是一个轻量封装:它使用 uvx 运行固定版本的 PyPI 发布包,因此必须安装 uv。运行以下命令进行构建:
npx @anthropic-ai/mcpb pack mcpb chronicle-mcp.mcpb
每次运行时,CI 都会验证清单,并将打包后的 Bundle 上传为 chronicle-mcp-mcpb 构建产物。
手动安装
- 克隆仓库:
git clone https://github.com/Leviathan0x0/Chronicle-MCP.git cd Chronicle-MCP - 创建 Python 虚拟环境:
python3 -m venv venv source venv/bin/activate - 以可编辑模式安装依赖和程序包:
pip install -e .
在 Cursor 和 VS Code 中自动保存会话
由于编辑器(如 Cursor 或 VS Code)不会在聊天窗口或标签页关闭时通知 MCP 服务,Chronicle 采用多步骤方案,确保自动保存对话历史:
1. 进程退出处理程序(自动刷新)
Chronicle 服务通过 Python 的 atexit 模块注册了退出处理程序。关闭聊天标签页或编辑器时,编辑器会终止 stdio 连接,从而关闭 Chronicle 进程。收到此关闭信号后,服务会自动将已注册的待处理会话刷新到本地聊天文件夹。
2. 工作区规则生成(选择启用)
要成功刷新,必须在对话期间注册当前聊天会话。可以通过以下两种方式告知 Agent:
- 使用
start_session提示词,或依靠 MCP 客户端传递给模型的服务说明。 - 在服务环境中将
CHRONICLE_AUTO_CONFIGURE_RULES=1设为启用规则文件。随后,Chronicle 会在启动时于当前工作区的规则文件中创建或追加规则(例如.cursorrules、.clinerules、.windsurfrules和.clauderules)。默认情况下此功能关闭,因此除非你主动启用,否则服务不会写入你的项目。
规则内容如下:
At the beginning of the chat session, you must call the "manage_session_state" tool with action="register_auto_save" to register this conversation. Provide a descriptive title based on the user's initial prompt. As the conversation progresses, periodically update the registration payload to keep it current.
这样可确保动态注册聊天历史,并且编辑器终止连接后,Chronicle 会将完整历史写入你的存储文件夹。
运行验证和测试
Chronicle 包含单元测试和集成测试,用于验证平台路径解析、解析逻辑和工具兼容性:
1. 运行单元测试
运行验证核心业务逻辑的单元测试套件:
python3 -m unittest discover -p "test_*.py"
2. 运行集成测试
端到端测试全部 8 个工具(将 CHRONICLE_BASE_DIR 指向临时文件夹,以免改动真实归档):
CHRONICLE_BASE_DIR="$(mktemp -d)" python3 test_all_tools.py
3. MCP 内省和实时冒烟测试
test_mcp_introspection.py 是单元测试的一部分。它会通过 stdio 启动服务;如果任何工具、参数、提示词或资源缺少描述、标题或注释,如果错误未设置 isError,或者版本号不一致,测试就会失败。smoke_test_live.py 会对真实归档执行只读检查,也可以针对任意服务命令运行:
python3 smoke_test_live.py
python3 smoke_test_live.py --command docker run -i --rm -v "$HOME/.chronicle:/data" chronicle-mcp
所有这些测试都会在 CI 中运行,覆盖 Python 3.10 至 3.13,以及针对最低支持版本 mcp 1.22 的一次运行、python -m build 和 twine check 打包任务,还有 Docker 任务。Docker 任务会构建镜像,并通过 stdio 检查 initialize 和 tools/list。
市场对比矩阵
| 特性 | Chronicle MCP | Mem0 | 原始 RAG / 简单 VecDB |
|---|---|---|---|
| 云依赖 | 本地优先(零云依赖) | 依赖云端 | 云端或复杂的本地配置 |
| Token 节省 | 最多减少 40%(智能代码折叠和裁剪) | 无(传输完整历史记录) | 无 |
| 设置复杂度 | 一键 CLI 安装程序(chronicle add) | 需要 API 密钥和数据库配置 | 高(VecDB 配置和加载器) |
| 自动保存支持 | 原生支持,通过工作区规则和退出钩子实现 | 需要手动集成到应用程序中 | 无 |
| 本地资源占用 | CPU 和 RAM 占用极低(轻量级本地 BM25 索引) | 高 | 高(向量索引开销) |
贡献
欢迎社区贡献。开始贡献:
- Fork 此仓库并创建一个新分支。
- 在
test_chat_connector.py中为新增行为编写单元测试。 - 在本地运行测试套件,验证所有代码更改:
python3 -m unittest discover -p "test_*.py" CHRONICLE_BASE_DIR="$(mktemp -d)" python3 test_all_tools.py - 确保代码格式整洁,且所有导入项均已正确排序。
- 提交 pull request,详细说明你的更改和测试覆盖情况。
发布
在 pyproject.toml、server.json、mcpb/manifest.json(version 和固定的 mcp_config.args)以及 mcpb/server/main.py 中更新版本号,添加一条 CHANGELOG.md 记录,然后发布一个带有 v<version> 标签的 GitHub release。发布工作流 会构建软件包,并通过可信发布将其上传到 PyPI。
公开路线图
Chronicle 计划推出以下功能和增强:
- 本地 Embeddings:使用轻量级 ONNX 模型,添加可选的本地向量检索。
- 数据库审计:自动清理缓存,并对历史日志执行数据完整性审计。
- 动态定制:针对不同大模型托管架构(Claude、GPT、Gemini)优化特定的提示词格式。
- 扩展 IDE 支持:为更多新兴开发环境提供开箱即用的配置注入脚本。
常见问题(FAQ)
常见问题与设置咨询
问:新的交互式设置向导有什么好处?
**答:**它能全自动完成配置过程。不到 10 秒即可配置存储目录、分割原始的单体对话日志、检查系统环境、验证自定义路径,并将配置注入所有目标应用。
问:为什么设置向导使用紫色主题?
**答:**Chronicle 致力于营造高端、前沿的体验。设置向导采用鲜明且易读的紫色/洋红色主题(
\033[1;35m),搭配自定义光标指示符(❯)和状态检查标记([✓]),以优化终端体验。
问:如果系统中找不到自定义应用目录,会发生什么?
**答:**交互式选择器会阻止无效配置。如果你在“Other”下输入的自定义名称对应的配置目录无法解析,底部会立即显示警告:
⚠ App/IDE "<name>" was not found on your system.。你可以轻松按退格键修改输入,而不会丢失其他选择。
问:自动会话保存如何运作?
**答:**Chronicle 会生成工作区规则文件(例如
.cursorrules、.clinerules),指示 AI Agent 在启动时注册会话。标签页或编辑器关闭时,服务端的进程退出钩子会触发自动刷新,将对话记录写入存储文件夹。
许可证
本项目采用 MIT 许可证授权。详情请参阅 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。