SNOMED CT server, Argentine edition (May 2026) pre-indexed. REST API + MCP. Ready to run.
447
Servidor de terminología SNOMED CT, autocontenido y listo para producción.
Un solo docker run. La edición argentina completa de SNOMED CT, búsqueda full-text en español y una API REST — sin importaciones, sin dependencias externas, sin configuración.
Integrar terminología SNOMED CT en un sistema de salud suele llevar días de descarga de RF2, importación, indexado y tuning. Heural Hermes empaqueta Hermes — el motor de terminología clínica de Mark Wardle — dentro de una imagen Docker que ya trae la base SNOMED CT importada, indexada y compactada. La imagen arranca y sirve.
docker run -d -p 8080:8080 fastslack/heural-hermes:v5
Eso es todo lo que hay que hacer.
| SNOMED CT preinstalado | Edición Argentina (es-AR) e Internacional (en-US), más de 350.000 conceptos clínicos horneados en la imagen |
| Búsqueda en español | Autocompletado y matching difuso optimizados para terminología clínica en castellano |
| Alto rendimiento | Lucene 10 con Vector API (SIMD) sobre almacenamiento LMDB de baja latencia |
| Cross-mapping | Mapeos a CIE-10, Read Codes y OPCS vía refsets de SNOMED CT |
| ECL v2.2 | Expression Constraint Language para consultas semánticas sobre la ontología |
| API REST + MCP | HTTP para aplicaciones, y Model Context Protocol nativo para asistentes de IA |
| Autocontenida | Base embebida — docker pull y listo, sin volúmenes ni imports en tiempo de arranque |
docker run -d --name hermes -p 8080:8080 fastslack/heural-hermes:v5
Verificá que responde:
curl "http://localhost:8080/v1/snomed/search?s=diabetes&maxHits=3"
[
{ "id": 2157527011, "conceptId": 405751000, "term": "Diabetes type", "preferredTerm": "Diabetes type" },
{ "id": 3377131000209115, "conceptId": 11530004, "term": "diabetes lábil", "preferredTerm": "Brittle diabetes mellitus" },
{ "id": 1778601012, "conceptId": 399144008, "term": "Bronze diabetes", "preferredTerm": "Bronze diabetes" }
]
git clone https://gitlab.com/heural/heural-hermes-service.git
cd heural-hermes-service
docker compose build # tag: fastslack/heural-hermes:v5
docker compose up -d
Base: http://localhost:8080
| Método | Endpoint | Descripción |
|---|---|---|
GET | /v1/snomed/search?s=<texto> | Búsqueda full-text con autocompletado |
GET | /v1/snomed/search?s=<texto>&constraint=<ecl> | Búsqueda filtrada por ECL |
GET | /v1/snomed/concepts/:id | Concepto por SCTID |
GET | /v1/snomed/concepts/:id/extended | Concepto con relaciones, padres e inferencias |
GET | /v1/snomed/concepts/:id/descriptions | Descripciones y sinónimos |
GET | /v1/snomed/crossmap/:refsetId?code=<code> | Cross-map a CIE-10 / Read / OPCS |
POST | /v1/snomed/ecl | Evaluar una expresión ECL |
Ejemplos
# Buscar un diagnóstico
curl "http://localhost:8080/v1/snomed/search?s=infarto+agudo+de+miocardio"
# Resolver un concepto por ID (73211009 = Diabetes mellitus)
curl "http://localhost:8080/v1/snomed/concepts/73211009"
# Búsqueda restringida por ECL: descendientes de "Diabetes mellitus"
curl "http://localhost:8080/v1/snomed/search?s=diabetes&constraint=<<73211009"
Hermes expone MCP de forma nativa: un asistente de IA puede buscar conceptos, resolver SCTIDs, hacer cross-mapping y evaluar ECL directamente contra la terminología, sin pasar por la API HTTP.
Levantar el servidor MCP
# Vía Docker Compose (perfil dedicado)
docker compose --profile mcp run --rm -i hermes-mcp
# Vía Docker directo
docker run --rm -i fastslack/heural-hermes:v5 /start-mcp.sh
# Local, sin Docker
java --add-modules jdk.incubator.vector \
--enable-native-access=ALL-UNNAMED \
-jar data/hermes/hermes.jar --db data/hermes/snomed.db mcp --locale es
Configuración para clientes MCP (Claude Desktop → claude_desktop_config.json; Claude Code → .mcp.json del proyecto):
{
"mcpServers": {
"hermes": {
"command": "docker",
"args": ["run", "--rm", "-i", "fastslack/heural-hermes:v5", "/start-mcp.sh"]
}
}
}
Tools disponibles
| Tool | Descripción |
|---|---|
search | Búsqueda full-text de conceptos |
lookup | Resolución de concepto por SCTID |
crossmap | Cross-mapping a CIE-10, Read Codes, OPCS |
ecl | Evaluación de Expression Constraint Language |
El repositorio incluye un docker-compose.yml con la política de reinicio y la red pensadas para producción:
services:
hermes:
image: fastslack/heural-hermes:v5 # pull del registry en DEV/PROD
build: # o build local con el mismo tag
context: ./data/hermes
args: { hermes_jar: ./hermes.jar, snomed_db: ./snomed.db }
restart: unless-stopped # se recupera solo tras reboot/crash del host
ports: ['8080:8080']
networks: [elastic_net]
En un servidor que consume la imagen publicada:
docker compose pull hermes
docker compose up -d hermes
El servicio consumidor la alcanza en
localhost:8080desde el host, o enhost.docker.internal:8080desde otro contenedor (p. ej. la API de Heural víaHERMES_URL).
| Componente | Versión |
|---|---|
| Hermes | v1.4.1515 (Clojure → JAR) |
| Java Runtime | Eclipse Temurin 21.0.12+8 (LTS) |
| Jetty | 12.0.31 |
| Lucene | 10.x con Vector API (SIMD) |
| LMDB | almacenamiento nativo de baja latencia |
| Imagen base | eclipse-temurin:21-jre (Ubuntu 24.04 Noble, glibc 2.39) |
| SNOMED CT | Argentina Edition 20260510 (mayo 2026) + International 20260401 (abril 2026) |
| Locales | es-AR (Latin American Spanish), en-US |
Flujo de datos: RF2 → import LMDB → index Lucene → snomed.db → Hermes JAR → Jetty HTTP → REST/MCP.
La línea v3+ corre sobre el stack Jetty 12 / Java 21 endurecido, que resuelve las vulnerabilidades reportadas en las bases Jetty 9.4.x anteriores:
commons-fileupload removido (reemplazado por la implementación interna de Jetty 12)El servidor expone únicamente lectura de terminología: no persiste datos de pacientes ni acepta escrituras clínicas.
| Tag | Cambios |
|---|---|
| v5 | SNOMED CT Argentina mayo 2026 + International abril 2026; runtime Jetty 12.0.31 / Temurin 21.0.12 |
| v4 | SNOMED CT Argentina nov 2024 |
| v3 | Migración a Jetty 12 / Java 21; parches CVE; base Ubuntu 24.04 |
Copyright © 2024 Heural — Creador: Matías Aguirre
Software libre bajo la GNU General Public License v3.
Hermes es desarrollado por Mark Wardle bajo licencia EPL-2.0. SNOMED CT® es marca registrada de SNOMED International; su uso requiere la licencia de afiliado correspondiente.
Content type
Image
Digest
sha256:3dc07d40d…
Size
1.9 GB
Last updated
18 days ago
docker pull fastslack/heural-hermes:v6