# io.usefulapi/particlehealth (remote · particlehealth.usefulapi.io)

Query Particle Health patient records across connected clinical networks.

- Trust score: 33/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-04

## Components

- remote · `particlehealth.usefulapi.io`: 33/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-particlehealth/particlehealth.md), [page](https://verifymcp.io/servers/io-usefulapi-particlehealth/particlehealth)

## Channel facts

- Endpoint: `https://particlehealth.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-04.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to connect, but we couldn't read the whole tool list to see what that exposes.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 0/100
  - Schema blocked by authentication: the endpoint requires auth we don't have to read it.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage blocked by authentication: the endpoint requires auth we don't have to read its tools.
- **Tool Safety**: 0/100
  - Tool safety blocked by authentication: the endpoint requires auth we don't have to read its tools.
- **Capabilities**: 0/100
  - Capabilities blocked by authentication: the endpoint requires auth we don't have to read them.

**Unverified: 5 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the io.usefulapi/particlehealth MCP server?

io.usefulapi/particlehealth is a hosted endpoint at https://particlehealth.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-particlehealth 'https://particlehealth.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-particlehealth": {
      "url": "https://particlehealth.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-particlehealth": {
      "type": "http",
      "url": "https://particlehealth.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-particlehealth]
url = "https://particlehealth.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-particlehealth": {
      "type": "remote",
      "url": "https://particlehealth.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-particlehealth --url 'https://particlehealth.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-particlehealth:
    url: "https://particlehealth.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-particlehealth": {
      "Transport": "http",
      "Url": "https://particlehealth.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-particlehealth -t streamable-http -u 'https://particlehealth.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-particlehealth": {
      "type": "http",
      "url": "https://particlehealth.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-04 (score 33, 0)

- [security regression] Endpoint reachability: not serving MCP → behind authorisation
- [security] Tool safety: Tool safety blocked by authentication: the endpoint requires auth we don't have to read its tools.
- [functional] Tool coverage: Tool coverage blocked by authentication: the endpoint requires auth we don't have to read its tools.
- [functional] Schema quality: Schema blocked by authentication: the endpoint requires auth we don't have to read it.
- [functional] Capabilities: Capabilities blocked by authentication: the endpoint requires auth we don't have to read them.

### 2026-10-03 (score 33, −30)

- [security regression] Endpoint reachability: reachable → not serving MCP
- [security regression] Tool safety: pass → unverified
- [security] Authorization: Authorisation not fully verified: no authorisation is required to connect, but we couldn't read the whole tool list to see what that exposes.
- [functional regression] Capabilities: fail → unverified
- [functional regression] Tool coverage: 100 → unverified

### 2026-10-02 (score 63, +30)

- [security improvement] Injection markers: unverified → pass
- [security] First check of Judged manipulation: pass
- [security] Authorization: Authorisation not fully verified: this server exposes a tool marked destructive (particle_submit_patient) and its handshake is open, but we could not confirm whether a tool call is gated, so we do not assert it is callable unauthenticated.
- [functional regression] MCP protocol: unverified → fail
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Destructive annotations: pass
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 100

### 2026-10-01 (score 33, +5)

- [security improvement] HTTPS: unverified → pass

### 2026-09-30 (score 28, +10)

- [security improvement] Transport: fail → pass
- [security] Authorization: Authorisation not fully verified: no authorisation is required to connect, but we couldn't read the whole tool list to see what that exposes.

### 2026-09-29 (score 18)

First indexed and scored.

## MCP tools (11)

### `particle_get_patient` (~53 tokens)

Get patient record

Fetch a single patient record by its Particle patient id. Endpoint: GET /api/v2/patients/{particle_patient_id}.

Input parameters:

- `particle_patient_id` (string, required): Particle-assigned patient id (from submit/search).

### `particle_search_patient` (~255 tokens)

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.

Input parameters:

- `address_city` (string, required): City of the patient's home address.
- `address_lines` (array): Street address lines, e.g. ["123 Main St"].
- `address_state` (string, required): Two-letter US state code, e.g. NY.
- `consent` (array): Consent objects, if required by your Particle data-sharing agreement.
- `date_of_birth` (string, required): Date of birth, YYYY-MM-DD.
- `email` (string): Patient email address.
- `family_name` (string, required): Patient's legal last / family name.
- `gender` (string, required): Administrative gender: MALE or FEMALE.
- `given_name` (string, required): Patient's legal first / given name.
- `patient_id` (string, required): Your own external identifier for this patient (echoed back by Particle).
- `postal_code` (string, required): 5-digit ZIP / postal code.
- `ssn` (string): Social Security Number (optional; improves demographic match quality).
- `telephone` (string): Patient phone number.

### `particle_get_query_status` (~88 tokens)

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.

Input parameters:

- `particle_patient_id` (string, required): Particle-assigned patient id.
- `query_id` (string): Specific query id; omit for the latest COMPLETE query.

### `particle_get_fhir` (~121 tokens)

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.

Input parameters:

- `_count` (integer): Page size (max resources per page).
- `_page_token` (string): Opaque token from a previous page's `link` to fetch the next page.
- `_since` (string): RFC3339 timestamp; only return resources updated since then.
- `particle_patient_id` (string, required): Particle-assigned patient id.

### `particle_get_fhir_by_type` (~166 tokens)

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}.

Input parameters:

- `_count` (integer): Page size (max resources per page).
- `_page_token` (string): Opaque token from a previous page's `link` to fetch the next page.
- `_since` (string): RFC3339 timestamp; only return resources updated since then.
- `particle_patient_id` (string, required): Particle-assigned patient id.
- `resource_type` (string, required): FHIR resource type, e.g. Condition, MedicationRequest, Observation, AllergyIntolerance.

### `particle_get_flat` (~112 tokens)

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.

Input parameters:

- `_since` (string): RFC3339 timestamp; only return data updated since then.
- `domain` (string): Filter to a single clinical domain, e.g. Condition, Medication, Encounter.
- `particle_patient_id` (string, required): Particle-assigned patient id.

### `particle_get_ccda` (~71 tokens)

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.

Input parameters:

- `particle_patient_id` (string, required): Particle-assigned patient id.

### `particle_search_network_participants` (~122 tokens)

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).

Input parameters:

- `continuation_token` (string): Token from a previous response to fetch the next page.
- `state` (string): Two-letter US state code to filter participants, e.g. NY.
- `zipcode` (string): 5-digit ZIP code to filter participants (ignored if `state` is set).

### `particle_get_patient_documents` (~47 tokens)

List patient documents

List the documents uploaded / available for a patient. Endpoint: GET /api/v1/documents/{patient_id}.

Input parameters:

- `patient_id` (string, required): Patient id whose documents to list.

### `particle_submit_patient` (~255 tokens)

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.

Input parameters:

- `address_city` (string, required): City of the patient's home address.
- `address_lines` (array): Street address lines, e.g. ["123 Main St"].
- `address_state` (string, required): Two-letter US state code, e.g. NY.
- `consent` (array): Consent objects, if required by your Particle data-sharing agreement.
- `date_of_birth` (string, required): Date of birth, YYYY-MM-DD.
- `email` (string): Patient email address.
- `family_name` (string, required): Patient's legal last / family name.
- `gender` (string, required): Administrative gender: MALE or FEMALE.
- `given_name` (string, required): Patient's legal first / given name.
- `patient_id` (string, required): Your own external identifier for this patient (echoed back by Particle).
- `postal_code` (string, required): 5-digit ZIP / postal code.
- `ssn` (string): Social Security Number (optional; improves demographic match quality).
- `telephone` (string): Patient phone number.

### `particle_create_query` (~133 tokens)

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.

Input parameters:

- `hints` (array): Postal codes to hint where records may be found.
- `particle_patient_id` (string, required): Particle-assigned patient id to run the query for.
- `purpose_of_use` (string, required): Purpose of use for the request, e.g. TREATMENT.
- `specialties` (array): Specialties to focus the query, e.g. ["ONCOLOGY"].

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-particlehealth/particlehealth#diagnostics

## Score history

- 2026-10-04: 33
- 2026-10-03: 33
- 2026-10-02: 63
- 2026-10-01: 33
- 2026-09-30: 28
- 2026-09-29: 18

## Common questions

### What is the io.usefulapi/particlehealth MCP server?

io.usefulapi/particlehealth is an MCP server listed in the public MCP registry as io.usefulapi/particlehealth. Query Particle Health patient records across connected clinical networks. This page covers its hosted endpoint (https://particlehealth.usefulapi.io/mcp).

### Is the io.usefulapi/particlehealth MCP server safe to use?

io.usefulapi/particlehealth scores 33 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.usefulapi/particlehealth MCP server expose?

io.usefulapi/particlehealth exposes 11 tools: particle_get_patient, particle_search_patient, particle_get_query_status, particle_get_fhir, particle_get_fhir_by_type, and 6 more. Their descriptions and schemas cost roughly 1,423 tokens of context every time the server is loaded.

### Does the io.usefulapi/particlehealth MCP server require authentication?

No. We connected to io.usefulapi/particlehealth without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the io.usefulapi/particlehealth MCP server still maintained?

io.usefulapi/particlehealth is still listed as active in the MCP registry. We last reached this channel on 4 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://particlehealth.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-particlehealth/particlehealth.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-particlehealth/particlehealth.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-particlehealth/particlehealth
