MCP Gateway
Una puerta de enlace para traducir llamadas de herramientas MCP en solicitudes de API HTTP, configurable mediante YAML.
Documentación
MCP Gateway
MCP (Model Context Protocol) Gateway puede traducir llamadas de herramientas MCP a solicitudes HTTP API tradicionales. Puede proporcionar una forma configurable de llevar APIs HTTP existentes al territorio MCP.
Comenzando
Cree el archivo de configuración desde config.example.yaml:
$ cp config.example.yaml config.yaml
Edite el archivo config.yaml, mapee todas las APIs a herramientas MCP.
Luego inícielo con transporte SSE:
$ uv run mcp-gateway
INFO: Started server process [15400]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:3001 (Press CTRL+C to quit)
El valor predeterminado es 3001.
Control del Servidor
Cambiar Puerto
Proporcionar el parámetro --port=<port_no> en la línea de comandos cambiará el puerto para el transporte SSE.
Inicie la puerta de enlace con el puerto 3002:
$ uv run mcp-gateway --port=3002
INFO: Started server process [15400]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:3002 (Press CTRL+C to quit)
Transporte stdio
Proporcionar el parámetro --transport=stdio en la línea de comandos cambiará el transporte a stdio.
Por ejemplo:
$ uv run mcp-gateway --transport=stdio
No tiene sentido iniciar manualmente la puerta de enlace con transporte stdio. Puede configurarlo en Cursor o Cline de la siguiente manera:
{
"mcpServers": {
"mcp-gateway": {
"command": "uv",
"args": ["run", "mcp-gateway", "--transport=stdio"]
}
}
}
O MCP Inspector con valores de formulario:
| Elemento | Valor |
|---|---|
| Tipo de Transporte | STDIO |
| Comando | uv |
| Argumentos | run mcp-gateway --transport=stdio |
Archivo de Configuración
Hay dos partes en el YAML de configuración: server y tools. server define la información básica para el uso del servidor de la puerta de enlace. tools define la asignación de una sola herramienta MCP a una solicitud HTTP API.
server:
name: rest-amap-server
config:
apiKey: foo
tools:
- name: maps-geo
description: "将详细的结构化地址转换为经纬度坐标。支持对地标性名胜景区、建筑物名称解析为经纬度坐标"
args:
- name: address
description: "待解析的结构化地址信息"
required: true
- name: city
description: "指定查询的城市"
required: false
requestTemplate:
url: "https://restapi.amap.com/v3/geocode/geo?key={{.config.apiKey}}&address={{.args.address}}&city={{.args.city}}&source=ts_mcp"
method: GET
headers:
- key: x-api-key
value: "{{.config.apiKey}}"
- key: Content-Type
value: application/json
responseTemplate:
body: |
# 地理编码信息
{{- range $index, $geo := .Geocodes }}
## 地点 {{add $index 1}}
- **国家**: {{ $geo.Country }}
- **省份**: {{ $geo.Province }}
- **城市**: {{ $geo.City }}
- **城市代码**: {{ $geo.Citycode }}
- **区/县**: {{ $geo.District }}
- **街道**: {{ $geo.Street }}
- **门牌号**: {{ $geo.Number }}
- **行政编码**: {{ $geo.Adcode }}
- **坐标**: {{ $geo.Location }}
- **级别**: {{ $geo.Level }}
{{- end }}
Servidor
| Elemento | Descripción |
|---|---|
| name | Nombre del servidor |
| config | Pares Clave/Valor que pueden ser referenciados por la variable {{.config.xxx}} en plantillas |
Herramientas
tools es una lista de asignaciones de herramientas MCP. Las propiedades de una sola herramienta se definen de la siguiente manera:
| Elemento | Descripción |
|---|---|
| name | Nombre de la herramienta (nombre de la función), que se proporciona al LLM. |
| description | Descripción de la herramienta a través de la cual el LLM puede entender qué puede hacer la herramienta. |
| args | Argumentos de la herramienta (argumentos de la función). |
| requestTemplate | Asignación de la solicitud a la API HTTP de destino. |
| responseTemplate | Asignación de la respuesta para la respuesta de la API HTTP de destino. |
Las propiedades de un solo argumento se definen de la siguiente manera:
| Elemento | Tipo | Descripción |
|---|---|---|
| name | Nombre del argumento, que se proporciona al LLM. | |
| description | Descripción del argumento a través de la cual el LLM puede entender y decidir qué valor debe completarse. | |
| required | Booleano | Si es un argumento requerido o no. |
Las propiedades de la plantilla de solicitud se definen de la siguiente manera:
| Elemento | Descripción |
|---|---|
| method | Método HTTP |
| url | Plantilla de URL de la API HTTP de destino |
| headers | Cabeceras HTTP |
Las cabeceras HTTP se definen de la siguiente manera:
| Elemento | Descripción |
|---|---|
| key | Clave de la cabecera |
| value | Plantilla del valor de la cabecera |
Las propiedades de la plantilla de respuesta se definen de la siguiente manera:
| Elemento | Descripción |
|---|---|
| body | Plantilla del cuerpo de la respuesta |
Contribución
Todo tipo de contribuciones son bienvenidas.