mcpField
P
pp-oura

pp-oura

github.com/mvanhornその他2.1k55 回インストール今日更新
リポジトリ

pp-oura について

pp-ouraは、睡眠、活動、心拍数などのユーザーコレクションデータに `oura-pp-cli` でアクセスするスキルです。Ouraユーザーやパートナーアプリ向けに、ローカル同期、オフライン検索、分析、API操作の連鎖を提供します。

主な機能

  1. 01Ouraユーザーコレクションデータへのアクセス
  2. 02データのローカルSQLite同期
  3. 03同期済み記録のFTS5検索
  4. 04分析クエリによるデータ集計
  5. 05ワークフロー内でのAPI操作連鎖

活用シーン

  1. 01ローカル同期したOura記録の検索
  2. 02健康データの集計分析
  3. 03複数のOura API操作をまとめて実行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mvanhorn/printing-press-library --skill pp-oura

インストール後、Claude Code で/pp-ouraを入力して読み込まれたか確認します。

詳細

Oura — Printing Press CLI

前提条件:CLI のインストール

このスキルは oura-pp-cli バイナリを使用します。このスキルのコマンドを実行する前に、CLI がインストールされていることを必ず確認してください。 インストールされていない場合は、先にインストールしてください。

  1. Printing Press インストーラーを使用してインストールします。既定では、macOS/Linux の場合は $HOME/.local/bin に、Windows の場合は %LOCALAPPDATA%\Programs\PrintingPress\bin にバイナリがインストールされます。
    npx -y @mvanhorn/printing-press-library install oura --cli-only
    
  2. 確認します:oura-pp-cli --version
  3. 表示されたインストールディレクトリが、このスキルを実行するエージェント/ランタイムの $PATH に含まれていることを確認します。

npx によるインストールに失敗した場合(Node がない、オフラインなど)は、Go を直接インストールする方法に切り替えてください(Go 1.26.6 以降が必要です)。この方法では $GOPATH/bin(既定値は $HOME/go/bin)にインストールされるため、代わりにこのディレクトリを $PATH に追加してください。

go install github.com/mvanhorn/printing-press-library/library/health/oura/cmd/oura-pp-cli@latest

インストール後に --version が「command not found」と表示される場合、ランタイムから $PATH 上のバイナリディレクトリが見えていません。確認に成功するまで、スキルのコマンドを実行しないでください。

概要

Oura API を使用すると、Oura のユーザーやパートナーアプリケーションは、Oura のデータを活用してユーザーエクスペリエンスを向上させることができます。 このドキュメントでは、Oura データを連携するために利用可能な唯一の手段である Oura API Version 2(V2)について説明します。以前の V1 API は廃止されました。

はじめに

API とは?

API(Application Programming Interface)は、異なるソフトウェアアプリケーション同士が通信できるようにするものです。Oura API を使用すると、Oura Ring のデータにプログラムからアクセスできます。

クイックスタートガイド

  1. API アプリケーションを登録し、OAuth2 を実装します
  2. 最初の API 呼び出しを実行する:
    curl -X GET https://api.ouraring.com/v2/usercollection/personal_info \
    -H "Authorization: Bearer YOUR_TOKEN_HERE"
    
  3. データ型を確認する:
    • このドキュメントで利用可能なエンドポイントを確認し、アクセスできるデータを把握します
    • 各エンドポイントには、リクエストとレスポンスの例が含まれています
  4. Webhook を設定する(強く推奨):
    • Oura データの取得には Webhook の利用が推奨されます
    • Webhook を適切に実装していて、レート制限に達したお客様はいません
    • ユーザーが初めて接続したときに過去のデータを一度リクエストし、その後の更新には Webhook を使用します
    • モバイルアプリからデータが同期されてから約 30 秒後に、Webhook 通知が届きます
    • データが変更されたときに通知を受け取るには、Webhook を設定します

よくある質問

  • データの遅延:データ型によって同期されるタイミングが異なります。睡眠データはユーザーが Oura アプリを開く必要がありますが、毎日のアクティビティやストレスのデータはバックグラウンドで同期される場合があります

データアクセス

データにアクセスするには、登録済みのAPI アプリケーションが必要です。 API アプリケーションの利用者数は、Oura の承認を受けるまで 10 人に制限されています。アプリケーションが承認されると、制限はなくなります。 さらに、Oura のユーザーは、API アプリケーションがアクセスする各データ型の共有に同意する必要があります。 Oura API を介したすべてのデータアクセスリクエストには、認証が必要です。 また、最新のデータ型への API アクセスを可能にするため、Oura のユーザーにはモバイルアプリを最新の状態に保つことを推奨します。

