CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Cross AI Tools

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

Oura Ring

yasuakiomokawa/oura-mcp
140 toolsauthSTDIOregistry active
Summary

Connects Claude to the Oura Ring API v2 via OAuth, exposing sleep, activity, readiness, heart rate, and workout data as MCP tools. Ships with a configure wizard that walks you through browser auth and writes tokens to disk with proper permissions. Once installed, you get tools like oura_api_get for generic endpoint access with auto-pagination, oura_authenticate to refresh expired tokens, and oura_api_list_paths to discover available routes. Designed for querying your own ring data in chat workflows like weekly sleep reviews or recovery checks. The companion skill bundle includes per-endpoint references and workflow recipes if you want structured prompts.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Tools

Public tool metadata for what this MCP can expose to an agent.

40 tools
personal_info.listSingle Personal Info Document

Single Personal Info Document

No parameter schema in public metadata yet.

tag.listMultiple Tag Documents3 params

Multiple Tag Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
enhanced_tag.listMultiple Enhanced Tag Documents3 params

Multiple Enhanced Tag Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
workout.listMultiple Workout Documents3 params

Multiple Workout Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
session.listMultiple Session Documents3 params

Multiple Session Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
daily_activity.listMultiple Daily Activity Documents3 params

Multiple Daily Activity Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
daily_sleep.listMultiple Daily Sleep Documents3 params

Multiple Daily Sleep Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
daily_spo2.listMultiple Daily Spo2 Documents3 params

Multiple Daily Spo2 Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
daily_readiness.listMultiple Daily Readiness Documents3 params

Multiple Daily Readiness Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
sleep.listMultiple Sleep Documents3 params

Multiple Sleep Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
sleep_time.listMultiple Sleep Time Documents3 params

Multiple Sleep Time Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
rest_mode_period.listMultiple Rest Mode Period Documents3 params

Multiple Rest Mode Period Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
ring_configuration.listMultiple Ring Configuration Documents1 params

Multiple Ring Configuration Documents

Parameters* required
next_tokenvalue
daily_stress.listMultiple Daily Stress Documents3 params

Multiple Daily Stress Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
daily_resilience.listMultiple Daily Resilience Documents3 params

Multiple Daily Resilience Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
daily_cardiovascular_age.listMultiple Daily Cardiovascular Age Documents3 params

Multiple Daily Cardiovascular Age Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
v_o2_max.listMultiple Vo2 Max Documents3 params

Multiple Vo2 Max Documents

Parameters* required
end_datevalue
next_tokenvalue
start_datevalue
tag.getSingle Tag Document1 params

Single Tag Document

Parameters* required
document_idstring
enhanced_tag.getSingle Enhanced Tag Document1 params

Single Enhanced Tag Document

Parameters* required
document_idstring
workout.getSingle Workout Document1 params

Single Workout Document

Parameters* required
document_idstring
session.getSingle Session Document1 params

Single Session Document

Parameters* required
document_idstring
daily_activity.getSingle Daily Activity Document1 params

Single Daily Activity Document

Parameters* required
document_idstring
daily_sleep.getSingle Daily Sleep Document1 params

Single Daily Sleep Document

Parameters* required
document_idstring
daily_spo2.getSingle Daily Spo2 Document1 params

Single Daily Spo2 Document

Parameters* required
document_idstring
daily_readiness.getSingle Daily Readiness Document1 params

Single Daily Readiness Document

Parameters* required
document_idstring
sleep.getSingle Sleep Document1 params

Single Sleep Document

Parameters* required
document_idstring
sleep_time.getSingle Sleep Time Document1 params

Single Sleep Time Document

Parameters* required
document_idstring
rest_mode_period.getSingle Rest Mode Period Document1 params

Single Rest Mode Period Document

Parameters* required
document_idstring
ring_configuration.getSingle Ring Configuration Document1 params

Single Ring Configuration Document

Parameters* required
document_idstring
daily_stress.getSingle Daily Stress Document1 params

Single Daily Stress Document

Parameters* required
document_idstring
daily_resilience.getSingle Daily Resilience Document1 params

