mcpField
🌳
🌳 MCPJungle 🌳

🌳 MCPJungle 🌳

本地服务
docs.mcpjungle.comAI 与智能体1.3k2 天前更新

关于 🌳 MCPJungle 🌳

MCPJungle 是可自托管的 MCP 网关,用于统一管理多个 MCP 服务。个人可在本地使用,团队可将其作为共享基础设施,集中发现工具、控制访问并观察调用情况。

主要功能

  1. 01单一 MCP 端点对接所有已注册服务
  2. 02集中注册与管理 MCP 服务
  3. 03统一发现工具、提示词和资源
  4. 04分组工具,仅向客户端暴露所需工具
  5. 05支持 Docker Compose 与 PostgreSQL 部署

适用场景

  1. 01将 Claude、Cursor 等客户端统一连接到一个端点
  2. 02团队共享 MCP 服务并集中管理访问控制
  3. 03在本地快速复现个人 MCP 配置

MCP 相关

MCPJungle 作为 MCP 服务端网关运行,通过 streamable HTTP 的 /mcp 端点向客户端暴露所有已注册服务的工具。它负责连接和管理 stdio 与 HTTP 类型的 MCP 服务。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"MCPJungle": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"compose"
]
}
}
}
启动命令docker run -i --rm compose

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocicompose

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCPJungle

通过一个端点运行所有 MCP 服务

文档 GHCR Discord

MCPJungle 是一款可自托管的 MCP 网关,适用于希望管理多个 MCP 服务、避免客户端配置分散、设置重复或访问控制不一致的开发者和团队。

你可以在本地使用它,让个人 MCP 配置保持整洁;也可以将它作为共享基础设施运行,为团队提供集中式发现、访问控制和可观测性。

示意图

无需将每个 MCP 服务分别接入每个 AI 客户端,只需在 MCPJungle 中注册一次服务,即可让 Claude、Cursor、Codex 或你自己的 Agent 连接到单个 MCP 端点。

为什么选择 MCPJungle?

MCP 功能强大,但管理多个 MCP 服务很快就会变得混乱。

没有网关时:

  • 🔌 每个客户端都需要单独配置 MCP 服务
  • 🧩 工具、提示词和资源分散在不同的服务中
  • 🔐 访问控制重复配置或完全缺失
  • 👥 团队无法共享查看可用 MCP 工具
  • 🛠️ 本地配置难以复现

MCPJungle 为你提供一个统一的控制点:

  • 🌐 为 Claude、Cursor、Copilot 和自定义 Agent 提供一个 MCP 端点
  • 🗂️ 在一个地方注册和管理 MCP 服务
  • 🔎 统一发现工具、提示词和资源
  • 🎛️ 可选的工具组,仅向客户端开放其应查看的工具
  • 📊 为共享部署提供简单的访问控制和可观测性接口

从本地配置开始,需要时再扩展为团队共享网关。

MCPJungle 仪表板界面

文档

Mcpjungle 文档已迁至新地址:https://docs.mcpjungle.com。

获取最新指南、参考资料和运维详情时,请优先查看文档网站,而非此 README。

你的 AI 客户端也可以通过 MCP 服务 https://docs.mcpjungle.com/mcp 访问文档!

快速入门

本快速入门指南将介绍如何:

  1. 使用 docker compose 在本地启动 mcpjungle 服务
  2. 在 mcpjungle 中添加 MCP 服务
  3. 将 Claude Desktop 连接到 mcpjungle,以使用 MCP 工具
启动服务

获取 docker-compose.yaml 并启动 mcpjungle 服务:

curl -O https://raw.githubusercontent.com/mcpjungle/MCPJungle/refs/heads/main/docker-compose.yaml
docker compose up -d

默认情况下,这会在 http://localhost:8080/mcp 暴露 mcpjungle 的可流式 HTTP MCP 服务。

添加 MCP 服务
  1. 在本地计算机上通过 brew 或直接从发布页面下载 mcpjungle CLI。
brew install mcpjungle/mcpjungle/mcpjungle
  1. 使用 CLI 将 context7 MCP 服务添加到 mcpjungle:
mcpjungle register --name context7 --url https://mcp.context7.com/mcp

