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:

ElementoValor
Tipo de TransporteSTDIO
Comandouv
Argumentosrun 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

ElementoDescripción
nameNombre del servidor
configPares 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:

ElementoDescripción
nameNombre de la herramienta (nombre de la función), que se proporciona al LLM.
descriptionDescripción de la herramienta a través de la cual el LLM puede entender qué puede hacer la herramienta.
argsArgumentos de la herramienta (argumentos de la función).
requestTemplateAsignación de la solicitud a la API HTTP de destino.
responseTemplateAsignació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:

ElementoTipoDescripción
nameNombre del argumento, que se proporciona al LLM.
descriptionDescripción del argumento a través de la cual el LLM puede entender y decidir qué valor debe completarse.
requiredBooleanoSi es un argumento requerido o no.

Las propiedades de la plantilla de solicitud se definen de la siguiente manera:

ElementoDescripción
methodMétodo HTTP
urlPlantilla de URL de la API HTTP de destino
headersCabeceras HTTP

Las cabeceras HTTP se definen de la siguiente manera:

ElementoDescripción
keyClave de la cabecera
valuePlantilla del valor de la cabecera

Las propiedades de la plantilla de respuesta se definen de la siguiente manera:

ElementoDescripción
bodyPlantilla del cuerpo de la respuesta

Contribución

Todo tipo de contribuciones son bienvenidas.