Skip to main content
Glama
immannan

Health Claims MCP Server

by immannan

Healthcare MCP + Servidor A2A (Simulado)

Un proyecto de ejemplo que demuestra el Protocolo de Contexto de Modelo (MCP) y la comunicación Agente-a-Agente (A2A) para el dominio de reclamaciones de seguros médicos.

  • mcp_server/ — Servidor FastMCP que expone 8 herramientas de atención médica

  • a2a/ — Protocolo A2A personalizado con 4 agentes especializados que se coordinan mediante JSON-RPC 2.0

  • run_a2a.py — Servidor HTTP independiente que ejecuta todos los agentes juntos

Todos los datos son sintéticos: no hay PHI real, no hay llamadas externas.

SDK oficial de A2A: El a2a-sdk (v1.0.1+) es ahora la biblioteca oficial de Python para el protocolo A2A. Este proyecto contiene una implementación personalizada creada con fines de formación.


Estructura del Proyecto

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

Configuración

Requisitos previos: Python 3.10+

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

Ejecución del Servidor MCP

El servidor MCP expone herramientas de atención médica a cualquier cliente compatible con MCP.

stdio (predeterminado — para clientes MCP)

python mcp_server/server.py

HTTP Transmitible (Streamable)

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

Endpoint: http://127.0.0.1:8000/mcp

SSE

export MCP_TRANSPORT=sse
python mcp_server/server.py

Variables de Entorno de MCP

Variable

Predeterminado

Descripción

MCP_TRANSPORT

stdio

Transporte: stdio, streamable-http, o sse

FASTMCP_HOST

127.0.0.1

Host de enlace para transportes HTTP

FASTMCP_PORT

8000

Puerto de enlace para transportes HTTP

FASTMCP_STREAMABLE_HTTP_PATH

/mcp

Ruta URL para el endpoint streamable-http

MCP_MOUNT_PATH

(ninguno)

Prefijo de ruta de montaje opcional


Ejecución del Servidor A2A

El servidor A2A inicia los cuatro agentes de atención médica y los expone a través de HTTP. Utiliza un cliente MCP local que llama a las funciones de herramientas MCP en el proceso; no se requiere un servidor MCP separado.

python run_a2a.py

El servidor se inicia en http://127.0.0.1:8001 de forma predeterminada.

Variables de Entorno de A2A

Variable

Predeterminado

Descripción

A2A_HOST

127.0.0.1

Host de enlace

A2A_PORT

8001

Puerto de enlace

Endpoints de A2A

Método

Ruta

Descripción

GET

/.well-known/agent.json

Tarjeta de agente: capacidades y metadatos para descubrimiento

GET

/agents

Listar todos los agentes registrados

POST

/

Recibir un mensaje A2A JSON-RPC 2.0

Ejemplo: Descubrir agentes

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

Ejemplo: Enviar un mensaje 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

Herramientas MCP

Reclamaciones

Herramienta

Parámetros

Descripción

list_member_claims

member_id, status?

Listar reclamaciones, opcionalmente filtradas por paid/pending/denied

get_claim_detail

claim_id

Reclamación completa con miembro, proveedor y montos de adjudicación

submit_claim_inquiry

claim_id, inquiry_type, note

Enviar un ticket de consulta

Beneficios

Herramienta

Parámetros

Descripción

get_member_benefits

member_id

Saldos de deducible y OOP para el plan del miembro

estimate_member_responsibility

member_id, procedure_code, billed_amount, network?

Estimación de costos compartidos

Proveedores y Autorizaciones

Herramienta

Parámetros

Descripción

search_providers

specialty, zip_code?, network?

Buscar proveedores por especialidad

create_prior_authorization

member_id, provider_id, procedure_codes, service_date, diagnosis_codes?

Enviar solicitud de autorización previa

get_prior_authorization_status

auth_id

Obtener el estado actual de una autorización previa


Sistema de Agentes A2A

Agentes

Agente

ID

Rol

MemberAssistAgent

member-assist-agent

Coordinador de pacientes: verifica elegibilidad, encuentra proveedores

ClaimsAgent

claims-agent

Procesador de reclamaciones: elegibilidad, historial de reclamaciones, estimaciones de costos

ProviderAdvocateAgent

provider-advocate-agent

Gestor de red: búsqueda de proveedores

BenefitsAgent

benefits-agent

Especialista en beneficios: cálculos de costos

Flujo de Comunicación

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

Uso de agentes en el código

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())

Pruebas

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

Consulte TEST_GUIDE.md para la documentación de pruebas y QUICKSTART.md para comandos de filtrado.


Referencia de Datos Simulados

Miembros

ID

Nombre

Plan

M-1001

Jordan Lee

P-100 Optum Choice PPO

M-1002

Casey Patel

P-200 Optum Select HMO

Planes

ID

Nombre

Deducible

Restante

Máx OOP

Restante

Coaseguro en red

P-100

Optum Choice PPO

$1,500

$420

$5,000

$2,100

20%

P-200

Optum Select HMO

$500

$120

$3,000

$980

10%

Proveedores

ID

Nombre

Especialidad

Red

ZIP

PR-2001

Northside Primary Care

atención primaria

en red

55401

PR-2002

Lakeview Ortho Clinic

ortopedia

en red

55111

PR-2003

Metro Imaging Center

radiología

fuera de red

55415

Reclamaciones

ID

Miembro

Proveedor

Estado

Facturado

C-10001

M-1001

PR-2001

pagado

$250.00

C-10002

M-1001

PR-2003

pendiente

$980.00

C-10003

M-1002

PR-2002

denegado (requiere aut. previa)

$1,350.00

Autorizaciones Previas

ID

Miembro

Estado

PA-9001

M-1002

aprobado


Diagramas de Arquitectura

Archivo

Descripción

diagrams/mcp.mmd

Enrutamiento de puerta de enlace MCP a servidores de dominio

diagrams/a2a.mmd

Mensajería A2A entre agentes

Renderice con Mermaid Live Editor o cualquier visor compatible con Mermaid.


Inspector MCP

MCP Inspector es una herramienta basada en navegador para llamar a herramientas MCP de forma interactiva.

npm install
npm start

Notas

  • Todos los datos están en memoria y se restablecen al reiniciar.

  • estimate_member_responsibility utiliza multiplicadores simulados (75% en red, 60% fuera de red). No es una garantía de pago.

  • Sin PHI, sin llamadas a API externas, sin almacenamiento persistente.

  • El SDK oficial de Python para A2A es a2a-sdk>=1.0.1. El módulo a2a/ en este proyecto es una implementación educativa personalizada de los mismos patrones de protocolo.

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