你应该会看到类似以下内容的输出:

注册 context7

连接到 mcpjungle

在 Claude Desktop 中,添加 mcpjungle MCP 服务的配置:

{
  "mcpServers": {
    "mcpjungle": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://localhost:8080/mcp",
        "--allow-http"
      ]
    }
  }
}

添加配置后,尝试向 claude 提出一个简单的问题:

Use context7 to get the documentation for `/lodash/lodash`

随后,Claude 会尝试通过 MCPJungle 调用 context7__get-library-docs 工具,该工具会返回 Lodash 库的文档。

claude 通过 mcpjungle 调用 context7 工具

现在,你已经拥有一个可用的 MCP 配置,并且只有一个统一的端点!

接下来,请查阅完整文档:docs.mcpjungle.com,以及公开路线图。


旧版 README 参考

📋 目录

安装

MCPJungle 以独立二进制文件的形式发布。

你可以从 Releases 页面下载,也可以使用 Homebrew 安装:

brew install mcpjungle/mcpjungle/mcpjungle

运行以下命令,验证安装:

mcpjungle version

重要

在 MacOS 上,你必须使用 Homebrew,因为编译后的二进制文件尚未通过公证。

MCPJungle 提供了一个 Docker 镜像,可用于运行注册表服务(稍后将详细介绍)。

docker pull ghcr.io/mcpjungle/mcpjungle

使用

MCPJungle 采用客户端-服务端架构,其二进制文件可用于运行服务端和客户端。

服务端

MCPJungle 服务端负责管理其中注册的所有 MCP 服务,并提供统一的 MCP 网关,供 AI Agent 发现并调用这些已注册服务提供的工具。

网关通过可流式传输的 HTTP 传输协议运行,可通过 /mcp 端点访问。

在 Docker 中运行

在本地运行 MCPJungle 服务时,推荐使用 docker compose:

# docker-compose.yaml is optimized for individuals running mcpjungle on their local machines for personal use.
# mcpjungle will run in `development` mode by default.
curl -O https://raw.githubusercontent.com/mcpjungle/MCPJungle/refs/heads/main/docker-compose.yaml

docker compose up -d

# docker-compose.prod.yaml is optimized for orgs deploying mcpjungle on a remote server for multiple users.
# mcpjungle will run in `enterprise` mode by default, which enables enterprise features.
curl -O https://raw.githubusercontent.com/mcpjungle/MCPJungle/refs/heads/main/docker-compose.prod.yaml

docker compose -f docker-compose.prod.yaml up -d

说明

enterprise 模式以前称为 production 模式。 为了更清晰,现已重命名此模式。其他一切保持不变。

这将启动 MCPJungle 服务,并同时启动一个持久化的 Postgres 数据库容器。

你可以快速确认服务是否正在运行:

curl http://localhost:8080/health

如果你计划注册依赖 npx 或 uvx 的 stdio 型 MCP 服务,请改用 mcpjungle 的 stdio 标签 Docker 镜像。

MCPJUNGLE_IMAGE_TAG=latest-stdio docker compose up -d

说明

如果你使用的是 docker-compose.yaml,默认镜像标签已经是此标签。 只有在使用 docker-compose.prod.yaml 时,才需要指定 stdio 镜像标签。

此镜像明显更大。但如果你依赖 stdio 型 MCP 服务,在本地运行时使用此镜像会非常方便,也值得推荐。

例如,如果你只想注册 context7 和 deepwiki 这类远程 MCP 服务,可以使用标准(精简版)镜像。

但如果你还想使用 filesystem、time、github 等 stdio 型服务,则应改用带 stdio 标签的镜像。

说明

如果你的 stdio 服务依赖 npx 或 uvx 之外的工具,则必须创建自定义 Docker 镜像,在其中加入这些依赖和 mcpjungle 二进制文件。

生产部署

默认的 MCPJungle Docker 镜像非常轻量——只包含一个最精简的基础镜像和 mcpjungle 二进制文件。

因此,它适用于生产部署,也值得推荐用于生产部署。

对于数据库,我们建议你单独部署一个 Postgres DB 集群,并将其端点提供给 mcpjungle(参见下文的数据库部分)。