認証

Oura Cloud API は、業界標準の OAuth2 プロトコルによる認証をサポートしています。詳しくは、認証手順をご覧ください。 アクセス トークンは、次のようにリクエストヘッダーに含める必要があります。

GET /v2/usercollection/personal_info HTTP/1.1
Host: api.ouraring.com
Authorization: Bearer <token>

個人用アクセストークンは 2025 年 12 月に非推奨となり、現在は利用できません。

Oura HTTP レスポンスコード

レスポンスコード説明
200 OK成功したレスポンス
400 Query Parameter Validation Errorリクエストに無効または形式が正しくないクエリパラメーターが含まれています。
401 Unauthorized認証トークンが無効または期限切れです。
403 Forbiddenリクエストされたリソースには追加の権限が必要か、ユーザーのOuraサブスクリプションが期限切れです。
429 Too Many Requestsレート制限を超過しました。再試行の方法についてはレスポンスヘッダーを確認してください。

レート制限

APIは、すべてのアプリケーションで公平にアクセスできるよう、2つのレイヤーでレート制限を適用します。

  • 単一トークンからの大量リクエストを抑制する、アクセストークンごとの制限
  • 1つのファンアウト型アプリが共有容量を独占しないよう、アプリケーションのすべてのエンドユーザートークンからの合計トラフィックに上限を設ける、アプリケーションごとの制限

どちらかのレイヤーに抵触したリクエストには、429 Too Many Requests が返されます。どのレイヤーが適用されたかは、レスポンスヘッダーの X-RateLimit-Tier で確認できます。

アプリケーションがレート制限に頻繁に近づく場合は、webhooks の実装を強くおすすめします。webhooksを正しく実装しているほとんどのアプリケーションでは、レート制限の問題は発生しません。

レート制限のレスポンスヘッダー

429 Too Many Requests レスポンスが返されると、再試行の参考となる5つのヘッダーが含まれます。固定間隔のバックオフより、これらのヘッダーを優先してください。

  • Retry-After — 再試行までに待機する秒数を示す整数です。RFC 7231に準拠しており、クライアントのバックオフロジックにそのまま使用できます。
  • X-RateLimit-Limit — 現在の期間におけるリクエスト上限です。
  • X-RateLimit-Window — 上限が適用されるローリングウィンドウの長さ(秒)です。
  • X-RateLimit-Reset — ウィンドウがリセットされ、割り当てが完全に回復する時点を示すUnixエポック(秒)です。
  • X-RateLimit-Tier — 超過した制限を示します。サポートに問い合わせる際に役立ちます。

独自の機能

これらの機能は、このAPIの他のツールでは利用できません。

  • sync — OuraユーザーコレクションのデータをローカルのSQLiteストアにミラーリングし、オフラインでの検索と分析を可能にします
  • search — ローカルに同期されたOuraレコードを対象とする、FTS5全文検索です
  • analytics — ローカルに同期されたヘルスデータに対する、グループ化と件数集計のクエリです
  • workflow — 複数のOura API操作を、エージェントが使いやすい1つのコマンドに連結します

レシピ

oura-pp-cli usercollection multiple-heartrate-documents --json
oura-pp-cli usercollection multiple-workout-documents --json
oura-pp-cli usercollection single-personal-info-document --json

コマンドリファレンス

