ドキュメント

あなたのスクリーンに MCP クライアントを接続

screenRIG はリモート MCP サーバーを運用しており、Claude、ChatGPT、Grok があなたのデジタルサイネージを扱えます。OAuth で接続します:ユーザーはダッシュボードでアプリを承認し、プロジェクトと読み取り専用、提案、管理を選択し、アプリはスクリーン、プレイリスト、メディア、スケジュール、Webhook、レポートのプロジェクトツールを取得します。

サーバー。

設定値
URLhttps://api.screenrig.ai/mcp
トランスポートステートレスな HTTP ストリーム。各リクエストは1つの POST。
プロトコルMCP 2026-07-28、MCP-Protocol-Versionヘッダーとして送信。initializeで始まるクライアントは2025-11-25、2025-06-18または2025-03-26を交渉します。
認証OAuth 2.0:すべてのリクエストでAuthorization: Bearer <access token>
レスポンスプロジェクト専用のJSONで、決してキャッシュされません。

サーバーはセッションを保持しません。GET、DELETE、Mcp-Session-Id、クッキーを拒否します。各リクエストは独立して認証されるため、切断されたアプリは次の呼び出しで動作しなくなります。リクエストは 4 MiB に制限されています。

公式プラグインは引き続きワークフロー全体を担います:ファイルのアップロードとアプリケーションのパックをマシン上で行います。クライアントがMCP経由でツールを呼び出す場合はMCPサーバーを使用し、バンドルされたCLIはローカル作業用に保持してください。

OAuth で接続

MCPクライアントはサインインを自力で見つけます。トークンなしのリクエストは401でWWW-Authenticate: Bearer resource_metadata="https://api.screenrig.ai/.well-known/oauth-protected-resource/mcp"を返し、そのドキュメントは認証サーバーhttps://api.screenrig.aiを示します。メタデータはhttps://api.screenrig.ai/.well-known/oauth-authorization-serverにあります。

  1. クライアントにサーバーURLを追加します。クライアントはブラウザでscreenRIG同意ページを開きます。
  2. 必要に応じてダッシュボードにサインインします。ページはアプリの名前とドメインを、screenRIGが登録したかどうかに関わらず、アプリが宣言した通りに表示し、ブラウザの戻り先を示します。
  3. プロジェクト、読み取り専用、提案、管理、機能を選択し、アプリを接続してパスキーで確認してください。
  4. ブラウザはアプリに戻り、独自のセッションを持ちます。セッションは自動更新され、各アクセストークンは15分間有効です。

今設定しているアプリのみ接続します。クライアントはクライアント ID メタデータドキュメント(CIMD)で識別されるため、登録ステップはありません。認証は PKCE と S256、正確なリダイレクト URI、60 秒間有効な使い捨てコードを使用します。

アプリはダッシュボードの Connected apps の Access ページに表示されます。そこでの Disconnect は数秒で終了し、再接続で別のプロジェクトやアクセスレベルを選択できます。背後のセッションについては Authentication を参照してください。

CLI と MCP ホストは別々のセッションを保持します。CLI の保存済みトークンを MCP 設定にコピーしたり、認証情報を会話に貼り付けたり、埋め込みカードに渡したりしないでください。ホストが OAuth トークンとリフレッシュを管理します。

公式プラグインはaccess:manage、screens、content、playlists、reportsを要求します。ユーザーはサインイン時にアクセスを承認します。新しいスクリーンショットにはProposeまたはManageアクセスとscreens機能が必要です。既存の読み取り専用接続はキャプチャ要求前に再承認が必要です。

MCP Appsホストは認証接続を通じてインタラクティブなスクリーン、メディア、プレイリストカードをレンダリングできます。カードはホストのMCP Appsブリッジを使用し、資格情報を含まずAPIを直接呼び出しません。MCP Appsレンダリングのないホストでもツールテキストと構造化データを利用できます。

読み取り専用、提案および管理

接続済みアプリはデフォルトで読み取り専用です。読み取り専用アプリは読み取りツールのみをリストし、セッションレベルを超えるツール呼び出しは HTTP 403 insufficient_access で WWW-Authenticate: Bearer error="insufficient_scope" と許可トークン scope を返します。Webhook 受信 URL は読み取り専用で伏せ字表示されます。