你可以查看标准 Docker 镜像和 stdio Docker 镜像的定义。

直接在主机上运行

你也可以使用二进制文件直接在主机上运行服务:

mcpjungle start

这将启动主注册服务和 MCP 网关,默认可通过端口 8080 访问。

关闭

mcpjungle 服务必须正常关闭,以确保妥善完成清理工作。

停止服务进程的推荐方式是向其发送 SIGTERM 信号。

数据库

mcpjungle 服务依赖数据库,默认会在当前工作目录中创建一个 SQLite DB 文件 mcpjungle.db。

仅在本地进行测试时,这样做没有问题。

如果未提供 PostgreSQL 配置或自定义 SQLite 路径,mcpjungle 会使用 ./mcpjungle.db。

你也可以选择为 SQLite DB 文件设置自定义路径:

mcpjungle start --sqlite-db-path ./.mcpjungle.db

# or
export SQLITE_DB_PATH=/path/to/.mcpjungle.db
mcpjungle start

注意:删除该 SQLite 文件会移除其中注册的所有服务数据以及其他 MCPJungle 状态。

对于更正式的部署,mcpjungle 也支持 Postgresql。你可以提供 DSN 来连接数据库:

# You can supply the database DSN as an env var
export DATABASE_URL=postgres://admin:root@localhost:5432/mcpjungle_db

#run as container
docker run ghcr.io/mcpjungle/mcpjungle:latest

# or run directly
mcpjungle start

如果你不想使用 DSN,也可以提供 Postgres 专用的环境变量或文件:

# host is mandatory if you're using postgres-specific env vars
export POSTGRES_HOST=localhost
export POSTGRES_PORT=5432

export POSTGRES_USER=admin
export POSTGRES_USER_FILE=/path/to/user-file

export POSTGRES_PASSWORD=secret
export POSTGRES_PASSWORD_FILE=/path/to/password-file

export POSTGRES_DB=mcpjungle_db
export POSTGRES_DB_FILE=/path/to/db-file

mcpjungle start

客户端

服务启动后,你可以使用 mcpjungle CLI 与其交互。

MCPJungle 目前支持使用 stdio 和 Streamable HTTP 传输的 MCP 服务。

说明

目前也支持 SSE(服务器发送事件),但尚未成熟。

接下来看看如何在 mcpjungle 中注册这些服务。

注册基于可流式传输 HTTP 的服务

假设你已经在本地运行了一个基于可流式传输 HTTP 的 MCP 服务,地址为 http://127.0.0.1:8000/mcp,它提供 add、subtract 等基本数学工具。

你可以将此 MCP 服务注册到 MCPJungle:

mcpjungle register --name calculator --description "Provides some basic math tools" --url http://127.0.0.1:8000/mcp

如果你使用 docker compose 运行服务,并且使用的不是 Linux,则必须使用 host.docker.internal,而不是本地环回地址。

mcpjungle register --name calculator --description "Provides some basic math tools" --url http://host.docker.internal:8000/mcp

注册表现在将开始跟踪此 MCP 服务并加载其工具。

在 MCPJungle 中注册 MCP 服务

你也可以提供配置文件来注册 MCP 服务:

cat ./calculator.json
{
  "name": "calculator",
  "transport": "streamable_http",
  "description": "Provides some basic math tools",
  "url": "http://127.0.0.1:8000/mcp"
}

mcpjungle register -c ./calculator.json

现在可以通过 MCPJungle 访问此服务提供的所有工具:

mcpjungle list tools

# Check tool usage
mcpjungle usage calculator__multiply

# Call a tool
mcpjungle invoke calculator__multiply --input '{"a": 100, "b": 50}'

通过 MCPJungle Proxy MCP 服务调用工具

说明

在 MCPJungle 中引用工具时,必须使用其规范名称,格式为 <mcp-server-name>__<tool-name>。 服务名称和工具名称之间用双下划线 __ 分隔。

例如,如果你注册了一个名为 github 的 MCP 服务,该服务提供名为 git_commit 的工具,则可以在 MCPJungle 中使用名称 github__git_commit 调用它。

