Particle Health MCP server. Query Particle Health patient records across connected clinical networks.
Add to your MCP config, then reload & authorize:
{
"mcpServers": {
"particlehealth": {
"url": "https://particlehealth.usefulapi.io/mcp"
}
}
}| Tool | Type | What it does |
|---|---|---|
particle_get_patient | read | Get patient record Fetch a single patient record by its Particle patient id. Endpoint: GET /api/v2/patients/{particle_patient_id}. |
particle_search_patient | read | Search for a patient Search for an existing patient by demographics (non-mutating). Returns an array of matching patient objects (or a 204 message when none match). Endpoint: POST /api/v2/patients/search. |
particle_get_query_status | read | Get query status Get the status of a clinical-record retrieval query (state, timing, demographics, files). Omit query_id to get the latest COMPLETE query. Endpoint: GET /api/v2/patients/{particle_patient_id}/query. |
particle_get_fhir | read | Get FHIR bundle Retrieve the patient's complete clinical record as a FHIR searchset Bundle. Supports incremental sync and pagination. Endpoint: GET /api/v2/patients/{particle_patient_id}/fhir. |
particle_get_fhir_by_type | read | Get FHIR resources by type Retrieve only one FHIR resource type for a patient (e.g. Condition, MedicationRequest, Observation) as a Bundle. Supports the same pagination as particle_get_fhir. Endpoint: GET /api/v2/patients/{particle_patient_id}/fhir/{type}. |
particle_get_flat | read | Get flattened clinical data Retrieve the patient's clinical data in Particle's flattened (de-nested) format, easier to read than raw FHIR. Optionally filter to one domain. Endpoint: GET /api/v2/patients/{particle_patient_id}/flat. |
particle_get_ccda | read | Get C-CDA document(s) Retrieve the patient's C-CDA clinical document(s). May be large and returned as XML/text — parsed if JSON, otherwise passed through as-is. Endpoint: GET /api/v2/patients/{particle_patient_id}/ccda. |
particle_search_network_participants | read | Search network participants List the health-data network participants (organizations Particle can query). Optionally filter by state or zipcode, and page with continuation_token. Endpoint: GET /api/v1/networkparticipants (with /state/{state} and /zipcode/{zip} variants). |
particle_get_patient_documents | read | List patient documents List the documents uploaded / available for a patient. Endpoint: GET /api/v1/documents/{patient_id}. |
particle_submit_patient | write | Submit (register) patient (WRITE) ⚠️ WRITE: register a new patient with Particle Health. Returns the patient with a system-generated particle_patient_id (use it for subsequent queries). Endpoint: POST /api/v2/patients. |
particle_create_query | write | Create clinical-record query (WRITE) ⚠️ WRITE: initiate a nationwide clinical-record retrieval for a patient. Returns a query_id — poll particle_get_query_status for progress. Endpoint: POST /api/v2/patients/{particle_patient_id}/query. |
| Plan | Price | Limit |
|---|---|---|
| Free | $0 | 100 tool calls / month |
| Pro | $9/mo · $90/yr | Unlimited |
This is a Model Context Protocol endpoint — meant to be connected from an AI client, not opened in a browser. An invalid_token response at the URL is the auth gate working as designed; clients authenticate automatically.