跳转到内容

MCP 集成

Fermi 支持 Model Context Protocol (MCP),可连接外部工具服务器。MCP 服务器提供额外工具,代理可以和内置工具一起使用。

MCP 服务器可在多个位置配置(全部可选,全部由用户编辑,fermi init 不会创建):

  • ~/.fermi/mcp.json — 全局 MCP 服务器
  • <project>/.mcp.json — 项目本地 MCP 服务器
  • settings.json 中的 mcp_servers — 全局或项目本地,支持本地覆盖

下面示例使用 mcp.json。JSON 文件中也接受嵌套的 { "mcpServers": { ... } } 包装。

文件是一个 JSON 对象,每个 key 是服务器名,每个 value 是服务器配置:

{
"filesystem": {
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/dir"]
},
"github": {
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
字段类型必填说明
transport"stdio""sse"传输协议。默认:"stdio"
commandstring是(stdio)运行 MCP 服务器的命令。
argsstring[]传给命令的参数。
urlstring是(sse)SSE transport 服务器的 URL。
envobject传给服务器进程的环境变量。支持 ${VAR} 语法引用 shell 环境。
env_allowliststring[]从父进程透传的环境变量名列表。
sensitive_toolsstring[]应被视为敏感的工具名(可能需要额外确认)。

env 字段中的环境变量支持 ${VAR} 语法:

{
"env": {
"API_KEY": "${MY_API_KEY}"
}
}

启动时会从 shell 环境解析 ${MY_API_KEY}。如果变量未设置,Fermi 不会失败:对 mcp.json 会警告并跳过该变量,对 settings.json 会静默省略,服务器仍会在没有该变量的情况下启动。

最常见的传输方式。Fermi 会把 MCP 服务器作为子进程启动,并通过 stdin/stdout 通信。

{
"my-server": {
"transport": "stdio",
"command": "node",
"args": ["path/to/server.js"]
}
}

用于以独立 HTTP 服务运行的服务器。Fermi 会连接服务器的 SSE endpoint。

{
"remote-server": {
"transport": "sse",
"url": "http://localhost:3000/sse"
}
}

配置完成后,MCP 工具会自动对代理可用,并与内置工具一起出现。你不需要做额外操作,代理会按需发现并调用 MCP 工具。

也可以在 Fermi 内运行 /mcp,按需连接已配置服务器并列出发现的工具。这可以在第一轮代理动作前执行,是快速验证配置的好方法。

编辑 MCP 配置后无需重启 Fermi。代理的 reload 工具会重新读取配置并按差异应用——新增的服务器会连接、移除的服务器会断开,其 mcp__* 工具 schema 也会就地添加或清理。服务器发生变化时,Fermi 会插入一条 <system-message>,列出具体哪些 mcp__server__tool 条目出现或消失。

{
"sqlite": {
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sqlite", "path/to/database.db"]
}
}

保存到 ~/.fermi/mcp.json 后,运行 /mcp(或让代理调用 reload)连接服务器并验证 SQLite 工具已被发现——无需完整重启。之后代理即可在正常轮次中调用它们。