熟悉 OpenCode 的用户应该深有体会,这款 AI 编程助手在解读代码、编写测试用例、修复程序漏洞等方面表现出色。然而,即便再智能的 AI 工具,如果仅限于自身的封闭环境,其价值也会受限。真正的“实用”,取决于它能否与外部世界顺畅交互:比如查询数据库、调用 API、更新 Jira 任务,或是连接 Salesforce 来获取客户资料。
这正是 MCP(Model Context Protocol,模型上下文协议)所要实现的目标。

MCP 究竟是什么?
简而言之,Model Context Protocol(MCP)是一个开放协议,专为连接 LLM 应用与外部数据源及各种工具而设计。你可以把它想象成一个标准化的“通用插头”——无论你使用的是 Claude、Cursor 还是 OpenCode,只要它们支持 MCP,就能通过统一的方式接入各类外部工具。
其架构遵循典型的客户端-主机-服务器模式。听起来或许有些复杂,拆解来看便清晰明了:
- 主机(Host):OpenCode 本身扮演主机角色,负责创建并管理客户端、控制权限,同时协调 AI 模型的工作。
- 客户端(Client):主机为每个 MCP 服务器创建一个对应的客户端,专门负责与该服务器进行通信。
- 服务器(Server):这是真正执行任务的部分,它将工具、资源和提示词暴露给 AI 使用。
在通信方面,MCP 基于 JSON-RPC 2.0 协议,采用无状态设计——每个请求都包含完整信息,包括协议版本、客户端标识以及能力声明。这种设计使得服务器既能运行在本地环境,也能部署为远程服务,灵活性很强。
OpenCode 如何集成 MCP?
OpenCode 对 MCP 提供了全面的支持。你只需在配置文件的 mcp 字段中定义好 MCP 服务器,系统便会自动将 MCP 提供的工具与内置工具整合,一并交由 LLM 调用。
集成方式有两种:本地服务器与远程服务器。
本地 MCP 服务器
本地服务器是指将 MCP 服务器作为子进程启动,通过标准输入输出(stdio)与 OpenCode 通信。
配置方式非常直接,只需在 opencode.json 中添加如下内容:
{
"mcp": {
"everything": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"]
}
}
}
其中 type 必须设置为 "local",command 是启动服务器的命令及参数。你还可以配置 environment 来传递环境变量,设置 timeout 来指定超时时间(默认 5 秒),以及使用 enabled 来控制是否启用该服务器。
配置完成后,直接在提示词中输入“use the mcp_everything tool”即可调用该工具。
远程 MCP 服务器
远程服务器通过 HTTP 进行通信,适合部署在云端的服务。配置方式类似,只需将 type 改为 "remote",并添加 url 参数:
{
"mcp": {
"composio": {
"type": "remote",
"url": "https://connect.composio.dev/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
远程服务器还支持 OAuth 认证——如果你的 MCP 服务器需要登录授权,只需在配置中增加一个 oauth 字段即可。
一个更优雅的方案:将 MCP 集成到 Skill 中
除了在全局配置中添加 MCP 服务器,OpenCode 还提供了一种更巧妙的方式——将 MCP 服务器直接嵌入到 Skill 中。
具体做法是在 Skill 的 Markdown 文件的 YAML 头信息中定义 MCP 服务器:
---
name: my-skill
description: "A skill that uses a custom MCP server"
mcp:
my-server:
command: ["npx", "-y", "@some/mcp-server"]
environment:
API_KEY: "${MY_API_KEY}"
---
或者,你也可以直接在 Skill 目录中放置一个 mcp.json 文件来实现同样的效果。
这种方式的优势显而易见:Skill 可以自行管理其 MCP 依赖,无需修改全局配置。当 Skill 被加载时,插件会自动发现并连接对应的 MCP 服务器。更妙的是,连接采用懒加载机制——仅在首次使用时才建立连接,若 5 分钟内无活动则自动断开并清理资源,非常省心。
实际案例:接入 Salesforce
理论结合实践,我们以 Salesforce 为例,展示如何将真实业务工具接入 OpenCode。
这里使用 Composio 的 MCP 网关来连接 Salesforce,有两种实现方式:
方式一:使用 Composio CLI
首先安装 CLI 并登录:
npx composio-cli login
然后在 OpenCode 中让 AI 执行认证:直接输入“Authenticate with Salesforce Composio”。按照提示完成浏览器中的授权流程即可。
方式二:直接在 OpenCode 配置中添加
在 opencode.json 的 mcp 字段中增加以下内容:
{
"mcp": {
"composio": {
"type": "remote",
"url": "https://connect.composio.dev/mcp"
}
}
}
随后同样让 AI 触发认证流程。
配置完成后,你就可以在 OpenCode 中直接提出需求:
- “Add new contact to spring campaign”
- “Clone opportunity with all associated products”
OpenCode 的 Agent 会通过 MCP 调用 Salesforce 的对应工具来执行任务。就是这么简单。
需要特别注意的几点
上下文占用:MCP 服务器会消耗 LLM 的上下文空间。集成的工具越多,占用的 token 就越多。部分服务器(如 GitHub MCP)消耗尤其巨大,容易超出上下文限制。因此,务必按需配置,不要盲目添加。
安全边界:MCP 的设计原则之一是实现服务器之间的相互隔离——每个服务器只能获取自身所需的信息,无法查看整个对话历史或其他服务器的活动。主机(OpenCode)负责维护这一安全边界。需要注意的是,工具本身可能涉及任意代码执行,因此在调用工具前,OpenCode 会先征求你的同意。
能力协商机制:MCP 采用了一套能力协商机制——客户端和服务器在每次请求中声明自身支持的功能。服务器必须声明支持 tools,客户端才能调用其工具。这套机制确保了扩展的灵活性,双方可根据需要增加新能力,无需等待协议升级。
总结
MCP 解决了一个现实问题:AI 编程助手不能孤立运行。通过 MCP,OpenCode 既能接入本地运行的命令行工具,也能连接远程的 SaaS 服务,并且接入方式实现了标准化——无需为每个工具重复编写胶水代码。
在配置上,你可以选择全局的 opencode.json 方式,也可以采用 Skill 自带的 MCP 定义。哪种方式更适合你,取决于具体的使用场景。但无论选择哪种方式,底层逻辑是一致的:MCP 服务器暴露工具 → OpenCode 发现并注册这些工具 → LLM 在需要时调用它们。
总而言之,MCP 就像一个“USB 接口”——让 AI 能够连接各种外部设备,完成更多任务。OpenCode 将这个接口实现得非常扎实,接下来,就看你能连接多少有趣的功能了。
