particlehealth

Query Particle Health patient records across connected clinical networks.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
99%
Naming quality
78%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'particle_search_network_participants' name length outside 3-30 rangein particle_search_network_participants

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,343Tokens (tool definitions)
~1.8 KBTypical response size
Moderate attention impact (1.83% of 128k context)

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-http

What it can do

Tool inventory

Tools (11)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded11 tools