MCP 客户端也必须使用此规范名称,通过 MCPJungle 调用该工具。

注册基于 Streamable HTTP 的 MCP 服务所用的配置文件格式为:

{
  "name": "<name of your mcp server>",
  "transport": "streamable_http",
  "description": "<description>",
  "url": "<url of the mcp server>",
  "bearer_token": "<optional bearer token for authentication>",
  "headers": {
    "<custom http header>": "<value>"
  }
}
注册基于 STDIO 的服务

以下是一个使用 STDIO 传输的 MCP 服务的示例配置文件(假设文件名为 filesystem.json):

{
  "name": "filesystem",
  "transport": "stdio",
  "description": "filesystem mcp server",
  "command": "npx",
  "args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
}

你可以提供配置文件,在 MCPJungle 中注册此 MCP 服务:

# Save the JSON configuration to a file (e.g., filesystem.json)
mcpjungle register -c ./filesystem.json

注册基于 STDIO 的 MCP 服务所用的配置文件格式为:

{
  "name": "<name of your mcp server>",
  "transport": "stdio",
  "description": "<description>",
  "command": "<command to run the mcp server, eg- 'npx', 'uvx'>",
  "args": ["arguments", "to", "pass", "to", "the", "command"],
  "env": {
    "KEY": "value"
  }
}

你也可以观看这个简短视频:如何注册基于 STDIO 的 MCP 服务。

提示

如果你的 STDIO 服务失败或因某些原因报错,请检查 mcpjungle 服务的日志,查看其 stderr 输出。

JSON 配置文件中的环境变量

使用 JSON 配置文件注册 MCP 服务或创建工具组等其他实体时,CLI 可以在发送请求前解析字符串值中的环境变量占位符。

  • 只有 ${VAR_NAME} 格式的占位符才会被解析。
  • 占位符可以出现在字符串值的任意位置,例如 prefix-${VAR_NAME}-suffix。
  • 解析过程在 CLI 进程中进行,因此运行命令的环境中必须提供该环境变量。
  • 如果未设置引用的环境变量,命令将报错失败。
  • 这适用于 JSON 配置中的字符串字段,包括嵌套对象和字符串数组。

MCP 服务配置示例:

{
  "name": "affine-main",
  "transport": "streamable_http",
  "description": "AFFiNE workspace MCP server",
  "url": "https://app.affine.pro/api/workspaces/${AFFINE_WORKSPACE_ID}/mcp",
  "bearer_token": "${AFFINE_API_TOKEN}",
  "headers": {
    "X-Workspace": "${AFFINE_WORKSPACE_ID}"
  }
}

STDIO 配置示例:

{
  "name": "my-stdio-server",
  "transport": "stdio",
  "command": "uvx",
  "args": ["my-server", "--workspace", "${WORKSPACE_ID}"],
  "env": {
    "API_TOKEN": "${API_TOKEN}"
  }
}

注意事项 ⚠️

在 Docker 中运行 mcpjungle 时,需要进行一些额外配置才能运行 filesystem MCP 服务。

默认情况下,容器中的 mcpjungle 无法访问主机文件系统。

因此,你必须:

  • 将要访问的主机目录作为卷挂载到容器中
  • 在 filesystem MCP 服务的命令参数中指定挂载路径作为目录

mcpjungle 提供的 docker-compose.yaml 会将当前工作目录挂载到容器中的 /host。

因此,你可以为 filesystem MCP 服务使用以下配置:

{
  "name": "filesystem",
  "transport": "stdio",
  "command": "npx",
  "args": ["-y", "@modelcontextprotocol/server-filesystem", "/host"]
}

这样,MCP 就可以访问 /host,即主机上的当前工作目录。

如需了解更多详情,请参阅 DEVELOPMENT.md。

从 Docker 或 Kubernetes 部署中运行 CLI 命令

如果你的 MCPJungle 服务运行在远程 Docker 容器或 Kubernetes 集群中,也可以直接在容器内执行 mcpjungle 二进制文件:

docker exec -it <container_name> /mcpjungle
kubectl -n <namespace> exec -it po/<pod_name> -- /mcpjungle

说明

标准镜像不包含 shell。请通过 docker exec 或 kubectl exec 直接运行 /mcpjungle。

