📢 更新: [作者道歉:由于最近维护延迟,请见谅,但至少会继续合并PR,更多背景信息请参阅这里]
MetaMCP 是一个MCP代理,允许您动态地将多个MCP服务器聚合到一个统一的MCP服务器中,并应用中间件。MetaMCP本身也是一个MCP服务器,因此可以轻松地与任何MCP客户端集成。
如需了解更多详情,请访问我们的文档网站:https://docs.metamcp.com
英文 | 中文
通常,开发者可以使用MetaMCP作为基础设施,通过统一的端点托管动态组合的MCP服务器,并在其上构建代理。
快速演示视频:https://youtu.be/Cf6jVd2saAs

告诉MetaMCP如何启动一个MCP服务器的配置。
"HackerNews": {
"type": "STDIO",
"command": "uvx",
"args": ["mcp-hn"]
}
对于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部署中不需要。
类似于官方的MCP检查器,但带有保存的服务器配置 - MetaMCP会自动创建配置,以便您可以立即调试MetaMCP端点。
克隆仓库,准备.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扩展来在容器中构建开发环境。
这只需要您有一个正在运行Docker或类似替代方案的环境(需要docker/docker compose命令),并且不需要在主机机器上安装其他依赖组件。
git clone https://github.com/metatool-ai/metamcp.git
cd metamcp
code .
Dev Containers: 在容器中重新打开。VSCode将在新窗口中打开开发容器项目,在那里它将根据Dockerfile构建运行时并安装工具链,然后开始连接并最终安装MetaMCP依赖项。
<img width="895" height="153" alt="image" src="https://gips1.baidu.com/it/u=2880605043,2717315236&fm=3081&app=3081&f=PNG?w=895&h=153" />
注意 此过程需要可靠的网络连接,它将访问Docker Hub、GitHub和其他一些站点。您需要自行确保网络连接,否则容器构建可能会失败。
等待几分钟,具体取决于互联网连接或计算机性能,可能需要几分钟到几十分钟,您可以点击右下角的进度条查看实时日志,以检查是否有异常卡顿。 <img width="732" height="173" alt="image" src="https://gips0.baidu.com/it/u=2509579988,1710044292&fm=3081&app=3081&f=PNG?w=732&h=173" />
仍然建议通过Docker运行postgres以方便设置:
pnpm install
pnpm dev
如有疑问,请随时提交GitHub问题或PR。
示例 mcp.json
{
"mcpServers": {
"MetaMCP": {
"url": "http://localhost:12008/metamcp/<YOUR_ENDPOINT_NAME>/sse"
}
}
}
由于MetaMCP端点是远程的(SSE、可流式传输HTTP、OpenAPI),仅支持stdio服务器的客户端(如Claude Desktop)需要一个本地代理来连接。
注意:虽然有时建议使用mcp-remote,但它设计用于基于OAuth的身份验证,不适用于MetaMCP的API密钥身份验证。根据测试,mcp-proxy是推荐的解决方案。
以下是使用mcp-proxy连接Claude Desktop的工作配置:
使用可流式传输HTTP
{
"mcpServers": {
"MetaMCP": {
"command": "uvx",
"args": [
"mcp-proxy",
"--transport",
"streamablehttp",
"http://localhost:12008/metamcp/<YOUR_ENDPOINT_NAME>/mcp"
],
"env": {
"API_ACCESS_TOKEN": "<YOUR_API_KEY_HERE>"
}
}
}
}
使用SSE
{
"mcpServers": {
"ehn": {
"command": "uvx",
"args": [
"mcp-proxy",
"http://localhost:12008/metamcp/<YOUR_ENDPOINT_NAME>/sse"
],
"env": {
"API_ACCESS_TOKEN": "<YOUR_API_KEY_HERE>"
}
}
}
}
重要说明:
<YOUR_ENDPOINT_NAME>替换为您实际的端点名称<YOUR_API_KEY_HERE>替换为您的MetaMCP API密钥(格式:sk_mt_...)有关更多详细信息和替代方法,请参阅问题#76。
?api_key=参数API密钥认证对SSE不起作用。它仅适用于可流式传输HTTP和OpenAPI。Authorization: Bearer <API_KEY>头中使用API密钥。