MCP (模型上下文协议)
JeikCode 原生支持 Anthropic 提出的 Model Context Protocol (MCP) 标准,允许将外部数据库、第三方 API、Chrome DevTools 自动化、文件系统等丰富工具无缝挂载给 Agent。
1. 配置文件定位与优先级
JeikCode 支持项目级与全局级双层 MCP 挂载:
- 工作区项目级:
<workspace>/.mcp.json(版本控制友好,适合团队协同); - 用户全局级:
~/.jeikcode/mcp.json(全局共享,所有项目均可访问); - 优先级与覆盖:同名服务配置时,项目级配置自动覆盖全局配置。
🛡️ 项目安全信任机制:当首次打开一个未信任的项目时,项目级的
.mcp.json默认处于blocked: untrusted project保护状态,防止恶意代码自动执行未知本地命令。你可以在 WebUI 侧栏中点击“信任本项目”,或在终端执行/mcp trust授权连接。
2. CLI 快速添加方式 (jeikcode mcp add)
除了手动编写 JSON 文件,JeikCode 提供了开箱即用的命令行工具快速添加 stdio 服务:
bash
# 1. 添加到当前项目根目录的 .mcp.json
jeikcode mcp add playwright npx @playwright/mcp@latest
# 2. 添加到全局 ~/.jeikcode/mcp.json
jeikcode mcp add playwright npx -y @playwright/mcp@latest --global
# 3. 指定项目目录添加
jeikcode mcp add playwright npx @playwright/mcp@latest -C /path/to/repo
# 4. 添加 GitHub 官方远程 MCP (支持 OAuth 登录)
jeikcode mcp add-github-oauth github --global
jeikcode mcp login github3. WebUI 界面与状态管理
在浏览器 WebUI 界面中,你可以更直观地管理 MCP 服务:
- 侧栏 MCP 面板:点击侧边栏的 MCP 菜单,可直观查看已挂载的服务器连接状态(Running / Failed / Blocked)以及各自暴露的工具清单;
- 一键刷新重连:修改
mcp.json配置后,点击 MCP 面板右上角的刷新按钮即可热重载并重连,无需重启 JeikCode; - 常用命令:
/mcp:列出当前所有 MCP 服务及状态;/mcp reload:重新读取配置并后台热重连;/mcp trust:信任当前项目并放行项目级服务。
4. scope 两种生命周期隔离模式(⚠️ 核心关键)
在 mcp.json 的服务定义中,JeikCode 支持声明 scope 字段控制连接与进程的生命周期隔离:
json
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"],
"scope": "session"
},
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "E:/code"],
"scope": "project"
}
}
}1. scope: "project"(默认模式)
- 项目级单例共享:同一项目内所有前台、后台会话以及终端/WebUI 共享同一组 stdio 进程树和连接,避免重复通过
npx启动多个冗余实例; - LRU 连接池管理:内核的
ProjectMcpPool默认维护最多 5 个项目的连接池,超出后自动 LRU 淘汰并安全shutdown旧项目的进程树; - 适用场景:无状态的数据查询、文件系统读写、网络搜索等通用服务。
2. scope: "session"(会话隔离模式)
- 独立进程与状态隔离:每个活跃 coding session 拥有专属独立的 transport 与 stdio 进程,各会话互不影响;
- 自动环境变量注入:JeikCode 会在启动该子进程前,自动安全注入环境变量
JEIKCODE_SESSION_ID=<当前会话ID>,便于服务识别调用归属; - 适用场景:带可变状态、浏览器上下文或需要会话路由的服务(如 Chrome DevTools、Playwright、带登录态的自动化工具)。
5. 进程回收与闲置超时机制
为了防止长期挂载的大量外部 MCP 进程持续占用系统内存与文件句柄,JeikCode 内置了智能的闲置进程回收机制:
- 空闲超时配置:在
config.toml中通过[mcp.session] idle_ttl_secs配置(默认 600 秒 / 10 分钟); - 滑动窗口刷新:仅在实际执行工具调用(
call_tool的 begin/end)时才会刷新活跃时间窗口,普通的 schema 查询或列出工具不会重置计时器; - 优雅停机与懒启动:当会话切走(无活跃 lease)且闲置超过 10 分钟后,JeikCode 会安全关闭该会话的 MCP 进程树(Windows 使用 kill-on-close Job Object,Unix 关闭独立进程组)释放内存;工具元数据目录仍保留缓存,当下次再次调用该工具时会自动懒加载重启(Lazy Restart);
- 彻底回收:会话被删除或 JeikCode 退出时,所有挂载的 MCP 进程树会立即无条件销毁。设置
idle_ttl_secs = 0则关闭闲置回收。
6. 并发控制与背压保护 (maxConcurrentCalls)
在 JSON-RPC 通信中,JeikCode 支持在配置中通过 maxConcurrentCalls 限制并发调用深度(支持 1~64,默认值为 8):
- 有状态服务(如浏览器操控、设计器交互):建议显式配置为
1,确保调用严格按时序串行执行; - 无状态服务(如知识库搜索、多并发 API):保留默认值
8,享受多路复用并发加速。