GovData MCP

Um servidor MCP centralizado para buscar dados de governos de muitos países.

Documentação

GovData MCP

Um servidor Model Context Protocol (MCP) que permite que agentes de IA pesquisem, explorem e busquem conjuntos de dados abertos de portais oficiais de dados governamentais. Uma interface de ferramenta unificada para Estados Unidos, Reino Unido, Canadá e Austrália — com peculiaridades de cada portal (migrações de API, barreiras de autenticação, metadados bilíngues, flags obsoletas do DataStore) absorvidas por uma camada comum de adaptadores.

Projetado para o fluxo de trabalho típico de agentes: "Existe um conjunto de dados governamentais para X?" → encontrar candidatos → inspecionar os arquivos → visualizar linhas ou obter um link de download e seguir em frente.

Principais Recursos

  • Quatro portais nacionais, uma interface. EUA (data.gov v4 / DCAT), Reino Unido (data.gov.uk / CKAN), Canadá (open.canada.ca / CKAN), Austrália (data.gov.au / CKAN + DataStore).
  • Econômico em tokens por design. As descrições são limpas de HTML e truncadas, os resultados de busca são resumos compactos e arquivos grandes nunca são incorporados acidentalmente.
  • Pré-visualização em nível de linha. Usa o CKAN DataStore quando disponível (Austrália) e, de forma transparente, recorre à leitura do início de arquivos CSV/TSV em todos os outros casos.
  • Modos de falha amigáveis para agentes. Erros são retornados como texto acionável ("use get_download_link em vez disso", "tente novamente com dataset_id", "portais disponíveis: …") — nunca tracebacks brutos.
  • Registro extensível. Adicionar outro portal baseado em CKAN é uma única entrada de configuração; portais não-CKAN se integram por meio de uma pequena classe de adaptador.
  • Transporte duplo. stdio para clientes locais (Claude Desktop etc.), streamable-http sem estado para implantação serverless (Google Cloud Run).

Portais Suportados

CódigoPortalAPIBuscaExplorarPré-visualização de LinhasObservações
usdata.govdata.gov v4 (DCAT)Fallback CSVRequer chave gratuita do api.data.gov
ukdata.gov.ukCKANFallback CSVConsultas de recursos precisam do dataset_id pai
caopen.canada.caCKANFallback CSVTítulos bilíngues normalizados para inglês
audata.gov.auCKAN + DataStore✅ DataStoreConsultas completas de linhas com filtro de texto

Requisitos

  • Python 3.11+
  • Uma chave de API do api.data.gov para o portal dos EUA (gratuita; os outros portais não exigem credenciais)

Instalação

git clone https://github.com/YOUR_ORG/Gov-Stat-MCP-Server.git
cd Gov-Stat-MCP-Server

# pip
pip install -e ".[dev]"

# or conda
conda env create -f environment.yml
conda activate opendata-mcp

Copie .env.example para .env e defina sua chave:

DATAGOV_API_KEY=your-api-data-gov-key

Primeiros Passos

Configuração padrão para a maioria dos clientes MCP (transporte stdio):

{
  "mcpServers": {
    "govdata": {
      "command": "govdata-mcp",
      "env": {
        "DATAGOV_API_KEY": "your-api-data-gov-key"
      }
    }
  }
}
Claude Code
claude mcp add govdata -e DATAGOV_API_KEY=your-key -- govdata-mcp
Claude Desktop

Siga o guia de instalação do MCP e use a configuração padrão acima. Observação: govdata-mcp deve estar no PATH usado pelo Claude Desktop — forneça um caminho absoluto para o executável dentro do seu ambiente virtual/conda, se necessário, por exemplo, /path/to/envs/mcp-env/bin/govdata-mcp.

Cursor / Windsurf / outros clientes com configuração JSON

Use a configuração padrão acima no arquivo de configurações MCP do cliente.

Transporte HTTP (servidor remoto / de longa duração)

Execute o servidor em modo HTTP:

MCP_TRANSPORT=http govdata-mcp

