MCP for Oura について
MCP for Ouraは、個人のOura Ringデータを自然言語で調べるホスト型・マルチテナントMCPサーバーです。睡眠、コンディション、活動、生体指標、傾向を扱う21の読み取り専用ツールを備え、ユーザーごとにOuraアカウントを認証します。
主な機能
- 01睡眠段階、時間、HRVを取得
- 02コンディション、活動、ワークアウトを確認
- 03心拍数の時系列と生体指標を取得
- 04個人の基準値と指標を比較
- 05異常を検出しタグとの相関を分析
活用シーン
- 01昨夜の睡眠と今日のコンディションを確認
- 02週間HRVを個人の基準値と比較
- 03記録した運動やマインドフルネスを確認
- 04飲酒タグと健康指標の関連を調べる
MCP 対応
ホスト型MCPサーバーとしてOAuthを利用し、各ユーザーが自身のOuraアカウントを認証したうえで、互換クライアントに21の読み取り専用データ検索ツールを公開します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp-oura.smirnov.link/mcpclaude mcp add --transport http link-smirnov-mcp-oura https://mcp-oura.smirnov.link/mcp{"mcpServers":{"link-smirnov-mcp-oura":{"type":"http","url":"https://mcp-oura.smirnov.link/mcp"}}}Cursor で開く{"servers":{"link-smirnov-mcp-oura":{"type":"http","url":"https://mcp-oura.smirnov.link/mcp"}}}VS Code で開く{"mcpServers":{"link-smirnov-mcp-oura":{"type":"http","url":"https://mcp-oura.smirnov.link/mcp"}}}{"mcpServers":{"link-smirnov-mcp-oura":{"serverUrl":"https://mcp-oura.smirnov.link/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
mcpforoura
Oura Ring のデータについて、AI アシスタントに普段使いの言葉で質問できます。 mcpforoura は、Oura Ring 向けのホスト型マルチテナント Model Context Protocol サーバーです。現在、https://mcp-oura.smirnov.link/mcp で稼働しています。Claude(または MCP 互換クライアント)に接続し、Oura で一度認証すれば、21 個の読み取り専用ツールを使って、睡眠、コンディション、アクティビティ、生体情報、長期的な傾向を問い合わせられます。マルチテナント OAuth により、各ユーザーはそれぞれの Oura アカウントで認証します。読み取り専用です。Cloudflare Workers 上に構築されています。
Smithery および公式 MCP Registryに掲載されています。
小規模なコネクターです。現在、Oura の開発モードにおけるユーザー上限 10 人が適用されており、本番環境への申請は審査待ちです。Oura Health Oy とは提携していません。
ステータス: デプロイ済みで稼働中です。21 個のツールが利用可能です。睡眠、コンディション、アクティビティの主要データに加え、生体情報、複合スナップショット、分析機能を提供します。Phase 5 のサイクル関連ツールは、Oura API の対応待ちのため削除しました(下記の「利用不可」を参照)。ビルド履歴の全容はマイルストーン表をご覧ください。
質問できること
接続すると、アシスタントに次のような質問をできます。
- 「昨夜はよく眠れましたか?」 — 睡眠段階、時間、心拍数、HRV
- 「今週のHRVは、自分にとって正常な範囲ですか?」 — 個人のベースラインと比較します
- 「今日はどんな調子ですか?」 — 回復度、推奨睡眠時間、昨日の統計情報をまとめた朝のブリーフィング
- 「アルコールは回復に悪影響を与えますか?」 — 記録したタグと任意の指標との相関を調べます
- 「今月、普段と違う日があれば教えてください。」 — 統計的な異常検出
これらの質問は、4 つのフェーズにわたる 21 個のツールに対応しています(フェーズ 5 のサイクル関連ツールは削除済みです。下記の「利用できない機能」を参照)。
コア(M6 のオリジナル)
| ツール | 使用する場面 |
|---|---|
get_daily_summary | 「土曜日はどうでしたか?」/「昨日の回復度を見せてください。」睡眠、回復度、アクティビティをまとめた 1 日分のスナップショットです。 |
get_date_range | 「今週の睡眠はどうでしたか?」/「過去 1 か月の HRV を見せてください。」最大 180 日分の単一指標を取得します。 |
get_last_night_sleep | 「昨夜はよく眠れましたか?」直近の夜のスコア、睡眠段階の内訳、時間、心拍数/HRV を取得します。 |
ping | 診断用です。コネクターが認証済みで、接続可能であることを確認します。 |
_internal_personal_info | 診断用です。Oura トークンが機能し、API が応答していることを確認します。 |
フェーズ 1 — アクティビティとタグ付け
| ツール | 使用する場面 |
|---|---|
get_workouts | 指定した期間(最大 180 日)の記録済み、または自動検出されたワークアウトを一覧表示します。 |
get_sessions | マインドフルネスセッション(瞑想、呼吸法、リラクゼーション)を一覧表示します。 |
get_heart_rate_series | 24 時間の範囲内で、5 分/15 分間隔または生データに集約した日中の心拍数時系列を取得します。 |
get_tags | ユーザーが記録したカスタムタグ(カフェイン、アルコール、カスタムメモ)を取得します。 |
compare_to_baseline | 「これは自分にとって正常ですか?」ある日の指標を、過去 30 日および 90 日間の個人ベースラインと比較します。 |
フェーズ 2 — ティア A の日次指標
| ツール | 使用する場面 |
|---|---|
get_stress | 指定日の高ストレス状態と回復に費やした秒数を取得します。 |
get_spo2 | 夜間の血中酸素(SpO2)平均値と呼吸障害指数を取得します。 |
get_resilience | 指定日の、Oura による長期的なストレス回復能力スコアを取得します。 |
get_cardio_age | HRV、安静時心拍数、その他の指標から算出した心血管年齢の推定値を取得します。 |
get_vo2_max | 指定日の前後 30 日以内に測定された、最新の最大酸素摂取量(VO2 max)を取得します。 |
get_recommended_sleep_time | 指定日の、Oura による推奨就寝時間帯を取得します。 |
get_rest_mode_periods | 指定期間の、病気や回復のための休息モード期間を一覧表示します。 |
フェーズ 3 — 複合ツール
| ツール | 使用する場面 |
|---|---|
get_morning_briefing | 「今日はどんな調子ですか?」回復度、推奨睡眠時間、昨日の統計情報をまとめた構造化スナップショットです。 |
get_weekly_recap | 1~28 日間について、指標ごとの平均、最小値、最大値を取得します。既定値は 7 日間です。 |
フェーズ 4 — 分析
| ツール | 使用する場面 |
|---|---|
find_anomalies | 指標がローリングウィンドウの平均から N σ を超えて乖離した日を検出します。 |
correlate_tag_with_metric | 「アルコールはHRVに悪影響を与えますか?」タグを付けた日と付けていない日の指標統計を比較します。 |
利用できない機能
サイクル分析(get_cycle_phase、get_cycle_history、compare_metric_across_cycle_phases)は当初フェーズ 5 で計画されていましたが、Oura の公開 v2 API は月経周期のエンドポイントを提供していません。Cycle Insights 機能は Oura アプリ内でのみ利用できます。ベータユーザーが 404 エラーに遭遇した後、ツールは削除されました。削除に至った経緯については、git の履歴(feat/phase-5-cycle と feat/remove-cycle-tools ブランチ)を参照してください。ユーザーが月経開始日を手動でタグ付けすれば、get_tags によるタグベースの記録を部分的な回避策として利用できます。
Claude にコネクターを追加する
- Claude に追加をクリックします。claude.ai でカスタムコネクターを追加ダイアログが開き、名前(
Oura)と URL が入力された状態になります。両方の値を確認してから、追加をクリックします。 - このサーバーの同意ページで承認します → Oura にリダイレクトされます → そこで同意します → Claude に戻ります。
手動で追加するには、カスタマイズ → コネクター → カスタムコネクターを追加に移動し、URL として https://mcp-oura.smirnov.link/mcp を入力します。
Team または Enterprise プランでは、オーナーが組織全体のカスタムコネクターを追加します。オーナーは組織向けリンクを使用できます。メンバーはその後、自分の Oura アカウントを使ってカスタマイズ → コネクターから接続します。
現在、コネクターで認可できるユーザー数は 10 人までです(Oura のデフォルトの開発モードの上限)。上限を引き上げるには、Oura に開発者アプリケーションを申請し、本番環境向けの承認を受ける必要があります。
アーキテクチャ
Cloudflare Workers 上の 2 段階 OAuth です。
- フロー A(MCP クライアント ↔ このサーバー)。
@cloudflare/workers-oauth-providerが処理します。標準の OAuth2 + PKCE + 動的クライアント登録を使用します。同意ページはサーバー側でレンダリングされ、CSRF トークンを含みます。 - フロー B(このサーバー ↔ Oura)。 手動で実装されています。フロー A の内部で開始され、
cloud.ouraring.comにリダイレクトし、返されたコードをトークンと交換し、/personal_infoを取得して安定したユーザー ID を特定し、トークンを AES-GCM で暗号化して Cloudflare KV に保存した後、そのユーザー ID をpropsに付与してフロー A を完了します。
McpAgent を継承した Durable Object がセッション状態を保持し、MCP メソッドの呼び出しを型付きツールハンドラーに振り分けます。各ツールは呼び出しごとに OuraClient を作成し、トークンの更新、401 の判別(再認証が必要な場合、エンドポイントへのアクセスが制限されている場合、アカウントのメンバーシップが無効な場合)、429 に対する指数バックオフを処理します。
ファイルごとの詳しい説明については、CLAUDE.md を参照してください。
セットアップ(運用者向け)
初回のみ:
-
Oura 開発者アプリ — cloud.ouraring.com → API Applications → New。
- リダイレクト URI:
https://<your-host>/oura/callback - プライバシーポリシー URL:
https://<your-host>/privacy - 利用規約 URL:
https://<your-host>/tos
- リダイレクト URI:
-
Cloudflare KV 名前空間(ID を
wrangler.jsoncに貼り付けます):npx wrangler kv namespace create mcpforoura-OAUTH_KV npx wrangler kv namespace create OURA_TOKENS npx wrangler kv namespace create OURA_CACHEOAUTH_KVのmcpforoura-プレフィックスは、同じ CF アカウント内でOAUTH_KVというバインディング名を使用する他の Worker との衝突を避けるためのものです。 -
初回デプロイ(Worker を登録し、シークレットを紐付けられるようにします):
npx wrangler deploy -
シークレット:
echo -n "$CLIENT_ID" | npx wrangler secret put OURA_CLIENT_ID echo -n "$CLIENT_SECRET" | npx wrangler secret put OURA_CLIENT_SECRET openssl rand -base64 32 | tr -d '\n' | npx wrangler secret put ENCRYPTION_SECRETENCRYPTION_SECRETのコピーを安全な場所に保管してください。紛失すると、保存済みトークンを復号できなくなり、すべてのユーザーが再認可する必要があります。 -
カスタムドメイン — apex ゾーンが同じ Cloudflare アカウント内にある場合、
wrangler.jsoncのroutesブロック(custom_domain: trueを指定)によって、次回のデプロイ時にサブドメインが自動的に紐付けられます。それ以外の場合は、Cloudflare ダッシュボードで手動設定してください。
検出可能性
サーバーは、MCP レジストリアグリゲーター向けに以下のメタデータを公開しています。
| パス | 用途 |
|---|---|
/.well-known/oauth-authorization-server | OAuth2 認可サーバーのメタデータ(@cloudflare/workers-oauth-provider によって提供)。 |
/.well-known/oauth-protected-resource | OAuth2 保護リソースのメタデータ(@cloudflare/workers-oauth-provider によって提供)。 |
/.well-known/glama.json | Glama ディレクトリによる検出 — https://glama.ai/mcp。 |
/.well-known/mcp/server-card.json | Smithery のスキャン用フォールバック(自動スキャナーが OAuth 経由でツール一覧を取得できない場合にのみ使用)。 |
server.json(リポジトリのルート) | 公式 MCP レジストリへの登録ファイル — 名前空間 link.smirnov/mcp-oura。smirnov.link に対して DNS 検証済みです。mcp-publisher で公開されます。 |
サーバーを公式 MCP レジストリに登録する場合(PulseMCP、mcp.so などのアグリゲーターがここから情報を取得します):
# One-time, from this repo root
go install github.com/modelcontextprotocol/registry/cmd/mcp-publisher@latest
mcp-publisher login dns smirnov.link # prints a TXT record to add in Cloudflare DNS
mcp-publisher publish # uses server.json in the repo root
Smithery への登録:https://mcp-oura.smirnov.link/mcp を smithery.ai/new に貼り付け、スキャン中に OAuth の手順を進めてください。
Glama への登録:glama.ai/mcp/servers の「Add Server」を使用してください(メンテナー情報は /.well-known/glama.json から自動的に取得されます)。
開発
cp .dev.vars.example .dev.vars # fill in
npm install
npm run dev
ローカル開発でも本番環境と同じ Oura リダイレクト URI が使用されるため、通常は wrangler dev --remote でテストするほうが簡単です。そうすれば、デプロイ済みのインフラストラクチャを使用して同意フローを完了できます。
プライバシーとデータの取り扱い
- Oura OAuth トークンは、Cloudflare Workers KV で保存時に暗号化されます(AES-GCM、ユーザーごとに HKDF で導出したキーを使用)。
- Oura リングのデータは要求時に取得され、(キャッシュレイヤーの提供開始後は)KV に TTL 付きで短期間キャッシュされる場合があります。TTL は、今日のデータでは 5 分、過去のデータでは最大 24 時間です。
- リングのデータはログに記録されません。
- コネクターを切断すると OAuth の許可が取り消され、トークンにアクセスできなくなります。
- 詳細なポリシーについては、デプロイ済みサイトの
/privacyをご覧ください。
ステータス
Smirnov Labs の Cloudflare アカウント上で https://mcp-oura.smirnov.link にデプロイ済みです。カスタムドメインは wrangler.jsonc の routes ブロックで割り当てられています。KV 名前空間を 3 つ(mcpforoura-OAUTH_KV、OURA_TOKENS、OURA_CACHE)プロビジョニング済みです。シークレットを 3 つ(OURA_CLIENT_ID、OURA_CLIENT_SECRET、ENCRYPTION_SECRET)設定済みです。
ビルドの進捗
| マイルストーン | ステータス |
|---|---|
| M1 — Worker の足場 | ✅ |
M2 — OAuth プロバイダー + Hono の同意画面 + ping | ✅ |
| M3 — Oura OAuth フロー B | ✅ |
| M4 — OuraClient(更新、401 の判別、429 のバックオフ) | ✅ |
| M5 — AES-GCM によるトークン暗号化 | ✅ |
| M6 — ツール 1〜3 | ✅ |
D1 — mcp-oura.smirnov.link への初回デプロイ | ✅ |
| D2 — CLAUDE.md + 拡充した README + LICENSE | ✅ |
D3 — GitHub の Smirnov-Labs/mcpforoura へプッシュ | ✅ |
| M7 — 日付に応じた TTL を設定する KV レスポンスキャッシュ | ✅ |
| M8 — ツール 4〜8(ワークアウト、セッション、心拍数系列、タグ、ベースライン) | ✅ |
| フェーズ 1〜4 — 追加のツール 16 個(Tier A、複合ツール、分析) | ✅ |
| フェーズ 5 — サイクル関連ツール(削除済み。Oura v2 API に一般公開されたサイクルエンドポイントがないため) | ❌ |
| M9 — Vitest テスト + デプロイドキュメントの仕上げ | ✅ |
ライセンス
MIT。LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。