Brasil Planos de Saúde (ANS)

io.github.ThiagoJacobLannesPublished by GitHub account ThiagoJacobLannesv0.1.0Updated Nov 1, 2026

Compare Brazilian health-plan operators with ANS open data: complaints, IDSS, fines, readjustments.

Overview

AI-generated overview

Looks up and compares Brazilian health-plan operators using official ANS open data: complaints, quality scores, fines and readjustments.

What you can do
  • Find operators by name, CNPJ, registry number, state, city or modality, largest first
  • Read one operator's full ANS profile: status, beneficiaries, complaints index, five years of IDSS, access-to-care band, fines and readjustments
  • Compare two to eight operators side by side on the same indicators
  • Rank active operators by complaints or quality, filtered by size, state, modality and minimum beneficiaries
  • Get the official ANS complaint channels and how a complaint works
When to use it
Useful when someone in Brazil is choosing or evaluating a health-plan operator and wants regulator-published evidence, such as whether an operator is well rated, how it compares with rivals, or where to complain about a denied procedure.
Requirements
Runs locally as a Python package via uvx (Python 3.10+ for source installs). No account, key or header is needed. Network access to the ANS open-data portal is required; the first call downloads about 65 MB of files and caches a compact copy in the user cache folder, refreshable after 24 hours.
Before you install
Read-only and keyless, but the first call downloads a large data set and can take a minute. It covers operators, not individual plans, networks or prices, and is not legal advice. Results are only as current as the ANS publications, so figures should be cited with their month or year.

Installation

In SourceWeft

  1. Open Brasil Planos de Saúde (ANS) in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

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.

What the numbers mean

IndicatorWhat it isBetterUpdated
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.lowermonthly
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).higheryearly
Garantia de atendimentoQuarterly 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.lowerquarterly, when ANS publishes
PenalidadesFines ANS applied, by year and status, including fines under appeal, suspended or archived. Not what was paid.fewer, relative to sizewhen ANS publishes
Reajuste do agrupamentoThe 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:

bash
brasil-planos-saude-mcp --refresh

Set 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.

bash
claude mcp add brasil-planos-saude -- uvx brasil-planos-saude-mcp

For Claude Desktop, use "command": "uvx", "args": ["brasil-planos-saude-mcp"].

From source:

Requires Python 3.10+.

bash
git clone https://github.com/ThiagoJacobLannes/brasil-planos-saude-mcpcd brasil-planos-saude-mcppython -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

bash
claude mcp add brasil-planos-saude -- python -m brasil_planos_saude_mcp.server

Add to Claude Desktop

Merge claude_desktop_config.snippet.json into your Claude Desktop claude_desktop_config.json, then restart Claude Desktop:

json
{  "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

Source: README.md at commit 50176d1

Tools

5

find_operators

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.

Parametersufcitylimitquerymodalityinclude_cancelled

operator_profile

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).

Parameterscoverageoperatorrequired

compare_operators

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".

Parameterscoverageoperatorsrequired

rank_operators

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).

Parametersbyuflimitportecoveragemodalityworst_firstmin_beneficiaries

where_to_complain

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).

Takes no parameters.

Version history

1
  1. v0.1.0LatestNov 1, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts