Skip to main content
Glama
fabioff30

Natal IBGE MCP Server

by fabioff30

Natal IBGE MCP Server

O Natal IBGE MCP Server é um servidor implementado seguindo o padrão Model Context Protocol (MCP) da Anthropic. Ele disponibiliza a modelos de Inteligência Artificial (como Claude, GPT-4o, Gemini, etc.) acesso estruturado e direto a dados oficiais do Censo Demográfico 2022 e do PIB para a cidade de Natal (RN) — código IBGE 2408102.

O servidor combina consultas dinâmicas às APIs públicas agregadas do IBGE/SIDRA com dados extremamente granulares a nível de bairros fornecidos por planilhas locais preprocessadas, tornando-se uma ferramenta indispensável para análises econômicas, demográficas e habitacionais da capital potiguar.


Requisitos

  • Node.js (Versão recomendada: >= 18)

  • NPM (incluso com o Node)


Related MCP server: mcp-brasil

Instalação e Configuração

1. Clonar e Instalar o Servidor

Clone este repositório no seu computador e instale as dependências:

git clone <url-do-repositorio>
cd mcp-ibge-natal
npm install
npm run build

2. Adicionar ao Claude Desktop

Abra o arquivo de configuração do seu Claude Desktop (claude_desktop_config.json). No macOS, ele fica em: ~/Library/Application Support/Claude/claude_desktop_config.json

Adicione a seguinte configuração no objeto "mcpServers":

{
  "mcpServers": {
    "mcp-ibge-natal": {
      "command": "node",
      "args": ["/Users/fabiofariasfigueiroa/Desktop/mcp-ibge-natal/build/index.js"]
    }
  }
}

3. Adicionar ao Cursor IDE

  1. Abra o Cursor e vá nas configurações (Settings -> Features -> MCP).

  2. Clique em + Add New MCP Server.

  3. Configure os seguintes valores:

    • Name: mcp-ibge-natal

    • Type: stdio

    • Command: node "/Users/fabiofariasfigueiroa/Desktop/mcp-ibge-natal/build/index.js"

  4. Clique em Save.


Atualizar dados por bairro

Os arquivos CSV em data/ são gerados a partir de fontes públicas do IBGE, utilizando os scripts de extração disponíveis no projeto:

python3 scripts/extract_natal_bairros.py   # população, domicílios e esgotamento por bairro
python3 scripts/extract_natal_renda.py     # renda do responsável pelo domicílio por bairro

Requer Python 3 instalado na máquina.

Como os dados são provenientes do Censo 2022 (estáticos), não é necessário rodar os scripts novamente a menos que as fontes sejam atualizadas. Execute-os apenas quando houver uma nova versão dos dados de origem.

Sobre a renda por bairro: o dado granular é o rendimento do responsável pelo domicílio (chefe), do release IBGE "Agregados por Setores Censitários — Rendimento do Responsável". É um universo distinto da tool municipal get_average_income (que cobre todas as pessoas de 14+ anos ocupadas), portanto os números por bairro não são diretamente comparáveis com o municipal.


Ferramentas Disponíveis (MCP Tools)

Nome da Ferramenta

Descrição

Parâmetros

get_total_population

População total residente de Natal (Censo 2022).

Nenhum

get_population_by_age_group

Pirâmide/faixa etária com proporção (%) por faixa.

Nenhum

get_population_history

Série histórica das estimativas populacionais.

Nenhum

get_gdp_pib

PIB a preços correntes de Natal (2022).

Nenhum

compare_gdp_neighbors

Comparativo de PIB: Natal vs. Parnamirim, São Gonçalo do Amarante e Mossoró.

Nenhum

get_average_income

Renda nominal média e mediana mensal dos trabalhadores (Censo 2022).

Nenhum

get_households_count

Total de domicílios particulares permanentes ocupados.

Nenhum

get_density_area

Área territorial (km²) e densidade demográfica (hab/km²).

Nenhum

get_city_sanitation

Panorama do esgotamento sanitário do município.

Nenhum

get_literacy_rate

Taxa de alfabetização das pessoas de 15+ anos (Censo 2022).

