企业级MCP网关

MCP网关是企业级基础设施层,为AI代理提供认证、授权、审计日志、速率限制、使用计量和密钥管理等功能,适用于医疗、金融和企业等合规场景。

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

使用说明

mcp网关

MCP的企业基础架构层。 身份验证、授权、审计日志记录、速率限制、使用计量和秘密管理——用于在生产中调用MCP工具的AI代理。

思考: Cloudflare+Okta+Datadog,但适用于模型上下文协议。

为什么

MCP今日:代理→ 服务器。直接连接。没有身份验证,没有审计跟踪,没有费率限制,没有计费,没有秘密管理。

这对演示来说很好。它不适合:

  • 医疗保健 (HIPAA审计要求)
  • 金融 (SOC 2,法规遵从性)
  • 企业 (RBAC、成本分配、安全)

MCP网关位于代理和服务器之间,对每个工具调用执行策略。

Agent (Claude, GPT, etc.)
  ↓ MCP protocol
┌──────────────────────────┐
│      MCP Gateway         │
│  Auth → Policy → Audit   │
│  Rate Limit → Meter      │
│  Secrets → Sandbox       │
└──────────────────────────┘
  ↓ MCP protocol
MCP Server (any server)

五柱

1.注册+发现

注册MCP服务器。代理通过网关发现可用的工具。多租户:每个消费者只看到他们被允许看到的内容。

2.策略+权限(RBAC)

  • 每个代理/消费者的API密钥身份验证
  • 基于角色的工具权限(reader 能 get_* 和 search_*,不 delete_*)
  • 服务器级别限制(阻止访问 mcp-stripe 对于只读代理)
  • 参数级条件(只允许查询自己的客户ID)

3.审计+来源

  • 记录每个工具调用:谁、什么、何时、参数、响应、延迟
  • 篡改明显的哈希链 --每个条目都对前一个条目进行哈希运算,如果修改了,则可检测
  • 可导出到S3、webhook、SIEM
  • 按消费者、服务器、工具、状态、时间范围查询

4.计量+计费

  • 每个消费者、每个服务器、每个工具的使用情况跟踪
  • 呼叫、延迟、错误率
  • 退款成本分配
  • 条纹集成就绪

5.运行时沙盒+秘密

  • MCP服务器作为受管子进程运行
  • 通过环境变量注入的秘密——从未暴露给代理
  • 超时强制,崩溃时自动重启
  • 服务器健康监控

快速开始

# Install
git clone https://github.com/PetrefiedThunder/mcp-gateway.git
cd mcp-gateway
npm install && npm run build

# Generate config
npx mcp-gateway init

# Edit gateway.yaml with your servers and API keys

# Start the gateway (as an MCP server)
npx mcp-gateway serve

配置

网关通过以下方式配置 gateway.yaml:

auth:
  type: api-key
  keys:
    - id: key-1
      key: gw_your_key_here
      name: "Production Agent"
      consumerId: agent-prod
      roles: [reader, writer]
      enabled: true

servers:
  - id: mcp-fred
    name: "Federal Reserve Economic Data"
    command: node
    args: ["./mcp-fred/dist/index.js"]
    enabled: true

  - id: mcp-stripe
    name: "Stripe Payments"
    command: node
    args: ["./mcp-stripe/dist/index.js"]
    env:
      STRIPE_SECRET_KEY: "${STRIPE_SECRET_KEY}"
    enabled: true

policies:
  - id: reader-policy
    name: "Read-only access"
    roles: [reader]
    rules:
      - tool: "get_*"
        action: allow
      - tool: "search_*"
        action: allow
      - tool: "*"
        action: deny

  - id: admin-policy
    name: "Full access"
    roles: [admin]
    rules:
      - action: allow

audit:
  enabled: true
  storage: sqlite
  path: ./gateway-audit.db
  hashChain: true

metering:
  enabled: true
  dimensions: [calls, latency, errors]

rateLimit:
  enabled: true
  defaultPerMinute: 60

命令行界面

# API Key Management
mcp-gateway keys list
mcp-gateway keys create "My Agent" agent-1 reader,writer
mcp-gateway keys revoke key-123

# Server Management
mcp-gateway servers list

