brasil-planos-saude-mcp
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., "@brasil-planos-saude-mcpCompare Unimed and Bradesco Saúde on complaints and IDSS quality score."
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.
brasil-planos-saude-mcp
MCP server that helps answer "is this health plan any good?" in Brazil. Claude (or any MCP client) can look up a health-plan operator (operadora de plano de saúde) and see what the regulator, ANS, publishes about it: complaints, quality score, access-to-care monitoring, fines and readjustments. It can compare operators side by side and rank them.
Read-only, no key, no account. Everything comes from the ANS open-data portal. Not affiliated with ANS or any operator.
Operators, not plans or prices. ANS publishes these indicators per operator. A single operator sells many plans with different networks; check the network and the price with the operator or a broker.
Not legal advice. For a denied or delayed procedure, use
where_to_complain(Disque ANS 0800 701 9656). In an emergency, get care first.
Tools
operator_profile
Everything about one operator: registration and status (active, or cancelled with date and reason), beneficiaries and size class, the complaints index with its position among operators of the same size, five years of IDSS, the access-to-care band, fines, and the small-group readjustment.
Parameters: operator (name or part of it, CNPJ, or ANS registry number), coverage (medica or odonto). A shared brand such as "Unimed" (hundreds of separate cooperatives) returns the largest matches and asks for a more specific name.
compare_operators
Two to eight operators side by side: 12-month complaints index against the median of their size class, latest IDSS, latest access-to-care band, fines in the last five years, latest small-group readjustment.
Parameters: operators (list), coverage.
rank_operators
Active operators ranked by complaints (by="reclamacoes", lower is better) or quality (by="qualidade", latest IDSS, higher is better).
Parameters: by, coverage, porte (pequeno, medio, grande), uf, modality, min_beneficiaries (default 5000), worst_first, limit.
find_operators
Search by name, CNPJ or registry number, or list by head-office state, city or modality (cooperativa médica, medicina de grupo, seguradora, autogestão, odontologia de grupo, filantropia). Largest first.
where_to_complain
The official ANS channels, checked on the ANS consumer-service page, and how a complaint (NIP) works.
Related MCP server: Consulta de Multas
What the numbers mean
Indicator | What it is | Better | Updated |
IGR (Índice Geral de Reclamações) | Complaints to ANS per 100,000 beneficiaries in a month (2023 method). ANS compares operators of the same size: small < 20k, medium 20k-100k, large > 100k beneficiaries. The server also gives a 12-month average, which is steadier. | lower | monthly |
IDSS (Índice de Desempenho da Saúde Suplementar) | ANS's yearly 0-1 score, with four dimensions: quality of care (IDQS), access (IDGA), market sustainability (IDSM), processes and regulation (IDGR). | higher | yearly |
Garantia de atendimento | Quarterly band for denied or delayed coverage: 0 no upheld complaints, 1 below the median, 3 more than 50% above the median. Band 3 again and again leads ANS to suspend sales of plans. | lower | quarterly, when ANS publishes |
Penalidades | Fines ANS applied, by year and status, including fines under appeal, suspended or archived. Not what was paid. | fewer, relative to size | when ANS publishes |
Reajuste do agrupamento | The readjustment the operator applied to its pool of collective contracts with fewer than 30 lives. Individual/family plans follow a cap set by ANS instead. | yearly |
Every result says which month, quarter or year each figure belongs to, and links the file it came from.
Data and cache
The first call downloads seven ANS files (about 65 MB) and keeps a compact copy (about 1 MB) in your user cache folder. After 24 hours the server asks ANS whether a file changed and downloads it again only if it did. If ANS is down, it uses the cached copy and says so. To fill the cache in advance:
brasil-planos-saude-mcp --refreshSet BRASIL_PLANOS_SAUDE_CACHE_DIR to use another folder.
The operator registry file also has the operator's contact e-mail and the name of its legal representative. This server leaves both out.
Install
Quickest (needs uv): no clone needed, it runs straight from PyPI.
claude mcp add brasil-planos-saude -- uvx brasil-planos-saude-mcpFor Claude Desktop, use "command": "uvx", "args": ["brasil-planos-saude-mcp"].
From source:
Requires Python 3.10+.
git clone https://github.com/ThiagoJacobLannes/brasil-planos-saude-mcp
cd brasil-planos-saude-mcp
python -m pip install -e .On Windows, if you keep code in a cloud-synced folder (Google Drive, OneDrive), create the virtual environment outside it. Sync clients drop desktop.ini files into folders, which can crash packages on startup.
Add to Claude Code
claude mcp add brasil-planos-saude -- python -m brasil_planos_saude_mcp.serverAdd to Claude Desktop
Merge claude_desktop_config.snippet.json into your Claude Desktop claude_desktop_config.json, then restart Claude Desktop:
{
"mcpServers": {
"brasil-planos-saude": {
"command": "python",
"args": ["-m", "brasil_planos_saude_mcp.server"]
}
}
}Example questions
"Is Hapvida any good? How does it do on complaints?"
"Compare Amil, Bradesco Saúde, SulAmérica and Porto Seguro."
"Which large health plans get the fewest complaints?"
"Best-rated dental plans."
"Has Unimed Campinas been fined by ANS?"
"My plan denied a procedure. Where do I complain?"
License
MIT
Available Tools
5 toolscompare_operatorsA
Side-by-side comparison of 2 to 8 health-plan operators on the ANS indicators.
Use for "Amil or Bradesco Saúde?", "compare the plans my company offers". For each operator: 12-month complaints index (IGR) with the median of its size class and its position, latest IDSS, latest access-to-care band, number of fines in the last 5 years, and the latest small-group readjustment.
Args: operators: Names, CNPJs or ANS registry numbers, e.g. ["Amil", "Bradesco Saúde", "SulAmérica"]. coverage: "medica" (default) or "odonto".
| Name | Required | Description | Default |
|---|---|---|---|
| coverage | No | medica | |
| operators | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it discloses the exact output payload per operator (IGR with size-class median and position, IDSS, access-to-care band, 5-year fines count, small-group readjustment). It doesn't mention behavior on unknown/ambiguous operator names or error handling, which is the main remaining gap for a no-annotation tool.
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 purpose is front-loaded in the first sentence and the example phrasings immediately follow. The 'For each operator' list is long but each item is load-bearing output detail, so it earns its space despite the density.
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 a 2-param read tool with no annotations, the description covers scope, inputs, and output contents thoroughly; the existence of an output schema means the enumerated metrics are bonus rather than required. Missing only edge-case behavior (invalid or ambiguous operator identifiers), which prevents a 5.
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 coverage is 0%, so the description must compensate, and it does: it defines accepted operator identifier forms (names, CNPJs, ANS registry numbers) with an example, and enumerates the coverage values ('medica' default, 'odonto') that the schema leaves as a bare string. It could clarify what medica vs odonto changes in the output, keeping it from a 5.
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?
States a specific verb (side-by-side comparison), resource (health-plan operators), and scope (2 to 8 operators on ANS indicators). This clearly distinguishes it from operator_profile (single operator) and rank_operators (ranking), so an agent can pick it without opening the schema.
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 gives concrete triggering questions ('Amil or Bradesco Saúde?', 'compare the plans my company offers'), which clearly signals the use case. It doesn't explicitly state when NOT to use it or name the sibling alternatives (rank_operators, operator_profile), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_operatorsA
Find Brazilian health-plan operators (operadoras de planos de saúde) registered with ANS.
Use it to turn a brand the user mentions ("Unimed BH", "Amil", "Bradesco Saúde") into the ANS registry number, or to list operators by state, city or type. Largest first.
Args: query: Part of the name, the CNPJ, or the ANS registry number. Accents and case don't matter. Several words must all match ("unimed campinas"). uf: State of the operator's head office, e.g. "SP", "MG". city: City of the head office, e.g. "Belo Horizonte". modality: e.g. "Cooperativa Médica", "Medicina de Grupo", "Seguradora", "Autogestão", "Odontologia de Grupo", "Filantropia", "Administradora de Benefícios" (substring match). include_cancelled: Also list operators whose registration was cancelled. limit: How many to return (default 10, max 50).
Each operator: registro_ans, name, legal name, modality, head office, status, and beneficiaries and size class (porte) per coverage. Head office is not where the operator sells plans.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | ||
| city | No | ||
| limit | No | ||
| query | No | ||
| modality | No | ||
| include_cancelled | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses result ordering ('Largest first'), the default and maximum result count (10, max 50), that modality is a substring match, that query words are ANDed, that accents/case are normalized, and a non-obvious domain caveat that head office is not where the operator sells plans. It does not state pagination behavior or explicitly frame the operation as read-only, so it is not exhaustive.
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?
Front-loaded with a one-sentence purpose, then usage, then an Args block, then the return shape — a clean, scannable structure. The modality enumeration is long but each value is a legitimate allowed input, and every section earns its place; only minor tightening is possible.
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 a zero-required-parameter search tool with an output schema present, the description supplies everything an agent needs: what it searches, how matching works, ordering, limits, cancellation handling, and even a summary of returned fields. Nothing material is left to inference.
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 coverage is 0%, so the description must compensate entirely, and it does: every one of the six parameters is explained with examples, defaults (limit default 10, max 50; include_cancelled semantics), and matching rules (substring for modality, all-words-must-match for query, accent/case insensitivity). This adds real meaning that the bare schema titles could never convey.
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?
States a specific verb and resource — find Brazilian health-plan operators registered with ANS — and immediately gives the two concrete jobs it performs (brand name → ANS registry number, or listing by geography/type). This is clearly a discovery/lookup tool, distinguishable from siblings like operator_profile, compare_operators and rank_operators which operate on already-identified operators.
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?
Explicitly names the triggering scenario ('turn a brand the user mentions ("Unimed BH", "Amil") into the ANS registry number') and the alternative scenario (list by state, city or type), which is exactly the when-to-use guidance an agent needs. It does not name sibling tools or state exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
operator_profileA
Everything ANS publishes about one health-plan operator, to judge whether it is a good choice.
Use for "is Hapvida good?", "how does Unimed Campinas rank on complaints?", "has SulAmérica been fined?". Returns:
registration: legal name, CNPJ, modality, head office, phone, status (active or cancelled, with date and reason), beneficiaries and size class;
complaints (IGR): latest month, 12-month average, the median of operators of the same size, the operator's position among them, and the monthly series;
quality (IDSS, 0-1, higher is better) for the last 5 years with its four dimensions;
access-to-care monitoring band (0 best, 3 worst) for the last published quarters;
fines applied by ANS: totals, last 5 years, status and the most recent cases;
the readjustment applied to its small-group pool (contracts with < 30 lives).
Args: operator: Name (or part of it), CNPJ, or ANS registry number. If the name matches several operators, the largest active one is used and the others are listed in outras_operadoras_com_nome_parecido: check it is the one the user meant (Unimed, for example, is hundreds of separate cooperatives). coverage: "medica" or "odonto". Default: every coverage the operator has.
Always quote the month/year of each figure and explain that IGR is lower-is-better and IDSS higher-is-better (see como_ler in the result).
| Name | Required | Description | Default |
|---|---|---|---|
| coverage | No | ||
| operator | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses the full data scope (six domains), the meaning of directionality (IGR lower-is-better, IDSS higher-is-better), and an important silent fallback ('the largest active one is used') with a pointer to outras_operadoras_com_nome_parecido for verification. It omits any statement about permissions, rate limits, or read-only nature, which keeps it short of a 5.
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?
Front-loaded purpose, then a scannable bulleted return breakdown, then args — good ordering with no filler sentences. The per-field return enumeration is somewhat long given an output schema already exists, which is the main redundancy.
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?
An agent has everything needed to call it correctly: input formats, ambiguity handling, coverage default, and interpretation guidance for the returned metrics (with a pointer to como_ler). Since an output schema exists, the description is not obliged to enumerate return fields further.
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 coverage is 0%, so the description must do all the work and it does: 'operator' accepts name/partial name, CNPJ, or ANS registry number, and it explains the multi-match resolution behavior. 'coverage' gets its two allowed values ('medica'/'odonto') and its default, which the schema's untyped anyOf string/null cannot convey.
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?
Opens with a specific verb-scoped statement: 'Everything ANS publishes about one health-plan operator', plus the decision it supports. It is clearly an entity-detail tool and is distinguishable from siblings like compare_operators or rank_operators, which act on multiple operators.
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?
Example questions ('is Hapvida good?', 'has SulAmérica been fined?') make the intended use case concrete and give the agent a trigger pattern. It does not explicitly state when to prefer find_operators or compare_operators instead, so the routing guidance is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_operatorsA
Rank active health-plan operators by complaints or by quality.
Use for "which large health plans get the fewest complaints?", "best-rated dental plans", "worst operators in Minas Gerais".
Args: by: "reclamacoes" (12-month IGR, lower is better) or "qualidade" (latest IDSS, higher is better). coverage: "medica" (default) or "odonto". porte: "pequeno" (< 20k beneficiaries), "medio" (20k-100k) or "grande" (> 100k). ANS itself only compares operators of the same size. uf: Head-office state, e.g. "MG". Not the same as where it sells plans. modality: e.g. "Cooperativa Médica", "Medicina de Grupo", "Seguradora". min_beneficiaries: Skip operators smaller than this (default 5000; tiny ones swing wildly). worst_first: True to list the worst first. limit: How many to return (default 10, max 50).
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | reclamacoes | |
| uf | No | ||
| limit | No | ||
| porte | No | ||
| coverage | No | medica | |
| modality | No | ||
| worst_first | No | ||
| min_beneficiaries | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it explains ranking direction, defaults, the ANS same-size comparison constraint, and why tiny operators are excluded by default. It does not explicitly declare read-only behavior or permissions, but the ranking/query nature is clear and the output schema covers return structure.
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 front-loaded with purpose and concrete examples, then efficiently documents each parameter. Despite eight parameters, every line adds useful information without repetition.
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?
The description is substantially complete for a complex eight-parameter tool: all parameters are explained, output schema covers return values, and key caveats are included. The main remaining gap is explicit routing guidance versus sibling tools such as compare_operators and find_operators.
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 0%, so the description must compensate for all eight parameters. It does so thoroughly: it defines allowed values for by and coverage, explains porte thresholds, clarifies that uf means head-office state, gives modality examples, and documents defaults and limits.
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 specific verb and resource: ranking active health-plan operators by complaints or quality. The example questions make the ranking purpose concrete, though it does not explicitly contrast itself with sibling tools such as compare_operators or find_operators.
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?
It provides clear usage contexts through example questions like 'which large health plans get the fewest complaints?' and 'best-rated dental plans'. It does not explicitly state when to choose this over sibling tools, but the intended use cases are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
where_to_complainA
How to complain about a health plan in Brazil: the official ANS channels and the steps.
Use when a user's plan denied or delayed a procedure, or they have a contract problem. Each channel was checked on the ANS consumer-service page (conferido_em).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries disclosure duty, and it does add provenance the schema cannot express: each channel was 'checked on the ANS consumer-service page (conferido_em)'. It doesn't discuss return shape or how many channels come back, but for a zero-parameter read-only guidance lookup the behavioral risk surface 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines: what it returns, when to call it, and how the data was verified. The trigger sentence is front-loaded right after the purpose statement and no sentence is filler.
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?
An output schema exists, so the description needn't spell out the return format, and it already covers purpose, trigger and data provenance. What is slightly missing is any hint of scope limits (e.g. whether it covers only ANS-regulated plans vs. employer self-funded plans), which matters for this domain.
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 tool takes zero parameters, so there is nothing semantic to explain and the baseline for an argument-free tool applies. The description correctly implies a no-input lookup by not suggesting any audience/state/locale scoping.
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?
Names a specific resource and scope: 'the official ANS channels and the steps' for complaining about a Brazilian health plan. The sibling tools (operator_profile, find_operators, compare_operators, rank_operators) are all operator-data tools, so this guidance tool is unambiguously distinct from every one of them.
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?
Gives an explicit trigger: 'Use when a user's plan denied or delayed a procedure, or they have a contract problem.' That is a clear invocation condition covering the two main scenarios. It does not name an alternative or exclusion, but no sibling could plausibly be confused with it.
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.
5 tool updates
v0.1.0- First observed
compare_operators - First observed
find_operators - First observed
operator_profile - First observed
rank_operators - First observed
where_to_complain
TDQS
Scored across 5 tools
Each tool targets a distinct task: single-operator deep lookup, operator discovery/search, multi-operator comparison, ranked lists, and complaint-channel guidance. The boundaries are reinforced by clear use-case examples in the descriptions, so an agent can reliably choose the right tool. There is minor overlap between find/compare/rank because all involve operators, but their purposes and outputs are sharply differentiated.
Most names follow a clear verb_noun or action pattern: find_operators, compare_operators, rank_operators. operator_profile is noun-based and where_to_complain is a phrase, which are minor deviations but still readable and intuitive. The overall set is consistent enough to predict tool behavior.
Five tools is well-scoped for a focused domain of Brazilian health-plan operator data and consumer guidance. Each tool earns its place: search, profile, comparison, ranking, and complaint routing. There is no obvious redundancy or missing major workflow.
The surface covers discovery, detailed profile retrieval, comparison, ranking, and complaint guidance, which addresses the core informational needs of the domain. Minor gaps might include a dedicated tool for plan/product-level details or direct access to underlying time-series data, but these are workable through operator_profile. The read-only nature of the server makes CRUD lifecycle coverage less relevant.
Maintenance
Related MCP Connectors
Ferramentas para validar documentos TISS e consultar TUSS, operadoras e dados da ANS.
Brazilian company and person data by CNPJ/CPF: registry, partners, tax status, sanctions, lawsuits.
Free Brazilian CNPJ lookup (legal name, status, partners) + lawsuit discovery. Public data, no login
Open-source alternative to Jusbrasil for AI: find lawsuits by name, CPF, CNPJ or case number and bui
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides government transparency indicators for Brazilian individuals (CPF/NIS) via the Portal da Transparência, enabling read-only queries through natural language.MIT
- AlicenseNot gradedqualityCmaintenanceEnables users to query public Brazilian vehicle and traffic data from official sources, including vehicle debts (IPVA, licensing, open fines), federal infractions by plate/RENAVAM, vehicles registered to an owner, and driver's license status.MIT
- AlicenseAqualityAmaintenanceEnables querying Anvisa's open data for drug registration status and recent medical devices, with heuristic AI-use classification using a locally hosted LLM.2Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables natural-language querying of Brazilian public health indicators from DataSUS microdata — mortality, dengue, hospitalizations, ICSAP, and births — through 41 tools covering consultation, analysis (peer-stratum comparison, dengue endemic channel, weekly bulletin), reliability warnings, and anomaly detection. It runs locally against the public API with anti-hallucination rules so every figure comes from a tool with its source cited.MIT