Skip to main content
Glama
immannan

Health Claims MCP Server

by immannan

Healthcare MCP + A2A Server (Mock)

Пример проекта, демонстрирующий работу Model Context Protocol (MCP) и взаимодействия между агентами (A2A) в домене претензий по медицинскому страхованию.

  • mcp_server/ — сервер FastMCP, предоставляющий 8 инструментов для сферы здравоохранения

  • a2a/ — пользовательский протокол A2A с 4 специализированными агентами, которые координируют работу через JSON-RPC 2.0

  • run_a2a.py — автономный HTTP-сервер, который запускает всех агентов вместе

Все данные являются синтетическими — никакой реальной защищенной медицинской информации (PHI) и внешних вызовов.

Официальный SDK A2A: a2a-sdk (v1.0.1+) теперь является официальной библиотекой Python для протокола A2A. Этот проект содержит пользовательскую реализацию, созданную в учебных целях.


Структура проекта

healthcare-mcp/
├── mcp_server/                  # MCP server
│   ├── __init__.py
│   └── server.py                # FastMCP with 8 healthcare tools
├── a2a/                         # A2A protocol implementation
│   ├── __init__.py
│   ├── message.py               # JSON-RPC 2.0 message types
│   ├── a2a_protocol.py          # Protocol engine, registry, routing
│   └── agents.py                # 4 healthcare domain agents
├── run_a2a.py                   # Standalone A2A HTTP server
├── test_a2a_communication.py    # A2A protocol tests (40 tests)
├── diagrams/
│   ├── mcp.mmd                  # MCP Gateway architecture
│   └── a2a.mmd                  # A2A messaging pattern
├── requirements.txt
└── pytest.ini

Настройка

Предварительные требования: Python 3.10+

python -m venv .venv
source .venv/bin/activate      # Windows: .venv\Scripts\activate
pip install -r requirements.txt

Запуск MCP-сервера

MCP-сервер предоставляет инструменты здравоохранения любому MCP-совместимому клиенту.

stdio (по умолчанию — для MCP-клиентов)

python mcp_server/server.py

Streamable HTTP

export MCP_TRANSPORT=streamable-http
export FASTMCP_HOST=127.0.0.1
export FASTMCP_PORT=8000
python mcp_server/server.py

Конечная точка: http://127.0.0.1:8000/mcp

SSE

export MCP_TRANSPORT=sse
python mcp_server/server.py

Переменные окружения MCP

Переменная

По умолчанию

Описание

MCP_TRANSPORT

stdio

Транспорт: stdio, streamable-http или sse

FASTMCP_HOST

127.0.0.1

Хост для привязки HTTP-транспортов

FASTMCP_PORT

8000

Порт для привязки HTTP-транспортов

FASTMCP_STREAMABLE_HTTP_PATH

/mcp

URL-путь для конечной точки streamable-http

MCP_MOUNT_PATH

(нет)

Опциональный префикс пути монтирования


Запуск A2A-сервера

A2A-сервер запускает всех четырех агентов здравоохранения и предоставляет их через HTTP. Он использует локальный MCP-клиент, который вызывает функции инструментов MCP внутри процесса — отдельный MCP-сервер не требуется.

python run_a2a.py

Сервер запускается по адресу http://127.0.0.1:8001 по умолчанию.

Переменные окружения A2A

Переменная

По умолчанию

Описание

A2A_HOST

127.0.0.1

Хост для привязки

A2A_PORT

8001

Порт для привязки

Конечные точки A2A

Метод

Путь

Описание

GET

/.well-known/agent.json

Карточка агента — возможности и метаданные для обнаружения

GET

/agents

Список всех зарегистрированных агентов

POST

/

Получение сообщения A2A JSON-RPC 2.0

Пример: Обнаружение агентов

curl http://127.0.0.1:8001/.well-known/agent.json | python -m json.tool

Пример: Отправка сообщения A2A

curl -s -X POST http://127.0.0.1:8001/ \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "check_member_eligibility",
    "params": {"member_id": "M-1001"},
    "id": "req-001",
    "sender": "external-client",
    "recipient": "claims-agent",
    "type": "request"
  }' | python -m json.tool

Инструменты MCP

Претензии

Инструмент

Параметры

Описание

list_member_claims

member_id, status?

Список претензий, опционально отфильтрованный по paid/pending/denied

get_claim_detail

claim_id

Полная информация о претензии с участником, поставщиком и суммами выплат

submit_claim_inquiry

claim_id, inquiry_type, note

Отправка тикета с запросом

Льготы

Инструмент

Параметры

Описание

get_member_benefits

member_id

Франшиза и остатки по расходам из собственного кармана (OOP) для плана участника

estimate_member_responsibility

member_id, procedure_code, billed_amount, network?

Оценка распределения расходов

Поставщики и авторизации

Инструмент

Параметры

Описание

search_providers

specialty, zip_code?, network?

Поиск поставщиков по специальности

create_prior_authorization

member_id, provider_id, procedure_codes, service_date, diagnosis_codes?

Отправка запроса на предварительную авторизацию

get_prior_authorization_status

auth_id

Получение текущего статуса предварительной авторизации


Система агентов A2A

Агенты

Агент

ID

Роль

MemberAssistAgent

member-assist-agent

Координатор пациентов — проверяет право на участие, находит поставщиков

ClaimsAgent

claims-agent

Обработчик претензий — право на участие, история претензий, оценка стоимости

ProviderAdvocateAgent

provider-advocate-agent

Менеджер сети — поиск поставщиков

BenefitsAgent

benefits-agent

Специалист по льготам — расчет стоимости

Поток коммуникации

MemberAssistAgent
    ├─ A2A → ClaimsAgent: "check_member_eligibility"
    │         ├─ MCP: list_member_claims, get_member_benefits
    │         └─ MCP: get_claim_detail
    │
    └─ A2A → ProviderAdvocateAgent: "search_network_providers"
              └─ MCP: search_providers

ClaimsAgent
    └─ A2A → BenefitsAgent: "calculate_member_responsibility"
              └─ MCP: estimate_member_responsibility

Использование агентов в коде

import asyncio
from a2a import A2AProtocol, MemberAssistAgent, ClaimsAgent, ProviderAdvocateAgent, BenefitsAgent

async def main():
    protocol = A2AProtocol()

    member_assist     = MemberAssistAgent(protocol, mcp_client)
    claims            = ClaimsAgent(protocol, mcp_client)
    provider_advocate = ProviderAdvocateAgent(protocol, mcp_client)
    benefits          = BenefitsAgent(protocol, mcp_client)

    for agent in [member_assist, claims, provider_advocate, benefits]:
        await agent.register()

    protocol.register_handler("check_member_eligibility",        claims.handle_check_member_eligibility)
    protocol.register_handler("search_network_providers",        provider_advocate.handle_search_network_providers)
    protocol.register_handler("calculate_member_responsibility", benefits.handle_calculate_member_responsibility)

    eligibility = await member_assist.check_eligibility("M-1001")
    providers   = await member_assist.find_providers("primary care", "55401")

asyncio.run(main())

Тесты

pytest -v                          # all 40 tests
pytest test_a2a_communication.py   # A2A protocol tests only

См. TEST_GUIDE.md для документации по тестированию и QUICKSTART.md для команд фильтрации.


Справочник фиктивных данных

Участники

ID

Имя

План

M-1001

Jordan Lee

P-100 Optum Choice PPO

M-1002

Casey Patel

P-200 Optum Select HMO

Планы

ID

Имя

Франшиза

Остаток

Макс. OOP

Остаток

Сострахование в сети

P-100

Optum Choice PPO

$1,500

$420

$5,000

$2,100

20%

P-200

Optum Select HMO

$500

$120

$3,000

$980

10%

Поставщики

ID

Имя

Специальность

Сеть

ZIP

PR-2001

Northside Primary Care

первичная помощь

в сети

55401

PR-2002

Lakeview Ortho Clinic

ортопедия

в сети

55111

PR-2003

Metro Imaging Center

радиология

вне сети

55415

Претензии

ID

Участник

Поставщик

Статус

Выставлено

C-10001

M-1001

PR-2001

оплачено

$250.00

C-10002

M-1001

PR-2003

в ожидании

$980.00

C-10003

M-1002

PR-2002

отклонено (требуется пред. авт.)

$1,350.00

Предварительные авторизации

ID

Участник

Статус

PA-9001

M-1002

одобрено


Архитектурные диаграммы

Файл

Описание

diagrams/mcp.mmd

Маршрутизация шлюза MCP к доменным серверам

diagrams/a2a.mmd

Обмен сообщениями A2A между агентами

Визуализируйте с помощью Mermaid Live Editor или любого просмотрщика, совместимого с Mermaid.


Инспектор MCP

MCP Inspector — это браузерный инструмент для интерактивного вызова инструментов MCP.

npm install
npm start

Примечания

  • Все данные хранятся в оперативной памяти и сбрасываются при перезапуске.

  • estimate_member_responsibility использует фиктивные коэффициенты (75% в сети, 60% вне сети). Это не является гарантией оплаты.

  • Нет PHI, нет внешних вызовов API, нет постоянного хранилища.

  • Официальный Python SDK для A2A — a2a-sdk>=1.0.1. Модуль a2a/ в этом проекте является пользовательской учебной реализацией тех же паттернов протокола.

A
license - permissive license
-
quality - not tested
-
maintenance - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

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/immannan/healthcare-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server