Propose アプリは、アップロード・注釈・提案を行うツールも一覧表示します。プレイリストやスクリーンの変更は status: "pending_review" で返され、レビューの id と url が付与されて適用されず、ダッシュボードの レビュー でユーザーが承認します。プロジェクトがエージェント変更のレビューを必須とする場合、すべてのアプリは Propose までしか操作できません。アプリに直接変更させるには、いったん切断し、Manage で再接続してください。

tools/list は、このセッションのアクセスレベルと権限で利用可能なツールのみを返します。プロジェクトのプラン権限が CLI と同様に適用されます。すべてのツール呼び出しはエージェントリクエストとして扱われ、他と同様に課金されます。

Claude に接続

Claude(ウェブ、デスクトップ、モバイル)で、URL https://api.screenrig.ai/mcp のカスタムコネクターを追加して接続します。Claudeが同意ページを開きます。

Claude Codeで、サーバーを追加し、次に /mcp から認証します:

claude mcp add --transport http screenrig https://api.screenrig.ai/mcp

ChatGPT に接続

ChatGPTで、サーバーURL https://api.screenrig.ai/mcp とOAuth認証を使ってアプリ(コネクター)を作成します。接続時にChatGPTが同意ページを開きます。ChatGPTはスクリーンのオフラインなどのイベントにサブスクライブして発生時に通知も可能です。

Grok に接続

ウェブのGrokで、サーバーURL https://api.screenrig.ai/mcp のカスタムコネクターを追加します。OAuthクライアントIDの要求時に screenrig-grok-web を入力し、クライアントシークレットは空のままにします。Grokが同意ページを開きます。

Grok Buildで、サーバーURLをリモートHTTPサーバーとして追加します。Grok Buildは初回使用時にブラウザのサインインを開きます。

APIからサーバーを利用する。

Claude、OpenAI、xAI API はリクエストごとにリモート MCP サーバーに接続し、あなたが提供する認証値を使います。サービスクライアントを使用してください:resource=https://api.screenrig.ai/mcp でトークンを取得し、サーバー URL と共に渡します。

curl -s https://api.screenrig.ai/oauth/token \
  -u "$SCREENRIG_CLIENT_ID:$SCREENRIG_CLIENT_SECRET" \
  -d grant_type=client_credentials \
  -d resource=https://api.screenrig.ai/mcp
APIトークンの送信先
Claude APIauthorization_token の MCP サーバーエントリ
OpenAI Responses APIauthorization の mcp ツール
xAI APIauthorization のリモート MCP ツール

そのリクエストのトークンは /mcp でのみ有効で、15分間持続し、サービスクライアントのプロジェクトにアクセスレベルと機能で作用します。期限切れ時に新しいものを要求してください。

ツール

すべてのツール名はscreenrig_で始まります。ツール呼び出しはCLIやREST APIと同じハンドラーを実行し、同じプロジェクト分離、許可、クレジット課金、レート制限、冪等性、リビジョンチェックを行います。

