sih-br-mcp
sih-br-mcp
Servidor MCP (Model Context Protocol) para análise das internações hospitalares do SUS (SIH/SUS, AIH reduzida) com foco em ICSAP — internações por condições sensíveis à atenção primária. Doze ferramentas sobre cubos anuais de 1992 a 2025 (causas por capítulo/grupo CID, séries mensais, ICSAP por município, taxas por 100 mil), com a proveniência da safra em cada resposta.
De onde vêm os dados
Este servidor é consumidor do canal público sih/cubos/ do projeto
healthbr-data:
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)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.
Cubos: baixados por ano, só os que a chamada pede, para
~/.cache/sih-br-mcp/cubos/(SIH_CACHE_DIR), com o sidecarsih_provenance_<ano>.jsonao lado.SIH_CUBES_BASE_URLaponta outro canal;SIH_CUBES_CACHE=offdesliga (smoke e golden usam).Frescor:
src/freshness.tscompara o sidecar comsih/rd/manifest-summary.jsone 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).Tabelas de classificação (
src/data/): cópias do contrato publicado emsih/cubos/tables/;npm run tables:checkconfere o SHA-256 contra o manifesto (roda no CI). Nunca edite aqui — a fonte é o produtor.População (
pop_uf.parquet,pop_uf_agregado.parquet,pop_municipios.parquet): desde a 0.12.0 vem do mesmo canal, assinada no blocopopulationdomanifest.json(produtor:build-population.R+build-sih-population.ymldo healthbr-data — IBGE, Projeção 2024 por UF; DATASUS POPBR/POPSVS por município). As ferramentas de taxa (get_hospitalization_rates,compare_icsap_trendscomrate_per_10k) eget_available_yearsbaixam os três arquivos para o cache na primeira chamada, com SHA-256 conferido; uma pasta de dados que já tenhapop_uf.parquettem precedência (fixture, build local). A proveniência da população responde com obuilt_atdo manifesto.
Uso
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.
npx -y sih-br-mcp # stdioConfiguração num cliente MCP (Claude Desktop, Claude Code):
{ "mcpServers": { "sih": { "command": "npx", "args": ["-y", "sih-br-mcp"] } } }A partir do código-fonte:
npm install
npm run build
node dist/index.js # stdioVariá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.
Servidor remoto (Streamable HTTP)
As mesmas 12 ferramentas por HTTP, para conectores remotos (claude.ai):
npm run start:http # http://localhost:8080/mcp (GET /healthz para sondar)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.
Verificação
npm ci && npm run build
npm run smoke:stdio # superfície das ferramentas × baselines/surface-stdio.json
npm 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 manifesto
npm run cache:selftest # cache local (download + SHA-256) contra um canal falso
npm run tables:check # tabelas de src/data × manifesto do canalO 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.
Documentação
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),tool-specifications.md.
Licença
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).