在 AI 编程助手的世界里,模型的能力边界决定了它能够完成的任务范围。OpenCode 作为一个开源的 AI 编程代理,内置了文件操作、终端执行、代码搜索等丰富的工具集。但现实世界的开发场景千变万化——你可能需要查询 Sentry 错误、搜索 GitHub 代码片段、读取项目文档,甚至操作数据库。这时,MCP(Model Context Protocol,模型上下文协议)服务器就派上了用场。
MCP 是一种开放协议,它定义了 AI 模型如何与外部工具和服务进行交互。你可以把它理解为 AI 世界的"USB 接口"——通过这个标准化的协议,OpenCode 可以连接任意实现了 MCP 协议的工具和服务,从而无限扩展自己的能力边界。本文将深入讲解 OpenCode 中 MCP 服务器的配置、使用和管理,帮助你打造一个真正全能的 AI 编程助手。
MCP 由 Anthropic 提出并开源,旨在解决 AI 模型与外部工具交互的标准化问题。在 MCP 的架构中,有两个核心角色:
当你向 OpenCode 发送一个需要调用外部工具的指令时,OpenCode 会通过 MCP 协议将请求转发给配置好的 MCP 服务器,服务器执行相应操作后返回结果。整个过程对用户来说是透明的,你只需要自然地描述需求即可。
OpenCode 支持两种类型的 MCP 服务器:
MCP 服务器通过 OpenCode 的配置文件 opencode.json 或 opencode.jsonc 进行管理。所有 MCP 配置都放在 mcp 字段下,每个服务器需要有一个唯一的名称。
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-server": {
"type": "local",
"command": ["npx", "-y", "my-mcp-command"],
"enabled": true
}
}
}
type:服务器类型,"local" 或 "remote"command(本地):启动命令及参数数组url(远程):远程服务器地址enabled:是否在启动时启用environment(本地):传递给进程的环境变量headers(远程):HTTP 请求头timeout:超时时间,默认 5000ms默认情况下,MCP 服务器在配置后会自动启用。你也可以显式控制:
{
"mcp": {
"my-mcp": {
"type": "local",
"command": ["bun", "x", "my-mcp-command"],
"enabled": false
}
}
}
当 enabled 设置为 false 时,服务器仍然保留在配置中,但不会被加载。这在需要临时禁用某个服务器时非常有用。
本地 MCP 服务器作为子进程运行,通过标准输入输出与 OpenCode 通信。这是最常用的方式,适合运行在本地机器上的工具。
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mcp_everything": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"]
}
}
}
某些 MCP 服务器需要 API 密钥或其他环境变量才能正常工作:
{
"mcp": {
"my-db-mcp": {
"type": "local",
"command": ["npx", "-y", "@my/db-mcp"],
"environment": {
"DATABASE_URL": "postgresql://localhost:5432/mydb",
"API_KEY": "{env:MY_API_KEY}"
}
}
}
}
{env:MY_API_KEY} 语法表示从系统环境变量 MY_API_KEY 中读取值,避免在配置文件中硬编码敏感信息。
某些 MCP 服务器需要在特定目录下运行,可以使用 cwd 参数:
{
"mcp": {
"my-mcp": {
"type": "local",
"command": ["node", "server.js"],
"cwd": "./mcp-servers/my-mcp"
}
}
}
远程 MCP 服务器通过网络 API 提供服务,适合对接 SaaS 服务或团队内部部署的工具。
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-remote-mcp": {
"type": "remote",
"url": "https://my-mcp-server.com/mcp",
"headers": {
"Authorization": "Bearer {env:MCP_API_KEY}"
}
}
}
}
OpenCode 对远程 MCP 服务器的 OAuth 认证提供了完善的支持。当服务器返回 401 状态码时,OpenCode 会自动启动 OAuth 流程。
对于大多数支持 OAuth 的 MCP 服务器,无需额外配置:
{
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp"
}
}
}
如果需要预注册客户端凭证:
{
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": {
"clientId": "{env:MCP_CLIENT_ID}",
"clientSecret": "{env:MCP_CLIENT_SECRET}",
"scope": "tools:read tools:execute"
}
}
}
}
OpenCode 还提供了 CLI 命令来管理 OAuth 凭证:
# 触发认证流程 opencode mcp auth my-oauth-server # 查看所有服务器及其认证状态 opencode mcp list # 移除已存储的凭证 opencode mcp logout my-oauth-server # 调试 OAuth 连接 opencode mcp debug my-oauth-server
认证成功后,凭证会被安全存储在 ~/.local/share/opencode/mcp-auth.json 中。
企业组织可以通过 .well-known/opencode 端点提供默认的 MCP 服务器配置。这些服务器默认可能是禁用的,用户可以按需启用:
{
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}
本地配置会覆盖远程默认值。
MCP 服务器注册的工具会与 OpenCode 内置的工具一起出现在工具列表中。你可以通过 tools 配置项进行精细管理。
{
"mcp": {
"my-mcp-foo": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-foo"]
},
"my-mcp-bar": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-bar"]
}
},
"tools": {
"my-mcp-foo": false
}
}
当你有大量 MCP 服务器时,可以使用 glob 模式批量操作:
{
"tools": {
"my-mcp*": false
}
}
上述配置会禁用所有以 my-mcp 开头的服务器工具。MCP 工具的注册名称以服务器名称为前缀,所以可以使用 "servername_*" 模式来匹配特定服务器的所有工具。
如果你有多个子代理,可以为不同的代理分配不同的 MCP 工具:
{
"mcp": {
"my-mcp": {
"type": "local",
"command": ["bun", "x", "my-mcp-command"],
"enabled": true
}
},
"tools": {
"my-mcp*": false
},
"agent": {
"my-agent": {
"tools": {
"my-mcp*": true
}
}
}
}
这种配置模式非常实用——你可以全局禁用所有 MCP 工具以避免上下文膨胀,然后只对特定代理启用需要的工具。
Sentry 的 MCP 服务器可以让你直接在 OpenCode 中查询项目错误和问题:
{
"mcp": {
"sentry": {
"type": "remote",
"url": "https://mcp.sentry.dev/mcp",
"oauth": {}
}
}
}
配置后,通过命令行完成 OAuth 认证:
opencode mcp auth sentry
之后你可以在对话中直接提问:
显示我项目中最新未解决的问题,使用 sentry。
Context7 是一个文档搜索引擎,可以帮你查找各种框架和工具的文档:
{
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
}
}
}
如果需要更高的速率限制,可以注册免费账号并使用 API 密钥:
{
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
}
}
}
}
在 AGENTS.md 中添加规则,让 OpenCode 自动使用 Context7:
当需要搜索文档时,使用 context7 工具。
Grep by Vercel 可以搜索 GitHub 上的代码片段,非常实用:
{
"mcp": {
"gh_grep": {
"type": "remote",
"url": "https://mcp.grep.app"
}
}
}
在 AGENTS.md 中配置自动使用:
如果不确定如何实现某个功能,使用 gh_grep 搜索 GitHub 上的代码示例。
MCP 服务器会消耗上下文令牌。每添加一个 MCP 服务器,它的工具列表和描述都会被注入到系统提示中。因此,建议只启用你真正需要的服务器。某些服务器(如 GitHub MCP 服务器)可能会产生大量令牌,容易超出上下文限制。
默认超时时间为 5 秒。如果你的 MCP 服务器响应较慢(比如需要启动时间),可以适当调整:
{
"mcp": {
"my-slow-mcp": {
"type": "local",
"command": ["node", "slow-server.js"],
"timeout": 30000
}
}
}
command 中的可执行文件来源可信如果远程 MCP 服务器使用 API Key 而非 OAuth 认证,可以禁用自动 OAuth 检测:
{
"mcp": {
"my-api-key-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": false,
"headers": {
"Authorization": "Bearer {env:MY_API_KEY}"
}
}
}
}
MCP 服务器是 OpenCode 生态系统中极为强大的一环。通过这个标准化的协议,OpenCode 的能力不再局限于内置工具,而是可以无限扩展到任何支持 MCP 的服务上。本文详细讲解了本地和远程 MCP 服务器的配置方法、OAuth 认证流程、工具管理策略以及多个实战案例。
在实际使用中,建议从最需要的工具开始,逐步添加 MCP 服务器,同时注意控制上下文令牌的消耗。合理配置的 MCP 服务器能让 OpenCode 从一个代码编辑器升级为全能的开发助手——查错误、搜文档、找代码示例,一气呵成。
随着 MCP 生态的不断发展,越来越多的服务和工具开始提供 MCP 接口。掌握 MCP 服务器的配置和管理,就是掌握了扩展 AI 编程助手能力的钥匙。立即动手配置你的第一个 MCP 服务器,体验 OpenCode 真正的潜力吧!