mcp-context-forge
ContextForge 是一款由 IBM 开源的 AI 网关与注册中心,旨在为复杂的 AI 基础设施提供统一的管理入口。在当前的开发环境中,AI 代理往往需要调用分散的工具、MCP 服务以及各类 REST 或 gRPC 接口,导致连接配置繁琐且难以监控。ContextForge 通过将这些异构资源联邦到一个干净的端点,有效解决了服务发现困难、权限管理分散以及调用链路不透明等痛点。
这款工具特别适合 AI 应用开发者、系统架构师以及需要构建多代理协作系统的技术团队使用。它不仅能作为标准的 MCP 服务器运行,还支持通过插件扩展功能,内置了速率限制、身份认证、自动重试等企业级治理特性。其独特的技术亮点在于强大的协议转换能力,能够无缝桥接 MCP、A2A 协议与传统 API,并原生支持 OpenTelemetry 可观测性,方便对接 Phoenix、Jaeger 等追踪后端。此外,ContextForge 具备优秀的扩展性,支持基于 Redis 的多集群联邦与缓存机制,可轻松部署于 Kubernetes 环境,帮助开发者高效构建稳定、可控的 AI 应用生态。
使用场景
某金融科技公司正在构建一个智能投顾系统,需要让 AI 代理同时调用内部风控模型(gRPC)、外部行情数据(REST)以及第三方分析工具(MCP),以实时生成投资建议。
没有 mcp-context-forge 时
- 接口碎片化严重:开发团队需为每种协议(gRPC、REST、MCP)编写独立的适配代码,导致代理逻辑复杂且难以维护。
- 缺乏统一治理:无法集中管理鉴权与限流策略,某个高频调用的行情接口容易因过载而拖垮整个服务。
- 可观测性缺失:当投资建议出错时,难以追踪请求究竟是在哪个环节、哪个协议转换中失败,排查问题如同“盲人摸象”。
- 扩展成本高昂:每接入一个新的数据源或工具,都需要修改核心路由代码并重新部署,响应业务需求速度慢。
使用 mcp-context-forge 后
- 统一接入入口:mcp-context-forge 将异构的 gRPC、REST 和 MCP 接口联邦为单一端点,AI 代理只需通过标准协议即可透明调用所有工具。
- 集中式防护网:在网关层统一配置速率限制与身份验证,自动拦截异常流量,确保核心风控模型的稳定性。
- 全链路追踪:内置 OpenTelemetry 支持,可清晰可视化每个请求在不同协议间的流转路径,秒级定位故障根源。
- 插件化热扩展:利用其丰富的插件生态,新增数据源仅需配置即可生效,无需改动代理核心代码,大幅缩短上线周期。
mcp-context-forge 通过屏蔽底层协议差异并提供统一的治理与观测能力,让企业能像搭积木一样高效构建稳健的 AI 应用架构。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
ContextForge
一个开源注册表和代理,用于联合 MCP、A2A 以及 REST/gRPC API,提供集中式治理、服务发现和可观测性。优化代理与工具调用,并支持插件。

