MCP服务器生成器

AutoMCP是一个轻量级的Node.js CLI工具,通过Docker和LLM自动生成完整的Node/TypeScript MCP服务器,适用于快速API开发和演示。

  • by BinSquare
  • TypeScript
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 BinSquare/autoMCP

使用说明

AutoMCP命令行界面

AutoMCP是一个轻量级的Node.js CLI,它:

  1. 使用 mcp/fetch MCP服务器(通过Docker)获取API文档。
  2. 提示LLM为该API设计完整的Node/TypeScript MCP服务器。
  3. 创建隔离 苯甲酸雌二醇 沙盒,写入所有文件并运行 npm install + npm run build.
  4. 打印带有沙盒ID、构建日志和生成文件的结构化JSON,非常适合黑客马拉松演示。

不再需要Mastra运行时;存储库现在包含单个CLI工作流。


需求

依赖性 目的
Node.js≥20 原生 fetchESM支持
Docker 运行 mcp/fetch 服务器
E2B_API_KEY 验证沙盒创建
LLM API密钥 OPENAI_API_KEY (默认)或 GROQ_API_KEY

可选环境变量:

# LLM provider selection
LLM_PROVIDER=openai        # or groq
LLM_MODEL=gpt-4o-mini      # optional override (MODEL also accepted)

# API keys (provide whichever provider you choose)
OPENAI_API_KEY=sk-...
GROQ_API_KEY=gsk-...

CLI会自动启动 docker run -i --rm mcp/fetch 无论何时需要文件。确保Docker桌面(或守护进程)正在运行。


设置

git clone <repo-url>
cd autoMCP
pnpm install

# Provide secrets (use your own secure method)
export E2B_API_KEY=...
export LLM_PROVIDER=openai         # or groq
export OPENAI_API_KEY=...          # required if LLM_PROVIDER=openai
export GROQ_API_KEY=...            # required if LLM_PROVIDER=groq
export LLM_MODEL=...               # optional override

构建(排放 dist/):

pnpm build

在开发过程中直接使用tsx运行:

pnpm dev -- \
  --apiName "JSONPlaceholder" \
  --baseUrl https://jsonplaceholder.typicode.com \
  --docs https://jsonplaceholder.typicode.com/

运行编译后的CLI:

pnpm start -- \
  --apiName "JSONPlaceholder" \
  --baseUrl https://jsonplaceholder.typicode.com \
  --docs https://jsonplaceholder.typicode.com/ \
  --maxIterations 3

这 --maxIterations 标志控制代理进行的构建/验证尝试次数(默认3次,最小1次,最大10次)。


Web用户界面

AutoMCP包括一个基于web的UI,便于在浏览器中访问。

启动Web服务器

开发模式:

pnpm dev:web

生产模式(建成后):

pnpm build
pnpm start:web

web UI将在 http://localhost:3000 (或指定的端口 PORT 环境变量)。

