MCP 网关
English |简体中文
执照
该项目根据 GNU 通用公共许可证 v3.0 获得许可 - 有关更多详细信息,请参阅LICENSE文件。
项目概述
MCP 网关是一个使用 Python 构建的应用程序。它充当中央网关,连接并聚合来自多个后端 MCP 服务器的功能(无论它们通过 Stdio 还是 SSE 协议通信)。最终,它通过统一的SSE端点 ( /sse
) 将这些聚合的功能暴露给上游 MCP 客户端。
核心优势:
- 简化的客户端配置: MCP 客户端只需连接到 MCP 网关的单一地址即可访问所有后端服务的功能,无需单独配置每个后端服务器。
- **能力聚合与编排:**聚合来自不同来源的具有多种功能的 MCP 工具,为构建更强大、专注于特定任务领域的定制代理提供基础。
项目文件结构
内置 MCP 服务器
该项目附带四个后端 MCP 服务器工具,可直接使用并在config.json
中启用,无需额外配置:
- Bash 命令执行工具(
bash_server.py
) :在 Linux、macOS 或 WSL 环境中执行 Bash 命令。 - Windows CMD 命令执行工具(
cmd_server.py
) :在 Windows 环境中执行 CMD 命令。 - Windows PowerShell 命令执行工具(
powershell_server.py
) :在 Windows 环境中执行 PowerShell 命令。 - Windows WMI 查询工具(
wmi_server.py
) :在 Windows 环境中执行 WMI 查询。
如果你在Linux环境下遇到如下错误:
请卸载
wmi
模块:uv remove wmi
安装和设置
本项目使用 Python 编写。建议使用uv
进行环境和依赖管理。
- 克隆存储库
- 创建并激活虚拟环境
- 安装依赖项
完成这些步骤后,项目就可以运行了。
快速入门
获取项目帮助
您可以使用-h
或--help
参数查看所有可用的启动选项:
输出将类似于此:
启动项目
使用uv run python main.py
启动服务器。您可以指定host
、 port
和log-level
:
启动后,你会看到类似下图的丰富美化的控制台输出,显示了服务器状态、连接信息以及加载的工具:
MCP 客户端连接
启动 MCP 网关后,您可以使用任何与 MCP 兼容的客户端(例如 Cline、Cursor、Claude Desktop 或自定义客户端)连接到网关提供的 SSE 端点。
默认地址是http://<Server_IP_Address>:9000/sse
(如果使用默认端口)。
示例(使用 ChatWise Connect):
- 选择
SSE
连接类型。 - 输入网关的 SSE URL(例如,
http://127.0.0.1:9000/sse
)。 - 单击
Connect
。
连接成功后,您可以在客户端看到通过 Gateway 聚合的所有后端 MCP 工具:
日志
运行时日志会自动保存在项目根目录下的logs
文件夹中。日志文件名包含时间戳和日志级别,方便您追踪问题。
配置文件( config.json
)
核心配置文件config.json
位于项目根目录,它定义了 MCP 网关需要连接和管理的后端 MCP 服务器。
每个条目代表一个后端服务器。键是你分配给该后端服务器的唯一名称(此名称将用作其功能的前缀),值是一个包含服务器配置的对象。
支持两种类型的后端服务器连接:
stdio
:通过标准输入/输出(stdin/stdout)与本地启动的 MCP 服务器进程进行通信。sse
:通过服务器发送事件 (SSE) 协议与远程或本地运行的 MCP 服务器通信。
Stdio 类型配置
适用于生命周期需要由网关管理的本地 MCP 服务器进程。
配置字段:
type
(必需):必须是"stdio"
。command
(必需):用于启动服务器进程的可执行命令(例如,python
、uv
、node
或脚本/可执行文件的绝对路径)。args
(必需):传递给command
参数列表(字符串列表)。env
(可选):为子进程设置的环境变量字典(Dict[str, str])。如果省略,子进程将继承网关的环境变量。
例子:
工作原理: MCP 网关启动时,会使用指定的command
和args
(以及可选的env
)启动一个子进程。网关通过此子进程的标准输入和输出与后端 MCP 服务器通信。网关关闭时,会尝试终止这些子进程。
SSE类型配置
适用于连接已经运行的 MCP 服务器(本地或远程),或者网关在连接之前需要启动本地 SSE 服务器进程的情况。
配置字段:
type
(必需):必须是"sse"
。url
(必需):后端 MCP 服务器的 SSE 端点 URL(完整的 HTTP/HTTPS 地址)。command
(可选):如果指定,网关将在启动时运行此命令以启动本地 SSE 服务器。args
(可选,仅在指定command
时):传递给command
的参数列表。env
(可选,仅在指定command
时):为本地启动的子进程设置的环境变量。
示例 1:连接到已运行的远程 SSE 服务器
示例 2:网关启动本地 SSE 服务器并连接
工作原理:
- 仅提供
url
:网关直接尝试连接到指定的url
。 url
、command
、args
provided :网关首先使用command
和args
启动一个本地进程(期望此进程监听与url
对应的地址和端口)。然后,它会等待一小段时间(在client_manager.py
中定义的LOCAL_SSE_STARTUP_DELAY
),然后再尝试连接到url
。当网关关闭时,它会尝试终止此本地进程。
配置添加示例
以下是如何将第三方 MCP 服务器添加到config.json
示例。
Stdio 示例:Playwright MCP
假设您想要集成 Playwright 的 MCP 服务器( @playwright/mcp
)。
- 了解启动方法:Playwright MCP 通常使用
npx @playwright/mcp@latest
启动。这是一个通过npx
执行的 Node.js 包。 - 配置
config.json
:这里,command
是npx
,args
包含 Playwright MCP 包名称和版本。 - 重启网关:保存
config.json
并重启 MCP 网关。
启动后,您应该在控制台日志和客户端中看到名为playwright/...
(例如playwright/browse
)的工具。
SSE 示例:ENScan_GO(本地启动)
假设您想要集成 ENScan_GO,这是一个可以使用./enscan --mcp
启动并在http://localhost:8080
提供 SSE 服务的 Go 程序。
- 获取可执行文件:下载 ENScan_GO 可执行文件(例如,
enscan-v1.2.1-windows-amd64.exe
)并将其放在可访问的位置(例如,servers/
目录或系统 PATH)。 - 配置
config.json
:在这里,我们将type
指定为sse
,提供它监听的url
,并使用command
和args
来告诉网关如何启动这个本地 SSE 服务器。 - 重启网关:保存
config.json
并重启 MCP 网关。
网关将首先启动 ENScan_GO 进程,然后连接到http://127.0.0.1:8080/sse
。启动后,您应该看到名为enscan/...
的工具。
This server cannot be installed
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
MCP网关
Related MCP Servers
- GoApache 2.0
- Python
- MIT License
- PythonMIT License