Skip to main content
Glama
mcp-servicos-pt

mcp-servicos-pt

by devyssonsc

mcp-servicos-pt

Servidor MCP de serviços portugueses. Primeiro conector: IPMA (meteorologia) — API pública, sem chave, sem autenticação.

Estrutura

src/mcp_servicos_pt/
├── server.py              # monta o servidor, regista conectores
├── __main__.py            # ponto de entrada (`python -m mcp_servicos_pt`)
├── core/connector.py       # contrato que cada conector cumpre
└── connectors/ipma/
    ├── client.py           # HTTP puro, fala com api.ipma.pt — sem MCP
    ├── models.py           # traduz a resposta bruta para JSON legível
    └── connector.py        # regista as tools no servidor MCP

Related MCP server: IPMA MCP Server

Instalar

python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

Testar a lógica (sem rede)

pytest tests/ -v

Correr o servidor e testar com o MCP Inspector

O Inspector é a ferramenta oficial para testar um servidor MCP visualmente, sem precisar de configurar o Claude Desktop.

npx @modelcontextprotocol/inspector python -m mcp_servicos_pt

Abre o URL que aparece no terminal, clica em "List Tools" e devem aparecer listar_localidades_pt e previsao_tempo_pt. Chama listar_localidades_pt primeiro para obteres um globalIdLocal válido, e usa-o depois em previsao_tempo_pt.

Ligar ao Claude Desktop

No ficheiro de configuração do Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json no macOS, ou o equivalente no Windows/Linux), acrescenta:

{
  "mcpServers": {
    "servicos-pt": {
      "command": "/caminho/completo/para/.venv/bin/python",
      "args": ["-m", "mcp_servicos_pt"],
      "cwd": "/caminho/completo/para/mcp-servicos-pt"
    }
  }
}

Reinicia o Claude Desktop e pergunta algo como "que tempo vai fazer em Lisboa nos próximos dias?" — o modelo deve encadear as duas tools sozinho.

Nota importante sobre os nomes dos campos do IPMA

Este projeto foi construído num ambiente sem acesso de rede a api.ipma.pt, por isso os nomes dos campos em models.py (tMin, tMax, idWeatherType, forecastDate, ...) vêm da documentação pública conhecida do IPMA, mas não foram confirmados com uma chamada real. O código foi escrito de forma defensiva (usa .get() em vez de aceder direto às chaves), por isso não deve rebentar mesmo que um nome tenha mudado — mas antes de confiares nos valores, corre listar_localidades_pt e previsao_tempo_pt no teu ambiente, compara com a resposta bruta em https://api.ipma.pt/open-data/ e ajusta models.py se algum campo não bater certo. O resto da arquitetura não muda.

Próximo passo

Para adicionar um segundo serviço (ex. dados.gov.pt):

  1. Cria connectors/dados_gov/{client,models,connector}.py seguindo exatamente o mesmo padrão do IPMA.

  2. Regista-o em server.py: DadosGovConnector().register(mcp)

Nada no núcleo precisa de mudar.

Available Tools

2 tools
listar_localidades_ptA

Lista os distritos e ilhas portugueses conhecidos pelo IPMA. Cada entrada inclui um globalIdLocal — o identificador necessário para pedir a previsão do tempo dessa localidade com a tool previsao_tempo_pt.

Inputs: no named parameters. Returns: result

previsao_tempo_ptA

Devolve a previsão diária do tempo (temperatura, chuva, vento) para uma localidade portuguesa, identificada pelo globalIdLocal obtido em listar_localidades_pt.

Inputs: global_id_local (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.3/5.0

    Scored across 2 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: one lists available localities, and the other returns the forecast for a selected locality. The descriptions explicitly reference each other, leaving no ambiguity about when to use which.

    Naming Consistency4/5

    Both names share the same '_pt' suffix and snake_case style, but one uses a verb ('listar') while the other uses a noun ('previsao') instead of a verb form like 'obter_previsao'. This is a minor inconsistency that does not hurt readability.

    Tool Count4/5

    Two tools is minimal, but it is a reasonable size for the narrow, read-only weather forecast domain. The pair forms a clean two-step workflow with no redundant tools.

    Completeness5/5

    For the stated purpose of providing IPMA weather forecasts for Portuguese localities, the surface is complete: you can discover locations and retrieve the forecast. No update, delete, or write operations are relevant to this domain.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Provides access to Portuguese weather data from IPMA (Instituto Português do Mar e da Atmosfera), including weather forecasts, meteorological warnings, seismic data, UV index, and real-time observations from weather stations across Portugal.
      6
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Provides weather, UV, sea state, and earthquake data from IPMA Portugal through an MCP gateway, enabling natural language queries for Portuguese meteorological and seismic information.
      119 npm
      MIT