Em seguida, aponte seu cliente para o endpoint:

{
  "mcpServers": {
    "govdata": {
      "url": "http://localhost:8080/mcp"
    }
  }
}

Ferramentas

O fluxo de agente pretendido: list_portalssearch_datasetsget_datasetpreview_resource / fetch_resource / get_download_link.

Descoberta
  • list_portals

    • Descrição: Lista os portais de dados abertos governamentais disponíveis e suas capacidades.
    • Parâmetros: Nenhum
    • Somente leitura: true
  • search_datasets

    • Descrição: Busca de texto completo por conjuntos de dados em um portal. Retorna resumos compactos com IDs de conjuntos de dados.
    • Parâmetros:
      • portal (string): Código do portal — us, uk, ca, au
      • query (string): Termos de busca, ex.: "air quality monitoring"
      • limit (número, opcional): Máximo de resultados (padrão 10, máximo 50)
      • org (string, opcional): Filtro de slug de publicador/organização (portais CKAN)
      • format (string, opcional): Filtro de formato de recurso, ex.: "CSV" (portais CKAN)
    • Somente leitura: true
Exploração
  • get_dataset

    • Descrição: Metadados completos do conjunto de dados — organização, licença, tags, descrição e a lista de recursos baixáveis com seus IDs, formatos e tamanhos.
    • Parâmetros:
      • portal (string): Código do portal
      • dataset_id (string): ID/slug do conjunto de dados de search_datasets
    • Somente leitura: true
  • preview_resource

    • Descrição: Pré-visualiza linhas de um recurso tabular. Tenta primeiro o DataStore do portal (contagem de linhas + filtro de texto); recorre à leitura do início de arquivos CSV/TSV. Formatos não tabulares não podem ser pré-visualizados.
    • Parâmetros:
      • portal (string): Código do portal
      • resource_id (string): ID do recurso de get_dataset
      • rows (número, opcional): Linhas a retornar (padrão 20, máximo 100)
      • query (string, opcional): Filtro de linhas por texto completo (somente recursos com suporte a DataStore)
      • dataset_id (string, opcional): ID do conjunto de dados pai — recomendado; obrigatório em uk
    • Somente leitura: true
Recuperação
  • fetch_resource

    • Descrição: Baixa um pequeno recurso de texto (CSV/JSON/XML/…) e retorna seu conteúdo inline, truncado em um limite de tamanho em um limite de linha limpo. Conteúdo binário é recusado com um ponteiro para a URL de download.
    • Parâmetros:
      • portal (string): Código do portal
      • resource_id (string): ID do recurso de get_dataset
      • max_kb (número, opcional): Máximo de kilobytes para incorporar (padrão 256, limite 512)
      • dataset_id (string, opcional): ID do conjunto de dados pai — recomendado; obrigatório em uk
    • Somente leitura: true
  • get_download_link

    • Descrição: Retorna a URL de download direta, o formato e o tamanho de um recurso para que o agente possa prosseguir por conta própria. Funciona para qualquer formato, incluindo arquivos grandes/binários.
    • Parâmetros:
      • portal (string): Código do portal
      • resource_id (string): ID do recurso de get_dataset
      • dataset_id (string, opcional): ID do conjunto de dados pai — recomendado; obrigatório em uk
    • Somente leitura: true

Configuração

Todas as configurações são variáveis de ambiente (ou um arquivo .env local):

VariávelPadrãoDescrição
MCP_TRANSPORTstdiostdio (clientes locais) ou http (servidor streamable-http)
PORT8080Porta de escuta para transporte HTTP (injetada automaticamente no Cloud Run)
DATAGOV_API_KEYChave do api.data.gov para o portal dos EUA; recorre a DEMO_KEY (~30 req/h)
LOG_LEVELINFONível de verbosidade de logging (sempre escrito em stderr)
HTTP_TIMEOUT_SECONDS30Timeout para requisições de saída aos portais
HTTP_MAX_RETRIES2Tentativas em erros transitórios do portal (5xx / transporte), backoff exponencial
SEARCH_DEFAULT_LIMIT10Número padrão de resultados de busca
NOTES_TRUNCATE_CHARS200Comprimento de truncamento de descrição nos resumos de busca
FETCH_MAX_BYTES524288Limite máximo para conteúdo de recurso incorporado

