MCP代理服务器

MetaMCP MCP Server是一个代理服务器,将多个MCP服务器连接为一个,从MetaMCP应用获取工具/提示/资源配置,并将请求路由到正确的底层服务器。

  • by metatool-ai
  • TypeScript
  • 本地部署
  • 155 星标
  • 更新于
在 GitHub 查看 metatool-ai/mcp-server-metamcp

使用说明

MetaMCP MCP服务器

🚨 已弃用包警告 🚨

此本地代理包在MetaMCP的2.0一体化架构中已被弃用。

请访问 https://github.com/metatool-ai/metamcp 以获取更多详细信息。

MetaMCP MCP服务器是一个代理服务器,它可以将多个MCP服务器合并为一个。它从MetaMCP应用程序中获取工具/提示/资源配置,并将工具/提示/资源请求路由到正确的底层服务器。

MetaMCP 应用程序仓库:https://github.com/metatool-ai/metatool-app

安装

通过Smithery进行安装

有时Smithery可以正常工作(已在本地Windsurf中确认),但有时它会不稳定,因为MetaMCP很特别,它是在其上运行其他MCP的。如果它不起作用,请考虑使用手动安装。

通过以下方式自动为Claude Desktop安装MetaMCP MCP服务器 Smithery根据上面的信息,执行如下指令:

npx -y @smithery/cli install @metatool-ai/mcp-server-metamcp --client claude

手动安装

export METAMCP_API_KEY=<env>
npx -y @metamcp/mcp-server-metamcp@latest
{
  "mcpServers": {
    "MetaMCP": {
      "command": "npx",
      "args": ["-y", "@metamcp/mcp-server-metamcp@latest"],
      "env": {
        "METAMCP_API_KEY": "<your api key>"
      }
    }
  }
}

用法

作为stdio服务器使用(默认)

mcp-server-metamcp --metamcp-api-key <your-api-key>

用作SSE服务器

mcp-server-metamcp --metamcp-api-key <your-api-key> --transport sse --port 12006

使用SSE传输选项,服务器将启动一个Express.js网络服务器,该服务器将在指定端口监听SSE连接 /sse 端点并接收消息在 /messages 端点。

作为可流式传输的HTTP服务器使用

mcp-server-metamcp --metamcp-api-key <your-api-key> --transport streamable-http --port 12006

使用Streamable HTTP传输选项,服务器将启动一个处理HTTP请求的Express.js网络服务器。您可以选择使用 --stateless 无状态操作模式。

使用Docker

在Docker容器内运行服务器并连接到主机上的服务时,请使用 --use-docker-host 自动转换本地主机URL的选项:

mcp-server-metamcp --metamcp-api-key <your-api-key> --transport sse --port 12006 --use-docker-host

这将把任何localhost或127.0.0.1的URL转换为 host.docker.internal允许容器正确连接到主机上运行的服务。

配置stderr处理

对于STDIO传输,您可以控制子MCP进程如何处理stderr:

# Use inherit to see stderr output from child processes
mcp-server-metamcp --metamcp-api-key <your-api-key> --stderr inherit

# Use pipe to capture stderr (default is ignore)
mcp-server-metamcp --metamcp-api-key <your-api-key> --stderr pipe

# Or set via environment variable
METAMCP_STDERR=inherit mcp-server-metamcp --metamcp-api-key <your-api-key>

可用的 stderr 选项:

  • ignore 忽略子进程的标准错误输出
  • inherit将子进程的 stderr 传递给父进程
  • pipe将 stderr 捕获到管道中进行处理
  • overlapped使用重叠I/O(Windows专用)

命令行选项

Options:
  --metamcp-api-key <key>       API key for MetaMCP (can also be set via METAMCP_API_KEY env var)
  --metamcp-api-base-url <url>  Base URL for MetaMCP API (can also be set via METAMCP_API_BASE_URL env var)
  --report                      Fetch all MCPs, initialize clients, and report tools to MetaMCP API
  --transport <type>            Transport type to use (stdio, sse, or streamable-http) (default: "stdio")
  --port <port>                 Port to use for SSE or Streamable HTTP transport, defaults to 12006 (default: "12006")
  --require-api-auth            Require API key in SSE or Streamable HTTP URL path
  --stateless                   Use stateless mode for Streamable HTTP transport
  --use-docker-host             Transform localhost URLs to use host.docker.internal (can also be set via USE_DOCKER_HOST env var)
  --stderr <type>               Stderr handling for STDIO transport (overlapped, pipe, ignore, inherit) (default: "ignore")
  -h, --help                    display help for command

环境变量

  • METAMCP_API_KEYMetaMCP的API密钥
  • METAMCP_API_BASE_URLMetaMCP API的基础URL
  • USE_DOCKER_HOST当设置为“true”时,将本地主机URL转换为host.docker.internal以实现Docker兼容性
  • METAMCP_STDERR针对STDIO传输(重叠、管道、忽略、继承)的Stderr处理。默认设置为“忽略”

开发

# Install dependencies
npm install

# Build the application
npm run build

# Watch for changes
npm run watch

亮点

  • 兼容任何MCP客户端
  • 多工作区层使您能够一键切换到另一组MCP配置。
  • MCP配置的GUI动态更新。
  • 已连接的MCP之间的命名空间隔离。

架构概述

sequenceDiagram
    participant MCPClient as MCP Client (e.g. Claude Desktop)
    participant MetaMCP-mcp-server as MetaMCP MCP Server
    participant MetaMCPApp as MetaMCP App
    participant MCPServers as Installed MCP Servers in Metatool App

    MCPClient ->> MetaMCP-mcp-server: Request list tools
    MetaMCP-mcp-server ->> MetaMCPApp: Get tools configuration & status
    MetaMCPApp ->> MetaMCP-mcp-server: Return tools configuration & status

    loop For each listed MCP Server
        MetaMCP-mcp-server ->> MCPServers: Request list_tools
        MCPServers ->> MetaMCP-mcp-server: Return list of tools
    end

    MetaMCP-mcp-server ->> MetaMCP-mcp-server: Aggregate tool lists
    MetaMCP-mcp-server ->> MCPClient: Return aggregated list of tools

    MCPClient ->> MetaMCP-mcp-server: Call tool
    MetaMCP-mcp-server ->> MCPServers: call_tool to target MCP Server
    MCPServers ->> MetaMCP-mcp-server: Return tool response
    MetaMCP-mcp-server ->> MCPClient: Return tool response

积分

  • 灵感来源和部分代码(在本项目中重构)来自 https://github.com/adamwattis/mcp-proxy-server/