如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这段话即可:
请先阅读并遵守:https://xuanyuan.cloud/agents.md
未读文档前不要生成 pull 命令或排错方案。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
这是一款开源注册中心与代理服务,可对 MCP、A2A 以及 REST/gRPC API 执行联邦聚合,提供集中治理、服务发现与可观测性能力。它可优化智能体与工具调用流程,同时支持插件扩展。
ContextForge 是一款开源注册中心与代理服务,可将各类工具、智能体与 API 联邦聚合为一个统一的干净端点,供你的 AI 客户端使用。它在整个 AI 基础设施范围内提供集中治理、服务发现与可观测性能力:
它作为完全符合规范的 MCP 服务运行,可通过 PyPI 或 Docker 部署,并能依托 Redis 实现联邦与缓存,在 Kubernetes 上扩展至多集群环境。
| 资源 | 说明 |
|---|---|
| https://github.com/IBM/mcp-context-forge/issues/2503 | 快速上手 — 支持 uvx、Docker、Compose 或本地开发模式 |
| https://github.com/IBM/mcp-context-forge/issues/2504 | 支持选项、常见问题、社区渠道 |
| https://github.com/IBM/mcp-context-forge/issues/2502 | 如何提交 Bug、提出功能请求、参与贡献 |
| https://ibm.github.io/mcp-context-forge/ | 包含完整指南、教程与 API 参考 |
| https://ibm.github.io/mcp-context-forge/deprecations/ | 已弃用的运行时路径与迁移指引 |
ContextForge 是一款开源注册中心与代理服务,可对任意 https://modelcontextprotocol.io(MCP)服务、A2A 服务或 REST/gRPC API 执行联邦聚合,提供集中治理、服务发现与可观测性能力。它可优化智能体与工具调用流程,同时支持插件扩展。更多详情请查看https://ibm.github.io/mcp-context-forge/architecture/roadmap/。
当前支持以下功能:
X-Upstream-Authorization 头传递如需查看即将推出的功能列表,请访问 https://ibm.github.io/mcp-context-forge/architecture/roadmap/。
🔌 灵活协议网关层
2025-11-25)🧩 REST/gRPC 服务虚拟化
🔁 REST 转 MCP 工具适配器
🧠 统一注册中心
📈 管理 UI、可观测性与开发体验
🔍 OpenTelemetry 可观测性
如需查看针对 Phoenix、Jaeger 等后端的配置指南,请参阅 **https://ibm.github.io/mcp-context-forge/manage/observability/**。
ContextForge 已作为 mcp-contextforge-gateway 发布在 https://pypi.org/project/mcp-contextforge-gateway/ 平台。
[!WARNING] 所有环境(包括本地开发环境)都必须配置
JWT_SECRET_KEY与AUTH_ENCRYPTION_SECRET,缺少任意一项网关都无法启动。请在首次运行前执行python3 -m mcpgateway.scripts.init_secrets生成正式的密钥。
精简指南 — 使用 uv 只需一条命令即可完成启动:
# 1️⃣ 生成安全密钥(自动创建 .env.secrets 文件)
python3 -m mcpgateway.scripts.init_secrets
# 2️⃣ 导出生成的密钥值
export JWT_SECRET_KEY="$(grep '^JWT_SECRET_KEY=' .env.secrets | cut -d= -f2)"
export AUTH_ENCRYPTION_SECRET="$(grep '^AUTH_ENCRYPTION_SECRET=' .env.secrets | cut -d= -f2)"
# 3️⃣ 启动网关
JWT_SECRET_KEY="$JWT_SECRET_KEY" \
AUTH_ENCRYPTION_SECRET="$AUTH_ENCRYPTION_SECRET" \
MCPGATEWAY_UI_ENABLED=true \
MCPGATEWAY_ADMIN_API_ENABLED=true \
PLATFORM_ADMIN_EMAIL=admin@example.com \
uvx --from mcp-contextforge-gateway mcpgateway --host 0.0.0.0 --port 4444
📋 前置依赖
# 1️⃣ 创建隔离环境并从 PyPI 安装
mkdir mcpgateway && cd mcpgateway
python3 -m venv .venv && source .venv/bin/activate
pip install --upgrade pip
pip install mcp-contextforge-gateway
# 2️⃣ 下载 .env.example 并生成真实密钥
curl -O https://raw.githubusercontent.com/IBM/mcp-context-forge/main/.env.example
cp .env.example .env
# 将密码学安全密钥生成到 .env.secrets 文件中
python3 -m mcpgateway.scripts.init_secrets
# 将生成的密钥补入 .env 文件(替换其中的 __REPLACE_ME__ 占位符)
python3 -m mcpgateway.scripts.init_secrets --patch-env .env
# 3️⃣ 启动网关
mcpgateway --host 0.0.0.0 --port 4444 &
# 4️⃣ 生成 Bearer 令牌并执行冒烟测试
export JWT_SECRET_KEY=$(grep '^JWT_SECRET_KEY=' .env | cut -d= -f2)
export MCPGATEWAY_BEARER_TOKEN=$(python3 -m mcpgateway.utils.create_jwt_token \
--username admin@example.com --exp 10080 --secret "$JWT_SECRET_KEY")
curl -s -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \
http://127.0.0.1:4444/version | jq
Windows (PowerShell) 快速入门
# 1️⃣ 创建隔离环境 + 从 PyPI 安装
mkdir mcpgateway ; cd mcpgateway
python3 -m venv .venv ; .\.venv\Scripts\Activate.ps1
pip install --upgrade pip
pip install mcp-contextforge-gateway
# 2️⃣ 下载 .env.example 并生成真实密钥
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/IBM/mcp-context-forge/main/.env.example" -OutFile ".env.example"
Copy-Item .env.example .env
# 将密码学安全密钥生成到 .env.secrets 文件中
python3 -m mcpgateway.scripts.init_secrets
# 将生成的密钥补入 .env 文件(替换其中的 __REPLACE_ME__ 占位符)
python3 -m mcpgateway.scripts.init_secrets --patch-env .env
# 3️⃣ 启动网关
mcpgateway.exe --host 0.0.0.0 --port 4444
# 4️⃣ 生成 Bearer 令牌并执行冒烟测试
$Env:JWT_SECRET_KEY = (Get-Content .env | Select-String '^JWT_SECRET_KEY=').ToString().Split('=')[1]
$Env:MCPGATEWAY_BEARER_TOKEN = python3 -m mcpgateway.utils.create_jwt_token `
--username admin@example.com --exp 10080 --secret $Env:JWT_SECRET_KEY
curl -s -H "Authorization: Bearer $Env:MCPGATEWAY_BEARER_TOKEN" `
http://127.0.0.1:4444/version | jq
⚡ 替代方案:使用 uv(速度更快)
# 1️⃣ 使用 uv 创建隔离环境 + 从 PyPI 安装
mkdir mcpgateway ; cd mcpgateway
uv venv
.\.venv\Scripts\activate
uv pip install mcp-contextforge-gateway
# 后续继续执行上述第 2️⃣ 到 4️⃣ 步即可...
更多配置项说明
将 https://github.com/IBM/mcp-context-forge/blob/main/.env.example 复制为 .env,即可自定义调整所有配置项(也可直接将配置项作为环境变量使用)。
🚀 端到端演示(注册本地 MCP 服务器)
# 1️⃣ 使用 mcpgateway.translate 与 Docker 启动示例 MCP 时间服务器(如需可将 docker 替换为 podman)
python3 -m mcpgateway.translate \
--stdio "docker run --rm -i ghcr.io/ibm/fast-time-server:latest -transport=stdio" \
--expose-sse \
--port 8003
# 也可通过 uvx 使用官方 mcp-server-git:
pip install uv # 若未安装 uvx 请先执行此命令安装 uv
python3 -m mcpgateway.translate --stdio "uvx mcp-server-git" --expose-sse --port 9000
# 新特性:同时通过多种协议对外暴露服务!
python3 -m mcpgateway.translate \
--stdio "uvx mcp-server-git" \
--expose-sse \
--expose-streamable-http \
--port 9000
# 此时可通过 /sse(SSE 协议)和 /mcp(流式 HTTP 协议)两个端点同时访问
# 2️⃣ 将该服务器注册到网关
curl -s -X POST -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"fast_time","url":"http://localhost:8003/sse"}' \
http://localhost:4444/servers
# 3️⃣ 验证工具目录
curl -s -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" http://localhost:4444/tools | jq
# 4️⃣ 创建 *虚拟服务器* 聚合指定工具。使用第 3 步工具目录中获取的工具 ID,填入 associatedTools 列表
curl -s -X POST -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"server":{"name":"time_server","description":"Fast time tools","associated_tools":[ ]}}' \
http://localhost:4444/servers | jq
# 示例 curl 调用
curl -s -X POST -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"server":{"name":"time_server","description":"Fast time tools","associated_tools":["6018ca46d32a4ac6b4c054c13a1726a2"]}}' \
http://localhost:4444/servers | jq
# 5️⃣ 列出所有服务器(返回结果中应包含新创建虚拟服务器的 UUID)
curl -s -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" http://localhost:4444/servers | jq
# 6️⃣ 访问客户端 HTTP 端点。可通过 MCP Inspector CLI 交互式检查该端点(也可使用任意 MCP 客户端)
npx -y @modelcontextprotocol/inspector
# 传输类型选择:Streamable HTTP,URL 填写:http://localhost:4444/servers/UUID_OF_SERVER_1/mcp,请求头名称填写:"Authorization",再输入 Bearer 令牌即可
可直接通过 Docker 或 Podman 使用 GHCR 上的官方 OCI 镜像。 请注意:当前生产版本暂不支持 arm64 架构。如果你使用搭载 Apple Silicon 芯片(M1、M2 等)的 MacOS 设备,可通过 Rosetta 运行容器,或改用 PyPI 方式安装。
[!IMPORTANT]
docker compose up -d默认不会在本地构建网关镜像,而是直接使用 GHCR 上的预构建镜像。Compose 文件中虽然包含build:块作为兜底,但本地构建需要 CI 流水线生成的封闭 wheel 依赖包。如果构建过程中出现cryptography或依赖解析错误,就是触发了该限制——直接拉取官方镜像即可,下方第 2 步会自动完成该操作。同时你必须在运行
docker compose up -d前准备好包含真实密钥的.env文件,网关无法在占位符配置下正常启动。
可通过以下步骤快速启动包含 PostgreSQL 和 Redis 的完整技术栈:
# 1️⃣ 克隆代码仓库
git clone https://github.com/IBM/mcp-context-forge.git
cd mcp-context-forge
# 2️⃣ 配置带真实密钥的 .env 并拉取预构建镜像
cp .env.example .env
python3 -m mcpgateway.scripts.init_secrets --patch-env .env
# 此时 .env 文件已包含高强度的 JWT_SECRET_KEY 和 AUTH_ENCRYPTION_SECRET
# 从 GHCR 拉取预构建镜像(完全跳过本地构建流程)
docker pull ghcr.io/ibm/mcp-context-forge:latest
echo 'IMAGE_LOCAL=ghcr.io/ibm/mcp-context-forge:latest'
>> .env
# 仅构建 nginx 镜像(体积小、仅本地可用,数秒即可完成构建)
docker compose build nginx
# 3️⃣ 启动完整技术栈
docker compose up -d
# 4️⃣ 检查运行状态
docker compose ps
# 5️⃣ 查看运行日志
docker compose logs -f gateway
# 6️⃣ 访问管理后台:http://localhost:8080/admin
# 登录账号:PLATFORM_ADMIN_EMAIL / PLATFORM_ADMIN_PASSWORD(值从 .env 中读取)
# 7️⃣ 生成 API 令牌
export JWT_SECRET_KEY=$(grep '^JWT_SECRET_KEY=' .env | cut -d= -f2)
docker compose exec gateway python3 -m mcpgateway.utils.create_jwt_token \
--username admin@example.com --exp 10080 --secret "$JWT_SECRET_KEY"
您将获得以下组件:
启用 HTTPS(可选):
# 启用 TLS 启动(将自动生成自签名证书)
make compose-tls
# 通过 HTTPS 访问:https://localhost:8443/admin
# 也可使用您自有证书:
# 未加密密钥场景:
mkdir -p certs
cp your-cert.pem certs/cert.pem && cp your-key.pem certs/key.pem
make compose-tls
# 受密码保护的加密密钥场景:
mkdir -p certs
cp your-cert.pem certs/cert.pem && cp your-encrypted-key.pem certs/key-encrypted.pem
echo "KEY_FILE_PASSWORD=your-passphrase"
>> .env
make compose-tls
可使用企业级特性将其部署到 Kubernetes 环境:
# 添加 Helm 仓库(待可用时)
# helm repo add mcp-context-forge https://ibm.github.io/mcp-context-forge
# helm repo update
# 当前版本请使用本地 Chart
git clone https://github.com/IBM/mcp-context-forge.git
cd mcp-context-forge/charts/mcp-stack
# 首先生成密钥
python3 -m mcpgateway.scripts.init_secrets
JWT_SECRET=$(grep '^JWT_SECRET_KEY=' .env.secrets | cut -d= -f2)
ENC_SECRET=$(grep '^AUTH_ENCRYPTION_SECRET=' .env.secrets | cut -d= -f2)
# 使用 PostgreSQL 安装(默认配置)
# 重要提示:请替换为真实密码 —— 生产环境请勿使用 'changeme'
helm install mcp-gateway . \
--set mcpContextForge.secret.PLATFORM_ADMIN_EMAIL=admin@yourcompany.com \
--set mcpContextForge.secret.PLATFORM_ADMIN_PASSWORD= \
--set mcpContextForge.secret.BASIC_AUTH_PASSWORD= \
--set "mcpContextForge.secret.JWT_SECRET_KEY=${JWT_SECRET}" \
--set "mcpContextForge.secret.AUTH_ENCRYPTION_SECRET=${ENC_SECRET}"
# 检查部署状态
kubectl get pods -l app.kubernetes.io/name=mcp-context-forge
# 端口转发以访问管理后台 UI
kubectl port-forward svc/mcp-gateway-mcp-context-forge 4444:80
# 访问地址:http://localhost:4444/admin
# 生成 API 令牌(从 Pod 环境中读取 JWT_SECRET_KEY)
kubectl exec deployment/mcp-gateway-mcp-context-forge -- \
python3 -m mcpgateway.utils.create_jwt_token \
--username admin@yourcompany.com --exp 10080 --secret "${JWT_SECRET}"
[!NOTE] 关于 SSRF 的说明:Helm 默认采用严格的 SSRF 配置(
SSRF_ALLOW_PRIVATE_NETWORKS=false)。 若您需要注册集群内工具 URL,请仅通过mcpContextForge.config.SSRF_ALLOWED_NETWORKS配置项放行您的集群 CIDR;仅在本地基准测试场景下,可临时设置SSRF_ALLOW_PRIVATE_NETWORKS=true。 更多详情请参考docs/docs/manage/configuration.md#ssrf-protection与docs/docs/deployment/helm.md。
企业级特性:
# 首先生成密钥(将创建 .env.secrets 文件)
python3 -m mcpgateway.scripts.init_secrets
export JWT_SECRET_KEY="$(grep '^JWT_SECRET_KEY=' .env.secrets | cut -d= -f2)"
export AUTH_ENCRYPTION_SECRET="$(grep '^AUTH_ENCRYPTION_SECRET=' .env.secrets | cut -d= -f2)"
docker run -d --name mcpgateway \
-p 4444:4444 \
-e MCPGATEWAY_UI_ENABLED=true \
-e MCPGATEWAY_ADMIN_API_ENABLED=true \
-e HOST=0.0.0.0 \
-e JWT_SECRET_KEY="${JWT_SECRET_KEY}" \
-e AUTH_ENCRYPTION_SECRET="${AUTH_ENCRYPTION_SECRET}" \
-e AUTH_REQUIRED=true \
-e PLATFORM_ADMIN_EMAIL=admin@example.com \
-e PLATFORM_ADMIN_PASSWORD= \
-e PLATFORM_ADMIN_FULL_NAME="Platform Administrator" \
-e DATABASE_URL=sqlite:///./mcp.db \
-e SECURE_COOKIES=false \
ghcr.io/ibm/mcp-context-forge:latest
# 跟踪实时日志
docker logs -f mcpgateway
# 生成 API 令牌(使用与实例一致的密钥)
docker run --rm -it \
-e JWT_SECRET_KEY="${JWT_SECRET_KEY}" \
ghcr.io/ibm/mcp-context-forge:latest \
python3 -m mcpgateway.utils.create_jwt_token \
--username admin@example.com --exp 10080 --secret "${JWT_SECRET_KEY}"
访问 **http://localhost:4444/admin**,使用您设置的 PLATFORM_ADMIN_EMAIL / PLATFORM_ADMIN_PASSWORD 登录。
进阶配置:持久化存储、主机网络模式、离线隔离部署
持久化 SQLite 数据库:
mkdir -p $(pwd)/data && touch $(pwd)/data/mcp.db && chmod 777 $(pwd)/data
docker run -d --name mcpgateway --restart unless-stopped \
-p 4444:4444 -v $(pwd)/data:/data \
-e DATABASE_URL=sqlite:////data/mcp.db \
-e MCPGATEWAY_UI_ENABLED=true -e MCPGATEWAY_ADMIN_API_ENABLED=true \
-e HOST=0.0.0.0 -e JWT_SECRET_KEY="${JWT_SECRET_KEY}" \
-e AUTH_ENCRYPTION_SECRET="${AUTH_ENCRYPTION_SECRET}" \
-e PLATFORM_ADMIN_EMAIL=admin@example.com -e PLATFORM_ADMIN_PASSWORD= \
ghcr.io/ibm/mcp-context-forge:latest
主机网络模式(用于访问本地 MCP 服务器):
docker run -d --name mcpgateway --network=host \
-v $(pwd)/data:/data -e DATABASE_URL=sqlite:////data/mcp.db \
-e MCPGATEWAY_UI_ENABLED=true -e HOST=0.0.0.0 -e PORT=4444 \
-e JWT_SECRET_KEY="${JWT_SECRET_KEY}" -e AUTH_ENCRYPTION_SECRET="${AUTH_ENCRYPTION_SECRET}" \
ghcr.io/ibm/mcp-context-forge:latest
离线隔离部署(无互联网连接环境):
docker build -f Containerfile -t mcpgateway:airgapped .
docker run -d --name mcpgateway -p 4444:4444 \
-e MCPGATEWAY_UI_AIRGAPPED=true -e MCPGATEWAY_UI_ENABLED=true \
-e HOST=0.0.0.0 -e JWT_SECRET_KEY="${JWT_SECRET_KEY}" \
-e AUTH_ENCRYPTION_SECRET="${AUTH_ENCRYPTION_SECRET}" \
mcpgateway:airgapped
podman run -d --name mcpgateway \
-p 4444:4444 -e HOST=0.0.0.0 -e DATABASE_URL=sqlite:///./mcp.db \
ghcr.io/ibm/mcp-context-forge:1.0.0-RC-3
进阶配置:持久化存储、主机网络模式
持久化 SQLite:
mkdir -p $(pwd)/data && chmod 777 $(pwd)/data
podman run -d --name mcpgateway --restart=on-failure \
-p 4444:4444 -v $(pwd)/data:/data \
-e DATABASE_URL=sqlite:////data/mcp.db \
ghcr.io/ibm/mcp-context-forge:1.0.0-RC-3
主机网络模式:
podman run -d --name mcpgateway --network=host \
-v $(pwd)/data:/data -e DATABASE_URL=sqlite:////data/mcp.db \
ghcr.io/ibm/mcp-context-forge:1.0.0-RC-3
✏️ Docker/Podman 使用提示
-e FOO= 配置项存入单独文件中,替换为 --env-file .env 加载参数,可参考项目提供的 https://github.com/IBM/mcp-context-forge/blob/main/.env.example 作为模板。1.0.0-RC-3)而非 latest 作为镜像标签,以保证部署可复现。docker exec mcpgateway python3 -m mcpgateway.utils.create_jwt_token \
--username admin@example.com --exp 10080 --secret "${JWT_SECRET_KEY}"
-v $(pwd)/data:/data 挂载参数重新运行,您的数据库和配置数据将完整保留。🚑 对运行中的容器执行冒烟测试
curl -s -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \
http://localhost:4444/health | jq
curl -s -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \
http://localhost:4444/tools | jq
curl -s -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \
http://localhost:4444/version | jq
克隆代码仓库后在 VS Code 中打开项目,编辑器将自动检测到 .devcontainer 配置,并提示您点击 "在容器中重新打开"。该开发容器已预装 Python 3.11、Docker CLI 以及所有项目依赖项。
如需详细的搭建指南、工作流程说明与 GitHub Codespaces 使用教程,请参阅 **https://ibm.github.io/mcp-context-forge/development/developer-onboarding/**。
make venv install-dev # 创建 .venv 虚拟环境 + 安装依赖 + 构建管理后台界面
make serve # 通过 gunicorn 启动服务,监听 4444 端口
Rust 工作区说明:
crates/ 目录下,根目录的 Cargo.toml 会通过 crates/* 自动加载这些组件。cargo build、cargo test 和 cargo check 命令,即可覆盖整个共享工作区的操作。make venv install-dev 命令会在根目录创建 .venv 虚拟环境,该环境也会被工作区下的 PyO3/maturin 构建流程复用。替代方案:使用 UV 或 pip 安装依赖
# 使用 UV(速度更快)
uv venv && source .venv/bin/activate
uv pip install -e '.[dev]'
# 使用 pip
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
PostgreSQL 适配器配置
请为 PostgreSQL 安装 psycopg 驱动:
# 先安装系统级依赖
# Debian/Ubuntu: sudo apt-get install libpq-dev
# macOS: brew install libpq
uv pip install 'psycopg[binary]' # 开发环境(使用预构建二进制包)
# 或执行:uv pip install 'psycopg[c]' # 生产环境(需要本地编译环境)
连接 URL 格式:
DATABASE_URL=postgresql+psycopg://user:password@localhost:5432/mcp
快速启动 PostgreSQL 容器:
docker run --name mcp-postgres \
-e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_DB=mcp -p 5432:5432 -d postgres
升级操作说明、迁移指南与回滚流程请参考以下资源:
[!WARNING] 如果任何必需的
.env变量缺失或无效,网关将在启动时通过 Pydantic 触发校验错误并快速失败,不会继续启动。
将项目提供的 https://github.com/IBM/mcp-context-forge/blob/main/.env.example 模板文件复制为 .env,并按要求更新以下涉及安全敏感信息的配置项。
以下变量必须完成配置后网关才能正常启动,不存在可用的默认值:如果这些变量缺失或仍为占位值,应用程序将在启动阶段直接报错退出。
| 变量名 | 说明 | 生成方式 |
|---|---|---|
JWT_SECRET_KEY | 用于签名 JWT 的 HMAC 密钥(长度需大于等于32位) | python3 -m mcpgateway.scripts.init_secrets |
AUTH_ENCRYPTION_SECRET | 用于加密存储的用户凭证的通行短语 | python3 -m mcpgateway.scripts.init_secrets |
以下变量的默认值存在安全风险,在投入生产环境前必须修改:
| 变量名 | 说明 | 默认值 |
|---|---|---|
BASIC_AUTH_USER | HTTP 基础认证的用户名 | admin |
BASIC_AUTH_PASSWORD | HTTP 基础认证的密码 | 必填项,无默认值,请通过 make init-secrets-patch-env 命令设置 |
PLATFORM_ADMIN_EMAIL | 引导初始化管理员用户的***地址 | admin@example.com |
PLATFORM_ADMIN_PASSWORD | 引导初始化管理员用户的密码 | 必填项,首次运行前请设置高强度密码 |
PLATFORM_ADMIN_FULL_NAME | 引导初始化管理员用户的显示名称 | Admin User |
以下设置默认已出于安全原因开启,仅当需要兼容旧版本时才可禁用:
| 变量名 | 说明 | 默认值 |
|---|---|---|
REQUIRE_JTI | 要求令牌必须包含 JTI 声明,以支持令牌吊销功能 | true |
REQUIRE_TOKEN_EXPIRATION | 要求令牌必须包含 exp(过期时间)声明 | true |
PUBLIC_REGISTRATION_ENABLED | 允许普通用户自行注册账号 | false |
内容大小限制可防范 DoS ***,保障系统运行稳定性:
| 变量名 | 说明 | 默认值 |
|---|---|---|
CONTENT_MAX_RESOURCE_SIZE | 资源内容的最大允许大小(字节) | 102400(即100KB) |
CONTENT_MAX_PROMPT_SIZE | 提示词模板的最大允许大小(字节) | 10240(即10KB) |
[!NOTE] 该大小限制仅适用于新增/更新操作,不会对已存在的历史内容做回溯校验。
UAID 安全配置规则
生产环境要求:
跨网关 UAID 路由功能必须完成显式安全配置才能使用:
UAID_ALLOWED_DOMAINS=["gateway1.example.com", "gateway2.example.com"]
JWT_SECRET_KEY)AUTH_REQUIRED=true
UAID_FORWARD_AUTH=true
身份认证流程:
跨网关调用时会通过 Authorization 头转发用户的持有者令牌,远程网关将通过现有身份认证中间件校验令牌,全程保留原有 RBAC 权限上下文。
内置安全特性:
故障排查:
"UAID_ALLOWED_DOMAINS not configured" 错误:请在 .env 文件中添加受信任的网关域名到白名单"proceeding without authentication token" 警告:请检查身份认证中间件是否正确将令牌解析到 request.state.bearer_token 变量中如需了解完整的安全架构详情,请参考 docs/security/uaid-cross-gateway-auth.md 文档。
以下配置项的取值与代码内置默认值不同,用于提供开箱可用的本地开发环境:
| 变量 | 说明 | 默认值 |
|---|---|---|
HOST | 绑定地址 | 0.0.0.0 |
MCPGATEWAY_UI_ENABLED | 启用管理 UI 仪表盘 | true |
MCPGATEWAY_ADMIN_API_ENABLED | 启用管理 API 端点 | true |
DATABASE_URL | SQLAlchemy 连接 URL | sqlite:///./mcp.db |
SECURE_COOKIES | 针对 HTTP(非 HTTPS)开发环境将此值设为 false | false |
如需查看按类别(身份认证、缓存、SSO、可观测性等)组织的 300 余个环境变量完整列表,请参阅 **https://ibm.github.io/mcp-context-forge/manage/configuration/**。
| 命令 | 服务器 | 端口 | 数据库 | 使用场景 |
|---|---|---|---|---|
make dev | Uvicorn | 8000 | SQLite | 开发环境(单实例、自动重载) |
make serve | Gunicorn | 4444 | SQLite | 生产单节点(多工作进程) |
make serve-ssl | Gunicorn | 4444 | SQLite | 启用 HTTPS 的生产单节点 |
make compose-up | Docker Compose + Nginx | 8080 | PostgreSQL + Redis | 完整栈(3 个副本、负载均衡) |
make compose-sso | Docker Compose + Keycloak | 8080 / 8180 | PostgreSQL + Redis | 本地 SSO 测试(Keycloak 配置文件) |
make testing-up | Docker Compose + Nginx | 8080 | PostgreSQL + Redis | 测试环境 |
make dev # Uvicorn 运行于 8000 端口,启用自动重载,使用 SQLite
# 或
./run.sh --reload --log debug --workers 2
run.sh是uvicorn的封装脚本,会自动加载.env文件,支持重载配置,并将所有参数透传给服务器。
关键参数说明:
| 参数 | 用途 | 示例 |
|---|---|---|
-e, --env FILE | 加载环境变量文件 | --env prod.env |
-H, --host | 绑定地址 | --host 127.0.0.1 |
-p, --port | 监听端口 | --port 8080 |
-w, --workers | Gunicorn 工作进程数 | --workers 4 |
-r, --reload | 自动重载 | --reload |
make serve # Gunicorn 运行于 4444 端口,启用多工作进程
make serve-ssl # 启用 HTTPS 的 Gunicorn,运行于 4444 端口(证书使用 ./certs 目录下的文件)
make compose-up # 启动完整栈:PostgreSQL、Redis、3 个网关副本、Nginx 运行于 8080 端口
make compose-sso # 启动包含 Keycloak 的 SSO 栈,Keycloak 运行于 8180 端口
make sso-test-login # 运行 SSO 冒烟检查(覆盖身份提供商、登录 URL、测试用户场景)
make compose-logs # 追踪所有服务的日志
make compose-down # 停止整个技术栈
uvicorn mcpgateway.main:app --host 0.0.0.0 --port 4444 --workers 4
ContextForge 可部署至所有主流云平台:
| 平台 | 部署指南 |
|---|---|
| AWS | https://ibm.github.io/mcp-context-forge/deployment/aws/ |
| Azure | https://ibm.github.io/mcp-context-forge/deployment/azure/ |
| Google Cloud | https://ibm.github.io/mcp-context-forge/deployment/google-cloud-run/ |
| IBM Cloud | https://ibm.github.io/mcp-context-forge/deployment/ibm-code-engine/ |
| Kubernetes | https://ibm.github.io/mcp-context-forge/deployment/minikube/ |
| OpenShift | https://ibm.github.io/mcp-context-forge/deployment/openshift/ |
如需查阅完整部署指南,请访问 **https://ibm.github.io/mcp-context-forge/deployment/**。
服务器运行后,你可以访问交互式 API 文档:
快速身份认证流程:
# 从 .env 文件中读取 JWT_SECRET_KEY(该文件需已提前配置合法的密钥值)
export JWT_SECRET_KEY=$(grep '^JWT_SECRET_KEY=' .env | cut -d= -f2)
# 生成 JWT 令牌
export TOKEN=$(python3 -m mcpgateway.utils.create_jwt_token \
--username admin@example.com --exp 10080 --secret "$JWT_SECRET_KEY")
# 测试 API 访问权限
curl -H "Authorization: Bearer $TOKEN" http://localhost:4444/health
如需查阅覆盖所有端点的完整 curl 示例,请参考 **https://ibm.github.io/mcp-context-forge/manage/api-usage/**。
make test # 运行单元测试
make lint # 运行所有代码检查工具
make doctest # 运行文档测试
make coverage # 生成测试覆盖率报告
关于文档测试的详细说明,请参阅 https://ibm.github.io/mcp-context-forge/development/doctest-coverage/。
mcpgateway/ # 核心 FastAPI 应用
├── main.py # 程序入口
├── config.py # Pydantic 配置项定义
├── db.py # SQLAlchemy ORM 模型
├── schemas.py # Pydantic 校验 schema
├── services/ # 业务逻辑层(包含 50+ 个服务模块)
├── routers/ # HTTP 端点定义
├── middleware/ # 横切关注点组件
└── transports/ # SSE、WebSocket、stdio、流式 HTTP 传输实现
tests/ # 测试套件(包含 7000+ 个测试用例)
docs/docs/ # 完整文档(基于 MkDocs 构建)
charts/ # Kubernetes/Helm 图表
plugins/ # 插件框架与内置插件实现
[!IMPORTANT] 安全提示:永远不要在本地文件系统上直接运行不受信任的 MCP 服务器。请始终使用沙箱、容器或微虚拟机(例如 gVisor、Fire***er)并限制其权限。注册任何远程 MCP 服务器时务必谨慎,包括来自公共目录的服务器 — 在为其授予网关访问权限前,请自行完成安全评估。
如需查看完整项目结构,请参阅 CONTRIBUTING.md 或执行 tree -L 2 命令。
make dev # 启动自动重载的开发服务器(运行于 8000 端口)
make test # 运行测试套件
make lint # 运行所有代码检查工具
make coverage # 生成测试覆盖率报告
直接执行 make 命令即可查看所有可用的 Make 目标。
如需了解完整开发工作流,请参考:
常见问题与解决方案:
| 问题场景 | 快速修复方案 |
|---|---|
执行 docker compose up 时报错,提示 cryptography 或依赖解析错误 | 本地构建需要 CI 生成的 wheel 依赖闭包。执行 `docker pull ghcr.io/ibm/mcp-context-forge:latest && echo 'IMAGE_LOCAL=ghcr.io/ibm/mcp-context-forge:latest' |
.env
后重试 | | 执行docker compose up时报错SecurityConfigurationError: jwt_secret_key|.env文件缺失,或文件内仍存在REPLACE_ME占位符。执行cp .env.example .env && python3 -m mcpgateway.scripts.init_secrets --patch-env .env| | 执行docker compose up时报错,提示拉取mcpgateway/nginx-cache镜像权限被拒绝 | 必须在本地构建 nginx 镜像:执行docker compose build nginx| | 执行make dev后,8000 端口无服务响应 | 查看终端输出是否存在SecurityConfigurationError,先执行make ensure-secrets再重试。如果使用 WSL2 环境,请访问http://127.0.0.1:8000`,不要使用localhost| | macOS 系统下出现 SQLite "disk I/O error" 磁盘I/O错误 | 请勿使用iCloud同步的目录,改用路径~/mcp-context-forge/data| | WSL2 环境下 4444 端口无法访问 | 在 Docker Desktop 中配置 WSL 集成 | | 网关进程立即退出 | 执行cp .env.example .env && python3 -m mcpgateway.scripts.init_secrets --patch-env .env| | 出现ModuleNotFoundError模块未找到错误 | 执行make install-dev|
如需查看详细的故障排查指南,请访问 **https://ibm.github.io/mcp-context-forge/manage/troubleshooting/**。
make lint 并修复所有检测出的问题。make test 所有测试用例全部通过。git commit -s)。完整规范请查看 CONTRIBUTING.md,如需了解提交缺陷报告、提出功能需求、认领待处理问题的方式,请参考 **https://github.com/IBM/mcp-context-forge/issues/2502**。
完整的更新日志请查阅:CHANGELOG.md
本项目采用 Apache License 2.0 许可协议 — 具体内容请查看 LICENSE 文件。
特别感谢所有帮助我们优化 ContextForge 的贡献者:
来自真实用户的反馈,见证轩辕镜像的优质服务