Token导航 LogoToken导航TokenDH.com
Metatool App logo
运维云端未说明官方级别未说明来源级核验

Metatool App

MCP Server

MetaMCP是一个动态聚合MCP服务器并提供中间件功能的统一代理服务,适用于需要集中管理和扩展MCP服务器的开发者。

工具数

0

提示词数

0

GitHub Stars

2,326

资源数

0
开发工具中间件TypeScriptClaudeAPI网关Claude DesktopClaudeCursor

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

metatool-ai

提供方

metatool-ai

最后核验

2026/5/17 20:19

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

🚀 MetaMCP(MCP聚合器、编排器、中间件、网关在一个docker中)

📢 更新: *\来自作者:为最近的一些维护延迟道歉,但至少会继续合并PR,更多背景信息 [这里\]*

MetaMCP 是一个MCP代理,它允许您将MCP服务器动态聚合到一个统一的MCP服务器中,并应用中间件。MetaMCP本身是一个MCP服务器,因此可以轻松插入 任何 MCP客户端。

MetaMCP Diagram

______________________________________________________________________

有关更多详细信息,请考虑访问我们的文档网站:https://docs.metamcp.com

英语| 中文

📋 目录

- 🖥️ MCP服务器 - 🔐 环境变量和秘密(STDIO MCP服务器) - 🏷️ MetaMCP命名空间 - 🌐 MetaMCP端点 - ⚙️ 中间件 - 🔍 检查员 - ✏️ 工具替换和注释

- - 📦 使用开发容器(VSCode/Cursor)构建开发环境 - 💻 本地开发

- 📝 例如,通过mcp.json调用游标 - 🖥️ 连接Claude Desktop和其他仅限STDIO的客户端 - 🔧 API密钥验证疑难解答

- 🚧 MCP速率限制

- 🛠️ 配置 - 🏢 支持的提供商 - 🔒 安全特性 - 📱 用法

- 🎛️ 可用控制 - 🏢 企业用例 - 🛠️ 配置

- 📊 顺序图

🎯 用例

  • 🏷️ 将MCP服务器分组到命名空间中,将其作为元MCP托管,并分配公共端点 (SSE或流式HTTP),带身份验证。单击一下即可切换终结点的命名空间。
  • 🎯 选择仅在重新混合MCP服务器时需要的工具。 应用其他 可插拔中间件 围绕可观察性、安全性等。(即将推出)
  • 🔍 用作增强型MCP检查器 使用已保存的服务器配置,并在内部检查您的MetaMCP端点,查看其是否正常工作。
  • 🔍 用作MCP工具选择的Elasticsearch (即将推出)

通常,开发人员可以将MetaMCP用作 基础设施 通过统一的端点托管动态组合的MCP服务器,并在其上构建代理。

快速演示视频:https://youtu.be/Cf6jVd2saAs

MetaMCP Screenshot

📖 概念

🖥️ MCP服务器

一种MCP服务器配置,告诉MetaMCP如何启动MCP服务器。

"HackerNews": {
  "type": "STDIO",
  "command": "uvx",
  "args": ["mcp-hn"]
}

🔐 环境变量和秘密(STDIO MCP服务器)

对于 STDIO MCP服务器,MetaMCP支持三种处理环境变量和机密的方法:

1.原始值 -直接字符串值(不建议用于机密):

API_KEY=your-actual-api-key-here
DEBUG=true

2.环境变量引用 -使用 ${ENV_VAR_NAME} 语法:

API_KEY=${OPENAI_API_KEY}
DATABASE_URL=${DB_CONNECTION_STRING}

3.自动匹配 -如果工具中预期的环境变量名称与容器的环境变量匹配,则可以完全省略它。MetaMCP将自动传递匹配的环境变量。

