项目简介
MCP上下文熔炉网关(ContextForge MCP Gateway)是一个企业级的模型上下文协议(MCP)服务器实现,同时扮演着代理和注册中心的双重角色。它能将多个MCP服务器、REST API和A2A(Agent-to-Agent)服务联邦化,为AI客户端提供统一的、安全且可扩展的上下文服务。该项目旨在简化LLM应用与各种上下文服务和外部功能之间的集成,核心功能包括托管资源、注册工具、渲染Prompt模板,并通过标准化的JSON-RPC协议与客户端通信。
主要功能点
- 服务联邦与代理: 统一管理和聚合来自不同MCP服务器、REST API和A2A服务的工具、资源和Prompt,通过一个统一的入口点对外暴露。
- 多协议支持: 支持HTTP、JSON-RPC、WebSocket、SSE (Server-Sent Events) 和stdio等多种传输协议,兼容不同AI客户端的需求。
- 虚拟化服务: 能够将非MCP兼容的REST或gRPC服务封装为MCP工具和虚拟服务器,实现旧有API的现代化集成。
- 上下文管理: 托管和管理URI资源,支持Prompt模板的定义与渲染,以及对LLM可用工具的注册和执行。
- 安全与控制: 提供OAuth、JWT等认证方式,支持动态客户端注册、细粒度权限控制,以及限流、重试和熔断机制。
- 可观测性与管理界面: 内置OpenTelemetry可观测性(兼容Phoenix、Jaeger等),并提供可选的Web管理UI,用于实时配置、监控和日志查看。
- A2A集成: 允许注册外部AI代理(如OpenAI、Anthropic)并将其暴露为MCP工具。
安装步骤
该项目支持通过PyPI或Docker进行部署。
-
前提条件:
- Python 3.10或更高版本 (推荐3.11)
- Git (用于克隆仓库)
- Docker 或 Podman (如果选择容器化部署)
-
通过PyPI安装 (推荐用于开发):
- 克隆仓库并进入目录:
git clone https://github.com/IBM/mcp-context-forge.git cd mcp-context-forge - 创建并激活Python虚拟环境,然后安装'mcp-contextforge-gateway'包:
python3 -m venv .venv source .venv/bin/activate pip install --upgrade pip pip install mcp-contextforge-gateway - 复制示例配置文件并进行自定义(至少设置管理员密码和JWT密钥):
cp .env.example .env # 使用文本编辑器打开 .env 文件,修改以下变量: # BASIC_AUTH_PASSWORD=您的管理密码 # JWT_SECRET_KEY=一个复杂的密钥字符串 # [email protected] (您的管理员邮箱) # PLATFORM_ADMIN_PASSWORD=您的管理员密码 # ... 其他根据需要修改的配置 ... - 运行MCP网关服务器:
mcpgateway --host 0.0.0.0 --port 4444
- 克隆仓库并进入目录:
-
通过Docker容器部署 (推荐用于生产):
- 运行Docker命令启动MCP网关容器。请替换环境变量中的密码和密钥为您的自定义值:
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=您的复杂密钥字符串 \ -e BASIC_AUTH_USER=admin \ -e BASIC_AUTH_PASSWORD=您的管理密码 \ -e AUTH_REQUIRED=true \ -e [email protected] \ -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:0.8.0 - 服务器启动后,您可以通过浏览器访问 'http://localhost:4444/admin' (用户名: 'admin', 密码: '您的管理密码') 进行管理。
- 运行Docker命令启动MCP网关容器。请替换环境变量中的密码和密钥为您的自定义值:
服务器配置 (MCP客户端配置)
MCP客户端可以通过运行'mcpgateway.wrapper'本地进程来与MCP上下文熔炉网关建立连接。以下是为MCP客户端配置网关服务器的JSON示例及详细说明,您需要将这些信息配置到您的MCP客户端中:
{ "mcpServers": { "mcp-contextforge-gateway-alias": { "description": "MCP上下文熔炉网关提供的服务", "command": "python", "args": [ "-m", "mcpgateway.wrapper", "--url", "https://localhost:4444/servers/您的虚拟服务器UUID/mcp", "--auth", "Bearer 您的JWT认证令牌" ], "env": { "MCP_TOOL_CALL_TIMEOUT": "120", "MCP_WRAPPER_LOG_LEVEL": "INFO" }, "transport": "stdio" } } }
- 'mcpServers': 这是一个顶层键,用于定义MCP客户端中所有MCP服务器的配置。
- 'mcp-contextforge-gateway-alias': 您为这个MCP网关服务器连接所指定的别名,可以自定义。
- 'description': 对该MCP服务器连接的简要描述。
- 'command': 启动'mcpgateway.wrapper'程序的命令,通常是'python'。
- 'args': 启动'mcpgateway.wrapper'时传递的参数列表:
- '"-m", "mcpgateway.wrapper"': 指示Python解释器运行'mcpgateway.wrapper'模块。这个包装器会在本地启动一个进程,充当客户端与远程网关之间的stdio-HTTP/SSE桥梁。
- '"--url", "https://localhost:4444/servers/您的虚拟服务器UUID/mcp"': 指定MCP网关暴露的虚拟服务器API端点URL。
- 'https://localhost:4444': 这是MCP网关服务器的地址和端口。如果网关运行在Docker中,并且客户端运行在宿主机上,您可能需要将'localhost'替换为'host.docker.internal'(在macOS/Windows的Docker Desktop上)或网关容器的实际IP(在Linux上)。
- '您的虚拟服务器UUID': 在您通过MCP网关管理界面或API创建了虚拟服务器后,每个虚拟服务器都会有一个唯一的UUID。您需要将此占位符替换为实际的UUID。
- '/mcp': 指定使用Streamable HTTP协议的端点。如果您配置了SSE传输,也可以是'/sse'。
- '"--auth", "Bearer 您的JWT认证令牌"': 提供用于向MCP网关进行身份验证的Bearer Token。您需要将其替换为通过网关的认证机制(例如,'python3 -m mcpgateway.utils.create_jwt_token'命令)生成的有效JWT令牌。
- 'env': 这是一个可选的键,用于为'mcpgateway.wrapper'进程设置额外的环境变量:
- '"MCP_TOOL_CALL_TIMEOUT": "120"': 设置工具调用操作的默认超时时间为120秒。
- '"MCP_WRAPPER_LOG_LEVEL": "INFO"': 设置'mcpgateway.wrapper'的日志级别为信息级。
- 'transport': 指示MCP客户端与'mcpgateway.wrapper'进程通信所使用的传输协议类型,这里是'stdio'(标准输入/输出)。
基本使用方法
- 启动网关服务器: 按照上述安装步骤,通过PyPI或Docker成功启动MCP上下文熔炉网关。
- 访问管理界面: 打开浏览器访问 'http://localhost:4444/admin' (或您配置的地址),使用您的管理员凭据登录。
- 注册一个MCP服务器 (例如:MCP示例时间服务器):
- 在您的本地环境(或任何可访问的地方)启动一个MCP兼容的示例服务器。例如,项目提供了'mcp-server-git',可以通过'mcpgateway.translate'命令启动一个包装器将其暴露为SSE服务:
# 确保您已在虚拟环境中安装 'uv' (pip install uv) python3 -m mcpgateway.translate \ --stdio "uvx mcp-server-git" \ --expose-sse \ --port 9000 - 在MCP网关中注册该外部MCP服务器。您需要一个JWT认证令牌(例如,通过运行'python3 -m mcpgateway.utils.create_jwt_token --username [email protected] --secret 您的复杂密钥字符串'生成并将其值存入环境变量'MCPGATEWAY_BEARER_TOKEN'):
curl -s -X POST -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \ -H "Content-Type: application/json" \ -d '{"name":"fast_time_server","url":"http://localhost:9000/sse"}' \ http://localhost:4444/gateways | jq
- 在您的本地环境(或任何可访问的地方)启动一个MCP兼容的示例服务器。例如,项目提供了'mcp-server-git',可以通过'mcpgateway.translate'命令启动一个包装器将其暴露为SSE服务:
- 创建虚拟服务器:
- 首先,列出所有已注册的工具,以获取其ID(这些工具由您在步骤3注册的MCP服务器提供):
curl -s -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" http://localhost:4444/tools | jq - 从上述输出中获取您希望在虚拟服务器中包含的工具ID。然后,使用这些ID创建一个虚拟服务器 (请将'"<ID_OF_TOOLS>"'替换为实际工具ID,例如 '"6018ca46d32a4ac6b4c054c13a1726a2"'):
curl -s -X POST -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \ -H "Content-Type: application/json" \ -d '{"name":"my_time_utilities","description":"我的时间工具集合","associatedTools":["<ID_OF_TOOLS_1>", "<ID_OF_TOOLS_2>"]}' \ http://localhost:4444/servers | jq - 执行此命令后,JSON响应中会包含新创建虚拟服务器的'id'(UUID)。请记录下这个UUID。
- 首先,列出所有已注册的工具,以获取其ID(这些工具由您在步骤3注册的MCP服务器提供):
- 使用MCP客户端连接:
- 将上述“服务器配置”部分提供的JSON示例粘贴到您的MCP客户端的配置中(例如,Claude Desktop的'File ▸ Settings ▸ Developer ▸ Edit Config')。
- 务必将JSON中'您的虚拟服务器UUID'替换为在步骤4中获取的实际UUID,并将'您的JWT认证令牌'替换为您的有效JWT令牌。
- 重启您的MCP客户端应用,客户端即可通过本地运行的'mcpgateway.wrapper'进程连接到MCP上下文熔炉网关,并发现及调用您在其中配置的工具、资源和Prompt。
信息
分类
AI与计算