Single Daily Resilience Document

Parameters* required
document_idstring
daily_cardiovascular_age.getSingle Daily Cardiovascular Age Document1 params

Single Daily Cardiovascular Age Document

Parameters* required
document_idstring
v_o2_max.getSingle Vo2 Max Document1 params

Single Vo2 Max Document

Parameters* required
document_idstring
webhook.subscription.listList Webhook Subscriptions

List Webhook Subscriptions

No parameter schema in public metadata yet.

webhook.subscription.createCreate Webhook Subscription4 params

Create Webhook Subscription

Parameters* required
data_typestring
one of tag · enhanced_tag · workout · session · sleep · daily_sleep
event_typestring
one of create · update · delete
callback_urlstring
verification_tokenstring
webhook.subscription.getGet Webhook Subscription1 params

Get Webhook Subscription

Parameters* required
idstring
webhook.subscription.updateUpdate Webhook Subscription5 params

Update Webhook Subscription

Parameters* required
idstring
data_typevalue
event_typevalue
callback_urlvalue
verification_tokenstring
webhook.subscription.deleteDelete Webhook Subscription1 params

Delete Webhook Subscription

Parameters* required
idstring
webhook.subscription.renew.updateRenew Webhook Subscription1 params

Renew Webhook Subscription

Parameters* required
idstring
heartrate.listMultiple Heart Rate Documents3 params

Multiple Heart Rate Documents

Parameters* required
next_tokenvalue
end_datetimevalue
start_datetimevalue

oura-mcp

CI npm License: MIT

A Model Context Protocol server for the Oura Ring API v2. Exposes sleep, activity, readiness, heart rate, and workout data to MCP-compatible clients (Claude Desktop, Claude Code, Cursor, ...) via OAuth.

Quick start

npx @yasuakiomokawa/oura-mcp configure

The wizard collects your Oura Client ID/Secret, walks through browser OAuth, saves tokens to ~/.config/oura-mcp/, and adds an mcpServers.oura entry to any detected MCP client config. Restart the client and the tools below are available.

Re-running configure pre-fills the saved Client ID / port so you only need to press Enter to keep them. Type --force to wipe saved state and start from scratch:

npx @yasuakiomokawa/oura-mcp configure --force

Prerequisites

  1. Register an Oura developer app at https://cloud.ouraring.com/oauth/applications
  2. Redirect URI must be exactly: http://localhost:54321/callback (or http://localhost:<port>/callback if you customize OURA_CALLBACK_PORT)
  3. Enable the read scopes you need (Email, Personal info, Daily activity, Heart rate, Workout, Tag, Session, SpO2, Ring configuration, Stress, Heart health)
  4. Note the Client ID and Client Secret — you'll enter them in npx @yasuakiomokawa/oura-mcp configure

Installation

Three paths depending on your client:

1. MCP Registry (auto-discovery clients)

Once published to the official MCP Registry, supported clients can install io.github.YasuakiOmokawa/oura-mcp from their UI. The wizard step still has to run once to obtain OAuth tokens.

2. Manual config (Claude Desktop / Claude Code / Cursor)

Run npx @yasuakiomokawa/oura-mcp configure — Step 4 of the wizard auto-detects:

  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
  • Claude Code (user): ~/.claude.json
  • Claude Code (project): ./.mcp.json
  • Cursor (user): ~/.cursor/mcp.json
  • Cursor (project): ./.cursor/mcp.json

Each detected file is backed up to <file>.bak.<ISO-timestamp> before an atomic write.

To configure manually, add to your client config:

{
  "mcpServers": {
    "oura": {
      "command": "npx",
      "args": ["-y", "@yasuakiomokawa/oura-mcp"]
    }
  }
}

3. Skill (optional)

The companion oura-api-skill ships per-endpoint reference and three workflow recipes (weekly review / sleep trend / recovery check). Bundle it as a Claude Code plugin or import into your skills directory.

Tools provided