# Audit
mcp-gateway audit log --limit=50
mcp-gateway audit stats
mcp-gateway audit verify    # verify hash chain integrity

# Usage
mcp-gateway usage
mcp-gateway usage agent-1

网关工具(MCP接口)

网关本身是一个MCP服务器。连接到它并使用这些工具:

工具 说明
call 通过auth/policy/audit管道调用任何已注册的工具
list_tools 列出可用工具(按调用者权限筛选)
list_servers 列出已注册的MCP服务器及其状态
server_status 详细的服务器运行状况
audit_log 查询审核日志
audit_verify 验证防篡改哈希链
audit_stats 审计统计
usage 消费者使用指标

使用Claude Desktop

{
  "mcpServers": {
    "gateway": {
      "command": "node",
      "args": ["/path/to/mcp-gateway/dist/index.js"],
      "env": {
        "MCP_GATEWAY_CONFIG": "/path/to/gateway.yaml"
      }
    }
  }
}

建筑

src/
├── index.ts          # MCP server entry point (stdio transport)
├── serve.ts          # HTTP server entry point (network transport)
├── cli.ts            # CLI management tool
├── gateway.ts        # Core orchestrator — auth → policy → audit → meter → proxy
├── auth.ts           # API key + JWT + OIDC authentication
├── policy.ts         # RBAC policy engine (glob matching, conditions)
├── audit.ts          # SQLite/Postgres audit log with hash chain
├── storage.ts        # Storage abstraction (SQLite embedded, PostgreSQL)
├── ratelimit.ts      # Token bucket rate limiter with burst
├── meter.ts          # Usage metering and aggregation
├── metrics.ts        # Prometheus /metrics endpoint
├── registry.ts       # Server lifecycle management + auto-restart
├── proxy.ts          # MCP JSON-RPC proxy (stdio)
├── redact.ts         # PII redaction (SSN, credit card, field-level)
├── ipfilter.ts       # IP allowlist/denylist (CIDR, wildcard)
├── tenant.ts         # Multi-tenant workspace isolation
├── export.ts         # Audit export (JSONL, CSV, webhook, S3)
├── config.ts         # YAML config loader + validation + hot-reload
├── middleware.ts      # Request tracking, timeouts, structured logging
├── openapi.ts        # OpenAPI 3.1 spec generation
└── types.ts          # TypeScript domain types

生产部署

# Docker Compose (Gateway + Postgres + Prometheus + Grafana)
docker-compose up -d

# Access:
# Gateway:     http://localhost:3100
# Prometheus:  http://localhost:9090
# Grafana:     http://localhost:3000 (admin/admin)
# Metrics:     http://localhost:3100/metrics
# OpenAPI:     http://localhost:3100/openapi.json

合规

  • 《健康保险携带和责任法案》:PII编辑、防篡改审计日志、现场级访问控制
  • SOC 2:完整的审计跟踪、RBAC、速率限制、IP过滤
  • PCI-DSS:信用卡编辑、API密钥轮换、网络控制
  • GDPR 数据保护:每个租户的数据隔离,数据请求的审计导出

58测试

 ✓ auth.test.ts       (6 tests)   — API key auth, disabled/expired keys
 ✓ auth-jwt.test.ts   (5 tests)   — JWT verification, claims, issuer
 ✓ policy.test.ts     (6 tests)   — RBAC, glob matching, deny precedence
 ✓ ratelimit.test.ts  (6 tests)   — token bucket, burst, isolation
 ✓ audit.test.ts      (3 tests)   — log, query, hash chain verify
 ✓ meter.test.ts      (4 tests)   — usage tracking, isolation
 ✓ storage.test.ts    (4 tests)   — SQLite insert, query, upsert, stats
 ✓ config.test.ts     (5 tests)   — validation, duplicates, missing fields
 ✓ redact.test.ts     (7 tests)   — SSN, CC, email, field-level, per-server
 ✓ ipfilter.test.ts   (5 tests)   — allowlist, denylist, CIDR, wildcard
 ✓ metrics.test.ts    (3 tests)   — Prometheus format, counters, histograms
 ✓ middleware.test.ts  (4 tests)   — request tracking, timeout, drain

许可证

麻省理工学院