OpenCode: OpenCode自定义工具与oh-my-openagent

最后更新:2026-08-31

自定义工具和社区插件让 OpenCode 的能力无限扩展。

1. 你将学到


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:

(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 的方式更灵活。优先用现成的,不够再自己开发。

📖 小节


📝 作业

  1. 基础题:安装 oh-my-openagent,启用一个社区插件。

  2. 进阶题:开发一个简单的 MCP 服务器,提供一个自定义工具。

  3. 挑战题:开发一个有实际价值的自定义工具(如项目模板生成器),并分享到社区。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