[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-metatool-ai--metamcp":3,"tool-metatool-ai--metamcp":64},[4,16,27,35,48,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":15},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[13,14],"Agent","插件","ready",{"id":17,"name":18,"github_repo":19,"description_zh":20,"stars":21,"difficulty_score":22,"last_commit_at":23,"category_tags":24,"status":15},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,2,"2026-04-10T01:20:03",[14,13,25,26],"图像","开发框架",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":22,"last_commit_at":33,"category_tags":34,"status":15},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[14,26],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":22,"last_commit_at":41,"category_tags":42,"status":15},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",85092,"2026-04-10T11:13:16",[25,43,44,14,13,45,46,26,47],"数据工具","视频","其他","语言模型","音频",{"id":49,"name":50,"github_repo":51,"description_zh":52,"stars":53,"difficulty_score":10,"last_commit_at":54,"category_tags":55,"status":15},7525,"codex","openai\u002Fcodex","Codex 是 OpenAI 推出的一款轻量级编程智能体，专为在终端环境中高效运行而设计。它允许开发者直接在命令行界面与 AI 交互，完成代码生成、调试、重构及项目维护等任务，无需频繁切换至浏览器或集成开发环境，从而显著提升了编码流程的连贯性与专注度。\n\n这款工具主要解决了传统 AI 辅助编程中上下文割裂的问题。通过将智能体本地化运行，Codex 能够更紧密地结合当前工作目录的文件结构，提供更具针对性的代码建议，同时支持以自然语言指令驱动复杂的开发操作，让“对话即编码”成为现实。\n\nCodex 非常适合习惯使用命令行的软件工程师、全栈开发者以及技术研究人员。对于追求极致效率、偏好键盘操作胜过图形界面的极客用户而言，它更是理想的结对编程伙伴。\n\n其独特亮点在于灵活的部署方式：既可作为全局命令行工具通过 npm 或 Homebrew 一键安装，也能无缝对接现有的 ChatGPT 订阅计划（如 Plus 或 Pro），直接复用账户权益。此外，它还提供了从纯文本终端到桌面应用的多形态体验，并支持基于 API 密钥的深度定制，充分满足不同场景下的开发需求。",75220,"2026-04-14T14:40:34",[46,13,14],{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":22,"last_commit_at":62,"category_tags":63,"status":15},51,"gstack","garrytan\u002Fgstack","gstack 是 Y Combinator CEO Garry Tan 亲自开源的一套 AI 工程化配置，旨在将 Claude Code 升级为你的虚拟工程团队。面对单人开发难以兼顾产品战略、架构设计、代码审查及质量测试的挑战，gstack 提供了一套标准化解决方案，帮助开发者实现堪比二十人团队的高效产出。\n\n这套配置特别适合希望提升交付效率的创始人、技术负责人，以及初次尝试 Claude Code 的开发者。gstack 的核心亮点在于内置了 15 个具有明确职责的 AI 角色工具，涵盖 CEO、设计师、工程经理、QA 等职能。用户只需通过简单的斜杠命令（如 `\u002Freview` 进行代码审查、`\u002Fqa` 执行测试、`\u002Fplan-ceo-review` 规划功能），即可自动化处理从需求分析到部署上线的全链路任务。\n\n所有操作基于 Markdown 和斜杠命令，无需复杂配置，完全免费且遵循 MIT 协议。gstack 不仅是一套工具集，更是一种现代化的软件工厂实践，让单人开发者也能拥有严谨的工程流程。",73956,"2026-04-16T23:09:21",[13,14],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":70,"readme_en":71,"readme_zh":72,"quickstart_zh":73,"use_case_zh":74,"hero_image_url":75,"owner_login":76,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":78,"owner_location":78,"owner_email":78,"owner_twitter":78,"owner_website":78,"owner_url":79,"languages":80,"stars":100,"forks":101,"last_commit_at":102,"license":103,"difficulty_score":104,"env_os":105,"env_gpu":106,"env_ram":106,"env_deps":107,"category_tags":116,"github_topics":117,"view_count":22,"oss_zip_url":78,"oss_zip_packed_at":78,"status":15,"created_at":133,"updated_at":134,"faqs":135,"releases":166},8301,"metatool-ai\u002Fmetamcp","metamcp","MCP Aggregator, Orchestrator, Middleware, Gateway in one docker","MetaMCP 是一款专为模型上下文协议（MCP）生态打造的轻量级聚合网关，它将服务器聚合、流程编排、中间件处理及 API 网关功能集成于单个 Docker 容器中。在 AI 应用开发中，开发者常面临需要同时连接多个分散的 MCP 服务、难以统一管理权限与环境变量、以及缺乏标准化请求拦截机制等痛点。MetaMCP 通过充当统一的代理层，允许用户将多个后端 MCP 服务器动态聚合成一个逻辑上的统一服务，并支持灵活挂载中间件以实现日志记录、鉴权或数据转换等功能。\n\n该工具特别适合后端开发者、AI 工程师及系统架构师使用，尤其是那些正在构建复杂 Agent 系统或需要为前端客户端提供稳定统一接口的团队。其核心技术亮点在于“透明代理”设计：MetaMCP 本身也是一个标准的 MCP 服务器，因此可以无缝接入任何支持 MCP 协议的客户端（如 Cursor、IDE 插件等），无需修改客户端配置。此外，它还提供了细粒度的工具覆盖与注解能力，让开发者能在不改动源码的情况下优化工具行为。借助开箱即用的 Docker 部署方案，MetaMCP 极大降低了多服务协同的运维复杂度，是构建模块化、可扩展 AI","MetaMCP 是一款专为模型上下文协议（MCP）生态打造的轻量级聚合网关，它将服务器聚合、流程编排、中间件处理及 API 网关功能集成于单个 Docker 容器中。在 AI 应用开发中，开发者常面临需要同时连接多个分散的 MCP 服务、难以统一管理权限与环境变量、以及缺乏标准化请求拦截机制等痛点。MetaMCP 通过充当统一的代理层，允许用户将多个后端 MCP 服务器动态聚合成一个逻辑上的统一服务，并支持灵活挂载中间件以实现日志记录、鉴权或数据转换等功能。\n\n该工具特别适合后端开发者、AI 工程师及系统架构师使用，尤其是那些正在构建复杂 Agent 系统或需要为前端客户端提供稳定统一接口的团队。其核心技术亮点在于“透明代理”设计：MetaMCP 本身也是一个标准的 MCP 服务器，因此可以无缝接入任何支持 MCP 协议的客户端（如 Cursor、IDE 插件等），无需修改客户端配置。此外，它还提供了细粒度的工具覆盖与注解能力，让开发者能在不改动源码的情况下优化工具行为。借助开箱即用的 Docker 部署方案，MetaMCP 极大降低了多服务协同的运维复杂度，是构建模块化、可扩展 AI 基础设施的理想选择。","# 🚀 MetaMCP (MCP Aggregator, Orchestrator, Middleware, Gateway in one docker) \u003C!-- omit in toc -->\n\n\u003Cdiv align=\"center\">\n\n\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FmNsyat7mFX\" style=\"text-decoration: none;\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-MetaMCP-5865F2?style=flat-square&logo=discord&logoColor=white\" alt=\"Discord\" style=\"max-width: 100%;\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdocs.metamcp.com\" style=\"text-decoration: none;\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocumentation-docs.metamcp.com-blue?style=flat-square&logo=book\" alt=\"Documentation\" style=\"max-width: 100%;\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT\" style=\"text-decoration: none;\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg?style=flat-square\" alt=\"MIT License\" style=\"max-width: 100%;\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpkgs\u002Fcontainer\u002Fmetamcp\" style=\"text-decoration: none;\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGHCR-available-green.svg?style=flat-square&logo=github\" alt=\"GHCR\" style=\"max-width: 100%;\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdeepwiki.com\u002Fmetatool-ai\u002Fmetamcp\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDeepWiki-metatool--ai%2Fmetamcp-blue.svg?style=flat-square&logo=data:image\u002Fpng;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK\u002FAIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06\u002Fuv1saEDv4O3n3dV60RfP947Mm9\u002FSQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH\u002F\u002FPB8mnKqScAhsD0kYP3j\u002FYt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY\u002F56ebRWeraTjMt\u002F00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB\u002FimwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h\u002FU4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5\u002FXFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb\u002FvA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26\u002FHfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr\u002FFGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r\u002FcKaoqr+27\u002FXcrS5UwSMbQAAAABJRU5ErkJggg==\" alt=\"DeepWiki: MetaMCP\">\u003C\u002Fa>\n\u003C\u002Fdiv>\n\n\u003C\u002Fdiv>\n\n> **📢 Update:** *[From the author: apologize for some recent maintainence delay, but will at least keep merging PRs, more background [here](recent-updates.md)]*\n\n**MetaMCP** is a MCP proxy that lets you dynamically aggregate MCP servers into a unified MCP server, and apply middlewares. MetaMCP itself is a MCP server so it can be easily plugged into **ANY** MCP clients.\n\n![MetaMCP Diagram](metamcp.svg)\n\n---\n\nFor more details, consider visiting our documentation site: https:\u002F\u002Fdocs.metamcp.com\n\nEnglish | [中文](.\u002FREADME_cn.md)\n## 📋 Table of Contents \u003C!-- omit in toc -->\n\n- [🎯 Use Cases](#-use-cases)\n- [📖 Concepts](#-concepts)\n  - [🖥️ **MCP Server**](#️-mcp-server)\n    - [🔐 **Environment Variables \\& Secrets (STDIO MCP Servers)**](#-environment-variables--secrets-stdio-mcp-servers)\n  - [🏷️ **MetaMCP Namespace**](#️-metamcp-namespace)\n  - [🌐 **MetaMCP Endpoint**](#-metamcp-endpoint)\n  - [⚙️ **Middleware**](#️-middleware)\n  - [🔍 **Inspector**](#-inspector)\n  - [✏️ **Tool Overrides \\& Annotations**](#️-tool-overrides--annotations)\n- [🚀 Quick Start](#-quick-start)\n  - [🐳 Run with Docker Compose (Recommended)](#-run-with-docker-compose-recommended)\n  - [📦 Build development environment with Dev Containers (VSCode\u002FCursor)](#-build-development-environment-with-dev-containers-vscodecursor)\n  - [💻 Local Development](#-local-development)\n- [🔌 MCP Protocol Compatibility](#-mcp-protocol-compatibility)\n- [🔗 Connect to MetaMCP](#-connect-to-metamcp)\n  - [📝 E.g., Cursor via mcp.json](#-eg-cursor-via-mcpjson)\n  - [🖥️ Connecting Claude Desktop and Other STDIO-only Clients](#️-connecting-claude-desktop-and-other-stdio-only-clients)\n  - [🔧 API Key Auth Troubleshooting](#-api-key-auth-troubleshooting)\n- [❄️ Cold Start Problem and Custom Dockerfile](#️-cold-start-problem-and-custom-dockerfile)\n- [🧾 Log Levels](#-log-levels)\n- [🔐 Authentication](#-authentication)\n- [🚦 Traffic Management](#-traffic-management)\n  - [🚧 **MCP Rate Limit**](#-mcp-rate-limit)\n- [🔗 OpenID Connect (OIDC) Provider Support](#-openid-connect-oidc-provider-support)\n  - [🛠️ **Configuration**](#️-configuration)\n  - [🏢 **Supported Providers**](#-supported-providers)\n  - [🔒 **Security Features**](#-security-features)\n  - [📱 **Usage**](#-usage)\n- [⚙️ Registration Controls](#️-registration-controls)\n  - [🎛️ **Available Controls**](#️-available-controls)\n  - [🏢 **Enterprise Use Cases**](#-enterprise-use-cases)\n  - [🛠️ **Configuration**](#️-configuration-1)\n- [🌐 Custom Deployment and SSE conf for Nginx](#-custom-deployment-and-sse-conf-for-nginx)\n- [🏗️ Architecture](#️-architecture)\n  - [📊 Sequence Diagram](#-sequence-diagram)\n- [🗺️ Roadmap](#️-roadmap)\n- [🌐 i18n](#-i18n)\n- [🤝 Contributing](#-contributing)\n- [📄 License](#-license)\n- [🙏 Credits](#-credits)\n\n## 🎯 Use Cases\n- 🏷️ **Group MCP servers into namespaces, host them as meta-MCPs, and assign public endpoints** (SSE or Streamable HTTP), with auth. One-click to switch a namespace for an endpoint.\n-  🎯 **Pick tools you only need when remixing MCP servers.** Apply other **pluggable middleware** around observability, security, etc. (coming soon)\n-  🔍 **Use as enhanced MCP inspector** with saved server configs, and inspect your MetaMCP endpoints in house to see if it works or not.\n-  🔍 **Use as Elasticsearch for MCP tool selection** (coming soon)\n\nGenerally developers can use MetaMCP as **infrastructure** to host dynamically composed MCP servers through a unified endpoint, and build agents on top of it.\n\nQuick demo video: https:\u002F\u002Fyoutu.be\u002FCf6jVd2saAs\n\n![MetaMCP Screenshot](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmetatool-ai_metamcp_readme_6a9075642814.png)\n\n## 📖 Concepts\n\n### 🖥️ **MCP Server**\nA MCP server configuration that tells MetaMCP how to start a MCP server.\n\n```json\n\"HackerNews\": {\n  \"type\": \"STDIO\",\n  \"command\": \"uvx\",\n  \"args\": [\"mcp-hn\"]\n}\n```\n\n#### 🔐 **Environment Variables & Secrets (STDIO MCP Servers)**\n\nFor **STDIO MCP servers**, MetaMCP supports three ways to handle environment variables and secrets:\n\n**1. Raw Values** - Direct string values (not recommended for secrets):\n```\nAPI_KEY=your-actual-api-key-here\nDEBUG=true\n```\n\n**2. Environment Variable References** - Use `${ENV_VAR_NAME}` syntax:\n```\nAPI_KEY=${OPENAI_API_KEY}\nDATABASE_URL=${DB_CONNECTION_STRING}\n```\n\n**3. Auto-matching** - If the expected environment variable name in your tool matches the container's environment variable, you can omit it entirely. MetaMCP will automatically pass through matching environment variables.\n\n> **🔒 Security Note**: Environment variable references (`${VAR_NAME}`) are resolved from the MetaMCP container's environment at runtime. This keeps actual secret values out of your configuration and git repository.\n\n> **⚙️ Development Note**: For local development with `pnpm run dev:docker`, ensure your environment variables are listed in `turbo.json` under `globalEnv` to be passed to the development processes. This is not required for production Docker deployments.\n\n### 🏷️ **MetaMCP Namespace**\n- Group one or more MCP servers into a namespace\n- Enable\u002Fdisable MCP servers or at tool level\n- Apply middlewares to MCP requests and responses\n- Override tool names\u002Ftitles\u002Fdescriptions per namespace and attach custom MCP annotations (e.g. `{ \"annotations\": { \"readOnlyHint\": false } }`)\n\n### 🌐 **MetaMCP Endpoint**\n- Create endpoints and assign namespace to endpoints\n- Multiple MCP servers in the namespace will be aggregated and emitted as a MetaMCP endpoint\n- Choose between API-Key Auth (in header or query param) or standard OAuth in MCP Spec 2025-06-18\n- Host through **SSE** or **Streamable HTTP** transports in MCP and **OpenAPI** endpoints for clients like [Open WebUI](https:\u002F\u002Fgithub.com\u002Fopen-webui\u002Fopen-webui)\n\n### ⚙️ **Middleware**\n- Intercepts and transforms MCP requests and responses at namespace level\n- **Built-in example**: \"Filter inactive tools\" - optimizes tool context for LLMs\n- **Future ideas**: tool logging, error traces, validation, scanning\n\n### 🔍 **Inspector**\nSimilar to the official MCP inspector, but with **saved server configs** - MetaMCP automatically creates configurations so you can debug MetaMCP endpoints immediately.\n\n### ✏️ **Tool Overrides & Annotations**\n- Open a namespace → **Tools** tab to see every tool coming from connected MCP servers.\n- Each saved tool can be expanded and edited inline: update the display **name\u002Ftitle\u002Fdescription** or provide a JSON blob with namespace-specific annotations (for example `{ \"annotations\": { \"readOnlyHint\": false } }`).\n- Badges in the table (\"Overridden\", \"Annotations\") show which tools currently have custom metadata. Hover them to read a tooltip describing what was overridden.\n- Annotation overrides are merged with whatever the upstream MCP server returns, so you can safely add custom UI hints without losing provider metadata.\n\n## 🚀 Quick Start\n\n### **🐳 Run with Docker Compose (Recommended)**\n\nClone repo, prepare `.env`, and start with docker compose:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp.git\ncd metamcp\ncp example.env .env\ndocker compose up -d\n```\n\nIf you modify APP_URL env vars, make sure you only access from the APP_URL, because MetaMCP enforces CORS policy on the URL, so no other URL is accessible.\n\nNote that the pg volume name may collide with your other pg dockers, which is global, consider rename it in `docker-compose.yml`:\n\n```\nvolumes:\n  metamcp_postgres_data:\n    driver: local\n```\n\n### **📦 Build development environment with Dev Containers (VSCode\u002FCursor)**\n\nYou can use the VSCode\u002FCursor extension to build the development environment in a container.\n\nIt only requires that you have an environment running Docker or a similar alternative (the `docker`\u002F`docker compose` command is required), and no other dependent components need to be installed on your host machine.\n\n1. First, clone the MetaMCP source code, open project in Visual Studio Code.\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp.git\ncd metamcp\ncode .\n```\n2. Switch to Dev Containers. Open the VSCode Command Palette, and execute `Dev Containers: Reopen in Container`.\n\nVSCode will open the Dev Containers project in a new window, where it will build the runtime and install the toolchain according to the `Dockerfile` before starting the connection and finally installing the MetaMCP dependencies.\n\u003Cimg width=\"895\" height=\"153\" alt=\"image\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmetatool-ai_metamcp_readme_ffb4c642679c.png\" \u002F>\n\n> **note**\n> This process requires a reliable network connection, and it will access Docker Hub, GitHub, and some other sites. You will need to ensure the network connection yourself, otherwise the container build may fail.\n\nWait some minutes, depending on the internet connection or computer performance, it may take from a few minutes to tens of minutes, you can click on the Progress Bar in the bottom right corner to view a live log where you will be able to check unusual stuck.\n\u003Cimg width=\"732\" height=\"173\" alt=\"image\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmetatool-ai_metamcp_readme_f24cc1ae4cb1.png\" \u002F>\n\nAfter finished, you can run `pnpm dev` to start the development server.\n\n### **💻 Local Development**\n\nStill recommend running postgres through docker for easy setup:\n\n```bash\npnpm install\npnpm dev\n```\n\n## 🔌 MCP Protocol Compatibility\n\n- ✅ **Tools, Resources, and Prompts** supported\n- ✅ **OAuth-enabled MCP servers** tested for 03-26 version\n\nIf you have questions, feel free to leave **GitHub issues** or **PRs**.\n\n## 🔗 Connect to MetaMCP\n\n### 📝 E.g., Cursor via mcp.json\n\nExample `mcp.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"MetaMCP\": {\n      \"url\": \"http:\u002F\u002Flocalhost:12008\u002Fmetamcp\u002F\u003CYOUR_ENDPOINT_NAME>\u002Fsse\"\n    }\n  }\n}\n```\n\n### 🖥️ Connecting Claude Desktop and Other STDIO-only Clients\n\nSince MetaMCP endpoints are remote only (SSE, Streamable HTTP, OpenAPI), clients that only support stdio servers (like Claude Desktop) need a local proxy to connect.\n\n**Note:** While `mcp-remote` is sometimes suggested for this purpose, it's designed for OAuth-based authentication and doesn't work with MetaMCP's API key authentication. Based on testing, `mcp-proxy` is the recommended solution.\n\nHere's a working configuration for Claude Desktop using `mcp-proxy`:\n\nUsing Streamable HTTP\n\n```json\n{\n  \"mcpServers\": {\n    \"MetaMCP\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"mcp-proxy\",\n        \"--transport\",\n        \"streamablehttp\",\n        \"http:\u002F\u002Flocalhost:12008\u002Fmetamcp\u002F\u003CYOUR_ENDPOINT_NAME>\u002Fmcp\"\n      ],\n      \"env\": {\n        \"API_ACCESS_TOKEN\": \"\u003CYOUR_API_KEY_HERE>\"\n      }\n    }\n  }\n}\n```\n\nUsing SSE\n\n```json\n{\n  \"mcpServers\": {\n    \"ehn\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"mcp-proxy\",\n        \"http:\u002F\u002Flocalhost:12008\u002Fmetamcp\u002F\u003CYOUR_ENDPOINT_NAME>\u002Fsse\"\n      ],\n      \"env\": {\n        \"API_ACCESS_TOKEN\": \"\u003CYOUR_API_KEY_HERE>\"\n      }\n    }\n  }\n}\n```\n\n**Important notes:**\n- Replace `\u003CYOUR_ENDPOINT_NAME>` with your actual endpoint name\n- Replace `\u003CYOUR_API_KEY_HERE>` with your MetaMCP API key (format: `sk_mt_...`)\n\nFor more details and alternative approaches, see [issue #76](https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F76#issuecomment-3046707532).\n\n### 🔧 API Key Auth Troubleshooting\n\n- `?api_key=` param api key auth doesn't work for SSE. It only works for Streamable HTTP and OpenAPI.\n- Best practice is to use the API key in `Authorization: Bearer \u003CAPI_KEY>` header.\n- Try disable auth temporarily when you face connection issues to see if it is an auth issue.\n\n## ❄️ Cold Start Problem and Custom Dockerfile\n\n- MetaMCP pre-allocate idle sessions for each configured MCP servers and MetaMCPs. The default idle session for each is 1 and that can help reduce cold start time.\n- If your MCP requires dependencies other than `uvx` or `npx`, you need to customize the Dockerfile to install dependencies on your own.\n- Check [invalidation.md](invalidation.md) for a seq diagram about how idle session invalidates during updates.\n\n🛠️ **Solution**: Customize the Dockerfile to add dependencies or pre-install packages to reduce cold start time.\n\n## 🧾 Log Levels\n\nMetaMCP’s backend writes logs to files and optionally mirrors selected levels to the console. Control console mirroring with the `LOG_LEVEL` environment variable.\n\n- Files\n  - `app.log`: receives `DEBUG`, `INFO`, and `WARN`\n  - `error.log`: receives `ERROR`\n\n- Console mirroring (`LOG_LEVEL`)\n  - `all`: mirror `DEBUG`, `INFO`, `WARN`, `ERROR` to console\n  - `info`: mirror only `INFO` to console\n  - `errors-only`: mirror `WARN` and `ERROR` to console\n  - `none`: no console output\n\n- Defaults and examples\n  - Default (when unset or invalid): `errors-only`\n  - `.env` example:\n    ```bash\n    LOG_LEVEL='errors-only' # 'all', 'info', 'errors-only', 'none'\n    ```\n  - `docker-compose.dev.yml` uses: `LOG_LEVEL: ${LOG_LEVEL:-all}`\n\n## 🔐 Authentication\n\n- 🛡️ **Better Auth** for frontend & backend (TRPC procedures)\n- 🍪 **Session cookies** enforce secure internal MCP proxy connections\n- 🔑 **API key authentication** for external access via `Authorization: Bearer \u003Capi-key>` header\n- 🪪 **MCP OAuth**: Exposed endpoints have options to use standard OAuth in MCP Spec 2025-06-18, easy to connect.\n- 🏢 **Multi-tenancy**: Designed for organizations to deploy on their own machines. Supports both private and public access scopes. Users can create MCPs, namespaces, endpoints, and API keys for themselves or for everyone. Public API keys cannot access private MetaMCPs.\n- ⚙️ **Separate Registration Controls**: Administrators can independently control UI registration and SSO\u002FOAuth registration through the settings page, allowing for flexible enterprise deployment scenarios.\n\n## 🚦 Traffic Management\n\n### 🚧 MCP Rate Limit\nThe MCP Rate Limit feature allows you to set the maximum requests a MCP tool (a endpoint) will accept in a given time window. There are two different strategies to set limits that you can use separately or together:\n\n * `Endpoint rate-limiting (Rate Limiting)`: applies simultaneously to all clients using the endpoint, sharing a unique counter.\n * `User rate-limiting (Client Rate Limiting)`: sets a counter to each individual user.\n\nBoth types can coexist and they complement each other, and store the counters in-memory. On a cluster, each machine sees and counts only its passing traffic.\n\n### **Endpoint rate-limiting**\nThe endpoint rate limit acts on the number of simultaneous transactions an endpoint can process. This type of limit protects the service for all customers.\nWhen the users connected to an endpoint together exceed the `rate-limiting`, MetaMCP starts to reject connections with a status code `503 Service Unavailable`.\n\n#### **Endpoint rate-limiting options**\n * `Max Rate`: Defines how many requests will you accept from all users together at any given instant. When the gateway starts, the bucket is full. As requests from users come, the remaining tokens in the bucket decrease. At the same time, the rate-limiting refills the bucket at the desired rate until its maximum capacity is reached.\n * `Max Rate Seconds`: Time period in which the maximum rates operate in seconds. For instance, if you set an max rate seconds of 60s and a rate-limiting of 5, you are allowing 5 requests every sixty seconds.\n\n### **User rate-limiting**\nThe client or user rate limit applies one counter to each individual user and endpoint. When a single user connected to an endpoint exceeds their `client-max-rate`, MetaMCP starts rejecting connections with a status code `429 Too Many Requests`\n\n#### **User rate-limiting options**\n * `Client Max Rate`: Number of tokens you add to the Token Bucket for each individual user (user quota) in the time interval you want (Client Max Rate Seconds). The remaining tokens in the bucket are the requests a specific user can do.\n * `Client Max Rate Seconds`: Time period in which the maximum rates operate in seconds. For instance, if you set an every of 60s and a rate of 5, you are allowing 5 requests every sixty seconds.\n * `Client Max Rate Strategy`: Sets the strategy you will use to set client counters. Choose ip when the restrictions apply to the client’s IP address, or set it to header when there is a header that identifies a user uniquely. That header must be defined with the key entry.\n * `Client Max Rate Strategy Key`: It is the header name containing the user identification (e.g., Authorization on tokens, or X-Original-Forwarded-For for IPs).\n\n## 🔗 OpenID Connect (OIDC) Provider Support\n\nMetaMCP supports **OpenID Connect authentication** for enterprise SSO integration. This allows organizations to use their existing identity providers (Auth0, Keycloak, Azure AD, etc.) for authentication.\n\n### 🛠️ **Configuration**\n\nAdd the following environment variables to your `.env` file:\n\n```bash\n# Required\nOIDC_CLIENT_ID=your-oidc-client-id\nOIDC_CLIENT_SECRET=your-oidc-client-secret\nOIDC_DISCOVERY_URL=https:\u002F\u002Fyour-provider.com\u002F.well-known\u002Fopenid-configuration\n\n# Optional customization\nOIDC_PROVIDER_ID=oidc\nOIDC_SCOPES=openid email profile\nOIDC_PKCE=true\n```\n\n### 🏢 **Supported Providers**\n\nMetaMCP has been tested with popular OIDC providers:\n\n- **Auth0**: `https:\u002F\u002Fyour-domain.auth0.com\u002F.well-known\u002Fopenid-configuration`\n- **Keycloak**: `https:\u002F\u002Fyour-keycloak.com\u002Frealms\u002Fyour-realm\u002F.well-known\u002Fopenid-configuration`\n- **Azure AD**: `https:\u002F\u002Flogin.microsoftonline.com\u002Fyour-tenant-id\u002Fv2.0\u002F.well-known\u002Fopenid-configuration`\n- **Google**: `https:\u002F\u002Faccounts.google.com\u002F.well-known\u002Fopenid-configuration`\n- **Okta**: `https:\u002F\u002Fyour-domain.okta.com\u002F.well-known\u002Fopenid-configuration`\n\n### 🔒 **Security Features**\n\n- 🔐 **PKCE (Proof Key for Code Exchange)** enabled by default\n- 🛡️ **Authorization Code Flow** with automatic user creation\n- 🔄 **Auto-discovery** of OIDC endpoints\n- 🍪 **Seamless session management** with existing auth system\n\n### 📱 **Usage**\n\nOnce configured, users will see a **\"Sign in with OIDC\"** button on the login page alongside the email\u002Fpassword form. The authentication flow automatically creates new users on first login.\n\nFor more detailed configuration examples and troubleshooting, see **[CONTRIBUTING.md](CONTRIBUTING.md#openid-connect-oidc-provider-setup)**.\n\n## ⚙️ Registration Controls\n\nMetaMCP provides **separate controls** for different registration methods, allowing administrators to fine-tune user access policies for enterprise deployments.\n\n### 🎛️ **Available Controls**\n\n- **UI Registration**: Controls whether users can create accounts via the registration form\n- **SSO Registration**: Controls whether users can create accounts via SSO\u002FOAuth providers (OIDC, etc.)\n\n### 🏢 **Enterprise Use Cases**\n\nThis separation enables common enterprise scenarios:\n\n- **Block UI registration, allow SSO**: Prevent manual signups while allowing corporate SSO users\n- **Block SSO registration, allow UI**: Allow manual signups while restricting SSO access\n- **Block both**: Completely disable new user registration\n- **Allow both**: Default behavior for open deployments\n\n### 🛠️ **Configuration**\n\nAccess the **Settings** page in the MetaMCP admin interface to configure these controls:\n\n1. Navigate to **Settings** → **Authentication Settings**\n2. Toggle **\"Disable UI Registration\"** to control form-based signups\n3. Toggle **\"Disable SSO Registration\"** to control OAuth\u002FOIDC signups\n\nBoth controls work independently, giving you full flexibility over your registration policy.\n\n## 🌐 Custom Deployment and SSE conf for Nginx\n\nIf you want to deploy it to a online service or a VPS, a instance of at least 2GB-4GB of memory is required. And the larger size, the better performance.\n\nSince MCP leverages SSE for long connection, if you are using reverse proxy like nginx, please refer to an example setup [nginx.conf.example](nginx.conf.example)\n\n## 🏗️ Architecture\n\n- **Frontend**: Next.js\n- **Backend**: Express.js with tRPC, hosting MCPs through TS SDK and internal proxy\n- **Auth**: Better Auth\n- **Structure**: Standalone monorepo with Turborepo and Docker publishing\n\n### 📊 Sequence Diagram\n\n*Note: Prompts and resources follow similar patterns to tools.*\n\n```mermaid\nsequenceDiagram\n    participant MCPClient as MCP Client (e.g., Claude Desktop)\n    participant MetaMCP as MetaMCP Server\n    participant MCPServers as Installed MCP Servers\n\n    MCPClient ->> MetaMCP: Request list tools\n\n    loop For each listed MCP Server\n        MetaMCP ->> MCPServers: Request list_tools\n        MCPServers ->> MetaMCP: Return list of tools\n    end\n\n    MetaMCP ->> MetaMCP: Aggregate tool lists & apply middleware\n    MetaMCP ->> MCPClient: Return aggregated list of tools\n\n    MCPClient ->> MetaMCP: Call tool\n    MetaMCP ->> MCPServers: call_tool to target MCP Server\n    MCPServers ->> MetaMCP: Return tool response\n    MetaMCP ->> MCPClient: Return tool response\n```\n\n## 🗺️ Roadmap\n\n**Potential next steps:**\n\n- [ ] 🔌 Headless Admin API access\n- [ ] 🔍 Dynamically apply search rules on MetaMCP endpoints\n- [ ] 🛠️ More middlewares\n- [ ] 💬 Chat\u002FAgent Playground\n- [ ] 🧪 Testing & Evaluation for MCP tool selection optimization\n- [ ] ⚡ Dynamically generate MCP servers\n\n## 🌐 i18n\n\nSee [README-i18n.md](README-i18n.md)\n\nCurrently en and zh locale are supported, but welcome contributions.\n\n## 🤝 Contributing\n\nWe welcome contributions! See details at **[CONTRIBUTING.md](CONTRIBUTING.md)**\n\n## 📄 License\n\n**MIT**\n\nWould appreciate if you mentioned with back links if your projects use the code.\n\n## 🙏 Credits\n\nSome code inspired by:\n- [MCP Inspector](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Finspector)\n- [MCP Proxy Server](https:\u002F\u002Fgithub.com\u002Fadamwattis\u002Fmcp-proxy-server)\n\nNot directly used the code by took ideas from\n- https:\u002F\u002Fgithub.com\u002Fopen-webui\u002Fopenapi-servers\n- https:\u002F\u002Fgithub.com\u002Fopen-webui\u002Fmcpo\n","# 🚀 MetaMCP（MCP 聚合器、编排器、中间件、网关一体化 Docker 镜像）\u003C!-- omit in toc -->\n\n\u003Cdiv align=\"center\">\n\n\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FmNsyat7mFX\" style=\"text-decoration: none;\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-MetaMCP-5865F2?style=flat-square&logo=discord&logoColor=white\" alt=\"Discord\" style=\"max-width: 100%;\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdocs.metamcp.com\" style=\"text-decoration: none;\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocumentation-docs.metamcp.com-blue?style=flat-square&logo=book\" alt=\"Documentation\" style=\"max-width: 100%;\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT\" style=\"text-decoration: none;\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg?style=flat-square\" alt=\"MIT License\" style=\"max-width: 100%;\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpkgs\u002Fcontainer\u002Fmetamcp\" style=\"text-decoration: none;\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGHCR-available-green.svg?style=flat-square&logo=github\" alt=\"GHCR\" style=\"max-width: 100%;\">\n  \u003C\u002FA>\n  \u003Ca href=\"https:\u002F\u002Fdeepwiki.com\u002Fmetatool-ai\u002Fmetamcp\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDeepWiki-metatool--ai%2Fmetamcp-blue.svg?style=flat-square&logo=data:image\u002Fpng;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK\u002FAIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06\u002Fuv1saEDv4O3n3dV60RfP947Mm9\u002FSQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH\u002F\u002FPB8mnKqScAhsD0kYP3j\u002FYt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY\u002F56ebRWeraTjMt\u002F00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB\u002FimwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h\u002FU4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5\u002FXFWLYZRIMpX39AR0tjaGGiGzQVrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr\u002FFGaKiG+T+v+TcrS5UwSMbQAAAABJRU5ErkJggg==\" alt=\"DeepWiki: MetaMCP\">\u003C\u002Fa>\n\u003C\u002Fdiv>\n\n\u003C\u002Fdiv>\n\n> **📢 更新：** *[作者说明：对近期维护延迟表示歉意，但至少会继续合并 PR，更多背景信息 [在此](recent-updates.md)]*\n\n**MetaMCP** 是一个 MCP 代理，允许您将多个 MCP 服务器动态聚合为一个统一的 MCP 服务器，并应用中间件。MetaMCP 本身也是一个 MCP 服务器，因此可以轻松接入 **任何** MCP 客户端。\n\n![MetaMCP 流程图](metamcp.svg)\n\n---\n\n如需了解更多详情，请访问我们的文档网站：https:\u002F\u002Fdocs.metamcp.com\n\nEnglish | [中文](.\u002FREADME_cn.md)\n## 📋 目录 \u003C!-- omit in toc -->\n\n- [🎯 使用场景](#-use-cases)\n- [📖 概念](#-concepts)\n  - [🖥️ **MCP 服务器**](#️-mcp-server)\n    - [🔐 **环境变量与密钥（STDIO MCP 服务器）**](#-environment-variables--secrets-stdio-mcp-servers)\n  - [🏷️ **MetaMCP 命名空间**](#️-metamcp-namespace)\n  - [🌐 **MetaMCP 端点**](#-metamcp-endpoint)\n  - [⚙️ **中间件**](#️-middleware)\n  - [🔍 **检查器**](#-inspector)\n  - [✏️ **工具覆盖与注解**](#️-tool-overrides--annotations)\n- [🚀 快速入门](#-quick-start)\n  - [🐳 使用 Docker Compose 运行（推荐）](#-run-with-docker-compose-recommended)\n  - [📦 使用 Dev Containers 构建开发环境（VSCode\u002FCursor）](#-build-development-environment-with-dev-containers-vscodecursor)\n  - [💻 本地开发](#-local-development)\n- [🔌 MCP 协议兼容性](#-mcp-protocol-compatibility)\n- [🔗 连接到 MetaMCP](#-connect-to-metamcp)\n  - [📝 例如：通过 mcp.json 连接 Cursor](#-eg-cursor-via-mcpjson)\n  - [🖥️ 连接 Claude Desktop 及其他仅支持 STDIO 的客户端](#️-connecting-claude-desktop-and-other-stdio-only-clients)\n  - [🔧 API 密钥认证故障排除](#-api-key-auth-troubleshooting)\n- [❄️ 冷启动问题与自定义 Dockerfile](#️-cold-start-problem-and-custom-dockerfile)\n- [🧾 日志级别](#-log-levels)\n- [🔐 认证](#-authentication)\n- [🚦 流量管理](#-traffic-management)\n  - [🚧 **MCP 速率限制**](#-mcp-rate-limit)\n- [🔗 OpenID Connect (OIDC) 提供商支持](#-openid-connect-oidc-provider-support)\n  - [🛠️ **配置**](#️-configuration)\n  - [🏢 **支持的提供商**](#-supported-providers)\n  - [🔒 **安全特性**](#-security-features)\n  - [📱 **使用方法**](#-usage)\n- [⚙️ 注册控制](#️-registration-controls)\n  - [🎛️ **可用的控制选项**](#️-available-controls)\n  - [🏢 **企业级应用场景**](#-enterprise-use-cases)\n  - [🛠️ **配置**](#️-configuration-1)\n- [🌐 自定义部署及 Nginx 的 SSE 配置](#-custom-deployment-and-sse-conf-for-nginx)\n- [🏗️ 架构](#️-architecture)\n  - [📊 序列图](#-sequence-diagram)\n- [🗺️ 路线图](#️-roadmap)\n- [🌐 i18n](#-i18n)\n- [🤝 贡献](#-contributing)\n- [📄 许可证](#-license)\n- [🙏 致谢](#-credits)\n\n## 🎯 使用场景\n- 🏷️ **将多个 MCP 服务器分组到命名空间中，以 MetaMCP 的形式托管，并分配公共端点**（SSE 或可流式传输的 HTTP），同时进行身份验证。只需单击即可切换端点对应的命名空间。\n-  🎯 **在重新组合 MCP 服务器时，只选择所需的工具。** 还可以围绕可观ability、安全性等应用其他 **可插拔中间件**（即将推出）。\n-  🔍 **用作增强型 MCP 检查器**，保存服务器配置，并在本地检查 MetaMCP 端点是否正常工作。\n-  🔍 **用作 MCP 工具选择的 Elasticsearch**（即将推出）\n\n总的来说，开发者可以将 MetaMCP 作为 **基础设施**，通过统一的端点托管动态组合的 MCP 服务器，并在其之上构建智能代理。\n\n快速演示视频：https:\u002F\u002Fyoutu.be\u002FCf6jVd2saAs\n\n![MetaMCP 截图](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmetatool-ai_metamcp_readme_6a9075642814.png)\n\n## 📖 概念\n\n### 🖥️ **MCP 服务器**\n一个 MCP 服务器配置，用于告知 MetaMCP 如何启动 MCP 服务器。\n\n```json\n\"HackerNews\": {\n  \"type\": \"STDIO\",\n  \"command\": \"uvx\",\n  \"args\": [\"mcp-hn\"]\n}\n```\n\n#### 🔐 **环境变量与密钥（STDIO MCP 服务器）**\n\n对于 **STDIO MCP 服务器**，MetaMCP 支持三种处理环境变量和密钥的方式：\n\n**1. 原始值** - 直接使用字符串值（不建议用于密钥）：\n```\nAPI_KEY=your-actual-api-key-here\nDEBUG=true\n```\n\n**2. 环境变量引用** - 使用 `${ENV_VAR_NAME}` 语法：\n```\nAPI_KEY=${OPENAI_API_KEY}\nDATABASE_URL=${DB_CONNECTION_STRING}\n```\n\n**3. 自动匹配** - 如果你的工具中预期的环境变量名称与容器中的环境变量名称一致，则可以完全省略该变量。MetaMCP 会自动传递匹配的环境变量。\n\n> **🔒 安全提示**：环境变量引用（`${VAR_NAME}`）会在运行时从 MetaMCP 容器的环境中解析。这样可以确保实际的密钥值不会出现在你的配置文件或 Git 仓库中。\n\n> **⚙️ 开发提示**：在本地开发时，使用 `pnpm run dev:docker` 命令，请确保你的环境变量已在 `turbo.json` 的 `globalEnv` 中列出，以便传递给开发进程。这在生产环境的 Docker 部署中则不需要。\n\n### 🏷️ **MetaMCP 命名空间**\n- 将一个或多个 MCP 服务器分组到一个命名空间中\n- 在命名空间级别启用或禁用 MCP 服务器\n- 对 MCP 请求和响应应用中间件\n- 按命名空间覆盖工具名称、标题和描述，并附加自定义的 MCP 注解（例如 `{ \"annotations\": { \"readOnlyHint\": false } }`）\n\n### 🌐 **MetaMCP 端点**\n- 创建端点并将命名空间分配给端点\n- 命名空间中的多个 MCP 服务器将被聚合并作为 MetaMCP 端点暴露出来\n- 可选择 API 密钥认证（通过头部或查询参数）或符合 MCP 规范 2025-06-18 的标准 OAuth 认证\n- 通过 **SSE** 或 **可流式 HTTP** 传输协议托管，同时提供适用于 [Open WebUI](https:\u002F\u002Fgithub.com\u002Fopen-webui\u002Fopen-webui) 等客户端的 **OpenAPI** 端点\n\n### ⚙️ **中间件**\n- 在命名空间级别拦截并转换 MCP 请求和响应\n- **内置示例**：“过滤非活跃工具”——为 LLM 优化工具上下文\n- **未来设想**：工具日志记录、错误追踪、验证、扫描等\n\n### 🔍 **检查器**\n类似于官方的 MCP 检查器，但带有 **已保存的服务器配置**——MetaMCP 会自动创建配置，使你能够立即调试 MetaMCP 端点。\n\n### ✏️ **工具覆盖与注解**\n- 打开命名空间 → “工具”选项卡，查看来自连接的 MCP 服务器的所有工具。\n- 每个已保存的工具都可以展开并直接编辑：更新显示的 **名称\u002F标题\u002F描述**，或提供包含命名空间特定注解的 JSON 数据块（例如 `{ \"annotations\": { \"readOnlyHint\": false } }`）。\n- 表格中的标签（“已覆盖”、“注解”）会显示哪些工具当前具有自定义元数据。将鼠标悬停在其上即可查看描述覆盖内容的提示信息。\n- 注解覆盖会与上游 MCP 服务器返回的内容合并，因此你可以安全地添加自定义 UI 提示，而不会丢失提供商的元数据。\n\n## 🚀 快速入门\n\n### **🐳 使用 Docker Compose 运行（推荐）**\n\n克隆仓库，准备 `.env` 文件，然后使用 Docker Compose 启动：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp.git\ncd metamcp\ncp example.env .env\ndocker compose up -d\n```\n\n如果你修改了 `APP_URL` 环境变量，请确保仅通过该 URL 访问，因为 MetaMCP 会对 URL 强制执行 CORS 策略，其他 URL 将无法访问。\n\n请注意，PostgreSQL 数据卷名称可能会与其他 PostgreSQL 容器冲突，由于它是全局的，请考虑在 `docker-compose.yml` 中重命名：\n\n```\nvolumes:\n  metamcp_postgres_data:\n    driver: local\n```\n\n### **📦 使用 Dev Containers 构建开发环境（VSCode\u002FCursor）**\n\n你可以使用 VSCode 或 Cursor 的扩展程序，在容器中构建开发环境。\n\n只需确保你的环境中已安装 Docker 或类似工具（需要 `docker` 和 `docker compose` 命令），无需在主机上安装其他依赖组件。\n\n1. 首先，克隆 MetaMCP 源代码，并在 Visual Studio Code 中打开项目。\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp.git\ncd metamcp\ncode .\n```\n2. 切换到 Dev Containers。打开 VSCode 的命令面板，执行 `Dev Containers: Reopen in Container`。\n\nVSCode 会在一个新窗口中打开 Dev Containers 项目，在建立运行时环境并根据 `Dockerfile` 安装工具链后，它会开始连接并最终安装 MetaMCP 的依赖项。\n\u003Cimg width=\"895\" height=\"153\" alt=\"image\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmetatool-ai_metamcp_readme_ffb4c642679c.png\" \u002F>\n\n> **注意**\n> 此过程需要稳定的网络连接，并会访问 Docker Hub、GitHub 等站点。请确保网络畅通，否则容器构建可能会失败。\n\n等待几分钟，具体时间取决于网络状况和计算机性能，可能需要几分钟到几十分钟不等。你可以点击右下角的进度条查看实时日志，以确认是否有异常卡顿。\n\u003Cimg width=\"732\" height=\"173\" alt=\"image\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmetatool-ai_metamcp_readme_f24cc1ae4cb1.png\" \u002F>\n\n完成后，可以运行 `pnpm dev` 启动开发服务器。\n\n### **💻 本地开发**\n\n仍建议通过 Docker 运行 PostgreSQL，以便于设置：\n\n```bash\npnpm install\npnpm dev\n```\n\n## 🔌 MCP 协议兼容性\n\n- ✅ **工具、资源和提示** 均支持\n- ✅ **支持 OAuth 的 MCP 服务器** 已测试通过 03-26 版本\n\n如有任何问题，欢迎在 GitHub 上提交 **Issue** 或 **PR**。\n\n## 🔗 连接到 MetaMCP\n\n### 📝 例如，通过 mcp.json 连接 Cursor\n\n示例 `mcp.json`：\n\n```json\n{\n  \"mcpServers\": {\n    \"MetaMCP\": {\n      \"url\": \"http:\u002F\u002Flocalhost:12008\u002Fmetamcp\u002F\u003CYOUR_ENDPOINT_NAME>\u002Fsse\"\n    }\n  }\n}\n```\n\n### 🖥️ 连接 Claude Desktop 和其他仅支持 STDIO 的客户端\n\n由于 MetaMCP 端点仅限远程访问（SSE、可流式 HTTP、OpenAPI），因此仅支持 stdio 服务器的客户端（如 Claude Desktop）需要一个本地代理才能连接。\n\n**注意：** 虽然有时会建议使用 `mcp-remote` 来实现这一目的，但它专为基于 OAuth 的认证设计，无法与 MetaMCP 的 API 密钥认证配合使用。根据测试结果，推荐使用 `mcp-proxy`。\n\n以下是使用 `mcp-proxy` 配置 Claude Desktop 的可行方案：\n\n使用可流式 HTTP\n\n```json\n{\n  \"mcpServers\": {\n    \"MetaMCP\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"mcp-proxy\",\n        \"--transport\",\n        \"streamablehttp\",\n        \"http:\u002F\u002Flocalhost:12008\u002Fmetamcp\u002F\u003CYOUR_ENDPOINT_NAME>\u002Fmcp\"\n      ],\n      \"env\": {\n        \"API_ACCESS_TOKEN\": \"\u003CYOUR_API_KEY_HERE>\"\n      }\n    }\n  }\n}\n```\n\n使用 SSE\n\n```json\n{\n  \"mcpServers\": {\n    \"ehn\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"mcp-proxy\",\n        \"http:\u002F\u002Flocalhost:12008\u002Fmetamcp\u002F\u003CYOUR_ENDPOINT_NAME>\u002Fsse\"\n      ],\n      \"env\": {\n        \"API_ACCESS_TOKEN\": \"\u003CYOUR_API_KEY_HERE>\"\n      }\n    }\n  }\n}\n```\n\n**重要提示：**\n- 将 `\u003CYOUR_ENDPOINT_NAME>` 替换为你的实际端点名称\n- 将 `\u003CYOUR_API_KEY_HERE>` 替换为你的 MetaMCP API 密钥（格式：`sk_mt_...`）\n\n有关更多详细信息和替代方法，请参阅 [issue #76](https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F76#issuecomment-3046707532)。\n\n### 🔧 API 密钥认证故障排除\n\n- 使用 `?api_key=` 参数进行的 API 密钥认证不适用于 SSE。它仅适用于可流式 HTTP 和 OpenAPI。\n- 最佳实践是将 API 密钥放在 `Authorization: Bearer \u003CAPI_KEY>` 头中。\n- 当遇到连接问题时，可以暂时禁用认证，以判断是否为认证问题。\n\n## ❄️ 冷启动问题与自定义 Dockerfile\n\n- MetaMCP 会为每个配置的 MCP 服务器和 MetaMCP 预分配空闲会话。默认情况下，每个会话的空闲时间为 1，这有助于减少冷启动时间。\n- 如果你的 MCP 需要除 `uvx` 或 `npx` 之外的依赖项，则需要自定义 Dockerfile 来自行安装这些依赖。\n- 请查看 [invalidation.md](invalidation.md)，了解更新过程中空闲会话失效的序列图。\n\n🛠️ **解决方案**：自定义 Dockerfile 添加依赖项或预安装软件包，以减少冷启动时间。\n\n## 🧾 日志级别\n\nMetaMCP 的后端会将日志写入文件，并可以选择性地将部分级别的日志镜像到控制台。可以通过 `LOG_LEVEL` 环境变量来控制控制台的日志镜像。\n\n- 文件\n  - `app.log`：接收 `DEBUG`、`INFO` 和 `WARN` 级别日志\n  - `error.log`：接收 `ERROR` 级别日志\n\n- 控制台镜像（`LOG_LEVEL`）\n  - `all`：将 `DEBUG`、`INFO`、`WARN` 和 `ERROR` 镜像到控制台\n  - `info`：仅将 `INFO` 镜像到控制台\n  - `errors-only`：将 `WARN` 和 `ERROR` 镜像到控制台\n  - `none`：无控制台输出\n\n- 默认值及示例\n  - 默认值（未设置或无效时）：`errors-only`\n  - `.env` 示例：\n    ```bash\n    LOG_LEVEL='errors-only' # 'all', 'info', 'errors-only', 'none'\n    ```\n  - `docker-compose.dev.yml` 中使用：`LOG_LEVEL: ${LOG_LEVEL:-all}`\n\n## 🔐 认证\n\n- 🛡️ 前后端更好的认证（TRPC 流程）\n- 🍪 会话 Cookie 强制执行安全的内部 MCP 代理连接\n- 🔑 API 密钥认证用于通过 `Authorization: Bearer \u003Capi-key>` 头进行的外部访问\n- 🪪 **MCP OAuth**：公开端点提供了在 MCP 规范 2025-06-18 中使用标准 OAuth 的选项，易于集成。\n- 🏢 **多租户**：专为组织在其自有机器上部署而设计。支持私有和公有访问范围。用户可以为自己或所有人创建 MCP、命名空间、端点和 API 密钥。公共 API 密钥无法访问私有 MetaMCP。\n- ⚙️ **独立注册控制**：管理员可以通过设置页面分别控制 UI 注册和 SSO\u002FOAuth 注册，从而实现灵活的企业部署场景。\n\n## 🚦 流量管理\n\n### 🚧 MCP 速率限制\nMCP 速率限制功能允许你设置某个 MCP 工具（即端点）在给定时间窗口内可接受的最大请求数量。有两种不同的策略可以单独或组合使用：\n\n * `端点速率限制（Rate Limiting）`：同时适用于所有使用该端点的客户端，共享一个统一的计数器。\n * `用户速率限制（Client Rate Limiting）`：为每个用户设置独立的计数器。\n\n这两种类型可以共存并相互补充，计数器存储在内存中。在集群环境中，每台机器仅能看到并统计其自身的流量。\n\n### **端点速率限制**\n端点速率限制作用于端点可同时处理的事务数量。这种类型的限制保护了服务对所有客户的影响。\n当连接到某个端点的用户总数超过设定的 `rate-limiting` 时，MetaMCP 会开始拒绝连接，并返回状态码 `503 Service Unavailable`。\n\n#### **端点速率限制选项**\n * `最大速率`：定义在任何给定时刻将接受来自所有用户的多少个请求。网关启动时，令牌桶是满的。随着用户请求的到来，令牌桶中的剩余令牌逐渐减少。同时，速率限制会以设定的速率向桶中补充令牌，直到达到最大容量。\n * `最大速率秒数`：最大速率生效的时间周期，单位为秒。例如，如果你设置最大速率秒数为 60 秒，速率为 5，则表示每 60 秒允许 5 个请求。\n\n### **用户速率限制**\n客户端或用户速率限制为每个用户和端点设置一个独立的计数器。当单个用户连接到某个端点的次数超过其 `client-max-rate` 时，MetaMCP 会开始拒绝连接，并返回状态码 `429 Too Many Requests`。\n\n#### **用户速率限制选项**\n * `客户端最大速率`：在你希望的时间间隔内（客户端最大速率秒数），为每个用户添加到令牌桶中的令牌数量（用户配额）。桶中剩余的令牌就是该用户可以发出的请求数量。\n * `客户端最大速率秒数`：最大速率生效的时间周期，单位为秒。例如，如果你设置每 60 秒允许 5 次请求，则表示每 60 秒允许 5 个请求。\n * `客户端最大速率策略`：设置用于设定客户端计数器的策略。选择 IP 时，限制将应用于客户的 IP 地址；如果存在能够唯一标识用户的头信息，则将其设置为头信息。该头信息必须通过键条目进行定义。\n * `客户端最大速率策略键`：包含用户身份识别信息的头字段名称（例如，用于令牌的身份验证头，或用于 IP 的 X-Original-Forwarded-For 头）。\n\n## 🔗 OpenID Connect（OIDC）提供商支持\n\nMetaMCP 支持 **OpenID Connect 认证**，用于企业 SSO 集成。这使得组织可以使用现有的身份提供商（Auth0、Keycloak、Azure AD 等）进行认证。\n\n### 🛠️ **配置**\n\n将以下环境变量添加到你的 `.env` 文件中：\n\n```bash\n# 必需\nOIDC_CLIENT_ID=your-oidc-client-id\nOIDC_CLIENT_SECRET=your-oidc-client-secret\nOIDC_DISCOVERY_URL=https:\u002F\u002Fyour-provider.com\u002F.well-known\u002Fopenid-configuration\n\n# 可选自定义\nOIDC_PROVIDER_ID=oidc\nOIDC_SCOPES=openid email profile\nOIDC_PKCE=true\n```\n\n### 🏢 **支持的提供商**\n\nMetaMCP 已在多个流行的 OIDC 提供商上进行了测试：\n\n- **Auth0**: `https:\u002F\u002Fyour-domain.auth0.com\u002F.well-known\u002Fopenid-configuration`\n- **Keycloak**: `https:\u002F\u002Fyour-keycloak.com\u002Frealms\u002Fyour-realm\u002F.well-known\u002Fopenid-configuration`\n- **Azure AD**: `https:\u002F\u002Flogin.microsoftonline.com\u002Fyour-tenant-id\u002Fv2.0\u002F.well-known\u002Fopenid-configuration`\n- **Google**: `https:\u002F\u002Faccounts.google.com\u002F.well-known\u002Fopenid-configuration`\n- **Okta**: `https:\u002F\u002Fyour-domain.okta.com\u002F.well-known\u002Fopenid-configuration`\n\n### 🔒 **安全特性**\n\n- 🔐 默认启用 **PKCE（代码交换证明密钥）**\n- 🛡️ 使用自动用户创建的 **授权码流程**\n- 🔄 自动发现 OIDC 端点\n- 🍪 与现有认证系统无缝集成的会话管理\n\n### 📱 **使用方法**\n\n配置完成后，用户将在登录页面看到一个“使用 OIDC 登录”按钮，与邮箱\u002F密码表单并列。首次登录时，认证流程会自动创建新用户。\n\n有关更详细的配置示例和故障排除，请参阅 **[CONTRIBUTING.md](CONTRIBUTING.md#openid-connect-oidc-provider-setup)**。\n\n## ⚙️ 注册控制\n\nMetaMCP 为不同的注册方式提供了独立的控制选项，使管理员能够针对企业部署精细调整用户访问策略。\n\n### 🎛️ **可用控制**\n\n- **UI 注册**：控制用户是否可以通过注册表单创建账户\n- **SSO 注册**：控制用户是否可以通过 SSO\u002FOAuth 提供商（如 OIDC 等）创建账户\n\n### 🏢 **企业用例**\n\n这种分离设计可满足常见的企业场景：\n\n- **禁止 UI 注册，允许 SSO**：阻止手动注册，同时允许企业 SSO 用户登录\n- **禁止 SSO 注册，允许 UI**：允许手动注册，同时限制 SSO 访问\n- **两者均禁止**：完全禁用新用户注册\n- **两者均允许**：适用于开放部署的默认行为\n\n### 🛠️ **配置**\n\n通过 MetaMCP 管理界面中的“设置”页面来配置这些控制：\n\n1. 导航至“设置”→“认证设置”\n2. 切换“禁用 UI 注册”以控制基于表单的注册\n3. 切换“禁用 SSO 注册”以控制 OAuth\u002FOIDC 注册\n\n这两个控制相互独立，为您提供完全灵活的注册策略。\n\n## 🌐 自定义部署及 Nginx 的 SSE 配置\n\n若要将其部署到线上服务或 VPS 上，至少需要 2GB 至 4GB 的内存。内存越大，性能越好。\n\n由于 MCP 利用 SSE 实现长连接，如果您使用 Nginx 等反向代理，请参考示例配置 [nginx.conf.example](nginx.conf.example)。\n\n## 🏗️ 架构\n\n- **前端**：Next.js\n- **后端**：Express.js 结合 tRPC，通过 TS SDK 和内部代理托管 MCP 服务器\n- **认证**：Better Auth\n- **结构**：采用 Turborepo 和 Docker 发布的独立单体仓库\n\n### 📊 序列图\n\n*注：提示和资源遵循与工具类似的模式。*\n\n```mermaid\nsequenceDiagram\n    participant MCPClient as MCP 客户端（例如 Claude Desktop）\n    participant MetaMCP as MetaMCP 服务器\n    participant MCPServers as 已安装的 MCP 服务器\n\n    MCPClient ->> MetaMCP: 请求工具列表\n\n    loop 对于每个列出的 MCP 服务器\n        MetaMCP ->> MCPServers: 请求 list_tools\n        MCPServers ->> MetaMCP: 返回工具列表\n    end\n\n    MetaMCP ->> MetaMCP: 汇总工具列表并应用中间件\n    MetaMCP ->> MCPClient: 返回汇总后的工具列表\n\n    MCPClient ->> MetaMCP: 调用工具\n    MetaMCP ->> MCPServers: 将 call_tool 请求发送到目标 MCP 服务器\n    MCPServers ->> MetaMCP: 返回工具响应\n    MetaMCP ->> MCPClient: 返回工具响应\n```\n\n## 🗺️ 路线图\n\n**潜在的下一步：**\n\n- [ ] 🔌 无头管理 API 访问\n- [ ] 🔍 在 MetaMCP 端点上动态应用搜索规则\n- [ ] 🛠️ 更多中间件\n- [ ] 💬 聊天\u002F代理 Playground\n- [ ] 🧪 测试与评估，优化 MCP 工具选择\n- [ ] ⚡ 动态生成 MCP 服务器\n\n## 🌐 i18n\n\n请参阅 [README-i18n.md](README-i18n.md)\n\n目前支持英文和中文本地化，欢迎贡献。\n\n## 🤝 贡献\n\n我们欢迎各类贡献！详情请参阅 **[CONTRIBUTING.md](CONTRIBUTING.md)**。\n\n## 📄 许可证\n\n**MIT**\n\n如果您在项目中使用了本代码，请注明并附上链接，我们将不胜感激。\n\n## 🙏 致谢\n\n部分代码灵感来源于：\n- [MCP Inspector](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Finspector)\n- [MCP 代理服务器](https:\u002F\u002Fgithub.com\u002Fadamwattis\u002Fmcp-proxy-server)\n\n未直接使用相关代码，但借鉴了其中的思想：\n- https:\u002F\u002Fgithub.com\u002Fopen-webui\u002Fopenapi-servers\n- https:\u002F\u002Fgithub.com\u002Fopen-webui\u002Fmcpo","# MetaMCP 快速上手指南\n\nMetaMCP 是一个 MCP 代理工具，支持将多个 MCP 服务器动态聚合为统一的 MCP 服务，并提供中间件、网关和编排功能。它本身也是一个 MCP 服务器，可无缝接入任意 MCP 客户端（如 Cursor、Claude Desktop 等）。\n\n## 环境准备\n\n### 系统要求\n- 操作系统：Linux \u002F macOS \u002F Windows (WSL2)\n- Docker 及 Docker Compose（推荐方式）\n- 或 Node.js 18+ 与 pnpm（本地开发模式）\n\n### 前置依赖\n- **Docker 模式**：确保已安装并运行 Docker Desktop 或兼容的容器运行时。\n- **本地开发模式**：\n  - 安装 [Node.js](https:\u002F\u002Fnodejs.org\u002F) (v18+)\n  - 安装 [pnpm](https:\u002F\u002Fpnpm.io\u002F)：`npm install -g pnpm`\n  - 本地运行 PostgreSQL（或通过 Docker 启动）\n\n> 💡 **国内开发者提示**：如遇 Docker Hub 拉取缓慢，可配置国内镜像加速器（如阿里云、腾讯云、网易云等）。Node.js 依赖可使用淘宝镜像：`pnpm config set registry https:\u002F\u002Fregistry.npmmirror.com`。\n\n## 安装步骤\n\n### 方式一：使用 Docker Compose（推荐）\n\n这是最简便的部署方式，一键启动包含数据库在内的完整环境。\n\n```bash\n# 1. 克隆仓库\ngit clone https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp.git\ncd metamcp\n\n# 2. 复制环境变量配置文件\ncp example.env .env\n\n# 3. 启动服务\ndocker compose up -d\n```\n\n> **注意**：\n> - 启动后请通过 `.env` 中配置的 `APP_URL` 访问服务，MetaMCP 启用了严格的 CORS 策略。\n> - 若本地已有名为 `postgres` 的卷导致冲突，请在 `docker-compose.yml` 中修改卷名称（例如改为 `metamcp_postgres_data`）。\n\n### 方式二：本地开发环境\n\n适合需要修改源码或调试的开发者。\n\n```bash\n# 1. 安装依赖\npnpm install\n\n# 2. 确保 PostgreSQL 正在运行（推荐使用 Docker 启动 PG）\n# docker run --name pg-metamcp -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres\n\n# 3. 启动开发服务器\npnpm dev\n```\n\n### 方式三：使用 Dev Containers (VSCode\u002FCursor)\n\n如果你使用 VSCode 或 Cursor，可直接在容器中构建开发环境，无需在宿主机安装任何依赖。\n\n1. 克隆代码并用编辑器打开：\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp.git\n   cd metamcp\n   code .\n   ```\n2. 按下 `F1` 或 `Ctrl+Shift+P`，输入并执行命令：`Dev Containers: Reopen in Container`。\n3. 等待容器构建完成（需联网拉取镜像），完成后在终端运行 `pnpm dev` 即可。\n\n## 基本使用\n\n### 1. 访问管理界面\n启动成功后，在浏览器打开 `http:\u002F\u002Flocalhost:3000`（具体端口视 `.env` 配置而定）。\n\n### 2. 配置 MCP 服务器 (Namespace)\n在管理界面中：\n- 创建一个 **Namespace**（命名空间）。\n- 添加 MCP Server 配置。例如，添加一个基于 STDIO 的 HackerNews 服务：\n  ```json\n  {\n    \"type\": \"STDIO\",\n    \"command\": \"uvx\",\n    \"args\": [\"mcp-hn\"]\n  }\n  ```\n- **环境变量处理**：敏感信息建议使用 `${VAR_NAME}` 格式引用宿主环境变量，避免硬编码密钥。\n\n### 3. 创建对外端点 (Endpoint)\n- 在 Namespace 下创建一个 **Endpoint**。\n- 选择传输协议：**SSE** 或 **Streamable HTTP**。\n- 设置认证方式：API Key 或 OAuth。\n\n### 4. 连接客户端 (以 Cursor 为例)\n在 Cursor 的 `mcp.json` 配置文件中添加 MetaMCP 的端点信息：\n\n```json\n{\n  \"mcpServers\": {\n    \"my-metamcp\": {\n      \"url\": \"http:\u002F\u002Flocalhost:3000\u002Fsse\u002Fyour-endpoint-id\",\n      \"headers\": {\n        \"Authorization\": \"Bearer your-api-key\"\n      }\n    }\n  }\n}\n```\n\n配置完成后，Cursor 即可通过 MetaMCP 聚合后的统一接口调用底层所有 MCP 工具。你还可以在 MetaMCP 界面中对工具进行重命名、添加描述或启用\u002F禁用特定工具，实现灵活的“工具重组”。","某 AI 初创团队正在构建一个智能客服系统，需要让大模型同时调用内部数据库、外部天气 API 以及代码执行沙箱等多个异构服务。\n\n### 没有 metamcp 时\n- **连接配置繁琐**：开发人员必须在每个 AI 客户端（如 Cursor、IDE 插件）中重复配置多个 MCP 服务器的连接信息，维护成本极高。\n- **缺乏统一入口**：大模型面对分散的服务端点，难以在一次对话中灵活组合调用不同来源的工具，导致任务中断或逻辑割裂。\n- **安全管控缺失**：敏感的环境变量和密钥分散在各个服务的配置文件中，缺乏统一的中间层进行脱敏或访问控制，存在泄露风险。\n- **调试困难**：当工具调用失败时，开发者需要在多个日志源之间切换，无法通过单一视图追踪请求在聚合层的完整流转路径。\n\n### 使用 metamcp 后\n- **一键聚合接入**：通过 Docker 部署单个 metamcp 容器，即可将数据库、天气 API 等所有后端服务聚合成一个统一的 MCP 服务端点，客户端只需配置一次。\n- **动态编排能力**：利用其 Orchestrator 特性，大模型可在单次会话中无缝调度底层不同协议的工具，实现“查询天气并写入数据库”等复杂跨服务流程。\n- **集中式安全网关**：作为 Middleware 和 Gateway，metamcp 统一管理所有后端的密钥与环境变量，对外屏蔽敏感细节，显著提升系统安全性。\n- **全链路可观测**：内置的 Inspector 功能提供统一的监控面板，开发者可实时查看工具调用的详细日志与性能指标，快速定位并修复问题。\n\nmetamcp 通过将分散的 MCP 服务聚合为统一、安全且可观测的智能网关，极大降低了多工具协同开发的复杂度与维护成本。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmetatool-ai_metamcp_6a907564.png","metatool-ai","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fmetatool-ai_11cd5cce.png",null,"https:\u002F\u002Fgithub.com\u002Fmetatool-ai",[81,85,89,93,96],{"name":82,"color":83,"percentage":84},"TypeScript","#3178c6",98,{"name":86,"color":87,"percentage":88},"CSS","#663399",0.7,{"name":90,"color":91,"percentage":92},"Dockerfile","#384d54",0.5,{"name":94,"color":95,"percentage":92},"JavaScript","#f1e05a",{"name":97,"color":98,"percentage":99},"Shell","#89e051",0.4,2217,323,"2026-04-16T12:53:51","MIT",3,"Linux, macOS, Windows","未说明",{"notes":108,"python":109,"dependencies":110},"该项目是一个基于 Docker 的 MCP 代理\u002F网关服务，推荐使用 Docker Compose 部署。运行前需准备 .env 配置文件。若进行本地开发，需安装 pnpm 并建议通过 Docker 运行 PostgreSQL 数据库。无特定 GPU 或大内存需求，资源消耗取决于所聚合的后端 MCP 服务器数量及负载。","未说明 (项目使用 pnpm 管理，主要依赖 Node.js 环境)",[111,112,113,114,115],"Docker","Docker Compose","Node.js","pnpm","PostgreSQL",[14],[118,119,120,121,122,123,124,125,126,127,128,129,130,131,132],"mcp","mcp-server","mcp-servers","vibe-coding","model-context-protocol","model-context-protocol-server","model-context-protocol-servers","open-webui","self-hosted","mcp-to-openapi","openapi","mcp-gateway","mcp-host","mcp-middleware","mcp-tools","2026-03-27T02:49:30.150509","2026-04-17T08:25:55.367404",[136,141,146,151,156,161],{"id":137,"question_zh":138,"answer_zh":139,"source_url":140},37158,"部署到 Kubernetes 或 Docker 后，注册或登录时出现 \"Auth middleware error: fetch failed\" 错误怎么办？","这通常是由于认证配置或版本问题导致的。请尝试拉取最新的镜像（`ghcr.io\u002Fmetatool-ai\u002Fmetamcp:latest`），维护者已在最新版本中修复了该问题。如果问题依旧，请检查是否正确配置了 `BETTER_AUTH_URL` 和 `FRONTEND_URL` 环境变量，确保它们指向正确的外部访问地址或服务内部地址。相关修复已合并在 PR #82 中。","https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F60",{"id":142,"question_zh":143,"answer_zh":144,"source_url":145},37159,"通过 CloudFlare Tunnels 或反向代理访问时遇到 CORS（跨域）错误，即使域名配置正确也无法访问，如何解决？","这是一个已知的中间件 Bug，会导致跳过 `\u002Fapi` 路径的检查。解决方法是清除浏览器的站点 Cookie，这通常能解决前端的 React 压缩错误。此外，建议升级到包含修复的最新版本（如 `no-cors` 分支或 v2.2.5+ 版本），维护者已修复了该中间件逻辑。","https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F89",{"id":147,"question_zh":148,"answer_zh":149,"source_url":150},37160,"前端无法加载登录\u002F注册页面，或者点击注册时报 \"Registration failed\" 错误，日志显示后端正常启动，该如何排查？","首先确认后端服务是否正常响应。如果是本地测试且不需要认证，可以在配置中禁用认证功能。对于 Cursor 等客户端，最小化配置如下：\n```json\n{\n  \"mcpServers\": {\n    \"MetaMCP\": {\n      \"url\": \"http:\u002F\u002Flocalhost:12008\u002Fmetamcp\u002F\u003Cyour_endpoint_name>\u002Fsse\"\n    }\n  }\n}\n```\n如果必须使用认证，请确保使用了包含认证修复的版本（参考 PR #82）。","https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F75",{"id":152,"question_zh":153,"answer_zh":154,"source_url":155},37161,"MetaMCP 是否支持 OAuth 认证（例如用于连接 claude.ai）？","是的，MetaMCP 已支持 OAuth。维护者在 v2.4.5 版本及相关测试标签（如 `v2.4.4-test`）中推送了修复。请注意，早期版本可能存在 Token 刷新失效的 Bug，建议使用最新发布的稳定版或测试版镜像进行测试。如果遇到 Token 过期问题，请更新至包含刷新逻辑修复的版本。","https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F102",{"id":157,"question_zh":158,"answer_zh":159,"source_url":160},37162,"MetaMCP 是否提供兼容 OpenAPI 标准的接口（如 openapi.json）？","是的，MetaMCP 已经集成了 OpenAPI 兼容的端点。该功能已通过 PR #82 合并并发布。你现在可以通过访问相应的 `\u002Fopenapi.json` 路径来获取标准定义的文档，以便与支持 OpenAPI 标准的客户端（如 Open WebUI）进行集成。","https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F72",{"id":162,"question_zh":163,"answer_zh":164,"source_url":165},37163,"创建账户成功后登录失败，日志显示 \"req.headers.host localhost\" 导致认证中间件报错，如何解决？","这个问题通常是因为浏览器访问的地址与服务器配置的 Host 不匹配。请检查你是否直接使用 `http:\u002F\u002Flocalhost:12008` 访问浏览器，而实际部署环境可能需要特定的域名或 IP。确保 `.env` 文件中的 `APP_URL` 或相关主机配置与你浏览器访问的地址一致。如果是在 Docker 中运行，请确认端口映射和网络模式配置正确。","https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F67",[167,172,177,182,187,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262],{"id":168,"version":169,"summary_zh":170,"released_at":171},297678,"v2.4.22","#214 #216 #218 #219 #222 #223\n\n```\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.4.22\n```","2025-12-19T07:27:06",{"id":173,"version":174,"summary_zh":175,"released_at":176},297679,"v2.4.21","通过将 Next.js 和 better-auth 升级到最新版本，修复了关键的上游依赖问题。\n\n```\r\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.4.21\r\n```","2025-12-07T04:34:26",{"id":178,"version":179,"summary_zh":180,"released_at":181},297680,"v2.4.17","- https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F185 感谢 @Stavitsky  \n- https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F194 感谢 @icholy  \n\n``` \ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.4.17\n```","2025-11-04T08:54:20",{"id":183,"version":184,"summary_zh":185,"released_at":186},297681,"v2.4.15","工具覆盖第1部分和会话生命周期自动清理\n\n```\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.4.15\n```","2025-09-23T14:05:32",{"id":188,"version":189,"summary_zh":190,"released_at":191},297682,"v2.4.14","修复项\n\n- https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F153\n- https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F152\n- https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F140\n- https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F139\n- https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F130\n- https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F150\n\n特别感谢 @Stavitsky 的贡献以及大量的测试和评论。\n\n```bash\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.4.14\n```","2025-09-07T07:50:17",{"id":193,"version":194,"summary_zh":195,"released_at":196},297683,"v2.4.13","https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F145\nhttps:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F146\n\n添加环境变量插值功能，以提高环境变量注入的安全性。\n\n同时升级 Next.js 和 Prism.js 的版本，以获取安全更新。\n\n```bash\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.4.13\n```","2025-09-01T08:00:16",{"id":198,"version":199,"summary_zh":200,"released_at":201},297684,"v2.4.12","- 深色模式 https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F143\n\n```bash\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.4.12\n```","2025-08-28T16:08:15",{"id":203,"version":204,"summary_zh":205,"released_at":206},297685,"v2.4.10","修复 2.4.8 中的 bug\n- 一个 bug：首先会列出没有问题的工具，但随后的工具都会为空。\n- 当未调用任何工具列表时，仍允许工具调用路由到子 MCP。\n- UX 修复：https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F137、https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F138\n\n```bash\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.4.10\n```","2025-08-24T15:32:23",{"id":208,"version":209,"summary_zh":210,"released_at":211},297686,"v2.4.8","PR：https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F133\n\n- 添加了 ProcessManagedStdioTransport，用于替换官方 MCP SDK 的 stdio 传输，以确保子进程的清理并修复内存泄漏。\n  - 相关议题：https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F128、https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F123\n- 改进了会话管理和清理机制。\n  - 相关议题：https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F123\n- 添加了 Docker 开发环境。\n- 避免同一 MetaMCP 的递归调用，从而防止会话无限生成。\n  - 相关议题：https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F123\n\n感谢 @ciejer、@healdgar、@alex-castle 和 @torarnv 提供的反馈、建议和讨论。\n\n```bash\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.4.8\n```","2025-08-19T17:21:48",{"id":213,"version":214,"summary_zh":215,"released_at":216},297687,"v2.4.6","- 超时，请参阅此问题以了解背景信息，感谢各位提出的修复代码：https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F124\n- 在端点 URL 旁边添加了复制按钮。\n\n```bash\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.4.6\n```","2025-08-13T14:34:54",{"id":218,"version":219,"summary_zh":220,"released_at":221},297688,"v2.4.5","MetaMCP can add OAuth MCP servers, and MetaMCP endpoint can use OAuth instead of API key (or both).\r\n\r\nBut with this part 1 version, OAuth MCP servers added in MetaMCP only cache the oauth session, and it only refreshes when you access it in the frontend of MetaMCP. And plan for part 2 is to let MetaMCP endpoint's OAuth detect expired frontend OAuth sessions and refresh them or redirect to their page to re-OAuth.\r\n\r\n- PR https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F122\r\n- Related issues https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F102 and https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F70\r\n\r\nCredits to users for the discussions, testing, and debugging.","2025-08-04T12:31:51",{"id":223,"version":224,"summary_zh":225,"released_at":226},297689,"v2.3.8","- Mitigate https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F113\r\n- Fixed https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F114\r\n- Increased json payload size for cases like 84 tools in https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F117\r\n- Fixed https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F119","2025-07-29T04:59:10",{"id":228,"version":229,"summary_zh":230,"released_at":231},297690,"v2.3.5","- OpenAPI endpoints should also use middleware (to filter out inactive tools)\r\n- OpenAPI endpoints have no concepts of session and progressive MCP server with internal states. So optimize the performance of it by having one fixed session for each OpenAPI endpoint without initiating new ones to significantly boost performance.\r\n- Add Open WebUI docs","2025-07-21T14:08:32",{"id":233,"version":234,"summary_zh":235,"released_at":236},297691,"v2.3.3","- Fix bugs and optimize inspector\r\n- Let namespace save tools and auto load in first page load\r\n\r\n```\r\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.3.3\r\n```","2025-07-16T09:12:52",{"id":238,"version":239,"summary_zh":240,"released_at":241},297692,"v2.3.2","- i18n support: happy to take contributions on other languages\r\n- Minor bug fixes\r\n\r\n```bash\r\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.3.2\r\n```","2025-07-14T04:01:21",{"id":243,"version":244,"summary_zh":245,"released_at":246},297693,"v2.2.1","https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F82\r\n- For better auth taking suggestions from https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F75\r\n- Main feature: 1) in https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F70 (User specific servers, allow private and public scoping of MCP servers till endpoints, public API keys cannot access private MCPs)\r\n- Temporarily mitigated https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fissues\u002F79\r\n- Fixed bugs in export\u002Fimport JSON\r\n- Spawn and invalidate sessions asyncly\r\n\r\nFollowing PRs will also bundled in 2.2\r\n\r\n- https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F77 by @tsachis \r\n- https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F80 by @divemasterza (merged by @zhjch05 )\r\n\r\n```\r\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.2.1\r\n```","2025-07-10T08:06:53",{"id":248,"version":249,"summary_zh":250,"released_at":251},297694,"v2.1.1","https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F74\r\n\r\n- Live Logs which pipes stdio server's stderr and can help figure out sub MCPs logging and bugs.\r\n- Reserve 1 idle session per MCP and MetaMCP. This will reduce cold start problem with stdio servers.\r\n- Added support for OpenAPI hosting in addition to SSE and SHTTP, this will seamlessly work with clients like Open WebUI.\r\n\r\n```bash\r\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.1.1\r\n```","2025-07-05T06:20:12",{"id":253,"version":254,"summary_zh":255,"released_at":256},297695,"v2.0.6","https:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpull\u002F71\r\n\r\nhttps:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpkgs\u002Fcontainer\u002Fmetamcp\u002F449118719?tag=2.0.6\r\n\r\n```bash\r\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.0.6\r\n```","2025-06-28T08:56:47",{"id":258,"version":259,"summary_zh":260,"released_at":261},297696,"v2.0.5","Overview\r\n- Remote only and all-in-one, no local proxy needed (but you can choose to run without docker in your local machine, or use a stdio proxy with it)\r\n- No project\u002Fworkspace layer concepts, You can create MCP servers, group them together into namespaces, and assign endpoints to them.\r\n- Complete auth.\r\n- In house inspector to check whether MetaMCP is working or not.\r\n\r\nCheck main branch README for more details \r\n\r\nhttps:\u002F\u002Fgithub.com\u002Fmetatool-ai\u002Fmetamcp\u002Fpkgs\u002Fcontainer\u002Fmetamcp\u002F447514139?tag=2.0.5\r\n\r\n```bash\r\ndocker pull ghcr.io\u002Fmetatool-ai\u002Fmetamcp:2.0.5\r\n```","2025-06-26T12:33:26",{"id":263,"version":264,"summary_zh":265,"released_at":266},297697,"v0.6.0","As title\r\n\r\n\u003Cimg width=\"417\" alt=\"Screenshot 2025-05-21 at 9 22 00 PM\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F598c18c5-2f85-4c89-b253-b086bd2d8d0f\" \u002F>\r\n","2025-05-21T13:21:37"]