Nenhum

list_neighborhoods

Lista os 36 bairros com população, área, densidade, moradores/dom. e renda média do responsável.

Nenhum

get_neighborhood_demographics

Demografia e ocupação de domicílios de um bairro.

query (nome ou código)

get_neighborhood_sanitation

Detalhamento do esgotamento e % de adequação por bairro.

query (nome ou código)

get_neighborhood_income

Renda média e mediana mensal do responsável pelo domicílio em um bairro, com ranking (Censo 2022).

query (nome ou código)

rank_neighborhoods_by_income

Ranqueia os bairros pela renda média do responsável (maiores ou menores).

order (top/bottom), limit

compare_neighborhoods

Tabelas comparativas lado a lado entre bairros (demografia, saneamento e renda).

bairros (array, mín. 2)


Exemplos de Perguntas

Depois de configurar o servidor MCP, você pode conversar com o assistente e fazer perguntas como:

  • "Qual o PIB de Natal comparado a Parnamirim, São Gonçalo do Amarante e Mossoró?"

  • "Como é a pirâmide etária de Natal?"

  • "Qual a taxa de alfabetização de Natal?"

  • "Quais os 3 bairros mais populosos de Natal e suas densidades?"

  • "Compare o saneamento (esgotamento adequado) entre Pajuçara e Lagoa Azul."

  • "Qual a média de moradores por domicílio no bairro Petrópolis?"

  • "Qual a renda do responsável pelo domicílio no bairro Tirol?"

  • "Quais os 5 bairros de Natal com menor renda do responsável?"

  • "Compare renda, saneamento e densidade entre Tirol e Guarapés."


Estrutura de Pastas

├── data/
│   ├── bairros_natal.csv                  # Dados demográficos locais por bairro
│   ├── esgotamento_por_bairro_natal.csv   # Dados de esgoto locais por bairro
│   └── renda_por_bairro_natal.csv         # Renda do responsável pelo domicílio por bairro
├── scripts/
│   ├── extract_natal_bairros.py           # Extração de população/domicílios/esgoto por bairro
│   ├── extract_natal_renda.py             # Extração da renda do responsável por bairro
│   └── verify.js                          # Script de verificação da integração MCP
├── src/
│   └── index.ts                           # Implementação principal do servidor MCP (TypeScript)
├── build/
│   └── index.js                           # Servidor compilado (JavaScript executável)
├── package.json                           # Dependências e scripts do projeto
├── tsconfig.json                          # Configuração do compilador TypeScript
└── README.md                              # Documentação de referência

Licença

Este projeto está licenciado sob a licença MIT. Desenvolvido para facilitar o acesso à informação pública e fomentar a cultura de Letramento de Dados.

Available Tools

16 tools
compare_gdp_neighborsA

Compara o PIB de Natal com municípios vizinhos da RM e Mossoró (2022).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description fails to disclose behavioral traits like read-only, authentication needs, or side effects; it only states the operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no waste, front-loaded with key details (cities, year), every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a parameterless tool but lacks output description; ambiguous on whether it returns a single comparison or multiple, incomplete without output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Baseline score of 4 for 0 parameters; the description adds no parameter info since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool compares GDP of Natal with neighboring municipalities and Mossoró for 2022, using a specific verb and resource, distinguishing it from siblings like compare_neighborhoods and get_gdp_pib.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use or alternatives; the purpose is implied but lacks when-not-to-use or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_neighborhoodsB

Compara dados demográficos, habitacionais e de saneamento de múltiplos bairros de Natal.

