OpenCode: OpenCode自定义工具与oh-my-openagent
最后更新:2026-08-31
自定义工具和社区插件让 OpenCode 的能力无限扩展。
1. 你将学到
- 自定义工具开发
- 工具注册与配置
- oh-my-openagent 社区生态
- 插件安装与使用
2. 自定义工具开发
(1) 通过 MCP 开发
最推荐的方式是开发 MCP 服务器作为自定义工具:
JSON
{
"mcp": {
"my-tool": {
"command": "node",
"args": ["./tools/my-tool-server.js"],
"env": {
"CONFIG_PATH": "./config.json"
}
}
}
}
(2) MCP 服务器模板
使用 TypeScript 开发 MCP 服务器:
TYPESCRIPT
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new Server(
{ name: "my-tool", version: "1.0.0" },
{ capabilities: { tools: {} } }
);
server.setRequestHandler("tools/list", async () => ({
tools: [
{
name: "my_custom_tool",
description: "自定义工具描述",
inputSchema: {
type: "object",
properties: {
input: { type: "string", description: "输入参数" }
},
required: ["input"]
}
}
]
}));
server.setRequestHandler("tools/call", async (request) => {
if (request.params.name === "my_custom_tool") {
const { input } = request.params.arguments;
return {
content: [{ type: "text", text: `处理结果: ${input}` }]
};
}
});
const transport = new StdioServerTransport();
await server.connect(transport);
(3) Python MCP 服务器
PYTHON
from mcp.server import Server
server = Server("my-tool")
@server.list_tools()
async def list_tools():
return [{
"name": "my_custom_tool",
"description": "自定义工具描述",
"inputSchema": {
"type": "object",
"properties": {
"input": {"type": "string"}
},
"required": ["input"]
}
}]
@server.call_tool()
async def call_tool(name, arguments):
if name == "my_custom_tool":
return f"处理结果: {arguments['input']}"
3. 工具注册与权限
(1) 注册自定义工具
在 opencode.json 中添加 MCP 配置即完成注册。
(2) 工具权限控制
JSON
{
"tools": {
"my-tool_*": true
},
"permission": {
"my-tool_*": "ask"
}
}
4. oh-my-openagent
oh-my-openagent 是 OpenCode 的社区插件生态系统,类似 oh-my-zsh 对 Zsh 的作用。
(1) 安装
BASH
# 克隆到配置目录
git clone https://github.com/anomalyco/oh-my-openagent ~/.config/opencode/oh-my-openagent
(2) 启用插件
在 opencode.json 中配置:
JSON
{
"oh_my_openagent": {
"plugins": [
"git-enhanced",
"docker-helper",
"code-style"
]
}
}
(3) 常用插件
| 插件 | 功能 |
|---|---|
| git-enhanced | 增强 Git 操作(智能 commit、分支管理) |
| docker-helper | Docker 容器和镜像管理 |
| code-style | 代码风格检查和自动修复 |
| test-runner | 增强的测试运行和报告 |
| doc-generator | 自动生成文档 |
| security-scanner | 安全漏洞扫描 |
5. 社区生态
(1) 插件开发
社区成员可以开发插件并提交到 oh-my-openagent 仓库。
(2) 插件分享
通过 GitHub 分享你的自定义工具和 Skills:
- MCP 服务器:发布到 npm
- Skills:提交到 oh-my-openagent
- 代理模板:分享 Markdown 配置文件
(3) 相关项目
| 项目 | 说明 |
|---|---|
| OpenCode | 核心 CLI 工具 |
| oh-my-openagent | 社区插件生态 |
| MCP SDK | 工具开发 SDK |
| CC Switch | API 配置管理 |
❓ 常见问题
Q 自定义工具和 MCP 服务器有什么关系?
A 自定义工具主要通过 MCP 服务器实现。MCP 是协议标准,自定义工具是具体实现。开发自定义工具 = 开发 MCP 服务器。
Q oh-my-openagent 安全吗?
A 社区插件由开源社区维护,使用前应审查代码。建议只安装你信任的插件,并在沙箱环境中测试。
Q Alice 用 oh-my-openagent 提高效率,Bob 自己开发 MCP 工具,谁的做法更好?
A 取决于需求。如果有现成插件满足需求,Alice 的方式更高效;如果需要定制化功能,Bob 的方式更灵活。优先用现成的,不够再自己开发。
📖 小节
- 自定义工具通过 MCP 服务器开发
- 支持 TypeScript 和 Python 开发
- oh-my-openagent 是社区插件生态
- 插件提供增强的 Git、Docker、代码风格等功能
- 优先使用社区插件,不够再自定义开发
📝 作业
-
基础题:安装 oh-my-openagent,启用一个社区插件。
-
进阶题:开发一个简单的 MCP 服务器,提供一个自定义工具。
-
挑战题:开发一个有实际价值的自定义工具(如项目模板生成器),并分享到社区。