MCP Access for Test Patients
Test patients can access the MCP (Model Context Protocol) endpoint directly without going through the OAuth flow or consent verification. This enables rapid testing and development of AI integrations.
For general information about creating and managing test patients, see the Test Patients documentation.
Quick Start
1. Generate Admin Token
Generate an admin token using your API Key and Secret:
curl -X POST "https://api.healthex.io/v1/auth/token" \
-H "Content-Type: application/json" \
-d '{
"apiKey": "{your_api_key}",
"apiSecret": "{your_api_secret}"
}'
Response:
{
"token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...",
"expiration": 1738368725
}
You can create your API Key and Secret in the admin Healthex dashboard.
2. Create a Test Patient
curl -X POST "https://api.healthex.io/v1/organizations/{orgId}/test-patients" \
-H "Authorization: Bearer {admin_token}"
Response:
{
"patient": {
"id": "1addc6fa-3c59-4915-b0ba-ae2a31ff1f75",
"email": "test-patient+dqKVeMid8N41@example.com",
"firstName": "Test",
"lastName": "Patient",
"isTestPatient": true
},
"password": "zkWZTH$$BmfTAOW4"
}
3. Add Test Patient to Project
Add the test patient to a project using a researcher or org admin token:
curl -X POST "https://api.healthex.io/v1/projects/{projectId}/patients" \
-H "Authorization: Bearer {researcher_token}" \
-H "Content-Type: application/json" \
-d '{
"patients": [
{
"email": "test-patient+dqKVeMid8N41@example.com",
"firstName": "Test",
"lastName": "Patient",
"languagePreference": "en"
}
],
"suppressNotifications": true
}'
Response:
{
"totalProcessed": 1,
"successCount": 1,
"errorCount": 0,
"duplicatesCount": 0,
"errors": [],
"duplicates": [],
"successfulPatients": [
{
"patientIndex": 0,
"email": "test-patient+SavtDTm3meXJ@sampleresearch.com",
"referenceId": "626133e4-738b-41a3-bf26-651fa94d45f3"
}
]
}
Set suppressNotifications: true to prevent sending invitation emails to test patients.
4. Generate Patient Token
curl -X POST "https://api.healthex.io/v1/auth/token" \
-H "Content-Type: application/json" \
-d '{
"email": "test-patient+dqKVeMid8N41@example.com",
"password": "zkWZTH$$BmfTAOW4",
"projectId": "658ac9e4-2a8b-4775-a58f-06ef6d65d914"
}'
Response:
{
"token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...",
"expiration": 1738368725,
"user": {
"type": "PATIENT",
"id": "1addc6fa-3c59-4915-b0ba-ae2a31ff1f75",
"firstName": "Test",
"lastName": "Patient",
"isTestPatient": true
}
}
The projectId is used by the MCP endpoint for AI agent tracking, analytics, and to match patient consent against the project.
5. Update Consent
Update consent for the test patient against the project using the patient token:
curl -X POST "https://api.healthex.io/v1/projects/{projectId}/test-patients/{patientId}/consent" \
-H "Authorization: Bearer {patient_token}" \
-H "Content-Type: application/json" \
-d '{
"consentStatus": "OPTED_IN"
}'
Response:
{
"consentRecordId": "1addc6fa-3c59-4915-b0ba-ae2a31ff1f75"
}
The projectId in the URL must match the project ID associated with the patient token.
6. Upload Documents
Use the patient token to upload a zip file containing documents:
curl -X POST "https://api.healthex.io/v1/patients/{patientId}/upload-documents" \
-H "Authorization: Bearer {patient_token}" \
-F "file=@documents.zip"
Response:
{
"batchId": "1addc6fa-3c59-4915-b0ba-ae2a31ff1f75"
}
This endpoint requires authentication as the patient (using the token from step 4). The patientId in the URL must match the authenticated patient.
7. Call MCP Endpoint
curl -X POST "https://api.healthex.io/mcp" \
-H "Authorization: Bearer {patient_token}" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_health_summary",
"arguments": {}
}
}'
MCP Endpoint Reference
Endpoint
POST /mcp
Headers
| Header | Value | Required |
|---|---|---|
| Authorization | Bearer {patient_token} | Yes |
| Content-Type | application/json | Yes |
For test patients, the Accept header is automatically set. Regular MCP clients need Accept: application/json, text/event-stream.
Request Body
JSON-RPC 2.0 format:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tool_name",
"arguments": {}
}
}
Available Tools
get_health_summary
Get a comprehensive health overview including conditions, medications, allergies, and recent vitals.
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_health_summary",
"arguments": {}
}
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "# Health Summary for John Doe\n\n## Active Conditions\n- Type 2 Diabetes Mellitus (diagnosed 2020-03-15)\n- Essential Hypertension (diagnosed 2019-08-22)\n\n## Current Medications\n- Metformin 500mg twice daily\n- Lisinopril 10mg once daily\n\n## Allergies\n- Penicillin (severe - anaphylaxis)\n\n## Recent Vitals (2024-01-15)\n- Blood Pressure: 128/82 mmHg\n- Heart Rate: 72 bpm\n- Weight: 185 lbs"
}
]
}
}
search
Semantic search across all health records.
Request:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "search",
"arguments": {
"query": "diabetes medications"
}
}
}
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | string | Yes | Search query |
Response:
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [
{
"type": "text",
"text": "# Search Results for \"diabetes medications\"\n\n## Medication Records\n1. **Metformin 500mg** - Started 2020-03-20\n - Twice daily with meals\n - For Type 2 Diabetes management\n\n2. **Glipizide 5mg** - Started 2021-06-15, Ended 2022-01-10\n - Once daily before breakfast\n - Discontinued due to hypoglycemia\n\n## Clinical Notes\n- 2024-01-15: HbA1c improved to 6.8%, continue current diabetes regimen"
}
]
}
}
get_conditions
Get medical conditions history.
Request:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get_conditions",
"arguments": {
"years": 3,
"beforeDate": "2024-01-01"
}
}
}
| Parameter | Type | Required | Description |
|---|---|---|---|
| years | number | Years of history (default: 3) | |
| beforeDate | string | End date for pagination (YYYY-MM-DD) |
Response:
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [
{
"type": "text",
"text": "# Medical Conditions\n\n## Active Conditions\n| Condition | Onset Date | Status |\n|-----------|------------|--------|\n| Type 2 Diabetes Mellitus | 2020-03-15 | Active |\n| Essential Hypertension | 2019-08-22 | Active |\n| Hyperlipidemia | 2021-02-10 | Active |\n\n## Resolved Conditions\n| Condition | Onset Date | Resolved Date |\n|-----------|------------|---------------|\n| Acute Bronchitis | 2023-01-05 | 2023-01-20 |\n| Ankle Sprain | 2022-06-15 | 2022-08-01 |\n\n---\n_Metadata: { \"hasMoreData\": false, \"dateRange\": \"2021-01-01 to 2024-01-01\" }_"
}
]
}
}
get_medications
Get medication history with dosing details.
Request:
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "get_medications",
"arguments": {
"years": 3
}
}
}
| Parameter | Type | Required | Description |
|---|---|---|---|
| years | number | Years of history (default: 3) | |
| beforeDate | string | End date for pagination (YYYY-MM-DD) |
Response:
{
"jsonrpc": "2.0",
"id": 4,
"result": {
"content": [
{
"type": "text",
"text": "# Medications\n\n## Current Medications\n| Medication | Dosage | Frequency | Start Date | Prescriber |\n|------------|--------|-----------|------------|------------|\n| Metformin | 500mg | Twice daily | 2020-03-20 | Dr. Smith |\n| Lisinopril | 10mg | Once daily | 2019-09-01 | Dr. Smith |\n| Atorvastatin | 20mg | Once daily at bedtime | 2021-02-15 | Dr. Johnson |\n\n## Past Medications\n| Medication | Dosage | Start Date | End Date | Reason Stopped |\n|------------|--------|------------|----------|----------------|\n| Glipizide | 5mg | 2021-06-15 | 2022-01-10 | Hypoglycemia |\n\n---\n_Metadata: { \"hasMoreData\": false, \"dateRange\": \"2021-02-04 to 2024-02-04\" }_"
}
]
}
}
get_labs
Get laboratory test results.
Request:
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "get_labs",
"arguments": {
"years": 3
}
}
}
| Parameter | Type | Required | Description |
|---|---|---|---|
| years | number | Years of history (default: 3) | |
| beforeDate | string | End date for pagination (YYYY-MM-DD) |
Response:
{
"jsonrpc": "2.0",
"id": 5,
"result": {
"content": [
{
"type": "text",
"text": "# Laboratory Results\n\n## Recent Labs (2024-01-15)\n| Test | Result | Reference Range | Status |\n|------|--------|-----------------|--------|\n| HbA1c | 6.8% | 4.0-5.6% | High |\n| Fasting Glucose | 118 mg/dL | 70-100 mg/dL | High |\n| Total Cholesterol | 185 mg/dL | <200 mg/dL | Normal |\n| LDL Cholesterol | 98 mg/dL | <100 mg/dL | Normal |\n| HDL Cholesterol | 52 mg/dL | >40 mg/dL | Normal |\n| Creatinine | 0.9 mg/dL | 0.7-1.3 mg/dL | Normal |\n\n## Previous Labs (2023-07-20)\n| Test | Result | Reference Range | Status |\n|------|--------|-----------------|--------|\n| HbA1c | 7.2% | 4.0-5.6% | High |\n\n---\n_Metadata: { \"hasMoreData\": false, \"dateRange\": \"2021-02-04 to 2024-02-04\" }_"
}
]
}
}
get_vitals
Get vital signs (blood pressure, weight, etc.).
Request:
{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "get_vitals",
"arguments": {
"years": 3,
"vitals": ["Blood Pressure", "Weight"]
}
}
}
| Parameter | Type | Required | Description |
|---|---|---|---|
| years | number | Years of history (default: 3) | |
| beforeDate | string | End date for pagination (YYYY-MM-DD) | |
| vitals | array | Filter by vital types |
Vital types: Blood Pressure, Heart Rate, Body Temperature, Respiratory Rate, Oxygen Saturation, Weight, Height, Body Mass Index
Response:
{
"jsonrpc": "2.0",
"id": 6,
"result": {
"content": [
{
"type": "text",
"text": "# Vital Signs\n\n## Blood Pressure\n| Date | Systolic | Diastolic | Status |\n|------|----------|-----------|--------|\n| 2024-01-15 | 128 mmHg | 82 mmHg | Normal |\n| 2023-10-20 | 135 mmHg | 88 mmHg | Elevated |\n| 2023-07-12 | 142 mmHg | 92 mmHg | High |\n\n## Weight\n| Date | Weight | BMI |\n|------|--------|-----|\n| 2024-01-15 | 185 lbs | 27.4 |\n| 2023-10-20 | 188 lbs | 27.8 |\n| 2023-07-12 | 192 lbs | 28.4 |\n\n---\n_Metadata: { \"hasMoreData\": false, \"dateRange\": \"2021-02-04 to 2024-02-04\" }_"
}
]
}
}
get_allergies
Get allergy and intolerance records.
Request:
{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "get_allergies",
"arguments": {
"years": 5
}
}
}
| Parameter | Type | Required | Description |
|---|---|---|---|
| years | number | Years of history (default: 3) | |
| beforeDate | string | End date for pagination (YYYY-MM-DD) |
Response:
{
"jsonrpc": "2.0",
"id": 7,
"result": {
"content": [
{
"type": "text",
"text": "# Allergies & Intolerances\n\n| Allergen | Type | Severity | Reaction | Recorded Date |\n|----------|------|----------|----------|---------------|\n| Penicillin | Medication | Severe | Anaphylaxis | 2018-05-20 |\n| Sulfa drugs | Medication | Moderate | Rash, hives | 2019-03-15 |\n| Shellfish | Food | Mild | Gastrointestinal upset | 2020-08-10 |\n| Latex | Environmental | Moderate | Contact dermatitis | 2017-11-22 |\n\n---\n_Metadata: { \"hasMoreData\": false, \"dateRange\": \"2019-02-04 to 2024-02-04\" }_"
}
]
}
}
get_procedures
Get medical procedures and surgeries.
Request:
{
"jsonrpc": "2.0",
"id": 8,
"method": "tools/call",
"params": {
"name": "get_procedures",
"arguments": {
"years": 5
}
}
}
| Parameter | Type | Required | Description |
|---|---|---|---|
| years | number | Years of history (default: 3) | |
| beforeDate | string | End date for pagination (YYYY-MM-DD) |
Response:
{
"jsonrpc": "2.0",
"id": 8,
"result": {
"content": [
{
"type": "text",
"text": "# Procedures & Surgeries\n\n| Procedure | Date | Provider | Facility | Notes |\n|-----------|------|----------|----------|-------|\n| Colonoscopy | 2023-06-15 | Dr. Wilson | City Hospital | Screening, no polyps found |\n| Echocardiogram | 2022-11-08 | Dr. Chen | Heart Center | Normal ejection fraction |\n| MRI - Lumbar Spine | 2022-03-22 | Dr. Roberts | Imaging Center | Mild disc bulge L4-L5 |\n| Appendectomy | 2021-08-05 | Dr. Martinez | City Hospital | Laparoscopic, uncomplicated |\n\n---\n_Metadata: { \"hasMoreData\": false, \"dateRange\": \"2019-02-04 to 2024-02-04\" }_"
}
]
}
}
get_immunizations
Get vaccination records.
Request:
{
"jsonrpc": "2.0",
"id": 9,
"method": "tools/call",
"params": {
"name": "get_immunizations",
"arguments": {
"years": 10
}
}
}
| Parameter | Type | Required | Description |
|---|---|---|---|
| years | number | Years of history (default: 3) | |
| beforeDate | string | End date for pagination (YYYY-MM-DD) |
Response:
{
"jsonrpc": "2.0",
"id": 9,
"result": {
"content": [
{
"type": "text",
"text": "# Immunization Records\n\n| Vaccine | Date | Dose | Lot Number | Site |\n|---------|------|------|------------|------|\n| Influenza (Flu) | 2023-10-15 | Annual | FL2023-456 | Left arm |\n| COVID-19 (Pfizer) | 2023-09-20 | Booster #2 | EK9788 | Right arm |\n| Tdap | 2022-05-10 | Booster | TD2022-123 | Left arm |\n| Shingrix | 2021-03-15 | Dose 2 of 2 | SH789012 | Left arm |\n| Shingrix | 2021-01-10 | Dose 1 of 2 | SH789011 | Left arm |\n| Pneumococcal (PPSV23) | 2020-11-05 | Initial | PN456789 | Right arm |\n\n---\n_Metadata: { \"hasMoreData\": false, \"dateRange\": \"2014-02-04 to 2024-02-04\" }_"
}
]
}
}
get_visits
Get clinical visit history.
Request:
{
"jsonrpc": "2.0",
"id": 10,
"method": "tools/call",
"params": {
"name": "get_visits",
"arguments": {
"years": 3
}
}
}
| Parameter | Type | Required | Description |
|---|---|---|---|
| years | number | Years of history (default: 3) | |
| beforeDate | string | End date for pagination (YYYY-MM-DD) |
Response:
{
"jsonrpc": "2.0",
"id": 10,
"result": {
"content": [
{
"type": "text",
"text": "# Clinical Visits\n\n| Date | Type | Provider | Facility | Reason |\n|------|------|----------|----------|--------|\n| 2024-01-15 | Office Visit | Dr. Smith | Primary Care Clinic | Diabetes follow-up |\n| 2023-10-20 | Office Visit | Dr. Smith | Primary Care Clinic | Annual physical exam |\n| 2023-08-05 | Urgent Care | Dr. Lee | Urgent Care Center | Upper respiratory infection |\n| 2023-06-15 | Specialist | Dr. Wilson | GI Associates | Colonoscopy screening |\n| 2023-03-10 | Office Visit | Dr. Smith | Primary Care Clinic | Medication review |\n\n---\n_Metadata: { \"hasMoreData\": false, \"dateRange\": \"2021-02-04 to 2024-02-04\" }_"
}
]
}
}
search_clinical_notes
Search or retrieve clinical notes and documentation. Supports two modes:
- Search Mode: Search across all clinical notes using keywords/phrases
- Encounter Mode: Retrieve all notes for a specific visit/encounter
Search Mode Request:
{
"jsonrpc": "2.0",
"id": 11,
"method": "tools/call",
"params": {
"name": "search_clinical_notes",
"arguments": {
"query": "chest pain",
"years": 3
}
}
}
Encounter Mode Request:
{
"jsonrpc": "2.0",
"id": 11,
"method": "tools/call",
"params": {
"name": "search_clinical_notes",
"arguments": {
"encounterId": "eTOpusRp6P4wuw-OP2xdr0g3"
}
}
}
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | string | Conditional | Search keyword or phrase. Required if encounterId is not provided. |
| encounterId | string | Conditional | Encounter/visit ID from get_visits. Required if query is not provided. |
| years | number | Years of history (default: 3). Only used with query. | |
| beforeDate | string | End date for search (YYYY-MM-DD). Only used with query. |
Response (Search Mode):
{
"jsonrpc": "2.0",
"id": 11,
"result": {
"content": [
{
"type": "text",
"text": "# Clinical Notes Search: \"chest pain\"\n\n## Visit Note - 2023-08-05 (Urgent Care)\n**Provider:** Dr. Lee\n\n**Chief Complaint:** Patient presents with chest pain that started this morning.\n\n**History of Present Illness:** 52-year-old male with history of HTN and diabetes presents with substernal chest pain. Pain is described as pressure-like, non-radiating, 4/10 intensity. No shortness of breath, diaphoresis, or nausea. Pain not related to exertion.\n\n**Assessment:** Atypical chest pain, likely musculoskeletal. Low suspicion for ACS given presentation.\n\n**Plan:** EKG normal, troponin negative x2. Discharged with follow-up to PCP in 1 week.\n\n---\n_Found 1 matching note(s)_"
}
]
}
}
update_records
Request a background refresh of health records from connected locations. Responses are JSON (see MCP Server Tools) with status, message, and sometimes reconnectUrl.
Possible statuses:
UPDATE_IN_PROGRESS— A refresh is already runningUPDATE_STARTED— New retrieval work was successfully startedPARTIAL_UPDATE— Refresh started but some locations couldn't be reached (includesreconnectUrl)ACTION_NEEDED— All locations failed or none connected (includesreconnectUrl)THROTTLED— Daily refresh limit reached (includesreconnectUrl)
Request:
{
"jsonrpc": "2.0",
"id": 12,
"method": "tools/call",
"params": {
"name": "update_records",
"arguments": {}
}
}
Response (example — UPDATE_STARTED):
{
"jsonrpc": "2.0",
"id": 12,
"result": {
"content": [
{
"type": "text",
"text": "{\n \"status\": \"UPDATE_STARTED\",\n \"message\": \"A background refresh of your health records has been initiated. This typically takes only a few minutes, although some records may take longer (up to an hour) to complete.\"\n}"
}
],
"structuredContent": {
"status": "UPDATE_STARTED",
"message": "A background refresh of your health records has been initiated. This typically takes only a few minutes, although some records may take longer (up to an hour) to complete."
}
}
}
check_records_status
Read-only: does not start a refresh or consume the daily MCP refresh allowance. Returns one of two shapes (never both): when idle, { "lastUpdated": ... }; when a refresh is running, { "updateInProgress": true }.
Request:
{
"jsonrpc": "2.0",
"id": 13,
"method": "tools/call",
"params": {
"name": "check_records_status",
"arguments": {}
}
}
Response (idle — last sync only):
{
"jsonrpc": "2.0",
"id": 13,
"result": {
"content": [
{
"type": "text",
"text": "{\n \"lastUpdated\": \"2024-01-15T14:30:00.000Z\"\n}"
}
],
"structuredContent": {
"lastUpdated": "2024-01-15T14:30:00.000Z"
}
}
}
Response (refresh in progress):
{
"jsonrpc": "2.0",
"id": 13,
"result": {
"content": [
{
"type": "text",
"text": "{\n \"updateInProgress\": true\n}"
}
],
"structuredContent": {
"updateInProgress": true
}
}
}
update_and_check_recent_records (deprecated)
Use check_records_status for structured sync status and update_records to request a refresh. This tool remains for backward compatibility.
Legacy behavior: Read-only message, optional lastUpdated, and reconnectUrl when not in progress; does not start a refresh.
Request:
{
"jsonrpc": "2.0",
"id": 14,
"method": "tools/call",
"params": {
"name": "update_and_check_recent_records",
"arguments": {}
}
}
Response (shape example):
{
"jsonrpc": "2.0",
"id": 14,
"result": {
"content": [
{
"type": "text",
"text": "{\n \"message\": \"Your health records were last updated on 1/15/2024. Visit the URL below to update your records.\",\n \"lastUpdated\": \"2024-01-15T14:30:00.000Z\",\n \"reconnectUrl\": \"https://app.healthex.io/...\"\n}"
}
],
"structuredContent": {
"message": "Your health records were last updated on 1/15/2024. Visit the URL below to update your records.",
"lastUpdated": "2024-01-15T14:30:00.000Z",
"reconnectUrl": "https://app.healthex.io/..."
}
}
}
Other MCP Methods
Initialize
Initialize the MCP session (optional for test patients).
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {
"name": "Test Client",
"version": "1.0.0"
}
}
}
List Tools
Get all available tools.
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": {}
}
Error Responses
HTTP Errors
| Status | Description |
|---|---|
| 401 | Unauthorized - invalid or missing token |
| 403 | Forbidden - patient ID mismatch |
JSON-RPC Errors
| Code | Meaning |
|---|---|
| -32700 | Parse error |
| -32600 | Invalid request |
| -32601 | Method not found |
| -32602 | Invalid params |
| -32603 | Internal error |
| -32000 | Server error (e.g., patient context not found) |
Complete Test Flow Example
# 1. Generate admin token using API Key/Secret
curl -X POST "https://api.healthex.io/v1/auth/token" \
-H "Content-Type: application/json" \
-d '{"apiKey": "{your_api_key}", "apiSecret": "{your_api_secret}"}'
# 2. Create test patient (as org admin)
curl -X POST "https://api.healthex.io/v1/organizations/{orgId}/test-patients" \
-H "Authorization: Bearer {admin_token}"
# 3. Add test patient to project (as researcher/admin)
curl -X POST "https://api.healthex.io/v1/projects/{projectId}/patients" \
-H "Authorization: Bearer {researcher_token}" \
-H "Content-Type: application/json" \
-d '{"patients": [{"email": "test-patient+xxx@example.com", "firstName": "Test", "lastName": "Patient", "languagePreference": "en"}], "suppressNotifications": true}'
# 4. Get patient token with projectId
curl -X POST "https://api.healthex.io/v1/auth/token" \
-H "Content-Type: application/json" \
-d '{"email": "test-patient+xxx@example.com", "password": "generated_password", "projectId": "{projectId}"}'
# 5. Update consent (as patient)
curl -X POST "https://api.healthex.io/v1/projects/{projectId}/test-patients/{patientId}/consent" \
-H "Authorization: Bearer {patient_token}" \
-H "Content-Type: application/json" \
-d '{"consentStatus": "OPTED_IN"}'
# 6. Upload test documents (as patient)
curl -X POST "https://api.healthex.io/v1/patients/{patientId}/upload-documents" \
-H "Authorization: Bearer {patient_token}" \
-F "file=@documents.zip"
# 7. Call MCP tools
curl -X POST "https://api.healthex.io/mcp" \
-H "Authorization: Bearer {patient_token}" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_health_summary","arguments":{}}}'