ParametersJSON Schema
NameRequiredDescriptionDefault
bairrosYesLista de nomes ou códigos de bairros para comparação (mínimo 2).

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behaviors. However, it omits key details: whether the operation is read-only (likely but not stated), authentication requirements, what happens if fewer than 2 neighborhoods are provided (schema says min 2 but no description), and the return format or structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that conveys the core purpose without extraneous words. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and many sibling tools, the description should ideally provide more context about return value, edge cases (e.g., invalid neighborhood names), and authorization. While it covers the basic intent, it is not fully complete for an AI agent to reliably use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the parameter 'bairros' with 100% coverage (list of names/codes, min 2). The description adds no additional meaning beyond what the schema provides, resulting in baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies 'comparar dados demográficos, habitacionais e de saneamento de múltiplos bairros de Natal' which clearly states the verb (compare) and resource (multiple neighborhoods' data across three categories). This distinguishes it from sibling tools like get_neighborhood_demographics (single metric, single neighborhood) and compare_gdp_neighbors (specific to GDP).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives. While the purpose implies broad comparison, there is no guidance on when not to use it (e.g., if only one metric is needed) or reference to sibling tools that might be more appropriate for specific data types.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_average_incomeA

Obtém a renda nominal média e mediana mensal do trabalhador de 14 anos ou mais em Natal (Censo 2022).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only states what the tool returns without disclosing behavioral traits such as data freshness, limitations (e.g., only formal workers), or whether it is read-only. The information is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the core information: what the tool gets and its scope. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless tool without an output schema, the description is relatively complete. It specifies the metric, geographic scope, and data source. However, it lacks minor context like the reference year being 2022 in the description (though present in parentheses) and any notes on data coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters (100% coverage trivially). The description adds value by explaining what data is returned, which is sufficient for a parameterless tool. There is no need for parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Obtém' (gets), the resource 'renda nominal média e mediana mensal do trabalhador', and the scope 'Natal (Censo 2022)'. It is specific and distinguishes from sibling tools like 'get_neighborhood_income' which is per neighborhood.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for getting city-wide income data in Natal, but provides no explicit guidance on when to use this tool versus alternatives like 'get_neighborhood_income' or when not to use it. No exclusions or context are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_city_sanitationA

Obtém o panorama geral de cobertura do esgotamento sanitário de Natal (Censo 2022).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the data source (2022 Census) and the subject (sanitary sewage coverage), but does not mention any behavioral traits such as data freshness, limitations, or whether the data is static. For a simple parameterless tool, this is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is clear and to the point. It contains no fluff and is efficiently front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no output schema), the description provides adequate context. However, it does not describe the return format or structure, which slightly reduces completeness for an agent expecting structured data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema coverage is 100% (trivially). According to the guidelines, the baseline is 4 for 0 parameters. The description does not need to add parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'obtém' (obtains) and the specific resource: 'panorama geral de cobertura do esgotamento sanitário de Natal (Censo 2022)'. This distinguishes it from the sibling tool get_neighborhood_sanitation, which likely provides per-neighborhood data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for city-level overview but does not explicitly state when to use this tool over the sibling get_neighborhood_sanitation. No exclusions or alternatives are mentioned, but context is somewhat clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_density_areaB

Obtém a densidade demográfica (hab/km2) e a área territorial total (km2) de Natal (Censo 2022).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It correctly describes an idempotent read operation returning fixed data from Censo 2022. However, it omits details like data freshness guarantee, rate limits, or that no side effects occur. The lack of behavioral depth is acceptable given zero parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no wasted words. Instantly conveys purpose and data source. Front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description is adequate but not thorough. It states the data and source, but could explicitly note that it returns a single city-wide value and is safe to call without arguments. No mention of return format or example.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Tool has zero parameters and the schema coverage is 100% (empty). Per guidelines, baseline is 4 when no parameters exist. The description adds no parameter-specific info because none are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it obtains demographic density and total territorial area for Natal (Censo 2022). The verb 'obtém' and specific resource are well-defined. However, it does not differentiate from sibling tools like get_neighborhood_demographics or get_total_population, which could cause confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. Among 15 siblings covering various demographic and geographic data, the description does not specify that this tool provides city-level density and area, not neighborhood-level. The 'when to use or avoid' is entirely implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gdp_pibA