这对于在服务运行的同一环境中执行 CLI 命令很有用。

注销 MCP 服务

你可以从 mcpjungle 中移除 MCP 服务。

mcpjungle deregister calculator
mcpjungle deregister filesystem

移除后,你和 MCP 客户端将无法再使用此 MCP 服务及其工具。

配置自定义注册表 URL

默认情况下,CLI 会连接到 http://127.0.0.1:8000 上的 mcpjungle 服务。

如果你的服务运行在其他主机或端口上(例如,远程部署),你可以通过以下两种方式配置注册表 URL:

选项 1:使用 --registry 标志

mcpjungle --registry http://my-server:9000 list tools

选项 2:在配置文件中设置

创建或编辑 ~/.mcpjungle.conf:

registry_url: http://my-server:9000

这样就无需在每条命令中传递 --registry 标志。

冷启动问题与有状态连接

默认情况下,MCPJungle 会在调用工具时,始终与上游 MCP 服务建立新连接。

工具调用完成后,连接会关闭。

这样可以保持系统整洁并避免内存泄漏。

但有时这会带来延迟开销。例如,每次调用基于 STDIO 的 MCP 服务的工具时,都会启动一个新进程。如果服务需要几秒钟才能启动,就会拖慢工具调用和整体交互。

为了解决这个问题,MCPJungle 还支持有状态连接。

你可以在 MCP 服务配置中将 session_mode 设置为 stateful(默认为 stateless):

{
  "name": "filesystem",
  "transport": "stdio",
  "command": "npx",
  "args": ["-y", "@modelcontextprotocol/server-filesystem", "."],
  "session_mode": "stateful"
}

mcpjungle 会在首次调用该 MCP 服务的工具时与其建立新连接。

工具调用完成后,此连接不会关闭。之后对该服务的工具调用会复用同一连接,从而避免冷启动开销。

连接仅在以下情况下关闭:

  1. mcpjungle 服务停止
  2. MCP 服务从 mcpjungle 中注销
  3. 连接在一段时间不活动后超时。你可以使用 SESSION_IDLE_TIMEOUT_SEC 环境变量设置秒数,以便在 mcpjungle 服务中全局配置此项(默认值为 -1,表示无超时)。

建议在条件允许时使用无状态连接(默认设置)。

与其他 MCP 客户端集成

假设 MCPJungle 在 http://localhost:8080 上运行,请使用以下配置连接到它:

Claude
{
  "mcpServers": {
    "mcpjungle": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://localhost:8080/mcp",
        "--allow-http"
      ]
    }
  }
}

你可以观看快速视频:如何将 Cursor 连接到 MCPJungle。

Cursor
{
  "mcpServers": {
    "mcpjungle": {
      "url": "http://localhost:8080/mcp"
    }
  }
}
Copilot

请参阅 Copilot 文档:手动配置 MCP 服务。

将 mcpjungle 添加到 mcp.json 配置文件后,文件内容应如下所示:

{
  "servers": {
    "mcpjungle": {
      "url": "http://localhost:8080/mcp"
    }
  }
}

说明

你可能需要点击 Start,Copilot 才会开始与 mcpjungle 交互。

启用/禁用工具

你可以禁用或重新启用特定工具,或 MCP 服务提供的所有工具。

如果某个工具已禁用,则无法通过 MCPJungle 代理或任何工具组使用,因此 MCP 客户端无法查看或调用它。

你也可以禁用和启用提示词。

# disable the `get-library-docs` tool provided by the `context7` MCP server
mcpjungle disable tool context7__get-library-docs

# re-enable the tool
mcpjungle enable tool context7__get-library-docs

# disable all tools in context7
mcpjungle disable tool context7

# disable the whole `context7` MCP server (disables all tools & prompts)
mcpjungle disable server context7

# re-enable `context7`
mcpjungle enable server context7

# disable a prompt
mcpjungle disable prompt "huggingface_Model Details"

# disable all prompts in context7
mcpjungle disable prompt context7

禁用的工具仍可通过 mcpjungle 的 HTTP API 访问,因此用户仍可通过 CLI(或任何其他 HTTP 客户端)管理它。