🔒 安全说明:环境变量引用(${VAR_NAME})在运行时从MetaMCP容器的环境中解析。这使得实际的秘密值不会出现在您的配置和git存储库中。
⚙️ 开发说明:促进地方发展 pnpm run dev:docker,确保您的环境变量列在 turbo.json 在...之下 globalEnv 将传递给开发过程。这不是生产Docker部署所必需的。

🏷️ MetaMCP命名空间

  • 将一个或多个MCP服务器分组到命名空间中
  • 启用/禁用MCP服务器或在工具级别
  • 将中间件应用于MCP请求和响应
  • 覆盖每个命名空间的工具名称/标题/描述,并附加自定义MCP注释(例如。 { "annotations": { "readOnlyHint": false } })

🌐 MetaMCP端点

  • 创建端点并为端点分配命名空间
  • 命名空间中的多个MCP服务器将被聚合并作为MetaMCP端点发出
  • 在API-Key Auth(在标头或查询参数中)或MCP规范2025-06-18中的标准OAuth之间进行选择
  • 主机通过 上海证券交易所流式HTTP MCP中的传输 开放应用程序接口 客户端的端点,如 打开WebUI

⚙️ 中间件

  • 在命名空间级别拦截和转换MCP请求和响应
  • 内置示例:“筛选非活动工具”-优化LLM的工具上下文
  • 未来想法:工具日志记录、错误跟踪、验证、扫描

🔍 检查员

与MCP官方检查员类似,但 已保存的服务器配置 -MetaMCP会自动创建配置,以便您可以立即调试MetaMCP端点。

✏️ 工具替换和注释

  • 打开命名空间→ 工具 选项卡,查看来自连接的MCP服务器的每个工具。
  • 每个保存的工具都可以在线展开和编辑:更新显示 姓名/职务/描述 或者提供具有命名空间特定注释的JSON blob(例如 { "annotations": { "readOnlyHint": false } }).
  • 表中的徽章(“覆盖”、“注释”)显示了哪些工具当前具有自定义元数据。悬停它们以阅读描述被覆盖内容的工具提示。
  • 注释覆盖与上游MCP服务器返回的任何内容合并,因此您可以安全地添加自定义UI提示,而不会丢失提供程序元数据。

🚀 快速开始

🐳 使用Docker Compose运行(推荐)

克隆仓库,准备 .env,并从docker compose开始:

git clone https://github.com/metatool-ai/metamcp.git
cd metamcp
cp example.env .env
docker compose up -d

如果修改APP_URL环境变量,请确保仅从APP_URL访问,因为MetaMCP对URL强制执行CORS策略,因此无法访问其他URL。

请注意,pg卷名可能会与其他pg停靠器冲突,这是全局的,请考虑在中重命名它 docker-compose.yml:

volumes:
  metamcp_postgres_data:
    driver: local

📦 使用开发容器(VSCode/Cursor)构建开发环境

您可以使用VSCode/Cursor扩展在容器中构建开发环境。

它只需要你有一个运行Docker或类似替代品的环境( docker/docker compose 命令是必需的),并且不需要在主机上安装其他依赖组件。

  1. 首先,克隆MetaMCP源代码,在Visual Studio code中打开项目。
git clone https://github.com/metatool-ai/metamcp.git
cd metamcp
code .
  1. 切换到开发容器。打开VSCode命令面板,并执行 Dev Containers: Reopen in Container.

VSCode将在新窗口中打开Dev Containers项目,在那里它将根据 Dockerfile 在开始连接并最终安装MetaMCP依赖项之前。

笔记 这个过程需要可靠的网络连接,它将访问Docker Hub、GitHub和其他一些网站。您需要自己确保网络连接,否则容器构建可能会失败。

等待几分钟,具体取决于互联网连接或计算机性能,可能需要几分钟到几十分钟,您可以单击右下角的进度栏查看实时日志,在那里您可以检查异常卡住的情况。

完成后,您可以运行 pnpm dev 启动开发服务器。

💻 本地开发

