Developer45 min read

为 OpenClaw 构建自定义技能

简介

OpenClaw 的真正威力在于其可扩展性。如果说模型(Model)是大脑,那么技能(Skill)就是双手。尽管 ClawdHub 社区注册表已包含数百个开箱即用的技能,但您可能还需要与自有公司 API、数据库系统或本地化硬件集成。

本指南将带您使用 Node.js 构建一个名为"WeatherCheck"的技能,将其暴露给 OpenClaw Agent,并正确格式化模型上下文协议(MCP)。

1. 理解架构(MCP)

OpenClaw 支持 Anthropic 的开放标准:模型上下文协议(MCP)。这意味着您无需编写脆弱的自定义解析器。您只需构建一个标准的 JSON-RPC 服务器(或 HTTP SSE 流),并暴露以下内容:

  • 资源(Resources): 资源(Resources):模型可以选择读取的静态上下文(例如:"公司 API 文档")。
  • 工具(Tools): 工具(Tools):模型可以决定执行的动作(例如:"fetch_weather_by_city")。

2. 项目初始化

让我们使用官方 MCP SDK 创建一个新的 Node.js 包。

mkdir my-first-skill && cd my-first-skill
npm init -y
npm install @modelcontextprotocol/sdk

3. 编写技能服务器

创建一个 index.js 文件。我们将定义一个使用 stdio 传输的 MCP 服务器(这是 OpenClaw 启动并与您的本地技能通信的最简单方式)。

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

// Initialize the standard MCP server
const server = new McpServer({
  name: "WeatherCheck-Skill",
  version: "1.0.0"
});

// Register a Tool that the AI can call
server.tool("get_weather",
  "Fetch current weather for a specific city",
  {
    city: z.string().describe("The name of the city (e.g. London, Beijing)")
  },
  async ({ city }) => {
    console.error(`Fetching hardware sensor or API for: ${city}`);
    const mockTemp = Math.floor(Math.random() * 30);
    return {
      content: [{ type: "text", text: `The weather in ${city} is ${mockTemp}°C and Sunny.` }]
    };
  }
);

// Connect via standard I/O pipes
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("WeatherCheck Skill is running on stdio!");

4. 在 OpenClaw 中注册技能

打开您的 ~/.openclaw/config.json(或根据版本为 skills.yml),告诉 OpenClaw 如何启动您的新 MCP 服务器。

{
  "mcpServers": {
    "weather_check": {
      "command": "node",
      "args": ["/absolute/path/to/my-first-skill/index.js"]
    }
  }
}

5. 测试集成

重启您的 OpenClaw 守护进程,然后向 AI 提问:

嘿,今天在巴黎需要带伞吗?

如果配置正确,LLM 将在其上下文中看到 get_weather 工具,为'巴黎'生成 JSON 调用参数,您的 index.js 将返回模拟文本。LLM 随后会读取该文本并自然地回复您。

发布到 ClawdHub

当您的技能完善并经过测试后,打包您的代码库并向 Starmadebydata/clawdhub-registry 提交 Pull Request。社区采用从这里开始!更多详情,请参阅 官方发布指南

$ cd ../* END_OF_FILE */
$ cd ../tutorials/* END_OF_TUTORIAL */