说明

在 MCPJungle 中注册新服务时,其所有工具和提示词默认均为启用状态。

提示词

Mcpjungle 支持提示词。

注册新的 MCP 服务时,如果它提供提示词,这些提示词也会注册到 mcpjungle 中。

以下是使用 CLI 与提示词交互的一些示例:

# list all prompts provided by the huggingface mcp
$ mcpjungle list prompts --server huggingface

# Retrieve the "Model Details" prompt, supply custom arguments
$ mcpjungle get prompt "huggingface__Model Details" --arg model_id="openai/gpt-oss-120b"

工具组

随着你向 MCPJungle 添加更多 MCP 服务,通过网关提供的工具数量可能会大幅增加。

如果 MCP 客户端通过网关 MCP 接入数百个工具,其性能可能会下降。

MCPJungle 支持你使用工具组,仅向 MCP 客户端公开所有可用工具的子集。

你可以创建一个新组,并仅添加希望公开的特定工具。

创建组后,mcpjungle 会为其返回一个唯一端点。

然后,你可以将 MCP 客户端配置为使用此组专属端点,而不是主网关端点。

创建工具组

你可以通过向 create group 命令提供 JSON 配置文件来创建新工具组。

你必须为组指定唯一的 name,并使用以下一个或多个字段定义要包含的工具:

  • included_tools:列出要包含的特定工具名称(例如,["filesystem__read_file", "time__get_current_time"])
  • included_servers:包含特定 MCP 服务中的所有工具(例如,["time", "deepwiki"])
  • excluded_tools:排除特定工具(包含整个服务时很有用)
示例 1:精选特定工具

以下是一个工具组配置文件示例(claude-tools-group.json):

{
  "name": "claude-tools",
  "description": "This group only contains tools for Claude Desktop to use",
  "included_tools": [
    "filesystem__read_file",
    "deepwiki__read_wiki_contents",
    "time__get_current_time"
  ]
}

此组仅公开精心挑选的 3 个工具,而非所有可用工具。

示例 2:包含整个服务并排除特定工具

你也可以包含特定服务中的所有工具,并按需排除其中一些:

{
  "name": "claude-tools",
  "description": "All tools from time and deepwiki servers except time__convert_time",
  "included_servers": ["time", "deepwiki"],
  "excluded_tools": ["time__convert_time"]
}

此配置会包含 time 和 deepwiki 服务中的所有工具,但不包含 time__convert_time。

示例 3:混合使用不同方式

你可以组合使用这三个字段,以获得最大的灵活性:

{
  "name": "comprehensive-tools",
  "description": "Mix of manual tools, server inclusion, and exclusions",
  "included_tools": ["filesystem__read_file"],
  "included_servers": ["time"],
  "excluded_tools": ["time__convert_time"]
}

此配置会包含 filesystem__read_file,以及 time 服务中的所有工具,但不包含 time__convert_time。

你可以在 mcpjungle 中创建此组:

$ mcpjungle create group -c ./claude-tools-group.json

Tool Group claude-tools created successfully
It is now accessible at the following streamable http endpoint:

    http://127.0.0.1:8080/v0/groups/claude-tools/mcp

然后,你可以将 Claude(或任何其他 MCP 客户端)配置为使用此组专属端点来访问 MCP 服务。

客户端随后将只能看到并使用这 3 个工具,也不会知道 MCPJungle 中注册的任何其他工具。

提示

你可以运行 mcpjungle list tools 查看所有可用工具,并挑选要包含在组中的工具。

你也可以观看工具组使用视频。

说明

排除操作始终会在最后执行。 因此,如果某个工具同时被添加到 included_tools 并列在 excluded_tools 中,它将从最终组中排除。

限制 🚧

工具组目前不支持提示词。我们正在努力修复此问题 🛠️

管理工具组

目前,你可以执行列出所有组、查看特定组的详细信息以及删除组等操作。

# list all tool groups
mcpjungle list groups

# view details of a specific group
mcpjungle get group claude-tools

# delete a group
mcpjungle delete group claude-tools
使用组内工具

你可以使用 --group 标志列出并调用特定组中的工具:

# list tools in a specific group
mcpjungle list tools --group claude-tools

# invoke a tool from a specific group context
mcpjungle invoke filesystem__read_file --group claude-tools --input '{"path": "README.md"}'

这些命令提供按组范围限定的操作,让你更轻松地在特定上下文中使用工具,并验证组中是否包含可用工具。

说明

如果某个工具已包含在组中,但之后被全局禁用或删除,则无法通过该组的 MCP 端点使用。

但如果之后重新启用或添加该工具,它将自动重新出现在组中。

限制 🚧

  1. 目前无法更新现有工具组。你必须删除该组,并使用修改后的配置文件创建新组。
  2. 在 enterprise 模式下,目前只有管理员可以创建工具组。我们正在努力让普通用户也能创建自己的组。

身份验证

如果你的 Streamable HTTP MCP 服务接受静态令牌进行身份验证,MCPJungle 目前支持身份验证。

使用 HuggingFace、Stripe 等要求 API 令牌进行身份验证的 SaaS 提供商所提供的 MCP 服务时,这项功能很有用。

注册 MCP 服务时,可以提供令牌:

# If you specify the `--bearer-token` flag, MCPJungle will add the `Authorization: Bearer <token>` header to all requests made to this MCP server.
mcpjungle register --name huggingface --description "HuggingFace MCP Server" --url https://huggingface.co/mcp --bearer-token <your-hf-api-token>

也可以在配置文件中提供:

{
  "name": "huggingface",
  "transport": "streamable_http",
  "url": "https://huggingface.co/mcp",
  "description": "hugging face mcp server",
  "bearer_token": "<your-hf-api-token>"
}

如果需要为 Authorization 标头提供自定义值,或添加其他自定义标头,可以在配置文件中使用 headers 字段:

{
  "name": "sourcegraph",
  "transport": "streamable_http",
  "url": "https://sourcegraph.mycompany.com/.api/mcp",
  "headers": {
    "Authorization": "token <your-sourcegraph-token>",
    "Custom-Header": "custom-value"
  }
}

即将支持 OAuth 流程!

企业功能 🔒

如果你在组织中运行 MCPJungle,我们建议以 enterprise 模式运行服务:

# enable enterprise features by running in enterprise mode
mcpjungle start --enterprise

# you can also specify the server mode as environment variable (valid values are `development` and `enterprise`)
export SERVER_MODE=enterprise
mcpjungle start

# Or use the enterprise-mode docker compose file as described above
docker compose -f docker-compose.prod.yaml up -d

默认情况下,mcpjungle 服务以 development 模式运行,这种模式适合个人在本地运行。

在 Enterprise 模式下,服务会实施更严格的安全策略,并提供身份验证、ACL、可观测性等其他功能。

以 enterprise 模式启动服务后,必须在客户端计算机上运行以下命令来初始化服务:

mcpjungle init-server

这将在服务中创建一个管理员用户,并将其 API 访问令牌存储在你的主目录(~/.mcpjungle.conf)中。

然后,你可以使用 mcpjungle cli 向服务发送经过身份验证的请求。

访问控制

在 development 模式下,所有 MCP 客户端都可以完全访问 MCPJungle 代理中注册的所有 MCP 服务。

enterprise 模式允许你控制哪些 MCP 客户端可以访问哪些 MCP 服务。

假设你已在 MCPJungle 的 enterprise 模式下注册了 2 个 MCP 服务:calculator 和 github。

默认情况下,没有任何 MCP 客户端可以访问这些服务。你必须在 mcpjungle 中创建一个 MCP 客户端,并明确允许其访问 MCP 服务。

# Create a new MCP client for your Cursor IDE to use. It can access the calculator and github MCP servers
mcpjungle create mcp-client cursor-local --allow "calculator, github"

MCP client 'cursor-local' created successfully!
Servers accessible: calculator,github

Access token: 1YHf2LwE1LXtp5lW_vM-gmdYHlPHdqwnILitBhXE4Aw
Send this token in the `Authorization: Bearer {token}` HTTP header.

Mcpjungle 会为你的客户端创建一个访问令牌。 配置客户端或 Agent,使其在向 mcpjungle 代理发送请求时,在 Authorization 标头中携带此令牌。

