usefulapi

Particle Health MCP server. Query Particle Health patient records across connected clinical networks.

Claude

  1. Open Settings → Connectors → Add custom connector
  2. Paste this URL:
    https://particlehealth.usefulapi.io/mcp
  3. Authenticate with Particle Health when prompted

Cursor · VS Code · Windsurf · Cline

Add to your MCP config, then reload & authorize:

{
  "mcpServers": {
    "particlehealth": {
      "url": "https://particlehealth.usefulapi.io/mcp"
    }
  }
}
live11 toolsFree 100 tool calls / monthPro $9/mo · $90/yr

Tools 11

ToolTypeWhat it does
particle_get_patientread
Get patient record
Fetch a single patient record by its Particle patient id. Endpoint: GET /api/v2/patients/{particle_patient_id}.
particle_search_patientread
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_statusread
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_fhirread
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_typeread
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_flatread
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_ccdaread
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_participantsread
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_documentsread
List patient documents
List the documents uploaded / available for a patient. Endpoint: GET /api/v1/documents/{patient_id}.
particle_submit_patientwrite
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_querywrite
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.

Pricing

PlanPriceLimit
Free$0100 tool calls / month
Pro$9/mo · $90/yrUnlimited

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.