MCP Gateway
Um gateway para traduzir chamadas de ferramentas M
Documentação
MCP Gateway
O MCP (Model Context Protocol) Gateway pode traduzir chamadas de ferramentas MCP para requisições HTTP API tradicionais. Ele pode fornecer uma forma configurável de levar APIs HTTP existentes para o território MCP.
Começando
Crie o arquivo de configuração a partir de config.example.yaml:
$ cp config.example.yaml config.yaml
Edite o arquivo config.yaml, mapeando todas as APIs para ferramentas MCP.
Em seguida, inicie-o com 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)
O padrão é 3001.
Controle do Servidor
Alterar Porta
Fornecer o parâmetro --port=<port_no> na linha de comando alterará a porta para o transporte SSE.
Inicie o gateway com a porta 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
Fornecer o parâmetro --transport=stdio na linha de comando alterará o transporte para stdio.
Ex.:
$ uv run mcp-gateway --transport=stdio
Não faz sentido iniciar manualmente o gateway com transporte stdio. Você pode configurá-lo no Cursor ou Cline da seguinte forma:
{
"mcpServers": {
"mcp-gateway": {
"command": "uv",
"args": ["run", "mcp-gateway", "--transport=stdio"]
}
}
}
Ou no MCP Inspector com os valores do formulário:
| Item | Valor |
|---|---|
| Tipo de Transporte | STDIO |
| Comando | uv |
| Argumentos | run mcp-gateway --transport=stdio |
Arquivo de Configuração
Há duas partes no YAML de configuração: server e tools. server define as informações básicas para uso do servidor gateway. tools define o mapeamento de uma única ferramenta MCP para uma requisição 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
| Item | Descrição |
|---|---|
| name | Nome do servidor |
| config | Pares Chave/Valor que podem ser referenciados pela variável {{.config.xxx}} nos templates |
Ferramentas
tools é a lista de mapeamento de ferramentas MCP. As propriedades de uma única ferramenta são definidas da seguinte forma:
| Item | Descrição |
|---|---|
| name | Nome da ferramenta (nome da função), que é fornecido ao LLM. |
| description | Descrição da ferramenta pela qual o LLM pode entender o que a ferramenta pode fazer. |
| args | Argumentos da ferramenta (argumentos da função). |
| requestTemplate | Mapeamento da requisição para a HTTP API de destino. |
| responseTemplate | Mapeamento da resposta para a resposta da HTTP API de destino. |
As propriedades de um único argumento são definidas da seguinte forma:
| Item | Tipo | Descrição |
|---|---|---|
| name | Nome do argumento, que é fornecido ao LLM. | |
| description | Descrição do argumento pela qual o LLM pode entender e decidir qual valor deve ser preenchido. | |
| required | Booleano | Argumento obrigatório ou não. |
As propriedades do template de requisição são definidas da seguinte forma:
| Item | Descrição |
|---|---|
| method | Método HTTP |
| url | Template de URL da HTTP API de destino |
| headers | Cabeçalhos HTTP |
Os cabeçalhos HTTP são definidos da seguinte forma:
| Item | Descrição |
|---|---|
| key | Chave do cabeçalho |
| value | Template do valor do cabeçalho |
As propriedades do template de resposta são definidas da seguinte forma:
| Item | Descrição |
|---|---|
| body | Template do corpo da resposta |
Contribuição
Todos os tipos de contribuição são bem-vindos.