sandbox — サンドボックスを管理します

  • oura-pp-cli sandbox multiple-daily-activity-documents — サンドボックス - 複数の毎日のアクティビティドキュメント
  • oura-pp-cli sandbox multiple-daily-cardiovascular-age-documents — サンドボックス - 複数の毎日の心血管年齢ドキュメント
  • oura-pp-cli sandbox multiple-daily-readiness-documents — サンドボックス - 複数の毎日のコンディションドキュメント
  • oura-pp-cli sandbox multiple-daily-resilience-documents — サンドボックス - 複数の毎日のレジリエンスドキュメント
  • oura-pp-cli sandbox multiple-daily-sleep-documents — サンドボックス - 複数の毎日の睡眠ドキュメント
  • oura-pp-cli sandbox multiple-daily-spo2-documents — サンドボックス - 複数の毎日のSpO2ドキュメント
  • oura-pp-cli sandbox multiple-daily-stress-documents — サンドボックス - 複数の毎日のストレスドキュメント
  • oura-pp-cli sandbox multiple-enhanced-tag-documents — サンドボックス - 複数の拡張タグドキュメント
  • oura-pp-cli sandbox multiple-heartrate-documents — サンドボックス - 複数の心拍数ドキュメント
  • oura-pp-cli sandbox multiple-rest-mode-period-documents — サンドボックス - 複数の休息モード期間ドキュメント
  • oura-pp-cli sandbox multiple-ring-battery-level-documents — サンドボックス - 複数のリングバッテリーレベルドキュメント
  • oura-pp-cli sandbox multiple-ring-configuration-documents — サンドボックス - 複数のリング設定ドキュメント
  • oura-pp-cli sandbox multiple-session-documents — サンドボックス - 複数のセッションドキュメント
  • oura-pp-cli sandbox multiple-sleep-documents — サンドボックス - 複数の睡眠ドキュメント
  • oura-pp-cli sandbox multiple-sleep-time-documents — サンドボックス - 複数の睡眠時間ドキュメント
  • oura-pp-cli sandbox multiple-tag-documents — サンドボックス - 複数のタグドキュメント
  • oura-pp-cli sandbox multiple-v-o2-max-documents — サンドボックス - 複数のVO2 Maxドキュメント
  • oura-pp-cli sandbox multiple-workout-documents — サンドボックス - 複数のワークアウトドキュメント
  • oura-pp-cli sandbox single-daily-activity-document — サンドボックス - 単一の毎日のアクティビティドキュメント
  • oura-pp-cli sandbox single-daily-cardiovascular-age-document — サンドボックス - 単一の毎日の心血管年齢ドキュメント
  • oura-pp-cli sandbox single-daily-readiness-document — サンドボックス - 単一の毎日のコンディションドキュメント
  • oura-pp-cli sandbox single-daily-resilience-document — サンドボックス - 単一の毎日のレジリエンスドキュメント
  • oura-pp-cli sandbox single-daily-sleep-document — サンドボックス - 単一の毎日の睡眠ドキュメント
  • oura-pp-cli sandbox single-daily-spo2-document — サンドボックス - 単一の毎日のSpO2ドキュメント
  • oura-pp-cli sandbox single-daily-stress-document — サンドボックス - 単一の毎日のストレスドキュメント
  • oura-pp-cli sandbox single-enhanced-tag-document — サンドボックス - 単一の拡張タグドキュメント
  • oura-pp-cli sandbox single-rest-mode-period-document — サンドボックス - 単一の休息モード期間ドキュメント
  • oura-pp-cli sandbox single-ring-configuration-document — サンドボックス - 単一のリング設定ドキュメント
  • oura-pp-cli sandbox single-session-document — サンドボックス - 単一のセッションドキュメント
  • oura-pp-cli sandbox single-sleep-document — サンドボックス - 単一の睡眠ドキュメント
  • oura-pp-cli sandbox single-sleep-time-document — サンドボックス - 単一の睡眠時間ドキュメント
  • oura-pp-cli sandbox single-tag-document — サンドボックス - 単一のタグドキュメント
  • oura-pp-cli sandbox single-v-o2-max-document — サンドボックス - 単一のVO2 Maxドキュメント
  • oura-pp-cli sandbox single-workout-document — サンドボックス - 単一のワークアウトドキュメント

