halaxy-mcp
halaxy-mcp
Un servidor MCP para la API de gestión de consultas Halaxy, escrito en Python. Permite que un cliente MCP (Claude, GitHub Copilot, etc.) responda preguntas como «¿qué tengo en el calendario hoy?», «¿cuáles de las citas de hoy aún no se han facturado?» o «¿qué facturas están pendientes con una aseguradora determinada?», al comunicarse con tu propia cuenta de Halaxy.
Esta es una herramienta pequeña de un solo inquilino, creada para el uso de una única consulta, no un SDK general de Halaxy; ver Lo que deliberadamente no hace más abajo.
Herramientas
list_invoices(date)- facturas con fecha de un día determinado (por defecto, hoy). Cada factura tiene unpayer_name(siempre presente) y un objetopatient(solo presente cuando el pagador es un paciente real, no una aseguradora/empleador).list_appointments(date, appointment_type)- citas de un día determinado, cada una etiquetada como"session"(una cita real de cliente) o"meeting"(un bloqueo/recordatorio/nota interna: cualquier cosa sin paciente vinculado). Las sesiones también incluyen:session_mode-"F2F"o"Telehealth", resuelto a partir del HealthcareService contra el que se reserva la citapatient-id/name/initials/telecom/patient_status/is_active_client(ver Datos del paciente más abajo)invoice- la factura vinculada, si se ha emitido alguna, a través de la referencia directa cita→factura de Halaxy (más fiable que emparejar por fecha; ver las notas en el código)awaiting_insurer_invoice- se rellena solo cuando aún no hay factura y el paciente tiene un Coverage activo en el registro marcado como «facturado a una organización»; es decir, señala una sesión que se espera que se facture a una aseguradora/empleador pero aún no se ha facturadoreferrals- las derivaciones activas del paciente (verlist_referralsmás abajo), de modo que el número de sesiones actuales aparece directamente sin una segunda llamada
list_practitioners()- personal clínico, cada uno con su ID de PractitionerRole y nombre, de modo que un cliente pueda resolver «¿qué tiene Alice hoy?» a un ID de rol antes de contrastarlo conlist_appointments.list_invoices_by_payer(payer_name)- todas las facturas facturadas a una aseguradora/empleador/organización específica (p. ej. «Acme Insurance»), sin vincular a ninguna fecha: busca directamente enInvoice?recipient=de Halaxy, por lo que no tiene el punto ciego de la ventana retrospectiva delist_invoices(ver más abajo).list_referrals(flag)- todas las derivaciones activas en la consulta: el modelo de Halaxy para una derivación de médico de cabecera/otro que autoriza un número determinado de sesiones y/o importes bajo un esquema de financiación (lo más habitual es un Plan de Tratamiento de Salud Mental de Medicare, «6 sesiones para empezar», como lo conoce la mayoría; pero también DVA, WorkCover, etc.). Cada una incluyesessions_total/sessions_used/sessions_remaining,amount_total/amount_used, vencimiento yflagscalculados:"over_limit"(usadas ≥ autorizadas),"expiring_soon"(termina dentro de 30 días),"expired". Opcionalmente, se puede filtrar por una sola flag, p. ej. «a quién le quedan pocas sesiones».
Alcances de clave de API Halaxy necesarios
Crea una clave de API en Halaxy (Settings → API Keys) con los que necesites de entre estos: el servidor se degrada con elegancia si un alcance está desactivado; simplemente fallará en las herramientas que lo necesiten.
Alcance (según aparece en la interfaz de Halaxy) | Utilizado por |
Appointments → Retrieve |
|
Invoices & Payments → Retrieve, Retrieve Fees |
|
Practitioners → Retrieve |
|
Patients → Retrieve | Nombres/telecom/estado de pacientes en |
Claims & Referrals → Retrieve Claim |
|
Claims & Referrals → Retrieve Referral |
|
Ejemplo de cómo se ve esto en la propia pantalla de alcances de clave de API de Halaxy:

