Skip to main content
Glama
GetSensr-io

Sensor Bio MCP Server

Official
by GetSensr-io

Sensor Bio MCP Server

CI Python 3.11+ License: MIT

Connect your Sensor Bio wearable data to Claude, ChatGPT, and other AI assistants using the Model Context Protocol (MCP).

Ask your AI assistant things like "How did I sleep last week?", "What's my resting heart rate trend?", or "Show me my recovery scores for the past month" and get answers pulled directly from your Sensor Bio data.


Quick Start

1. Get your API token

Log in to your Sensor Bio developer portal and grab your Organization API Token.

2. Install uv

This server uses uv to run. Install it with one command:

Mac / Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows (PowerShell):

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

3. Add to Claude Desktop

Open your Claude Desktop config file:

OS

Path

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

Linux

~/.config/Claude/claude_desktop_config.json

Add (or merge into) the mcpServers section:

{
  "mcpServers": {
    "sensorbio": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/GetSensr-io/sensorbio-mcp-server",
        "sensorbio-mcp-server"
      ],
      "env": {
        "SENSR_ORG_TOKEN": "paste-your-token-here"
      }
    }
  }
}

4. Restart Claude Desktop

Quit and reopen Claude Desktop. You should see "sensorbio" in the MCP tools list (look for the hammer icon).

5. Try it out

Ask Claude something like:

"Show me my sleep data from the past week"

"How many calories did I burn yesterday?"

"List all users in my organization"


Related MCP server: runalyze-mcp-server

Other MCP Clients

Cursor / Windsurf

These editors support MCP servers natively. Use the same config format above in their respective MCP settings.

OpenAI (ChatGPT)

MCP support in ChatGPT is rolling out. When available, the same server and config pattern will work.

Any MCP Client

Any application that supports the Model Context Protocol can connect using this server. Just point it at:

uvx --from git+https://github.com/GetSensr-io/sensorbio-mcp-server sensorbio-mcp-server

Authentication

Method

Env Vars

Best For

API Token

SENSR_ORG_TOKEN or SENSR_API_KEY

Most users (recommended)

OAuth2

SENSR_CLIENT_ID + SENSR_CLIENT_SECRET

Programmatic / advanced use

The server checks for SENSR_ORG_TOKEN first, then SENSR_API_KEY as a fallback. If neither is set, it tries OAuth2 client credentials.

OAuth2 Config (advanced)

