# Vital MCP by usefulapi

> Read wearables and lab health data — sleep, activity, workouts, timeseries, lab tests and orders.

- name: io.usefulapi/vital
- version: 1.11.1
- connection class: R2 (oauth_consent_once)
- trust: 58/100 flags: duplicate-repo, unreachable
- quality: 85/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.usefulapi%2Fvital
- tools: https://api.protogrid.dev/v1/servers/io.usefulapi%2Fvital/tools

**An agent can connect after a one-time OAuth consent by a human.** Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.

## Connection (mcpServers)

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


## Trust

- hygiene: 60
- liveness: 0
- freshness: 100
- provenance: 85
- drivers: +repository +dns-namespace +website -unreachable(6 failures) +updated-11d-ago -duplicate-repo(333 names)
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 85/100 (good)

### protocol: n/a (weight 25)

- n/a `protocol.modern`, `protocol.stateless`, `protocol.transport`, `protocol.list_ttl`: no remote answered a protocol handshake (not probed yet, unreachable, or local-only)

### authorization: 83 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- warn `auth.cimd`: only Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMD
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 21 of 21 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: vital_get_user (destructiveHint, idempotentHint, openWorldHint); vital_resolve_user (destructiveHint, idempotentHint, openWorldHint); vital_get_user_connected_providers (destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 3,054 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history not recorded yet

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 21, about 3,054 tokens to load them all
- badge: [![protogrid quality](https://protogrid.dev/badge/io.usefulapi/vital.svg)](https://protogrid.dev/servers/io.usefulapi/vital)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://vital.usefulapi.io/mcp (streamable-http, auth oauth2, reachable false, uptime30d 0.85897434)

## Packages

_none_

## Tools (21)

- `vital_create_link_token`: Creates a short-lived Link token to connect a user's wearable/provider (no health data is modified). Vital API: POST /v2/link/token.
- `vital_create_user`: Creates a Vital user record (additive). Returns the Vital user_id. Vital API: POST /v2/user.
- `vital_get_activity`: Get activity summaries for a user over a date range. Vital API: GET /v2/summary/activity/{user_id}.
- `vital_get_body`: Get body summaries for a user over a date range. Vital API: GET /v2/summary/body/{user_id}.
- `vital_get_lab_test`: Get a single lab test by id. Vital API: GET /v3/lab_tests/{lab_test_id}.
- `vital_get_meal`: Get meal summaries for a user over a date range. Vital API: GET /v2/summary/meal/{user_id}.
- `vital_get_menstrual_cycle`: Get menstrual cycle summaries for a user over a date range. Vital API: GET /v2/summary/menstrual_cycle/{user_id}.
- `vital_get_order`: Get a single lab-test order by id. Vital API: GET /v3/order/{order_id}.
- `vital_get_order_results`: Get the lab-test results for an order. Vital API: GET /v3/order/{order_id}/result.
- `vital_get_profile`: Get a user's profile summary (height, and other static attributes). Vital API: GET /v2/summary/profile/{user_id}.
- `vital_get_sleep`: Get sleep summaries for a user over a date range. Vital API: GET /v2/summary/sleep/{user_id}.
- `vital_get_timeseries`: Get timeseries data points for a user and resource over a date range. Supported resources: heartrate, hrv, glucose, blood_pressure, blood_oxygen, steps, respiratory_rate, body_weight, body_fat, distance, water, vo2_max, stress_level, mindfulness_minutes, calories_active, calories_basal, floors_climbed, caffeine, cholesterol. Vital API: GET /v2/timeseries/{user_id}/{resource}.
- `vital_get_user`: Get a single Vital user by their Vital user_id. Vital API: GET /v2/user/{user_id}.
- `vital_get_user_connected_providers`: List the wearables/data sources (providers) a user has connected. Vital API: GET /v2/user/providers/{user_id}.
- `vital_get_user_latest_info`: Get the latest device/app info reported for a user. Vital API: GET /v2/user/{user_id}/info/latest.
- `vital_get_workouts`: Get workouts summaries for a user over a date range. Vital API: GET /v2/summary/workouts/{user_id}.
- `vital_list_lab_tests`: List the lab tests available/configured for your team. Vital API: GET /v3/lab_tests.
- `vital_list_orders`: List lab-test orders with filters, paginated. Vital API: GET /v3/orders.
- `vital_list_providers`: List all providers (wearables/data sources) Vital supports. Vital API: GET /v2/providers.
- `vital_list_users`: List all Vital users in your team, paginated. Vital API: GET /v2/user.
- `vital_resolve_user`: Look up a Vital user by your own client_user_id (the stable id you assigned). Vital API: GET /v2/user/resolve/{client_user_id}.
