Skip to main content
Glama

mcp-saude-brasil

Servidor MCP de dados abertos de saúde bucal do Brasil (Conselho Federal de Odontologia) — com o que cada base não responde declarado na resposta.

Três tools que não mentem, em vez de trinta que não sabem.


O problema que este servidor resolve

O CFO publica quantos dentistas, clínicas e laboratórios existem por UF e por localidade. A primeira soma costuma dar errado em silêncio:

Cada CRO lista também dentistas inscritos nele com endereço em outra UF (o CRO-SP lista 2.227 assim). Somar a lista de um CRO como se fosse a UF, ou usar UF + cidade como chave sem o CRO, sobrescreve linhas e apaga metade dos dados sem erro — 240 mil dentistas em vez de 472 mil.

Este servidor guarda o CRO de inscrição em cada linha e agrega pelo município do endereço (código IBGE), somando todos os CROs.

E declara o que não responde: o CNES não serve para contar consultórios odontológicos — "consultório isolado" reúne todas as profissões de saúde e não há campo que marque odontologia. Este servidor não finge que serve.

Related MCP server: Conselho Regional de Odontologia AL: Cadastro

A garantia

Toda resposta segue o phi-data-contract v0.1: data + provenance (fonte e data de coleta)

  • caveats (os defeitos que se aplicam àquela consulta, com evidência e data de verificação) + cannot_answer (o que a pergunta pediu e a fonte não responde).

Instalação

Requer Node ≥ 22.5 (SQLite embutido — zero dependências nativas).

npm install && npm run build
npm run db:build        # lê as estatísticas públicas do CFO (1 GET + 27 POST) e monta o SQLite

Nada é redistribuído — a base é construída na sua máquina, sempre da fonte.

{
  "mcpServers": {
    "saude": {
      "command": "node",
      "args": ["--experimental-sqlite", "/caminho/mcp-saude-brasil/dist/index.js"],
      "env": { "SAUDE_LANG": "pt" }
    }
  }
}

As tools

Tool

O que faz

saude_dentistas_municipio

Cirurgiões-dentistas ativos por município do endereço, somando todos os CROs. Aceita código IBGE de 7 ou DATASUS de 6 dígitos, ou uma UF inteira. Informa quantos são inscritos em outro CRO.

saude_uf

Todas as categorias do CFO por UF: dentistas (CD), clínicas registradas no CRO (EPAO), laboratórios de prótese (LB), técnicos e auxiliares (TPD, TSB, ASB, APD), empresas de produtos odontológicos (ECIPO).

saude_data_caveats

As armadilhas conhecidas, com evidência, mais o relatório do build (localidades não casadas, casadas por aproximação, divergência município × UF).

Os caveats

id

Severidade

Corrigido?

cro_inscricao_nao_e_endereco

crítico

✅ CRO na chave; agregação pelo endereço

cnes_sem_marca_odontologica

crítico

— declarado; o servidor não usa o CNES para isso

soma_municipal_menor_que_uf

aviso

— Brasil: 472.500 na soma municipal vs 473.588 no total por UF

inscrito_nao_e_atuante

aviso

— é densidade de inscrições, não censo de consultórios

distritos_e_grafias

info

✅ distritos somados ao município-sede; grafias casadas por aproximação na mesma UF

Fontes

CFO — Quantidade geral de entidades e profissionais ativos e Dados estatísticos por localidade. IBGE — API de Localidades (código de município).

npm test

MIT · Autor: Luis Delfin · parte da rede de servidores MCP de dados públicos de Phi AI


English

MCP server for Brazil's open dental-health data (Federal Council of Dentistry, CFO) — with what each source cannot answer declared in the response.

The problem

Each regional council (CRO) also lists dentists registered with it but addressed in another state. Summing a CRO list as if it were the state, or keying by state + city without the CRO, overwrites rows and silently wipes half the data (240k dentists instead of 472k). This server keeps the registering CRO on every row and aggregates by the address municipality (IBGE code) across all CROs.

It also states what it won't do: CNES cannot count dental practices — its "isolated practice" type groups every health profession and no field flags dentistry.

Guarantee

Every response follows phi-data-contract v0.1: data + provenance + caveats (with evidence and verification date) + cannot_answer.

Install

Node ≥ 22.5. npm install && npm run build && npm run db:build. Nothing is redistributed — the database is built on your machine from the source. Set SAUDE_LANG=en for English caveats.

Tools

  • saude_dentistas_municipio — active dentists by address municipality (IBGE 7-digit or DATASUS 6-digit code, or a whole state).

  • saude_uf — every CFO category by state (dentists, CRO-registered clinics, prosthesis labs, technicians, dental-product companies).

  • saude_data_caveats — known pitfalls with evidence, plus the build report.

MIT · Author: Luis Delfin · part of Phi AI's network of public-data MCP servers.

Available Tools

3 tools
saude_data_caveatsC

As armadilhas do CFO (e por que o CNES não serve para contar consultórios odontológicos), com evidência, mais o relatório do build.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden. It mentions 'com evidência' and 'relatório do build', which hint at an output, but it does not state whether the tool is read-only, what the response looks like, any side effects, authentication, or rate limits. The behavior is largely undisclosed.

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, compact sentence with no redundancy or filler. It is front-loaded with the core topic. However, its brevity comes at the expense of operational detail, so it is concise but not as structured as it could be.

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

Completeness1/5

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

With no output schema, no annotations, and a single undocumented parameter, the description is far from complete. It does not explain what the tool returns (the 'relatório do build' is mentioned but not described), how the optional id affects the result, or how this relates to sibling tools. The description leaves too many unknowns for an agent to call the tool correctly.

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

Parameters1/5

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

