[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-mcpjungle--MCPJungle":3,"tool-mcpjungle--MCPJungle":62},[4,18,26,36,46,54],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",158594,2,"2026-04-16T23:34:05",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":42,"last_commit_at":43,"category_tags":44,"status":17},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,45],"插件",{"id":47,"name":48,"github_repo":49,"description_zh":50,"stars":51,"difficulty_score":32,"last_commit_at":52,"category_tags":53,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":55,"name":56,"github_repo":57,"description_zh":58,"stars":59,"difficulty_score":32,"last_commit_at":60,"category_tags":61,"status":17},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,"2026-04-10T01:20:03",[45,13,15,14],{"id":63,"github_repo":64,"name":65,"description_en":66,"description_zh":67,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":65,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":77,"owner_twitter":76,"owner_website":76,"owner_url":78,"languages":79,"stars":91,"forks":92,"last_commit_at":93,"license":94,"difficulty_score":10,"env_os":95,"env_gpu":96,"env_ram":96,"env_deps":97,"category_tags":105,"github_topics":106,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":116,"updated_at":117,"faqs":118,"releases":148},8266,"mcpjungle\u002FMCPJungle","MCPJungle","Self-hosted MCP Gateway for AI agents","MCPJungle 是一款开源的自托管 MCP（模型上下文协议）网关，旨在为私有 AI 智能体提供统一的工具接入中心。在 AI 开发中，开发者往往需要管理多个分散的 MCP 服务器，导致配置繁琐且难以统一管控。MCPJungle 通过充当“中间人”解决了这一痛点：开发者只需将各类 MCP 服务注册到该平台，AI 客户端（如 Claude、Cursor 或 Copilot）便仅需连接这一个网关，即可自动发现并调用所有已注册的工具。\n\n这款工具特别适合需要构建生产级 AI 应用的开发者、希望集中管理内部工具的企业团队，以及追求数据隐私与安全、倾向于在本地数据中心部署服务的组织。其核心技术亮点在于提供了内置的访问控制、安全隔离机制以及完整的可观测性支持（如 OpenTelemetry），有效解决了多服务集成时的冷启动与状态管理难题。通过 Docker 即可快速部署，配合命令行工具轻松完成服务的注册与管理，让 AI 智能体能够更安全、高效地扩展能力边界，无需再为复杂的连接配置而烦恼。","\u003Ch1 align=\"center\">\n  :deciduous_tree: MCPJungle :deciduous_tree:\n\u003C\u002Fh1>\n\u003Cp align=\"center\">\n  Self-hosted MCP Gateway for your private AI agents\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FCapV4Z3krk\" style=\"text-decoration: none;\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-MCPJungle-5865F2?style=flat-square&logo=discord&logoColor=white\" alt=\"Discord\" style=\"max-width: 100%;\">\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\nMCPJungle is an open source, self-hosted Gateway for all your [Model Context Protocol](https:\u002F\u002Fmodelcontextprotocol.io\u002Fintroduction) Servers.\n\n🧑‍💻 Developers use it to register & manage MCP servers and the tools they provide from a central place.\n\n🤖 MCP Clients use it to discover and consume all these tools from a single \"Gateway\" MCP Server.\n\n![diagram](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmcpjungle_MCPJungle_readme_a96415840eb7.png)\n\n\u003Cp align=\"center\">MCPJungle is the only MCP Server your AI agents need to connect to!\u003C\u002Fp>\n\n# Who should use MCPJungle?\n1. **Developers** using MCP Clients like Claude & Cursor that need to access MCP servers for tool-calling\n2. **Developers** building production-grade AI Agents that need to access MCP servers with built-in security, privacy and Access Control.\n3. **Organisations** wanting to view & manage all MCP client-server interactions from a central place. Hosted in their own datacenter 🔒\n\n# 📋 Table of Contents\n\n- [Quick Start guide](#quickstart-guide)\n- [Installation](#installation)\n- [Usage](#usage)\n  - [Server](#server)\n    - [Running mcpjungle server inside Docker](#running-inside-docker)\n    - [Running mcpjungle server directly on the host machine](#running-directly-on-host)\n    - [Shutting down the server](#shutting-down)\n  - [Client](#client)\n    - [Adding Streamable HTTP-based MCP servers](#registering-streamable-http-based-servers)\n    - [Adding STDIO-based MCP servers](#registering-stdio-based-servers)\n    - [Removing MCP servers](#deregistering-mcp-servers)\n    - [Custom URL for server](#configuring-a-custom-registry-url)\n  - [Cold-start problem & Stateful Connections](#cold-start-problem--stateful-connections)\n  - [Connect to mcpjungle from Claude](#claude)\n  - [Connect to mcpjungle from Cursor](#cursor)\n  - [Connect to mcpjungle from Copilot](#copilot)\n  - [Enabling\u002FDisabling Tools globally](#enablingdisabling-tools)\n  - [Prompts](#prompts)\n  - [Tool Groups](#tool-groups)\n  - [Authentication](#authentication)\n  - [Enterprise features](#enterprise-features-)\n    - [Access Control](#access-control)\n    - [OpenTelemetry](#opentelemetry)\n- [Limitations](#current-limitations-)\n- [Contributing](#contributing-)\n\n# Quickstart guide\nThis quickstart guide will show you how to:\n1. Start the MCPJungle server locally using `docker compose`\n2. Register a simple MCP server in mcpjungle\n3. Connect your Claude to mcpjungle to access your MCP tools\n\n## Start the server\n```bash\ncurl -O https:\u002F\u002Fraw.githubusercontent.com\u002Fmcpjungle\u002FMCPJungle\u002Frefs\u002Fheads\u002Fmain\u002Fdocker-compose.yaml\ndocker compose up -d\n```\n\n## Register MCP servers\nDownload the `mcpjungle` CLI on your local machine either using brew or directly from the [Releases Page](https:\u002F\u002Fgithub.com\u002Fmcpjungle\u002FMCPJungle\u002Freleases).\n```bash\nbrew install mcpjungle\u002Fmcpjungle\u002Fmcpjungle\n```\n\nThe CLI lets you manage everything in mcpjungle.\n\nNext, lets add an MCP server to mcpjungle using the CLI. For this example, we'll use [context7](https:\u002F\u002Fcontext7.com\u002F).\n```bash\nmcpjungle register --name context7 --url https:\u002F\u002Fmcp.context7.com\u002Fmcp\n```\n\n## Connect to mcpjungle\n\nUse the following configuration for your Claude MCP servers config:\n```json\n{\n  \"mcpServers\": {\n    \"mcpjungle\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"http:\u002F\u002Flocalhost:8080\u002Fmcp\",\n        \"--allow-http\"\n      ]\n    }\n  }\n}\n```\n\nOnce mcpjungle is added as an MCP to your Claude, try asking it the following:\n```text\nUse context7 to get the documentation for `\u002Flodash\u002Flodash`\n```\n\nClaude will then attempt to call the `context7__get-library-docs` tool via MCPJungle, which will return the documentation for the Lodash library.\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmcpjungle_MCPJungle_readme_4019b5e7aa78.png\" alt=\"claude calls context7 tool via mcpjungle\" height=\"400\">\n\u003C\u002Fp>\n\nCongratulations! 🎉\n\nYou have successfully registered a remote MCP server in MCPJungle and called one of its tools via Claude\n\nYou can now proceed to play around with the mcpjungle and explore the documentation & CLI for more details.\n\n# Installation\nMCPJungle is shipped as a stand-alone binary.\n\nYou can either download it from the [Releases](https:\u002F\u002Fgithub.com\u002Fmcpjungle\u002FMCPJungle\u002Freleases) Page or use [Homebrew](https:\u002F\u002Fbrew.sh\u002F) to install it:\n\n```bash\nbrew install mcpjungle\u002Fmcpjungle\u002Fmcpjungle\n```\n\nVerify your installation by running\n\n```bash\nmcpjungle version\n```\n\n> [!IMPORTANT]\n> On MacOS, you will have to use homebrew because the compiled binary is not [Notarized](https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fsecurity\u002Fnotarizing-macos-software-before-distribution) yet.\n\nMCPJungle provides a Docker image which is useful for running the registry server (more about it later).\n\n```bash\ndocker pull ghcr.io\u002Fmcpjungle\u002Fmcpjungle\n```\n\n# Usage\nMCPJungle has a Client-Server architecture and the binary lets you run both the Server and the Client.\n\n## Server\nThe MCPJungle server is responsible for managing all the MCP servers registered in it and providing a unified MCP gateway for AI Agents to discover and call tools provided by these registered servers.\n\nThe gateway itself runs over streamable http transport and is accessible at the `\u002Fmcp` endpoint.\n\n### Running inside Docker\nFor running the MCPJungle server locally, docker compose is the recommended way:\n```shell\n# docker-compose.yaml is optimized for individuals running mcpjungle on their local machines for personal use.\n# mcpjungle will run in `development` mode by default.\ncurl -O https:\u002F\u002Fraw.githubusercontent.com\u002Fmcpjungle\u002FMCPJungle\u002Frefs\u002Fheads\u002Fmain\u002Fdocker-compose.yaml\n\ndocker compose up -d\n\n# docker-compose.prod.yaml is optimized for orgs deploying mcpjungle on a remote server for multiple users.\n# mcpjungle will run in `enterprise` mode by default, which enables enterprise features.\ncurl -O https:\u002F\u002Fraw.githubusercontent.com\u002Fmcpjungle\u002FMCPJungle\u002Frefs\u002Fheads\u002Fmain\u002Fdocker-compose.prod.yaml\n\ndocker compose -f docker-compose.prod.yaml up -d\n```\n\n> [!NOTE]\n> The `enterprise` mode used to be called `production` mode.\n> The mode has now been renamed for clarity. Everything else remains the same.\n\nThis will start the MCPJungle server along with a persistent Postgres database container.\n\nYou can quickly verify that the server is running:\n```bash\ncurl http:\u002F\u002Flocalhost:8080\u002Fhealth\n```\n\nIf you plan on registering stdio-based MCP servers that rely on `npx` or `uvx`, use mcpjungle's `stdio` tagged docker image instead.\n```bash\nMCPJUNGLE_IMAGE_TAG=latest-stdio docker compose up -d\n```\n\n> [!NOTE]\n> If you're using `docker-compose.yaml`, this is already the default image tag.\n> You only need to specify the stdio image tag if you're using `docker-compose.prod.yaml`.\n\nThis image is significantly larger. But it is very convenient and recommended for running locally when you rely on stdio-based MCP servers.\n\nFor example, if you only want to register remote mcp servers like context7 and deepwiki, you can use the standard (minimal) image.\n\nBut if you also want to use stdio-based servers like `filesystem`, `time`, `github`, etc., you should use the `stdio`-tagged image instead.\n\n> [!NOTE]\n> If your stdio servers rely on tools other than `npx` or `uvx`, you will have to create a custom docker image that includes those dependencies along with the mcpjungle binary.\n\n**Production Deployment**\n\nThe default [MCPJungle Docker image](https:\u002F\u002Fghcr.io\u002Fmcpjungle\u002Fmcpjungle) is very lightweight - it only contains a minimal base image and the `mcpjungle` binary.\n\nIt is therefore suitable and recommended for production deployments.\n\nFor the database, we recommend you deploy a separate Postgres DB cluster and supply its endpoint to mcpjungle (see [Database](#database) section below).\n\nYou can see the definitions of the [standard Docker image](.\u002FDockerfile) and the [stdio Docker image](.\u002Fstdio.Dockerfile).\n\n### Running directly on host\nYou can also run the server directly on your host machine using the binary:\n\n```bash\nmcpjungle start\n```\n\nThis starts the main registry server and MCP gateway, accessible on port `8080` by default.\n\n### Shutting down\nIt is important that the mcpjungle server shuts down gracefully to ensure proper cleanup.\n\nThe recommended way to stop the server process is to send a `SIGTERM` signal to it.\n\n\n\n### Database\nThe mcpjungle server relies on a database and by default, creates a SQLite DB file `mcpjungle.db` in the current working directory.\n\nThis is okay when you're just testing things out locally.\n\nFor more serious deployments, mcpjungle also supports Postgresql. You can supply the DSN to connect to it:\n\n```bash\n# You can supply the database DSN as an env var\nexport DATABASE_URL=postgres:\u002F\u002Fadmin:root@localhost:5432\u002Fmcpjungle_db\n\n#run as container\ndocker run ghcr.io\u002Fmcpjungle\u002Fmcpjungle:latest\n\n# or run directly\nmcpjungle start\n```\n\nYou can also supply postgres-specific env vars or files if you don't prefer using the DSN:\n```bash\n# host is mandatory if you're using postgres-specific env vars\nexport POSTGRES_HOST=localhost\nexport POSTGRES_PORT=5432\n\nexport POSTGRES_USER=admin\nexport POSTGRES_USER_FILE=\u002Fpath\u002Fto\u002Fuser-file\n\nexport POSTGRES_PASSWORD=secret\nexport POSTGRES_PASSWORD_FILE=\u002Fpath\u002Fto\u002Fpassword-file\n\nexport POSTGRES_DB=mcpjungle_db\nexport POSTGRES_DB_FILE=\u002Fpath\u002Fto\u002Fdb-file\n\nmcpjungle start\n```\n\n## Client\nOnce the server is up, you can use the mcpjungle CLI to interact with it.\n\nMCPJungle currently supports MCP servers using [stdio](https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-03-26\u002Fbasic\u002Ftransports#stdio) and [Streamable HTTP](https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-03-26\u002Fbasic\u002Ftransports#streamable-http) Transports.\n\n> [!NOTE]\n> Support for SSE (server-sent events) also exists but is currently not mature.\n\nLet's see how to register them in mcpjungle.\n\n### Registering streamable HTTP-based servers\nLet's say you're already running a streamable http MCP server locally at `http:\u002F\u002F127.0.0.1:8000\u002Fmcp` which provides basic math tools like `add`, `subtract`, etc.\n\nYou can register this MCP server with MCPJungle:\n```bash\nmcpjungle register --name calculator --description \"Provides some basic math tools\" --url http:\u002F\u002F127.0.0.1:8000\u002Fmcp\n```\n\nIf you used docker compose to run the server, and you're not on Linux, you will have to use `host.docker.internal` instead of your local loopback address.\n```bash\nmcpjungle register --name calculator --description \"Provides some basic math tools\" --url http:\u002F\u002Fhost.docker.internal:8000\u002Fmcp\n```\n\nThe registry will now start tracking this MCP server and load its tools.\n\n![register a MCP server in MCPJungle](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmcpjungle_MCPJungle_readme_bda610db7fd0.png)\n\nYou can also provide a configuration file to register the MCP server:\n```bash\ncat .\u002Fcalculator.json\n{\n  \"name\": \"calculator\",\n  \"transport\": \"streamable_http\",\n  \"description\": \"Provides some basic math tools\",\n  \"url\": \"http:\u002F\u002F127.0.0.1:8000\u002Fmcp\"\n}\n\nmcpjungle register -c .\u002Fcalculator.json\n```\n\nAll tools provided by this server are now accessible via MCPJungle:\n\n```bash\nmcpjungle list tools\n\n# Check tool usage\nmcpjungle usage calculator__multiply\n\n# Call a tool\nmcpjungle invoke calculator__multiply --input '{\"a\": 100, \"b\": 50}'\n```\n\n![Call a tool via MCPJungle Proxy MCP server](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmcpjungle_MCPJungle_readme_2835beb8e35e.png)\n\n> [!NOTE]\n> A tool in MCPJungle must be referred to by its canonical name which follows the pattern `\u003Cmcp-server-name>__\u003Ctool-name>`.\n> Server name and tool name are separated by a double underscore `__`.\n>\n> eg- If you register a MCP server `github` which provides a tool called `git_commit`, you can invoke it in MCPJungle using the name `github__git_commit`.\n> \n> Your MCP client must also use this canonical name to call the tool via MCPJungle.\n\nThe config file format for registering a Streamable HTTP-based MCP server is:\n```json\n{\n  \"name\": \"\u003Cname of your mcp server>\",\n  \"transport\": \"streamable_http\",\n  \"description\": \"\u003Cdescription>\",\n  \"url\": \"\u003Curl of the mcp server>\",\n  \"bearer_token\": \"\u003Coptional bearer token for authentication>\",\n  \"headers\": {\n    \"\u003Ccustom http header>\": \"\u003Cvalue>\"\n  }\n}\n```\n\n### Registering STDIO-based servers\n\nHere's an example configuration file (let's call it `filesystem.json`) for a MCP server that uses the STDIO transport:\n\n```json\n{\n  \"name\": \"filesystem\",\n  \"transport\": \"stdio\",\n  \"description\": \"filesystem mcp server\",\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \".\"]\n}\n```\n\nYou can register this MCP server in MCPJungle by providing the configuration file:\n```bash\n# Save the JSON configuration to a file (e.g., filesystem.json)\nmcpjungle register -c .\u002Ffilesystem.json\n```\n\nThe config file format for registering a STDIO-based MCP server is:\n\n```json\n{\n  \"name\": \"\u003Cname of your mcp server>\",\n  \"transport\": \"stdio\",\n  \"description\": \"\u003Cdescription>\",\n  \"command\": \"\u003Ccommand to run the mcp server, eg- 'npx', 'uvx'>\",\n  \"args\": [\"arguments\", \"to\", \"pass\", \"to\", \"the\", \"command\"],\n  \"env\": {\n    \"KEY\": \"value\"\n  }\n}\n```\n\nYou can also watch a quick video on [How to register a STDIO-based MCP server](https:\u002F\u002Fyoutu.be\u002FYqHiuexR5fw).\n\n> [!TIP]\n> If your STDIO server fails or throws errors for some reason, check the mcpjungle server's logs to view its `stderr` output.\n\n#### Environment variables in JSON config files\n\nWhen you use a JSON config file to register a mcp server or create other entities like tol groups, the CLI can resolve environment variable placeholders in string values before sending the request to the server.\n\n- Only placeholders written as `${VAR_NAME}` are resolved.\n- Placeholders can appear anywhere inside a string value, for example `prefix-${VAR_NAME}-suffix`.\n- Resolution happens in the CLI process, so the environment variable must be available where you run the command.\n- If a referenced environment variable is not set, the command fails with an error.\n- This applies to string fields across the JSON config, including nested objects and string arrays.\n\nExample MCP server config:\n\n```json\n{\n  \"name\": \"affine-main\",\n  \"transport\": \"streamable_http\",\n  \"description\": \"AFFiNE workspace MCP server\",\n  \"url\": \"https:\u002F\u002Fapp.affine.pro\u002Fapi\u002Fworkspaces\u002F${AFFINE_WORKSPACE_ID}\u002Fmcp\",\n  \"bearer_token\": \"${AFFINE_API_TOKEN}\",\n  \"headers\": {\n    \"X-Workspace\": \"${AFFINE_WORKSPACE_ID}\"\n  }\n}\n```\n\nExample STDIO config:\n\n```json\n{\n  \"name\": \"my-stdio-server\",\n  \"transport\": \"stdio\",\n  \"command\": \"uvx\",\n  \"args\": [\"my-server\", \"--workspace\", \"${WORKSPACE_ID}\"],\n  \"env\": {\n    \"API_TOKEN\": \"${API_TOKEN}\"\n  }\n}\n```\n\n**Caveat** ⚠️\n\nWhen running mcpjungle inside Docker, you need some extra configuration to run the `filesystem` mcp server.\n\nBy default, mcpjungle inside container does not have access to your host filesystem.\n\nSo you must:\n- mount the host directory you want to access as a volume in the container\n- specify the mount path as the directory in the filesystem mcp server command args\n\nThe `docker-compose.yaml` provided by mcpjungle mounts the current working directory as `\u002Fhost` in the container.\n\nSo you can use the following configuration for the filesystem mcp server:\n\n```json\n{\n  \"name\": \"filesystem\",\n  \"transport\": \"stdio\",\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \"\u002Fhost\"]\n}\n```\n\nThen, the mcp has access to `\u002Fhost`, ie, the current working directory on your host machine.\n\nSee [DEVELOPMENT.md](.\u002FDEVELOPMENT.md#docker-filesystem-access) for more details.\n\n#### Running CLI commands from a Docker or Kubernetes deployment\nIf your MCPJungle server is running in a remote Docker container or Kubernetes cluster, you can also execute the `mcpjungle` binary directly inside the container:\n\n```bash\ndocker exec -it \u003Ccontainer_name> \u002Fmcpjungle\nkubectl -n \u003Cnamespace> exec -it po\u002F\u003Cpod_name> -- \u002Fmcpjungle\n```\n\n> [!NOTE]\n> The standard image does not include a shell. Run `\u002Fmcpjungle` directly via `docker exec` or `kubectl exec`.\n\nThis is useful for running CLI commands from the same environment where the server is running.\n\n### Deregistering MCP servers\nYou can remove a MCP server from mcpjungle.\n\n```bash\nmcpjungle deregister calculator\nmcpjungle deregister filesystem\n```\n\nOnce removed, this mcp server and its tools are no longer available to you or your MCP clients.\n\n### Configuring a custom registry URL\n\nBy default, the CLI connects to the mcpjungle server at `http:\u002F\u002F127.0.0.1:8000`.\n\nIf your server is running on a different host or port (e.g., a remote deployment), you can configure the registry URL in two ways:\n\n**Option 1: Use the `--registry` flag**\n```bash\nmcpjungle --registry http:\u002F\u002Fmy-server:9000 list tools\n```\n\n**Option 2: Set it in the config file**\n\nCreate or edit `~\u002F.mcpjungle.conf`:\n```yaml\nregistry_url: http:\u002F\u002Fmy-server:9000\n```\n\nThis avoids having to pass the `--registry` flag on every command.\n\n\n## Cold-start problem & Stateful Connections\nBy default, MCPJungle always creates a new connection with the upstream MCP server when a tool is called.\n\nWhen the tool call is complete, the connection is closed.\n\nThis keeps the system clean and avoids memory leaks.\n\nBut sometimes this can cause a latency overhead. For eg- a new process is spawned every time you call a tool of a STDIO-based mcp server. If the server takes several seconds to start up, this slows down the tool call and the overall interaction.\n\nTo solve this, MCPJungle also supports stateful connections.\n\nYou can set the `session_mode` to `stateful` (default is `stateless`) in you MCP server configuration:\n```json\n{\n  \"name\": \"filesystem\",\n  \"transport\": \"stdio\",\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \".\"],\n  \"session_mode\": \"stateful\"\n}\n```\n\nmcpjungle will create a new connection with this mcp server **the first time you call one of its tools**.\n\nThis connection is not closed when the tool call is complete. Subsequent tool calls to this server reuse the same connection, avoiding the cold-start overhead.\n\nThe connection is only closed when:\n1. mcpjungle server is stopped\n2. the mcp server is deregistered from mcpjungle\n3. the connection times out after a period of inactivity. You can set the number of seconds using the `SESSION_IDLE_TIMEOUT_SEC` env var to configure this globally in mcpjungle server (default value is -1, which means no timeout).\n\nWhen possible, it is recommended that you use stateless connections (default setting).\n\n## Integration with other MCP Clients\nAssuming that MCPJungle is running on `http:\u002F\u002Flocalhost:8080`, use the following configurations to connect to it:\n\n### Claude\n```json\n{\n  \"mcpServers\": {\n    \"mcpjungle\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"http:\u002F\u002Flocalhost:8080\u002Fmcp\",\n        \"--allow-http\"\n      ]\n    }\n  }\n}\n```\n\n### Cursor\n```json\n{\n  \"mcpServers\": {\n    \"mcpjungle\": {\n      \"url\": \"http:\u002F\u002Flocalhost:8080\u002Fmcp\"\n    }\n  }\n}\n```\n\nYou can watch a quick video on [How to connect Cursor to MCPJungle](https:\u002F\u002Fyoutu.be\u002FSaUqj-eLPnw).\n\n### Copilot\n\nFollow Copilot's doc on [configuraing a MCP server manually](https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fhow-tos\u002Fprovide-context\u002Fuse-mcp\u002Fextend-copilot-chat-with-mcp#configuring-mcp-servers-manually-1).\n\nYour mcp.json config file should look like this after adding mcpjungle to it:\n```json\n{\n  \"servers\": {\n    \"mcpjungle\": {\n      \"url\": \"http:\u002F\u002Flocalhost:8080\u002Fmcp\"\n    }\n  }\n}\n```\n\n> [!NOTE]\n> You may have to click on `Start` for Copilot to actually start interacting with mcpjungle.\n\n## Enabling\u002FDisabling Tools\nYou can disable and re-enable a specific tool or all the tools provided by an MCP Server.\n\nIf a tool is disabled, it is not available via the MCPJungle Proxy or any of the Tool Groups, so no MCP clients can view or call it.\n\nYou can disable and enable Prompts as well.\n\n```bash\n# disable the `get-library-docs` tool provided by the `context7` MCP server\nmcpjungle disable tool context7__get-library-docs\n\n# re-enable the tool\nmcpjungle enable tool context7__get-library-docs\n\n# disable all tools in context7\nmcpjungle disable tool context7\n\n# disable the whole `context7` MCP server (disables all tools & prompts)\nmcpjungle disable server context7\n\n# re-enable `context7`\nmcpjungle enable server context7\n\n# disable a prompt\nmcpjungle disable prompt \"huggingface_Model Details\"\n\n# disable all prompts in context7\nmcpjungle disable prompt context7\n```\n\nA disabled tool is still accessible via mcpjungle's HTTP API, so humans can still manage it from the CLI (or any other HTTP client).\n\n> [!NOTE]\n> When a new server is registered in MCPJungle, all its tools & prompts are **enabled** by default.\n\n## Prompts\nMcpjungle supports [Prompts](https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-06-18\u002Fserver\u002Fprompts).\n\nWhen you register a new MCP server, if it provides prompts, they're registered in mcpjungle too.\n\nHere are some examples of how you can interact with Prompts using the CLI:\n```bash\n# list all prompts provided by the huggingface mcp\n$ mcpjungle list prompts --server huggingface\n\n# Retrieve the \"Model Details\" prompt, supply custom arguments\n$ mcpjungle get prompt \"huggingface__Model Details\" --arg model_id=\"openai\u002Fgpt-oss-120b\"\n```\n\n## Tool Groups\nAs you add more MCP servers to MCPJungle, the number of tools available through the Gateway can grow significantly.\n\nIf your MCP client is exposed to hundreds of tools through the gateway MCP, its performance may degrade.\n\nMCPJungle allows you to **expose only a subset of all available tools to your MCP clients using Tool Groups**.\n\nYou can create a new group and only include specific tools that you wish to expose.\n\nOnce a group is created, mcpjungle returns a unique endpoint for it.\n\nYou can then configure your MCP client to use this group-specific endpoint instead of the main gateway endpoint.\n\n### Creating a Tool Group\nYou can create a new tool group by providing a JSON configuration file to the `create group` command.\n\nYou must specify a unique `name` for the group and define which tools to include using one or more of the following fields:\n- **`included_tools`**: List specific tool names to include (e.g., `[\"filesystem__read_file\", \"time__get_current_time\"]`)\n- **`included_servers`**: Include ALL tools from specific MCP servers (e.g., `[\"time\", \"deepwiki\"]`)\n- **`excluded_tools`**: Exclude specific tools (useful when including entire servers)\n\n#### Example 1: Cherry-picking specific tools\nHere is an example of a tool group configuration file (`claude-tools-group.json`):\n```json\n{\n  \"name\": \"claude-tools\",\n  \"description\": \"This group only contains tools for Claude Desktop to use\",\n  \"included_tools\": [\n    \"filesystem__read_file\",\n    \"deepwiki__read_wiki_contents\",\n    \"time__get_current_time\"\n  ]\n}\n```\n\nThis group exposes only 3 handpicked tools instead of all available tools.\n\n#### Example 2: Including entire servers with exclusions\nYou can also include all tools from specific servers and optionally exclude some:\n```json\n{\n  \"name\": \"claude-tools\",\n  \"description\": \"All tools from time and deepwiki servers except time__convert_time\",\n  \"included_servers\": [\"time\", \"deepwiki\"],\n  \"excluded_tools\": [\"time__convert_time\"]\n}\n```\n\nThis includes ALL tools from the `time` and `deepwiki` servers except `time__convert_time`.\n\n#### Example 3: Mixing approaches\nYou can combine all three fields for maximum flexibility:\n```json\n{\n  \"name\": \"comprehensive-tools\",\n  \"description\": \"Mix of manual tools, server inclusion, and exclusions\",\n  \"included_tools\": [\"filesystem__read_file\"],\n  \"included_servers\": [\"time\"],\n  \"excluded_tools\": [\"time__convert_time\"]\n}\n```\n\nThis includes `filesystem__read_file` plus all tools from the `time` server except `time__convert_time`.\n\nYou can create this group in mcpjungle:\n```bash\n$ mcpjungle create group -c .\u002Fclaude-tools-group.json\n\nTool Group claude-tools created successfully\nIt is now accessible at the following streamable http endpoint:\n\n    http:\u002F\u002F127.0.0.1:8080\u002Fv0\u002Fgroups\u002Fclaude-tools\u002Fmcp\n\n```\n\nYou can then configure Claude (or any other MCP client) to use this group-specific endpoint to access the MCP server.\n\nThe client will then ONLY see and be able to use these 3 tools and will not be aware of any other tools registered in MCPJungle.\n\n> [!TIP]\n> You can run `mcpjungle list tools` to view all available tools and pick the ones you want to include in your group.\n\nYou can also watch a [Video on using Tool Groups](https:\u002F\u002Fyoutu.be\u002FA21rfGgo38A).\n\n> [!NOTE]\n> The exclusion is always applied at the end.\n> So if you add a tool to `included_tools` and also list it in `excluded_tools`, it will be excluded from the final group.\n\n#### Limitation 🚧\n[Prompts](https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-06-18\u002Fserver\u002Fprompts) are currently not supported in Tool Groups. We're working to fix this [issue](https:\u002F\u002Fgithub.com\u002Fmcpjungle\u002FMCPJungle\u002Fissues\u002F136) 🛠️\n\n### Managing tool groups\nYou can currently perform operations like listing all groups, viewing details of a specific group and deleting a group.\n\n```bash\n# list all tool groups\nmcpjungle list groups\n\n# view details of a specific group\nmcpjungle get group claude-tools\n\n# delete a group\nmcpjungle delete group claude-tools\n```\n\n### Working with tools in groups\nYou can list and invoke tools within specific groups using the `--group` flag:\n\n```bash\n# list tools in a specific group\nmcpjungle list tools --group claude-tools\n\n# invoke a tool from a specific group context\nmcpjungle invoke filesystem__read_file --group claude-tools --input '{\"path\": \"README.md\"}'\n```\n\nThese commands provide group-scoped operations, making it easier to work with tools within specific contexts and validate that tools are available in your groups.\n\n> [!NOTE]\n> If a tool is included in a group but is later disabled globally or deleted, then it will not be available via the group's MCP endpoint.\n>\n> But if the tool is re-enabled or added again later, it will automatically become available in the group again.\n\n**Limitations** 🚧\n1. Currently, you cannot update an existing tool group. You must delete the group and create a new one with the modified configuration file.\n2. In `enterprise` mode, currently only an admin can create a Tool Group. We're working on allowing standard Users to create their own groups as well.\n\n## Authentication\nMCPJungle currently supports authentication if your Streamable HTTP MCP Server accepts static tokens for auth.\n\nThis is useful when using SaaS-provided MCP Servers like HuggingFace, Stripe, etc. which require your API token for authentication.\n\nYou can supply your token while registering the MCP server:\n```bash\n# If you specify the `--bearer-token` flag, MCPJungle will add the `Authorization: Bearer \u003Ctoken>` header to all requests made to this MCP server.\nmcpjungle register --name huggingface --description \"HuggingFace MCP Server\" --url https:\u002F\u002Fhuggingface.co\u002Fmcp --bearer-token \u003Cyour-hf-api-token>\n```\n\nOr from your configuration file\n```bash\n{\n  \"name\": \"huggingface\",\n  \"transport\": \"streamable_http\",\n  \"url\": \"https:\u002F\u002Fhuggingface.co\u002Fmcp\",\n  \"description\": \"hugging face mcp server\",\n  \"bearer_token\": \"\u003Cyour-hf-api-token>\"\n}\n```\n\nIf you need to supply a custom value for the `Authorization` header or add additional custom headers, you can use the `headers` field in the config file:\n```json\n{\n  \"name\": \"sourcegraph\",\n  \"transport\": \"streamable_http\",\n  \"url\": \"https:\u002F\u002Fsourcegraph.mycompany.com\u002F.api\u002Fmcp\",\n  \"headers\": {\n    \"Authorization\": \"token \u003Cyour-sourcegraph-token>\",\n    \"Custom-Header\": \"custom-value\"\n  }\n}\n```\n\nSupport for Oauth flow is coming soon!\n\n## Enterprise Features 🔒\n\nIf you're running MCPJungle in your organisation, we recommend running the Server in the `enterprise` mode:\n```bash\n# enable enterprise features by running in enterprise mode\nmcpjungle start --enterprise\n\n# you can also specify the server mode as environment variable (valid values are `development` and `enterprise`)\nexport SERVER_MODE=enterprise\nmcpjungle start\n\n# Or use the enterprise-mode docker compose file as described above\ndocker compose -f docker-compose.prod.yaml up -d\n```\n\nBy default, mcpjungle server runs in `development` mode which is ideal for individuals running it locally.\n\nIn Enterprise mode, the server enforces stricter security policies and will provide additional features like Authentication, ACLs, observability and more.\n\nAfter starting the server in enterprise mode, you must initialize it by running the following command on your client machine:\n```bash\nmcpjungle init-server\n```\n\nThis will create an admin user in the server and store its API access token in your home directory (`~\u002F.mcpjungle.conf`).\n\nYou can then use the mcpjungle cli to make authenticated requests to the server.\n\n### Access Control\n\nIn `development` mode, all MCP clients have full access to all the MCP servers registered in MCPJungle Proxy.\n\n`enterprise` mode lets you control which MCP clients can access which MCP servers.\n\nSuppose you have registered 2 MCP servers `calculator` and `github` in MCPJungle in enterprise mode.\n\nBy default, no MCP client can access these servers. **You must create an MCP Client in mcpjungle and explicitly allow it to access the MCP servers.**\n\n```bash\n# Create a new MCP client for your Cursor IDE to use. It can access the calculator and github MCP servers\nmcpjungle create mcp-client cursor-local --allow \"calculator, github\"\n\nMCP client 'cursor-local' created successfully!\nServers accessible: calculator,github\n\nAccess token: 1YHf2LwE1LXtp5lW_vM-gmdYHlPHdqwnILitBhXE4Aw\nSend this token in the `Authorization: Bearer {token}` HTTP header.\n```\n\nMcpjungle creates an access token for your client.\nConfigure your client or agent to send this token in the `Authorization` header when making requests to the mcpjungle proxy.\n\n> [!TIP]\n> You can also supply a custom access token for your mcp clients and user accounts using the `--access-token` flag.\n> This is useful when you want to manage tokens yourself, perhaps through a central identity server.\n\nFor example, you can add the following configuration in Cursor to connect to MCPJungle:\n\n```json\n{\n  \"mcpServers\": {\n    \"mcpjungle\": {\n      \"url\": \"http:\u002F\u002Flocalhost:8080\u002Fmcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer 1YHf2LwE1LXtp5lW_vM-gmdYHlPHdqwnILitBhXE4Aw\"\n      }\n    }\n  }\n}\n```\n\nA client that has access to a particular server this way can view and call all the tools provided by that server.\n\n> [!NOTE]\n> If you don't specify the `--allow` flag, the MCP client will not be able to access any MCP servers.\n\n#### Creating mcp clients from the config file\nYou can also create an MCP client by providing a JSON configuration file:\n```json\n{\n\t\"name\": \"foobar\",\n\t\"allowed_servers\": [\"deepwiki\", \"time\"],\n\t\"access_token\": \"my_secret_token_123\",\n    \"access_token_ref\": {\n        \"file\": \"\u002Fpath\u002Fto\u002Ftoken-file.txt\",\n        \"env\": \"ENV_VAR_NAME\"\n    }\n}\n```\n\nWhen creating a client from a config file, you **must** provide a custom access token because mcpjungle cannot print the generated token to the console.\n\n#### Supplying custom access tokens in config files\n\nThere are 3 ways to provide the access token from configuration file:\n\n1. Directly in the `access_token` field: Only use this for testing purposes. Not recommended for production, especially if you're committing the config file to version control.\n2. From a file using the `access_token_ref.file` field: The file should contain only the token string.\n3. From an environment variable using the `access_token_ref.env` field: The env var should contain the token string.\n\nYou can also use `${VAR_NAME}` placeholders elsewhere in the same JSON config file. For example:\n\n```json\n{\n  \"name\": \"${MCP_CLIENT_NAME}\",\n  \"allowed_servers\": [\"${PRIMARY_SERVER}\", \"time\"],\n  \"access_token_ref\": {\n    \"env\": \"CLIENT_TOKEN_ENV_NAME\"\n  }\n}\n```\n\n#### Creating user accounts\nIn addition to MCP clients, you can also create User accounts in mcpjungle for human users.\n\nA user has a very limited set of privileges compared to an admin in the enterprise mode.\nFor example, they can view and use MCP servers, but they don't have write permissions in mcpjungle.\n\n```bash\n# Auto-generates a secret for user\nmcpjungle create user bob\n# Specify a custom access token for user\nmcpjungle create user alice --access-token alice_token_123\n# Create user from config file\nmcpjungle create user --conf \u002Fpath\u002Fto\u002Fuser-config.json\n```\n\nThe config file format for creating a user is similar to that of an MCP client:\n```json\n{\n    \"name\": \"charlie\",\n    \"access_token\": \"charlies_secret_token\",\n    \"access_token_ref\": {\n        \"file\": \"\u002Fpath\u002Fto\u002Ftoken-file.txt\",\n        \"env\": \"ENV_VAR_NAME\"\n    }\n}\n```\n\nAgain, when using the config file, you **must** provide a custom access token.\n\nJust like other JSON config files in MCPJungle, user config files also support `${VAR_NAME}` placeholders in string fields.\n\n### OpenTelemetry\nMCPJungle supports Prometheus-compatible OpenTelemetry Metrics for observability.\n\n- In `enterprise` mode, OpenTelemetry is enabled by default.\n- In `development` mode, telemetry is disabled by default. You can enable it by setting the `OTEL_ENABLED` environment variable to `true` before starting the server:\n\n```bash\n# enable OpenTelemetry metrics\nexport OTEL_ENABLED=true\n\n# optionally, set additional attributes to be added to all metrics\nexport OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=enterprise\n\n# start the server\nmcpjungle start\n```\n\nOnce the mcpjungle server is started, metrics are available at the `\u002Fmetrics` endpoint.\n\n# Current limitations 🚧\nWe're not perfect yet, but we're working hard to get there!\n\n### 1. MCPJungle does not support OAuth flow for authentication yet\nThis is a work in progress.\n\nWe're collecting more feedback on how people use OAuth with MCP servers, so feel free to start a Discussion or open an issue to share your use case.\n\n# Contributing 💻\n\nWe welcome contributions from the community! \n\n- **For contribution guidelines and standards**, see [CONTRIBUTION.md](.\u002FCONTRIBUTION.md)\n- **For development setup and technical details**, see [DEVELOPMENT.md](.\u002FDEVELOPMENT.md)\n\nJoin our [Discord community](https:\u002F\u002Fdiscord.gg\u002FCapV4Z3krk) to connect with other contributors and maintainers.\n","\u003Ch1 align=\"center\">\n  :deciduous_tree: MCPJungle :deciduous_tree:\n\u003C\u002Fh1>\n\u003Cp align=\"center\">\n  为您的私有 AI 助手提供的自托管 MCP 网关\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FCapV4Z3krk\" style=\"text-decoration: none;\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-MCPJungle-5865F2?style=flat-square&logo=discord&logoColor=white\" alt=\"Discord\" style=\"max-width: 100%;\">\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\nMCPJungle 是一个开源、自托管的网关，适用于您所有的 [Model Context Protocol](https:\u002F\u002Fmodelcontextprotocol.io\u002Fintroduction) 服务器。\n\n🧑‍💻 开发者使用它可以从一个中心位置注册和管理 MCP 服务器及其提供的工具。\n\n🤖 MCP 客户端使用它可以从单个“网关”MCP 服务器发现并使用所有这些工具。\n\n![diagram](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmcpjungle_MCPJungle_readme_a96415840eb7.png)\n\n\u003Cp align=\"center\">MCPJungle 是您的 AI 助手连接所需的唯一 MCP 服务器！\u003C\u002Fp>\n\n# 谁应该使用 MCPJungle？\n1. 使用像 Claude 和 Cursor 这样的 MCP 客户端，并需要访问 MCP 服务器以进行工具调用的 **开发者**。\n2. 构建生产级 AI 助手，并需要访问具有内置安全、隐私和访问控制功能的 MCP 服务器的 **开发者**。\n3. 希望从一个中心位置查看和管理所有 MCP 客户端-服务器交互的 **组织**。托管在他们自己的数据中心 🔒\n\n# 📋 目录\n\n- [快速入门指南](#quickstart-guide)\n- [安装](#installation)\n- [使用](#usage)\n  - [服务器](#server)\n    - [在 Docker 中运行 MCPJungle 服务器](#running-inside-docker)\n    - [直接在主机上运行 MCPJungle 服务器](#running-directly-on-host)\n    - [关闭服务器](#shutting-down)\n  - [客户端](#client)\n    - [添加可流式传输的 HTTP 基础 MCP 服务器](#registering-streamable-http-based-servers)\n    - [添加基于 STDIO 的 MCP 服务器](#registering-stdio-based-servers)\n    - [移除 MCP 服务器](#deregistering-mcp-servers)\n    - [为服务器配置自定义 URL](#configuring-a-custom-registry-url)\n  - [冷启动问题与状态保持连接](#cold-start-problem--stateful-connections)\n  - [从 Claude 连接到 MCPJungle](#claude)\n  - [从 Cursor 连接到 MCPJungle](#cursor)\n  - [从 Copilot 连接到 MCPJungle](#copilot)\n  - [全局启用\u002F禁用工具](#enablingdisabling-tools)\n  - [提示](#prompts)\n  - [工具组](#tool-groups)\n  - [身份验证](#authentication)\n  - [企业级功能](#enterprise-features-)\n    - [访问控制](#access-control)\n    - [OpenTelemetry](#opentelemetry)\n- [局限性](#current-limitations-)\n- [贡献](#contributing-)\n\n# 快速入门指南\n本快速入门指南将向您展示如何：\n1. 使用 `docker compose` 在本地启动 MCPJungle 服务器。\n2. 在 MCPJungle 中注册一个简单的 MCP 服务器。\n3. 将您的 Claude 连接到 MCPJungle，以访问您的 MCP 工具。\n\n## 启动服务器\n```bash\ncurl -O https:\u002F\u002Fraw.githubusercontent.com\u002Fmcpjungle\u002FMCPJungle\u002Frefs\u002Fheads\u002Fmain\u002Fdocker-compose.yaml\ndocker compose up -d\n```\n\n## 注册 MCP 服务器\n在您的本地机器上，您可以使用 brew 或直接从 [发布页面](https:\u002F\u002Fgithub.com\u002Fmcpjungle\u002FMCPJungle\u002Freleases) 下载 `mcpjungle` CLI。\n```bash\nbrew install mcpjungle\u002Fmcpjungle\u002Fmcpjungle\n```\n\n该 CLI 允许您管理 MCPJungle 中的所有内容。\n\n接下来，让我们使用 CLI 将一个 MCP 服务器添加到 MCPJungle 中。在此示例中，我们将使用 [context7](https:\u002F\u002Fcontext7.com\u002F)。\n```bash\nmcpjungle register --name context7 --url https:\u002F\u002Fmcp.context7.com\u002Fmcp\n```\n\n## 连接到 MCPJungle\n\n请在您的 Claude 的 MCP 服务器配置中使用以下设置：\n```json\n{\n  \"mcpServers\": {\n    \"mcpjungle\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"http:\u002F\u002Flocalhost:8080\u002Fmcp\",\n        \"--allow-http\"\n      ]\n    }\n  }\n}\n```\n\n一旦 MCPJungle 被添加为 Claude 的 MCP，您可以尝试向它提出以下请求：\n```text\n使用 context7 获取 `\u002Flodash\u002Flodash` 的文档。\n```\n\nClaude 将会尝试通过 MCPJungle 调用 `context7__get-library-docs` 工具，从而返回 Lodash 库的文档。\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmcpjungle_MCPJungle_readme_4019b5e7aa78.png\" alt=\"Claude 通过 MCPJungle 调用 context7 工具\" height=\"400\">\n\u003C\u002Fp>\n\n恭喜您！🎉\n\n您已成功在 MCPJungle 中注册了一个远程 MCP 服务器，并通过 Claude 调用了其中的一个工具。\n\n现在您可以继续探索 MCPJungle，并查阅文档和 CLI 以获取更多详细信息。\n\n# 安装\nMCPJungle 以独立二进制文件的形式提供。\n\n您可以从 [发布页面](https:\u002F\u002Fgithub.com\u002Fmcpjungle\u002FMCPJungle\u002Freleases) 下载，也可以使用 [Homebrew](https:\u002F\u002Fbrew.sh\u002F) 进行安装：\n\n```bash\nbrew install mcpjungle\u002Fmcpjungle\u002Fmcpjungle\n```\n\n通过运行以下命令验证您的安装：\n\n```bash\nmcpjungle version\n```\n\n> [!重要]\n> 在 macOS 上，您必须使用 Homebrew，因为编译后的二进制文件尚未获得 [公证](https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fsecurity\u002Fnotarizing-macos-software-before-distribution)。\n\nMCPJungle 提供了一个 Docker 镜像，可用于运行注册服务器（稍后会详细介绍）。\n\n```bash\ndocker pull ghcr.io\u002Fmcpjungle\u002Fmcpjungle\n```\n\n# 使用\nMCPJungle 采用客户端-服务器架构，该二进制文件允许您同时运行服务器和客户端。\n\n## 服务器\nMCPJungle 服务器负责管理所有在其内注册的 MCP 服务器，并为 AI 助手提供统一的 MCP 网关，以便发现和调用这些注册服务器所提供的工具。\n\n该网关本身运行在可流式的 HTTP 传输之上，可通过 `\u002Fmcp` 端点访问。\n\n### 在 Docker 中运行\n要在本地运行 MCPJungle 服务器，推荐使用 docker compose：\n```shell\n# docker-compose.yaml 已针对个人在本地机器上出于个人用途运行 MCPJungle 进行优化。\n# 默认情况下，MCPJungle 将以“开发”模式运行。\ncurl -O https:\u002F\u002Fraw.githubusercontent.com\u002Fmcpjungle\u002FMCPJungle\u002Frefs\u002Fheads\u002Fmain\u002Fdocker-compose.yaml\n\ndocker compose up -d\n\n# docker-compose.prod.yaml 则针对希望在远程服务器上部署 MCPJungle 以供多用户使用的组织进行了优化。\n\n# mcpjungle 默认将以 `enterprise` 模式运行，该模式启用了企业级功能。\ncurl -O https:\u002F\u002Fraw.githubusercontent.com\u002Fmcpjungle\u002FMCPJungle\u002Frefs\u002Fheads\u002Fmain\u002Fdocker-compose.prod.yaml\n\ndocker compose -f docker-compose.prod.yaml up -d\n```\n\n> [!NOTE]\n> `enterprise` 模式以前称为 `production` 模式。\n> 为了更清晰地表达，该模式现已更名为 `enterprise`。其他方面保持不变。\n\n这将启动 MCPJungle 服务器以及一个持久化的 Postgres 数据库容器。\n\n您可以快速验证服务器是否正在运行：\n```bash\ncurl http:\u002F\u002Flocalhost:8080\u002Fhealth\n```\n\n如果您计划注册依赖 `npx` 或 `uvx` 的基于 stdio 的 MCP 服务器，请改用 mcpjungle 的 `stdio` 标签 Docker 镜像。\n```bash\nMCPJUNGLE_IMAGE_TAG=latest-stdio docker compose up -d\n```\n\n> [!NOTE]\n> 如果您使用的是 `docker-compose.yaml`，那么默认镜像标签已经是 `stdio`。\n> 只有在使用 `docker-compose.prod.yaml` 时，才需要指定 `stdio` 镜像标签。\n\n此镜像体积较大。但在本地运行依赖 stdio 的 MCP 服务器时，它非常方便且推荐使用。\n\n例如，如果您只想注册 context7 和 deepwiki 等远程 MCP 服务器，可以使用标准（最小）镜像。\n\n但如果您还想使用 `filesystem`、`time`、`github` 等基于 stdio 的服务器，则应改用 `stdio` 标签的镜像。\n\n> [!NOTE]\n> 如果您的 stdio 服务器依赖于 `npx` 或 `uvx` 之外的工具，您需要创建一个自定义 Docker 镜像，其中包含这些依赖项以及 mcpjungle 二进制文件。\n\n**生产部署**\n\n默认的 [MCPJungle Docker 镜像](https:\u002F\u002Fghcr.io\u002Fmcpjungle\u002Fmcpjungle) 非常轻量——它仅包含一个最小的基础镜像和 `mcpjungle` 二进制文件。\n\n因此，它非常适合并推荐用于生产环境部署。\n\n对于数据库，我们建议您部署一个独立的 Postgres 数据库集群，并将其端点提供给 mcpjungle（请参阅下方的 [数据库] 部分）。\n\n您可以查看 [标准 Docker 镜像](.\u002FDockerfile) 和 [stdio Docker 镜像](.\u002Fstdio.Dockerfile) 的定义。\n\n### 直接在主机上运行\n您也可以直接在主机上使用二进制文件运行服务器：\n\n```bash\nmcpjungle start\n```\n\n这将启动主注册中心服务器和 MCP 网关，默认在端口 `8080` 上可访问。\n\n### 关闭\n让 mcpjungle 服务器优雅地关闭非常重要，以确保正确清理资源。\n\n停止服务器进程的推荐方法是向其发送 `SIGTERM` 信号。\n\n\n\n### 数据库\nMCPJungle 服务器依赖于数据库，默认会在当前工作目录下创建一个 SQLite 数据库文件 `mcpjungle.db`。\n\n当您只是在本地测试时，这样做是可以的。\n\n对于更正式的部署，MCPJungle 也支持 PostgreSQL。您可以提供 DSN 来连接到它：\n\n```bash\n# 您可以将数据库 DSN 作为环境变量提供\nexport DATABASE_URL=postgres:\u002F\u002Fadmin:root@localhost:5432\u002Fmcpjungle_db\n\n# 以容器方式运行\ndocker run ghcr.io\u002Fmcpjungle\u002Fmcpjungle:latest\n\n# 或者直接运行\nmcpjungle start\n```\n\n如果您不喜欢使用 DSN，也可以提供特定于 PostgreSQL 的环境变量或文件：\n```bash\n# 如果使用特定于 PostgreSQL 的环境变量，host 是必填项\nexport POSTGRES_HOST=localhost\nexport POSTGRES_PORT=5432\n\nexport POSTGRES_USER=admin\nexport POSTGRES_USER_FILE=\u002Fpath\u002Fto\u002Fuser-file\n\nexport POSTGRES_PASSWORD=secret\nexport POSTGRES_PASSWORD_FILE=\u002Fpath\u002Fto\u002Fpassword-file\n\nexport POSTGRES_DB=mcpjungle_db\nexport POSTGRES_DB_FILE=\u002Fpath\u002Fto\u002Fdb-file\n\nmcpjungle start\n```\n\n## 客户端\n一旦服务器启动，您就可以使用 mcpjungle CLI 与其交互。\n\nMCPJungle 目前支持使用 [stdio](https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-03-26\u002Fbasic\u002Ftransports#stdio) 和 [可流式 HTTP](https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-03-26\u002Fbasic\u002Ftransports#streamable-http) 传输协议的 MCP 服务器。\n\n> [!NOTE]\n> 对 SSE（服务器推送事件）的支持也存在，但目前尚未成熟。\n\n下面我们来看看如何在 MCPJungle 中注册它们。\n\n### 注册基于可流式 HTTP 的服务器\n假设您已经在本地运行了一个可流式 HTTP 的 MCP 服务器，地址为 `http:\u002F\u002F127.0.0.1:8000\u002Fmcp`，它提供了诸如 `add`、`subtract` 等基本数学工具。\n\n您可以将此 MCP 服务器注册到 MCPJungle 中：\n```bash\nmcpjungle register --name calculator --description \"提供一些基本数学工具\" --url http:\u002F\u002F127.0.0.1:8000\u002Fmcp\n```\n\n如果您使用 Docker Compose 运行该服务器，并且不在 Linux 系统上，那么您需要使用 `host.docker.internal` 而不是本地回环地址。\n```bash\nmcpjungle register --name calculator --description \"提供一些基本数学工具\" --url http:\u002F\u002Fhost.docker.internal:8000\u002Fmcp\n```\n\n现在，注册中心将开始跟踪该 MCP 服务器并加载其工具。\n\n![在 MCPJungle 中注册 MCP 服务器](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmcpjungle_MCPJungle_readme_bda610db7fd0.png)\n\n您也可以通过配置文件来注册 MCP 服务器：\n```bash\ncat .\u002Fcalculator.json\n{\n  \"name\": \"calculator\",\n  \"transport\": \"streamable_http\",\n  \"description\": \"提供一些基本数学工具\",\n  \"url\": \"http:\u002F\u002F127.0.0.1:8000\u002Fmcp\"\n}\n\nmcpjungle register -c .\u002Fcalculator.json\n```\n\n该服务器提供的所有工具现在都可以通过 MCPJungle 访问：\n\n```bash\nmcpjungle list tools\n\n# 查看工具使用方法\nmcpjungle usage calculator__multiply\n\n# 调用工具\nmcpjungle invoke calculator__multiply --input '{\"a\": 100, \"b\": 50}'\n```\n\n![通过 MCPJungle 代理调用 MCP 服务器上的工具](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmcpjungle_MCPJungle_readme_2835beb8e35e.png)\n\n> [!NOTE]\n> 在 MCPJungle 中，工具必须使用规范名称来引用，其格式为 `\u003Cmcp-服务器名>__\u003C工具名>`。\n> 服务器名和工具名之间用双下划线 `__` 分隔。\n>\n> 例如，如果您注册了一个名为 `github` 的 MCP 服务器，它提供了一个名为 `git_commit` 的工具，那么您可以在 MCPJungle 中使用名称 `github__git_commit` 来调用该工具。\n>\n> 您的 MCP 客户端也必须使用此规范名称通过 MCPJungle 调用工具。\n\n注册基于可流式 HTTP 的 MCP 服务器的配置文件格式如下：\n```json\n{\n  \"name\": \"\u003C您的 MCP 服务器名称>\",\n  \"transport\": \"streamable_http\",\n  \"description\": \"\u003C描述>\",\n  \"url\": \"\u003CMCP 服务器的 URL>\",\n  \"bearer_token\": \"\u003C可选的身份验证 Bearer 令牌>\",\n  \"headers\": {\n    \"\u003C自定义 HTTP 头>\": \"\u003C值>\"\n  }\n}\n```\n\n### 注册基于 STDIO 的服务器\n\n以下是一个示例配置文件（我们称之为 `filesystem.json`），用于一个使用 STDIO 传输协议的 MCP 服务器：\n\n```json\n{\n  \"name\": \"filesystem\",\n  \"transport\": \"stdio\",\n  \"description\": \"文件系统 MCP 服务器\",\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \".\"]\n}\n```\n\n您可以通过提供此配置文件将该 MCP 服务器注册到 MCPJungle 中：\n```bash\nmcpjungle register -c .\u002Ffilesystem.json\n\n# 将 JSON 配置保存到文件（例如 filesystem.json）\nmcpjungle 注册 -c .\u002Ffilesystem.json\n```\n\n用于注册基于 STDIO 的 MCP 服务器的配置文件格式如下：\n\n```json\n{\n  \"name\": \"\u003C你的 MCP 服务器名称>\",\n  \"transport\": \"stdio\",\n  \"description\": \"\u003C描述>\",\n  \"command\": \"\u003C运行 MCP 服务器的命令，例如 'npx'、'uvx'>\",\n  \"args\": [\"传递给命令的\", \"参数\", \"列表\"],\n  \"env\": {\n    \"KEY\": \"value\"\n  }\n}\n```\n\n你也可以观看关于[如何注册基于 STDIO 的 MCP 服务器](https:\u002F\u002Fyoutu.be\u002FYqHiuexR5fw)的简短视频。\n\n> [!提示]\n> 如果你的 STDIO 服务器因某种原因失败或抛出错误，请检查 mcpjungle 服务器的日志以查看其 `stderr` 输出。\n\n#### JSON 配置文件中的环境变量\n\n当你使用 JSON 配置文件来注册 MCP 服务器或创建其他实体（如 tol 组）时，CLI 可以在将请求发送到服务器之前解析字符串值中的环境变量占位符。\n\n- 只有以 `${VAR_NAME}` 格式的占位符会被解析。\n- 占位符可以出现在字符串值的任何位置，例如 `prefix-${VAR_NAME}-suffix`。\n- 解析过程在 CLI 进程中进行，因此必须在你运行命令的地方可用该环境变量。\n- 如果引用的环境变量未设置，则命令会失败并报错。\n- 这适用于 JSON 配置中的所有字符串字段，包括嵌套对象和字符串数组。\n\nMCP 服务器配置示例：\n\n```json\n{\n  \"name\": \"affine-main\",\n  \"transport\": \"streamable_http\",\n  \"description\": \"AFFiNE 工作区 MCP 服务器\",\n  \"url\": \"https:\u002F\u002Fapp.affine.pro\u002Fapi\u002Fworkspaces\u002F${AFFINE_WORKSPACE_ID}\u002Fmcp\",\n  \"bearer_token\": \"${AFFINE_API_TOKEN}\",\n  \"headers\": {\n    \"X-Workspace\": \"${AFFINE_WORKSPACE_ID}\"\n  }\n}\n```\n\nSTDIO 配置示例：\n\n```json\n{\n  \"name\": \"my-stdio-server\",\n  \"transport\": \"stdio\",\n  \"command\": \"uvx\",\n  \"args\": [\"my-server\", \"--workspace\", \"${WORKSPACE_ID}\"],\n  \"env\": {\n    \"API_TOKEN\": \"${API_TOKEN}\"\n  }\n}\n```\n\n**注意事项** ⚠️\n\n当在 Docker 容器中运行 mcpjungle 时，你需要一些额外的配置才能运行 `filesystem` MCP 服务器。\n\n默认情况下，容器内的 mcpjungle 无法访问宿主机的文件系统。\n\n因此，你必须：\n- 将你想要访问的宿主机目录作为卷挂载到容器中\n- 在 filesystem MCP 服务器的命令参数中指定该挂载路径为目录\n\nmcpjungle 提供的 `docker-compose.yaml` 文件会将当前工作目录挂载为容器中的 `\u002Fhost`。\n\n因此，你可以使用以下配置来运行 filesystem MCP 服务器：\n\n```json\n{\n  \"name\": \"filesystem\",\n  \"transport\": \"stdio\",\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \"\u002Fhost\"]\n}\n```\n\n这样，mcp 就可以访问 `\u002Fhost`，即你宿主机上的当前工作目录。\n\n更多详细信息请参阅 [DEVELOPMENT.md](.\u002FDEVELOPMENT.md#docker-filesystem-access)。\n\n#### 从 Docker 或 Kubernetes 部署中运行 CLI 命令\n如果你的 MCPJungle 服务器正在远程的 Docker 容器或 Kubernetes 集群中运行，你也可以直接在容器内执行 `mcpjungle` 二进制文件：\n\n```bash\ndocker exec -it \u003C容器名称> \u002Fmcpjungle\nkubectl -n \u003C命名空间> exec -it po\u002F\u003CPod 名称> -- \u002Fmcpjungle\n```\n\n> [!注意]\n> 标准镜像不包含 shell。请通过 `docker exec` 或 `kubectl exec` 直接运行 `\u002Fmcpjungle`。\n\n这在与服务器运行在同一环境中执行 CLI 命令时非常有用。\n\n### 注销 MCP 服务器\n你可以从 mcpjungle 中移除一个 MCP 服务器。\n\n```bash\nmcpjungle 注销 calculator\nmcpjungle 注销 filesystem\n```\n\n一旦移除，该 MCP 服务器及其工具将不再对你或你的 MCP 客户可用。\n\n### 配置自定义注册表 URL\n\n默认情况下，CLI 会连接到 `http:\u002F\u002F127.0.0.1:8000` 上的 mcpjungle 服务器。\n\n如果你的服务器运行在不同的主机或端口上（例如远程部署），你可以通过两种方式配置注册表 URL：\n\n**选项 1：使用 `--registry` 标志**\n```bash\nmcpjungle --registry http:\u002F\u002Fmy-server:9000 列举工具\n```\n\n**选项 2：在配置文件中设置**\n\n创建或编辑 `~\u002F.mcpjungle.conf`：\n```yaml\nregistry_url: http:\u002F\u002Fmy-server:9000\n```\n\n这样可以避免每次命令都传递 `--registry` 标志。\n\n## 冷启动问题与有状态连接\n默认情况下，每当调用工具时，MCPJungle 都会与上游 MCP 服务器建立一个新的连接。\n\n工具调用完成后，连接就会关闭。\n\n这样做可以保持系统的整洁，并避免内存泄漏。\n\n但有时这会导致延迟开销。例如，每次调用基于 STDIO 的 MCP 服务器的工具时，都会启动一个新的进程。如果服务器需要几秒钟才能启动，这会减慢工具调用和整体交互的速度。\n\n为了解决这个问题，MCPJungle 也支持有状态连接。\n\n你可以在 MCP 服务器配置中将 `session_mode` 设置为 `stateful`（默认是 `stateless`）：\n```json\n{\n  \"name\": \"filesystem\",\n  \"transport\": \"stdio\",\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \".\"],\n  \"session_mode\": \"stateful\"\n}\n```\n\nmcpjungle 会在**第一次调用该服务器的工具时**与其建立一个新的连接。\n\n工具调用完成后，这个连接不会关闭。后续对该服务器的工具调用将复用同一个连接，从而避免冷启动的开销。\n\n连接仅在以下情况下才会关闭：\n1. mcpjungle 服务器停止运行\n2. MCP 服务器从 mcpjungle 中注销\n3. 连接在一段时间无活动后超时。你可以使用 `SESSION_IDLE_TIMEOUT_SEC` 环境变量来全局配置 mcpjungle 服务器的超时时间（默认值为 -1，表示无超时）。\n\n在可能的情况下，建议使用无状态连接（默认设置）。\n\n## 与其他 MCP 客户端的集成\n假设 MCPJungle 正在 `http:\u002F\u002Flocalhost:8080` 上运行，可以使用以下配置连接到它：\n\n### Claude\n```json\n{\n  \"mcpServers\": {\n    \"mcpjungle\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"http:\u002F\u002Flocalhost:8080\u002Fmcp\",\n        \"--allow-http\"\n      ]\n    }\n  }\n}\n```\n\n### Cursor\n```json\n{\n  \"mcpServers\": {\n    \"mcpjungle\": {\n      \"url\": \"http:\u002F\u002Flocalhost:8080\u002Fmcp\"\n    }\n  }\n}\n```\n\n你还可以观看关于[如何将 Cursor 连接到 MCPJungle](https:\u002F\u002Fyoutu.be\u002FSaUqj-eLPnw)的简短视频。\n\n### Copilot\n\n请按照 Copilot 的文档中关于[手动配置 MCP 服务器](https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fhow-tos\u002Fprovide-context\u002Fuse-mcp\u002Fextend-copilot-chat-with-mcp#configuring-mcp-servers-manually-1)的部分操作。\n\n在将 mcpjungle 添加到你的 mcp.json 配置文件后，应如下所示：\n```json\n{\n  \"servers\": {\n    \"mcpjungle\": {\n      \"url\": \"http:\u002F\u002Flocalhost:8080\u002Fmcp\"\n    }\n  }\n}\n```\n\n> [!注意]\n> 你可能需要点击 `开始` 按钮，Copilot 才能真正开始与 mcpjungle 交互。\n\n## 启用\u002F禁用工具\n您可以禁用并重新启用特定工具，或 MCP 服务器提供的所有工具。\n\n如果某个工具被禁用，则它将无法通过 MCPJungle 代理或任何工具组访问，因此任何 MCP 客户端都无法查看或调用该工具。\n\n您还可以禁用和启用提示（Prompts）。\n\n```bash\n# 禁用由 `context7` MCP 服务器提供的 `get-library-docs` 工具\nmcpjungle disable tool context7__get-library-docs\n\n# 重新启用该工具\nmcpjungle enable tool context7__get-library-docs\n\n# 禁用 context7 中的所有工具\nmcpjungle disable tool context7\n\n# 禁用整个 `context7` MCP 服务器（禁用所有工具和提示）\nmcpjungle disable server context7\n\n# 重新启用 `context7`\nmcpjungle enable server context7\n\n# 禁用一个提示\nmcpjungle disable prompt \"huggingface_Model Details\"\n\n# 禁用 context7 中的所有提示\nmcpjungle disable prompt context7\n```\n\n被禁用的工具仍然可以通过 mcpjungle 的 HTTP API 访问，因此管理员仍可通过命令行（或其他 HTTP 客户端）对其进行管理。\n\n> [!NOTE]\n> 当新服务器注册到 MCPJungle 时，其所有工具和提示默认均为**启用状态**。\n\n## 提示（Prompts）\nMcpjungle 支持 [提示](https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-06-18\u002Fserver\u002Fprompts)。\n\n当您注册新的 MCP 服务器时，如果该服务器提供提示，则这些提示也会在 MCPJungle 中注册。\n\n以下是一些使用命令行与提示交互的示例：\n```bash\n# 列出 huggingface MCP 服务器提供的所有提示\n$ mcpjungle list prompts --server huggingface\n\n# 获取“模型详情”提示，并传入自定义参数\n$ mcpjungle get prompt \"huggingface__Model Details\" --arg model_id=\"openai\u002Fgpt-oss-120b\"\n```\n\n## 工具组\n随着您向 MCPJungle 添加更多 MCP 服务器，网关可用的工具数量可能会显著增加。\n\n如果您的 MCP 客户端通过网关接触到数百个工具，其性能可能会下降。\n\nMCPJungle 允许您**使用工具组仅向您的 MCP 客户端暴露部分可用工具**。\n\n您可以创建一个新的工具组，并仅包含您希望公开的特定工具。\n\n一旦创建了工具组，mcpjungle 将为其返回一个唯一的端点。\n\n然后您可以配置您的 MCP 客户端，使其使用此特定于工具组的端点，而不是主网关端点。\n\n### 创建工具组\n您可以通过向 `create group` 命令提供一个 JSON 配置文件来创建新的工具组。\n\n您必须为该组指定一个唯一的名称，并使用以下一个或多个字段来定义要包含哪些工具：\n- **`included_tools`**：列出要包含的具体工具名称（例如：`[\"filesystem__read_file\", \"time__get_current_time\"]`）\n- **`included_servers`**：包含特定 MCP 服务器中的所有工具（例如：`[\"time\", \"deepwiki\"]`）\n- **`excluded_tools`**：排除特定工具（在包含整个服务器时非常有用）\n\n#### 示例 1：精选特定工具\n以下是工具组配置文件 (`claude-tools-group.json`) 的示例：\n```json\n{\n  \"name\": \"claude-tools\",\n  \"description\": \"该组仅包含 Claude Desktop 可使用的工具\",\n  \"included_tools\": [\n    \"filesystem__read_file\",\n    \"deepwiki__read_wiki_contents\",\n    \"time__get_current_time\"\n  ]\n}\n```\n\n该组仅公开 3 个精心挑选的工具，而不是所有可用工具。\n\n#### 示例 2：包含整个服务器并排除部分工具\n您也可以包含特定服务器中的所有工具，并选择性地排除某些工具：\n```json\n{\n  \"name\": \"claude-tools\",\n  \"description\": \"包含 time 和 deepwiki 服务器的所有工具，但排除 time__convert_time\",\n  \"included_servers\": [\"time\", \"deepwiki\"],\n  \"excluded_tools\": [\"time__convert_time\"]\n}\n```\n\n这将包含 `time` 和 `deepwiki` 服务器中的所有工具，但会排除 `time__convert_time`。\n\n#### 示例 3：混合使用多种方法\n您还可以结合使用所有三个字段以获得最大的灵活性：\n```json\n{\n  \"name\": \"comprehensive-tools\",\n  \"description\": \"手动选择工具、包含整个服务器并排除部分工具的组合\",\n  \"included_tools\": [\"filesystem__read_file\"],\n  \"included_servers\": [\"time\"],\n  \"excluded_tools\": [\"time__convert_time\"]\n}\n```\n\n这将包含 `filesystem__read_file` 以及 `time` 服务器中的所有工具，但会排除 `time__convert_time`。\n\n您可以在 mcpjungle 中创建此工具组：\n```bash\n$ mcpjungle create group -c .\u002Fclaude-tools-group.json\n\n工具组 claude-tools 已成功创建。\n现在可通过以下可流式传输的 HTTP 端点访问：\n\n    http:\u002F\u002F127.0.0.1:8080\u002Fv0\u002Fgroups\u002Fclaude-tools\u002Fmcp\n\n```\n\n然后您可以配置 Claude（或任何其他 MCP 客户端），使其使用此特定于工具组的端点来访问 MCP 服务器。\n\n客户端将只能看到并使用这 3 个工具，而不会意识到 MCPJungle 中注册的其他任何工具。\n\n> [!TIP]\n> 您可以运行 `mcpjungle list tools` 来查看所有可用工具，并选择您想要包含在组中的工具。\n\n您还可以观看[关于使用工具组的视频](https:\u002F\u002Fyoutu.be\u002FA21rfGgo38A)。\n\n> [!NOTE]\n> 排除操作始终在最后执行。\n因此，如果您将某个工具同时添加到 `included_tools` 并将其列入 `excluded_tools`，则该工具最终仍将被排除在组外。\n\n#### 局限性 🚧\n目前工具组不支持[提示](https:\u002F\u002Fmodelcontextprotocol.io\u002Fspecification\u002F2025-06-18\u002Fserver\u002Fprompts)。我们正在努力修复此[问题](https:\u002F\u002Fgithub.com\u002Fmcpjungle\u002FMCPJungle\u002Fissues\u002F136) 🛠️\n\n### 管理工具组\n目前您可以执行列出所有工具组、查看特定工具组详细信息以及删除工具组等操作。\n\n```bash\n# 列出所有工具组\nmcpjungle list groups\n\n# 查看特定工具组的详细信息\nmcpjungle get group claude-tools\n\n# 删除工具组\nmcpjungle delete group claude-tools\n```\n\n### 在工具组中使用工具\n您可以使用 `--group` 标志在特定工具组中列出和调用工具：\n\n```bash\n# 列出特定工具组中的工具\nmcpjungle list tools --group claude-tools\n\n# 从特定工具组上下文中调用工具\nmcpjungle invoke filesystem__read_file --group claude-tools --input '{\"path\": \"README.md\"}'\n```\n\n这些命令提供了基于工具组的作用域操作，使您能够更轻松地在特定上下文中使用工具，并验证工具是否确实存在于您的工具组中。\n\n> [!NOTE]\n> 如果某个工具被包含在工具组中，但随后在全球范围内被禁用或删除，则它将无法通过该工具组的 MCP 端点访问。\n然而，如果该工具稍后被重新启用或再次添加，则它将自动重新出现在该工具组中。\n\n**局限性** 🚧\n1. 目前您无法更新现有的工具组。您必须删除该组，并使用修改后的配置文件创建一个新的工具组。\n2. 在 `enterprise` 模式下，目前只有管理员可以创建工具组。我们正在努力允许普通用户也能创建自己的工具组。\n\n## 身份验证\nMCPJungle 目前支持身份验证，前提是您的 Streamable HTTP MCP 服务器接受用于身份验证的静态令牌。\n\n这在使用 SaaS 提供的 MCP 服务器时非常有用，例如 HuggingFace、Stripe 等，这些服务器需要您的 API 令牌进行身份验证。\n\n您可以在注册 MCP 服务器时提供您的令牌：\n```bash\n# 如果您指定了 `--bearer-token` 标志，MCPJungle 会在发送到此 MCP 服务器的所有请求中添加 `Authorization: Bearer \u003Ctoken>` 头。\nmcpjungle register --name huggingface --description \"HuggingFace MCP Server\" --url https:\u002F\u002Fhuggingface.co\u002Fmcp --bearer-token \u003Cyour-hf-api-token>\n```\n\n或者从您的配置文件中：\n```bash\n{\n  \"name\": \"huggingface\",\n  \"transport\": \"streamable_http\",\n  \"url\": \"https:\u002F\u002Fhuggingface.co\u002Fmcp\",\n  \"description\": \"hugging face mcp server\",\n  \"bearer_token\": \"\u003Cyour-hf-api-token>\"\n}\n```\n\n如果您需要为 `Authorization` 头部提供自定义值，或添加其他自定义头部，可以在配置文件中使用 `headers` 字段：\n```json\n{\n  \"name\": \"sourcegraph\",\n  \"transport\": \"streamable_http\",\n  \"url\": \"https:\u002F\u002Fsourcegraph.mycompany.com\u002F.api\u002Fmcp\",\n  \"headers\": {\n    \"Authorization\": \"token \u003Cyour-sourcegraph-token>\",\n    \"Custom-Header\": \"custom-value\"\n  }\n}\n```\n\nOauth 流程的支持即将推出！\n\n## 企业级功能 🔒\n\n如果您在组织内运行 MCPJungle，我们建议以 `enterprise` 模式运行服务器：\n```bash\n# 通过 enterprise 模式启用企业级功能\nmcpjungle start --enterprise\n\n# 您也可以将服务器模式指定为环境变量（有效值为 `development` 和 `enterprise`）\nexport SERVER_MODE=enterprise\nmcpjungle start\n\n# 或者使用上文所述的企业级 Docker Compose 文件\ndocker compose -f docker-compose.prod.yaml up -d\n```\n\n默认情况下，mcpjungle 服务器以 `development` 模式运行，这非常适合个人在本地运行。\n\n在 Enterprise 模式下，服务器会实施更严格的安全策略，并提供额外的功能，如身份验证、ACL、可观ability 等。\n\n以 enterprise 模式启动服务器后，您必须在客户端机器上运行以下命令来初始化服务器：\n```bash\nmcpjungle init-server\n```\n\n这将在服务器中创建一个管理员用户，并将其 API 访问令牌存储在您的主目录中（`~\u002F.mcpjungle.conf`）。\n\n然后您可以使用 mcpjungle CLI 向服务器发出经过身份验证的请求。\n\n### 访问控制\n\n在 `development` 模式下，所有 MCP 客户端都可以完全访问 MCPJungle Proxy 中注册的所有 MCP 服务器。\n\n而在 `enterprise` 模式下，您可以控制哪些 MCP 客户端可以访问哪些 MCP 服务器。\n\n假设您已在 enterprise 模式下的 MCPJungle 中注册了两个 MCP 服务器 `calculator` 和 `github`。\n\n默认情况下，没有任何 MCP 客户端可以访问这些服务器。**您必须在 mcpjungle 中创建一个 MCP 客户端，并显式允许其访问这些 MCP 服务器。**\n\n```bash\n# 为您的 Cursor IDE 创建一个新的 MCP 客户端，使其能够访问 calculator 和 github MCP 服务器\nmcpjungle create mcp-client cursor-local --allow \"calculator, github\"\n\nMCP 客户端 'cursor-local' 已成功创建！\n可访问的服务器：calculator, github\n\n访问令牌：1YHf2LwE1LXtp5lW_vM-gmdYHlPHdqwnILitBhXE4Aw\n请在 `Authorization: Bearer {token}` HTTP 头部中发送此令牌。\n```\n\nMcpjungle 会为您的客户端生成一个访问令牌。请配置您的客户端或代理，在向 mcpjungle 代理发送请求时，将此令牌包含在 `Authorization` 头部中。\n\n> [!TIP]\n> 您还可以使用 `--access-token` 标志为您的 MCP 客户端和用户账户提供自定义访问令牌。这在您希望自行管理令牌时很有用，例如通过中央身份服务器。\n\n例如，您可以在 Cursor 中添加以下配置以连接到 MCPJungle：\n\n```json\n{\n  \"mcpServers\": {\n    \"mcpjungle\": {\n      \"url\": \"http:\u002F\u002Flocalhost:8080\u002Fmcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer 1YHf2LwE1LXtp5lW_vM-gmdYHlPHdqwnILitBhXE4Aw\"\n      }\n    }\n  }\n}\n```\n\n以这种方式获得特定服务器访问权限的客户端，可以查看并调用该服务器提供的所有工具。\n\n> [!NOTE]\n> 如果您未指定 `--allow` 标志，该 MCP 客户端将无法访问任何 MCP 服务器。\n\n#### 从配置文件创建 MCP 客户端\n您也可以通过提供 JSON 配置文件来创建 MCP 客户端：\n```json\n{\n\t\"name\": \"foobar\",\n\t\"allowed_servers\": [\"deepwiki\", \"time\"],\n\t\"access_token\": \"my_secret_token_123\",\n    \"access_token_ref\": {\n        \"file\": \"\u002Fpath\u002Fto\u002Ftoken-file.txt\",\n        \"env\": \"ENV_VAR_NAME\"\n    }\n}\n```\n\n从配置文件创建客户端时，**必须**提供自定义访问令牌，因为 mcpjungle 无法将生成的令牌打印到控制台。\n\n#### 在配置文件中提供自定义访问令牌\n从配置文件中提供访问令牌有三种方式：\n\n1. 直接在 `access_token` 字段中：仅用于测试目的。不建议在生产环境中使用，尤其是在您将配置文件提交到版本控制系统时。\n2. 使用 `access_token_ref.file` 字段从文件中读取：文件中应仅包含令牌字符串。\n3. 使用 `access_token_ref.env` 字段从环境变量中读取：环境变量中应包含令牌字符串。\n\n您还可以在同一 JSON 配置文件中的其他位置使用 `${VAR_NAME}` 占位符。例如：\n\n```json\n{\n  \"name\": \"${MCP_CLIENT_NAME}\",\n  \"allowed_servers\": [\"${PRIMARY_SERVER}\", \"time\"],\n  \"access_token_ref\": {\n    \"env\": \"CLIENT_TOKEN_ENV_NAME\"\n  }\n}\n```\n\n#### 创建用户账户\n除了 MCP 客户端之外，您还可以在 mcpjungle 中为人类用户创建用户账户。\n\n与 enterprise 模式下的管理员相比，用户的权限非常有限。例如，他们可以查看和使用 MCP 服务器，但没有在 mcpjungle 中的写入权限。\n\n```bash\n# 自动为用户生成一个秘密\nmcpjungle create user bob\n# 为用户指定自定义访问令牌\nmcpjungle create user alice --access-token alice_token_123\n# 从配置文件创建用户\nmcpjungle create user --conf \u002Fpath\u002Fto\u002Fuser-config.json\n```\n\n创建用户时使用的配置文件格式与创建 MCP 客户端时类似：\n```json\n{\n    \"name\": \"charlie\",\n    \"access_token\": \"charlies_secret_token\",\n    \"access_token_ref\": {\n        \"file\": \"\u002Fpath\u002Fto\u002Ftoken-file.txt\",\n        \"env\": \"ENV_VAR_NAME\"\n    }\n}\n```\n\n同样，使用配置文件时，**必须**提供自定义访问令牌。\n\n与 mcpjungle 中的其他 JSON 配置文件一样，用户配置文件也支持在字符串字段中使用 `${VAR_NAME}` 占位符。\n\n### OpenTelemetry\nMCPJungle 支持与 Prometheus 兼容的 OpenTelemetry 指标，用于可观ability。\n\n- 在 `enterprise` 模式下，OpenTelemetry 默认启用。\n- 在 `development` 模式下，遥测默认禁用。您可以通过在启动服务器之前将 `OTEL_ENABLED` 环境变量设置为 `true` 来启用它：\n\n```bash\n# 启用 OpenTelemetry 指标\nexport OTEL_ENABLED=true\n\n# 可选地，设置要添加到所有指标的额外属性\nexport OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=enterprise\n\n# 启动服务器\nmcpjungle start\n```\n\n一旦 mcpjungle 服务器启动，指标就可以在 `\u002Fmetrics` 端点访问了。\n\n# 当前限制 🚧\n我们还不完美，但正在努力改进！\n\n### 1. MCPJungle 目前尚不支持 OAuth 流程进行身份验证\n这仍在开发中。\n\n我们正在收集更多关于用户如何将 OAuth 与 MCP 服务器一起使用的信息，因此欢迎发起讨论或提交问题，分享您的使用场景。\n\n# 贡献 💻\n\n我们欢迎社区的贡献！\n\n- **有关贡献指南和规范**，请参阅 [CONTRIBUTION.md](.\u002FCONTRIBUTION.md)\n- **有关开发环境搭建和技术细节**，请参阅 [DEVELOPMENT.md](.\u002FDEVELOPMENT.md)\n\n加入我们的 [Discord 社区](https:\u002F\u002Fdiscord.gg\u002FCapV4Z3krk)，与其他贡献者和维护者交流互动。","# MCPJungle 快速上手指南\n\nMCPJungle 是一个开源的、可自托管的 MCP（Model Context Protocol）网关。它允许开发者在一个中心位置注册和管理多个 MCP 服务器，并让 AI 代理（如 Claude、Cursor）通过连接这一个网关来发现和使用所有已注册的工具。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**: macOS, Linux 或 Windows (需支持 Docker)。\n    *   *注意*: 在 macOS 上，由于二进制文件尚未公证，强烈建议通过 Homebrew 安装。\n*   **运行时依赖**:\n    *   **Docker & Docker Compose**: 推荐用于快速部署服务端（最简便方式）。\n    *   **Node.js**: 如果需要在本地直接运行二进制文件或作为客户端连接，建议安装。\n*   **网络要求**: 确保端口 `8080` 未被占用（默认服务端口）。\n\n## 安装步骤\n\nMCPJungle 采用客户端 - 服务器架构。你需要分别启动**服务端**（网关）和安装**客户端 CLI**（用于管理注册）。\n\n### 1. 启动 MCPJungle 服务端 (推荐使用 Docker)\n\n这是最快启动网关的方式，会自动配置数据库。\n\n```bash\n# 下载 docker-compose 配置文件\ncurl -O https:\u002F\u002Fraw.githubusercontent.com\u002Fmcpjungle\u002FMCPJungle\u002Frefs\u002Fheads\u002Fmain\u002Fdocker-compose.yaml\n\n# 启动服务 (后台运行)\ndocker compose up -d\n```\n\n启动后，可以通过以下命令验证服务是否正常运行：\n```bash\ncurl http:\u002F\u002Flocalhost:8080\u002Fhealth\n```\n\n> **提示**: 如果你需要注册基于 `stdio` 的本地 MCP 服务器（如依赖 `npx` 或 `uvx` 的工具），请使用 `latest-stdio` 标签镜像：\n> `MCPJUNGLE_IMAGE_TAG=latest-stdio docker compose up -d`\n\n### 2. 安装 MCPJungle 客户端 CLI\n\nCLI 工具用于向网关注册新的 MCP 服务器。\n\n**macOS (推荐):**\n```bash\nbrew install mcpjungle\u002Fmcpjungle\u002Fmcpjungle\n```\n\n**其他方式:**\n您可以直接从 [GitHub Releases](https:\u002F\u002Fgithub.com\u002Fmcpjungle\u002FMCPJungle\u002Freleases) 页面下载对应平台的二进制文件。\n\n验证安装：\n```bash\nmcpjungle version\n```\n\n## 基本使用\n\n以下流程将演示如何注册一个远程 MCP 服务器，并配置 Claude 通过 MCPJungle 调用其工具。\n\n### 第一步：注册 MCP 服务器\n\n假设我们要注册一个名为 `context7` 的远程文档查询服务。使用 CLI 将其添加到网关中：\n\n```bash\nmcpjungle register --name context7 --url https:\u002F\u002Fmcp.context7.com\u002Fmcp\n```\n\n注册成功后，MCPJungle 会自动获取该服务器提供的工具列表。你可以使用以下命令查看已注册的工具：\n\n```bash\nmcpjungle list tools\n```\n\n### 第二步：配置 AI 客户端 (以 Claude Desktop 为例)\n\n现在，你只需要让 AI 客户端连接到 MCPJungle 这**一个**端点，即可访问所有已注册的工具。\n\n打开 Claude Desktop 的配置文件 (`claude_desktop_config.json`)，添加以下配置：\n\n```json\n{\n  \"mcpServers\": {\n    \"mcpjungle\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"http:\u002F\u002Flocalhost:8080\u002Fmcp\",\n        \"--allow-http\"\n      ]\n    }\n  }\n}\n```\n\n*注意：如果你的 MCPJungle 部署在远程服务器，请将 `localhost` 替换为相应的 IP 地址。*\n\n### 第三步：测试调用\n\n重启 Claude Desktop，然后在对话框中输入以下指令进行测试：\n\n```text\nUse context7 to get the documentation for `\u002Flodash\u002Flodash`\n```\n\nClaude 将通过 MCPJungle 网关调用 `context7__get-library-docs` 工具，并返回 Lodash 库的文档。\n\n---\n\n**核心概念提示：**\n在 MCPJungle 中调用工具时，必须使用规范名称格式：`\u003C服务器名称>__\u003C工具名称>`（例如：`context7__get-library-docs`）。这是区分不同服务器下同名工具的关键。","某中型金融科技公司的后端团队正在构建一个内部 AI 助手，需要让 Claude 和 Cursor 同时调用数据库查询、日志分析及合规检查等多个私有 MCP 服务。\n\n### 没有 MCPJungle 时\n- **配置繁琐且易错**：每位开发者需在 Claude、Cursor 等不同客户端中重复配置所有 MCP 服务器的连接信息，一旦服务地址变更，需手动更新所有终端配置。\n- **权限管理缺失**：无法精细控制哪些 AI 代理能访问敏感的数据库工具，存在数据泄露风险，只能依赖网络层面的粗粒度隔离。\n- **监控盲区**：缺乏统一视图来追踪哪个 Agent 调用了什么工具、频率如何，出现异常调用时难以快速定位源头。\n- **资源浪费**：每个客户端都独立维持与多个后端服务的长连接，导致服务器连接数激增，冷启动延迟明显。\n\n### 使用 MCPJungle 后\n- **统一接入入口**：开发者只需在各类 AI 客户端中配置唯一的 MCPJungle 网关地址，即可自动发现并调用所有已注册的内部工具，运维效率大幅提升。\n- **细粒度访问控制**：通过 MCPJungle 内置的鉴权模块，可精确设定“合规检查工具”仅对审计类 Agent 开放，从应用层保障数据安全。\n- **全链路可观测**：管理员能在中央控制台实时查看工具调用日志与流量分布，迅速识别并阻断异常的批量查询行为。\n- **连接复用优化**：MCPJungle 作为中间层复用后端连接，显著降低服务器负载，解决了多客户端并发时的冷启动卡顿问题。\n\nMCPJungle 将分散杂乱的 MCP 生态整合为企业级可控的统一能力底座，让 AI 代理的安全落地变得简单高效。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmcpjungle_MCPJungle_4019b5e7.png","mcpjungle","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fmcpjungle_832366a7.png","Self-hosted MCP Registry and Proxy for enterprise AI Agents",null,"mcpjungle@gmail.com","https:\u002F\u002Fgithub.com\u002Fmcpjungle",[80,84,87],{"name":81,"color":82,"percentage":83},"Go","#00ADD8",97.8,{"name":85,"color":86,"percentage":32},"Shell","#89e051",{"name":88,"color":89,"percentage":90},"Dockerfile","#384d54",0.2,963,128,"2026-04-15T07:38:07","MPL-2.0","Linux, macOS","未说明",{"notes":98,"python":96,"dependencies":99},"该工具为自托管 MCP 网关，主要以独立二进制文件或 Docker 容器形式运行。macOS 用户必须通过 Homebrew 安装，因为预编译二进制尚未进行苹果公证。若需注册基于 stdio 的 MCP 服务器（依赖 npx 或 uvx），建议使用标记为 'stdio' 的 Docker 镜像，该镜像体积较大但包含必要依赖。生产环境部署建议搭配独立的 PostgreSQL 集群使用。",[100,101,102,103,104],"Docker","Docker Compose","PostgreSQL (推荐) 或 SQLite","Node.js (用于 npx)","Homebrew (macOS 安装必需)",[13,35],[107,108,109,110,111,112,113,114,115],"ai-agents","model-context-protocol","infrastructure","mcp-gateway","mcp","mcp-server","self-hosted","llmops","mcp-registry","2026-03-27T02:49:30.150509","2026-04-17T08:25:26.981225",[119,124,129,134,138,143],{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},37012,"如何在 Docker 中部署 MCPJungle 并解决架构不匹配及缺少 SSL 证书的问题？","官方镜像 `duaraghav8\u002Fmcpjungle:latest` 仅支持 `arm64` 架构。若在 `amd64` 机器上运行，需下载二进制文件并使用 Dockerfile 自行构建。\n此外，由于基础镜像使用 `FROM scratch`，容器内缺少 SSL 证书导致无法连接 HTTPS 远程服务器。解决方案是将基础镜像替换为 `FROM cgr.dev\u002Fchainguard\u002Fwolfi-base`（类似 Alpine 但使用 glibc 且更安全），或者在构建过程中从其他镜像复制 SSL 证书，亦或直接从宿主机挂载证书。","https:\u002F\u002Fgithub.com\u002Fmcpjungle\u002FMCPJungle\u002Fissues\u002F4",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},37013,"使用 CLI 工具时，如何针对特定的 Group（组）列出或调用工具？","在使用 CLI 进行细粒度配置时，必须通过 `--registry` 标志指定组的端点地址。例如：\n- 列出工具：`mcpjungle --registry \"http:\u002F\u002Flocalhost:8080\u002Fv0\u002Fgroups\u002Fdummy-test\u002Fmcp\" list tools`\n- 调用工具：`mcpjungle --registry \"http:\u002F\u002Flocalhost:8080\u002Fv0\u002Fgroups\u002Fdummy-test\u002Fmcp\" invoke \"tool_name\"`\n注意：不要省略 `--registry` 标志，否则无法访问特定组内的工具。该功能已在 v0.2.7 版本中发布。","https:\u002F\u002Fgithub.com\u002Fmcpjungle\u002FMCPJungle\u002Fissues\u002F112",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},37014,"如何通过 Admin API 或 CLI 创建带有特定 Token 的 MCP 客户端？","项目已支持通过 Admin API 和 CLI 可选地创建带有特定 Token 的 MCP 客户端，这避免了在下游系统配置时手动更新客户端信息的需求。此外，从 v0.2.22 版本开始，该功能也支持为用户账户（user accounts）创建特定 Token。对于“配置即代码”场景，也可以参考通过配置文件创建客户端和用户的功能（Issue #161）。","https:\u002F\u002Fgithub.com\u002Fmcpjungle\u002FMCPJungle\u002Fissues\u002F151",{"id":135,"question_zh":136,"answer_zh":137,"source_url":123},37015,"为什么连接 Hugging Face MCP 服务器时会遇到速率限制或延迟？","基准测试显示，使用 `https:\u002F\u002Fhf.co\u002Fmcp` 会遇到速率限制，而使用 `https:\u002F\u002Fhuggingface.co\u002Fmcp` 则通常不会。这并非 MCPJungle 工具本身的问题，而是 Hugging Face MCP 服务器端的容量限制或故意限速所致（可能因为尚未完全准备好生产环境使用）。建议尝试切换域名或使用其他经过认证的 MCP 服务器进行测试。",{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},37016,"在 macOS 上使用 Claude 或 VSCode 连接 MCPJungle 失败怎么办？","MCPJungle 目前仅支持 Streamable HTTP 传输协议。由于 Claude 原生不支持 SHTTP，必须通过 `mcp-remote` 进行连接。配置时需确保 `args` 中包含 `--allow-http` 以允许本地 HTTP 连接。\n如果仍然失败，可能是因为工具名称中的分隔符问题。维护者已将分隔符从 `\u002F` 更改为 `___`（三个下划线）以提高兼容性，该修复已在后续版本中发布。请确保使用最新版本的 MCPJungle 和正确的工具命名格式。","https:\u002F\u002Fgithub.com\u002Fmcpjungle\u002FMCPJungle\u002Fissues\u002F11",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},37017,"想要贡献代码前有什么建议或流程需要注意？","在提交重大变更的 Pull Request (PR) 之前，建议先发起一个 Discussion（讨论），以便与社区对齐计划进行的更改。这样可以避免开发者投入大量精力后，发现该功能并非当前的优先事项。项目鼓励从小处着手，即使是不完整的测试用例或小的改进也是很好的第一步。","https:\u002F\u002Fgithub.com\u002Fmcpjungle\u002FMCPJungle\u002Fissues\u002F45",[149,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222,226],{"id":150,"version":151,"summary_zh":152,"released_at":153},297450,"0.3.7","\n","2026-04-08T21:08:20",{"id":155,"version":156,"summary_zh":152,"released_at":157},297451,"0.3.6","2026-03-13T14:06:37",{"id":159,"version":160,"summary_zh":152,"released_at":161},297452,"0.3.5","2026-03-01T16:28:39",{"id":163,"version":164,"summary_zh":152,"released_at":165},297453,"0.3.4","2026-02-10T18:19:04",{"id":167,"version":168,"summary_zh":152,"released_at":169},297454,"0.3.3","2026-02-09T16:11:53",{"id":171,"version":172,"summary_zh":152,"released_at":173},297455,"0.3.2","2026-01-21T06:10:53",{"id":175,"version":176,"summary_zh":152,"released_at":177},297456,"0.3.1","2026-01-14T06:07:12",{"id":179,"version":180,"summary_zh":152,"released_at":181},297457,"0.3","2026-01-12T12:06:48",{"id":183,"version":184,"summary_zh":152,"released_at":185},297458,"0.2.22","2026-01-10T07:39:22",{"id":187,"version":188,"summary_zh":152,"released_at":189},297459,"0.2.21","2026-01-08T19:10:37",{"id":191,"version":192,"summary_zh":152,"released_at":193},297460,"0.2.20","2026-01-05T12:34:05",{"id":195,"version":196,"summary_zh":152,"released_at":197},297461,"0.2.19","2025-12-31T07:57:30",{"id":199,"version":200,"summary_zh":152,"released_at":201},297462,"0.2.18","2025-12-11T09:49:47",{"id":203,"version":204,"summary_zh":152,"released_at":205},297463,"0.2.17","2025-12-09T21:11:41",{"id":207,"version":208,"summary_zh":152,"released_at":209},297464,"0.2.16","2025-10-23T14:00:17",{"id":211,"version":212,"summary_zh":152,"released_at":213},297465,"0.2.15","2025-10-08T08:51:44",{"id":215,"version":216,"summary_zh":152,"released_at":217},297466,"0.2.14","2025-10-03T21:55:08",{"id":219,"version":220,"summary_zh":152,"released_at":221},297467,"0.2.13","2025-09-30T15:55:20",{"id":223,"version":224,"summary_zh":152,"released_at":225},297468,"0.2.12","2025-09-28T13:39:12",{"id":227,"version":228,"summary_zh":152,"released_at":229},297469,"0.2.11","2025-09-27T20:07:26"]