Read wearables and lab health data — sleep, activity, workouts, timeseries, lab tests and orders.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Creates a short-lived Link token to connect a user's wearable/provider (no health data is modified). Vital API: POST /v2/link/token.
The Vital user id to create the link token for (required).
Pre-select a single provider slug to connect.
URL to redirect to after the connection flow.
Restrict the connectable providers to this list of slugs.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Creates a short-lived Link token to connect a user's wearable/provider (no health data is modified). Vital API: POST /v2/link/token.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | The Vital user id to create the link token for (required). |
| provider | string | Pre-select a single provider slug to connect. |
| redirect_url | string | URL to redirect to after the connection flow. |
| filter_on_providers | array | Restrict the connectable providers to this list of slugs. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id"
],
"properties": {
"user_id": {
"type": "string",
"description": "The Vital user id to create the link token for (required)."
},
"provider": {
"type": "string",
"description": "Pre-select a single provider slug to connect."
},
"redirect_url": {
"type": "string",
"description": "URL to redirect to after the connection flow."
},
"filter_on_providers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Restrict the connectable providers to this list of slugs."
}
}
}Creates a Vital user record (additive). Returns the Vital user_id. Vital API: POST /v2/user.
| Argument | Type | Description |
|---|---|---|
| ingestion_end | string | Latest date to ingest data to (yyyy-mm-dd). |
| client_user_id* | string | Your own stable id for the user (required). |
| ingestion_start | string | Earliest date to ingest data from (yyyy-mm-dd). |
| fallback_time_zone | string | IANA time zone used if the provider doesn't report one. |
| fallback_birth_date | string | Fallback birth date yyyy-mm-dd. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"client_user_id"
],
"properties": {
"ingestion_end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Latest date to ingest data to (yyyy-mm-dd)."
},
"client_user_id": {
"type": "string",
"description": "Your own stable id for the user (required)."
},
"ingestion_start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Earliest date to ingest data from (yyyy-mm-dd)."
},
"fallback_time_zone": {
"type": "string",
"description": "IANA time zone used if the provider doesn't report one."
},
"fallback_birth_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Fallback birth date yyyy-mm-dd."
}
}
}Get activity summaries for a user over a date range. Vital API: GET /v2/summary/activity/{user_id}.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | The Vital user id (UUID). |
| end_date | string | End date yyyy-mm-dd (inclusive). Defaults to today upstream. |
| provider | string | Filter to a single provider slug (e.g. oura, fitbit). |
| start_date* | string | Start date yyyy-mm-dd (inclusive, required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id",
"start_date"
],
"properties": {
"user_id": {
"type": "string",
"description": "The Vital user id (UUID)."
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End date yyyy-mm-dd (inclusive). Defaults to today upstream."
},
"provider": {
"type": "string",
"description": "Filter to a single provider slug (e.g. oura, fitbit)."
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date yyyy-mm-dd (inclusive, required)."
}
}
}Get body summaries for a user over a date range. Vital API: GET /v2/summary/body/{user_id}.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | The Vital user id (UUID). |
| end_date | string | End date yyyy-mm-dd (inclusive). Defaults to today upstream. |
| provider | string | Filter to a single provider slug (e.g. oura, fitbit). |
| start_date* | string | Start date yyyy-mm-dd (inclusive, required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id",
"start_date"
],
"properties": {
"user_id": {
"type": "string",
"description": "The Vital user id (UUID)."
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End date yyyy-mm-dd (inclusive). Defaults to today upstream."
},
"provider": {
"type": "string",
"description": "Filter to a single provider slug (e.g. oura, fitbit)."
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date yyyy-mm-dd (inclusive, required)."
}
}
}Get a single lab test by id. Vital API: GET /v3/lab_tests/{lab_test_id}.
| Argument | Type | Description |
|---|---|---|
| lab_test_id* | string | The lab test id (UUID). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"lab_test_id"
],
"properties": {
"lab_test_id": {
"type": "string",
"description": "The lab test id (UUID)."
}
}
}Get meal summaries for a user over a date range. Vital API: GET /v2/summary/meal/{user_id}.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | The Vital user id (UUID). |
| end_date | string | End date yyyy-mm-dd (inclusive). Defaults to today upstream. |
| provider | string | Filter to a single provider slug (e.g. oura, fitbit). |
| start_date* | string | Start date yyyy-mm-dd (inclusive, required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id",
"start_date"
],
"properties": {
"user_id": {
"type": "string",
"description": "The Vital user id (UUID)."
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End date yyyy-mm-dd (inclusive). Defaults to today upstream."
},
"provider": {
"type": "string",
"description": "Filter to a single provider slug (e.g. oura, fitbit)."
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date yyyy-mm-dd (inclusive, required)."
}
}
}Get menstrual cycle summaries for a user over a date range. Vital API: GET /v2/summary/menstrual_cycle/{user_id}.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | The Vital user id (UUID). |
| end_date | string | End date yyyy-mm-dd (inclusive). Defaults to today upstream. |
| provider | string | Filter to a single provider slug (e.g. oura, fitbit). |
| start_date* | string | Start date yyyy-mm-dd (inclusive, required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id",
"start_date"
],
"properties": {
"user_id": {
"type": "string",
"description": "The Vital user id (UUID)."
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End date yyyy-mm-dd (inclusive). Defaults to today upstream."
},
"provider": {
"type": "string",
"description": "Filter to a single provider slug (e.g. oura, fitbit)."
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date yyyy-mm-dd (inclusive, required)."
}
}
}Get a single lab-test order by id. Vital API: GET /v3/order/{order_id}.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | The order id (UUID). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"description": "The order id (UUID)."
}
}
}Get the lab-test results for an order. Vital API: GET /v3/order/{order_id}/result.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | The order id (UUID). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"description": "The order id (UUID)."
}
}
}Get a user's profile summary (height, and other static attributes). Vital API: GET /v2/summary/profile/{user_id}.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | The Vital user id (UUID). |
| provider | string | Filter to a single provider slug (e.g. oura, fitbit). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id"
],
"properties": {
"user_id": {
"type": "string",
"description": "The Vital user id (UUID)."
},
"provider": {
"type": "string",
"description": "Filter to a single provider slug (e.g. oura, fitbit)."
}
}
}Get sleep summaries for a user over a date range. Vital API: GET /v2/summary/sleep/{user_id}.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | The Vital user id (UUID). |
| end_date | string | End date yyyy-mm-dd (inclusive). Defaults to today upstream. |
| provider | string | Filter to a single provider slug (e.g. oura, fitbit). |
| start_date* | string | Start date yyyy-mm-dd (inclusive, required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id",
"start_date"
],
"properties": {
"user_id": {
"type": "string",
"description": "The Vital user id (UUID)."
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End date yyyy-mm-dd (inclusive). Defaults to today upstream."
},
"provider": {
"type": "string",
"description": "Filter to a single provider slug (e.g. oura, fitbit)."
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date yyyy-mm-dd (inclusive, required)."
}
}
}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}.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | The Vital user id (UUID). |
| end_date | string | End date yyyy-mm-dd (inclusive). Defaults to today upstream. |
| provider | string | Filter to a single provider slug (e.g. oura, fitbit). |
| resource* | string | Timeseries resource to fetch. |
| start_date* | string | Start date yyyy-mm-dd (inclusive, required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id",
"resource",
"start_date"
],
"properties": {
"user_id": {
"type": "string",
"description": "The Vital user id (UUID)."
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End date yyyy-mm-dd (inclusive). Defaults to today upstream."
},
"provider": {
"type": "string",
"description": "Filter to a single provider slug (e.g. oura, fitbit)."
},
"resource": {
"enum": [
"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"
],
"type": "string",
"description": "Timeseries resource to fetch."
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date yyyy-mm-dd (inclusive, required)."
}
}
}Get a single Vital user by their Vital user_id. Vital API: GET /v2/user/{user_id}.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | The Vital user id (UUID). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id"
],
"properties": {
"user_id": {
"type": "string",
"description": "The Vital user id (UUID)."
}
}
}List the wearables/data sources (providers) a user has connected. Vital API: GET /v2/user/providers/{user_id}.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | The Vital user id (UUID). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id"
],
"properties": {
"user_id": {
"type": "string",
"description": "The Vital user id (UUID)."
}
}
}Get the latest device/app info reported for a user. Vital API: GET /v2/user/{user_id}/info/latest.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | The Vital user id (UUID). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id"
],
"properties": {
"user_id": {
"type": "string",
"description": "The Vital user id (UUID)."
}
}
}Get workouts summaries for a user over a date range. Vital API: GET /v2/summary/workouts/{user_id}.
| Argument | Type | Description |
|---|---|---|
| user_id* | string | The Vital user id (UUID). |
| end_date | string | End date yyyy-mm-dd (inclusive). Defaults to today upstream. |
| provider | string | Filter to a single provider slug (e.g. oura, fitbit). |
| start_date* | string | Start date yyyy-mm-dd (inclusive, required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"user_id",
"start_date"
],
"properties": {
"user_id": {
"type": "string",
"description": "The Vital user id (UUID)."
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End date yyyy-mm-dd (inclusive). Defaults to today upstream."
},
"provider": {
"type": "string",
"description": "Filter to a single provider slug (e.g. oura, fitbit)."
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date yyyy-mm-dd (inclusive, required)."
}
}
}List the lab tests available/configured for your team. Vital API: GET /v3/lab_tests.
| Argument | Type | Description |
|---|---|---|
| name | string | Filter by lab test name. |
| status | string | Filter by lab test status (e.g. active). |
| lab_slug | string | Filter by lab slug. |
| order_key | string | Sort key. |
| order_direction | string | Sort direction. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"description": "Filter by lab test name."
},
"status": {
"type": "string",
"description": "Filter by lab test status (e.g. active)."
},
"lab_slug": {
"type": "string",
"description": "Filter by lab slug."
},
"order_key": {
"enum": [
"price",
"created_at",
"updated_at"
],
"type": "string",
"description": "Sort key."
},
"order_direction": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort direction."
}
}
}List lab-test orders with filters, paginated. Vital API: GET /v3/orders.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (1-based). |
| size | integer | Page size. |
| status | string | Filter by order status. |
| user_id | string | Filter to a single Vital user id (UUID). |
| end_date | string | Filter by created-at end (ISO datetime). |
| start_date | string | Filter by created-at start (ISO datetime). |
| search_input | string | Free-text search. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (1-based).",
"exclusiveMinimum": 0
},
"size": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page size.",
"exclusiveMinimum": 0
},
"status": {
"type": "string",
"description": "Filter by order status."
},
"user_id": {
"type": "string",
"description": "Filter to a single Vital user id (UUID)."
},
"end_date": {
"type": "string",
"description": "Filter by created-at end (ISO datetime)."
},
"start_date": {
"type": "string",
"description": "Filter by created-at start (ISO datetime)."
},
"search_input": {
"type": "string",
"description": "Free-text search."
}
}
}List all providers (wearables/data sources) Vital supports. Vital API: GET /v2/providers.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List all Vital users in your team, paginated. Vital API: GET /v2/user.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max users to return. |
| offset | integer | Pagination offset. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Max users to return.",
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Pagination offset."
}
}
}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}.
| Argument | Type | Description |
|---|---|---|
| client_user_id* | string | Your own stable id for the user. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"client_user_id"
],
"properties": {
"client_user_id": {
"type": "string",
"description": "Your own stable id for the user."
}
}
}