Medical Terminologies MCP

Acesso unificado a terminologias médicas globais: ICD-11, SNOMED CT, LOINC, RxNorm, MeSH. 27 ferramentas para codificação médica, consulta de terminologia e mapeamentos de correspondência.

Documentação

Servidor MCP Medical Terminologies

npm version npm downloads node MCP Registry LobeHub smithery badge Glama MCP server Available on CodeGuilds GitHub stars GitHub Sponsors tool calls MCP License: MIT

Um servidor Model Context Protocol (MCP) que fornece acesso unificado às principais terminologias médicas globais:

  • CID-11 - Classificação Internacional de Doenças (OMS)
  • SNOMED CT - Nomenclatura Sistematizada de Medicina (opt-in; requer Snowstorm auto-hospedado)
  • LOINC - Identificadores Lógicos de Nomes e Códigos de Observações
  • RxNorm - Nomes normalizados para medicamentos clínicos (NIH)
  • MeSH - Cabeçalhos de Assuntos Médicos (NLM)
  • ATC - Classificação Química Terapêutica Anatômica (Centro Colaborador da OMS, servido via NLM RxClass)
  • CID-10 - Tradução brasileira em português da CID-10 (DataSUS V2008, incluída)

🇧🇷 Leia em Português

Veja em ação

Pergunte ao seu assistente:

  • "Qual é o código CID-11 para diabetes tipo 2?" → icd11_search
  • "Mapeie o código CID-10 E11 para CID-11." → map_icd10_to_icd11
  • "O que o LOINC 2339-0 mede?" → loinc_details
  • "Qual o código CID-10 para infarto agudo do miocárdio?" → cid10_search

As respostas vêm de fontes autorizadas (OMS, NLM, NIH, DataSUS) — códigos e mapeamentos reais, não suposições de dados de treinamento.

