Skip to main content
配置文件支持使用 ${VAR:default} 语法进行环境变量注入。如果环境变量未设置,将使用默认值。 常见的做法是通过不同的 .env.env.development.env.prod 进行注入,当然也可以直接修改配置写死一个值。

基础配置

这里的 PID 和下面涉及的 PID 保持一致,用于服务管理和热重载功能。

存储配置

存储配置模块主要用于存储网关的代理配置信息。目前支持两种存储方式:

db 存储

存到数据库,每个配置是一条记录,支持 SQLite3、PostgreSQL、MySQL

api 存储

通过 API 端点存储配置,允许使用外部配置管理系统

配置示例

通知配置

通知配置模块主要是用来当配置更新的时候如何让 mcp-gateway 感知到更新并进行热重载而无需重启服务。

支持的通知方式

signal

通过发送操作系统信号量来通知,类似 kill -SIGHUP <pid> 或者 nginx -s reload 这种方式

api

通过调用一个 API 的方式通知,mcp-gateway 会监听一个独立的端口

redis

通过 redis 的发布/订阅功能通知,适合单机或集群部署时使用

composite

组合通知,通过多种方式组合,默认 signalapi 一定会开启

通知角色说明

负责发送通知,apiserver 只能走这个模式
负责接收通知,单机的 mcp-gateway 建议只走这个模式
既是发送者又是接收者,集群部署的 mcp-gateway 可以走这个方式

配置示例

会话存储配置

会话存储配置用于存储 MCP 中的会话信息。根据不同的部署场景,可以选择不同的存储方式:

memory 存储

内存存储,适合单机部署(需注意,重启会失去会话信息)

redis 存储

Redis 存储,适合单机或集群部署,支持持久化

配置示例

使用 memory 存储时,服务重启会导致所有会话信息丢失。生产环境建议使用 redis 存储。

Forward Headers 配置

Forward Headers 配置允许 MCP Gateway 将客户端请求中的 HTTP 头部转发到下游服务。此功能对于身份验证、请求追踪和自定义头部传播非常有用。
为了向后兼容,Forward Headers 功能默认为禁用状态。通过在配置中设置 enabled: true 来启用此功能。

功能特性

头部过滤

使用允许/忽略列表控制哪些头部被转发,支持大小写不敏感匹配

客户端头部

将客户端请求(tools/list 和 tools/call)中的头部转发到下游服务

参数头部

支持通过可配置的参数名称转发作为工具参数传递的头部

覆盖控制

选择是否覆盖现有头部或添加到现有头部

配置选项

头部过滤逻辑

过滤逻辑遵循基于优先级的方法:
1

优先级检查

如果配置了 allow_headers(非空),它优先生效,ignore_headers 会被完全忽略
2

允许列表模式

当设置 allow_headers 时,只有此列表中的头部会被转发,其他所有头部都被忽略
3

忽略列表模式

allow_headers 为空时,ignore_headers 列表中的头部会被过滤掉,其他头部会被转发
4

大小写敏感性

头部匹配遵循 case_insensitive 设置,同时适用于允许和忽略列表

使用示例

示例 1: 只允许特定头部

结果: 只有 AuthorizationX-API-KeyX-Request-ID 头部会被转发。

示例 2: 阻止特定头部

结果: 除了 AcceptHostCookieUser-Agent 外,所有头部都会被转发。

示例 3: 工具参数头部

工具现在可以通过 custom_headers 参数传递头部:

环境变量

所有 forward headers 设置都可以通过环境变量进行配置:
在生产环境中启用 forward headers 时,请仔细审查应该转发哪些头部,以避免安全风险,如暴露敏感的身份验证令牌或 cookies。

链路追踪(OpenTelemetry → Jaeger)

MCP Gateway 支持通过 OpenTelemetry 将链路追踪数据导出到 Jaeger。该功能可选,默认关闭。

功能概览

  • 入站 HTTP 请求通过 Gin 中间件自动打点(排除 /health_check)
  • 下游 HTTP 调用自动透传 Trace 上下文
  • 可选捕获下游请求的部分字段/Body 以及错误响应摘要,便于排障

配置示例

环境变量

本地启动 Jaeger

  • 可使用项目内提供的 Compose 文件:deploy/docker/jaeger/docker-compose.yml
  • 启动命令:docker compose -f deploy/docker/jaeger/docker-compose.yml up
  • Jaeger UI: http://localhost:16686

示例截图

客户端请求示例(浅色主题) Jaeger UI —— Trace 结果展示
开启字段或 Body 捕获可能会暴露敏感信息(令牌、密码、个人隐私)。建议默认关闭,在受控环境内以最小化采样与精确字段选择的方式使用。

配置文件位置

默认情况下,配置文件应放置在以下位置:
  • 容器部署:/app/configs/mcp-gateway.yaml
  • 二进制部署:./configs/mcp-gateway.yaml

热重载机制

MCP Gateway 支持热重载配置,无需重启服务即可应用新的配置:
1

配置更新检测

当配置发生变更时,通过配置的通知方式(signal、api、redis)触发重载
2

配置验证

重载前会验证新配置的合法性,确保服务稳定运行
3

平滑切换

验证通过后,平滑切换到新配置,不中断正在进行的连接

最佳实践

  • 存储类型建议使用 db 配合 SQLite
  • 通知类型使用 compositesignal
  • 会话存储可使用 memoryredis
  • 存储类型使用 db 配合 PostgreSQL 或 MySQL
  • 通知类型使用 rediscomposite
  • 会话存储建议使用 redis
  • 使用强密码保护 Redis 和数据库
  • 定期备份配置数据
  • 监控服务健康状态和性能指标