Medical Terminologies MCP

Acceso unificado a terminologías médicas globales: ICD-11, SNOMED CT, LOINC, RxNorm, MeSH. 27 herramientas para codificación médica, búsqueda de terminología y mapeos de correspondencia.

Documentación

Servidor MCP de Terminologias Médicas

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:

  • ICD-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ção
  • 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 ICD-10 (DataSUS V2008, incluída)

🇧🇷 Leia em Português

Veja em ação

Pergunte ao seu assistente:

  • "Qual é o código ICD-11 para diabetes tipo 2?" → icd11_search
  • "Mapeie o código ICD-10 E11 para ICD-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, data 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 limites de API
  • 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 bem com dados de prescrição do DataSUS
Analista de saúde pública (internacional)icd11_search, icd11_lookup, icd11_chaptersA ICD-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 estruturar 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 ICD-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 ICD-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). A flag --http da entrada Node foi removida 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 — versão + metadados de 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 ICD-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 ICD 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 10M de requisições (o nível gratuito cobre até 100k 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 ao 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 de 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 (o CID-10 que o SUS brasileiro usa operacionalmente).
  • ICD-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 ICD-11 (5)

HerramientaDescripciónEjemplo
icd11_searchBuscar en ICD-11 por términoquery: "diabetes mellitus"
icd11_lookupObtener detalles de la entidad por código/URIcode: "5A11"
icd11_hierarchyNavegar relaciones padre/hijocode: "5A11"
icd11_chaptersListar todos los capítulos de ICD-11-
icd11_postcoordinationObtener ejes de postcoordinacióncode: "5A11"

Herramientas LOINC (4)

HerramientaDescripciónEjemplo
loinc_searchBuscar pruebas de laboratorio y observacionesquery: "glucose"
loinc_detailsObtener detalles completos del código LOINCloinc_num: "2339-0"
loinc_answersObtener lista de respuestas para encuestasloinc_num: "44249-1"
loinc_panelsObtener estructura de panel/formularioloinc_num: "24331-1"

Herramientas RxNorm (5)

HerramientaDescripciónEjemplo
rxnorm_searchBuscar medicamentos por nombrequery: "metformin"
rxnorm_conceptObtener detalles del concepto de medicamentorxcui: "6809"
rxnorm_ingredientsObtener ingredientes activosrxcui: "6809"
rxnorm_classesObtener clases terapéuticasrxcui: "6809"
rxnorm_ndcMapear entre RxCUI y NDCrxcui: "6809"

Herramientas MeSH (4)

HerramientaDescripciónEjemplo
mesh_searchBuscar descriptores MeSHquery: "hypertension"
mesh_descriptorObtener detalles del descriptormesh_id: "D006973"
mesh_treeObtener ubicación en la jerarquía de árbolmesh_id: "D006973"
mesh_qualifiersObtener calificadores permitidosmesh_id: "D006973"

Herramientas SNOMED CT (5, deshabilitadas por defecto)

Estas solo se registran cuando ENABLE_SNOMED_TOOLS=true. Ver Configuración de SNOMED CT (avanzado).

HerramientaDescripciónEjemplo
snomed_searchBuscar conceptos por términoquery: "myocardial infarction"
snomed_conceptObtener detalles del concepto por SCTIDsctid: "22298006"
snomed_hierarchyObtener conceptos padre/hijosctid: "22298006"
snomed_descriptionsObtener todas las descripcionessctid: "22298006"
snomed_eclEjecutar consultas ECLecl: "<< 73211009"

Herramientas de Crosswalk (5 — map_snomed_to_icd10 requiere SNOMED)

HerramientaDescripciónEjemplo
map_icd10_to_icd11Mapeo autoritativo ICD-10 → ICD-11 mediante tablas de transición de la OMS incluidas; devuelve código principal + capítulo + URIs y cualquier alternativa documentada por la OMSicd10_code: "E11"
map_snomed_to_icd10Guía SNOMED CT → ICD-10 (solo cuando ENABLE_SNOMED_TOOLS=true)sctid: "73211009"
map_loinc_to_snomedGuía LOINC ↔ SNOMEDloinc_code: "2339-0"
validate_codesValidación por lotes de hasta 100 códigos en ICD-11, LOINC, RxNorm, MeSH, ATC, CID-10 (y SNOMED cuando está habilitado); devuelve válido/no válido por código + nombre mostradocodes: [{terminology:"icd11",code:"5A11"}, …]
find_equivalentBúsqueda unificada clasificada entre terminologías: match_score/rank calculados por el servidor por candidato, más groups entre terminologías de títulos léxicamente idénticos; la rama SNOMED se omite cuando las herramientas SNOMED están deshabilitadasterm: "diabetes"

Herramientas ATC (3)

Clasificación Química Terapéutica Anatómica de la OMS, servida a través de NLM RxClass (gratuito, sin autenticación). La base WHOCC en sí requiere una suscripción de pago, pero RxClass envuelve los mismos pares código/nombre.

HerramientaDescripciónEjemplo
atc_classifyNombre de medicamento → código(s) ATCdrug_name: "metformin"
atc_lookupCódigo ATC (nivel 1-4) → nombre + tipo de nivelatc_code: "A10BA"
atc_membersClase ATC → medicamentos miembrosatc_code: "A10BA"

Herramientas CID-10 (4)

Traducción al portugués brasileño de ICD-10 (DataSUS V2008). Incluido como conjunto de datos estático — sin llamadas HTTP. El SUS brasileño usa CID-10 V2008 operativamente; para el ICD-11 internacional (revisión actual de la OMS), use las herramientas ICD-11 anteriores.

HerramientaDescripciónEjemplo
cid10_searchBúsqueda de texto en portugués (insensible a diacríticos, AND entre palabras; palabras cotidianas resueltas a la redacción CID-10, y la respuesta lo indica)query: "câncer de mama"
cid10_lookupCódigo → nombre oficial en portuguéscode: "I21" o "A00.1"
cid10_chaptersListar los 22 capítulos de CID-10-
cid10_chapterDetalle del capítulo con grupos constituyentesnum: 9

Pregunte con sus palabras, no con las del CID-10. El CID-10 está redactado en portugués clínico, y cid10_search comparó sus palabras contra el título del código como una frase textual única — por lo que la palabra cotidiana devolvió nada en absoluto. Medido sobre las 14,496 categorías y subcategorías del conjunto de datos V2008 incluido (2026-09-16), corregido desde 1.12.0: cada palabra debe coincidir (AND), y la palabra cotidiana se expande a la propia del CID-10 (src/clients/cid10-vocabulary.ts, solo pares medidos) — la respuesta lo indica en vocabulary_notes, y los resultados cero vienen con una salida.

usted preguntacoincidencias antesel CID-10 escribecoincidencias
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

Lo que el conjunto de datos V2008 no contiene permanece fuera y aún devuelve cero — covid (U07.1 es de 2020), zika — porque un alias para un código que no existe promete lo que la fuente no tiene. La misma tabla alimenta el índice de Deep Research search.

Herramientas de Versionado (2)

Muestran qué versión de cada terminología consulta este servidor hoy — útil al ejecutar validación por lotes contra una versión fija o al investigar una falta de coincidencia inesperada después de una actualización ascendente.

HerramientaDescripciónEjemplo
terminology_versionsListar las 8 terminologías compatibles con versión actual, fecha de lanzamiento, editor, URL de origen y cadencia de actualización-
terminology_diffInformar qué datos de diferencias están disponibles entre dos versiones de una terminología (estadísticas reales entre revisiones para ICD-10 → ICD-11; orientación en otros casos)terminology: "icd10-icd11"

ChatGPT Deep Research (2)

El contrato de OpenAI Deep Research — las únicas dos herramientas sin prefijo de terminología (nombres fijados por OpenAI). Ver ChatGPT (Deep Research) arriba.

HerramientaDescripciónEjemplo
searchBusca en el catálogo (CID-10, ICD-11, LOINC, RxNorm, MeSH, versiones de terminologías) y devuelve { id, title, url } clasificados por relevanciaquery: "myocardial infarction"
fetchDevuelve el documento completo de un id de search ({ id, title, text, url, metadata }), renderizado por la herramienta de consulta de la terminologíaid: "cid10:I21.0"

Ejemplos de Salida

Las muestras a continuación son la salida formateada real que producen las herramientas — el cuerpo de texto del CallToolResult. Las herramientas también devuelven un objeto structuredContent que coincide con el outputSchema de cada herramienta 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) refleja cada coincidencia en el índice de Clinical Tables de NLM, no solo la página devuelta. Aumente max_results (máx. 50) para ver códigos canónicos como 2339-0 (Glucose [Mass/volume] in Blood); la clasificación de relevancia de la API coloca paneles y mediciones derivadas por encima de la glucosa sanguínea simple en tamaños de página pequeños.

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 un RxCUI que es en sí mismo un ingrediente (TTY=IN), la herramienta devuelve ese ingrediente más cada concepto multi-ingrediente (TTY=MIN) que lo incluye. Use esto para enumerar productos combinados construidos alrededor de una sustancia.

