跳到正文
曾亮懿 ZengLiangYi Blog

配置 ChatCrystal MCP:让 Claude Code 可检查地调用知识库

用 Claude Code 的项目级 stdio 配置连接 ChatCrystal MCP,核对七个工具、HTTP 后端、审批和真实调用链路。

曾亮懿

曾亮懿

阅读约 3 分钟
目录 展开 收起

ChatCrystal 的 MCP 入口是一个 stdio 桥接层:Claude Code 启动 crystal mcp 子进程,子进程再通过 HTTP 调用 ChatCrystal Server。stdio 不等于整个链路没有网络,也不等于工具每次都会自动调用;配置、服务健康和具体请求都要分别验收。

本文依据 MCP server 实现、CLI 命令 和固定提交 7642768。Claude Code 的安装命令和作用域以官方 MCP 文档为准。

先启动可访问的 ChatCrystal 服务

CLI 要求 Node.js 24 或更高版本;安装后在默认本机连接上启动服务:

npm install -g chatcrystal
crystal serve --daemon
crystal status

crystal mcp 启动时会先请求服务状态,再注册 stdio 工具。默认本机连接的服务未运行时,客户端会尝试后台启动并等待就绪;其他连接不会这样启动。健康或状态检查最终失败时,MCP 不会进入正常工具通信阶段。默认本机端口是 3721。若使用云端连接,应通过 CLI 的 token/base URL 连接配置完成认证;不要把真实 token 写进项目文件。应用当前对自定义回环地址有连接限制,先以实际 crystal status 和连接配置为准。

用 Claude Code 项目作用域注册

官方 CLI 使用 -- 把 Claude Code 的选项与 stdio 命令参数分开。项目作用域会写入项目根目录的 .mcp.json,适合团队审阅和共享:

claude mcp add --scope project --transport stdio chatcrystal -- crystal mcp
claude mcp list
claude mcp get chatcrystal

首次使用项目级服务器可能需要在 Claude Code 中批准工作区。也可以检查 .mcp.json 内容,但不要把 API token 或机器特定路径提交到仓库。官方文档说明了 local、project、user 三种作用域及其优先级;如果只想本机使用,可省略 --scope project 使用 local 作用域。

核对七个工具的实际边界

服务器注册以下工具:

  • search_knowledge:语义检索,默认上限 10。
  • get_note:按 ID 读取完整笔记。
  • list_notes:每页最多 20 条,支持标签和标题/摘要筛选。
  • get_relations:读取某条笔记的关系。
  • recall_for_task:将有界全库检索的候选筛选为项目记忆与全局补充。
  • validate_task_memory:写回前的无副作用质量预检。
  • write_task_memory:把有具体结论的经验写回知识库。

工具结果以 MCP text content 返回 JSON 字符串,不是文章里可以直接假定的任意结构化对象。list_notes 的搜索筛选沿用 API 的 SQL LIKE 语义;需要语义排序时调用 search_knowledge。自动写回会严格拒绝一次性状态报告、模糊日志和不可复用的内容;手动模式仍有结构校验,但标题、摘要和结论可读时,可能带质量警告接受。接受结果也不代表经验已经被当前项目验证。

明白 stdio 与 HTTP 的关系

Claude Code
  │ MCP stdio
  ▼
crystal mcp
  │ HTTP (CrystalClient)
  ▼
ChatCrystal Server :3721
  └─ SQLite + Vectra

crystal mcp 是 Claude Code 启动的 stdio 子进程。协议消息占用 stdout,诊断日志写入 stderr;不要在 MCP 进程里向 stdout 打印调试文本。桥接进程依赖 HTTP 服务的可达性、认证和超时,stdio 只描述 Claude Code 与桥接进程之间的传输。

逐层验收连接

先运行 crystal status,再在 Claude Code 中执行:

/mcp

查看 chatcrystal 的连接状态和工具数量。随后用一个知识库中确实存在的问题请求 search_knowledge,再用返回的 ID 调 get_note;不要只凭列表里出现服务器名称就宣称检索成功。最后可用一个有具体结论的构造记忆先调用 validate_task_memory,确认质量门槛后再决定是否写回。

Claude Code 能调用工具不保证每次自然语言请求都会自动调用它。需要确定性流程时,在项目规则或任务步骤中明确要求先回忆、展示来源、再验证后写回。更多任务记忆边界见 Agent 知识记忆闭环。

分享:

相关文章

MCP 与 Claude Code 记忆工作流:回忆、验证,再写回

用 recall_for_task、validate_task_memory 和 write_task_memory 组织可审计的任务记忆流程,不把工具配置误当成自动记忆保证。

曾亮懿 曾亮懿
阅读约 4 分钟
#ChatCrystal #MCP #Claude Code

MCP 协议的边界:发现、实例身份与调用权限

对照 ChatCrystal 的七个 MCP 工具,用固定 SDK 的内存传输验证同名工具可指向不同实例,并区分参数 schema、行为提示与应用权限。

曾亮懿 曾亮懿
阅读约 4 分钟
#ChatCrystal #MCP #Node.js

实现最小 MCP Server:注册工具与验证 stdio 调用

用固定版本 TypeScript SDK 编写一个离线加法工具,从客户端完成初始化、发现、调用与参数错误检查,再对照 ChatCrystal 的适配边界。

曾亮懿 曾亮懿
阅读约 4 分钟
#ChatCrystal #MCP #Node.js

从文章到代码

到我的 GitHub 看看 ChatCrystal、开发者工具和日常学习记录,欢迎交流实现细节。