The schema defines an optional 'id' with no description (0% coverage). The tool description never mentions this parameter or any other, so an agent cannot infer the meaning or expected value of 'id'. The description fails to compensate for the missing schema documentation.

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

Purpose3/5

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

The description states a topic ('armadilhas do CFO' and why CNES is not suitable) but does not include an explicit verb or operation. It is more of a label than a functional description, so an agent can infer it provides caveats but not exactly what action it performs. It is not a tautology, but it is vague.

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?

There is no explicit when-to-use guidance or mention of sibling tools. The phrase about CNES not serving to count dental offices implicitly suggests this tool provides caveats before using health data, but it does not direct the agent to alternatives or exclusion conditions.

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

saude_dentistas_municipioA

Cirurgiões-dentistas com inscrição ativa no CFO por município do endereço (código IBGE de 7 ou DATASUS de 6 dígitos), somando todos os CROs. Aceita também uma UF inteira.

ParametersJSON Schema
NameRequiredDescriptionDefault
ufNoSigla da UF (lista todos os municípios dela).
municipiosNoCódigos IBGE (7) ou DATASUS (6).

TDQS

A3.5/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 of behavioral disclosure. It does add meaningful behavior: filtering by active CFO registration, grouping by the municipality of the address, and summing across all CROs. It does not mention output format, pagination, or edge cases such as invalid or conflicting inputs.

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 dense sentence with no filler. The core resource and filtering logic are front-loaded, and the UF alternative is stated efficiently at the end.

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 an unannotated tool with two optional parameters and no output schema, the definition is workable but incomplete. It does not describe the response contents, how to choose between parameters, or what happens when no parameter is provided.

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%, so the baseline is 3. The description adds context about address-based municipality filtering and CRO summation, but it does not substantially extend the meaning of the two parameters beyond what the schema already documents.

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 identifies the resource (dentists with active CFO registration) and the scope (by municipality address or full UF), including the accepted code formats. It lacks an explicit verb like 'lists' or 'returns' and does not explicitly differentiate from sibling tools, but the purpose is otherwise specific and unambiguous.

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 conveys two usage modes: querying by municipality codes or by an entire UF. However, it does not state when to prefer this tool over saude_uf or when saude_data_caveats should be consulted, nor does it explain behavior when both parameters are supplied or when neither is supplied.

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

saude_ufB

Todas as categorias do CFO por UF: cirurgiões-dentistas, clínicas registradas no CRO (EPAO), laboratórios de prótese (LB), técnicos e auxiliares, empresas de produtos odontológicos (ECIPO).

ParametersJSON Schema
NameRequiredDescriptionDefault
ufNoSigla da UF. Vazio = todas.

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 carry the burden of behavioral disclosure. It only lists what categories are included, but does not mention any behavioral traits such as whether the list is aggregated, whether it includes all CFO categories, whether there are any limitations on data availability, or whether it requires any authentication. It also doesn't state what the output format is. For a tool that returns categorical data, this is a significant gap.

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 one sentence, concise and front-loaded with the main purpose. It lists the categories efficiently, but the categories are enumerated in a long list, which is acceptable. No unnecessary words.

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 there is no output schema, the description should explain what the return value looks like, but it doesn't. As a simple tool with one parameter, the description explains what data is included but not the structure or any caveats. Sibling tools like saude_data_caveats might hold necessary context, but an agent would benefit from knowing that this tool may have limitations or how the data is organized. It is incomplete for an agent to know exactly what to expect.

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 one parameter 'uf' with 100% coverage, so the schema already describes it as 'Sigla da UF. Vazio = todas.' The description does not add any additional meaning beyond the schema; it is not necessary because the schema is sufficient. However, the description could have elaborated on the expected format (e.g., 'SP', 'RJ') or given examples, but since the schema is clear, this is adequately covered.

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 what the tool does: lists all CFO categories per UF, enumerating the categories (dentists, clinics, labs, technicians, companies). It is specific about the resource and scope, but does not explicitly differentiate from siblings beyond the UF focus. The verb 'Todas as categorias do CFO por UF' is specific, but the tool name itself suggests UF-level data, so the description adds clarity on the categories included.

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: this is for querying CFO categories by UF. It does not state when to use this versus the sibling tools like saude_dentistas_municipio (which is at municipal level) or saude_data_caveats (which likely provides caveats). The context is clear, but there is no explicit mention of alternatives or conditions. Since the sibling names suggest different granularity, a note about when to use UF-level vs municipal would be helpful.

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. 3 tool updatesv0.1.0
    • First observedsaude_data_caveats
    • First observedsaude_dentistas_municipio
    • First observedsaude_uf

TDQS

B3.2/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: one for municipality-level dentist counts, one for UF-level all categories, and one for data caveats/explanation. There is no overlap or ambiguity between them.

Naming Consistency4/5

All tool names share the 'saude_' prefix and use lowercase snake_case, which is consistent. 'saude_uf' is slightly terser than the others, but the pattern is still predictable and readable.

Tool Count4/5

Three tools is a reasonable count for a narrowly focused server on Brazilian dental data. Each tool serves a distinct purpose, though one is more informational than a data query.

Completeness3/5

The server covers municipality-level dentists and UF-level all categories, but lacks municipality-level data for other categories (e.g., clinics, labs) and national-level aggregates. The caveats tool adds context but does not fill these data gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables querying health establishment data from the Brazilian Federal Council of Medicine (CFM), providing read-only access to official information.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server for querying official dental registration data from the Regional Council of Dentistry of Alagoas (Brazil). It provides a single tool to consult professional records via a hosted HTTP endpoint with prepaid credits.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides read-only access to official dentistry registration data from the Paraíba Regional Council of Dentistry (CRO-PB) via a hosted, pay-per-use MCP API.
    MIT