Skip to content
This repository was archived by the owner on Jul 14, 2025. It is now read-only.

Commit 87248ce

Browse files
committed
docs: enhance gateway configuration documentation with MCP service proxy examples and Go Template usage guide in multiple languages
1 parent fd35159 commit 87248ce

File tree

15 files changed

+1089
-1636
lines changed

15 files changed

+1089
-1636
lines changed

docs/configuration/gateways.md

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)