mcpField
C
Chronicle MCP

Chronicle MCP

本地服务
github.comAI 与智能体34 天前更新

关于 Chronicle MCP

Chronicle MCP 是本地 stdio 服务,可索引编码工具的聊天记录并提供 BM25 搜索,供需要回溯对话的开发者使用。归档和索引保留在本机,并可压缩检索内容以减少上下文占用。

主要功能

  1. 01索引本地聊天记录
  2. 02规范化多种记录格式
  3. 03使用 BM25 搜索对话
  4. 04概述代码块并限制消息长度
  5. 05交互式设置与 MCP 配置

适用场景

  1. 01回忆先前编码会话中的决策
  2. 02搜索旧对话中的问题修复
  3. 03无需重新粘贴完整日志即可取回上下文
  4. 04在支持的编辑器客户端配置服务

MCP 相关

Chronicle MCP 通过本地 stdio MCP 服务提供聊天记录搜索和检索,并包含工具、资源及 recall_past_work 提示词。设置向导可为选定应用写入服务配置。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"Chronicle-MCP": {
"command": "uvx",
"args": [
"chronicle-mcp-server"
],
"env": {
"CHRONICLE_BASE_DIR": "<CHRONICLE_BASE_DIR>",
"TRANSCRIPTS_DIR": "<TRANSCRIPTS_DIR>"
}
}
}
}
启动命令uvx chronicle-mcp-server
需要配置的环境变量
CHRONICLE_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypichronicle-mcp-server1.6.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Chronicle MCP:本地 AI 聊天记录搜索与记忆

为 AI 编码 Agent 提供私密、离线的记忆。 Chronicle MCP(chronicle-mcp-server)是一个本地 stdio MCP 服务,可在你自己的设备上为 Cursor、Claude、ChatGPT 和 Cline 的聊天记录建立索引,并提供 BM25 搜索,让 Agent 无需重新粘贴内容即可回忆过去的对话,最多可减少 40% 的上下文 token。你的存档和索引都保存在本地磁盘上:无需云服务、账号或 API 密钥。

Chronicle 标志

CI ‎ GitHub 星标数 ‎ PyPI 版本 ‎ PyPI 下载量 ‎ 许可证:MIT ‎ Python 支持

优势 · CLI 机制 · 设置向导 · 工具目录 · 安装 · 自动保存 · 测试 · 对比 · 常见问题 · 许可证

Chronicle 是一个模型上下文协议(MCP)服务,可完全在你的设备上同步、清理、格式化并索引 AI 聊天记录。Chronicle 弥合本地编辑器历史记录与大模型上下文之间的鸿沟,让 Agent 能够搜索、比较、检索并引用过去的对话记录。它采用了经过优化的 token 节省启发式方法,压缩代码块并限制消息长度,最多可减少 40% 的上下文窗口占用。

收录于

Chronicle MCP server

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 设置中

重要

如何使用向导——分步演示指南

  1. 启动流程:在终端中运行 chronicle setup,启动向导。
  2. 拆分单体文件:粘贴导出的 conversations.json 的路径(来自 ChatGPT 或 Claude)。系统会将其拆分为独立的对话线程,并保存到 chats 文件夹中。
  3. 指定聊天目录:保留默认的 ~/universal-chats 文件夹,或输入自定义路径。
  4. 选择目标 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 删除输入,或输入有效路径以继续。
  5. 完成并启动:按 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
  • Trae:将配置解析到:
    • macOS:~/Library/Application Support/Trae/mcp.json
    • Windows:%APPDATA%/Trae/mcp.json
    • Linux:~/.config/Trae/mcp.json
  • 动态回退引擎:对于新兴平台(例如 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 配置文件。

### 6. 结构化拆分引擎子命令 用户从 ChatGPT 或 Claude 下载对话存档时,通常会获得一个包含数百个独立对话线程的单体 JSON 文件(例如 `conversations.json`)。 `chronicle split` 子命令会解析这些大型数据,并将其拆分为单独的 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 软件包 mcp 1.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_LEVELstderr 日志级别(默认 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 构建产物。

手动安装
  1. 克隆仓库:
    git clone https://github.com/Leviathan0x0/Chronicle-MCP.git
    cd Chronicle-MCP
    
  2. 创建 Python 虚拟环境:
    python3 -m venv venv
    source venv/bin/activate
    
  3. 以可编辑模式安装依赖和程序包:
    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 MCPMem0原始 RAG / 简单 VecDB
云依赖本地优先(零云依赖)依赖云端云端或复杂的本地配置
Token 节省最多减少 40%(智能代码折叠和裁剪)无(传输完整历史记录)无
设置复杂度一键 CLI 安装程序(chronicle add)需要 API 密钥和数据库配置高(VecDB 配置和加载器)
自动保存支持原生支持,通过工作区规则和退出钩子实现需要手动集成到应用程序中无
本地资源占用CPU 和 RAM 占用极低(轻量级本地 BM25 索引)高高(向量索引开销)

贡献

欢迎社区贡献。开始贡献:

  1. Fork 此仓库并创建一个新分支。
  2. 在 test_chat_connector.py 中为新增行为编写单元测试。
  3. 在本地运行测试套件,验证所有代码更改:
    python3 -m unittest discover -p "test_*.py"
    CHRONICLE_BASE_DIR="$(mktemp -d)" python3 test_all_tools.py
    
  4. 确保代码格式整洁,且所有导入项均已正确排序。
  5. 提交 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 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。