使用Web UI

  1. 打开浏览器并导航到 http://localhost:3000
  2. 填写表格:
    • API名称:API的友好名称(例如“JSONPlaceholder”)
    • 基础URL:API的基本URL(例如https://api.example.com")
    • 文档URL:API文档的URL
    • 最大尝试次数:构建/验证重试次数(默认值3)
  3. 点击“生成MCP服务器”
  4. 等待生成完成(这可能需要1-2分钟)
  5. 查看结果,包括:
    • 生成的文件位置
    • 生成日志
    • 测试的下一步
  6. 通过提供的按钮下载ZIP工件(即使验证/构建失败也可用)

web UI提供了一个用户友好的界面,用于生成MCP服务器,而无需使用命令行。

CLI打印JSON类似于:

{
  "sandboxId": "sbx_XYZ",
  "projectDir": "/home/user/generated/jsonplaceholder-mcp",
  "filesWritten": [
    "/home/user/generated/jsonplaceholder-mcp/package.json",
    "/home/user/generated/jsonplaceholder-mcp/src/server.ts",
    "... more files ..."
  ],
  "localPath": "/abs/path/output/jsonplaceholder",
  "commands": [
    {
      "command": "npm install",
      "exitCode": 0,
      "stdout": "...",
      "stderr": "",
      "durationMs": 5230
    },
    {
      "command": "npm run build",
      "exitCode": 0,
      "stdout": "...",
      "stderr": "",
      "durationMs": 3120
    }
  ],
  "documentationSource": "mcp-fetch",
  "summary": "MCP server exposing endpoints GET /posts, GET /users, POST /posts."
}

工件保存在 output/<slug>/ (例如。, output/jsonplaceholder).该文件夹包含生成的源, Dockerfile,以及LLM建议的任何额外文件。


运作原理

  1. 文档提取工具(src/lib/mcpFetchClient.ts)

    • 生成物 docker run -i --rm mcp/fetch 通过MCP SDK。
    • 呼叫 fetch 工具将任何文档URL转换为markdown/纯文本。
    • 回退到原始HTTP fetch 如果MCP不可用。
  2. LLM规划师(src/lib/llm.ts)

    • 将文档、API名称和基本URL发送到您选择的LLM提供商(默认情况下为OpenAI,Groq可选)。
    • 尊重 LLM_MODEL (或 MODEL)因此,您可以选择任何支持的模型;默认值为 gpt-4o-mini (OpenAI)和 llama-3.1-70b-instant (Groq)。
    • 该模型返回描述端点的JSON、可选的额外文件和shell命令。
    • 确保 npm install 和 npm run build 总是包括在内。
  3. 沙盒运行器(src/lib/e2bSandbox.ts)

    • 创建E2B沙盒,将每个文件写入 /home/user/generated/<api>-mcp,并按顺序运行命令。
    • 捕获每个命令的stdout/stderr以及退出代码。
    • 命令一完成,就把沙箱拆掉。
  4. 模板和本地副本(src/templates/mcpProject.ts, src/lib/localSaver.ts)

    • 将LLM元数据与已知良好的MCP服务器模板(package.json,tsconfig, src/server.ts, Dockerfile,自述)。
    • 将所有生成的文件保存到 output/<slug>/ 因此,您可以在本地检查或部署它们。
  5. CLI(src/cli.ts)

    • 作语法分析 --apiName, --baseUrl, --docs.
    • 验证所需的环境变量。
    • 调用编排器(runAutoMcp)并打印最终的JSON结果。

故障排除

问题 修复
docker: command not found 安装Docker桌面/引擎并重新启动CLI。
CLI日志 MCP tools unavailable Docker获取服务器失败--检查 docker run -i --rm mcp/fetch 手动。
E2B_API_KEY is not set 参观 e2b.dev 以创建API密钥,然后将其导出
生成失败,因为缺少LLM API密钥 导出 OPENAI_API_KEY (或 GROQ_API_KEY 如果 LLM_PROVIDER=groq).

要进行详细的MCP调试,请手动运行fetch服务器:

docker run -it --rm -p 8080:8080 mcp/fetch

然后用curl调用它来检查响应。


部署到Fly.io

您可以托管web UI+API,这样队友就可以远程生成/下载MCP服务器。

1.安装Fly工具

curl -L https://fly.io/install.sh | sh
fly auth signup    # or fly auth login

2.配置应用程序

此回购现在包含一个生产 Dockerfile (root)构建TypeScript包并运行 dist/webServer.js.创建应用程序并设置机密:

fly launch --no-deploy   # answer prompts (keep Dockerfile)

fly secrets set \
  E2B_API_KEY=... \
  LLM_PROVIDER=openai \
  OPENAI_API_KEY=... \
  GROQ_API_KEY=...        # only if LLM_PROVIDER=groq

可选秘密: LLM_MODEL, PORT (容器内默认为3000)。

3.部署

fly deploy

Fly将使用包含的Dockerfile进行构建,公开Express服务器,并从以下位置提供静态UI public/。您可以共享Fly发布的URL,以便其他人可以提交作业并从返回的JSON下载他们生成的MCP项目(localPath 在容器内部是相对的——如果需要持久性工件,可以考虑连接S3、Fly卷或下载端点)。


下载工件

每次运行都会在下创建(或更新)一个文件夹 output/<slug> 哪里 <slug> 源自API名称。web UI显示了一个下载按钮,点击:

GET /download/:id

哪里 :id 是蛞蝓吗/downloadId API返回。端点流式传输最新文件的ZIP(即使构建失败),这样您就可以检查部分输出或与队友共享工件。

项目结构

src/
  cli.ts                 # CLI entry point
  webServer.ts           # Express web server for UI
  autoMcp.ts             # Orchestration logic
  lib/
    mcpFetchClient.ts    # Connects to mcp/fetch
    llm.ts               # OpenAI prompt + JSON parsing
    e2bSandbox.ts        # Writes files and runs commands inside E2B
public/
  index.html             # Web UI frontend

这种最小的布局使交换LLM提供者、MCP服务器或沙箱技术(如果需要)变得容易。