MCP server for Oura API integration. Exposes methods to query the Oura API for sleep, readiness, and resilience data.
This server has 4 tools for querying Oura health data. All tools follow a consistent naming pattern (get_*) and have basic descriptions, but critical gaps in schema documentation, parameter descriptions, and output documentation significantly limit LLM usability. Parameters lack type information in descriptions and no output schemas are documented. The server implements basic data transformation but provides no error recovery guidance. Conservative scoring reflects these production-readiness gaps.
Get daily sleep data for a specific date range.
Get readiness data for a specific date range.
Get resilience data for a specific date range.
Get sleep data for a specific date range.
No output schemas documented for any tool. LLMs cannot know what fields are returned, their types, or what references they provide for chaining.
Input parameters lack type and format documentation. Descriptions say 'Start date for the query' but do not specify ISO 8601 format, accepted range, or validation rules. Parameter 'end_date' says '(optional, defaults to start_date)' but this belongs in a schema default, not the description.
Tool descriptions are under 50 characters and lack context. LLMs cannot distinguish when to use get_sleep_data vs get_daily_sleep_data vs get_readiness_data. Descriptions should explain the semantic difference and what use cases each serves.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 39 | - | v1 |
No error handling guidance in tool definitions. The implementation raises generic Exception on HTTP errors, but the tool schema and description provide no recovery hints. If a date range is invalid or token is expired, the LLM has no guidance on what to do.
Parameter descriptions are too brief. 'Start date for the query' does not specify format (ISO 8601?), constraints (past dates only?), or examples. Parameter 'end_date' description embeds default behavior ('defaults to start_date') in free text rather than using schema default.