MCP(ModelContextProtocol)是开放协议,使OpenCode能通过主机-客户端-服务器架构接入外部工具。支持本地(stdio)和远程(HTTP)两种方式,可在全局配置或Skill中定义。通过MCP,OpenCode可调用数据库、API、Salesforce等业务工具,实现标准化、安全隔离的扩展能力。
OpenCode 如何通过 MCP 扩展机制接入外部工具
时间:2026-07-02
浏览:602
文章目录
使用过 OpenCode 的用户都知道,它在读代码、写测试、修复 bug 等方面表现出色。不过,再智能的 AI 编程助手,如果只能在自己的封闭环境中运行,其价值始终有限。真正实用的能力,在于能否与外部世界交互:例如查询数据库、调用 API、修改 Jira 工单,或者连接 Salesforce 查找客户信息。
这正是 MCP 所解决的问题。

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 将这个接口实现得相当扎实,剩下的就看用户能接入多少有趣的应用了。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。