エリアツール
プロジェクトとエージェントproject_get、project_update(名前変更)、agent_status、project_credential_revoke
招待invitation_create(メールのみ)、invitation_list、invitation_revoke
スクリーンscreen_list, screen_get, screen_pair, screen_update, screen_archive, screen_unarchive, screen_rotate_public_id, screen_replace, screen_toast, screen_play_page, screen_identify, screen_suspend, screen_resume, screen_screenshot, screen_screenshot_current, screen_reboot, screen_clear_cache, screen_restart_app, screen_update_software, screen_command_cancel
スクリーンフォルダーscreen_folder_list, screen_folder_create, screen_folder_update, screen_folder_delete, screen_move
フリート操作screen_actions:IDまたはタグ、あるいはスクリーンフォルダーで選択されたスクリーン間の1つのアクション。
スケジュールとテイクオーバーscreen_playlist_schedule_get、_set、_clear;screen_takeover_set、_clear;schedule_calendar:スクリーン、フォルダー、タグ、キャンペーンが最大93日間に再生する内容と、各レベルの期間および競合;schedule_import_preview、schedule_import_commit:スケジュール行のシートを検証してプレビューし、プレビューの fingerprint で適用します(スケジュールインポートを参照)
キャンペーンcampaign_list、campaign_get、campaign_create、campaign_update(一時停止と再開も可能)、campaign_delete、campaign_screens、screen_campaigns:各キャンペーンが1つのスクリーンで再生される理由、または再生されない理由
表示電源screen_display, screen_display_clear, screen_display_schedule_get, _set, _clear
予定された再起動screen_reboot_schedule_show、_set、_clear:バックエンドは週間ウィンドウの開始ごとにスクリーンを再起動します。screen_actions は set_reboot_schedule と clear_reboot_schedule も受け付けます
プレイリストplaylist_list, playlist_get, playlist_create, playlist_update, playlist_patch, playlist_delete
レビューreview_list, review_get, review_withdraw
メディアmedia_list、media_get、media_thumbnail、media_update、media_delete、media_generate、media_versions、media_restore、media_version_delete:メディアファイルのバージョン履歴。ファイルの置換にはそのバイトが必要なので、screenrig media replaceを使用してください
カードcard_types_list, card_type_get, card_list, card_get, card_create, card_params_set, card_delete, card_data_get, card_data_set
アプリケーションapplication_list、application_get、application_update(名前変更)
アプリケーション K/Vkv_list, kv_get, kv_set, kv_delete
コメントcomment_get, comment_set, comment_delete
プロジェクトノートnote_list、note_get、note_add、note_confirm、note_resolve:エージェントがお互いに残すメモ。コンテキストであり指示ではありません。
通知notification_list, notification_get, notification_create, notification_update, notification_delete, notification_test, notification_deliveries
アラートalert_list, alert_get, alert_acknowledge, alert_mute_list, alert_mute_create, alert_mute_delete
レポートreport_list、report_get: フォルダー・画面・タグ別の集計、アラート履歴、再生証明を行として返します。report_subscription_list、_get、_create、_update、_delete、_send: スケジュールに従ってプロジェクトのメンバーにメールで送られるレポート(レポートとエクスポートを参照)
監査ログaudit_list、audit_get、audit_head、audit_verify: プロジェクトの設定変更を変更前と変更後とともに読み取り、チェーンを検証します。エントリを変更するツールはありません(監査ログを参照)
操作operation_get, operation_wait, operation_cancel
イベントと再生event_list, playback_list, playback_plays_list
フィードバックfeedback_bug_submit, feedback_bug_list, feedback_feature_submit, feedback_feature_list, feedback_get, feedback_reply
サービスcapabilities_get, server_status, browser_link_claim, visibility_open, muse_plugin_bootstrap
ドキュメントdocs_search、docs_get:推測する前に、公式の screenRIG ドキュメントを検索して読みます

ツールの動作方法

  • ページング。 リストツールは最新の1ページを返します(キー順にK/V)。非nullのnext_cursorをafterとして同じフィルターで次のページに渡します。
  • 再試行。 書き込みはオプションのidempotency_keyを受け入れます。同じ書き込みを安全に再試行するにはそれを再利用し、新しいリクエストを開始するには省略します。ペアリング、トースト、スクリーンショット、画像生成、招待、ブラウザリンク、操作キャンセル、フィードバックは必須で、入力スキーマに記載されています。
  • リビジョン。 書き込みはオプションのrevisionを受け入れます。古いリビジョンは拒否されます:リソースを再度読み込み、変更を再適用して再試行してください。
  • レビュー。プレイリストとスクリーンの変更ツールは、レビュー担当者が読む、最大280文字の任意のreview_noteを受け取ります。レビュー待ちの変更はpending_review本文を返します。ユーザーに承認待ちであることを伝え、レビューのurlを渡してください。承認済みメディアのタグを変更するmedia_updateは、review_state pending付きでアイテムを返します。スクリーンは承認済みのタグを保持し、そのレビューは数秒以内にレビューに表示されます。media_restoreは同じreview_noteを受け取り、pending_review本文を返します。人が承認するまで、メディアは現在のファイルを再生し続けます。
  • 再生されるもの。 スクリーンは、1つのスタックのうち条件を満たす最上位のレベルを再生します。順に、テイクオーバー、スクリーンに届くキャンペーン(priorityは0から100、高い順、次に新しい順)、プレイリストスケジュールのエントリ(記載順)、割り当てられたプレイリストです。キャンペーンとスケジュールエントリには、monthly、dates、except、interactionを含め、CLIと同じルールを指定できます。screen_getはeffective_playlistを報告し、sourceはtakeover、campaign、schedule、defaultのいずれかです。schedule_calendarはfromとto(間隔は最大93日)に加えてscreen_id、folder_id、tag、campaign_idのいずれか1つを受け取ります。同一のスタックを持つスクリーンをまとめ、各レベルの期間(plays、partial、outranked、conditional)と競合(同じ優先度の2つのキャンペーンが同時に条件を満たす場合、一度も再生されないレベル)を一覧表示します。キャンペーンの書き込みにはManageアクセスが必要で、レビューにはなりません:Proposeアプリが一覧表示するのは、キャンペーンの読み取りツールのみです。
  • スクリーンショット。 screen_screenshot は最大60秒待機し、image/webp 画像コンテンツとしてキャプチャを返します。screen_screenshot_current は新しいキャプチャを要求せず、最後に準備された静止画とそのcaptured_at 時間を返します。
  • 通知ルール。 notification_create と notification_update は、min_severity(info、warning、error)、severity(条件からレベルへ、たとえば {"not_playing": "error"})、active_hours(timezone、windows、および outside、hold、drop)、audience(screen_tags の代わりに、キャンペーンのオーディエンスのルール)を受け付けます。reach_drop(screens、percent)は、キャンペーンの到達数がどれだけ減少したら reach_dropped 条件で通知するかを設定し、その条件とだけ併用できます。reach_dropped と group_empty はキャンペーンを監視するため、screen_tags と audience がこれらを制限することはありません。更新時に null はそれぞれをクリアします。保留またはスキップされた通知は notification_deliveries に表示されます。
  • 秘密情報は含まれません。 Webhookの結果には署名秘密鍵が含まれず、各受信URLはそのオリジンに簡略化されます。招待はメールのみで送信されるため、招待リンクはモデルに届きません。
  • 取り消し中。 project_credential_revoke は呼び出しを行ったセッションのエージェントを切断します。confirmation: "REVOKE"が必要で、プロジェクトの最後のアクティブエージェントを切断するにはallow_last_agent: trueが必要です。プロジェクトとそのコンテンツは残ります。接続アプリはhttps://api.screenrig.ai/oauth/revokeで自身のセッションを終了し、またはアクセスページで人が切断します。
  • エラー。 拒否された呼び出しはツールエラーを返し、その構造化された内容は REST API の問題ドキュメントで、code、detail、status を含みます。結果の screenrig/result メタデータは http_status を持ち、サーバーが送信した場合は etag、credit_remaining または retry_after も含みます。

