mcpField
M
MCP for Oura

MCP for Oura

リモート
github.com/Smirnov-Labsヘルスケア0今日更新
リポジトリ

MCP for Oura について

MCP for Ouraは、個人のOura Ringデータを自然言語で調べるホスト型・マルチテナントMCPサーバーです。睡眠、コンディション、活動、生体指標、傾向を扱う21の読み取り専用ツールを備え、ユーザーごとにOuraアカウントを認証します。

主な機能

  1. 01睡眠段階、時間、HRVを取得
  2. 02コンディション、活動、ワークアウトを確認
  3. 03心拍数の時系列と生体指標を取得
  4. 04個人の基準値と指標を比較
  5. 05異常を検出しタグとの相関を分析

活用シーン

  1. 01昨夜の睡眠と今日のコンディションを確認
  2. 02週間HRVを個人の基準値と比較
  3. 03記録した運動やマインドフルネスを確認
  4. 04飲酒タグと健康指標の関連を調べる

MCP 対応

ホスト型MCPサーバーとしてOAuthを利用し、各ユーザーが自身のOuraアカウントを認証したうえで、互換クライアントに21の読み取り専用データ検索ツールを公開します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp-oura.smirnov.link/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

mcpforoura

smithery badge mcp registry

Oura Ring のデータについて、AI アシスタントに普段使いの言葉で質問できます。 mcpforoura は、Oura Ring 向けのホスト型マルチテナント Model Context Protocol サーバーです。現在、https://mcp-oura.smirnov.link/mcp で稼働しています。Claude(または MCP 互換クライアント)に接続し、Oura で一度認証すれば、21 個の読み取り専用ツールを使って、睡眠、コンディション、アクティビティ、生体情報、長期的な傾向を問い合わせられます。マルチテナント OAuth により、各ユーザーはそれぞれの Oura アカウントで認証します。読み取り専用です。Cloudflare Workers 上に構築されています。

Claude に追加

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_series24 時間の範囲内で、5 分/15 分間隔または生データに集約した日中の心拍数時系列を取得します。
get_tagsユーザーが記録したカスタムタグ(カフェイン、アルコール、カスタムメモ)を取得します。
compare_to_baseline「これは自分にとって正常ですか?」ある日の指標を、過去 30 日および 90 日間の個人ベースラインと比較します。

フェーズ 2 — ティア A の日次指標

ツール使用する場面
get_stress指定日の高ストレス状態と回復に費やした秒数を取得します。
get_spo2夜間の血中酸素(SpO2)平均値と呼吸障害指数を取得します。
get_resilience指定日の、Oura による長期的なストレス回復能力スコアを取得します。
get_cardio_ageHRV、安静時心拍数、その他の指標から算出した心血管年齢の推定値を取得します。
get_vo2_max指定日の前後 30 日以内に測定された、最新の最大酸素摂取量(VO2 max)を取得します。
get_recommended_sleep_time指定日の、Oura による推奨就寝時間帯を取得します。
get_rest_mode_periods指定期間の、病気や回復のための休息モード期間を一覧表示します。

フェーズ 3 — 複合ツール

ツール使用する場面
get_morning_briefing「今日はどんな調子ですか?」回復度、推奨睡眠時間、昨日の統計情報をまとめた構造化スナップショットです。
get_weekly_recap1~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 に追加する

  1. Claude に追加をクリックします。claude.ai でカスタムコネクターを追加ダイアログが開き、名前(Oura)と URL が入力された状態になります。両方の値を確認してから、追加をクリックします。
  2. このサーバーの同意ページで承認します → 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 を参照してください。

セットアップ(運用者向け)

初回のみ:

  1. Oura 開発者アプリ — cloud.ouraring.com → API Applications → New。

    • リダイレクト URI:https://<your-host>/oura/callback
    • プライバシーポリシー URL:https://<your-host>/privacy
    • 利用規約 URL:https://<your-host>/tos
  2. 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_CACHE
    

    OAUTH_KV の mcpforoura- プレフィックスは、同じ CF アカウント内で OAUTH_KV というバインディング名を使用する他の Worker との衝突を避けるためのものです。

  3. 初回デプロイ(Worker を登録し、シークレットを紐付けられるようにします):

    npx wrangler deploy
    
  4. シークレット:

    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_SECRET
    

    ENCRYPTION_SECRET のコピーを安全な場所に保管してください。紛失すると、保存済みトークンを復号できなくなり、すべてのユーザーが再認可する必要があります。

  5. カスタムドメイン — apex ゾーンが同じ Cloudflare アカウント内にある場合、wrangler.jsonc の routes ブロック(custom_domain: true を指定)によって、次回のデプロイ時にサブドメインが自動的に紐付けられます。それ以外の場合は、Cloudflare ダッシュボードで手動設定してください。

検出可能性

サーバーは、MCP レジストリアグリゲーター向けに以下のメタデータを公開しています。

パス用途
/.well-known/oauth-authorization-serverOAuth2 認可サーバーのメタデータ(@cloudflare/workers-oauth-provider によって提供)。
/.well-known/oauth-protected-resourceOAuth2 保護リソースのメタデータ(@cloudflare/workers-oauth-provider によって提供)。
/.well-known/glama.jsonGlama ディレクトリによる検出 — https://glama.ai/mcp。
/.well-known/mcp/server-card.jsonSmithery のスキャン用フォールバック(自動スキャナーが 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 をご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。