halaxy-mcp
halaxy-mcp
Сервер MCP для API практики-менеджмента Halaxy, написанный на Python. Он позволяет MCP-клиенту (Claude, GitHub Copilot и т.д.) отвечать на вопросы вроде «что у меня сегодня в календаре», «какие из сегодняшних приёмов ещё не выставлены в счёт» или «какие счета ожидают оплаты от такого-то страховщика», общаясь с вашим собственным аккаунтом Halaxy.
Это небольшой однопользовательский инструмент, созданный для нужд одной практики, а не универсальный Halaxy SDK — см. Что он намеренно не делает ниже.
Инструменты
list_invoices(date)— счета, датированные указанным днём (по умолчанию — сегодня). Каждый счёт содержитpayer_name(присутствует всегда) и объектpatient(присутствует только если плательщик — реальный пациент, а не страховщик/работодатель).list_appointments(date, appointment_type)— приёмы за указанный день, каждый помечен как"session"(реальный приём клиента) или"meeting"(блокировка, напоминание, внутренняя заметка — всё, что не связано с пациентом). Сеансы также содержат:session_mode—"F2F"или"Telehealth", определяется из HealthcareService, на которую записан приёмpatient—id/name/initials/telecom/patient_status/is_active_client(см. Данные пациента ниже)invoice— связанный счёт, если он уже выставлен, через прямую ссылку Halaxy приём→счёт (надёжнее, чем сопоставление по дате — см. примечания в коде)awaiting_insurer_invoice— заполняется только когда счёта ещё нет и у пациента есть активное покрытие (Coverage) с пометкой «выставлять счёт организации» — т.е. помечает сеанс, который ожидается к оплате страховщиком/работодателем, но ещё не выставленreferrals— активные направления (Referral) пациента (см.list_referralsниже), чтобы текущее количество сеансов было сразу под рукой без дополнительного запроса
list_practitioners()— клинический персонал, каждый с ID роли практикующего специалиста (PractitionerRole) и именем, чтобы клиент мог сопоставить «что там у Алисы сегодня» с ID роли перед сопоставлением сlist_appointments.list_invoices_by_payer(payer_name)— все счета, когда-либо выставленные конкретному страховщику/работодателю/организации (например, «Acme Insurance»), не привязанные к дате — напрямую ищет поInvoice?recipient=, поэтому у него нет «слепой зоны» окна поиска, как уlist_invoices(см. ниже).list_referrals(flag)— все активные направления (Referral) в практике. В Halaxy это модель направления от врача общей практики/другого специалиста, разрешающего определённое количество сеансов и/или сумму по программе финансирования (чаще всего это план лечения психического здоровья Medicare — «6 сеансов для начала», как многие его знают, — но также DVA, WorkCover и т.д.). Каждое направление содержитsessions_total/sessions_used/sessions_remaining,amount_total/amount_used, срок действия и вычисляемыеflags:"over_limit"(использовано ≥ разрешённого),"expiring_soon"(заканчивается в течение 30 дней),"expired". Можно дополнительно отфильтровать по одному флагу — например, «у кого скоро закончатся сеансы».
Требуемые области действия API-ключа Halaxy
Создайте API-ключ в Halaxy (Настройки → API-ключи) с нужными вам областями — сервер корректно работает, даже если какая-то область отключена: просто инструменты, которым она нужна, будут выдавать ошибку:
Область (как указано в интерфейсе Halaxy) | Используется |
Appointments → Retrieve |
|
Invoices & Payments → Retrieve, Retrieve Fees |
|
Practitioners → Retrieve |
|
Patients → Retrieve | Имена/телефоны/статусы пациентов в |
Claims & Referrals → Retrieve Claim |
|
Claims & Referrals → Retrieve Referral |
|
Пример того, как это выглядит на экране областей API-ключа Halaxy:

Данные пациента
Этот сервер намеренно минимизирует объём данных о пациенте, которые он раскрывает. Ресурс Patient в Halaxy также содержит дату рождения, адрес, пол, контактное лицо для экстренной связи и примечания об источнике направления — ничего из этого здесь не нужно, и это закреплено в коде (ALLOWED_PATIENT_FIELDS в halaxy_mcp.py), а не просто по соглашению: каждый запрос данных о пациенте фильтруется до id/name/initials/telecom/patient_status/is_active_client до того, как данные попадут к MCP-клиенту, независимо от запроса.
Клинические заметки/заметки о сеансах вообще нельзя получить через этот API, ни с каким ключом или областью. Собственный оператор возможностей /metadata Halaxy показывает, что ресурс клинических заметок (DocumentReference) поддерживает только create/patch — без чтения, что соответствует тому, что показывает сам интерфейс Halaxy (у клинических заметок есть только переключатель «Создать»). Это ограничение всего API, а не то, что этот сервер просто решил не раскрывать.
Направления и лимиты сеансов
Halaxy моделирует план лечения психического здоровья врача общей практики (и аналогичные — DVA, WorkCover) как Referral, связанный с ReferralDefinition (тип направления, который несёт лимит сеансов/суммы — например, одно реальное ReferralDefinition при тестировании буквально называлось «Medicare: MHTP Referral» с лимитом в 6 сеансов). sessions_remaining не возвращается Halaxy напрямую; здесь оно вычисляется как sessions_total - sessions_used.
Несколько моментов, подтверждённых реальными данными, о которых полезно знать, если вы будете расширять это дальше:
У пациента может быть более одного одновременно активного направления (например, по одному на каждого специалиста, к которому он направлен) — этот сервер не пытается угадать «то самое»; он возвращает все.
На практике
sessions_usedможет превышатьsessions_total(Medicare не жёстко блокирует запись по достижении лимита) — именно для этого и нужен флаг"over_limit".У некоторых записей направлений вообще нет структурированного типа/направившего специалиста, только произвольный текстовый
comment— он возвращается как есть, когда это единственная доступная зацепка.Собственное поле
activeу направления в Halaxy, похоже, не переключается автоматически на false по истечении срока действия — флаги"expired"/"expiring_soon"вычисляются изperiod.end, а не считываются изactive.
Если область не включена
Для каждого инструмента требуется, чтобы соответствующая область была включена для используемого API-ключа (см. таблицу выше). Если область отсутствует, Halaxy отвечает ошибкой 401/403 или OperationOutcome — сервер в этом случае вызывает понятное исключение HalaxyPermissionError (с указанием ресурса, HTTP-статуса и текста ошибки самого Halaxy), а не молча трактует это как «ноль результатов». Без этой проверки отсутствие области и действительно пустой результат (например, «сегодня счетов нет») выглядели бы для MCP-клиента одинаково.
Установка
Требуется 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_secretПроверьте, что всё запускается:
source .venv/bin/activate
python3 halaxy_mcp.pyОн ничего не выведет и просто будет висеть — это нормально, он ждёт, когда MCP-клиент начнёт с ним общение через stdin/stdout. Нажмите Ctrl+C для остановки.
Подключение к MCP-клиенту
Все перечисленные ниже варианты запускают один и тот же скрипт как локальный дочерний процесс и общаются с ним через stdio — никаких сетевых портов и отдельного развёртывания. В каждом случае используйте полный абсолютный путь к Python из .venv и к halaxy_mcp.py.
Claude Desktop — добавьте в claude_desktop_config.json (~/Library/Application Support/Claude/claude_desktop_config.json на macOS):
{
"mcpServers": {
"halaxy-mcp": {
"command": "/absolute/path/to/halaxy-mcp/.venv/bin/python3",
"args": ["/absolute/path/to/halaxy-mcp/halaxy_mcp.py"]
}
}
}Полностью закройте и снова откройте приложение после этого (не просто закройте окно).
VS Code (GitHub Copilot) — добавьте .vscode/mcp.json в рабочую область:
{
"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 — добавьте в ~/.copilot/mcp-config.json (или выполните /mcp add внутри 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": ["*"]
}
}
}Ни в одном из этих случаев блок env не нужен — скрипт сам загружает свой файл .env из папки, где лежит halaxy_mcp.py.
Известные ограничения, о которых стоит знать
Окно поиска
list_invoicesможет пропускать счета. В поискеInvoiceв Halaxy нет параметра для собственного поляdateсчёта, толькоcreated/_lastUpdated— поэтомуlist_invoicesполучает счета, созданные за последние 45 дней, и фильтрует на стороне клиента по точному совпадениюdate. Счета, выставляемые страховщикам/работодателям (например, по компенсации работникам), иногда создаются за месяцы до сеанса, на который они в итоге датированы, и могут не попасть в это окно. Уlist_appointmentsэтой проблемы нет (он идёт напрямую по ссылке приём→счёт), как и уlist_invoices_by_payer(он ищет по получателю, без ограничения по дате) — предпочитайте их, когда «слепая зона» по дате имеет значение.sessionиmeetingразличаются по наличию связанного участникаPatient, а не по какому-то явному полю Halaxy — реальный сеанс, записанный без привязки к карточке пациента в Halaxy, будет ошибочно отнесён к встречам.Никаких операций записи (создание/изменение чего-либо) намеренно не реализовано.
Только транспорт stdio; удалённый/HTTP-вариант (для размещения где-то, доступного облачному MCP-клиенту, например, через пользовательский коннектор) пока не создан.
Что он намеренно не делает
Этот инструмент оборачивает несколько конечных точек только для чтения, соответствующих потребностям одной практики, а не универсальный клиент Halaxy/FHIR. Он не реализует создание/обновление пациентов, клинические заметки, изменение расписания или большую часть FHIR-поверхности Halaxy примерно на 50 ресурсов (отслеживание направлений покрыто — см. выше, но не создание/изменение направлений). Если вам нужно больше возможностей API, функции-инструменты в halaxy_mcp.py — достаточно короткая и читаемая отправная точка для расширения.
Лицензия
GPLv3 — см. 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