mesh_descriptor — mesh_id: "D006973" (Hipertensión)

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

La nota de alcance proviene del concepto preferido del descriptor, no de su campo de anotación (que es una nota orientada al indexador). Los números de árbol son la ruta navegable hacia la jerarquía controlada de MeSH — C14.907.489 coloca Hipertensión bajo Enfermedades Cardiovasculares → Enfermedades Vasculares.

Flujos de Trabajo Comunes

  • Consulta ICD-11: icd11_search con un término clínico → seleccione el resultado → icd11_lookup con el código para detalles completos, o icd11_hierarchy para recorrer padres/hijos.
  • Canal de medicamentos: rxnorm_search para un nombre de marca o genérico → rxnorm_concept para el registro canónico → rxnorm_ingredients y rxnorm_classes para análisis posteriores.
  • Andamiaje entre terminologías: find_equivalent con un término clínico busca en ICD-11, LOINC, RxNorm, MeSH y (cuando está habilitado) SNOMED en una sola llamada. Úselo para iniciar mapeos; las herramientas map_* por pares los refinan.
  • ICD-10 → ICD-11 (búsqueda de texto, no autoritativa): map_icd10_to_icd11 realiza una búsqueda de texto honesta contra ICD-11 de la OMS. Las tablas de transición reales de la OMS se rastrean en PROGRESS.md Fase 13.1.