Datos del paciente
Este servidor minimiza deliberadamente lo que expone sobre un paciente. El recurso Patient de Halaxy también contiene fecha de nacimiento, dirección, sexo, contacto de emergencia y notas de origen de la derivación; nada de eso es necesario aquí, y está impuesto en el código (ALLOWED_PATIENT_FIELDS en halaxy_mcp.py), no solo por convención: cada búsqueda de paciente se filtra hasta id/name/initials/telecom/patient_status/is_active_client antes de que pueda llegar al cliente MCP, independientemente de lo que se pida.
Las notas clínicas/de sesión no se pueden recuperar en absoluto a través de esta API, con ninguna clave ni alcance. La declaración de capacidades /metadata de Halaxy muestra que su recurso de notas clínicas (DocumentReference) solo admite create/patch, sin lectura, lo que coincide con lo que la propia interfaz de Halaxy muestra (Clinical Notes solo tiene un interruptor Create). Es una limitación de toda la API, no algo que este servidor elija no exponer.
Derivaciones y límites de sesiones
Halaxy modela un Plan de Tratamiento de Salud Mental de un médico de cabecera (y similares: DVA, WorkCover) como una Referral vinculada a una ReferralDefinition (el tipo de derivación, que contiene el límite de sesiones/importe; p. ej., una ReferralDefinition real en las pruebas se llamaba literalmente «Medicare: MHTP Referral» con un límite de 6 sesiones). sessions_remaining no lo devuelve Halaxy directamente; aquí se calcula como sessions_total - sessions_used.
Algunas cosas confirmadas con datos reales, que conviene saber si amplías esto más adelante:
Un paciente puede tener más de una Referral simultáneamente activa (p. ej., una por profesional al que se deriva); este servidor no intenta adivinar «la» correcta; devuelve todas.
sessions_usedpuede superar asessions_totalen la práctica (Medicare no detiene de forma tajante las reservas al alcanzar el límite); para eso está la marca"over_limit".Algunos registros de Referral no tienen ningún tipo/remitente estructurado, solo un
commentde texto libre; se muestra tal cual cuando es la única pista disponible.El campo
activede Halaxy en una Referral no parece cambiar automáticamente a false cuando su período caduca; las marcas"expired"/"expiring_soon"se calculan a partir deperiod.end, no se leen deactive.
Si un alcance no está habilitado
Cada herramienta necesita que su alcance correspondiente esté activado para la clave de API que está usando (ver la tabla anterior). Si falta un alcance, Halaxy responde con un 401/403 o un error OperationOutcome; el servidor lanza un HalaxyPermissionError claro (indicando el recurso, el estado HTTP y el texto de error propio de Halaxy) en lugar de tratar silenciosamente eso como «cero resultados». Sin esta comprobación, un alcance faltante y un resultado genuinamente vacío (p. ej., «no hay facturas hoy») parecerían idénticos al cliente MCP.
Instalación
Requiere Python 3.10+.
git clone https://github.com/ryanhunt/halaxy-mcp.git
cd halaxy-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# then edit .env with your Halaxy API key's client_id/client_secretComprueba que funciona:
source .venv/bin/activate
python3 halaxy_mcp.pyNo imprimirá nada y simplemente se quedará ahí; es lo correcto, está esperando a que un cliente MCP se comunique con él a través de stdin/stdout. Ctrl+C para detenerlo.
Cómo conectarlo a un cliente MCP
Todos estos métodos lanzan el mismo script como subproceso local y se comunican con él a través de stdio: sin puerto de red, sin despliegue aparte. Usa la ruta completa y absoluta del Python de .venv y de halaxy_mcp.py en todos los casos.
Claude Desktop - añádelo a claude_desktop_config.json (~/Library/Application Support/Claude/claude_desktop_config.json en macOS):
{
"mcpServers": {
"halaxy-mcp": {
"command": "/absolute/path/to/halaxy-mcp/.venv/bin/python3",
"args": ["/absolute/path/to/halaxy-mcp/halaxy_mcp.py"]
}
}
}Sal por completo de la aplicación y vuelve a abrirla después (no basta con cerrar la ventana).
VS Code (GitHub Copilot) - añade .vscode/mcp.json en un área de trabajo:
{
"servers": {
"halaxy-mcp": {
"type": "stdio",
"command": "/absolute/path/to/halaxy-mcp/.venv/bin/python3",
"args": ["/absolute/path/to/halaxy-mcp/halaxy_mcp.py"]
}
}
}GitHub Copilot CLI - añádelo a ~/.copilot/mcp-config.json (o ejecuta /mcp add dentro de la CLI):
{
"mcpServers": {
"halaxy-mcp": {
"type": "local",
"command": "/absolute/path/to/halaxy-mcp/.venv/bin/python3",
"args": ["/absolute/path/to/halaxy-mcp/halaxy_mcp.py"],
"tools": ["*"]
}
}
}No se necesita ningún bloque env en ninguno de estos casos: el script carga su propio archivo .env desde la misma carpeta en la que está halaxy_mcp.py.
Limitaciones conocidas que conviene tener en cuenta
La ventana retrospectiva de
list_invoicespuede omitir facturas. La búsqueda deInvoicede Halaxy no tiene ningún parámetro para el campodatepropio de la factura, solocreated/_lastUpdated; por esolist_invoicesobtiene las facturas creadas en los últimos 45 días y filtra en el lado del cliente una coincidencia exacta dedate. Las facturas pagaderas por aseguradora/empleador (p. ej., compensación laboral) a veces se crean meses antes de la sesión a la que finalmente se les asigna fecha, lo que puede quedar fuera de esa ventana.list_appointmentsno tiene este problema (sigue el enlace cita→factura directamente), ylist_invoices_by_payertampoco (busca por destinatario, sin límite de fecha): prefiere estas cuando el punto ciego basado en la fecha importe.sessionfrente ameetingse deduce de si la cita tiene un participantePatientvinculado, no de ningún campo explícito de Halaxy: una sesión real reservada sin vincular un registro de paciente en Halaxy se clasificaría erróneamente como reunión.No se implementan operaciones de escritura (crear/actualizar nada), a propósito.
Solo transporte stdio: todavía no está creada una variante remota/HTTP (para alojar esto en algún lugar accesible por un cliente MCP basado en la nube, p. ej., un conector personalizado).
Lo que deliberadamente no hace
Esto envuelve un puñado de endpoints de solo lectura que se ajustan a las necesidades de una única consulta, no un cliente general de Halaxy/FHIR. No implementa creación/actualización de pacientes, notas clínicas, cambios de agenda ni la mayor parte de la superficie FHIR de Halaxy de ~50 recursos (el seguimiento de derivaciones está cubierto, ver arriba, pero no la creación/actualización de derivaciones). Si necesitas más de la API, las funciones de herramienta en halaxy_mcp.py son un punto de partida razonablemente corto y legible para ampliarlo.
Licencia
GPLv3 - ver LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ryanhunt/halaxy-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server