@@ -477,3 +477,171 @@ tools:
477477 - 每个配置单独存储为一个 YAML 文件
478478 - 类似 Nginx 的 vhost 配置方式
479479 - 文件名建议使用服务名称,如 `mock-user-svc.yaml`
480+
481+ # # MCP 服务代理配置
482+
483+ 除了代理 HTTP 服务外,MCP Gateway 还支持代理 MCP 服务,目前 stdio、SSE 和 streamable-http 三种传输协议都已支持
484+
485+ # ## 配置示例
486+
487+ 以下是一个完整的 MCP 服务代理配置示例:
488+
489+ ` ` ` yaml
490+ name: "proxy-mcp-exp"
491+ tenant: "default"
492+
493+ routers:
494+ - server: "amap-maps"
495+ prefix: "/mcp/stdio-proxy"
496+ cors:
497+ allowOrigins:
498+ - "*"
499+ allowMethods:
500+ - "GET"
501+ - "POST"
502+ - "OPTIONS"
503+ allowHeaders:
504+ - "Content-Type"
505+ - "Authorization"
506+ - "Mcp-Session-Id"
507+ exposeHeaders:
508+ - "Mcp-Session-Id"
509+ allowCredentials: true
510+ - server: "mock-user-sse"
511+ prefix: "/mcp/sse-proxy"
512+ cors:
513+ allowOrigins:
514+ - "*"
515+ allowMethods:
516+ - "GET"
517+ - "POST"
518+ - "OPTIONS"
519+ allowHeaders:
520+ - "Content-Type"
521+ - "Authorization"
522+ - "Mcp-Session-Id"
523+ exposeHeaders:
524+ - "Mcp-Session-Id"
525+ allowCredentials: true
526+ - server: "mock-user-mcp"
527+ prefix: "/mcp/streamable-http-proxy"
528+ cors:
529+ allowOrigins:
530+ - "*"
531+ allowMethods:
532+ - "GET"
533+ - "POST"
534+ - "OPTIONS"
535+ allowHeaders:
536+ - "Content-Type"
537+ - "Authorization"
538+ - "Mcp-Session-Id"
539+ exposeHeaders:
540+ - "Mcp-Session-Id"
541+ allowCredentials: true
542+
543+ mcpServers:
544+ - type: "stdio"
545+ name: "amap-maps"
546+ command: "npx"
547+ args:
548+ - "-y"
549+ - "@amap/amap-maps-mcp-server"
550+ env:
551+ AMAP_MAPS_API_KEY: "{{.Request.Headers.Apikey}}"
552+
553+ - type: "sse"
554+ name: "mock-user-sse"
555+ url: "http://localhost:3000/mcp/user/sse"
556+
557+ - type: "streamable-http"
558+ name: "mock-user-mcp"
559+ url: "http://localhost:3000/mcp/user/mcp"
560+ ` ` `
561+
562+ # ## 配置说明
563+
564+ # ### 1. MCP 服务类型
565+
566+ MCP Gateway 支持以下三种类型的 MCP 服务代理:
567+
568+ 1. **stdio 类型**:
569+ - 通过标准输入输出与 MCP 服务进程通信
570+ - 适用于需要本地启动的 MCP 服务,如第三方 SDK
571+ - 配置参数包括 `command`、`args` 和 `env`
572+
573+ 2. **SSE 类型**:
574+ - 将 MCP 客户端的请求转发到支持 SSE 的上游服务
575+ - 适用于已有的支持 SSE 协议的 MCP 服务
576+ - 仅需配置 `url` 参数指向上游 SSE 服务地址
577+
578+ 3. **streamable-http 类型**:
579+ - 将 MCP 客户端的请求转发到支持可流式 HTTP 的上游服务
580+ - 适用于已有的支持 MCP 协议的上游服务
581+ - 仅需配置 `url` 参数指向上游 MCP 服务地址
582+
583+ # ### 2. stdio 类型配置
584+
585+ stdio 类型的 MCP 服务配置示例:
586+
587+ ` ` ` yaml
588+ mcpServers:
589+ - type: "stdio"
590+ name: "amap-maps" # 服务名称
591+ command: "npx" # 要执行的命令
592+ args: # 命令参数
593+ - "-y"
594+ - "@amap/amap-maps-mcp-server"
595+ env: # 环境变量
596+ AMAP_MAPS_API_KEY: "{{.Request.Headers.Apikey}}" # 从请求头中提取值
597+ ` ` `
598+
599+ 通过 `env` 字段可以设置环境变量,支持从请求中提取值,例如 `{{.Request.Headers.Apikey}}` 表示从请求头中提取 Apikey 的值
600+
601+ # ### 3. SSE 类型配置
602+
603+ SSE 类型的 MCP 服务配置示例:
604+
605+ ` ` ` yaml
606+ mcpServers:
607+ - type: "sse"
608+ name: "mock-user-sse" # 服务名称
609+ url: "http://localhost:3000/mcp/user/sse" # 上游 SSE 服务地址,通常以/sse结尾,实际根据上游服务而定
610+ ` ` `
611+
612+ # ### 4. streamable-http 类型配置
613+
614+ streamable-http 类型的 MCP 服务配置示例:
615+
616+ ` ` ` yaml
617+ mcpServers:
618+ - type: "streamable-http"
619+ name: "mock-user-mcp" # 服务名称
620+ url: "http://localhost:3000/mcp/user/mcp" # 上游 MCP 服务地址,通常以/mcp结尾,实际根据上游服务而定
621+ ` ` `
622+
623+ # ### 5. 路由配置
624+
625+ 对于 MCP 服务代理,路由配置与 HTTP 服务代理类似,CORS 则根据实际情况配置(通常生产环境一般是不会开启跨域的):
626+
627+ ` ` ` yaml
628+ routers:
629+ - server: "amap-maps" # 服务名称,需要与 mcpServers 中的 name 保持一致
630+ prefix: "/mcp/stdio-proxy" # 路由前缀,全局唯一
631+ cors:
632+ allowOrigins:
633+ - "*"
634+ allowMethods:
635+ - "GET"
636+ - "POST"
637+ - "OPTIONS"
638+ allowHeaders:
639+ - "Content-Type"
640+ - "Authorization"
641+ - "Mcp-Session-Id" # MCP 服务必须包含此头
642+ exposeHeaders:
643+ - "Mcp-Session-Id" # MCP 服务必须暴露此头
644+ allowCredentials: true
645+ ` ` `
646+
647+ 对于 MCP 服务,请求头和响应头中的 `Mcp-Session-Id` 是必须要支持的,否则客户端无法正常使用。
0 commit comments