Model Context Protocol server exposing Portuguese public data: NIF/IBAN/postal-code validation and national holidays.
mcp-portugal defines 5 validation and lookup tools with clear, domain-specific names (validate_nif, validate_iban, validate_postal_code, list_holidays, is_holiday). All tools have descriptions (avg 120 chars, within 10 - 1024 range) and input schemas with Zod validation. However, output schemas are not documented, responses are JSON-stringified text blobs with no declared structure. Parameter descriptions are present but minimal (avg 45 chars). No error handling guidance, no pagination for list_holidays, and no tool annotations (readOnlyHint). Tools are read-only and well-scoped, but lack the polish expected of production-grade tools.
Indica se uma data (YYYY-MM-DD) é feriado nacional em Portugal.
Lista os feriados nacionais obrigatórios de Portugal para um ano, incluindo os móveis (baseados na Páscoa).
Valida um IBAN (checksum ISO 7064 mod-97). Indica também se é um IBAN português válido.
Valida um NIF português (estrutura, dígito inicial e dígito de controlo) e devolve o tipo de contribuinte.
Valida o formato de um código postal português (CP7, NNNN-NNN).
Output schemas not documented. All tools return JSON-stringified text responses with no declared structure. LLMs cannot plan downstream operations or extract fields reliably.
No tool annotations. All tools are read-only but lack readOnlyHint annotation. Agents cannot distinguish safe tools from destructive ones without explicit hints.
list_holidays lacks pagination. No limit parameter, no offset/page support, no total count in response. For large year ranges, response could grow unbounded.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
Parameter descriptions are minimal (avg 45 chars). E.g., 'NIF a validar, ex.: "123456789" ou "PT123456789"' includes example values that LLMs may reuse literally. Use format constraints instead.
No error handling guidance. Validators return boolean or null on invalid input with no explanation of why validation failed or how to correct it.