Oura MCP demonstrates solid fundamentals with clear verb-based naming (oura_authenticate, oura_api_get) and consistent tool annotations. All 5 tools have descriptions (avg ~120 chars) and input schemas with Zod validation. However, parameter descriptions lack depth, many omit format constraints, valid ranges, or dependency hints. The generic oura_api_get tool accepts flexible params but provides minimal guidance on endpoint-specific requirements (date formats, pagination behavior). Error handling returns text-only responses without structured recovery guidance. Output schema for oura_api_get is well-defined (status, data, next_token, pages_fetched, has_more) but other tools lack documented return structures. No batch operations or natural-identifier support (e.g., accepting user-friendly date ranges vs ISO strings).
Generic GET to Oura Ring API v2. Use oura_api_list_paths to see endpoints. Pagination via max_pages or pass next_token in params.
List all available Oura API v2 GET endpoints with summaries.
Check current authentication state and token expiry.
Start OAuth authorization flow. Returns a URL to open in browser. Used for re-authentication after refresh_token expires.
Delete stored tokens. Re-authenticate via `oura_authenticate` after this.
oura_api_get params lack endpoint-specific guidance. 'params' is a free-form object with minimal constraint documentation. LLMs cannot infer which endpoints require start_date vs start_datetime, or valid date formats, without trial-and-error.
Error responses are text-only. When oura_api_get fails (invalid path, API error), the tool returns isError=true with a text message but no structured error classification (retryable vs user-fixable vs fatal). LLMs cannot determine next action.
oura_api_list_paths returns unstructured text. No documented output schema. LLMs cannot parse the endpoint list programmatically or extract metadata for downstream tool calls.
Auth tools (oura_authenticate, oura_auth_status, oura_clear_auth) lack output schema documentation. Descriptions mention what they return (URL, token expiry, confirmation) but no formal schema is declared for LLM planning.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2025-06-18+ | v2 |
No batch or multi-endpoint support. If an LLM needs data from 5 endpoints, it must call oura_api_get 5 times sequentially. A batch_get variant would reduce latency and token waste.