仍然建议通过docker运行postgres以方便设置:

pnpm install
pnpm dev

🔌 MCP协议兼容性

  • 工具、资源和提示 支持
  • 启用OAuth的MCP服务器 针对03-26版本进行了测试

如果你有任何问题,请随时离开 GitHub问题公共关系.

🔗 连接到MetaMCP

📝 例如,通过mcp.json调用游标

示例 mcp.json

{
  "mcpServers": {
    "MetaMCP": {
      "url": "http://localhost:12008/metamcp//sse"
    }
  }
}

🖥️ 连接Claude Desktop和其他仅限STDIO的客户端

由于MetaMCP端点仅是远程的(SSE、Streamable HTTP、OpenAPI),因此只支持stdio服务器的客户端(如Claude Desktop)需要一个本地代理来连接。

注:mcp-remote 有时建议用于此目的,它是为基于OAuth的身份验证而设计的,不适用于MetaMCP的API密钥身份验证。基于测试, mcp-proxy 是推荐的解决方案。

以下是Claude Desktop的工作配置,使用 mcp-proxy:

使用流式HTTP

{
  "mcpServers": {
    "MetaMCP": {
      "command": "uvx",
      "args": [
        "mcp-proxy",
        "--transport",
        "streamablehttp",
        "http://localhost:12008/metamcp//mcp"
      ],
      "env": {
        "API_ACCESS_TOKEN": ""
      }
    }
  }
}

使用SSE

{
  "mcpServers": {
    "ehn": {
      "command": "uvx",
      "args": [
        "mcp-proxy",
        "http://localhost:12008/metamcp//sse"
      ],
      "env": {
        "API_ACCESS_TOKEN": ""
      }
    }
  }
}

重要提示:

  • 替换 `` 使用您的实际端点名称
  • 替换 ` 使用您的MetaMCP API密钥(格式: sk_mt_...`)

有关更多详细信息和替代方法,请参阅 问题#76.

🔧 API密钥验证疑难解答

  • ?api_key= param-api密钥认证不适用于SSE。它只适用于Streamable HTTP和OpenAPI。
  • 最佳实践是在 Authorization: Bearer 头球
  • 当您遇到连接问题时,尝试暂时禁用身份验证,以查看是否是身份验证问题。

❄️ 冷启动问题和自定义Dockerfile

  • MetaMCP为每个配置的MCP服务器和MetaMCP预分配空闲会话。每个会话的默认空闲会话为1,这有助于减少冷启动时间。
  • 如果您的MCP需要以下依赖项 uvxnpx,您需要自定义Dockerfile来自行安装依赖项。
  • 检查 无效.md 关于空闲会话在更新过程中如何失效的序列图。

🛠️ 解决方案:自定义Dockerfile以添加依赖项或预安装包,以减少冷启动时间。

🧾 日志级别

MetaMCP的后端将日志写入文件,并可选择将选定级别镜像到控制台。控制台镜像 LOG_LEVEL 环境变量。

  • 文件

- app.log:接收 DEBUG, INFO,以及 WARN - error.log:接收 ERROR

  • 控制台镜像(LOG_LEVEL)

- all:镜子 DEBUG, INFO, WARN, ERROR 安慰 - info:仅镜像 INFO 安慰 - errors-only:镜子 WARNERROR 安慰 - none:无控制台输出

  • 默认值和示例

- 默认值(未设置或无效时): errors-only - .env 例子:

    LOG_LEVEL='errors-only' # 'all', 'info', 'errors-only', 'none'

- docker-compose.dev.yml 使用: LOG_LEVEL: ${LOG_LEVEL:-all}

