list_csap_groups
Grupos CSAP (Portaria 221/2008)
Lista os 19 grupos de Condições Sensíveis à Atenção Primária (CSAP) conforme Portaria MS/SAS 221/2008. Retorna código, nome e códigos CID-10 de cada grupo.
group_codeinclude_cid_codesio.github.SidneyBissoliPublished by GitHub account SidneyBissoliv1.8.2Updated Nov 3, 2026
DATASUS SIH/SUS hospital admissions in Brazil (AIH, 1992-2025): ICD-10 causes, ICSAP, rates.
The publisher's own server: Tower and Wing: FHA-insured hospital loans (HUD Section 242)
MCP server for Brazilian SUS hospital admissions (DATASUS SIH/SUS AIH, 1992–2025): causes, ICSAP, trends and rates, with provenance.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.SidneyBissoli%2Fsih-br-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config.
{
"mcpServers": {
"datasus-sih-sus-brazil-hospital-admissio": {
"type": "http",
"url": "https://sih.sidneybissoli.com/mcp"
}
}
}Servidor MCP (Model Context Protocol) que responde perguntas sobre as internações
hospitalares do SUS — o SIH/SUS do DATASUS, AIH reduzida — dentro do assistente de
IA, sem TabNet, sem baixar .dbc do FTP e sem escrever SQL. Doze ferramentas sobre
34 anos (1992 a 2025, 420.103.883 internações): causas por capítulo e grupo da
CID-10 (CID-9 antes de 1998), séries mensais, ICSAP — internações por condições
sensíveis à atenção primária, lista brasileira — e taxas brutas, específicas ou
padronizadas por idade, por UF e por município. Cada estrato traz internações, dias de
permanência, valor pago pelo SUS e óbitos, com a proveniência da safra e a citação
da fonte em cada resposta.
In English. MCP server for Brazilian hospital admissions (DATASUS SIH/SUS, "AIH" records), 1992–2025: causes by ICD-10 chapter and group (ICD-9 before 1998), monthly series, ambulatory care sensitive conditions (ICSAP/ACSC, Brazilian list) and crude, age-specific or age-standardized rates by state and municipality — answered inside Claude, ChatGPT or any MCP client, with provenance and a citation in every answer. No FTP download, no DBC decoding, no SQL:
npx -y sih-br-mcp.
Em linguagem comum, no cliente MCP: quem escolhe a ferramenta e os parâmetros é o assistente.
get_hospitalizations)get_icsap_indicators)get_hospitalization_rates, compare_regions)rank_csap_groups)get_hospitalization_trends)classify_as_csap)Quem trabalha com SIH/SUS em R ou Python já tem ferramentas consolidadas, e este
servidor não substitui nenhuma delas — ele ocupa um lugar diferente da cadeia:
responde a pergunta agregada no ponto onde ela é feita, dentro do assistente, sem
ETL e sem download de microdado. Detalhe, exemplos lado a lado e os números medidos
em docs/comparativo-alternativas.md.
Não use este servidor quando a pergunta exigir o registro individual da AIH,
variáveis que os cubos não carregam (procedimento realizado, CNES do estabelecimento,
caráter de atendimento, diagnóstico secundário) ou outro sistema do DATASUS (SIM,
SINASC, SIA, SINAN) — nesses casos o caminho é microdatasus, PySUS ou o espelho
Parquet do healthbr-data. O que os
cubos carregam por estrato está em
docs/tool-specifications.md: internações, dias de
permanência, valor pago (R$) e óbitos, por ano, mês, UF, município, capítulo e grupo
CID, sexo, idade, raça/cor e grupo ICSAP.
Este servidor é consumidor do canal público sih/cubos/ do projeto
healthbr-data:
Até 08/09/2026 o builder dos cubos vivia aqui (scripts/build-aggregations.R,
rebuild-cubes.yml); desde então o produtor é o healthbr-data e este repositório
não gera nem publica cubo nenhum (CONTEXT.md, decisão 27). A receita completa está
em healthbr-data/scripts/pipeline/sih-cubos/README.md e no card
sih-cubos.
~/.cache/sih-br-mcp/cubos/ (SIH_CACHE_DIR), com o sidecar
sih_provenance_<ano>.json ao lado. SIH_CUBES_BASE_URL aponta outro canal;
SIH_CUBES_CACHE=off desliga (smoke e golden usam).src/upstream.ts (fetch comum do portfólio,
@sbissoli/mcp-upstream, desde a 1.1.0): User-Agent, 15 s por tentativa até os
cabeçalhos, 2 retries em 429/5xx/rede com backoff, corpo em stream sob o prazo do
arquivo; a política foi medida contra o canal (55 MB em 1,2 s) e está documentada
no cabeçalho do módulo. O bloco de proveniência de cada resposta segue o contrato
v1.3 (desde a 1.7.1): traz retrieval (quantas idas, tentativas e anomalias a
chamada custou ao canal — null quando a resposta veio do disco), revision
(provisional quando algum ano consultado ainda tem competências abertas,
current nos demais), derived + derivation_note nos blocos dos cubos e
notices quando há aviso (cubo atrás do espelho, frescor não verificado).src/freshness.ts compara o sidecar com sih/rd/manifest-summary.json
e avisa quando um cubo está atrás do espelho; quem reconstrói é o produtor
(rebuild-sih-cubes.yml, toda terça e após cada manutenção do espelho).icsap_summary, desde a 0.14.0, e causas_summary,
desde a 0.15.0): atalhos DERIVADOS dos cubos publicados, no mesmo canal. O da
ICSAP é um resumo de 276 KB mais os estratos por ano; o de causas é o grão A
(sih_causas_resumo.parquet, 569 KB com os 34 anos: year × uf × cid_chapter × cid_revision × is_csap × exclusion com internações, dias, valor e óbitos) mais o
grão B por ano, que acrescenta sexo, faixa etária quinquenal e raça. Uma
chamada que cabe no grão responde sem baixar cubo nenhum — "internações e gasto
por ano desde 1992" custa 569 KB em vez de 1,25 GB. O roteamento é conservador:
o que não cabe (mês, categoria CID de 3 dígitos, grupo CSAP, idade fora das
faixas quinquenais) cai no cubo e sai exato. Cada ano só usa o pré-agregado se o
derived_from do manifesto ainda bater com o SHA-256 do cubo publicado; rebuild
sem nova derivação devolve aquele ano ao caminho lento, nunca ao número errado.src/data/): cópias do contrato publicado em
sih/cubos/tables/; npm run tables:check confere o SHA-256 contra o manifesto
(roda no CI). Nunca edite aqui — a fonte é o produtor.pop_uf.parquet, pop_uf_agregado.parquet, pop_municipios.parquet):
desde a 0.12.0 vem do mesmo canal, assinada no bloco population do manifest.json
(produtor: build-population.R + build-sih-population.yml do healthbr-data — IBGE,
Projeção 2024 por UF; DATASUS POPBR/POPSVS por município). As ferramentas de taxa
(get_hospitalization_rates, compare_icsap_trends com rate_per_10k) e
get_available_years baixam os três arquivos para o cache na primeira chamada,
com SHA-256 conferido; uma pasta de dados que já tenha pop_uf.parquet tem
precedência (fixture, build local). A proveniência da população responde com o
built_at do manifesto.Pacote no npm: sih-br-mcp (Node 22+).
Ele não embarca dado nenhum — cubos, tabelas e população vêm do canal na primeira
chamada e ficam no cache local.
Configuração num cliente MCP (Claude Desktop, Claude Code):
A partir do código-fonte:
Variáveis: SIH_DATA_DIR (pasta com cubos já prontos, em vez do cache),
SIH_CACHE_DIR, SIH_CUBES_BASE_URL, SIH_CUBES_CACHE=off,
SIH_FRESHNESS_CHECK=off.
As mesmas 12 ferramentas por HTTP, para conectores remotos (claude.ai):
PORT e SIH_HTTP_HOST além das variáveis acima. Sem sessão: cada request
cria servidor e transporte novos, então qualquer instância atende qualquer
chamada. Em produção roda num Cloudflare Container (Dockerfile, população
pré-baixada na imagem) atrás do Worker de borda em worker/, que cuida de
domínio, rate limit, autenticação opcional e medição — desenho e custos em
docs/plan-004-servidor-remoto.md.
O CI (.github/workflows/ci.yml) roda tudo isso em Node 22 e 24. A fixture
tests/fixtures/sih/ é uma cópia real dos cubos de 2023/RR gerados pelo builder
(hoje no healthbr-data) — é o que torna medível qualquer bump.
A divisão de trabalho entre as duas famílias: os scripts em scripts/*.mjs
pinam VALORES (mudou um número, o baseline acusa); a suíte de tests/*.test.ts
afirma INVARIANTES (qual cubo responde a pergunta; toda resposta sai com
proveniência, com o texto igual à estrutura e obedecendo ao outputSchema que
o tools/list publica — validado com o mesmo validador do SDK), e por isso
republicar um cubo não a move. Cada ferramenta tem ali um caso CHEIO e um caso
MAGRO — a resposta com os campos opcionais ausentes, que o golden, sempre com
fixture cheia, não alcança — e o caminho de erro-mole ("ano sem dado") também
é validado. Os esquemas de saída estão em src/output-schemas.ts, escritos à
mão a partir das formas medidas, como os de entrada.
Cada release publica, na sua entrada do MCP Registry,
o sha256 da superfície que esta versão serve (initialize, ferramentas, resources, prompts) e
quais métodos respondem sem credencial. Mudar a superfície sem subir a versão reprova o build
(surface.lock.json); a impressão digital no registro deixa o cliente conferir o mesmo do lado
dele. Forma canônica e procedimento: SPEC.md do @sbissoli/mcp-surface
(em inglês). Para conferir por conta própria (Node 18+, sem dependência):
Quem mantém: npm run surface:lock grava o bloco no server.json (mcp-surface registro),
o teste da trava reprova server.json defasado, e o publish.yml termina com
mcp-surface conferir-registro — a entrada desta versão no registro contra o endpoint no ar,
como um cliente, sem ler a trava. Ideia de dois leitores do artigo do replay no dev.to
(Mike Dabydeen e Valentina Koniukhova).
CONTEXT.md — decisões arquiteturais numeradas (a 27 é a migração do produtor; a 29, o servidor remoto).docs/analise-001 (janela de competências), analise-002 (era CID-9, 1992–1997),
analise-003 (lista ICSAP em CID-9 derivada), plan-002 (DuckDB Node Neo),
plan-003 (rebuild automático, hoje no healthbr-data), plan-004 (servidor remoto
HTTPS para o claude.ai), plan-005 (série pré-agregada da ICSAP), plan-006
(cubo de causas pré-agregado), tool-specifications.md.MIT (LICENSE). Os dados são do Ministério da Saúde / DATASUS; a redistribuição em
Parquet e os cubos derivados são do healthbr-data (CC-BY-4.0).
Source: README.md at commit 6f54396
Grupos CSAP (Portaria 221/2008)
Lista os 19 grupos de Condições Sensíveis à Atenção Primária (CSAP) conforme Portaria MS/SAS 221/2008. Retorna código, nome e códigos CID-10 de cada grupo.
group_codeinclude_cid_codesCapítulos da CID-10
Lista os 22 capítulos da CID-10 com seus códigos e faixas de diagnóstico. Os cubos de 1992–1997 (diagnóstico em CID-9) trazem `cid_chapter` como o capítulo CID-10 equivalente (mapa por categoria em src/data/cid9-chapters.json).
Takes no parameters.
Anos disponíveis e frescor dos cubos
Retorna os anos disponíveis nos dados do SIH-SUS carregados e o frescor dos cubos em relação ao espelho healthbr-data (`freshness.status`: current, stale, unknown, pending ou disabled; quando stale, lista por ano as partições reeditadas pelo MS, regeneradas, retiradas ou novas na janela). Por ano, o que muda entre as eras do SIH: `race_available` (raça/cor só de 2008), `cid_revision` (9 = CID-9 de 6 dígitos em 1992–1997, 10 = CID-10; 1997 tem as duas), `icsap_list_revision` (cid9-derivada, não oficial, em 1992–1997), `uf_basis` (arquivo em 1992–1997, residencia de 1998), `municipality_available`, `currency` e `records_date_imputed`.
Takes no parameters.
Internações do SUS com filtros
Consulta dados de internações hospitalares do SUS com filtros flexíveis. Permite agregar por múltiplas dimensões (UF, CID, sexo, idade, raça, ano/mês). Raça/cor só existe de 2008 em diante: em 1998–2007 `race` é nulo (ver get_available_years.race_available). Série desde 1992: em 1992–1997 o diagnóstico é CID-9 decodificado por tabela (`cid_group` = categoria de 3 dígitos, `cid_chapter` = capítulo CID-10 equivalente; agrupar por `cid_revision` separa 9 e 10 — 1997 tem os dois), `uf` é a UF do ARQUIVO (estabelecimento), não de residência, e `value` é nominal na moeda da época — ver get_available_years (uf_basis, currency) e as `notes` da resposta. `exclusion` (agrupável) marca as internações fora do universo do % ICSAP do csapAIH (procedimento_obstetrico, parto, longa_permanencia; nula = dentro).
ufsexraceyearlimitmonthage_maxage_minis_csapgroup_bycid_chapterSéries temporais de internações
Retorna séries temporais de internações (mensal ou anual). Útil para análise de tendências e sazonalidade. O ano e o mês são os da INTERNAÇÃO (DT_INTER), não a competência de faturamento; o ano mais recente cresce até a janela dele fechar (AIH faturada com atraso), e o DATASUS reedita arquivos de competências passadas — cada número é a versão do download do espelho. Série desde 1992; em 1992–1997 `uf` é a UF do arquivo (estabelecimento) e as internações sem data na fonte (1992-01..04 e 1993-01) entram no mês de faturamento — ver get_available_years e as `notes`.
ufyear_endrequiredyear_startrequiredcid_chaptergranularityComparação entre UFs e regiões
Compara internações entre UFs ou regiões do Brasil. Gera rankings e identifica variações regionais. Em 1992–1997 `uf` é a UF do arquivo (estabelecimento), não de residência — ver get_available_years.uf_basis e as `notes`.
yearlimitmetricis_csapcompare_bycid_chapterInternações por condições sensíveis (ICSAP)
Consulta internações por Condições Sensíveis à Atenção Primária (ICSAP). Permite filtros por grupo CSAP, UF, município, sexo, idade e raça. Raça/cor só existe de 2008 em diante: em 1998–2007 `race` é nulo (ver get_available_years.race_available). Série desde 1992: em 1992–1997 a ICSAP vem de lista CID-9 DERIVADA e não oficial (g03 e g05 não comparáveis com 1998+), `uf` é a UF do arquivo e `municipality_code` é nulo — ver get_available_years (icsap_list_revision, uf_basis) e as `notes`. Percentual no universo do pacote R csapAIH por padrão (`universe`): fora do numerador e do denominador as internações por procedimento obstétrico, parto e longa permanência.
ufsexraceyearage_maxage_mingroup_byuniversecsap_groupmunicipality_codeIndicadores de ICSAP
Calcula indicadores de ICSAP: percentual (ICSAP/Total×100). Métricas-chave para avaliar a Atenção Primária. Agrupar por raça só faz sentido de 2008 em diante: em 1998–2007 `race` é nulo (ver get_available_years.race_available). Em 1992–1997 a ICSAP vem de lista CID-9 DERIVADA e não oficial (g03 e g05 não comparáveis com 1998+) e `uf` é a UF do arquivo — ver as `notes`. Percentual no universo do pacote R csapAIH por padrão (`universe`): fora do numerador e do denominador as internações por procedimento obstétrico, parto e longa permanência.
ufsexyearage_maxage_mingroup_byuniversemunicipality_codeRanking dos grupos CSAP
Gera ranking dos 19 grupos CSAP por número de internações, dias de internação ou valor. Identifica principais causas evitáveis. Em 1992–1997 a ICSAP vem de lista CID-9 DERIVADA e não oficial (g03 e g05 não comparáveis com 1998+) e `value` é nominal na moeda da época — ver as `notes`. Universo do pacote R csapAIH por padrão (`universe`): fora as internações por procedimento obstétrico, parto e longa permanência.
ufsexyearlimitmetricage_maxage_minuniverseClassificar CID-10 como CSAP
Classifica um ou mais códigos CID-10 como CSAP ou não. Retorna o grupo CSAP correspondente se aplicável. Aceita as duas notações do mesmo código — `J18.1` (OMS) e `J181` (SIH) — com a mesma resposta. Código que NÃO é CID-10 não é classificado: volta com `is_csap: null` e `error` próprio, nunca `false` (que afirmaria que a condição existe e não é sensível). Só CID-10: os códigos CID-9 de 6 dígitos do SIH de 1992–1997 são classificados no build pela lista derivada (src/data/csap-groups-cid9.json), não por esta ferramenta.
cid_codesrequiredTaxas de internação por população
Calcula taxas de internação por população. A taxa sai em `rate`, na base declarada em `rate_per` (1000, 10000 ou 100000; default 100000). Denominador lido de dois arquivos, informados em get_available_years.population_years: projeções do IBGE por idade simples de 2000 em diante (pop_uf.parquet) e, de 1991 a 1999, população por faixa etária quinquenal somada dos municípios (pop_uf_agregado.parquet) — antes de 2000 o recorte por idade só vale nos limites das faixas (age_min múltiplo de 5, age_max terminado em 4 ou 9, ou 80+). A resposta diz qual arquivo serviu a cada ano (population_source) e avisa quando mistura os dois.
ufsexyearage_maxage_minis_csapgroup_byrate_perrate_typecid_chapterTendências comparativas de ICSAP
Análise temporal comparativa de ICSAP entre UFs ou grupos CSAP. Calcula tendências, variação anual e identifica melhores/piores desempenhos. Para `percentage` e `count` valem todos os anos do SIH (desde 1992); `rate_per_10k` exige população e aceita só os anos de get_available_years.population_years. Em 1992–1997 a ICSAP vem de lista CID-9 DERIVADA e não oficial (g03 e g05 não comparáveis com 1998+) e `uf` é a UF do arquivo — ver as `notes`. Percentual no universo do pacote R csapAIH por padrão (`universe`): fora do numerador e do denominador as internações por procedimento obstétrico, parto e longa permanência.
end_yearrequireduniverseindicatorcompare_bystart_yearrequiredcompare_valuesinclude_trend_line100% 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.
loans.hospitalOfficial publisher
Tower and Wing: FHA-insured hospital loans (HUD Section 242)'s hosted MCP server, published by hospital.loans; no sign-in required; Streamable HTTP; 4 tools.

Published by GitHub account pipeworx-io
hospital-prices -- what US hospitals charge for a service: gross charge, self-pay price and…

Published by GitHub account jmshinhwa
Local MCP server that lints a hospital's standard charges JSON against 15 offline rules modeled on 45 CFR Part 180 and the CMS template.
Ministério da Saúde / DATASUS (RD<UF><AAMM>.dbc, FTP) → healthbr-data sih/rd/ (Parquet 1:1, manifesto com MD5 e data de download) → healthbr-data pipeline sih-cubos (scripts/pipeline/sih-cubos/build-aggregations.R) → https://data.sidneybissoli.com/sih/cubos/ (cubos + sidecar por ano + manifest.json + tables/) → este servidor (cache local sob demanda, SHA-256 conferido contra o manifesto)npx -y sih-br-mcp # stdio{ "mcpServers": { "sih": { "command": "npx", "args": ["-y", "sih-br-mcp"] } } }npm installnpm run buildnode dist/index.js # stdionpm run start:http # http://localhost:8080/mcp (GET /healthz para sondar)npm ci && npm run buildnpm test # vitest: decisão de rota (puro) + envelope e outputSchema das 12 (caso cheio e caso magro)npm run smoke:stdio # superfície das ferramentas × baselines/surface-stdio.jsonnpm run smoke:http # mesma superfície e chamadas pelo transporte HTTP (dist/http.js)npm run golden:tools # 12 ferramentas byte a byte × baselines/golden-tools.json (fixture 2023/RR)npm run freshness:selftest # frescor offline sobre um trecho versionado do manifestonpm run cache:selftest # cache local (download + SHA-256) contra um canal falsonpm run tables:check # tabelas de src/data × manifesto do canalnpm run equiv:summary # pré-agregados da ICSAP × caminho clássico, byte a bytenpm run equiv:series # roteamento para o cubo leve de sériesnpm run equiv:causas # pré-agregados de causas (grão A e B) × cubo, byte a bytecurl -sO https://raw.githubusercontent.com/SidneyBissoli/mcp-br-commons/main/packages/mcp-surface/exemplos/verify.mjsnode verify.mjs io.github.SidneyBissoli/sih-br-mcp