MCP网关

MCP网关是一个聚合多个MCP(模型上下文协议)服务器的统一接口,提供REST API、MCP HTTP传输、动态OpenAPI等功能,适用于AI代理的本地优先开发环境。

  • by kcalvelli
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 kcalvelli/mcp-gateway

使用说明

mcp网关

部分 凯恩生态系统 --NixOS上本地第一AI代理的声明性基础。

通用MCP网关-在单个接口后聚合多个MCP(模型上下文协议)服务器。

特性

  • REST API -通过HTTP进行工具管理和执行
  • MCP HTTP传输 -原生MCP协议支持(2025-06-18规范)
  • 动态OpenAPI -Open WebUI集成的每个工具端点
  • Web用户界面 -用于管理服务器和工具的可视化编排器
  • 声明性配置 -用于服务器配置的NixOS/家庭管理器模块
  • Tailscale集成 -通过Tailscale服务实现网络级安全

安全模型

没有应用程序级身份验证。网络安全由Tailscale提供:

  • 只有尾网上的设备才能访问网关
  • Tailscale提供设备身份和端到端加密
  • Tailscale服务在您的尾网上为网关提供一个唯一的DNS名称

安装

含镍片

# flake.nix
{
  inputs.mcp-gateway.url = "github:kcalvelli/mcp-gateway";

  outputs = { self, nixpkgs, mcp-gateway, ... }: {
    # Apply overlay
    nixpkgs.overlays = [ mcp-gateway.overlays.default ];

    # Import home-manager module
    home-manager.users.youruser = {
      imports = [ mcp-gateway.homeManagerModules.default ];

      services.mcp-gateway = {
        enable = true;
        autoEnable = [ "github" "time" ];
        servers = {
          github = {
            enable = true;
            command = "${pkgs.github-mcp-server}/bin/github-mcp-server";
            args = [ "stdio" ];
          };
          # ... more servers
        };
      };
    };
  };
}

配置

服务器定义

services.mcp-gateway.servers.myserver = {
  enable = true;
  command = "/path/to/mcp-server";
  args = [ "arg1" "arg2" ];
  env = {
    API_KEY = "value";
  };
  passwordCommand = {
    SECRET_VAR = [ "command" "to" "get" "secret" ];
  };
};

自动启用服务器

services.mcp-gateway.autoEnable = [ "github" "time" "brave-search" ];

Tailscale服务(NixOS)

使用唯一的DNS名称显示尾网上的网关:

services.mcp-gateway = {
  enable = true;
  user = "youruser";
  tailscaleServe = {
    enable = true;
    serviceName = "mcp-gateway";  # -> mcp-gateway.<tailnet>.ts.net
  };
};

API终点

端点 描述
GET /api/servers 列出所有已配置的服务器
GET /api/tools 列出所有可用工具
POST /api/tools/{server}/{tool} 执行工具
POST /tools/{server}/{tool} 执行一个工具(兼容OpenAPI)
POST /mcp MCP HTTP传输端点
GET /tools/openapi.json 所有工具的动态OpenAPI模式
GET /health 健康检查
/ Web用户界面

MCP传输

这 /mcp 端点实现MCP流式HTTP(2025-06-18规范):

# Initialize session
curl -X POST http://localhost:8085/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{"clientInfo":{"name":"test"}}}'

# List tools
curl -X POST http://localhost:8085/mcp \
  -H "Content-Type: application/json" \
  -H "Mcp-Session-Id: <session-id-from-response>" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":2}'

工具名称的命名空间为 {server_id}__{tool_name} 以避免冲突。

双子星命令行工具

Gemini CLI通过其 httpUrl 运输。将网关添加为单个MCP服务器:

gemini mcp add gateway --httpUrl http://localhost:8085/mcp

或手动添加到 ~/.gemini/settings.json:

{
  "mcpServers": {
    "gateway": {
      "httpUrl": "http://localhost:8085/mcp"
    }
  }
}

网关管理的所有MCP服务器都可以通过此单一端点自动供Gemini CLI使用。

发展

nix develop
mcp-gateway

许可证

麻省理工学院