🔐 认证

  • 🛡️ 更好的认证 前端和后端(TRPC程序)
  • 🍪 会话Cookie 强制执行安全的内部MCP代理连接
  • 🔑 API密钥验证 用于外部访问 Authorization: Bearer 头球
  • 🪪 MCP OAuth:暴露的端点可以选择使用MCP Spec 2025-06-18中的标准OAuth,易于连接。
  • 🏢 多租户技术:专为组织在自己的机器上部署而设计。支持私有和公共访问范围。用户可以为自己或每个人创建MCP、名称空间、端点和API密钥。公共API密钥无法访问私有MetaMCP。
  • ⚙️ 单独的注册控制:管理员可以通过设置页面独立控制UI注册和SSO/Outhor注册,允许灵活的企业部署场景。

🚦 交通管理

🚧 MCP速率限制

MCP速率限制功能允许您设置MCP工具(端点)在给定时间窗口内接受的最大请求。有两种不同的策略可以设置限制,您可以单独使用或一起使用:

  • Endpoint rate-limiting (Rate Limiting):同时应用于使用端点的所有客户端,共享一个唯一的计数器。
  • User rate-limiting (Client Rate Limiting):为每个用户设置一个计数器。

这两种类型可以共存,它们相互补充,并将计数器存储在内存中。在集群上,每台机器只看到并计算其经过的流量。

端点速率限制

端点速率限制作用于端点可以处理的同时事务的数量。这种类型的限制保护了所有客户的服务。 当连接到端点的用户总数超过 rate-limiting,MetaMCP开始拒绝具有状态代码的连接 503 Service Unavailable.

端点速率限制选项

  • Max Rate:定义在任何给定时刻,您将同时接受来自所有用户的请求数量。网关启动时,存储桶已满。随着用户请求的到来,存储桶中剩余的令牌会减少。同时,限速器以所需的速度重新填充铲斗,直到达到其最大容量。
  • Max Rate Seconds:最大速率以秒为单位运行的时间段。例如,如果将最大速率秒数设置为60秒,速率限制为5秒,则每60秒允许5个请求。

用户速率限制

客户端或用户速率限制对每个单独的用户和端点应用一个计数器。当连接到端点的单个用户超过其 client-max-rate,MetaMCP开始拒绝具有状态代码的连接 429 Too Many Requests

用户速率限制选项

  • Client Max Rate:在所需的时间间隔(客户端最大速率秒)内,为每个用户(用户配额)添加到令牌桶中的令牌数。桶中剩余的令牌是特定用户可以执行的请求。
  • Client Max Rate Seconds:最大速率以秒为单位运行的时间段。例如,如果您设置每60秒一次,速率为5,则每60秒允许5个请求。
  • Client Max Rate Strategy:设置用于设置客户端计数器的策略。当限制适用于客户端的ip地址时,选择ip,或者当有唯一标识用户的标头时,将其设置为标头。该标头必须使用密钥条目定义。
  • Client Max Rate Strategy Key:它是包含用户标识的标头名称(例如,令牌授权,或IP的X-Original-Forwarded-For)。

🔗 OpenID连接(OIDC)提供商支持

MetaMCP支持 OpenID连接身份验证 用于企业SSO集成。这允许组织使用其现有的身份提供程序(Auth0、Keycloak、Azure AD等)进行身份验证。

🛠️ 配置

将以下环境变量添加到您的 .env 文件:

# Required
OIDC_CLIENT_ID=your-oidc-client-id
OIDC_CLIENT_SECRET=your-oidc-client-secret
OIDC_DISCOVERY_URL=https://your-provider.com/.well-known/openid-configuration

# Optional customization
OIDC_PROVIDER_ID=oidc
OIDC_SCOPES=openid email profile
OIDC_PKCE=true

🏢 支持的提供商

MetaMCP已经与流行的OIDC提供商进行了测试:

  • 身份验证0: https://your-domain.auth0.com/.well-known/openid-configuration
  • 钥匙斗篷: https://your-keycloak.com/realms/your-realm/.well-known/openid-configuration
  • Azure Active Directory: https://login.microsoftonline.com/your-tenant-id/v2.0/.well-known/openid-configuration
  • 谷歌: https://accounts.google.com/.well-known/openid-configuration
  • 八月: https://your-domain.okta.com/.well-known/openid-configuration