Docker

make docker-build          # build image
make docker-run            # run on :8080, exactly as Cloud Run would

A imagem executa o transporte HTTP em modo sem estado e está pronta para plataformas serverless (script de implantação no Google Cloud Run incluído em deploy/).

Desenvolvimento

make run          # stdio mode
make run-http     # HTTP mode on :8080
make inspect      # MCP Inspector interactive UI (requires Node.js)
make test         # offline unit tests
make test-live    # live end-to-end tests against all four real portals
make lint         # ruff check + format check

A suíte ao vivo (pytest -m live) verifica a cadeia completa de busca → exploração → pré-visualização → busca de dados por país, além do comportamento específico de cada portal (normalização bilíngue do Canadá, consulta de recursos com escopo de conjunto de dados do Reino Unido, caminhos do DataStore da Austrália). Execute-a antes de implantar — portais governamentais mudam sem aviso.

Arquitetura

src/govdata_mcp/
├── server.py            # FastMCP instance + tool registration
├── config.py            # env-driven settings
├── ckan/                # generic async CKAN client, models, typed errors
├── portals/
│   ├── registry.py      # portal registry — single source of truth
│   ├── base.py          # Portal config + default (vanilla CKAN) adapter
│   ├── us.py            # data.gov v4 DCAT adapter (auth, cursor paging)
│   ├── uk.py            # dataset-scoped resource lookup
│   └── ca.py            # bilingual metadata normalization
├── tools/               # MCP tools: search, explore, fetch
└── utils/               # formatting (token economy), CSV-head preview

Adicionando um portal: para um portal CKAN padrão, adicione uma entrada Portal(...) em portals/registry.py — pronto. Para portais com peculiaridades, subclassifique PortalAdapter e sobrescreva os hooks específicos (normalize_dataset, build_search_params) ou, para APIs não-CKAN, os próprios métodos de operação (veja us.py para um adaptador personalizado completo).

TODO / Roadmap

  • 🇨🇳 Suporte ao portal da China — não existe uma API nacional unificada de dados abertos; planejado como um adaptador personalizado direcionado aos dados do National Bureau of Statistics (por meio de um pacote de estatísticas existente) com degradação graciosa.
  • 🇯🇵 Suporte ao portal do Japão — o e-Gov Data Portal (data.e-gov.go.jp) é compatível com CKAN e deve se encaixar no registro existente; a API de estatísticas mais rica do e-Stat (autenticação por app-ID, metadados em japonês) está planejada como um adaptador dedicado.
  • Suíte de testes unitários offline com fixtures de portal gravadas (respx) para CI
  • Tutorial de implantação no Google Cloud Run (o serviço está pronto para contêiner; script em deploy/)
  • Filtros de busca por publicador/formato do US v4 (aguardando documentação da API)
  • Mais portais CKAN (Nova Zelândia data.govt.nz é uma adição quase gratuita)
  • Detecção de tipo de conteúdo para resgatar formatos de recurso rotulados incorretamente

Notas de Segurança

  • Este servidor é somente leitura em relação aos portais — nenhuma ferramenta pode criar, modificar ou excluir nada.
  • fetch_resource e preview_resource baixam de URLs contidas nos metadados do portal; o conteúdo é limitado em tamanho e verificado quanto a binários antes de ser retornado ao modelo, mas trate o conteúdo buscado como entrada não confiável.
  • O servidor em si não tem autenticação. Para implantação remota, coloque-o atrás de um proxy autenticador ou autenticação em nível de plataforma (ex.: Cloud Run com --no-allow-unauthenticated).
  • Mantenha DATAGOV_API_KEY em .env / gerenciador de segredos — nunca o envie para o repositório.

Licença

MIT