Skip to main content
Glama

Oura Ring MCP Server

by JamesLouie
README.md8.85 kB
# Oura Ring MCP Server A Model Context Protocol (MCP) server that provides access to [Oura Ring](https://ouraring.com/) health and fitness data through the Oura API v2. ## Features This MCP server exposes all major Oura Ring data types as tools: ### Health & Fitness Data - **Personal Info** - User profile information (age, weight, height, biological sex, timezone) - **Sleep Data** - Sleep scores, sleep stages, sleep contributors - **Activity Data** - Steps, calories, activity levels, MET minutes - **Readiness Data** - Daily readiness scores and contributing factors - **Heart Rate** - Heart rate measurements with timestamps and sources ### Daily Summaries - **Daily Activity** - Daily activity summaries with scores and metrics - **Daily Sleep** - Daily sleep summaries with scores and contributors - **Daily Readiness** - Daily readiness summaries with temperature data - **Daily Stress** - Daily stress levels and recovery metrics ### Sessions & Workouts - **Workouts** - Exercise sessions with activity type, duration, calories, distance - **Sessions** - Breathing exercises, meditation, naps, relaxation sessions - **Tags** - User-created tags and enhanced tags with metadata ### Configuration & Time Data - **Sleep Time** - Bedtime and wake time data - **Rest Mode Periods** - Rest mode periods when enabled - **Ring Configuration** - Ring settings and preferences ### Webhooks (Advanced) - **Webhook Management** - Create, list, and delete webhook subscriptions for real-time data updates ## Installation 1. Clone this repository: ```bash git clone <repository-url> cd oura-ring-mcp ``` 2. Install dependencies: ```bash npm install ``` 3. Build the project: ```bash npm run build ``` ## Configuration ### 1. Get Your Oura Access Token For personal use, create a Personal Access Token: 1. Go to [Oura Cloud Personal Access Tokens](https://cloud.ouraring.com/personal-access-tokens) 2. Click "Create New Personal Access Token" 3. Copy the generated token ### 2. Environment Setup Create a `.env` file in the project root: ```bash # Required: Your Oura Ring Personal Access Token OURA_ACCESS_TOKEN=your_personal_access_token_here # Optional: For webhook functionality only OURA_CLIENT_ID=your_client_id_here OURA_CLIENT_SECRET=your_client_secret_here # Optional: Override the default API base URL (usually not needed) # OURA_BASE_URL=https://api.ouraring.com ``` ### 3. For Webhook Functionality (Optional) If you want to use webhooks for real-time data updates: 1. Register an API Application at [Oura Cloud OAuth Applications](https://cloud.ouraring.com/oauth/applications) 2. Add your `OURA_CLIENT_ID` and `OURA_CLIENT_SECRET` to the `.env` file ## Usage ### Testing Locally 1. **Test server setup** (no API calls needed): ```bash npm test ``` 2. **Test API connectivity** (requires your Oura access token): ```bash npm run test:api ``` This will test actual API calls to verify your credentials and show sample data. ### Running the MCP Server Start the MCP server for use with MCP clients: ```bash npm start ``` Or run in development mode: ```bash npm run dev ``` **Note**: The server runs on stdio transport and waits for MCP protocol messages. You need an MCP client (like Claude Desktop, Continue, or other MCP-compatible tools) to interact with it. ### MCP Inspector Use the official MCP Inspector to explore and debug your server: ```bash # First build your server npm run build # Then run the inspector npm run inspector ``` This opens a web interface at http://localhost:5173 where you can: - Test all 17+ available tools with custom inputs - Browse resources and view server capabilities - Monitor real-time server communications - Debug tool parameters and responses See [INSPECTOR.md](./INSPECTOR.md) for detailed usage instructions. ### Available Tools #### Personal Information - `get_personal_info` - Get user personal information #### Sleep & Readiness - `get_sleep` - Get sleep data with optional date range - `get_daily_sleep` - Get daily sleep summaries - `get_readiness` - Get readiness data - `get_daily_readiness` - Get daily readiness summaries #### Activity & Exercise - `get_activity` - Get activity data - `get_daily_activity` - Get daily activity summaries - `get_workouts` - Get workout sessions - `get_heart_rate` - Get heart rate measurements #### Sessions & Wellness - `get_sessions` - Get breathing, meditation, and nap sessions - `get_daily_stress` - Get daily stress and recovery data - `get_tags` - Get user-created tags - `get_enhanced_tags` - Get enhanced tags with metadata #### Time & Configuration - `get_sleep_time` - Get bedtime and wake time data - `get_rest_mode_periods` - Get rest mode periods - `get_ring_configuration` - Get ring settings #### Webhooks (Advanced) - `get_webhook_subscriptions` - List active webhook subscriptions - `create_webhook_subscription` - Create new webhook subscription - `delete_webhook_subscription` - Delete webhook subscription ### Date Range Parameters Most tools accept optional date range parameters: - `start_date` - Start date in YYYY-MM-DD format - `end_date` - End date in YYYY-MM-DD format - `next_token` - Pagination token for large datasets Example: ```json { "start_date": "2024-01-01", "end_date": "2024-01-31" } ``` ## API Reference This MCP server is built on the [Oura API v2](https://cloud.ouraring.com/v2/docs). Key features: ### Authentication - Uses Bearer token authentication with Personal Access Tokens - Webhook operations require OAuth2 application credentials ### Rate Limits - 5000 requests per 5-minute period - Webhooks are recommended to minimize API calls ### Data Types All data is returned as structured JSON with proper typing and validation using Zod schemas. ### Error Handling - Comprehensive error handling for API errors, network issues, and invalid responses - Detailed error messages with status codes when available ## Webhooks Webhooks provide real-time notifications when your Oura data changes. This is the recommended approach for applications that need up-to-date data. ### Setting Up Webhooks 1. Ensure you have `OURA_CLIENT_ID` and `OURA_CLIENT_SECRET` configured 2. Use the `create_webhook_subscription` tool with: - `callback_url` - Your endpoint URL (must be HTTPS) - `verification_token` - Secret token for verification - `event_type` - Type of events ('create', 'update', 'delete') - `data_type` - Type of data ('sleep', 'activity', etc.) ### Webhook Data Types - `tag` - User tags - `enhanced_tag` - Enhanced tags with metadata - `workout` - Exercise sessions - `session` - Breathing, meditation, nap sessions - `sleep` - Sleep data - `daily_sleep` - Daily sleep summaries - `daily_readiness` - Daily readiness summaries - `daily_activity` - Daily activity summaries - `daily_stress` - Daily stress data ## Development ### Project Structure ``` src/ ├── types.ts # TypeScript types and Zod schemas ├── oura-client.ts # Oura API client implementation ├── server.ts # MCP server implementation └── index.ts # Main entry point test/ ├── test.ts # Basic server instantiation test ├── manual-test.ts # API connectivity test with real credentials └── debug-test.ts # Raw API response debugging tool ``` ### Building ```bash npm run build ``` ### Testing ```bash # Test server instantiation (no API calls) npm test # Test actual API connectivity with your credentials npm run test:api ``` ### Linting ```bash npm run lint ``` ## Troubleshooting ### Common Issues **"Invalid or expired authentication token"** - Check that your `OURA_ACCESS_TOKEN` is correct - Verify the token hasn't expired - Ensure you're using a Personal Access Token from the correct Oura account **"Access forbidden" (403 error)** - Your Oura subscription may have expired - Some data types require an active Oura subscription **Rate limit exceeded (429 error)** - You've exceeded 5000 requests in 5 minutes - Consider using webhooks to reduce API calls - Implement proper rate limiting in your application **Webhook verification failed** - Ensure your webhook endpoint properly handles the verification challenge - Check that your `verification_token` matches what you provided - Verify your endpoint responds with the challenge in the correct format ## License MIT License - see LICENSE file for details. ## Contributing Contributions are welcome! Please read the contributing guidelines and submit pull requests for any improvements. ## Links - [Oura Ring](https://ouraring.com/) - [Oura API Documentation](https://cloud.ouraring.com/v2/docs) - [Model Context Protocol](https://modelcontextprotocol.io/) - [Personal Access Tokens](https://cloud.ouraring.com/personal-access-tokens) - [OAuth Applications](https://cloud.ouraring.com/oauth/applications)

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JamesLouie/oura-ring-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server