Configuración de SNOMED CT (avanzado)

Las 5 herramientas SNOMED (snomed_search, snomed_concept, snomed_hierarchy, snomed_descriptions, snomed_ecl) más la herramienta de crosswalk dependiente de SNOMED (map_snomed_to_icd10) están deshabilitadas por defecto. Con ellas deshabilitadas, el servidor registra 33 herramientas en lugar de 39; find_equivalent aún funciona y omite la rama SNOMED con una nota explicativa.

La razón: a partir de 2026-05-08, el endpoint público Snowstorm de IHTSDO que este proyecto llamaba históricamente (https://browser.ihtsdotools.org/snowstorm/snomed-ct/...) devuelve HTTP 410 Gone para cada ruta. Sin un backend funcional, registrar estas herramientas expone 6 herramientas garantizadamente rotas a cada cliente.

Para habilitar las herramientas SNOMED:

  1. Confirme su licencia SNOMED CT. El uso de SNOMED CT requiere una licencia de SNOMED International (IHTSDO). Los residentes de países miembros típicamente tienen una a través de su centro nacional de lanzamiento; los no miembros pueden obtener una licencia de Afiliado. Ver https://www.snomed.org/snomed-ct/get-snomed.

  2. Ejecute una instancia de Snowstorm. SNOMED International publica Snowstorm como código abierto (IHTSDO/snowstorm) y como imagen Docker (snomedinternational/snowstorm). El autoalojamiento requiere importar un archivo de lanzamiento RF2 (proporcionado a los titulares de licencia).

  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 debe apuntar a la base bajo la cual Snowstorm expone sus /MAIN/concepts y endpoints relacionados. SNOMED_LANGUAGE acepta etiquetas Accept-Language estándar (p. ej. pt, es, pt-BR,en;q=0.8) — Snowstorm devuelve términos localizados cuando la rama los tiene y recurre al inglés en caso contrario.

  4. Reinicie el cliente MCP para que el servidor tome las variables de entorno.

Si establece ENABLE_SNOMED_TOOLS=true sin configurar un Snowstorm funcional, las herramientas SNOMED se registrarán pero cada llamada fallará en la capa de red.

Licencias de Terminologías

La licencia MIT cubre el código del servidor y los metadatos mantenidos por el servidor solo — no el contenido de terminologías servido a través de él, y no los dos conjuntos de datos incluidos (cid10.json, icd10-to-icd11.json), que permanecen bajo sus propios términos. El aviso consolidado se distribuye con el paquete como NOTICE.md; cada respuesta de herramienta lleva un bloque de procedencia por fuente con la licencia aplicable.

ICD-11 (OMS)

El contenido de ICD-11 se proporciona bajo la licencia Creative Commons Attribution-NoDerivatives 3.0 IGO (CC BY-ND 3.0 IGO), según los Términos de Uso y Acuerdo de Licencia de ICD-11.

  • Cita requerida: "Clasificación Internacional de Enfermedades, Undécima Revisión (CIE-11), Organización Mundial de la Salud (OMS) 2019 https://icd.who.int/browse11. Licenciada bajo la licencia Creative Commons Attribution-NoDerivatives 3.0 IGO (CC BY-ND 3.0 IGO)."
  • Este servidor siempre sirve los códigos y títulos de la CIE-11 junto con sus URI, textualmente; las etiquetas no inglesas son traducciones oficiales propias de la OMS (nunca traducidas automáticamente)
  • La OMS puede terminar la licencia en cualquier momento mediante aviso (§4.7)
  • El acceso a la API requiere registro en https://icd.who.int/icdapi

Tablas de transición CIE-10 de la OMS → CIE-11 (incluidas)

Conversión de formato (TSV → JSON, contenido sin alterar) de las tablas que la OMS publica dentro de la versión CIE-11. © Organización Mundial de la Salud, bajo los Términos de Uso de la CIE-11 — no bajo la licencia MIT de este proyecto. Guía de la OMS: las tablas muestran correspondencia entre revisiones y "no están destinadas a convertir directamente datos de una revisión a otra."

CID-10 V2008 (DataSUS / CBCD, incluido)

© Organización Mundial de la Salud; traducción al portugués brasileño © CBCD / Faculdade de Saúde Pública da USP; archivos electrónicos publicados por DataSUS (Ministério da Saúde do Brasil). Permiso de DataSUS/CBCD: los desarrolladores pueden usar los archivos con el crédito correspondiente y sin cargo — este servidor los sirve gratuitamente con crédito en cada respuesta. No está bajo la licencia MIT de este proyecto.

SNOMED CT

El uso de SNOMED CT requiere una licencia de IHTSDO (SNOMED International). Las herramientas SNOMED en este servidor están deshabilitadas por defecto y solo las habilitan operadores con una licencia válida y una instancia Snowstorm autoalojada — consulte Configuración de SNOMED CT (avanzado).

  • Los países miembros tienen licencias nacionales
  • Licencias de afiliados disponibles para otros (Brasil no es un país miembro)
  • Más información: https://www.snomed.org/get-snomed

LOINC

Este material contiene contenido de LOINC (http://loinc.org). LOINC es copyright © Regenstrief Institute, Inc. y el Comité de Nombres y Códigos de Identificadores de Observaciones Lógicas (LOINC) y está disponible sin costo bajo la licencia en http://loinc.org/license. LOINC® es una marca registrada en los Estados Unidos de Regenstrief Institute, Inc.

  • Servido a través de la API gratuita de Tablas Clínicas de NLM; cada código viene con su nombre de visualización oficial
  • Los términos con derechos de autor de terceros se sirven con su aviso transmitido textualmente

RxNorm

RxNorm es producido por la Biblioteca Nacional de Medicina de los Estados Unidos; las API de RxNav sirven contenido de RxNorm no propietario y de dominio público sin cargo.

Este producto utiliza datos disponibles públicamente de la Biblioteca Nacional de Medicina de los Estados Unidos (NLM), Institutos Nacionales de Salud, Departamento de Salud y Servicios Humanos; NLM no es responsable del producto y no respalda ni recomienda este ni ningún otro producto.

ATC (a través de NLM RxClass)

Clasificación ATC © Centro Colaborador de la OMS para la Metodología de Estadísticas de Medicamentos (https://atcddd.fhi.no/), recuperada a través de NLM RxClass y servida textualmente. Este servidor nunca redistribuye el índice ATC/DDD de WHOCC.

MeSH

MeSH es un trabajo del gobierno de los Estados Unidos servido bajo los Términos y Condiciones de NLM. Cortesía de la Biblioteca Nacional de Medicina de los Estados Unidos.

Límites de velocidad de la API

Este servidor implementa limitación de velocidad para respetar a los proveedores de API:

APILímite de velocidad
WHO ICD-115 solicitudes/segundo
NLM (LOINC, MeSH)10 solicitudes/segundo
RxNorm20 solicitudes/segundo
SNOMED CT (Snowstorm)10 solicitudes/segundo

Desarrollo

Compilación desde el código fuente

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

Ejecución local

npm start

Pruebas con MCP Inspector

npx @modelcontextprotocol/inspector node dist/index.js

Contribuciones

¡Las contribuciones son bienvenidas! No dude en enviar una Solicitud de Extracción (Pull Request).

  1. Haga un fork del repositorio
  2. Cree su rama de características (git checkout -b feature/AmazingFeature)
  3. Confirme sus cambios (git commit -m 'Add some AmazingFeature')
  4. Envíe a la rama (git push origin feature/AmazingFeature)
  5. Abra una Solicitud de Extracción

Autor

Sidney Bissoli

Licencia

Este proyecto está licenciado bajo la Licencia MIT - consulte el archivo LICENCIA para más detalles.

Nota: Aunque este software tiene licencia MIT, las terminologías médicas a las que se accede a través de él tienen sus propias licencias (consulte Licencias de Terminología arriba).

Agradecimientos

Soporte

Si encuentra algún problema o tiene preguntas:

  • Abra un problema en GitHub
  • Consulte los problemas existentes para soluciones

Hecho con amor para la comunidad de informática médica