@@ -477,3 +477,171 @@ tools:
477
477
- 每个配置单独存储为一个 YAML 文件
478
478
- 类似 Nginx 的 vhost 配置方式
479
479
- 文件名建议使用服务名称,如 `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