MCP Workers AI

MCP Workers AI

用于Cloudflare Workers的MCP服务器SDK。

MCP Workers AI Quick Start Guide

适用于 Cloudflare Workers 的 MCP 服务器 SDK

基本安装

yarn add mcp-workers-ai
# 或者
npm install -S mcp-workers-ai

核心功能

1. 加载工具

import { loadTools } from "mcp-workers-ai"

const tools = await loadTools([
  import("@modelcontextprotocol/server-gitlab"),
  import("@modelcontextprotocol/server-slack"),
]);

// 将 tools 传递给 LLM 推理请求

2. 调用工具

import { callTool } from "mcp-workers-ai"

// LLM 选择的工具示例
const selected_tool = {
  arguments: {
    project_id: 'svensauleau/test',
    branch: 'main',
    files: [ /* 文件内容 */ ],
    commit_message: 'added unit tests'
  },
  name: 'push_files'
};

const res = await callTool(selected_tool)
// 将 res 传回 LLM 推理请求

完整工作流示例

Wrangler 配置 (wrangler.toml)

name = "test"
main = "src/index.ts"

[ai]
binding = "AI"

[vars]
GITLAB_PERSONAL_ACCESS_TOKEN = "glpat-aaaaaaaaaaaaaaaaaaaa"

[alias]
"@modelcontextprotocol/sdk/server/index.js" = "mcp-workers-ai/sdk/server/index.js"
"@modelcontextprotocol/sdk/server/stdio.js" = "mcp-workers-ai/sdk/server/stdio.js"

Worker 示例代码

import { loadTools, callTool } from "mcp-workers-ai"

export default {
  async fetch(request: Request, env: any): Promise<Response> {
    // 设置工具所需的环境变量
    process.env.GITLAB_PERSONAL_ACCESS_TOKEN = env.GITLAB_PERSONAL_ACCESS_TOKEN;

    // 加载所需工具
    const tools = await loadTools([
      import("@modelcontextprotocol/server-gitlab/dist/"),
    ]);

    const prompt = await request.text();

    // 初始 AI 调用
    const response = await env.AI.run(
      "@hf/nousresearch/hermes-2-pro-mistral-7b",
      {
        messages: [{ role: "user", content: prompt }],
        tools,
      },
    );

    // 处理工具调用
    if (response.tool_calls && response.tool_calls.length > 0) {
      const selected_tool = response.tool_calls[0];
      const res = await callTool(selected_tool)

      // 最终 AI 调用整合工具执行结果
      const finalResponse = await env.AI.run(
        "@hf/nousresearch/hermes-2-pro-mistral-7b",
        {
          messages: [
            { role: "user", content: prompt },
            { role: "assistant", content: "", tool_call: selected_tool.name },
            { role: "tool", name: selected_tool.name, content: res.content[0].text },
          ],
          tools,
        },
      );
      return new Response(finalResponse.response);
    } else {
      return new Response(response.response);
    }
  }
};

使用示例

curl http://example.com -d "在项目 svensauleau/test 的主分支上创建一个名为 'joke.txt' 的文件,内容为你最喜欢的笑话。使用提交信息 'added unit tests'"

结果将显示 AI 已成功在指定项目中创建了文件。