ToolPurpose
oura_authenticateStart OAuth flow in browser; returns the URL. Used after refresh_token expires.
oura_auth_statusCheck current token validity and expiry.
oura_clear_authWipe stored tokens.
oura_api_list_pathsList every supported GET endpoint with summaries.
oura_api_getGeneric GET to /v2/.... Auto-paginates via max_pages (1-20) or accepts next_token in params.

oura_api_get returns structuredContent with { status, data, next_token, pages_fetched, has_more }.

Configuration

Two ways. The config file (Option A) is the recommended path — it stores secrets at-rest with 0600 and is self-healing. Environment variables (Option B) are kept for CI / Docker / ephemeral environments where writing a file is impractical, but they leak more easily and are not recommended for daily use.

Option A — config file (recommended)

Run the wizard once and forget about it:

npx @yasuakiomokawa/oura-mcp configure

This writes:

~/.config/oura-mcp/config.json   # 0600, contains clientId / clientSecret / callbackPort
~/.config/oura-mcp/tokens.json   # 0600, contains the OAuth access / refresh tokens

Permissions are re-checked on every load and chmod'd back to 0600 if anything else touched them.

config.json schema:

{
  "schemaVersion": 1,
  "clientId": "...",
  "clientSecret": "...",
  "callbackPort": 54321
}

Option B — environment variables (CI / Docker only)

OURA_CLIENT_ID=...
OURA_CLIENT_SECRET=...        # must be set together with OURA_CLIENT_ID
OURA_CALLBACK_PORT=54321      # optional; safe to set in env regardless of Option A/B

When the server boots and both OURA_CLIENT_ID and OURA_CLIENT_SECRET are set, it uses them and emits a config.env_credentials warning to stderr.

Why not recommended:

  • process.env is readable from /proc/<pid>/environ by any process running as the same user.
  • Environment is inherited by every child process the server spawns.
  • Crash dumps and observability tools that capture process.env will leak the secret.
  • OURA_CLIENT_SECRET=... npx ... typed at the shell ends up in shell history.

OURA_CALLBACK_PORT is not a secret and is fine to pass via env in either mode.

Never use args for secrets

Process arguments are visible to other users via ps / /proc/<pid>/cmdline. Use the env block of your MCP client config:

{
  "mcpServers": {
    "oura": {
      "command": "npx",
      "args": ["-y", "@yasuakiomokawa/oura-mcp"],
      "env": { "OURA_CLIENT_ID": "...", "OURA_CLIENT_SECRET": "..." }
    }
  }
}

Troubleshooting

  • "refresh_token expired" — run oura_authenticate (in chat) or npx @yasuakiomokawa/oura-mcp configure (in terminal).
  • Port 54321 already in use — set OURA_CALLBACK_PORT=<other port> and update the redirect URI in your Oura developer app to match.
  • "Path not found" — verify the path with oura_api_list_paths. Common slips: missing /v2/ prefix, typo in daily_sleep.
  • Setup hangs at "Waiting for authorization" — you haven't approved in the browser yet, or the authorize page was opened in a different browser session than the one with localhost reachability.
  • No log output — set OURA_LOG_LEVEL=debug for verbose stderr logging.

Development

git clone https://github.com/YasuakiOmokawa/oura-mcp.git
cd oura-mcp
npm install
npm test
npm run build

Useful scripts:

  • npm run lint / npm run typecheck — Biome + TypeScript checks
  • npm run test:coverage — Vitest with V8 coverage
  • npm run update:docs — re-fetch the Oura OpenAPI schema and regenerate skills/oura-api-skill/references/

License

MIT

Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Configuration

OURA_CLIENT_ID

Optional. Alternative to `npx oura-mcp configure`. Both OURA_CLIENT_ID and OURA_CLIENT_SECRET must be set together.

OURA_CLIENT_SECRETsecret

Optional. See OURA_CLIENT_ID.

OURA_CALLBACK_PORT

OAuth callback port (default 54321)

Registryactive
Package@yasuakiomokawa/oura-mcp
TransportSTDIO
AuthRequired
UpdatedMay 16, 2026
View on GitHub