Obtém o Produto Interno Bruto (PIB) a preços correntes de Natal (2022).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only states the return value but omits behavioral details like data source, update frequency, or side effects. The tool is read-only but the description doesn't explicitly confirm this.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is a single sentence, concise and front-loaded. Every word adds value; no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters, annotations, or output schema, the description is minimal but adequate for a simple retrieval. However, it lacks explanation of terms like 'current prices' or data provenance, which could improve usability.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema coverage is 100%. The description adds no parameter info, but it's not needed. Baseline of 4 is appropriate given null parameter handling.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Obtém' (gets) and resource 'Produto Interno Bruto (PIB) a preços correntes de Natal (2022)', specifying the tool's purpose precisely. It distinguishes from siblings like 'compare_gdp_neighbors' and demographic tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. No context about prerequisites, typical use cases, or comparisons with sibling tools like 'compare_gdp_neighbors' or 'get_average_income'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_households_countB

Obtém o número de domicílios particulares permanentes ocupados de Natal (Censo 2022).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses it returns a count based on Census 2022 and is scoped to Natal. However, it omits behavioral details like caching, rate limits, or side effects, which are minimal for a read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence efficiently conveys the tool's purpose without any redundancy. It is front-loaded with the verb and resource, making it highly scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description does not specify the return format (e.g., a single numeric value). Without an output schema, this is a minor gap. However, the tool is simple enough that the omission is not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the schema provides full coverage. The description does not need to add parameter semantics; baseline 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the count of occupied permanent private households in Natal from the 2022 census, using a specific verb ('Obtém') and resource. It distinguishes from siblings (e.g., get_total_population, get_average_income) but does not explicitly contrast with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, such as when demographic data for Natal is needed. The description lacks any context about appropriate use cases or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_literacy_rateA

Obtém a taxa de alfabetização das pessoas de 15 anos ou mais de idade em Natal (Censo 2022).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description implies read-only ('obtém') but discloses no other behavioral traits like caching or data freshness. Adequate for a simple query.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single clear sentence, no wasted words. Could be improved with structured formatting, but effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no params and no output schema, the description is sufficient for the tool's purpose. However, it doesn't hint at return format, which would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100%. Description adds no param details but doesn't need to. Baseline 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool retrieves the literacy rate for people 15+ in Natal from the 2022 census, using specific verb 'Obtém' and specific resource. Distinct from siblings like get_average_income.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidelines on when to use this vs alternatives. Implied usage as a simple data query, but explicit guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_neighborhood_demographicsB

Obtém dados detalhados de demografia e domicílios (ocupados, vagos, uso ocasional) de um bairro específico de Natal.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNome do bairro (ex: 'Abolição', 'Centro') ou o código de 10 dígitos do bairro (ex: '2408102010').

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only says 'gets detailed data', implying a read operation but does not mention authentication, rate limits, or error behavior (e.g., if neighborhood not found).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise and front-loaded with the verb. However, it could be more structured by listing the data categories explicitly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description could better explain the output structure. It lists some household statuses but does not specify all demographic fields. With many sibling tools, more detail would aid selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers the single parameter 'query' with 100% description coverage. The description adds little beyond the schema, just stating it accepts a neighborhood name or code. No further format or validation details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves detailed demographic and household data for a specific neighborhood in Natal. It uses specific verbs and resources, and the sibling tools list indicates other specific get_ tools, so this one is distinguished by focusing on demographics and households.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, when not to use, or compare with siblings like get_total_population or get_literacy_rate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_neighborhood_incomeA

Obtém o rendimento nominal médio e mediano mensal do responsável pelo domicílio em um bairro específico de Natal (Censo 2022). Atenção: é a renda do responsável (chefe) do domicílio, universo distinto da renda municipal.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNome do bairro ou código de 10 dígitos.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full weight. It discloses the data source (Censo 2022) and clarifies the income unit (household head), but does not mention whether the operation is read-only, any authentication needs, rate limits, or error behavior. Incomplete for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two concise sentences: the first explains what the tool does, the second adds a critical usage nuance. No redundancy, every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one required parameter, no output schema, and no annotations, the description is largely sufficient: it specifies the metric, geographic scope, and data source. Missing are details on output format (e.g., returns a number or object) and error handling, but for a simple retrieval tool this is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single parameter 'query', which is clearly described as 'Nome do bairro ou código de 10 dígitos.' The tool description adds no further meaning beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the tool gets average and median nominal monthly income of household heads in a specific neighborhood of Natal from Censo 2022. It distinguishes from siblings like get_average_income (general) and get_neighborhood_demographics (broader).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a caution about the metric being for household heads, not municipal income, but does not explicitly state when to use this tool versus alternatives like get_average_income or compare_neighborhoods. Usage context is implied (neighborhood-specific income in Natal).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_neighborhood_sanitationA

