particlehealth
Query Particle Health patient records across connected clinical networks.
Should I use this
Quality & Safety
Findings (1)
- LOWin particle_search_network_participants
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"particlehealth": {
"url": "https://particlehealth.usefulapi.io/mcp"
}
}
}Remote endpoints
https://particlehealth.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (11)
🟢particle_get_patient(particle_patient_id)
Fetch a single patient record by its Particle patient id. Endpoint: GET /api/v2/patients/{particle_patient_id}.
Input Schema
{
"type": "object",
"properties": {
"particle_patient_id": {
"type": "string",
"description": "Particle-assigned patient id (from submit/search)."
}
},
"required": [
"particle_patient_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢particle_search_patient(given_name, family_name, date_of_birth, gender, patient_id, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"given_name": {
"type": "string",
"description": "Patient's legal first / given name."
},
"family_name": {
"type": "string",
"description": "Patient's legal last / family name."
},
"date_of_birth": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date of birth, YYYY-MM-DD."
},
"gender": {
"type": "string",
"enum": [
"MALE",
"FEMALE"
],
"description": "Administrative gender: MALE or FEMALE."
},
"patient_id": {
"type": "string",
"description": "Your own external identifier for this patient (echoed back by Particle)."
},
"address_city": {
"type": "string",
"description": "City of the patient's home address."
},
"address_state": {
"type": "string",
"description": "Two-letter US state code, e.g. NY."
},
"postal_code": {
"type": "string",
"description": "5-digit ZIP / postal code."
},
"address_lines": {
"description": "Street address lines, e.g. [\"123 Main St\"].",
"type": "array",
"items": {
"type": "string"
}
},
"email": {
"description": "Patient email address.",
"type": "string"
},
"telephone": {
"description": "Patient phone number.",
"type": "string"
},
"ssn": {
"description": "Social Security Number (optional; improves demographic match quality).",
"type": "string"
},
"consent": {
"description": "Consent objects, if required by your Particle data-sharing agreement.",
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
},
"required": [
"given_name",
"family_name",
"date_of_birth",
"gender",
"patient_id",
"address_city",
"address_state",
"postal_code"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢particle_get_query_status(particle_patient_id, query_id)
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.
Input Schema
{
"type": "object",
"properties": {
"particle_patient_id": {
"type": "string",
"description": "Particle-assigned patient id."
},
"query_id": {
"description": "Specific query id; omit for the latest COMPLETE query.",
"type": "string"
}
},
"required": [
"particle_patient_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢particle_get_fhir(particle_patient_id, _since, _count, _page_token)
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.
Input Schema
{
"type": "object",
"properties": {
"particle_patient_id": {
"type": "string",
"description": "Particle-assigned patient id."
},
"_since": {
"description": "RFC3339 timestamp; only return resources updated since then.",
"type": "string"
},
"_count": {
"description": "Page size (max resources per page).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"_page_token": {
"description": "Opaque token from a previous page's `link` to fetch the next page.",
"type": "string"
}
},
"required": [
"particle_patient_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢particle_get_fhir_by_type(particle_patient_id, resource_type, _since, _count, _page_token)
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}.
Input Schema
{
"type": "object",
"properties": {
"particle_patient_id": {
"type": "string",
"description": "Particle-assigned patient id."
},
"resource_type": {
"type": "string",
"description": "FHIR resource type, e.g. Condition, MedicationRequest, Observation, AllergyIntolerance."
},
"_since": {
"description": "RFC3339 timestamp; only return resources updated since then.",
"type": "string"
},
"_count": {
"description": "Page size (max resources per page).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"_page_token": {
"description": "Opaque token from a previous page's `link` to fetch the next page.",
"type": "string"
}
},
"required": [
"particle_patient_id",
"resource_type"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢particle_get_flat(particle_patient_id, _since, domain)
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.
Input Schema
{
"type": "object",
"properties": {
"particle_patient_id": {
"type": "string",
"description": "Particle-assigned patient id."
},
"_since": {
"description": "RFC3339 timestamp; only return data updated since then.",
"type": "string"
},
"domain": {
"description": "Filter to a single clinical domain, e.g. Condition, Medication, Encounter.",
"type": "string"
}
},
"required": [
"particle_patient_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢particle_get_ccda(particle_patient_id)
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.
Input Schema
{
"type": "object",
"properties": {
"particle_patient_id": {
"type": "string",
"description": "Particle-assigned patient id."
}
},
"required": [
"particle_patient_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢particle_search_network_participants(state, zipcode, continuation_token)
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).
Input Schema
{
"type": "object",
"properties": {
"state": {
"description": "Two-letter US state code to filter participants, e.g. NY.",
"type": "string"
},
"zipcode": {
"description": "5-digit ZIP code to filter participants (ignored if `state` is set).",
"type": "string"
},
"continuation_token": {
"description": "Token from a previous response to fetch the next page.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢particle_get_patient_documents(patient_id)
List the documents uploaded / available for a patient. Endpoint: GET /api/v1/documents/{patient_id}.
Input Schema
{
"type": "object",
"properties": {
"patient_id": {
"type": "string",
"description": "Patient id whose documents to list."
}
},
"required": [
"patient_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴particle_submit_patient(given_name, family_name, date_of_birth, gender, patient_id, ...)
⚠️ 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.
Input Schema
{
"type": "object",
"properties": {
"given_name": {
"type": "string",
"description": "Patient's legal first / given name."
},
"family_name": {
"type": "string",
"description": "Patient's legal last / family name."
},
"date_of_birth": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date of birth, YYYY-MM-DD."
},
"gender": {
"type": "string",
"enum": [
"MALE",
"FEMALE"
],
"description": "Administrative gender: MALE or FEMALE."
},
"patient_id": {
"type": "string",
"description": "Your own external identifier for this patient (echoed back by Particle)."
},
"address_city": {
"type": "string",
"description": "City of the patient's home address."
},
"address_state": {
"type": "string",
"description": "Two-letter US state code, e.g. NY."
},
"postal_code": {
"type": "string",
"description": "5-digit ZIP / postal code."
},
"address_lines": {
"description": "Street address lines, e.g. [\"123 Main St\"].",
"type": "array",
"items": {
"type": "string"
}
},
"email": {
"description": "Patient email address.",
"type": "string"
},
"telephone": {
"description": "Patient phone number.",
"type": "string"
},
"ssn": {
"description": "Social Security Number (optional; improves demographic match quality).",
"type": "string"
},
"consent": {
"description": "Consent objects, if required by your Particle data-sharing agreement.",
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
},
"required": [
"given_name",
"family_name",
"date_of_birth",
"gender",
"patient_id",
"address_city",
"address_state",
"postal_code"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴particle_create_query(particle_patient_id, purpose_of_use, hints, specialties)
⚠️ 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.
Input Schema
{
"type": "object",
"properties": {
"particle_patient_id": {
"type": "string",
"description": "Particle-assigned patient id to run the query for."
},
"purpose_of_use": {
"type": "string",
"description": "Purpose of use for the request, e.g. TREATMENT."
},
"hints": {
"description": "Postal codes to hint where records may be found.",
"type": "array",
"items": {
"type": "string"
}
},
"specialties": {
"description": "Specialties to focus the query, e.g. [\"ONCOLOGY\"].",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"particle_patient_id",
"purpose_of_use"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence