mcp-tools
8
总安装量
5
周安装量
#35042
全站排名
安装命令
npx skills add https://github.com/wayne930242/merlin-my-pai --skill mcp-tools
Agent 安装分布
amp
2
openclaw
2
opencode
2
kimi-cli
2
codex
2
github-copilot
2
Skill 文档
MCP Tools éç¼æå
æ¬å°æ¡ç MCP Tools 使¼ pai-bot/src/mcp/tools/ã
æ¶æ§æ¨¡å¼
Service Layer (ts-results) MCP Tool Layer
âââââââââââââââââââââââ ââââââââââââââââââââââââ
â Result<T, Error> â --> â { content, isError } â
âââââââââââââââââââââââ ââââââââââââââââââââââââ
Service Layer
ä½¿ç¨ ts-results åå³ Result<T, Error>ï¼
import { Err, Ok, type Result } from "ts-results";
export async function getData(): Promise<Result<Data, Error>> {
try {
const data = await api.fetch();
return Ok(data);
} catch (error) {
return Err(error instanceof Error ? error : new Error(String(error)));
}
}
MCP Tool Layer
1. 註åå·¥å ·
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
export function registerMyTools(server: McpServer): void {
server.registerTool(
"tool_name", // å½åï¼category_action
{
title: "Tool Title",
description: "å·¥å
·æè¿°ï¼ä¸æï¼",
inputSchema: {
param: z.string().describe("åæ¸èªªæ"),
optional: z.number().optional().describe("å¯é¸åæ¸"),
},
},
async ({ param, optional = 5 }) => {
// 實ä½
}
);
}
2. èç Result
async ({ query }) => {
const result = await service.getData(query);
if (result.err) {
return {
content: [{ type: "text", text: `é¯èª¤: ${result.val.message}` }],
isError: true,
};
}
return {
content: [{ type: "text", text: JSON.stringify(result.val, null, 2) }],
};
}
3. ç¡ Result ç Serviceï¼ä½¿ç¨ try-catchï¼
async ({ query }) => {
try {
const data = await legacyService.fetch(query);
return {
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
};
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
return {
content: [{ type: "text", text: `é¯èª¤: ${message}` }],
isError: true,
};
}
}
å½åè¦ç¯
| é¡å¥ | æ ¼å¼ | ç¯ä¾ |
|---|---|---|
| å·¥å ·å稱 | category_action |
google_calendar_list, memory_search |
| 彿¸å稱 | registerXxxTools |
registerGoogleTools |
é¯èª¤è¨æ¯æ ¼å¼
`${Category} é¯èª¤: ${error.message}`
// ç¯ä¾: "Google Calendar é¯èª¤: Invalid credentials"
註åå ¥å£
å¨ pai-bot/src/mcp/index.ts 註åï¼
import { registerMyTools } from "./tools/my-tools";
export function createMcpServer(): McpServer {
const server = new McpServer({ name: "pai-bot", version: "1.0.0" });
registerMyTools(server);
return server;
}
Checklist
- Service 使ç¨
Result<T, Error> - Tool èç
result.err並åå³isError: true - ä½¿ç¨ Zod schema å®ç¾©åæ¸
- é¯èª¤è¨æ¯å å«åé¡åç¶´
- å¨
index.ts註å