Obtém o detalhamento completo dos tipos de esgotamento sanitário e porcentagem de adequação de um bairro específico de Natal.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNome do bairro ou código de 10 dígitos.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavioral traits. It only states the output (sanitation types and adequacy percentage) but does not mention read-only nature, authorization requirements, error handling for invalid neighborhoods, or rate limits. The description adds minimal behavioral context beyond the obvious retrieval operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that immediately states the verb and output, with no redundant words or unnecessary details. It is perfectly concise and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single required parameter, no output schema, no annotations), the description adequately specifies the input and output. It could explicitly note that results are scoped to Natal, but the phrase 'bairro específico de Natal' already implies this. Slight lack of detail about return format or edge cases prevents a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage, with the parameter 'query' described as 'Nome do bairro ou código de 10 dígitos.' The description adds no additional meaning beyond this, essentially rephrasing the same information. Baseline 3 applies since no extra value is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves complete sanitation details (types and adequacy percentage) for a specific neighborhood in Natal. It uses a specific verb ('Obtém') and resource ('detalhamento completo dos tipos de esgotamento sanitário'), distinguishing it from sibling tools like get_city_sanitation (city-level) and get_neighborhood_demographics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for neighborhood-level sanitation data but provides no explicit guidance on when to use this tool vs alternatives (e.g., get_city_sanitation for city-wide data, or get_neighborhood_demographics for demographic data). No when-not-to-use or alternative tool mentions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_population_by_age_groupA

Obtém a população de Natal desaggregada por faixas etárias (Censo 2022).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions the data source and disaggregation but does not disclose return format, limitations, or whether it is read-only. For a parameterless tool, the transparency is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that conveys all essential information without any wasted words. It is front-loaded with the key purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and parameters, the description is brief. It states the location, breakdown, and source, but does not describe the output format (e.g., mapping of age groups to population numbers). For a simple tool, this is acceptable but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters and schema coverage is 100% trivially. The description adds no additional parameter information since there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (obtém = gets), the resource (população de Natal desagregada por faixas etárias), and the data source (Censo 2022). It distinguishes from sibling tools like get_total_population by specifying disaggregation by age group.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as get_total_population or get_population_history. The description lacks explicit when-to-use or when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_population_historyA

Obtém a série histórica de estimativas populacionais de Natal dos últimos anos.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, and the description does not disclose behavioral details such as data source, update frequency, or limitations of the historical series. For a simple data retrieval tool, basic transparency is lacking beyond the minimal action description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the tool's purpose with no wasted words. It is concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and zero parameters, the minimal description suffices for a straightforward data retrieval. However, it lacks details on the output structure or time range precision, which could be helpful for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the description does not need to add parameter semantics. Baseline of 4 is appropriate as the schema coverage is 100% (no params).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Obtém') and resource ('série histórica de estimativas populacionais de Natal') with a timeframe ('últimos anos'). This differentiates it from sibling tools like 'get_total_population' which likely returns current data, and 'get_population_by_age_group' which segments by age.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description only states what it does, without specifying scenarios or exclusions, which is insufficient for an agent to decide usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_total_populationB

Obtém a população total residente de Natal (Censo 2022).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description should disclose behavioral traits but only states the data source (Censo 2022). It does not mention any side effects, permissions, or response characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that is front-loaded with the key action and resource, containing no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description should explain the return format. It only states what data is retrieved but not whether it returns a number, string, or structured object.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so the schema is fully covered. Baseline is 4 per guidelines; the description adds no further parameter information, which is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves the total resident population of Natal from the 2022 census using a specific verb and resource, distinguishing it from sibling tools like get_population_by_age_group and get_population_history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_neighborhoodsA