usercollection — ユーザーコレクションを管理

  • oura-pp-cli usercollection multiple-daily-activity-documents — 複数の日次アクティビティドキュメント
  • oura-pp-cli usercollection multiple-daily-cardiovascular-age-documents — 複数の日次心血管年齢ドキュメント
  • oura-pp-cli usercollection multiple-daily-readiness-documents — 複数の日次レディネスドキュメント
  • oura-pp-cli usercollection multiple-daily-resilience-documents — 複数の日次レジリエンスドキュメント
  • oura-pp-cli usercollection multiple-daily-sleep-documents — 複数の日次睡眠ドキュメント
  • oura-pp-cli usercollection multiple-daily-spo2-documents — 複数の日次Spo2ドキュメント
  • oura-pp-cli usercollection multiple-daily-stress-documents — 複数の日次ストレスドキュメント
  • oura-pp-cli usercollection multiple-enhanced-tag-documents — 複数の拡張タグドキュメント
  • oura-pp-cli usercollection multiple-heartrate-documents — 複数の心拍数ドキュメント
  • oura-pp-cli usercollection multiple-rest-mode-period-documents — 複数の休息モード期間ドキュメント
  • oura-pp-cli usercollection multiple-ring-battery-level-documents — 複数のリングバッテリーレベルドキュメント
  • oura-pp-cli usercollection multiple-ring-configuration-documents — 複数のリング設定ドキュメント
  • oura-pp-cli usercollection multiple-session-documents — 複数のセッションドキュメント
  • oura-pp-cli usercollection multiple-sleep-documents — 複数の睡眠ドキュメント
  • oura-pp-cli usercollection multiple-sleep-time-documents — 複数の睡眠時間ドキュメント
  • oura-pp-cli usercollection multiple-tag-documents — 複数のタグドキュメント
  • oura-pp-cli usercollection multiple-v-o2-max-documents — 複数のVo2 Maxドキュメント
  • oura-pp-cli usercollection multiple-workout-documents — 複数のワークアウトドキュメント
  • oura-pp-cli usercollection single-daily-activity-document — 単一の日次アクティビティドキュメント
  • oura-pp-cli usercollection single-daily-cardiovascular-age-document — 単一の日次心血管年齢ドキュメント
  • oura-pp-cli usercollection single-daily-readiness-document — 単一の日次レディネスドキュメント
  • oura-pp-cli usercollection single-daily-resilience-document — 単一の日次レジリエンスドキュメント
  • oura-pp-cli usercollection single-daily-sleep-document — 単一の日次睡眠ドキュメント
  • oura-pp-cli usercollection single-daily-spo2-document — 単一の日次Spo2ドキュメント
  • oura-pp-cli usercollection single-daily-stress-document — 単一の日次ストレスドキュメント
  • oura-pp-cli usercollection single-enhanced-tag-document — 単一の拡張タグドキュメント
  • oura-pp-cli usercollection single-personal-info-document — 単一の個人情報ドキュメント
  • oura-pp-cli usercollection single-rest-mode-period-document — 単一の休息モード期間ドキュメント
  • oura-pp-cli usercollection single-ring-configuration-document — 単一のリング設定ドキュメント
  • oura-pp-cli usercollection single-session-document — 単一のセッションドキュメント
  • oura-pp-cli usercollection single-sleep-document — 単一の睡眠ドキュメント
  • oura-pp-cli usercollection single-sleep-time-document — 単一の睡眠時間ドキュメント
  • oura-pp-cli usercollection single-tag-document — 単一のタグドキュメント
  • oura-pp-cli usercollection single-v-o2-max-document — 単一のVo2 Maxドキュメント
  • oura-pp-cli usercollection single-workout-document — 単一のワークアウトドキュメント

webhook — webhookを管理

  • oura-pp-cli webhook create — webhookサブスクリプションを作成
  • oura-pp-cli webhook delete — webhookサブスクリプションを削除
  • oura-pp-cli webhook get-subscription — webhookサブスクリプションを取得
  • oura-pp-cli webhook list-subscriptions — webhookサブスクリプションを一覧表示
  • oura-pp-cli webhook renew-subscription — webhookサブスクリプションを更新
  • oura-pp-cli webhook update — webhookサブスクリプションを更新
適切なコマンドを見つける

何をしたいかは分かっていても、どのコマンドを使えばよいか分からない場合は、CLI に直接尋ねます。

oura-pp-cli which "<capability in your own words>"

which は、自然言語で指定された機能のクエリを、この CLI の厳選された機能インデックスから最も一致するコマンドに解決します。終了コード 0 は少なくとも 1 件一致したことを示し、終了コード 2 は確信を持てる一致がなかったことを示します。その場合は --help に切り替えるか、より絞り込んだクエリを使用してください。

認証の設定

oura-pp-cli auth setup を実行すると、トークンを取得するための URL と手順が表示されます(URL を開くには --launch を追加します)。その後、トークンを保存します。

oura-pp-cli auth set-token YOUR_TOKEN_HERE

または、環境変数 OURA_OAUTH2 を設定してください。

oura-pp-cli doctor を実行して、設定を確認します。

エージェントモード

任意のコマンドに --agent を追加します。次のオプションに展開されます:--json --compact --no-input --no-color --yes。

  • パイプで利用可能 — 標準出力に JSON、標準エラー出力にエラーを出力します

  • フィルタリング可能 — --select でフィールドの一部を保持します。ドット区切りのパスはネストされた構造をたどり、配列は各要素をたどります。冗長な API でコンテキストを小さく保つうえで重要です。

    oura-pp-cli sandbox multiple-daily-activity-documents --agent --select id,name,status
    
  • プレビュー可能 — --dry-run で、リクエストを送信せずに内容を表示します

  • オフラインでも使いやすい — 同期/検索コマンドは、利用可能な場合、ローカルの SQLite ストアを使用できます

  • 非対話型 — プロンプトは表示せず、すべての入力をフラグで指定します

  • 明示的な再試行 — すでに存在する対象の作成を成功として扱う場合に限り --idempotent を使用し、削除対象が存在しない場合に成功として扱う場合に限り --ignore-missing を使用します