{
  "mcpServers": {
    "sensorbio": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/GetSensr-io/sensorbio-mcp-server",
        "sensorbio-mcp-server"
      ],
      "env": {
        "SENSR_CLIENT_ID": "your-client-id",
        "SENSR_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

What You Can Ask

Once connected, your AI assistant has access to these tools:

Tool

What it does

Example question

list_users

List all users in your organization

"Show me all users"

get_user_ids

Get all user IDs

"How many users are in the org?"

get_user_by_email

Find a user by their email address

"Look up john@example.com"

get_user_profile

Get a specific user's full profile

"Show me Bryan's profile"

search_user

Search users by name or email

"Find users named Sarah"

get_sleep

Sleep data: duration, score, stages

"How did I sleep last week?"

get_scores

Recovery, sleep, and activity scores

"What's my recovery score today?"

get_activities

Workouts and activity sessions

"What workouts did I do this week?"

get_biometrics

Heart rate, HRV, SpO2, respiratory rate

"What's my resting heart rate?"

get_calories

Calorie burn details

"How many calories did I burn today?"

get_org_sleep_summary

Sleep overview across your whole org

"How did the team sleep last night?"

get_org_scores_summary

Score overview across your whole org

"Show me the team's recovery scores"

debug_request

Raw API request (for troubleshooting)

Usually not needed directly

Most tools support flexible date ranges. You can say things like "last 7 days", "March 1st to March 10th", or "yesterday" and the AI will figure out the right parameters.


Environment Variables

Variable

Required

Description

SENSR_ORG_TOKEN

*

Organization API token (recommended)

SENSR_API_KEY

*

Alias for SENSR_ORG_TOKEN

SENSR_CLIENT_ID

**

OAuth2 client ID

SENSR_CLIENT_SECRET

**

OAuth2 client secret

SENSR_SCOPE

OAuth2 scope (optional)

SENSR_BASE_URL

Override API base URL (default: https://api.sensorbio.com)

SENSR_TZ

Timezone for "today" calculations (default: America/Chicago)

* Set one of SENSR_ORG_TOKEN or SENSR_API_KEY for token auth. ** Set both for OAuth2 auth. Token auth takes precedence if both are configured.


Troubleshooting

"Server not connecting"

  • Make sure uv is installed: run uv --version in your terminal

  • Check that your config file path is correct (see table above)

  • Make sure you restarted Claude Desktop after editing the config

"Authentication error" or "Invalid API Key"

  • Double-check your token. Copy it fresh from the developer portal.

  • Make sure there are no extra spaces or line breaks in the token

  • Tokens can expire. Generate a new one if yours is old.

"No data showing"

  • Your Sensor Bio device needs to have synced recently

  • Check that the user ID exists in your organization

  • Try asking for a specific date: "Show my sleep for March 10th"

"Tool not found"

  • Make sure the MCP server name in your config is exactly sensorbio

  • Check Claude Desktop's MCP tools list for connection status


Development

Want to contribute or run locally?

# Clone the repo
git clone https://github.com/GetSensr-io/sensorbio-mcp-server.git
cd sensorbio-mcp-server

# Install dependencies
uv sync --dev

# Run tests
uv run pytest -v

# Lint
uv run ruff check .

# Run the server locally
SENSR_ORG_TOKEN=your-token uvx --from . sensorbio-mcp-server

# Smoke test (needs a valid token)
SENSR_ORG_TOKEN=your-token uv run python scripts/smoke_test.py

License

MIT

Available Tools

13 tools
debug_requestA

Low-level debugging helper: make a GET request and return {status, headers_subset, body_preview}.

Params:

  • path (str, required): may be '/v1/...' or 'v1/...'

  • query (dict[str,str], optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
queryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It transparently notes that it returns a limited subset (status, headers_subset, body_preview) and accepts path format variations. However, it does not disclose whether any authentication is required, potential side effects (though it's a GET), rate limits, or how headers are subset. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: opening with the core purpose and return shape, followed by a clear parameter list. Every sentence earns its place, and the formatting enhances readability. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity debug tool, the description is largely complete. It covers the action, return format, and parameter formats. The existence of an output schema reduces the need to explain returns, but the description still previews the return shape. It could mention what headers_subset includes or typical usage scenarios, but given the tool's simplicity, it is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It adds path format details ('/v1/...' or 'v1/...') and notes query is a dict of strings, optional. However, it does not explain what the query parameter is used for (e.g., appended to URL) or provide examples. The added value over the schema is moderate but incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool makes a GET request and returns a structured response with status, headers subset, and body preview. This specific verb and resource distinguish it from sibling tools that are user/data query tools. The 'low-level debugging helper' positioning further differentiates its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'low-level debugging helper' implies a use case for raw HTTP inspection, which is useful context. However, the description does not explicitly state when to use this tool over sibling high-level getters, nor does it mention exclusions or alternatives. The guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_activitiesA

Get activities for a user with optional date/timestamp filtering.

Params:

  • user_id (str, required)

  • start_date/end_date (YYYY-MM-DD, optional): filter by activity timestamp

  • start_timestamp_ms/end_timestamp_ms (int, optional): filter by ms since epoch

  • cursor (str, optional): pagination cursor

  • limit (int, default 50)

Returns: {data, next_cursor, has_more, next_url}

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
user_idYes
end_dateNo
start_dateNo
last_timestampNo
end_timestamp_msNo
start_timestamp_msNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses optional filtering, pagination via cursor, and the return shape. However, it does not mention ordering, authentication needs, rate limits, or potential side effects, leaving some behavioral transparency gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a one-line summary, a bulleted parameter list, and a returns line. Every sentence provides value and does not repeat the schema verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides core invocation details (user_id, filters, pagination) and return fields, making it largely complete. However, the missing last_timestamp parameter and lack of usage alternatives leave gaps for a tool with 8 parameters and no schema descriptions, so it is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning beyond the schema for most parameters, explaining date/timestamp filter formats, cursor as pagination, and limit default. However, it completely omits the last_timestamp parameter that exists in the schema, and it does not clarify whether date and timestamp filters can be combined, leaving some semantic ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get activities for a user with optional date/timestamp filtering.' This gives a specific verb, resource, and scope, and distinguishes it from sibling tools like get_sleep, get_scores, and get_biometrics, which target different data types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving a user's activities, but it does not provide explicit when-to-use guidance, exclusions, or alternatives among the sibling tools. There is no mention of when to prefer this over get_biometrics or other get_* tools, so guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_biometricsA

Get biometrics for a user with optional date/timestamp filtering.

Params:

  • user_id (str, required)

  • start_date/end_date (YYYY-MM-DD, optional)

  • start_timestamp_ms/end_timestamp_ms (int, optional)

  • cursor (str, optional)

  • limit (int, default 50)

Returns: {data, next_cursor, has_more, next_url}

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
user_idYes
end_dateNo
start_dateNo
last_timestampNo
end_timestamp_msNo
start_timestamp_msNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses pagination behavior via the 'cursor' parameter and return fields (next_cursor, has_more, next_url), and it specifies optional filtering with date/timestamp. However, it does not mention authentication requirements, rate limits, or behavior on invalid inputs, leaving some gaps in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct and well-structured: a one-sentence purpose followed by a bulleted parameter list and a clear return format. Every line provides essential information without redundancy or padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 8 parameters and no annotations, the description provides a complete picture of the request and response shape. It includes pagination, optional filters, and the exact return object. Minor gaps exist, such as interaction between date and timestamp filters or any maximum limit, but overall it is thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate. It does so by listing all parameters with types, requiredness, defaults, and date format (YYYY-MM-DD). This adds meaningful context beyond the bare schema, such as limit default 50 and optional cursor for pagination.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Get biometrics for a user') with an optional scope of date/timestamp filtering. This distinguishes it from sibling tools like get_sleep or get_scores, which target different data types. The verb 'get' plus the resource 'biometrics' is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when biometrics are needed but does not explicitly contrast with alternatives or provide when-not conditions. For example, it does not say to use a sibling tool for sleep or scores. The context is clear from the tool name, but explicit guidance for choice among siblings is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_caloriesA

Get calorie details for a user.

Params:

  • user_id (str, required)

  • date (YYYY-MM-DD, optional; default: today in SENSR_TZ or America/Chicago)

  • granularity (enum str, optional; default 'day'): day|week|month|year

Returns: Sensr /v1/calorie/details response

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
user_idYes
granularityNoday

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses useful behavioral nuances such as the timezone-dependent default date (SENSR_TZ or America/Chicago) and default granularity, and notes the return type. However, it does not cover potential error cases, rate limits, or data availability, leaving some opacity for a getter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise and well-structured. It opens with a clear one-line purpose, follows with a bulleted parameter list, and ends with a return note. Every sentence provides actionable information without filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with one required parameter, the description covers purpose, parameters, defaults, and return. Since an output schema exists, missing detailed return formatting is acceptable. The only minor gap is lack of mention of error conditions or data history limits, but this is not critical for a routine getter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides minimal descriptions (0% coverage), but the description compensates fully by explaining each parameter, including type, requiredness, the date format (YYYY-MM-DD), the timezone for the default, and the allowed enum values for granularity (day|week|month|year). This is essential added meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it 'Get calorie details for a user', which is a specific verb+resource. This distinguishes it from sibling tools like get_sleep, get_scores, and get_activities that target different metrics, so an agent can unambiguously select it for calorie data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool instead of alternatives. The description only lists parameters and return type, with no mention of exclusions, prerequisites, or comparisons to sibling tools, leaving the agent without directional context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_org_scores_summaryA

Bulk: scores summary across users in the org.

Date selection (mutually exclusive): date OR (start_date+end_date) OR days. Params:

  • date (YYYY-MM-DD, optional; default today)

  • start_date/end_date (YYYY-MM-DD, optional)

  • days (int>=1, optional)

  • max_users (int, default 50)

  • concurrency (int, default 5)

Returns: {range, users:[{user_id,days:[{date,data}],summary}], errors}

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
daysNo
end_dateNo
max_usersNo
start_dateNo
concurrencyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility. It discloses the return structure ('Returns: {range, users:[...], summary, errors}') and mentions the 'errors' field, which is valuable. It also documents default values for max_users and concurrency. However, it doesn't explicitly state whether this is a read-only operation or describe side effects, but the nature of the tool is inherently non-destructive, and the provided return shape adds transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a one-line summary, followed by a compact parameter list and return shape. Every sentence adds value; the parameter details are necessary given the sparse schema. It is slightly longer than a minimal description but avoids redundancy and is front-loaded with the key purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a bulk summary tool with 6 optional parameters and no output schema provided in the prompt, the description adequately covers the necessary context: date selection rules, defaults, and return format. It lacks edge-case behavior or response size warnings, but the included 'errors' field and user list structure make it sufficiently complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description is crucial. It explains each parameter with types, optionality, defaults, and constraints (e.g., 'days (int>=1)'), and highlights the mutual exclusivity of date parameters—information absent from the schema. It does not deeply explain concurrency semantics, but the name and default provide some context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Bulk: scores summary across users in the org.' The verb 'get' combined with 'scores summary across users' specifies both the action and the resource scope. It also distinguishes from siblings like get_scores (likely single-user) and get_org_sleep_summary (sleep instead of scores).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly describes mutually exclusive date selection options ('date OR (start_date+end_date) OR days'), providing clear guidance on how to specify the date range. It implies bulk org-level usage against individual tools like get_scores, though it doesn't explicitly name alternatives or state when not to use it. Still, the usage constraints are clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_org_sleep_summaryA

Bulk: sleep summary across users in the org.

Date selection (mutually exclusive): date OR (start_date+end_date) OR days. Params:

  • date (YYYY-MM-DD, optional; default today)

  • start_date/end_date (YYYY-MM-DD, optional)

  • days (int>=1, optional)

  • max_users (int, default 50)

  • concurrency (int, default 5)

Returns: {range, users:[{user_id,days:[{date,data}],summary}], errors}

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
daysNo
end_dateNo
max_usersNo
start_dateNo
concurrencyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the behavioral burden. It discloses mutually exclusive date modes, defaults, concurrency, and return structure. However, it states 'concurrency (int, default 5)' while the schema default is 3, making the behavioral guidance inaccurate and reducing trust.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a one-line purpose, a clear date-selection rule, a compact parameter list, and a return shape. Every sentence adds value and no content is redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (bulk operation, 6 parameters, no annotations), the description covers date selection, limits, concurrency, and output. It does not explain pagination or behavior when max_users is exceeded, but the presence of an output schema and the parameter details make it sufficiently complete for agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description compensates by explaining all six parameters, including date formats, mutual exclusivity, and defaults. It loses a point because the stated concurrency default (5) contradicts the schema default (3), and 'date default today' is not reflected in the schema's null default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Bulk: sleep summary across users in the org,' clearly stating the resource (sleep summary), scope (all users in the org), and bulk nature. This distinguishes it from sibling tools like get_sleep (individual) and get_org_scores_summary (scores, not sleep).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Bulk' prefix and 'across users in the org' provide clear context for org-level aggregation, implicitly contrasting with per-user tools. However, it does not explicitly name alternatives or give when-not-to-use guidance, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_scoresA

Get scores for a user.

Accepted date inputs (mutually exclusive):

  • date (YYYY-MM-DD, optional; default: today in SENSR_TZ or America/Chicago)

  • OR start_date/end_date (YYYY-MM-DD, inclusive)

  • OR days (int >=1): last N days ending today

Returns: {range, results:[{date,data}], summary}

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
daysNo
user_idYes
end_dateNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It discloses date input behavior, defaults (today in SENSR_TZ or America/Chicago), inclusive ranges, and the return structure. It does not mention error handling or auth, but 'get' clearly implies a safe read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured: a one-line purpose, a bulleted list of input options, and a return shape summary. Every sentence earns its place, with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and the description covers parameter semantics, defaults, and return format, the tool is fully specified for invocation. It lacks minor edge-case details but is complete for its purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description compensates thoroughly by explaining the date parameters (format, defaults, exclusivity, inclusive range, days >=1). It also implies user_id via 'for a user.' No parameter is left ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get scores for a user' with a specific verb and resource, and the user-level scope distinguishes it from the sibling get_org_scores_summary. It is immediately obvious what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by detailing accepted date input modes and their mutual exclusivity, and the 'for a user' phrasing implies user-level usage distinct from org summaries. It does not name explicit alternatives or exclusions, but the context is strong enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sleepA

Get sleep for a user.

Accepted date inputs (mutually exclusive):

  • date (YYYY-MM-DD, optional; default: today in SENSR_TZ or America/Chicago)

  • OR start_date/end_date (YYYY-MM-DD, inclusive)

  • OR days (int >=1): last N days ending today

Other params:

  • summary_only (bool, default true): if true, strips verbose time-series

Returns: {range, results:[{date,data}], summary}

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
daysNo
user_idYes
end_dateNo
start_dateNo
summary_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses key behaviors: the default timezone (SENSR_TZ or America/Chicago), mutual exclusivity of date inputs, inclusive date ranges, and the effect of summary_only. It stops short of error handling or rate limits, but covers the core behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the purpose, and structured with bullet-like lines for date inputs and other params. Every line adds value; no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all six parameters, explains return structure, and captures the main behavioral nuances. It lacks edge-case details like max days or timezone definition, but given the output schema exists and the tool's moderate complexity, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description is the only source of parameter meaning. It explains date, start_date/end_date, days, and summary_only with formats, defaults, and constraints. This fully compensates for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Get sleep for a user', which is a specific verb+resource with clear scope. It distinguishes from the sibling 'get_org_sleep_summary' by explicitly targeting a single user, and from other get_* tools by focusing on sleep data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on how to invoke the tool: three mutually exclusive date input modes, defaults, and the summary_only flag. It does not mention when to prefer this over alternatives like get_org_sleep_summary, but the usage patterns are well-specified enough for an agent to select it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_by_emailA

Find a user by email (exact match preferred).

Params:

  • email (str, required)

Returns: {data: user|null} or {error:...}

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries the full transparency burden. It discloses the return shape ({data: user|null} or {error:...}) but does not address permissions, case sensitivity, or side effects. Adequate for a simple read-only lookup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and well-structured: a one-line purpose followed by a param block and a return block. Every sentence adds value with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter lookup tool, the description covers purpose, parameter meaning, and return format. It is complete enough, but the output schema already covers return values, and the description misses explicit boundaries or edge cases. Overall sufficient for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only provides type and required status, while the description adds the 'exact match preferred' semantic for email. This compensates for the 0% schema description coverage, though it lacks details like case-insensitivity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Find' + object 'user' + method 'by email (exact match preferred)' distinguishes it from broader siblings like search_user and list_users. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like search_user or list_users. The 'exact match preferred' hint implies a use case but does not state exclusions or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_idsB

Get all organization user IDs. Returns /v1/organizations/users/ids

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the operation is 'Get all' but does not explicitly disclose read-only nature, authentication requirements, pagination behavior, or any side effects. The endpoint reference adds little behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise, with the primary purpose front-loaded in the first sentence. The second sentence about the endpoint is of marginal value and could be considered slightly unnecessary, but it does not significantly detract from the overall conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and an output schema, the description is minimally viable. It states what it does, but it lacks context on when to use it relative to sibling tools and does not provide any behavioral details beyond the basic get operation. Given the simplicity of the tool, the description is adequate but leaves room for improvement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description is not required to explain parameter semantics. Schema coverage is effectively 100% due to the empty parameter set, and the description adds no unnecessary parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Get all organization user IDs.' It uses a specific verb+resource combination and distinguishes itself from sibling tools like list_users by focusing specifically on IDs rather than full user objects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as list_users or get_user_by_email. It does not mention scenarios where ID-only retrieval is preferred, nor does it exclude other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_profileA

Get a specific user's full profile by user ID.

Params:

  • user_id (str, required): the user's ID

Returns: {data: user|null} or {error:...}

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses the return shape including null and error cases, but does not mention authentication, permissions, or rate limits. Some behavioral context is provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a clear one-sentence purpose, a compact param list, and a return format. Every element serves a purpose and it is front-loaded with the action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, output schema present), the description adequately covers purpose, parameter, and return format. It omits usage context among siblings but that is not critical for a straightforward getter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by listing the required user_id with type and a brief description. While minimal, it does clarify the parameter's purpose beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a specific user's full profile by user ID', identifying the action, target, and lookup method. This distinguishes it from siblings like get_user_by_email or search_user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: if you have a user ID, use this tool. However, there is no explicit guidance about when to prefer it over alternative lookup methods or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_usersA

List organization users.

Params:

  • page (int, default 1)

  • limit (int, default 100)

  • search (str, optional): substring query

Returns: Sensr /v1/organizations/users response

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
searchNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses pagination defaults (page=1, limit=100) and that search is a substring query, which adds some behavioral context. However, it does not mention whether pagination is complete, maximum limits, sorting order, or rate limiting. The return type is stated as a Sensr API response but with no details on structure (though output schema exists).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a one-line purpose, a bullet list of parameters with types and defaults, and a return note. Every sentence earns its place; no fluff or redundancy. Front-loaded with the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple list endpoint with 3 optional parameters and an output schema, so repetitive return-structure explanation is unnecessary. The description covers the basics, but lacks guidance on pagination behavior (e.g., if all pages must be fetched or if limit is capped) and when to use this versus specific lookup tools. Given the simplicity, this is mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no property descriptions (0% coverage), so the description must and does add meaning. It explains 'search' as a substring query, which is not apparent from the schema. For page and limit, it only lists names/defaults that the schema already provides, but the description at least consolidates the intent. It adds genuine value for the search parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List organization users.', a specific verb+resource. It distinguishes from sibling tools like get_user_by_email or search_user, which target specific users. Scope is explicitly 'organization users'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the name and parameters: it lists users (potentially paginated). However, no explicit guidance is given about when to prefer this over search_user, get_user_by_email, or get_user_profile. No exclusions or alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_userB

Search for users by a free-text query (name/email).

Params:

  • query (str, required)

  • page (int, default 1)

  • limit (int, default 50)

Returns: Sensr /v1/organizations/users response

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It mentions the return type ('Sensr /v1/organizations/users response') and pagination params, but fails to state that this is a read-only operation, whether it requires specific permissions, or details about matching semantics (e.g., case insensitivity, partial match). This is a significant gap for a tool with no annotation safety hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured with a one-line purpose, a bulleted parameter list, and a return statement. Every sentence adds value, and the format is scannable and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool, the description is adequate: it covers query and pagination, and references a known response structure. However, with sibling tools like get_user_by_email and list_users, it would be more complete if it clarified the distinction (e.g., 'Use this when you don't have an exact email'). The presence of an output schema reduces the need for return-value detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description's parameter list provides essential meaning. It clarifies query is required and free-text, and gives defaults for page and limit. This compensates well for the schema's lack of descriptions, though it could elaborate on query formatting or pagination behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for users via free-text query on name/email, which is a specific and actionable purpose. It implicitly distinguishes from siblings like list_users (which likely lists all users) and get_user_by_email (which might be exact match), but does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is implied through 'free-text query'—the tool is for when you need to search by partial name or email. However, there is no explicit guidance on when NOT to use it or which sibling tools are better suited for exact email lookup or listing all users.

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.

  1. 13 tool updatesv0.2.0
    • First observeddebug_request
    • First observedget_activities
    • First observedget_biometrics
    • First observedget_calories
    • First observedget_org_scores_summary
    • First observedget_org_sleep_summary
    • First observedget_scores
    • First observedget_sleep
    • First observedget_user_by_email
    • First observedget_user_ids
    • First observedget_user_profile
    • First observedlist_users
    • First observedsearch_user

TDQS

A3.8/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct resource or action: user lookups by email, ID, or query; sleep, scores, biometrics, activities, calories are separate data types; bulk summaries are distinct; debug_request is a utility. No overlapping purposes.

Naming Consistency5/5

All tools follow snake_case with a consistent verb_noun pattern: get_*, list_*, search_*, debug_*. No mixing of camelCase or inconsistent verb styles.

Tool Count5/5

13 tools is well within the ideal 3-15 range for a focused sensor bio API. Each tool serves a clear purpose without being excessive or insufficient.

Completeness4/5

The tool surface covers user management (lookup, search, list) and key health data (sleep, scores, biometrics, activities, calories) both individually and in bulk for sleep and scores. Minor omission: no bulk versions for biometrics, activities, or calories, but core workflows are complete.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides access to Oura Ring health data, including sleep, activity, readiness, and stress metrics via the Model Context Protocol. It enables users to query their personal biometric information and daily health summaries through natural language in MCP-compatible clients.
    681 npm
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Exposes real-time health data from the Ultrahuman Ring to AI agents via the Model Context Protocol, providing optimized summaries with trend analysis and actionable insights.
    7
    -