ContextForge 是一个开源注册表和代理,可将工具、代理和 API 联合到一个干净的端点,供您的 AI 客户端使用。它为您的 AI 基础设施提供集中式治理、服务发现和可观测性:
- 工具网关 — MCP、REST、gRPC 到 MCP 的转换,以及 TOON 压缩
- 代理网关 — A2A 协议、兼容 OpenAI 和 Anthropic 的代理路由
- API 网关 — 速率限制、认证、重试机制,以及 REST 服务的反向代理
- 插件扩展性 — 40 多个插件,用于额外的传输方式、协议和集成
- 可观测性 — 使用 OpenTelemetry 进行追踪,支持 Phoenix、Jaeger、Zipkin 等 OTLP 后端
它作为一个完全符合 MCP 标准的服务器运行,可通过 PyPI 或 Docker 部署,并可在 Kubernetes 上通过 Redis 支持的联邦和缓存机制扩展到多集群环境。
目录
📌 快速链接
| 资源 | 描述 |
|---|---|
| 5 分钟设置 | 快速上手 — uvx、Docker、Compose 或本地开发 |
| 获取帮助 | 支持选项、常见问题解答、社区渠道 |
| 问题指南 | 如何提交 bug、请求功能或贡献 |
| 完整文档 | 完整指南、教程和 API 参考 |
概述与目标
ContextForge 是一个开源注册表和代理,可联合任何 模型上下文协议 (MCP) 服务器、A2A 服务器或 REST/gRPC API,提供集中式治理、发现和可观测性。它优化了代理和工具调用,并支持插件。更多详情请参阅项目路线图。
目前支持:
- 跨多个 MCP 和 REST 服务的联邦
- A2A(代理到代理)集成,用于外部 AI 代理(OpenAI、Anthropic、自定义)
- gRPC 到 MCP 的转换,通过自动反射式服务发现实现
- 将遗留 API 虚拟化为符合 MCP 标准的工具和服务器
- 支持 HTTP、JSON-RPC、WebSocket、SSE(可配置保持连接)、stdio 和可流式传输的 HTTP 等传输方式
- 管理员 UI,用于实时管理、配置和日志监控(支持气隙部署)
- 内置身份验证、重试和限流功能,支持用户范围内的 OAuth 令牌以及无条件的 X-Upstream-Authorization 头
- OpenTelemetry 可观测性,支持 Phoenix、Jaeger、Zipkin 等 OTLP 后端
- 通过 Docker 或 PyPI、基于 Redis 的缓存以及多集群联邦实现可扩展部署
有关即将推出的功能列表,请查看ContextForge 路线图。
🔌 具有协议灵活性的网关层
- 联合任何 MCP 服务器或 REST API
- 允许您选择 MCP 协议版本(例如
2025-11-25) - 为不同的后端暴露单一的统一接口
🧩 REST/gRPC 服务的虚拟化
- 将非 MCP 服务封装为虚拟 MCP 服务器
- 以最少的配置注册工具、提示和资源
- gRPC 到 MCP 的转换,通过服务器反射协议实现
- 自动服务发现和方法内省
🔁 REST 到 MCP 工具适配器
将 REST API 适配为工具,具备以下功能:
- 自动提取 JSON Schema
- 支持头部、令牌和自定义身份验证
- 重试、超时和速率限制策略
🧠 统一注册表
- 提示:Jinja2 模板、多模态支持、回滚/版本控制
- 资源:基于 URI 的访问、MIME 检测、缓存、SSE 更新
- 工具:原生或适配的工具,带有输入验证和并发控制
📈 管理员 UI、可观测性和开发体验
- 管理员 UI 基于 HTMX + Alpine.js 构建
- 实时日志查看器,具备过滤、搜索和导出功能
- 身份验证:基本认证、JWT 或自定义方案
- 结构化日志、健康端点、指标
- 7,000 多项测试、Makefile 目标、热重载、pre-commit 钩子
🔍 OpenTelemetry 可观测性
- 供应商无关的跟踪,支持 OpenTelemetry (OTLP) 协议
- 多后端支持:Phoenix(专注于 LLM)、Jaeger、Zipkin、Tempo、DataDog、New Relic
- 分布式跟踪,覆盖联合的网关和服务
- 工具、提示、资源和网关操作的自动 instrumentation
- LLM 特定指标:令牌使用量、成本、模型性能
- 禁用时零开销,并能优雅降级
有关 Phoenix、Jaeger 等后端的设置指南,请参阅**可观测性文档**。
快速入门 - PyPI
ContextForge 已在 PyPI 上发布,包名为 mcp-contextforge-gateway。
简而言之;: (使用 uv 的单条命令)
# 使用环境变量快速启动
BASIC_AUTH_PASSWORD=pass \
MCPGATEWAY_UI_ENABLED=true \
MCPGATEWAY_ADMIN_API_ENABLED=true \
PLATFORM_ADMIN_EMAIL=admin@example.com \
PLATFORM_ADMIN_PASSWORD=changeme \
PLATFORM_ADMIN_FULL_NAME="平台管理员" \
uvx --from mcp-contextforge-gateway mcpgateway --host 0.0.0.0 --port 4444
# 或者更好:使用提供的 .env.example
cp .env.example .env
# 编辑 .env 以自定义您的设置
uvx --from mcp-contextforge-gateway mcpgateway --host 0.0.0.0 --port 4444
📋 先决条件
- Python ≥ 3.11
- curl + jq - 仅用于最后的冒烟测试步骤
1 - 安装并运行(可复制粘贴)
# 1️⃣ 隔离环境 + 从 PyPI 安装
mkdir mcpgateway && cd mcpgateway
python3 -m venv .venv && source .venv/bin/activate
pip install --upgrade pip
pip install mcp-contextforge-gateway
# 2️⃣ 复制并定制配置
# 下载示例环境文件
curl -O https://raw.githubusercontent.com/IBM/mcp-context-forge/main/.env.example
cp .env.example .env
# 编辑 .env 以自定义您的设置(尤其是密码!)
# 或直接设置环境变量:
export MCPGATEWAY_UI_ENABLED=true
export MCPGATEWAY_ADMIN_API_ENABLED=true
export PLATFORM_ADMIN_EMAIL=admin@example.com
export PLATFORM_ADMIN_PASSWORD=changeme
export PLATFORM_ADMIN_FULL_NAME="平台管理员"
BASIC_AUTH_PASSWORD=pass JWT_SECRET_KEY=my-test-key-but-now-longer-than-32-bytes \
mcpgateway --host 0.0.0.0 --port 4444 & # admin/pass
# 3️⃣ 生成 Bearer 令牌并进行 API 冒烟测试
export MCPGATEWAY_BEARER_TOKEN=$(python3 -m mcpgateway.utils.create_jwt_token \
--username admin@example.com --exp 10080 --secret my-test-key-but-now-longer-than-32-bytes)
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️⃣ 复制并定制配置
# 下载示例环境文件
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/IBM/mcp-context-forge/main/.env.example" -OutFile ".env.example"
Copy-Item .env.example .env
# 编辑 .env 以自定义您的设置
# 或设置会话级别的环境变量
$Env:MCPGATEWAY_UI_ENABLED = "true"
$Env:MCPGATEWAY_ADMIN_API_ENABLED = "true"
# 注意:API 的基本认证默认是关闭的(API_ALLOW_BASIC_AUTH=false)
$Env:JWT_SECRET_KEY = "my-test-key-but-now-longer-than-32-bytes"
$Env:PLATFORM_ADMIN_EMAIL = "admin@example.com"
$Env:PLATFORM_ADMIN_PASSWORD = "changeme"
$Env:PLATFORM_ADMIN_FULL_NAME = "平台管理员"
# 3️⃣ 启动网关
mcpgateway.exe --host 0.0.0.0 --port 4444
# 可选:将其置于后台
# 使用 Start-Process 启动 mcpgateway.exe,并传递参数 --host 0.0.0.0 --port 4444
# 4️⃣ Bearer 令牌与冒烟测试
$Env:MCPGATEWAY_BEARER_TOKEN = python3 -m mcpgateway.utils.create_jwt_token `
--username admin@example.com --exp 10080 --secret my-test-key-but-now-longer-than-32-bytes
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️⃣...
更多配置
将 .env.example 复制到 .env 文件中,并根据需要调整设置(或直接使用这些设置作为环境变量)。
🚀 端到端演示(注册本地 MCP 服务器)
# 1️⃣ 使用 mcpgateway.translate 和 Docker 启动示例 GO MCP 时间服务器(如需可替换为 podman)
python3 -m mcpgateway.translate \
--stdio "docker run --rm -i ghcr.io/ibm/fast-time-server:latest -transport=stdio" \
--expose-sse \
--port 8003
# 或者使用官方的 mcp-server-git,通过 uvx:
pip install uv # 如果尚未安装,先安装 uvx
python3 -m mcpgateway.translate --stdio "uvx mcp-server-git" --expose-sse --port 9000
# 另一种方式:运行本地二进制文件
# cd mcp-servers/go/fast-time-server; make build
# python3 -m mcpgateway.translate --stdio "./dist/fast-time-server -transport=stdio" --expose-sse --port 8002
# 新功能:同时支持多种协议!
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/gateways
# 3️⃣ 验证工具目录
curl -s -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" http://localhost:4444/tools | jq
# 4️⃣ 创建一个*虚拟服务器*,将这些工具捆绑在一起。使用工具目录中的工具 ID(步骤 #3),并将其放入 associatedTools 列表中。
curl -s -X POST -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"server":{"name":"time_server","description":"快速时间工具","associated_tools":[<工具ID>]}}' \
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":"快速时间工具","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
# 传输类型:流式 HTTP,URL:http://localhost:4444/servers/服务器UUID_1/mcp,头名称:“Authorization”,Bearer 令牌
🖧 使用 stdio 包装器(mcpgateway-wrapper)
export MCP_AUTH="Bearer ${MCPGATEWAY_BEARER_TOKEN}"
export MCP_SERVER_URL=http://localhost:4444/servers/服务器UUID_1/mcp
python3 -m mcpgateway.wrapper # 按 Ctrl-C 退出
你也可以用 uv 运行它,或者在 Docker/Podman 中运行——请参阅上面的“容器”部分。
在 MCP Inspector 中,定义 MCP_AUTH 和 MCP_SERVER_URL 环境变量,选择 python3 作为命令,并将 -m mcpgateway.wrapper 作为参数。
echo $PWD/.venv/bin/python3 # 使用 Python3 的完整路径可以确保你有一个可用的虚拟环境
export MCP_SERVER_URL='http://localhost:4444/servers/服务器UUID_1/mcp'
export MCP_AUTH="Bearer ${MCPGATEWAY_BEARER_TOKEN}"
npx -y @modelcontextprotocol/inspector
或者
直接将 URL 和认证信息作为参数传递(无需设置环境变量)
npx -y @modelcontextprotocol/inspector
命令设为 `python`
参数设为 `-m mcpgateway.wrapper --url "http://localhost:4444/servers/服务器UUID_1/mcp" --auth "Bearer <你的令牌>"`
当使用像 Claude 这样的具有 stdio 接口的 MCP 客户端时:
{
"mcpServers": {
"mcpgateway-wrapper": {
"command": "python",
"args": ["-m", "mcpgateway.wrapper"],
"env": {
"MCP_AUTH": "Bearer 你的令牌",
"MCP_SERVER_URL": "http://localhost:4444/servers/服务器UUID_1",
"MCP_TOOL_CALL_TIMEOUT": "120"
}
}
}
}
快速入门 - 容器
使用 GHCR 上的官方 OCI 镜像,搭配 Docker 或 Podman。 请注意:目前生产环境中不支持 arm64 架构。如果你正在使用搭载 Apple Silicon 芯片的 Mac 设备(如 M1、M2 等),可以使用 Rosetta 运行容器,或者直接通过 PyPI 安装替代方案。
🚀 快速入门 - Docker Compose
在不到 30 秒内启动包含 PostgreSQL 和 Redis 的完整堆栈:
# 克隆并启动堆栈
git clone https://github.com/IBM/mcp-context-forge.git
cd mcp-context-forge
# 首先启动 PostgreSQL(推荐用于生产环境)
docker compose up -d
# 检查状态
docker compose ps
# 查看日志
docker compose logs -f gateway
# 访问管理界面:http://localhost:8080/admin(使用 PLATFORM_ADMIN_EMAIL/PASSWORD 登录)
# 生成 API 令牌
docker compose exec gateway python3 -m mcpgateway.utils.create_jwt_token \
--username admin@example.com --exp 10080 --secret my-test-key-but-now-longer-than-32-bytes
你将获得:
- 🗄️ PostgreSQL - 生产就绪的数据库,包含 55+ 张表
- 🚀 ContextForge - 功能齐全的网关,附带管理界面
- 📊 Redis - 高性能缓存与会话存储
- 🔧 管理工具 - pgAdmin、Redis Insight,用于数据库管理
- 🌐 Nginx 代理 - 缓存反向代理,运行在 8080 端口
启用 HTTPS(可选):
# 启动时启用 TLS(自动生成自签名证书)
make compose-tls
# 通过 HTTPS 访问:https://localhost:8443/admin
# 或者使用你自己的证书:
# 未加密的密钥:
mkdir -p certs
cp 你的-cert.pem certs/cert.pem && cp 你的-key.pem certs/key.pem
make compose-tls
# 密码保护的密钥:
mkdir -p certs
cp 你的-cert.pem certs/cert.pem && cp 你的-encrypted-key.pem certs/key-encrypted.pem
echo "KEY_FILE_PASSWORD=你的密码" >> .env
make compose-tls
☸️ 快速入门 - Helm(Kubernetes)
部署到 Kubernetes,享受企业级功能:
# 添加 Helm 仓库(待上线时)
# 添加 Helm 仓库 mcp-context-forge
# helm repo add mcp-context-forge https://ibm.github.io/mcp-context-forge
# 更新 Helm 仓库
# helm repo update
# 目前使用本地 Chart
git clone https://github.com/IBM/mcp-context-forge.git
cd mcp-context-forge/charts/mcp-stack
# 使用 PostgreSQL 安装(默认)
helm install mcp-gateway . \
--set mcpContextForge.secret.PLATFORM_ADMIN_EMAIL=admin@yourcompany.com \
--set mcpContextForge.secret.PLATFORM_ADMIN_PASSWORD=changeme \
--set mcpContextForge.secret.JWT_SECRET_KEY=your-secret-key
# 检查部署状态
kubectl get pods -l app.kubernetes.io/name=mcp-context-forge
# 端口转发以访问管理界面
kubectl port-forward svc/mcp-gateway-mcp-context-forge 4444:80
# 访问地址:http://localhost:4444/admin
# 生成 API 令牌
kubectl exec deployment/mcp-gateway-mcp-context-forge -- \
python3 -m mcpgateway.utils.create_jwt_token \
--username admin@yourcompany.com --exp 10080 --secret your-secret-key
SSRF 注意:Helm 默认启用严格的 SSRF 设置(
SSRF_ALLOW_PRIVATE_NETWORKS=false)。 如果您注册集群内工具 URL(例如 fast-time 或 fast-test 服务),请仅通过mcpContextForge.config.SSRF_ALLOWED_NETWORKS允许您的集群 CIDR,或者对于仅限本地的基准测试设置,临时将SSRF_ALLOW_PRIVATE_NETWORKS=true。 请参阅docs/docs/manage/configuration.md#ssrf-protection和docs/docs/deployment/helm.md。
企业级特性:
- 🔄 自动扩展 - 基于 CPU/内存目标的 HPA
- 🗄️ 数据库选择 - PostgreSQL(生产环境)、SQLite(开发环境)
- 📊 可观测性 - Prometheus 指标、OpenTelemetry 跟踪
- 🔒 安全性 - RBAC、网络策略、密钥管理
- 🚀 高可用性 - 使用 Redis 集群的多副本部署
- 📈 监控 - 内置 Grafana 仪表板和告警
🐳 Docker(单容器)
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=my-test-key-but-now-longer-than-32-bytes \
-e AUTH_REQUIRED=true \
-e PLATFORM_ADMIN_EMAIL=admin@example.com \
-e PLATFORM_ADMIN_PASSWORD=changeme \
-e PLATFORM_ADMIN_FULL_NAME="平台管理员" \
-e DATABASE_URL=sqlite:///./mcp.db \
-e SECURE_COOKIES=false \
ghcr.io/ibm/mcp-context-forge:1.0.0-RC-2
# 查看日志并生成 API 密钥
docker logs -f mcpgateway
docker run --rm -it ghcr.io/ibm/mcp-context-forge:1.0.0-RC-2 \
python3 -m mcpgateway.utils.create_jwt_token --username admin@example.com --exp 10080 --secret my-test-key-but-now-longer-than-32-bytes
浏览至 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=my-test-key-but-now-longer-than-32-bytes \
-e PLATFORM_ADMIN_EMAIL=admin@example.com -e PLATFORM_ADMIN_PASSWORD=changeme \
ghcr.io/ibm/mcp-context-forge:1.0.0-RC-2
主机网络(访问本地 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 \
ghcr.io/ibm/mcp-context-forge:1.0.0-RC-2
空气隔离部署(无互联网):
docker build -f Containerfile.lite -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=my-test-key-but-now-longer-than-32-bytes \
mcpgateway:airgapped
🦭 Podman(适合无 root 权限用户)
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-2
高级:持久化存储、主机网络
持久化 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-2
主机网络:
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-2
✏️ Docker/Podman 小贴士
.env 文件 - 将所有
-e FOO=行放入文件中,并用--env-file .env替代。参考提供的 .env.example。固定标签 - 使用明确版本号(如
1.0.0-RC-2)而非latest,以确保构建的可重复性。JWT 令牌 - 在运行中的容器中生成:
docker exec mcpgateway python3 -m mcpgateway.utils.create_jwt_token --username admin@example.com --exp 10080 --secret my-test-key-but-now-longer-than-32-bytes升级 - 停止、移除并重新运行,同时保持相同的
-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
🖧 运行 ContextForge stdio 包装器
mcpgateway.wrapper 允许您通过 stdio 连接到网关,同时保持 JWT 身份验证。您应在 MCP 客户端上运行此工具。以下示例仅供测试使用。
# 设置环境变量
export MCPGATEWAY_BEARER_TOKEN=$(python3 -m mcpgateway.utils.create_jwt_token --username admin@example.com --exp 10080 --secret my-test-key-but-now-longer-than-32-bytes)
export MCP_AUTH="Bearer ${MCPGATEWAY_BEARER_TOKEN}"
export MCP_SERVER_URL='http://localhost:4444/servers/UUID_OF_SERVER_1/mcp'
export MCP_TOOL_CALL_TIMEOUT=120
export MCP_WRAPPER_LOG_LEVEL=DEBUG # 或 OFF 关闭日志记录
docker run --rm -i \
-e MCP_AUTH=$MCP_AUTH \
-e MCP_SERVER_URL=http://host.docker.internal:4444/servers/UUID_OF_SERVER_1/mcp \
-e MCP_TOOL_CALL_TIMEOUT=120 \
-e MCP_WRAPPER_LOG_LEVEL=DEBUG \
ghcr.io/ibm/mcp-context-forge:1.0.0-RC-2 \
python3 -m mcpgateway.wrapper
快速入门:VS Code 开发容器
克隆仓库并在 VS Code 中打开——它会检测到 .devcontainer 文件并提示选择 “在容器中重新打开”。该容器包含 Python 3.11、Docker CLI 以及项目的所有依赖项。
有关详细设置、工作流和 GitHub Codespaces 的说明,请参阅 开发者入职指南。
安装
make venv install # 创建 .venv 并安装依赖
make serve # 使用 gunicorn 在 :4444 端口运行
替代方案: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]' # 开发环境(预编译的 wheel 包)
# 或者:uv pip install 'psycopg[c]' # 生产环境(需要编译器)
连接 URL 格式如下:
DATABASE_URL=postgresql+psycopg://user:password@localhost:5432/mcp
快速启动 Postgres 容器:
docker run --name mcp-postgres \
-e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_DB=mcp -p 5432:5432 -d postgres
升级
有关升级说明、迁移指南和回滚流程,请参阅:
- 升级指南 — 通用升级流程
- CHANGELOG.md — 版本历史及破坏性变更
- MIGRATION-0.7.0.md — 多租户迁移(v0.6.x → v0.7.x)
配置
⚠️ 如果任何必需的
.env变量缺失或无效,网关将在启动时通过 Pydantic 的验证错误快速失败。
将提供的 .env.example 复制到 .env 文件中,并更新以下安全敏感值。
🔐 必须在使用前更改
这些变量具有不安全的默认值,必须在生产部署前更改:
| 变量 | 描述 | 默认值 | 是否需要操作 |
|---|---|---|---|
JWT_SECRET_KEY |
用于签名 JWT 令牌的密钥(32 字节以上) | my-test-key-but-now-longer-than-32-bytes |
使用 openssl rand -hex 32 生成 |
AUTH_ENCRYPTION_SECRET |
用于加密存储凭据的密码短语 | my-test-salt |
使用 openssl rand -hex 32 生成 |
BASIC_AUTH_USER |
HTTP Basic 认证的用户名 | admin |
生产环境中需更改 |
BASIC_AUTH_PASSWORD |
HTTP Basic 认证的密码 | changeme |
设置强密码 |
PLATFORM_ADMIN_EMAIL |
用于引导管理员用户的邮箱 | admin@example.com |
使用真实的管理员邮箱 |
PLATFORM_ADMIN_PASSWORD |
用于引导管理员用户的密码 | changeme |
设置强密码 |
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) |
注意:大小限制仅适用于新的创建或更新操作。现有内容不会被追溯验证。
⚙️ 项目默认值(开发环境)
这些值与代码中的默认值不同,旨在提供一个可用的本地/开发环境:
| 变量 | 描述 | 默认值 |
|---|---|---|
HOST |
绑定地址 | 0.0.0.0 |
MCPGATEWAY_UI_ENABLED |
启用管理界面仪表盘 | true |
MCPGATEWAY_ADMIN_API_ENABLED |
启用管理 API 端点 | true |
DATABASE_URL |
SQLAlchemy 连接 URL | sqlite:///./mcp.db |
SECURE_COOKIES |
对于 HTTP(非 HTTPS)开发环境,设置为 false |
false |
📚 完整配置参考
有关按类别(认证、缓存、SSO、可观测性等)组织的 300 多个环境变量的完整列表,请参阅 配置参考。
运行
快速参考
| 命令 | 服务器 | 端口 | 数据库 | 使用场景 |
|---|---|---|---|---|
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 | 测试环境 |
开发服务器(Uvicorn)
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 |
生产服务器(Gunicorn)
make serve # Gunicorn 在 :4444 端口运行,支持多工作进程
make serve-ssl # Gunicorn 后面启用 HTTPS,在 :4444 端口运行(使用 ./certs 目录下的证书)
Docker Compose(全栈部署)
make compose-up # 启动全栈:PostgreSQL、Redis、3 个网关副本、Nginx 在 :8080 端口运行
make compose-sso # 启动 SSO 栈,Keycloak 在 :8180 端口运行
make sso-test-login # 运行 SSO 功能测试(身份提供商 + 登录 URL + 测试用户)
make compose-logs # 实时查看所有服务的日志
make compose-down # 停止整个栈
Manual (Uvicorn)
uvicorn mcpgateway.main:app --host 0.0.0.0 --port 4444 --workers 4
Cloud Deployment
ContextForge can be deployed to any major cloud platform:
| Platform | Guide |
|---|---|
| AWS | ECS/EKS Deployment |
| Azure | AKS Deployment |
| Google Cloud | Cloud Run |
| IBM Cloud | Code Engine |
| Kubernetes | Helm Charts |
| OpenShift | OpenShift Deployment |
For comprehensive deployment guides, see Deployment Documentation.
API Reference
Interactive API documentation is available when the server is running:
- Swagger UI — Try API calls directly in your browser
- ReDoc — Browse the complete endpoint reference
Quick Authentication:
# Generate a JWT token
export TOKEN=$(python3 -m mcpgateway.utils.create_jwt_token \
--username admin@example.com --exp 10080 --secret my-test-key-but-now-longer-than-32-bytes)
# Test API access
curl -H "Authorization: Bearer $TOKEN" http://localhost:4444/health
For comprehensive curl examples covering all endpoints, see the API Usage Guide.
Testing
make test # Run unit tests
make lint # Run all linters
make doctest # Run doctests
make coverage # Generate coverage report
See Doctest Coverage Guide for documentation testing details.
Project Structure
mcpgateway/ # Core FastAPI application
├── main.py # Entry point
├── config.py # Pydantic Settings configuration
├── db.py # SQLAlchemy ORM models
├── schemas.py # Pydantic validation schemas
├── services/ # Business logic layer (50+ services)
├── routers/ # HTTP endpoint definitions
├── middleware/ # Cross-cutting concerns
└── transports/ # SSE, WebSocket, stdio, streamable HTTP
tests/ # Test suite (7,000+ tests)
docs/docs/ # Full documentation (MkDocs)
charts/ # Kubernetes/Helm charts
plugins/ # Plugin framework and implementations
mcp-servers/ # Sample/test MCP servers (see note below)
Note: The
mcp-servers/directory contains unsupported sample and test servers, most originating from community contributions, provided for demonstration and integration testing purposes only. They generally lack session management, persistent state, multi-tenancy, authentication, and other production concerns. They do not go through the same review, testing, and security rigor as the core ContextForge codebase and should not be run in production.Security: Never run untrusted MCP servers directly on your local filesystem. Always use a sandbox, container, or microVM (e.g. gVisor, Firecracker) with restricted capabilities. Exercise caution when registering any remote MCP server, including servers from public catalogs — perform your own security evaluation before granting access to your gateway.
For complete structure, see CONTRIBUTING.md or run tree -L 2.
Development
make dev # Dev server with auto-reload (:8000)
make test # Run test suite
make lint # Run all linters
make coverage # Generate coverage report
Run make to see all available targets.
For development workflows, see:
Troubleshooting
Common issues and solutions:
| Issue | Quick Fix |
|---|---|
| SQLite "disk I/O error" on macOS | Avoid iCloud-synced directories; use ~/mcp-context-forge/data |
| Port 4444 not accessible on WSL2 | Configure WSL integration in Docker Desktop |
| Gateway exits immediately | Copy .env.example to .env and configure required vars |
ModuleNotFoundError |
Run make install-dev |
For detailed troubleshooting guides, see Troubleshooting Documentation.
Contributing
- Fork the repo, create a feature branch.
- Run
make lintand fix any issues. - Keep
make testgreen. - Open a PR with signed commits (
git commit -s).
See CONTRIBUTING.md for full guidelines and Issue Guide #2502 for how to file bugs, request features, and find issues to work on.
Changelog
A complete changelog can be found here: CHANGELOG.md
License
Licensed under the Apache License 2.0 - see LICENSE
Core Authors and Maintainers
- Mihai Criveti - Distinguished Engineer, Agentic AI
Special thanks to our contributors for helping us improve ContextForge:
Star History and Project Activity
版本历史
v1.0.0-RC22026/03/09v1.0.0-RC12026/02/18v1.0.0-BETA-22026/01/24v1.0.0-BETA-12025/12/16v0.9.02025/11/09v0.8.02025/10/08v0.7.02025/09/16v0.6.02025/08/22v0.5.02025/08/05v0.4.02025/07/22v0.3.12025/07/11v0.3.02025/07/09v0.2.02025/06/24v0.1.12025/06/15v0.1.02025/06/05常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备