Recursos

  • 33 ferramentas padrão (39 com SNOMED habilitado): 31 ferramentas de terminologia mais search/fetch para ChatGPT Deep Research
  • 3 Prompts MCP que orquestram chamadas de ferramentas em fluxos de trabalho nomeados (find-medical-code, drug-info, cid10-portuguese-lookup) — os clientes os renderizam como ações de usuário com um clique
  • 4 Recursos MCP para conteúdo de referência em processo (info://server, info://cid10/chapters, info://licenses, info://stats) — leituras em menos de um milissegundo (exceto info://stats, que faz ida e volta ao Durable Object StatsCounter no endpoint hospedado)
  • Suporte a múltiplas terminologias em um único servidor
  • Mapeamento e busca entre terminologias
  • Proveniência em cada resposta (desde v1.8.0): cada resultado de ferramenta bem-sucedido carrega um bloco de proveniência legível por máquina — fonte, URL canônica, versão dos dados, instante real de extração (acertos de cache mantêm o instante original de busca), citação pronta para uso e licença — em structuredContent.provenance + attribution, espelhado em _meta sob com.sidneybissoli.medical/*, com um rodapé de texto compacto para clientes somente texto. Respostas de múltiplas fontes (find_equivalent, validate_codes) carregam um bloco por fonte; campos de classificação calculados pelo servidor são sinalizados como derivados
  • Cache integrado para melhor desempenho
  • Limitação de taxa para respeitar os limites das APIs
  • Respostas detalhadas com formatação rica
  • Dois transportes: stdio (padrão; para Claude Desktop, clientes IDE) e Streamable HTTP (o Cloudflare Worker hospedado em https://medical.sidneybissoli.com/mcp, ou sua própria instância de worker/)

📖 Artigo (em português): CID-10, CID-11 e o que muda para quem trabalha com dados do SUS — a estrutura V2008 em números, o que as tabelas de transição da OMS são e não são, e as licenças que diferem entre fontes. Também publicado no site, em português e inglês: sidneybissoli.com.

Para quem é este servidor?

Este servidor não é uma ferramenta de decisão para cuidados clínicos — médicos em prática clínica têm assistentes especializados (UpToDate AI, OpenEvidence, ferramentas integradas a EHR) para isso. O público real são pesquisadores, analistas de saúde pública, desenvolvedores de informática clínica e educadores que precisam de acesso programático a dados terminológicos autorizados.

Se você é...Comece comPor quê
Pesquisador biomédico / bibliógrafomesh_search, mesh_descriptor, mesh_treeMeSH é o vocabulário de indexação do PubMed; números de árvore permitem percorrer a hierarquia controlada programaticamente
Analista de saúde pública (Brasil / SUS)cid10_search, cid10_chapters, atc_classifyCID-10 V2008 é o padrão operacional brasileiro; ATC combina perfeitamente com dados de prescrição do DataSUS
Analista de saúde pública (internacional)icd11_search, icd11_lookup, icd11_chaptersCID-11 da OMS é a revisão internacional atual; capítulos e hierarquia suportam classificação em pipelines
Desenvolvedor de informática clínicaloinc_search, loinc_details, find_equivalentLOINC para interoperabilidade de laboratório/observação; busca entre terminologias para criar novos mapeamentos
Educador / autor de currículosmesh_descriptor, icd11_lookup, rxnorm_searchDefinições autorizadas, números de árvore e tipos de termos de medicamentos que você pode usar em exercícios autocorrigidos

Experimente a instância hospedada (sem instalação)

Uma implantação pública do Cloudflare Workers está disponível em:

https://medical.sidneybissoli.com/mcp

Conecte-se via MCP Inspector ou qualquer cliente MCP Streamable HTTP:

npx @modelcontextprotocol/inspector --transport streamable-http \
  --server-url https://medical.sidneybissoli.com/mcp

Ou instale via Smithery, que faz proxy do mesmo endpoint através do gateway deles:

npx -y smithery mcp add sidneybissoli/medical-terminologies-mcp

A instância hospedada tem credenciais da OMS configuradas, então todas as 33 ferramentas padrão funcionam sem qualquer configuração da sua parte. Para sua própria implantação (ex.: rede corporativa, região diferente, credenciais personalizadas da OMS), veja as seções Instalação e Hospedado no Cloudflare Workers abaixo.

Instalação

Instalação Global (Recomendada)

npm install -g medical-terminologies-mcp

Instalação Local

npm install medical-terminologies-mcp

Configuração

Claude Desktop

Adicione ao seu arquivo de configuração do Claude Desktop:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "medical-terminologies": {
      "command": "npx",
      "args": ["-y", "medical-terminologies-mcp"],
      "env": {
        "WHO_CLIENT_ID": "your-who-client-id",
        "WHO_CLIENT_SECRET": "your-who-client-secret"
      }
    }
  }
}

Variáveis de Ambiente

VariávelObrigatóriaDescrição
WHO_CLIENT_IDSim¹ID do Cliente da API ICD da OMS
WHO_CLIENT_SECRETSim¹Segredo do Cliente da API ICD da OMS
WHO_ICD11_RELEASE_IDNãoVersão da CID-11 a consultar (ex.: 2025-01, 2026-01). Padrão 2026-01.
ENABLE_SNOMED_TOOLSNão²Defina como true para registrar as 6 ferramentas dependentes de SNOMED. Padrão desativado.
SNOMED_BASE_URLNão²URL base para uma instância Snowstorm, ex.: https://my-snowstorm.example.com/snowstorm/snomed-ct.
SNOMED_LANGUAGENão²Tag(s) Accept-Language para respostas SNOMED, ex.: pt, pt-BR, es. Padrão en. Valores de tag única são repassados de forma confiável; valores compostos com pesos q (ex.: pt-BR,en;q=0.8) dependem do tratamento de Accept-Language da sua instância Snowstorm — a semântica de fallback pode variar. Teste contra sua implantação específica se depender de fallback ponderado.
LOG_LEVELNãoNível de log pino (debug, info, warn, error, fatal). Padrão info.

¹ Obrigatório para ferramentas CID-11. Obtenha credenciais em: https://icd.who.int/icdapi.

² Veja Configuração SNOMED CT (avançado) abaixo. LOINC, RxNorm e MeSH não precisam de configuração.

Transporte HTTP (hospedado)

O servidor roda sobre stdio por padrão — é o que Claude Desktop e clientes IDE esperam. O transporte Streamable HTTP é servido pelo Cloudflare Worker em worker/ (uma instância do template de hospedagem Fase 0 do mantenedor). O sinalizador --http da entrada Node foi removido na v1.6.0 — se você precisar de um endpoint HTTP local, execute o Worker localmente:

npm ci && cd worker && npm ci
npm run dev     # wrangler dev on http://localhost:8787
# Inspector via HTTP
npx @modelcontextprotocol/inspector --transport streamable-http --server-url http://localhost:8787/mcp

Endpoints hospedados (produção e local, igualmente):

  • POST /mcp — JSON-RPC sobre Streamable HTTP (o protocolo MCP). Modo sem estado: cada requisição é independente.
  • GET /health — sonda de atividade retornando { status, name, version, tool_count, uptime_s }.
  • GET /status — metadados de versão + implantação. GET /metrics — uso agregado por ferramenta.
  • GET /stats e GET /stats/badge — contador público de chamadas de ferramentas (desde 2026-05-13) e seu selo shields.io.
  • GET /.well-known/mcp/server-card.json — cartão de servidor estático para scanners de registro.
  • CORS é permissivo (*) para que clientes de navegador (ex.: a interface web do MCP Inspector) possam conectar diretamente.

ChatGPT (Deep Research)

O deep research do ChatGPT (e conhecimento da empresa, e fluxos de trabalho de pesquisa sobre a Responses API) só usa um servidor MCP que expõe exatamente search e fetch — este servidor expõe, além das ferramentas de terminologia. Aponte o conector para o endpoint hospedado, sem chave necessária:

https://medical.sidneybissoli.com/mcp

search classifica a consulta na CID-10 incluída (categorias, subcategorias, capítulos), nos registros de versão de terminologia e em um fan-out ao vivo para CID-11, LOINC, RxNorm e MeSH (o mesmo fan-out que find_equivalent faz; uma fonte que falha é ignorada) e retorna { id, title, url }; fetch renderiza o documento através da própria ferramenta de busca da terminologia (cid10_lookup, icd11_lookup, loinc_details, rxnorm_concept, mesh_descriptor, terminology_versions) como Markdown legível com a página pública canônica (navegadores CID da OMS, loinc.org, RxNav, MeSH Browser), que é o que o ChatGPT cita. Ambos carregam o mesmo bloco de proveniência que todas as outras ferramentas — search um bloco por fonte que respondeu, como find_equivalent. SNOMED não faz parte do corpus (seu navegador público foi aposentado, então não há página para citar). No modo desenvolvedor do ChatGPT (Configurações → Segurança e login → Modo desenvolvedor), qualquer ferramenta é chamável — as ferramentas de terminologia continuam sendo as indicadas para dados.

Hospedado no Cloudflare Workers (principal)

A implantação de produção é o Cloudflare Worker em worker/, configuração em worker/wrangler.jsonc, implantação CI em .github/workflows/deploy-worker.yml (executa automaticamente a cada push para main).

Para implantar sua própria instância:

npm ci && npm run build:worker-lib
cd worker && npm ci
npx wrangler login         # one-time, browser flow
npx wrangler deploy        # publishes to <name>.<account>.workers.dev
# Set ICD-11 secrets so those 5 tools work:
npx wrangler secret put WHO_CLIENT_ID
npx wrangler secret put WHO_CLIENT_SECRET

Nota: worker/wrangler.jsonc fixa o account_id do mantenedor e a rota de domínio personalizado — remova/substitua ambos para sua própria implantação.

Por que Workers: zero cold start na borda, US$ 5/mês fixos para 10 milhões de requisições (o nível gratuito cobre até 100 mil req/dia), e sem VMs para dimensionar ou reiniciar. O template inclui limitação de taxa por IP e um Durable Object de estatísticas de uso; o cache/limitador de taxa voltado para upstream são por isolado (PROGRESS.md Fase 11.9 Etapa 2 acompanha a atualização KV/DO).

Listagem no Smithery

Depois que seu Worker estiver no ar, registre a URL no Smithery:

  1. Visite https://smithery.ai → Publicar → MCP (ou https://smithery.ai/new).
  2. Escolha o caminho de submissão URL (o Smithery descontinuou a hospedagem em contêineres em 2024 — URL é o fluxo suportado agora).
  3. Cole https://<your-worker>.workers.dev/mcp. O gateway do Smithery verifica conformidade e faz proxy do tráfego.

Ferramentas Disponíveis (33 por padrão, 39 com SNOMED habilitado)

Conteúdo oficial em português (pt-BR)

O servidor nunca traduz automaticamente conteúdo de terminologia — mas várias fontes publicam traduções oficiais, e as ferramentas as expõem:

  • CID-10 é nativamente em português: cid10_search / cid10_lookup / cid10_chapter(s) servem o conjunto de dados DataSUS V2008 (a CID-10 que o SUS brasileiro usa operacionalmente).
  • CID-11 em português oficial: passe language: "pt" para icd11_search / icd11_lookup para buscar e ler os rótulos da linearização oficial pt-BR da OMS.
  • MeSH: passe language: "pt" para mesh_search / mesh_descriptor para solicitar as traduções oficiais do NLM onde existirem.
  • SNOMED CT (quando habilitado): language solicita as descrições carregadas na sua edição Snowstorm (ex.: refset pt-BR de uma extensão nacional).

Se uma fonte não tiver tradução oficial para uma entrada, você recebe o idioma da fonte de volta — nunca uma tradução automática.

Ferramentas CID-11 (5)

FerramentaDescriçãoExemplo
icd11_searchPesquisar CID-11 por termoquery: "diabetes mellitus"
icd11_lookupObter detalhes da entidade por código/URIcode: "5A11"
icd11_hierarchyNavegar relações pai/filhocode: "5A11"
icd11_chaptersListar todos os capítulos da CID-11-
icd11_postcoordinationObter eixos de pós-coordenaçãocode: "5A11"

Ferramentas LOINC (4)

FerramentaDescriçãoExemplo
loinc_searchPesquisar exames laboratoriais e observaçõesquery: "glucose"
loinc_detailsObter detalhes completos do código LOINCloinc_num: "2339-0"
loinc_answersObter lista de respostas para questionáriosloinc_num: "44249-1"
loinc_panelsObter estrutura de painel/formulárioloinc_num: "24331-1"

Ferramentas RxNorm (5)

FerramentaDescriçãoExemplo
rxnorm_searchPesquisar medicamentos por nomequery: "metformin"
rxnorm_conceptObter detalhes do conceito de medicamentorxcui: "6809"
rxnorm_ingredientsObter princípios ativosrxcui: "6809"
rxnorm_classesObter classes terapêuticasrxcui: "6809"
rxnorm_ndcMapear entre RxCUI e NDCrxcui: "6809"

Ferramentas MeSH (4)

FerramentaDescriçãoExemplo
mesh_searchPesquisar descritores MeSHquery: "hypertension"
mesh_descriptorObter detalhes do descritormesh_id: "D006973"
mesh_treeObter localização na hierarquiamesh_id: "D006973"
mesh_qualifiersObter qualificadores permitidosmesh_id: "D006973"

Ferramentas SNOMED CT (5, desativadas por padrão)

Estas são registradas apenas quando ENABLE_SNOMED_TOOLS=true. Consulte Configuração do SNOMED CT (avançado).

FerramentaDescriçãoExemplo
snomed_searchPesquisar conceitos por termoquery: "myocardial infarction"
snomed_conceptObter detalhes do conceito por SCTIDsctid: "22298006"
snomed_hierarchyObter conceitos pai/filhosctid: "22298006"
snomed_descriptionsObter todas as descriçõessctid: "22298006"
snomed_eclExecutar consultas ECLecl: "<< 73211009"

Ferramentas de Inter-relacionamento (5 — map_snomed_to_icd10 requer SNOMED)

FerramentaDescriçãoExemplo
map_icd10_to_icd11Mapeamento autoritativo CID-10 → CID-11 via tabelas de transição da OMS; retorna código primário + capítulo + URIs e quaisquer alternativas documentadas pela OMSicd10_code: "E11"
map_snomed_to_icd10Orientação SNOMED CT → CID-10 (somente quando ENABLE_SNOMED_TOOLS=true)sctid: "73211009"
map_loinc_to_snomedOrientação LOINC ↔ SNOMEDloinc_code: "2339-0"
validate_codesValidar em lote até 100 códigos em CID-11, LOINC, RxNorm, MeSH, ATC, CID-10 (e SNOMED quando habilitado); retorna válido/inválido por código + nome de exibiçãocodes: [{terminology:"icd11",code:"5A11"}, …]
find_equivalentBusca unificada classificada entre terminologias: match_score/rank calculados no servidor por candidato, além de groups entre terminologias de títulos lexicalmente idênticos; o ramo SNOMED é ignorado quando as ferramentas SNOMED estão desativadasterm: "diabetes"

Ferramentas ATC (3)

Classificação Química Terapêutica Anatômica da OMS, servida via NLM RxClass (gratuito, sem autenticação). A base WHOCC em si exige assinatura paga, mas o RxClass encapsula os mesmos pares código/nome.

FerramentaDescriçãoExemplo
atc_classifyNome do medicamento → código(s) ATCdrug_name: "metformin"
atc_lookupCódigo ATC (nível 1-4) → nome + tipo de nívelatc_code: "A10BA"
atc_membersClasse ATC → medicamentos membrosatc_code: "A10BA"

Ferramentas CID-10 (4)

Tradução brasileira em português da CID-10 (DataSUS V2008). Incluída como conjunto de dados estático — sem chamadas HTTP. O SUS brasileiro usa a CID-10 V2008 operacionalmente; para a CID-11 internacional (revisão atual da OMS), use as ferramentas CID-11 acima.

FerramentaDescriçãoExemplo
cid10_searchBusca de texto em português (insensível a diacríticos, E entre palavras; palavras cotidianas resolvidas para a redação da CID-10, e a resposta informa isso)query: "câncer de mama"
cid10_lookupCódigo → nome oficial em portuguêscode: "I21" ou "A00.1"
cid10_chaptersListar os 22 capítulos da CID-10-
cid10_chapterDetalhe do capítulo com grupos constituintesnum: 9

Pergunte com suas palavras, não as da CID-10. A CID-10 é redigida em português clínico, e cid10_search comparou suas palavras com o título do código como uma frase literal — então a palavra cotidiana não retornou nada. Medido nas 14.496 categorias e subcategorias do conjunto V2008 incluído (2026-09-16), corrigido desde 1.12.0: cada palavra deve corresponder (E), e a palavra cotidiana é expandida para a própria redação da CID-10 (src/clients/cid10-vocabulary.ts, apenas pares medidos) — a resposta informa isso em vocabulary_notes, e resultados zero vêm com uma saída.

você perguntaresultados antesa CID-10 escreveresultados
câncer, câncer de mama0neoplasia maligna (da mama)497, 12
ataque cardíaco0infarto42
AVC0acidente vascular cerebral11
pressão alta0hipertensão44
dor de cabeça0cefaleia10
suicídio0lesão autoprovocada167
atropelamento0pedestre traumatizado97
aids0doença pelo HIV45
pedra nos rins, convulsão, tabagismo, maconha, crack, obeso, cachorro0calculose, convulsões, fumo, canabinóides, cocaína, obesidade, provocado por cão19, 41, 17, 12, 13, 6, 11

O que o conjunto de dados V2008 não contém permanece fora e ainda retorna zero — covid (U07.1 é de 2020), zika — porque um alias para um código que não existe promete o que a fonte não possui. A mesma tabela alimenta o índice search do Deep Research.

Ferramentas de Versionamento (2)

Exibem qual versão de cada terminologia este servidor consulta hoje — útil ao executar validação em lote contra uma versão fixa ou ao investigar uma falha inesperada de busca após uma atualização upstream.

FerramentaDescriçãoExemplo
terminology_versionsListar todas as 8 terminologias suportadas com versão atual, data de lançamento, editor, URL de origem e cadência de atualização-
terminology_diffRelatar quais dados de diff estão disponíveis entre duas versões de uma terminologia (estatísticas reais entre revisões para CID-10 → CID-11; orientação caso contrário)terminology: "icd10-icd11"

ChatGPT Deep Research (2)

O contrato OpenAI Deep Research — as únicas duas ferramentas sem prefixo de terminologia (nomes fixados pela OpenAI). Consulte ChatGPT (Deep Research) acima.

FerramentaDescriçãoExemplo
searchPesquisa o catálogo (CID-10, CID-11, LOINC, RxNorm, MeSH, versões de terminologias) e retorna { id, title, url } classificados por relevânciaquery: "myocardial infarction"
fetchRetorna o documento completo de um id de search ({ id, title, text, url, metadata }), renderizado pela ferramenta de consulta da terminologiaid: "cid10:I21.0"

Exemplos de Saída

As amostras abaixo são a saída formatada real que as ferramentas produzem — o corpo de texto do CallToolResult. As ferramentas também retornam um objeto structuredContent correspondente ao outputSchema de cada ferramenta para consumidores programáticos.

loinc_search — consulta: "glucose", max_results: 3

## LOINC Search Results for "glucose"

Found 1024 total results (showing 3):

1. **74790-7** - Glucose challenge (hydrogen breath test) panel - Exhaled gas
   Component: Glucose challenge panel | Method: -

2. **104708-3** - Deprecated Estimated average glucose [Moles/volume] in Blood
   Component: Estimated average glucose | Property: SCnc

3. **97510-2** - Glucose measurements in range out of Total glucose measurements during reporting period
   Component: Glucose measurements in range/Total glucose measurements | Property: NFr | Method: Calculated

total_count (1024) reflete cada correspondência no índice Clinical Tables da NLM, não apenas a página retornada. Aumente max_results (máx. 50) para ver códigos canônicos como 2339-0 (Glucose [Massa/volume] no Sangue); a classificação de relevância da API coloca painéis e medições derivadas acima da glicose sanguínea simples em tamanhos de página pequenos.

rxnorm_ingredients — rxcui: "6809" (metformina)

# Ingredients for RxCUI 6809

Found 18 ingredient(s):

| RxCUI | Name | Type |
|-------|------|------|
| 6809 | metformin | Single Ingredient |
| 1007411 | chlorpropamide / metformin | Multiple Ingredient |
| 1043562 | metformin / saxagliptin | Multiple Ingredient |
| 1243019 | linagliptin / metformin | Multiple Ingredient |
| 1486436 | dapagliflozin / metformin | Multiple Ingredient |
| 1545149 | canagliflozin / metformin | Multiple Ingredient |
| 1664314 | empagliflozin / metformin | Multiple Ingredient |
| 729717  | metformin / sitagliptin | Multiple Ingredient |
| ...     | (10 more combinations)   | Multiple Ingredient |

Para um RxCUI que é em si um ingrediente (TTY=IN), a ferramenta retorna esse ingrediente mais cada conceito multi-ingrediente (TTY=MIN) que o inclui. Use isso para enumerar produtos combinados construídos em torno de uma substância.

mesh_descriptor — mesh_id: "D006973" (Hipertensão)

# Hypertension
MeSH ID: D006973

## Scope Note

Persistently high systemic arterial BLOOD PRESSURE. Based on multiple readings (BLOOD PRESSURE DETERMINATION), hypertension is currently defined as when SYSTOLIC PRESSURE is consistently greater than 140 mm Hg or when DIASTOLIC PRESSURE is consistently 90 mm Hg or more.

## Tree Numbers

- C14.907.489

## Concepts

- Hypertension *(preferred)*

## Allowed Qualifiers

35 qualifier(s) allowed. Use mesh_qualifiers for details.

A nota de escopo vem do conceito preferido do descritor, não do seu campo de anotação (que é uma nota voltada ao indexador). Os números de árvore são o caminho navegável na hierarquia controlada do MeSH — C14.907.489 coloca Hipertensão sob Doenças Cardiovasculares → Doenças Vasculares.

Fluxos de Trabalho Comuns

  • Consulta CID-11: icd11_search com um termo clínico → selecione o resultado → icd11_lookup com o código para detalhes completos, ou icd11_hierarchy para percorrer pais/filhos.
  • Pipeline de medicamentos: rxnorm_search para um nome de marca ou genérico → rxnorm_concept para o registro canônico → rxnorm_ingredients e rxnorm_classes para análise downstream.
  • Estruturação entre terminologias: find_equivalent com um termo clínico pesquisa CID-11, LOINC, RxNorm, MeSH e (quando habilitado) SNOMED em uma única chamada. Use para iniciar mapeamentos; as ferramentas map_* em pares os refinam.
  • CID-10 → CID-11 (busca de texto, não autoritativa): map_icd10_to_icd11 faz busca de texto honesta contra a CID-11 da OMS. Tabelas reais de transição da OMS são rastreadas em PROGRESS.md Fase 13.1.

Configuração do SNOMED CT (avançado)

As 5 ferramentas SNOMED (snomed_search, snomed_concept, snomed_hierarchy, snomed_descriptions, snomed_ecl) mais a ferramenta de inter-relacionamento dependente de SNOMED (map_snomed_to_icd10) estão desativadas por padrão. Com elas desativadas, o servidor registra 33 ferramentas em vez de 39; find_equivalent ainda funciona e ignora o ramo SNOMED com uma nota explicativa.

O motivo: a partir de 2026-05-08, o endpoint público Snowstorm da IHTSDO que este projeto historicamente chamava (https://browser.ihtsdotools.org/snowstorm/snomed-ct/...) retorna HTTP 410 Gone para todos os caminhos. Sem um backend funcional, registrar essas ferramentas expõe 6 ferramentas garantidamente quebradas a cada cliente.

Para habilitar as ferramentas SNOMED:

  1. Confirme sua licença SNOMED CT. O uso de SNOMED CT exige uma licença da SNOMED International (IHTSDO). Residentes de países membros normalmente têm uma por meio do centro nacional de lançamento; não membros podem obter uma licença de Afiliado. Consulte https://www.snomed.org/snomed-ct/get-snomed.

  2. Execute uma instância Snowstorm. A SNOMED International publica o Snowstorm como código aberto (IHTSDO/snowstorm) e como imagem Docker (snomedinternational/snowstorm). Auto-hospedagem exige importar um arquivo de lançamento RF2 (fornecido a detentores de licença).

  3. Configure este servidor:

    {
      "mcpServers": {
        "medical-terminologies": {
          "command": "npx",
          "args": ["-y", "medical-terminologies-mcp"],
          "env": {
            "WHO_CLIENT_ID": "...",
            "WHO_CLIENT_SECRET": "...",
            "ENABLE_SNOMED_TOOLS": "true",
            "SNOMED_BASE_URL": "https://my-snowstorm.example.com/snowstorm/snomed-ct",
            "SNOMED_LANGUAGE": "en"
          }
        }
      }
    }
    

    SNOMED_BASE_URL deve apontar para a base sob a qual o Snowstorm expõe seus /MAIN/concepts e endpoints relacionados. SNOMED_LANGUAGE aceita tags Accept-Language padrão (ex.: pt, es, pt-BR,en;q=0.8) — o Snowstorm retorna termos localizados quando o ramo os possui e recorre ao inglês caso contrário.

  4. Reinicie o cliente MCP para que o servidor capture as variáveis de ambiente.

Se você definir ENABLE_SNOMED_TOOLS=true sem configurar um Snowstorm funcional, as ferramentas SNOMED serão registradas, mas toda chamada falhará na camada de rede.

Licenças de Terminologias

A licença MIT cobre o código do servidor e os metadados mantidos pelo servidor apenas — não o conteúdo de terminologias servido por ele, e não os dois conjuntos de dados incluídos (cid10.json, icd10-to-icd11.json), que permanecem sob seus próprios termos. O aviso consolidado acompanha o pacote como NOTICE.md; toda resposta de ferramenta carrega um bloco de proveniência por fonte com a licença aplicável.

CID-11 (OMS)

O conteúdo da CID-11 é fornecido sob a licença Creative Commons Atribuição-SemDerivações 3.0 IGO (CC BY-ND 3.0 IGO), conforme os Termos de Uso e Contrato de Licença da CID-11.

  • Citação obrigatória: "Classificação Internacional de Doenças, Décima Primeira Revisão (CID-11), Organização Mundial da Saúde (OMS) 2019 https://icd.who.int/browse11. Licenciada sob a licença Creative Commons Atribuição-SemDerivações 3.0 IGO (CC BY-ND 3.0 IGO)."
  • Este servidor sempre fornece códigos e títulos da CID-11 juntamente com seus URIs, verbatim; rótulos não-ingleses são traduções oficiais da própria OMS (nunca traduzidos por máquina)
  • A OMS pode encerrar a licença a qualquer momento mediante aviso (§4.7)
  • O acesso à API requer registro em https://icd.who.int/icdapi

Tabelas de transição CID-10 → CID-11 da OMS (incluídas)

Conversão de formato (TSV → JSON, conteúdo inalterado) das tabelas que a OMS publica na versão CID-11. © Organização Mundial da Saúde, sob os Termos de Uso da CID-11 — não sob a licença MIT deste projeto. Orientação da OMS: as tabelas mostram correspondência entre revisões e "não se destinam a converter diretamente dados de uma revisão para outra."

CID-10 V2008 (DataSUS / CBCD, incluído)

© Organização Mundial da Saúde; tradução para o português brasileiro © CBCD / Faculdade de Saúde Pública da USP; arquivos eletrônicos publicados pelo DataSUS (Ministério da Saúde do Brasil). Permissão DataSUS/CBCD: desenvolvedores podem usar os arquivos com os devidos créditos e sem custo — este servidor os fornece gratuitamente com crédito em cada resposta. Não está sob a licença MIT deste projeto.

SNOMED CT

O uso de SNOMED CT requer uma licença da IHTSDO (SNOMED International). As ferramentas SNOMED neste servidor estão desabilitadas por padrão e só são ativadas por operadores com licença válida e uma instância Snowstorm auto-hospedada — consulte Configuração SNOMED CT (avançado).

  • Países membros têm licenças nacionais
  • Licenças de afiliados disponíveis para outros (o Brasil não é país membro)
  • Mais informações: https://www.snomed.org/get-snomed

LOINC

Este material contém conteúdo de LOINC (http://loinc.org). LOINC é protegido por direitos autorais © Regenstrief Institute, Inc. e o Comitê de Nomes e Códigos de Identificadores de Observações Lógicas (LOINC) e está disponível sem custo sob a licença em http://loinc.org/license. LOINC® é uma marca registrada nos Estados Unidos do Regenstrief Institute, Inc.

  • Fornecido via API gratuita de Tabelas Clínicas da NLM; cada código vem com seu nome de exibição oficial
  • Termos com direitos autorais de terceiros são fornecidos com seu aviso transmitido verbatim

RxNorm

RxNorm é produzido pela Biblioteca Nacional de Medicina dos EUA; as APIs RxNav fornecem conteúdo RxNorm não proprietário, de domínio público, gratuitamente.

Este produto usa dados publicamente disponíveis da Biblioteca Nacional de Medicina dos EUA (NLM), Institutos Nacionais de Saúde, Departamento de Saúde e Serviços Humanos; a NLM não é responsável pelo produto e não endossa nem recomenda este ou qualquer outro produto.

ATC (via NLM RxClass)

Classificação ATC © Centro Colaborador da OMS para Metodologia de Estatísticas de Medicamentos (https://atcddd.fhi.no/), recuperada via NLM RxClass e fornecida verbatim. Este servidor nunca redistribui o índice ATC/DDD da WHOCC.

MeSH

MeSH é um trabalho do governo dos EUA fornecido sob os Termos e Condições da NLM. Cortesia da Biblioteca Nacional de Medicina dos EUA.

Limites de Taxa da API

Este servidor implementa limitação de taxa para respeitar os provedores de API:

APILimite de Taxa
OMS CID-115 solicitações/segundo
NLM (LOINC, MeSH)10 solicitações/segundo
RxNorm20 solicitações/segundo
SNOMED CT (Snowstorm)10 solicitações/segundo

Desenvolvimento

Compilando a partir do código-fonte

git clone https://github.com/SidneyBissoli/medical-terminologies-mcp.git
cd medical-terminologies-mcp
npm install
npm run build

Executando localmente

npm start

Testando com o MCP Inspector

npx @modelcontextprotocol/inspector node dist/index.js

Contribuindo

Contribuições são bem-vindas! Sinta-se à vontade para enviar um Pull Request.

  1. Faça um fork do repositório
  2. Crie sua branch de recurso (git checkout -b feature/AmazingFeature)
  3. Faça commit das suas alterações (git commit -m 'Add some AmazingFeature')
  4. Envie para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

Autor

Sidney Bissoli

Licença

Este projeto é licenciado sob a Licença MIT — consulte o arquivo LICENSE para detalhes.

Nota: Embora este software seja licenciado sob MIT, as terminologias médicas acessadas por ele têm suas próprias licenças (consulte Licenças de Terminologias acima).

Agradecimentos

Suporte

Se você encontrar problemas ou tiver dúvidas:

  • Abra uma issue no GitHub
  • Verifique issues existentes para soluções

Feito com amor para a comunidade de informática médica