vital
Server Details
Read wearables and lab health data — sleep, activity, workouts, timeseries, lab tests and orders.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
Available Tools
21 toolsvital_create_link_tokenCreate link tokenADestructiveInspect
Creates a short-lived Link token to connect a user's wearable/provider (no health data is modified). Vital API: POST /v2/link/token.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vital user id to create the link token for (required). | |
| provider | No | Pre-select a single provider slug to connect. | |
| redirect_url | No | URL to redirect to after the connection flow. | |
| filter_on_providers | No | Restrict the connectable providers to this list of slugs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the annotations: the token is short-lived and no health data is modified. This is valuable given the destructiveHint annotation, though it does not explain what destructive side effects, if any, may exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that states purpose, scope, and safety context, followed by a precise endpoint reference. Every part earns its place with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with full parameter coverage and clear naming, the description is nearly complete. It does not spell out the return payload, but the tool name and description make it obvious the output is the generated link token.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented. The description does not add parameter-level detail, but the schema carries the burden, making the baseline score appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resource: creates a short-lived Link token. It also includes the exact API endpoint (POST /v2/link/token), making it unambiguous and easily distinguished from the sibling get/list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the intended use case: connecting a user's wearable/provider. It does not explicitly list when-not-to-use or alternative routing, but no sibling tool performs link-token creation, so the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_create_userCreate userBDestructiveInspect
Creates a Vital user record (additive). Returns the Vital user_id. Vital API: POST /v2/user.
| Name | Required | Description | Default |
|---|---|---|---|
| ingestion_end | No | Latest date to ingest data to (yyyy-mm-dd). | |
| client_user_id | Yes | Your own stable id for the user (required). | |
| ingestion_start | No | Earliest date to ingest data from (yyyy-mm-dd). | |
| fallback_time_zone | No | IANA time zone used if the provider doesn't report one. | |
| fallback_birth_date | No | Fallback birth date yyyy-mm-dd. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation Contradiction: annotations mark destructiveHint=true, but the description calls the operation 'additive,' which directly conflicts. It also does not disclose what happens if the client_user_id already exists or whether any destructive side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses with no filler. The core action and return value are front-loaded, and the endpoint reference is compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description states the return value but omits important context such as duplicate client_user_id behavior, required scopes/permissions, and any inconsistency with the destructiveHint annotation. With no output schema, these gaps make the definition incomplete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters already have meaningful descriptions. The tool description adds no parameter-level detail, so it does not go beyond the schema; this is the appropriate baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific operation (create), the resource (Vital user record), and the return value (user_id), and even gives the API endpoint. This clearly separates it from the get/list sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The verb 'Creates' implies when to use it, but there is no explicit guidance contrasting it with alternatives like vital_resolve_user or vital_get_user. No conditions, exclusions, or duplicate-handling guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_activityActivityARead-onlyInspect
Get activity summaries for a user over a date range. Vital API: GET /v2/summary/activity/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vital user id (UUID). | |
| end_date | No | End date yyyy-mm-dd (inclusive). Defaults to today upstream. | |
| provider | No | Filter to a single provider slug (e.g. oura, fitbit). | |
| start_date | Yes | Start date yyyy-mm-dd (inclusive, required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already establishes the safe read-only nature, and the description's 'GET' and 'Get' wording is consistent with that. It adds the date-range scoping and endpoint, but does not describe return format, pagination, or provider-dependent behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences; the action and resource come first, and the API endpoint is a useful, non-redundant addition. No filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only retrieval with well-documented parameters and a readOnlyHint, the description is mostly complete. It lacks output-format detail, but the endpoint and 'activity summaries' phrasing give enough context to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all four parameters at 100% coverage, so the baseline is 3. The endpoint template adds value by showing that user_id is a path parameter rather than a query/body field, which the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the resource ('activity summaries') and action ('Get') for a user over a date range, and even includes the exact API endpoint. It does not explicitly differentiate from siblings like vital_get_workouts or vital_get_timeseries, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over the many sibling getters, nor any exclusions or alternatives. The only implied trigger is the tool name itself, which is not enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_bodyBodyARead-onlyInspect
Get body summaries for a user over a date range. Vital API: GET /v2/summary/body/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vital user id (UUID). | |
| end_date | No | End date yyyy-mm-dd (inclusive). Defaults to today upstream. | |
| provider | No | Filter to a single provider slug (e.g. oura, fitbit). | |
| start_date | Yes | Start date yyyy-mm-dd (inclusive, required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes the safety profile, and the description adds the exact GET endpoint and summary scope. However, it does not disclose response shape, pagination, or other runtime behavior; the annotation lowers the burden, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences with no redundancy. The main action and scope are front-loaded, followed by the precise REST endpoint. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The request side is adequately covered: user, date range, provider, and endpoint are identifiable. But with no output schema, the description does not explain what a 'body summary' contains or how results are returned, leaving a noticeable completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline of 3 applies. All parameters already have descriptions; the description's 'date range' wording merely reinforces start_date and end_date without adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says exactly what the tool does: 'Get body summaries for a user over a date range.' It names a concrete resource (body summaries) and the exact Vital API endpoint, clearly distinguishing it from sibling getters like vital_get_activity or vital_get_sleep.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as vital_get_timeseries or other summary endpoints. The date-range phrasing implies usage, but there are no explicit when-to-use or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_lab_testGet lab testARead-onlyInspect
Get a single lab test by id. Vital API: GET /v3/lab_tests/{lab_test_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| lab_test_id | Yes | The lab test id (UUID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description aligns by saying 'Get' and showing the HTTP GET method. It adds the concrete API path but does not disclose additional behavioral details such as error handling, authentication needs, or response shape; the read-only safety profile is already covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler: the core action is stated first, and the API endpoint is provided as useful implementation detail. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with a single required parameter, this description is complete. The schema documents the parameter, the annotation confirms read-only behavior, and the endpoint gives the exact API contract. No additional context is needed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with lab_test_id fully described as 'The lab test id (UUID).' The description's endpoint template repeats the parameter but doesn't add new semantic meaning beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get a single lab test by id.' It clearly distinguishes this from sibling list/get operations by emphasizing 'single' and 'by id,' and it includes the exact API endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'single lab test by id' gives clear context for when this tool is appropriate: use it when you have a specific lab_test_id and need that one record. It does not explicitly name alternatives or state when not to use it, but the scope is apparent even without opening the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_mealMealARead-onlyInspect
Get meal summaries for a user over a date range. Vital API: GET /v2/summary/meal/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vital user id (UUID). | |
| end_date | No | End date yyyy-mm-dd (inclusive). Defaults to today upstream. | |
| provider | No | Filter to a single provider slug (e.g. oura, fitbit). | |
| start_date | Yes | Start date yyyy-mm-dd (inclusive, required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already marks this as a safe read operation, and the description aligns by saying 'Get' and referencing the GET endpoint. It adds context that this is meal summary data for a date range, but does not disclose pagination behavior, response shape, or any API-specific quirks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, focused sentences. The first states the action and scope, and the second provides the exact API endpoint. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only summary endpoint, the description plus fully covered schema provides enough to call the tool correctly. It names the resource, scope, user, and date range. It could be more complete by describing return values or pagination since there is no output schema, but the lack is not blocking for a straightforward GET.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented with types, patterns, and required status. The description only restates 'user' and 'date range' and does not add meaningful parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get meal summaries for a user over a date range.' The 'meal' resource clearly distinguishes this tool from sibling vital_get_* tools such as vital_get_activity or vital_get_sleep, so an agent can tell what it does at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: call this when meal summaries are needed for a user over a date range. However, it does not explicitly state when to prefer this over alternatives or mention exclusions such as unsupported providers or time constraints beyond the date range.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_menstrual_cycleMenstrual cycleARead-onlyInspect
Get menstrual cycle summaries for a user over a date range. Vital API: GET /v2/summary/menstrual_cycle/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vital user id (UUID). | |
| end_date | No | End date yyyy-mm-dd (inclusive). Defaults to today upstream. | |
| provider | No | Filter to a single provider slug (e.g. oura, fitbit). | |
| start_date | Yes | Start date yyyy-mm-dd (inclusive, required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers non-destructiveness, and the description adds the GET endpoint and date-range scope. However, it does not add further behavioral context such as aggregation granularity, potential empty results, or provider-specific behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action and endpoint are front-loaded, and every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only summary tool with complete schema documentation, the description is mostly sufficient. The absence of an output schema is a minor gap, but the tool's behavior and inputs are reasonably clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all parameters clearly. The description only adds the concept of a date range, which slightly reinforces start_date/end_date but does not provide additional parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: retrieving menstrual cycle summaries for a user over a date range. The resource and endpoint are explicit, making it distinguishable from sibling data-retrieval tools like vital_get_activity, vital_get_sleep, and vital_get_workouts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, and no mention of exclusions or fallback tools. The agent must infer from the resource name and sibling list that this tool is appropriate for menstrual cycle data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_orderGet orderARead-onlyInspect
Get a single lab-test order by id. Vital API: GET /v3/order/{order_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | The order id (UUID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the API endpoint and the 'single' constraint, but it does not disclose response format, potential errors, or authorization expectations. This is adequate but not rich behavioral context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence with the core function front-loaded, followed by the precise API endpoint. Every word earns its place, and there is no redundant or filler information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read operation with readOnlyHint=true and full schema coverage, the description is largely complete. It lacks an explicit note about return value shape, but the task is simple enough that the endpoint and resource name sufficiently guide invocation. Slightly more context about response could push it to 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the order_id parameter is already described as a UUID. The description's mention of 'by id' reinforces the schema but adds no new semantic detail such as format constraints or where to find the id. Baseline 3 is appropriate since the schema carries the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a specific resource ('a single lab-test order'), and the lookup criterion ('by id'). It also includes the exact endpoint path, making the tool's function unambiguous and easily distinguishable from sibling list/result tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call when you need one lab-test order by its id. However, it provides no explicit guidance about when not to use it, such as preferring vital_list_orders for multiple orders or vital_get_order_results for results data. The usage context is clear but under-specified relative to the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_order_resultsGet order resultsARead-onlyInspect
Get the lab-test results for an order. Vital API: GET /v3/order/{order_id}/result.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | The order id (UUID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and the description aligns with that by using 'Get' and the GET method. The endpoint path adds minor context, but the description does not disclose other behavioral traits like whether results may be pending, how to interpret missing results, or any provider-specific caveats. With annotations covering the read-only safety profile, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and resource, followed by the precise endpoint. No filler or redundant content exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read-only tool, the description provides enough context to call it correctly: the resource, endpoint, and read-only behavior are clear. It falls short only in lacking explicit alternative routing and any detail about the response format, but the low complexity and rich annotation coverage keep this from being a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the only parameter, order_id, is documented as 'The order id (UUID).' The description adds no additional meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Get'), a clear resource ('lab-test results'), and a scope ('for an order'), which clearly distinguishes it from siblings like vital_get_order and vital_list_orders. Including the exact endpoint further removes ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as vital_get_order or vital_get_lab_test. The description does not state any exclusions, prerequisites, or contextual cues, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_profileProfileBRead-onlyInspect
Get a user's profile summary (height, and other static attributes). Vital API: GET /v2/summary/profile/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vital user id (UUID). | |
| provider | No | Filter to a single provider slug (e.g. oura, fitbit). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe read, and the description is consistent with that. It adds the useful context that the data is static/attribute-based rather than time-series, but it does not describe response shape, authentication, or failure behavior beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler; the core purpose is front-loaded and the API path is useful. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read endpoint, this is nearly complete: purpose, a sample attribute, and the exact GET endpoint are present, while the schema covers both parameters. With no output schema, it could optionally say more about the returned shape, but the summary term and 'static attributes' convey the expected content well enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so user_id and provider are already documented in the input schema. The description only adds the endpoint path containing user_id; it does not add new meaning to either parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Get') and resource ('user's profile summary') with an example attribute ('height') and the exact API path. It does not explicitly compare against sibling tools like vital_get_user, but 'static attributes' implicitly separates it from the time-series and lab-test getters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over siblings such as vital_get_user or vital_get_body, and no exclusions or prerequisites are mentioned. The only implied use is 'when you need the profile summary,' which is not enough for tool selection among many similar get_* endpoints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_sleepSleepARead-onlyInspect
Get sleep summaries for a user over a date range. Vital API: GET /v2/summary/sleep/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vital user id (UUID). | |
| end_date | No | End date yyyy-mm-dd (inclusive). Defaults to today upstream. | |
| provider | No | Filter to a single provider slug (e.g. oura, fitbit). | |
| start_date | Yes | Start date yyyy-mm-dd (inclusive, required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation, so the description does not need to repeat that. It adds useful scoping context (date range, endpoint), but it does not mention response format, empty-result behavior, or provider filtering subtleties.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, with the core purpose front-loaded and the API path included without filler. Every part of the description earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is complete enough to invoke correctly: required parameters are documented, the operation is clearly read-only, and the endpoint is provided. It does not describe the return payload, but for a straightforward summary-retrieval tool this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description does not add parameter details beyond the date-range concept. Since the schema already documents user_id, start_date, end_date, and provider thoroughly, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific operation: 'Get sleep summaries for a user over a date range.' This distinguishes it from sibling data-retrieval tools like vital_get_activity and vital_get_body without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this tool is for retrieving sleep summary data within a date range. It does not explicitly name alternatives or state when not to use it, but its scope is obvious among the vital_get_* sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_timeseriesGet timeseries dataARead-onlyInspect
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vital user id (UUID). | |
| end_date | No | End date yyyy-mm-dd (inclusive). Defaults to today upstream. | |
| provider | No | Filter to a single provider slug (e.g. oura, fitbit). | |
| resource | Yes | Timeseries resource to fetch. | |
| start_date | Yes | Start date yyyy-mm-dd (inclusive, required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the safety profile is established. The description adds the exact API endpoint (GET /v2/timeseries/{user_id}/{resource}), confirming a read-only HTTP GET and showing how parameters map to the URL path. It does not disclose pagination or rate limits, but the read-only behavior is clearly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, and the API endpoint is useful context. The long list of supported resources is somewhat redundant with the schema enum, but it is still scannable and helps an agent quickly see the tool's scope without opening the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only timeseries fetch tool, the description plus fully documented schema covers the essential invocation details: resource, user, date range, optional provider filter, and endpoint. No output schema exists, so the lack of a detailed return format is a minor gap, but it does not prevent correct selection or invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter already has a clear type, format, and description. The description reinforces that user_id and resource identify the timeseries and that start/end date form a date range, but it does not add significant semantics beyond the schema. This matches the baseline for fully documented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: it gets timeseries data points for a user and resource over a date range. It goes beyond a generic 'get data' by listing 19 concrete supported resources, which clearly separates it from siblings like vital_get_activity or vital_get_sleep.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames when to use this tool: when timeseries data points are needed for a user and resource in a date range. It does not explicitly name sibling alternatives or say when not to use it, but the resource list and 'timeseries data points' wording imply the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_userGet userARead-onlyInspect
Get a single Vital user by their Vital user_id. Vital API: GET /v2/user/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vital user id (UUID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only safety profile is covered. The description adds that this is a single-user lookup by ID and references the exact API endpoint, which is mildly useful, but it does not describe response shape, error cases, or any additional behavioral traits beyond what annotations already signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core action and target are front-loaded, and the API endpoint reference is concise and useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only GET operation with 100% schema coverage, the description plus annotations and schema provide everything an agent needs to invoke the tool correctly. No output schema exists, but return details are not necessary for correct invocation here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single parameter user_id is already described as 'The Vital user id (UUID).' The description repeats this concept ('by their Vital user_id') and adds the endpoint path variable, but it does not materially enrich the parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a specific resource ('a single Vital user'), and the lookup key ('by their Vital user_id'). This clearly differentiates it from sibling tools like vital_list_users and vital_resolve_user without requiring the agent to infer scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this when you have a known Vital user_id and need that single user. However, it does not explicitly state when to prefer this over alternatives such as vital_list_users, vital_resolve_user, or vital_get_profile, nor does it give exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_user_connected_providersGet user's connected providersARead-onlyInspect
List the wearables/data sources (providers) a user has connected. Vital API: GET /v2/user/providers/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vital user id (UUID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, and the description matches with 'List' and 'GET', so there is no contradiction. It adds the endpoint but does not disclose response shape, pagination, or authentication behavior; with the read-only annotation covering the main risk, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence front-loads the core action and then appends the exact API path. There are no unnecessary words, and the endpoint information is useful rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool, the description is mostly sufficient: it identifies the resource, the user scope, and the required identifier. Missing an explicit statement of the return payload is a minor gap given the simplicity and the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: user_id is already described as 'The Vital user id (UUID)'. The description adds no parameter semantics, but per the high coverage baseline, this is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a concrete verb ('List') and a specific resource ('wearables/data sources (providers) a user has connected'), and the API path reinforces the per-user scope. It is distinct from vital_list_providers because of the 'has connected' qualifier, though it does not name that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternative routing is given. The phrase 'a user has connected' and the GET endpoint imply the intended use case, but an agent must infer how this differs from vital_list_providers or vital_get_user.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_user_latest_infoGet user's latest infoBRead-onlyInspect
Get the latest device/app info reported for a user. Vital API: GET /v2/user/{user_id}/info/latest.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vital user id (UUID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the operation safe, and the description adds the 'latest' semantics plus the exact endpoint. However, it does not disclose behavior for cases where no info is reported, the shape of the returned payload, or any provider-specific quirks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence conveys the core purpose and the technical endpoint with no filler or redundancy. It is front-loaded with the action and resource, and the endpoint reference earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only, single-parameter tool, the description plus annotation and full schema coverage are largely sufficient. The lack of an output schema means a brief note about the returned structure would improve completeness, but it is not a critical gap for invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the single required user_id parameter is already documented as 'The Vital user id (UUID).' The description only echoes the user_id path variable in the endpoint, adding no extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a specific resource ('latest device/app info reported for a user'), and it provides the exact API endpoint. It does not explicitly name sibling alternatives, but the phrase 'device/app info' distinguishes it from profile/user-read tools like vital_get_profile and vital_get_user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus siblings such as vital_get_profile, vital_get_user, or vital_get_user_connected_providers. The endpoint is stated, but there is no context about appropriate use cases, prerequisites, or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_get_workoutsWorkoutsARead-onlyInspect
Get workouts summaries for a user over a date range. Vital API: GET /v2/summary/workouts/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vital user id (UUID). | |
| end_date | No | End date yyyy-mm-dd (inclusive). Defaults to today upstream. | |
| provider | No | Filter to a single provider slug (e.g. oura, fitbit). | |
| start_date | Yes | Start date yyyy-mm-dd (inclusive, required). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description reinforces this with the explicit 'GET' method and the 'summary' endpoint path, adding slight context beyond the annotation. However, it does not disclose behavioral details such as pagination, default end_date behavior, timezone handling, or data availability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. It front-loads the action and resource, then adds the precise API endpoint. Every sentence earns its place and the definition is appropriately sized for a simple read-only wrapper.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with complete parameter schema and a read-only annotation, the description is adequate for invocation. However, there is no output schema and the description does not describe the response shape, pagination, or error behavior, so an agent has limited context about what will be returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented. The description adds no parameter-level meaning beyond the endpoint referencing {user_id}. This meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Get workouts summaries for a user over a date range.' It identifies the exact API endpoint, which helps an agent understand the operation. However, it does not explicitly distinguish this from sibling tools like vital_get_activity or vital_get_sleep, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The core use case is implied: use when you need workout summaries for a user over a date range. But there is no explicit statement about when not to use it, no mention of alternatives, and no exclusions relative to the many sibling vital_get_* tools. Usage guidance is inferable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_list_lab_testsList lab testsBRead-onlyInspect
List the lab tests available/configured for your team. Vital API: GET /v3/lab_tests.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by lab test name. | |
| status | No | Filter by lab test status (e.g. active). | |
| lab_slug | No | Filter by lab slug. | |
| order_key | No | Sort key. | |
| order_direction | No | Sort direction. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'GET /v3/lab_tests.' It adds a small amount of context by saying the list is scoped to the team's configured tests, but it does not disclose pagination, output shape, or authentication considerations. With the read-only annotation carrying the safety profile, this is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no redundant filler. The core purpose is front-loaded, and the endpoint reference is a useful addition. It could arguably include sibling routing, but that is a content gap rather than a conciseness problem.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with all parameters documented and no required arguments, the description is mostly sufficient. However, there is no output schema and the description does not describe what the returned list looks like or how to fetch a single lab test. The sibling vital_get_lab_test makes the missing routing guidance more noticeable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter has a clear description and, where relevant, an enum. The description adds no parameter-level detail, but it does not need to because the schema already fully documents name, status, lab_slug, order_key, and order_direction. This matches the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List the lab tests available/configured for your team.' It clearly indicates a collection-level operation rather than a single-item fetch, and the endpoint reference adds precision. It does not explicitly call out how it differs from the sibling vital_get_lab_test, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. The phrase 'available/configured for your team' implies a listing context, but it never says to use vital_get_lab_test for a single lab test or mentions when filters should be applied. The agent must infer the usage boundaries from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_list_ordersList ordersARead-onlyInspect
List lab-test orders with filters, paginated. Vital API: GET /v3/orders.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). | |
| size | No | Page size. | |
| status | No | Filter by order status. | |
| user_id | No | Filter to a single Vital user id (UUID). | |
| end_date | No | Filter by created-at end (ISO datetime). | |
| start_date | No | Filter by created-at start (ISO datetime). | |
| search_input | No | Free-text search. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'GET' and 'paginated,' adding the operation's API method. It does not disclose response shape or pagination defaults, but the read-only profile is already covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the core purpose first and the endpoint second; no filler or repetition. It earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with fully documented parameters, the description conveys the essential context: what is listed and how it is retrieved/paged. It doesn't describe the response envelope, but the tool is simple and the annotations cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline applies; the description only generically mentions 'filters' and 'paginated,' without adding per-parameter nuance. All seven parameters have individual descriptions in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete operation ('List'), a specific resource ('lab-test orders'), and the key capabilities ('filters, paginated'), with the API endpoint. This distinguishes it from sibling tools like vital_get_order (singular) and vital_list_lab_tests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the listing context clear: use it when needing paged, filtered lab-test orders. It does not explicitly call out alternatives or when not to use it, but the singular get-order sibling is implicitly differentiated by 'orders'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_list_providersList supported providersARead-onlyInspect
List all providers (wearables/data sources) Vital supports. Vital API: GET /v2/providers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description's 'GET /v2/providers' aligns with the readOnlyHint annotation and confirms the operation is a read-only list. It adds the API endpoint as useful context, but does not disclose response shape, pagination, or any other behavioral nuance. Since annotations already cover safety, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence stating the action and scope, followed by a useful API endpoint reference. There is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only list tool, the description is sufficient to understand what it does and how it fits among provider-related tools. It does not explicitly discuss relation to user-connected providers, but that gap is minor given the tool's simplicity and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% schema description coverage by virtue of being empty. There is no parameter meaning for the description to add, so the baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('all providers'), and clarifies that providers means 'wearables/data sources' Vital supports. This strongly distinguishes it from other tools in the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'List all providers ... Vital supports' gives a clear context for when this tool should be used, with the scope implied by 'all'. It does not explicitly name alternative tools such as vital_get_user_connected_providers, so it stops short of full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_list_usersList usersARead-onlyInspect
List all Vital users in your team, paginated. Vital API: GET /v2/user.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max users to return. | |
| offset | No | Pagination offset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals safety, and the description adds useful behavioral detail: the HTTP method and path (GET /v2/user) and paginated response behavior. It does not discuss ordering or response shape, but for a simple read-only list that is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action and scope appear first, followed by the API reference. Every sentence adds useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple optional-parameter list operation, the description is largely complete. Combined with the schema and readOnlyHint annotation, an agent can call the tool correctly. It stops short of a 5 because there is no output schema and no mention of the response structure or pagination metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'limit' and 'offset' already documented. The description adds the general notion of pagination but no additional parameter-level meaning, defaults, or edge-case guidance, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: list all Vital users in the team. It also mentions pagination and the exact API endpoint, making it easy to distinguish from single-user tools like vital_get_user or creation tools like vital_create_user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when you need the full user list rather than a single user, but it does not explicitly name alternatives or state when not to use it. The team-scope and pagination hints provide context, but there is no direct routing to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vital_resolve_userResolve user by client_user_idARead-onlyInspect
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| client_user_id | Yes | Your own stable id for the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, and the description consistently describes a read-only GET operation. It adds the endpoint but does not disclose behavior such as what happens when the client_user_id is not found or any rate limits. With annotations carrying the load, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise, front-loaded sentence that includes the essential endpoint. Every word earns its place; there is no filler or redundant explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only lookup, the description plus schema and annotations are sufficient for an agent to invoke it correctly. It does not state the return shape, but with no output schema and a straightforward 'look up a Vital user' framing, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for the single parameter, and the description essentially repeats the schema's description ('your own stable id for the user'). No additional semantic information is provided, so the parameter-semantics baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Look up'), the resource ('Vital user'), and the lookup key ('your own client_user_id'). It clearly conveys what the tool does, though it does not explicitly differentiate itself from sibling tools like vital_get_user or vital_list_users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: when you have your own stable client_user_id. It does not explicitly name alternatives or state when not to use it, so it misses the full exclusions that would make it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
21 tool updates
- First observed
vital_create_link_token - First observed
vital_create_user - First observed
vital_get_activity - First observed
vital_get_body - First observed
vital_get_lab_test - First observed
vital_get_meal - First observed
vital_get_menstrual_cycle - First observed
vital_get_order - First observed
vital_get_order_results - First observed
vital_get_profile - First observed
vital_get_sleep - First observed
vital_get_timeseries - First observed
vital_get_user - First observed
vital_get_user_connected_providers - First observed
vital_get_user_latest_info - First observed
vital_get_workouts - First observed
vital_list_lab_tests - First observed
vital_list_orders - First observed
vital_list_providers - First observed
vital_list_users - First observed
vital_resolve_user
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Read your workouts, history, and stats; create and schedule new workouts. Writes are additive only.
Read and write patients, facilities, medical documents, and consolidated FHIR records in Metriport.
- freddyOAuthcoach.freddy
Connect your wearables, rings and training apps, then ask your AI about your own health data.
Securely access and manage FHIR healthcare data stored in Medplum.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables fetching health and fitness metrics from the Ultrahuman API, including heart rate, sleep, steps, temperature, and HRV data.1621MIT
- AlicenseAqualityAmaintenanceProvides read-only access to Withings health metrics including body composition, sleep, workouts, and ECG data with local SQLite caching and trend analysis. Features incremental synchronization, automatic OAuth token refresh, and supports all 200+ Withings measurement types for comprehensive health tracking.8GPL 3.0
- AlicenseNot gradedqualityBmaintenanceRead-only MCP access to Fitbit-synced health data through Google Health API v4. Provides tools for metrics, summaries, trends, and data quality without write or arbitrary HTTP operations.MIT
- FlicenseNot gradedqualityCmaintenanceEnables users to query Polar health data (activity, sleep, recovery, training sessions, heart rate) through MCP with secure authentication, redacted personal info, and bounded responses.-
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool maps to a unique resource/action pairing—users, health summaries, timeseries, providers, and lab orders—so an agent can reliably distinguish them. Even similarly named getters are separated by the data domain (activity/body/sleep/workouts) and description.
All tools use the vital_ prefix and snake_case verb_noun forms, which is highly predictable. Minor inconsistency: get is used for both single-resource fetches and list-returning calls (get_workouts, get_user_connected_providers) while list is reserved for global collections.
21 tools is on the heavier side, but the breadth of the Vital API—users, providers, many health summary types, timeseries, and lab tests/orders—justifies most of them. It is slightly over a typical focused MCP server but not bloated or redundant.
The read side is strong: users, providers, summaries, timeseries, lab tests, and results are all covered. However, there are no update/delete user operations and no way to create a lab-test order, so core lifecycle/workflow gaps remain.