サーバー。
| 設定 | 値 |
|---|---|
| URL | https://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にあります。
- クライアントにサーバーURLを追加します。クライアントはブラウザでscreenRIG同意ページを開きます。
- 必要に応じてダッシュボードにサインインします。ページはアプリの名前とドメインを、screenRIGが登録したかどうかに関わらず、アプリが宣言した通りに表示し、ブラウザの戻り先を示します。
- プロジェクト、読み取り専用、提案、管理、機能を選択し、アプリを接続してパスキーで確認してください。
- ブラウザはアプリに戻り、独自のセッションを持ちます。セッションは自動更新され、各アクセストークンは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/mcpChatGPT に接続
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 API | authorization_token の MCP サーバーエントリ |
| OpenAI Responses API | authorization の mcp ツール |
| xAI API | authorization のリモート 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/V | kv_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_statepending付きでアイテムを返します。スクリーンは承認済みのタグを保持し、そのレビューは数秒以内にレビューに表示されます。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, screenName | screens |
screen.online | スクリーンがオンラインに戻りました。 | screenId, screenName | screens |
screen.screenshot_ready | 要求されたスクリーンショットがキャプチャされました。 | screenId, screenName, captureId, width, height | screens |
screen.playlist_unavailable | スケジュールされたプレイリストは表示できません。 | screenId, screenName, playlistId, code | screens |
screen.display_changed | ディスプレイの電源オーバーライドまたはスケジュールが変更されました。 | screenId, screenName, change | screens |
agent_connection.approved | 人物がエージェントの接続またはサインインを承認しました。 | agentId | project |
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-signature | v1, と 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 |