MCP网关服务器

MCP网关服务器是一个灵活的网关服务,用于桥接Model Context Protocol (MCP) STDIO服务器与HTTP+SSE和REST API,支持多实例MCP服务器通过HTTP暴露。

  • by acehoss
  • TypeScript
  • 本地部署
  • 131 星标
  • 更新于
在 GitHub 查看 acehoss/mcp-gateway

使用说明

MCP网关

一种灵活的网关服务器,将模型上下文协议(MCP)STDIO服务器桥接到MCP HTTP+SSE和REST API,使多实例MCP服务器能够通过HTTP公开。

特性

  • 运行同一MCP服务器类型的多个实例
  • 配置多种不同的MCP服务器类型
  • 灵活的网络绑定配置
  • 使用会话ID在服务器实例之间进行彻底分离
  • 连接关闭时自动清理服务器资源
  • 基于YAML的配置
  • 可选的基本和承载令牌身份验证
  • 可配置的调试日志记录级别
  • REST API支持

REST API支持

MCP网关现在为MCP服务器提供了一个REST API接口,使任何支持OpenAPI/Swagger规范的HTTP客户端都可以访问它们。此功能对于集成OpenAI的自定义GPT和其他REST API客户端特别有用。

REST API端点

在调用工具之前,您需要获取会话ID:

curl "http://localhost:3000/api/sessionid"
# Returns: {"sessionId": "<generated-id>"}

MCP服务器公开的每个工具都可以在以下网址获得:

POST /api/{serverName}/{toolName}?sessionId={session-id}

注: sessionId 所有工具调用都需要查询参数。

例如,要调用 directory_tree 工具上 filesystem MCP服务器:

# First get a session ID
SESSION_ID=$(curl -s "http://localhost:3000/api/sessionid" | jq -r .sessionId)

# Then make the tool call
curl -X POST "http://localhost:3000/api/filesystem/directory_tree?sessionId=$SESSION_ID" \
  -H "Content-Type: application/json" \
  -d '{"path": "/some/path"}'

OpenAPI模式生成

网关可以为所有配置的工具生成OpenAPI模式,使其易于与OpenAPI兼容的客户端集成:

# Generate YAML format (default)
npm start -- --schemaDump

# Generate JSON format
npm start -- --schemaDump --schemaFormat json

生成的架构包括:

  • 每个已配置服务器的所有可用端点
  • 工具描述和参数模式
  • 请求/响应格式
  • 身份验证要求

目的

目前,大多数MCP服务器都是为本地执行而设计的。MCP网关使支持HTTP+SSE的客户端能够与远程计算机上运行的MCP服务器进行交互。这解决了常见的部署场景,例如运行 自由聊天 在容器化环境中,某些MCP服务器(如Puppeteer服务器)的功能可能有限。MCP网关为在多台机器上分布MCP服务器提供了一个强大的解决方案,同时保持无缝连接。

安全功能

MCP网关支持两种可以独立启用的身份验证方法:

  1. 基本身份验证:用户名/密码对
  2. 承载令牌身份验证:基于令牌的身份验证

这两种方法可以同时启用,任何有效的身份验证都将授予访问权限。

验证配置

将身份验证设置添加到您的 config.yaml:

auth:
  basic:
    enabled: true
    credentials:
      - username: "admin"
        password: "your-secure-password"
      # Add more username/password pairs as needed
  bearer:
    enabled: true
    tokens:
      - "your-secure-token"
      # Add more tokens as needed

使用身份验证

基本身份验证

curl -u username:password http://localhost:3000/serverName

承载令牌身份验证

curl -H "Authorization: Bearer your-secure-token" http://localhost:3000/serverName

安装

npm install

配置

网关是使用YAML文件配置的。默认情况下,它会查找 config.yaml 在当前目录中,但您可以使用 CONFIG_PATH 环境变量。

调试配置

网关使用 温斯顿 对于日志记录,提供丰富的格式和多个日志级别:

debug:
  level: "info"  # Possible values: "error", "warn", "info", "debug", "verbose"

日志级别,从最少到最详细:

  • error:仅显示错误
  • warn:显示警告和错误
  • info:显示一般信息、警告和错误(默认)
  • debug:显示调试信息和以上所有内容
  • verbose:显示所有可能的日志记录信息

日志包括时间戳,在终端中查看时按级别进行颜色编码。相关时,其他元数据以JSON格式包含在内。

日志输出示例:

2024-01-20T10:15:30.123Z [INFO]: New SSE connection for filesystem
2024-01-20T10:15:30.124Z [DEBUG]: Server instance created with sessionId: /filesystem?sessionId=abc123
2024-01-20T10:15:30.125Z [VERBOSE]: STDIO message received: {"type":"ready"}

基本配置示例

hostname: "0.0.0.0"  # Listen on all interfaces
port: 3000

servers:
  filesystem:
    command: npx
    args:
      - -y
      - "@modelcontextprotocol/server-filesystem"
      - "/path/to/root"
    
  git:
    command: npx
    args:
      - -y
      - "@modelcontextprotocol/server-git"

网络配置示例

仅在本地主机上监听(开发)

hostname: "127.0.0.1"
port: 3000

在特定界面上收听

hostname: "192.168.1.100"
port: 3000

在所有接口上监听(默认)

hostname: "0.0.0.0"
port: 3000

服务器配置

每个服务器 servers 部分需求:

  • command:运行服务器的命令
  • args:命令的参数列表
  • path (可选):服务器的工作目录

所有选项示例:

servers:
  myserver:
    command: npx
    args:
      - -y
      - "@modelcontextprotocol/server-mytype"
      - "--some-option"

完整配置示例

hostname: "0.0.0.0"
port: 3000

# Authentication configuration (optional)
auth:
  basic:
    enabled: true
    credentials:
      - username: "admin"
        password: "your-secure-password"
  bearer:
    enabled: true
    tokens:
      - "your-secure-token"

servers:
  filesystem:
    command: npx
    args:
      - -y
      - "@modelcontextprotocol/server-filesystem"
      - "/path/to/root"

运行网关

标准开始时间:

npm start

使用自定义配置:

CONFIG_PATH=/path/to/my/config.yaml npm start

添加新的服务器类型

  1. 安装要使用的MCP服务器包
  2. 向添加新条目 servers 配置中的部分:
servers:
  mynewserver:
    command: npx
    args:
      - -y
      - "@modelcontextprotocol/server-newtype"
      # Add any server-specific arguments here

建筑

网关为每个服务器实例创建一个唯一的会话,允许多个客户端独立使用相同的服务器类型。每个会话都有自己的:

  • 与实际MCP服务器的STDIO连接
  • SSE与客户端的连接
  • 传输之间的消息桥接

当客户端断开连接时,所有相关资源都会自动清理。

环境变量

  • CONFIG_PATH:YAML配置文件的路径(默认值: ./config.yaml)

贡献

问题和公关是受欢迎的,但说实话,它们可能会被搁置一段时间。

许可证

MIT许可证

卷曲-X POST”http://localhost:3000/api/filesystem/directory_tree?sessionId=randomSession12345“-H”内容类型:应用程序/json“-d”{ “path”:“/home/aaron/Clara” }'