mcp-saude-brasil
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-saude-brasilquantos dentistas ativos existem no município de São Paulo?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 SQLiteNada é 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 |
| 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. |
| 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). |
| 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? |
| crítico | ✅ CRO na chave; agregação pelo endereço |
| crítico | — declarado; o servidor não usa o CNES para isso |
| aviso | — Brasil: 472.500 na soma municipal vs 473.588 no total por UF |
| aviso | — é densidade de inscrições, não censo de consultórios |
| 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 testMIT · 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 toolssaude_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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Sigla da UF (lista todos os municípios dela). | |
| municipios | No | Códigos IBGE (7) ou DATASUS (6). |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Sigla da UF. Vazio = todas. |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.1.0- First observed
saude_data_caveats - First observed
saude_dentistas_municipio - First observed
saude_uf
TDQS
Scored across 3 tools
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.
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.
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.
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
Related MCP Connectors
Conselho Federal de Odontologia: Cadastro, official-source lookup. Platform-hosted, pay per query wi
Conselho Regional de Odontologia SP: Cadastro, official-source lookup. Platform-hosted, pay per quer
Conselho Regional de Odontologia ES: Cadastro, official-source lookup. Platform-hosted, pay per quer
Conselho Regional de Odontologia: Cadastro, official-source lookup. Platform-hosted, pay per query w
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables querying health establishment data from the Brazilian Federal Council of Medicine (CFM), providing read-only access to official information.MIT
- AlicenseNot gradedqualityCmaintenanceRead-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
- AlicenseNot gradedqualityCmaintenanceProvides 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
- AlicenseNot gradedqualityCmaintenanceEnables querying the official registry of the Regional Council of Dentistry of Paraná (Brazil) for professional registration data. It provides a read-only tool to consult official records via natural language.MIT