MCP 扩展机制:OpenCode 如何通过 Model Context Protocol 接入外部工具

📅 2026/7/2 10:02:55
MCP 扩展机制:OpenCode 如何通过 Model Context Protocol 接入外部工具
如果你用过 OpenCode大概已经见识过它作为 AI 编程助手的本事——读代码、写代码、跑测试、修 bug一套流程走得挺顺。但说句实在话再厉害的 AI 编程助手如果只能在自己的小圈子里转悠能做的事情终究有限。真正让它“好用”的是能不能跟外面的世界打通——能不能查数据库、调 API、操作 Jira 工单、连 Salesforce 查客户信息。这就是 MCP 要解决的事情。MCP 是什么Model Context ProtocolMCP是一个开放协议专门用来连接 LLM 应用和外部数据源、工具。你可以把它理解成一个标准化的“插头”——不管你在用 Claude、Cursor 还是 OpenCode只要支持 MCP就能用同一套方式接上各种各样的外部工具。MCP 采用的是客户端-主机-服务器架构。听起来有点绕拆开看就清楚了Host主机 就是 OpenCode 本身负责创建和管理客户端、控制权限、协调 AI 模型。Client客户端 主机为每个 MCP 服务器创建一个客户端负责跟对应的服务器通信。Server服务器 真正干活的地方暴露工具、资源和提示词给 AI 用。MCP 基于 JSON-RPC 2.0 通信而且是无状态的——每个请求都自包含带上协议版本、客户端标识和能力声明。这种设计让服务器可以跑在本地也可以部署成远程服务很灵活。OpenCode 怎么接入 MCPOpenCode 对 MCP 的支持挺彻底的。你可以在 OpenCode 配置文件的 mcp 字段下定义 MCP 服务器。配置好了之后MCP 提供的工具会自动跟 OpenCode 的内置工具合并一起提供给 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 字段。一个更优雅的方式Skill 嵌入 MCP除了直接在全局配置里加 MCP 服务器OpenCode 还有一个更 neat 的方式——把 MCP 服务器嵌在 Skill 里。具体做法是在 Skill 的 markdown 文件的 YAML frontmatter 里定义 MCP 服务器name:my-skilldescription:“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 会征求用户同意。capability 协商MCP 用了一套能力协商机制——客户端和服务器在每次请求里声明自己支持什么功能。服务器得声明自己支持 tools客户端才能调用工具。这套机制保证了扩展的灵活性——双方可以按需增加新能力不用等协议升级。小结MCP 解决了一个很实际的问题AI 编程助手不能活在真空中。通过 MCPOpenCode 可以接上本地跑的命令行工具也可以连上远端的 SaaS 服务而且接入方式标准化了——不用为每个工具写一遍胶水代码。配置上你可以走全局的 opencode.json也可以走 Skill 自带的 MCP 定义。哪种方式更适合你取决于具体的使用场景。但不管怎么选底层逻辑是一样的MCP 服务器暴露工具 → OpenCode 发现并注册这些工具 → LLM 在需要的时候调用它们。说到底MCP 就是个“USB 接口”——让 AI 能插上各种外设干更多活。OpenCode 把这个接口做得很扎实剩下的就看你能接上多少好玩的东西了。