リソース

プロジェクトリソースはプライベートメタデータを公開し、キャッシュされません。サーバーはMCP Appsホストのインタラクティブカード用HTML UIリソースも提供します。

URI内容
screenrig://project認証済みプロジェクト
screenrig://screens/{id}1つのスクリーン。
screenrig://playlists/{id}1つのプレイリスト。
screenrig://media/{id}1つのメディアアイテムのメタデータ。
screenrig://applications/{id}1つのアプリケーションです。
screenrig://operations/{id}1つの非同期操作です。

イベント

サーバーは MCP イベントを webhook 配信で実装します。アプリはイベントに登録し、発生時に screenRIG が署名付きメッセージをアプリの HTTPS コールバックに POST します。これにより、ポーリングなしでスクリーンのオフラインやスクリーンショットの準備完了を通知できます。登録には OAuth セッション(接続済みアプリまたはサービスクライアント)が必要です。読み取り専用セッションも登録可能です。

イベントいつデータ機能
screen.offlineスクリーンが報告を停止しました。screenId, screenNamescreens
screen.onlineスクリーンがオンラインに戻りました。screenId, screenNamescreens
screen.screenshot_ready要求されたスクリーンショットがキャプチャされました。screenId, screenName, captureId, width, heightscreens
screen.playlist_unavailableスケジュールされたプレイリストは表示できません。screenId, screenName, playlistId, codescreens
screen.display_changedディスプレイの電源オーバーライドまたはスケジュールが変更されました。screenId, screenName, changescreens
agent_connection.approved人物がエージェントの接続またはサインインを承認しました。agentIdproject
note.addedエージェントがプロジェクトノートを追加しました。noteId, authorAgentId, aboutId任意
note.resolvedプロジェクトのメモが解決、置換、期限切れ、未確認、またはそのスクリーンやプレイリストが削除されました。noteId, cause任意

変更を提案するアプリは review.requested、review.approved、review.rejected、review.changes_requested から各決定を学習します。

データはIDと状態のみを保持します。完全なレコードはscreenrig_screen_getやscreenrig_screen_screenshot_currentなどのツールで読み取ってください。

一覧・購読