レスポンスエンベロープ

ローカルストアまたは API から読み取るコマンドは、出力を来歴エンベロープでラップします。

{
  "meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
  "results": <data>
}

データには .results を、ライブデータかローカルデータかの確認には .meta.source を解析してください。人間が読みやすい N results (live) の概要が標準エラー出力に表示されるのは、標準出力が端末であり、かつ機械可読形式のフラグ(--json、--csv、--compact、--quiet、--plain、--select)が設定されていない場合のみです。パイプやエージェントの利用、および明示的に形式を指定した実行では、標準出力に純粋な JSON が出力されます。

エージェントからのフィードバック

この CLI について気になる点に気づいた場合(あなた自身、またはエージェントが気づいた場合)は、記録してください。

oura-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
oura-pp-cli feedback --stdin < notes.txt
oura-pp-cli feedback list --json --limit 10

エントリーはローカルの ~/.local/share/oura-pp-cli/feedback.jsonl に保存されます。OURA_FEEDBACK_ENDPOINT が設定され、さらに --send が渡されるか OURA_FEEDBACK_AUTO_SEND=true が設定されていない限り、POST されることはありません。デフォルトの動作はローカル保存のみです。

バグ報告ではなく、意外だったことを書いてください。短く、具体的に、1 行で。それが積み重なっていきます。

出力の送信先

すべてのコマンドで --deliver <sink> を指定できます。出力は標準出力に加えて、または標準出力の代わりに、指定した送信先へ送られるため、エージェントはコマンド結果を手作業でパイプ処理せずに振り分けられます。次の 3 つの送信先がサポートされています。

送信先動作
stdoutデフォルト。標準出力のみに書き込みます
file:<path>出力を <path> にアトミックに書き込みます(一時ファイルを作成してから名前を変更します)
webhook:<url>出力本文を URL に POST します(--compact の場合は application/json または application/x-ndjson)

未対応のスキームは、サポートされている送信先を示す構造化エラーとともに拒否されます。Webhook の失敗時はゼロ以外の終了コードが返され、URL と HTTP ステータスが標準エラー出力に記録されます。

名前付きプロファイル

プロファイルは、保存済みのフラグ値のセットで、複数回の呼び出しで再利用できます。スケジュール実行されるエージェントが、HeyGen の「Beacon」パターンのように、毎回同じ設定で同じコマンドを呼び出す場合に使用します。

oura-pp-cli profile save briefing --json
oura-pp-cli --profile briefing sandbox multiple-daily-activity-documents
oura-pp-cli profile list --json
oura-pp-cli profile show briefing
oura-pp-cli profile delete briefing --yes

明示的に指定したフラグは常にプロファイルの値より優先され、プロファイルの値はデフォルト値より優先されます。agent-context は、利用可能なすべてのプロファイルを available_profiles に一覧表示するため、情報を調べるエージェントは実行時にプロファイルを検出できます。

終了コード

コード意味
0成功
2使用方法のエラー(引数が誤っています)
3リソースが見つかりません
4認証が必要です
5API エラー(上流の問題)
7レート制限中(待ってから再試行してください)
10設定エラー

引数の解析

$ARGUMENTS を解析します。

  1. 空、help、または --help → oura-pp-cli --help の出力を表示
  2. install で始まる → mcp で終わる場合は MCP のインストール、それ以外の場合は上記の前提条件を参照
  3. それ以外 → 直接使用(--agent を付けて CLI コマンドとして実行)

MCP サーバーのインストール

  1. MCP サーバーをインストールします:
    go install github.com/mvanhorn/printing-press-library/library/health/oura/cmd/oura-pp-mcp@latest
    
  2. Claude Code に登録します:
    claude mcp add oura-pp-mcp -- oura-pp-mcp
    
  3. 確認します:claude mcp list

直接使用する場合

  1. インストールされているか確認します:which oura-pp-cli 見つからない場合は、インストールを案内します(このスキルの最初にある前提条件を参照してください)。
  2. ユーザーのクエリに最適なコマンドを、上記の「独自の機能」と「コマンドリファレンス」から選びます。
  3. --agent フラグを付けて実行します:
    oura-pp-cli <command> [subcommand] [args] --agent
    
  4. 曖昧な場合は、サブコマンドのヘルプを確認します:oura-pp-cli <command> --help。

コメント