MCP server for accessing Brazilian IBGE statistical data through the API de Dados Agregados
IBGE Data Server provides 6 read-only tools for querying Brazilian statistical data. All tools have descriptions and input schemas are visible in the code. However, several structural issues limit quality: (1) Tool naming uses Portuguese verb forms (listar_, obter_, consultar_, buscar_) which diverges from the English verb_noun convention that LLMs expect for parsing intent. (2) Parameter descriptions in the schema include example values (e.g., 'ex: 1705, 1712') which LLMs tend to reuse literally rather than adapt to context, this violates the pattern:constrained-input guidance. (3) Output schemas are not documented anywhere in the visible code or descriptions; LLMs cannot infer what fields to expect from tool responses. (4) The server has no error handling patterns visible, no recovery guidance, no categorization of errors as retryable vs. fatal. (5) Parameters like 'variavel', 'periodos', 'classificacao', and 'localidades' accept complex string formats ('214|1982', '-6', '226[4844]|218[4780]') without clear enum constraints or regex patterns, this invites hallucinated input from LLMs. (6) The 'view' parameter on consultar_dados_variaveis is loosely documented; 'OLAP', 'flat', 'default' should be declared as an enum. Tools are read-only (good) but the composition pattern shows that listar_agregados and buscar_agregados_por_termo appear to do similar work, LLMs will conflate them. Parameter descriptions are present but average 50-80 chars, below the 72-char baseline for A+ tools. Overall, the server is functional but lacks LLM-optimized documentation and output schema visibility.
Busca agregados por termo (tool referenced in ibge_mcp_server_2.py but definition truncated in source)
Consulta dados das variáveis de um agregado com filtros específicos.
Lista agregados disponíveis na API do IBGE com filtros opcionais.
Obtém localidades disponíveis para um agregado em determinado nível geográfico.
Obtém metadados completos de um agregado específico.
Obtém todos os períodos disponíveis para um agregado.
Tool names use Portuguese verbs (listar_, obter_, consultar_, buscar_) instead of English verb_noun convention (list_, get_, search_, query_). LLMs are trained primarily on English token patterns and expect 'get_' prefix for retrieval. Portuguese names increase LLM parsing latency and risk misidentification when many tools are available.
Parameter descriptions include example values that LLMs tend to reuse literally. E.g., 'ex: 1705, 1712' for agregado_id causes LLMs to pass those exact values in unrelated queries. Replace examples with enum constraints or format/pattern declarations.
Output schemas are not documented. Tool descriptions do not explain what fields the response contains or what structure to expect. LLMs cannot plan downstream tool calls or extract relevant data when response structure is undocumented. This violates pattern:tool-description and pattern:tool.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 40 | - | v1 |
Complex parameter formats lack formal constraints. Parameters like 'periodos' ('-6', '201701-201706'), 'variavel' ('214|1982'), 'classificacao' ('226[4844]|218[4780]'), and 'localidades' ('BR', 'N6[3550308]', 'N7[3501,3301]') accept complex string syntax without enum or regex pattern declarations. LLMs cannot validate or predict valid formats, leading to malformed requests.
No error handling patterns visible. Tool descriptions do not explain error categories (retryable vs. fatal), recovery actions, or what to do if a request fails. LLMs lack guidance on whether to retry, ask the user, or abandon a plan.
consultar_dados_variaveis parameter 'view' accepts 'OLAP', 'flat', 'default' but is not declared as an enum. Free-form string parameters invite hallucinated values.
listar_agregados and buscar_agregados_por_termo perform overlapping search functions. LLMs will struggle to decide which to call first. Compose into a single search tool or clarify when each is preferred.