Lista todos os 36 bairros de Natal com sua área, população total, densidade demográfica e número de domicílios.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. The description discloses the data fields returned, but does not comment on data freshness, permissions, or whether the list is exhaustive (though 'todos' implies completeness).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no wasted words; it conveys all necessary information efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description fully specifies the tool's purpose and output fields. The context of 36 neighborhoods is provided, making it complete for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With no parameters and automatic 100% schema coverage, the description adds value by listing the exact fields (area, population, density, households) that will be returned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists all 36 neighborhoods with specific attributes (area, population, density, households). It distinguishes from sibling tools that focus on comparisons or specific metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for obtaining a full overview of neighborhoods, but does not explicitly state when to use versus alternatives like compare_neighborhoods or get_neighborhood_demographics.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rank_neighborhoods_by_incomeA

Ranqueia os bairros de Natal pela renda média mensal do responsável pelo domicílio (Censo 2022). Use order='top' para os mais ricos, 'bottom' para os mais pobres.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderNotop = maiores rendas, bottom = menores rendas. Padrão: top.
limitNoQuantos bairros listar (1–36). Padrão: 10.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It mentions the data source (Censo 2022), adding some behavioral context. However, it does not disclose whether the tool is read-only, idempotent, or has side effects, nor does it describe the return format or any access restrictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The first sentence immediately states the purpose, and the second provides parameter usage. No unnecessary words or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite being a simple tool with two parameters and no output schema, the description fails to mention what the tool returns (e.g., a list of neighborhoods with income values or just names?). This omission leaves the agent uncertain about the output format, making it incomplete for decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds marginal value by explaining 'top' and 'bottom' for the order parameter (already described in the schema) and clarifying that limit defaults to 10. No additional semantic information beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool ranks neighborhoods in Natal by average monthly income of the household head from Censo 2022. It uses a specific verb ('ranqueia') and resource ('bairros de Natal pela renda...'), distinguishing it from sibling tools like 'get_neighborhood_income' which return a single value rather than a ranking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage examples for the 'order' parameter ('top' for richest, 'bottom' for poorest), helping the agent understand how to invoke the tool. However, it lacks explicit guidance on when not to use this tool versus alternatives like 'get_neighborhood_income' or 'list_neighborhoods'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 16 tool updatesv1.0.0
    • First observedcompare_gdp_neighbors
    • First observedcompare_neighborhoods
    • First observedget_average_income
    • First observedget_city_sanitation
    • First observedget_density_area
    • First observedget_gdp_pib
    • First observedget_households_count
    • First observedget_literacy_rate
    • First observedget_neighborhood_demographics
    • First observedget_neighborhood_income
    • First observedget_neighborhood_sanitation
    • First observedget_population_by_age_group
    • First observedget_population_history
    • First observedget_total_population
    • First observedlist_neighborhoods
    • First observedrank_neighborhoods_by_income

TDQS

A3.8/5.0

Scored across 16 tools

Disambiguation5/5

Cada ferramenta tem um propósito claramente distinto: cidade vs. bairro, demografia vs. renda vs. saneamento vs. PIB. Não há sobreposição significativa entre as funções.

Naming Consistency5/5

Todas as ferramentas seguem o padrão verbo_substantivo (get_, list_, compare_, rank_) com snake_case consistente e verbos descritivos apropriados.

Tool Count5/5

Com 16 ferramentas, o conjunto cobre adequadamente os principais dados demográficos e econômicos de Natal sem ser excessivo ou muito enxuto.

Completeness4/5

O conjunto cobre os principais indicadores (população, renda, saneamento, PIB, alfabetização, domicílios, densidade) e inclui comparações. Faltam tópicos como emprego ou educação detalhada, mas o escopo é bem delimitado.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Connects AI agents to 28 Brazilian public APIs, providing over 200 tools to access data on economy, legislation, transparency, and the judiciary. It enables complex queries and cross-referencing of government datasets like IBGE, the Central Bank, and the National Congress through natural language.
    MIT