提示

你也可以使用 --access-token 标志,为 MCP 客户端和用户账户提供自定义访问令牌。 如果你想自行管理令牌(例如通过中央身份服务器管理),这会很有用。

例如,你可以在 Cursor 中添加以下配置,以连接到 MCPJungle:

{
  "mcpServers": {
    "mcpjungle": {
      "url": "http://localhost:8080/mcp",
      "headers": {
        "Authorization": "Bearer 1YHf2LwE1LXtp5lW_vM-gmdYHlPHdqwnILitBhXE4Aw"
      }
    }
  }
}

以这种方式获得特定服务访问权限的客户端,可以查看并调用该服务提供的所有工具。

说明

如果未指定 --allow 标志,MCP 客户端将无法访问任何 MCP 服务。

从配置文件创建 MCP 客户端

你也可以通过提供 JSON 配置文件来创建 MCP 客户端:

{
	"name": "foobar",
	"allowed_servers": ["deepwiki", "time"],
	"access_token": "my_secret_token_123",
    "access_token_ref": {
        "file": "/path/to/token-file.txt",
        "env": "ENV_VAR_NAME"
    }
}

从配置文件创建客户端时,必须提供自定义访问令牌,因为 mcpjungle 无法将生成的令牌打印到控制台。

在配置文件中提供自定义访问令牌

可以通过 3 种方式在配置文件中提供访问令牌:

  1. 直接在 access_token 字段中提供:仅用于测试。不建议用于生产环境,尤其是当你要将配置文件提交到版本控制系统时。
  2. 使用 access_token_ref.file 字段从文件中读取:文件中应仅包含令牌字符串。
  3. 使用 access_token_ref.env 字段从环境变量中读取:环境变量中应包含令牌字符串。

你也可以在同一 JSON 配置文件的其他位置使用 ${VAR_NAME} 占位符。例如:

{
  "name": "${MCP_CLIENT_NAME}",
  "allowed_servers": ["${PRIMARY_SERVER}", "time"],
  "access_token_ref": {
    "env": "CLIENT_TOKEN_ENV_NAME"
  }
}
创建用户账户

除了 MCP 客户端外,你还可以在 mcpjungle 中为人类用户创建用户账户。

与企业模式下的管理员相比,用户的权限非常有限。 例如,他们可以查看和使用 MCP 服务,但没有在 mcpjungle 中写入的权限。

# Auto-generates a secret for user
mcpjungle create user bob
# Specify a custom access token for user
mcpjungle create user alice --access-token alice_token_123
# Create user from config file
mcpjungle create user --conf /path/to/user-config.json

创建用户的配置文件格式与 MCP 客户端的类似:

{
    "name": "charlie",
    "access_token": "charlies_secret_token",
    "access_token_ref": {
        "file": "/path/to/token-file.txt",
        "env": "ENV_VAR_NAME"
    }
}

同样,使用配置文件时,你必须提供自定义访问令牌。

与 MCPJungle 中的其他 JSON 配置文件一样,用户配置文件也支持字符串字段中的 ${VAR_NAME} 占位符。

OpenTelemetry

MCPJungle 支持兼容 Prometheus 的 OpenTelemetry 指标,用于可观测性。

  • 在 enterprise 模式下,默认启用 OpenTelemetry。
  • 在 development 模式下,默认禁用遥测。你可以在启动服务前将 OTEL_ENABLED 环境变量设为 true 来启用:
# enable OpenTelemetry metrics
export OTEL_ENABLED=true

# optionally, set additional attributes to be added to all metrics
export OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=enterprise

# start the server
mcpjungle start

mcpjungle 服务启动后,可通过 /metrics 端点获取指标。

当前限制 🚧

我们还不够完善,但正在努力改进!

1. MCPJungle 尚不支持用于身份验证的 OAuth 流程

此功能仍在开发中。

我们正在收集更多关于人们如何将 OAuth 与 MCP 服务结合使用的反馈,欢迎发起讨论或提交 issue,分享你的使用场景。

贡献 💻

我们欢迎社区贡献!

加入我们的 Discord 社区,与其他贡献者和维护者交流。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。