MCP网关服务器

一个生产就绪的模型上下文协议(MCP)网关和路由器,具有认证、负载均衡和Terraform部署配置功能。

  • by bedda-tech
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 bedda-tech/mcp-gateway

使用说明

MCP网关服务器

一个生产就绪的模型上下文协议(MCP)网关和路由器,具有身份验证、负载平衡和Terraform部署配置。

特性

  • 网关和路由器:智能请求路由到多个MCP服务器
  • 身份验证和授权:基于JWT的授权,支持API密钥
  • 负载平衡:多种策略(循环、最少连接、加权、随机)
  • 高可用性:Redis支持的会话,自动故障转移
  • 与OpenAI兼容的API:OpenAI API端点的插入式替换
  • 监控:普罗米修斯指标和Grafana仪表板
  • 基础设施即代码:完成AWS部署的Terraform配置
  • Docker支持:使用docker compose实现完全容器化

建筑

┌─────────────┐     ┌──────────────┐     ┌────────────┐
│   Clients   │────▶│  MCP Gateway │────▶│ MCP Servers│
└─────────────┘     └──────────────┘     └────────────┘
                            │
                    ┌───────┴────────┐
                    │                │
                ┌───▼───┐      ┌────▼────┐
                │ Redis │      │Postgres │
                └───────┘      └─────────┘

快速开始

地方发展

  1. 克隆存储库:
cd mcp-gateway
  1. 安装依赖项:
npm install
  1. 使用Docker Compose启动服务:
docker-compose up -d
  1. 创建环境配置:
cp .env.example .env
# Adjust environment variables as needed
  1. 运行网关:
npm run dev

网关将在 http://localhost:3000

API终点

LLM接口(兼容OpenAI)

  • POST /api/v1/chat/completions -聊天完成
  • POST /api/v1/tools/execute -执行工具
  • GET /api/v1/tools -列出可用工具
  • GET /api/v1/models -列出可用型号

管理界面

  • GET /api/admin/servers -列出服务器
  • POST /api/admin/servers -添加服务器
  • DELETE /api/admin/servers/:id -删除服务器
  • GET /api/admin/routes -列出路线
  • POST /api/admin/routes -添加路线
  • DELETE /api/admin/routes/:id -删除路线
  • POST /api/admin/users -创建用户
  • POST /api/admin/users/:id/api-key -生成API密钥

监控

  • GET /health -健康检查
  • GET /metrics -普罗米修斯指标

认证

API密钥验证

在请求头中包含API密钥:

curl -H "x-api-key: mcp_your_api_key_here" http://localhost:3000/api/v1/models

JWT身份验证

对于管理员端点,使用Bearer令牌:

curl -H "Authorization: Bearer your_jwt_token" http://localhost:3000/api/admin/servers

客户示例

JavaScript/Node.js

const { MCPGatewayClient } = require('./examples/client');

const client = new MCPGatewayClient('http://localhost:3000', 'mcp_your_api_key');

// Chat completion
const response = await client.chatCompletion([
  { role: 'user', content: 'Hello!' }
]);

python

from examples.python_client import MCPGatewayClient, ChatMessage

client = MCPGatewayClient('http://localhost:3000', 'mcp_your_api_key')

# Chat completion
messages = [ChatMessage(role='user', content='Hello!')]
response = client.chat_completion(messages)

部署

AWS与Terraform

  1. 配置AWS凭据:
aws configure
  1. 初始化地形:
cd terraform
terraform init
  1. 创建terraform.tfvars:
aws_region     = "us-east-1"
environment    = "production"
jwt_secret     = "your-secret-here"
admin_email    = "admin@example.com"
domain_name    = "mcp-gateway.example.com"
  1. 部署:
terraform plan
terraform apply

码头工人

使用Docker构建和运行:

docker build -t mcp-gateway .
docker run -p 3000:3000 -p 9090:9090 mcp-gateway

配置

环境变量:

  • PORT -服务器端口(默认值:3000)
  • JWT_SECRET -JWT签约秘诀
  • REDIS_HOST -Redis主机
  • REDIS_PORT -Redis端口
  • REDIS_PASSWORD -Redis密码
  • DATABASE_HOST -PostgreSQL主机
  • DATABASE_PORT -PostgreSQL端口
  • DATABASE_NAME -数据库名称
  • DATABASE_USER -数据库用户
  • DATABASE_PASSWORD -数据库密码
  • LOG_LEVEL -日志记录级别(调试、信息、警告、错误)
  • NODE_ENV -环境(开发、生产)

负载平衡策略

  • 轮询:在服务器之间均匀分配请求
  • 最少连接:指向活动连接最少的服务器的路由
  • 加权的:根据服务器权重进行分配
  • 随机:随机选择服务器

监控

访问监控仪表板:

  • 普罗米修斯: http://localhost:9091
  • 格拉法娜: http://localhost:3001 (管理员/管理员)

发展

运行测试:

npm test

棉绒编码:

npm run lint

类型检查:

npm run typecheck

安全

  • 基于JWT的管理员API身份验证
  • 用于客户端访问的API密钥身份验证
  • 所有端点的速率限制
  • CORS配置
  • Helmet.js用于安全标头
  • 加密Redis连接
  • TLS对生产的支持

许可证

麻省理工学院