🔒 安全特性

  • 🔐 PKCE(代码交换证明密钥) 默认启用
  • 🛡️ 授权码流 自动创建用户
  • 🔄 自动发现 OIDC端点
  • 🍪 无缝会话管理 使用现有的身份验证系统

📱 用法

配置后,用户将看到 “使用OIDC登录” 登录页面上电子邮件/密码表单旁边的按钮。身份验证流程会在首次登录时自动创建新用户。

有关更详细的配置示例和故障排除,请参阅 贡献.md.

⚙️ 注册控制

MetaMCP提供 单独控制 对于不同的注册方法,允许管理员为企业部署微调用户访问策略。

🎛️ 可用控制

  • UI注册:控制用户是否可以通过注册表单创建帐户
  • SSO注册:控制用户是否可以通过SSO/Outhor提供程序(OIDC等)创建帐户

🏢 企业用例

这种分离实现了常见的企业场景:

  • 阻止UI注册,允许SSO:禁止手动注册,同时允许企业SSO用户
  • 阻止SSO注册,允许UI:允许手动注册,同时限制SSO访问
  • 阻止两者:完全禁用新用户注册
  • 允许两者:打开部署的默认行为

🛠️ 配置

访问 设置 在MetaMCP管理界面中的页面中配置这些控件:

  1. 导航到 设置认证设置
  2. 切换 “禁用UI注册” 控制基于表单的注册
  3. 切换 “禁用SSO注册” 控制OAuth/OIDC注册

这两个控件独立工作,使您在注册策略上具有完全的灵活性。

🌐 Nginx的自定义部署和SSE配置文件

如果您想将其部署到在线服务或VPS,则需要至少2GB至4GB内存的实例。而且尺寸越大,性能越好。

由于MCP利用SSE进行长连接,如果您使用像nginx这样的反向代理,请参阅示例设置 nginx.conf示例

🏗️ 建筑

  • 前端:Next.js
  • 后端:带tRPC的Express.js,通过TS SDK和内部代理托管MCP
  • 认证:更好的认证
  • 结构:带有Turborepo和Docker发布的独立monorepo

📊 顺序图

*注意:提示和资源遵循与工具类似的模式。*

sequenceDiagram
    participant MCPClient as MCP Client (e.g., Claude Desktop)
    participant MetaMCP as MetaMCP Server
    participant MCPServers as Installed MCP Servers

    MCPClient ->> MetaMCP: Request list tools

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

    MetaMCP ->> MetaMCP: Aggregate tool lists & apply middleware
    MetaMCP ->> MCPClient: Return aggregated list of tools

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

🗺️ 路线图

下一步可能采取的措施:

  • \[ \] 🔌 无头管理API访问
  • \[ \] 🔍 在MetaMCP端点上动态应用搜索规则
  • \[ \] 🛠️ 更多中间产品
  • \[ \] 💬 聊天/代理游乐场
  • \[ \] 🧪 MCP刀具选择优化的测试与评估
  • \[ \] ⚡ 动态生成MCP服务器

🌐 国际化

README-i18n.md

目前支持en和zh-locate,但欢迎贡献。

🤝 贡献

我们欢迎捐款!详情请参阅 贡献.md

📄 许可证

麻省理工学院

如果您在后面的链接中提到您的项目是否使用该代码,我们将不胜感激。

🙏 学分

一些代码的灵感来自:

不直接使用代码从

  • https://github.com/open-webui/openapi-servers
  • https://github.com/open-webui/mcpo

目录标签

目录标签

开发工具中间件TypeScriptClaudeAPI网关MCP聚合本地部署服务器管理开发者工具

支持客户端

Claude DesktopClaudeCursor

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

oauth

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明oauth部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP