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

Related MCP server: policy-corpus

Настройка

Предварительные требования: 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/ в этом проекте является пользовательской учебной реализацией тех же паттернов протокола.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables healthcare benefits management by providing member eligibility verification, coverage details for medical/dental/vision/pharmacy services, and service coverage verification through natural language queries.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server providing 5 tools for hybrid search, clause retrieval, policy versioning, code lookup, and plan rider override queries over a synthetic medical-policy corpus.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables LLM clients to interact with a mock HR system via the Model Context Protocol, supporting queries and workflows across leave, benefits, employee lifecycle, learning, performance, travel, expenses, policies, and FAQs.
    MIT