events/list は、このセッションが購読できるイベントを返します。それぞれに inputSchema と payloadSchema があります。スクリーンイベントはオプションで screenId 引数を指定し、1 つのスクリーンを追跡できます。events/subscribe はイベント、引数、コールバックを受け取ります:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "events/subscribe",
  "params": {
    "name": "screen.offline",
    "arguments": { "screenId": "scr_LOBBY" },
    "delivery": {
      "mode": "webhook",
      "url": "https://receiver.example.com/screenrig",
      "secret": "whsec_BASE64_OF_32_RANDOM_BYTES"
    },
    "ttlMs": 86400000
  }
}
  • シークレットはあなたのものです:whsec_に続き、24~64バイトのランダムバイトの base64 です。すべての配信に署名します。
  • コールバックはリダイレクトなしの公開 HTTPS URL です。
  • 結果は購読id(sub_…)、refreshBefore、cursor: nullを含みます。配信は今から開始し、再生はありません。
  • 有効期間。 ttlMs は5分から24時間を要求します。デフォルトは1時間で、null は24時間です。refreshBefore 前に同じ名前、引数、URLで再購読すると延長され、IDは同じままで結果は deliveryStatus に報告されます。更新時の新しいシークレットは古いものと10分間並行して署名されます。
  • 同じ名前、引数、delivery.urlでevents/unsubscribeを解除。

組織は、すべてのプロジェクトを合わせて最大100件のサブスクリプションを持てます。1セッションは1時間に120回までサブスクライブ可能です。サブスクリプションはセッションまたはサービスクライアントの取り消し、アプリの切断、人物の無効化、プロジェクトの削除で終了し、権限は15分ごとに再確認されます。

コールバックを検証

セッションからの最初のコールバックURLへのサブスクリプションは署名付き検証POSTを送信します。

{ "type": "verification", "challenge": "RANDOM_CHALLENGE" }

同じチャレンジをJSONで5秒以内に2xxに応答してください。

{ "challenge": "RANDOM_CHALLENGE" }

失敗したチェックは subscribe 呼び出しに JSON-RPC エラー -32015 で応答し、その data.reason は challenge_failed、timeout、connection_refused、tls_error、http_4xx または http_5xx です。

配信を受信

各配信は1件のイベントPOST(最大256 KiB)です。

{
  "eventId": "evt_EVENT",
  "name": "screen.offline",
  "timestamp": "2026-10-08T14:02:11Z",
  "data": { "screenId": "scr_LOBBY", "screenName": "Lobby" },
  "cursor": null
}

配信は Standard Webhooks に従います:

ヘッダー値
webhook-idメッセージID。これかeventIdで重複排除します。
webhook-timestamp送信時のUnix秒
webhook-signaturev1, と base64 HMAC-SHA256 署名。2つをスペースで区切り、新しいシークレットが引き継ぐ間有効です。
X-MCP-Subscription-IdサブスクリプションID

検証するには、whsec_の後のbase64をデコードしてキーにし、webhook-id、.、webhook-timestamp、.と生の本文に対してHMAC-SHA256を計算し、そのbase64を各v1,値と定数時間で比較します。タイムスタンプが自分の時計から5分以上ずれている場合は拒否します。

import { createHmac, timingSafeEqual } from "node:crypto";

export function verified(secret, headers, rawBody) {
  const key = Buffer.from(secret.slice("whsec_".length), "base64");
  const id = headers["webhook-id"];
  const timestamp = headers["webhook-timestamp"];
  if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
  const expected = createHmac("sha256", key).update(`${id}.${timestamp}.`).update(rawBody).digest();
  return headers["webhook-signature"].split(" ").some((entry) => {
    const [version, signature] = entry.split(",");
    const given = Buffer.from(signature ?? "", "base64");
    return version === "v1" && given.length === expected.length && timingSafeEqual(given, expected);
  });
}

2xxにすぐ応答してください。配信失敗は15分間リトライされます。410 Goneまたは413 Payload Too Largeで即時停止します。

これらには CLI を使用してください。

これらの手順はファイルやシークレットを移動するか、あなたのマシン上で実行されるため、バンドルされた CLI 内に留まります。

タスクCLI
プロジェクトを作成screenrig agent enroll --email ADDRESS --organization NAME
既存アカウントにエージェントをサインインさせるscreenrig login
メディアファイルをアップロードscreenrig media upload
アプリケーションをパックしてアップロードするscreenrig app pack, screenrig app upload
Webhook 署名シークレットを取得または更新screenrig webhooks create は一度だけ表示します。screenrig webhooks rotate-secret
招待リンクを送信するscreenrig invitations create --link
イベントをリアルタイムでフォローscreenrig events follow(MCP 経由、ポーリング screenrig_event_list)
再生をCSVでエクスポートscreenrig playback plays --format csv