服务器
| 设置 | 值 |
|---|---|
| URL | https://api.screenrig.ai/mcp |
| 传输 | 可流式 HTTP,无状态。每个请求为一个 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 和 Cookie。每个请求独立认证,断开连接的应用在下一次调用时停止工作。请求大小限制为 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 秒的一次性代码。
应用显示在仪表板 访问 页的 已连接应用 下。断开连接 可在几秒内结束连接;重新连接可选择不同项目或访问级别。详见 认证 了解其背后的会话。
CLI 和 MCP 主机保持独立会话。请勿将 CLI 保存的令牌复制到 MCP 配置,或将凭据粘贴到对话中,或传递给嵌入卡。主机自行管理 OAuth 令牌和刷新。
官方插件请求access:manage、screens、content、playlists和reports;用户在登录时批准访问。新截图需要 Propose 或 Manage 访问权限和screens能力。现有的只读连接在请求截图前需要重新同意。
MCP 应用主机可通过认证连接渲染交互式屏幕、媒体和播放列表卡片。卡片使用主机的 MCP 应用桥;不包含凭证且不直接调用 API。无 MCP 应用渲染的主机仍可使用工具文本和结构化数据。
只读、提议和管理
已连接的应用默认设置为只读。只读应用仅列出读取工具,调用超出会话级别的工具时,返回 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 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、标签或屏幕文件夹选择 |
| 排程和接管 | 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:每个活动为何在某个屏幕上播放或不播放 |
| 显示电源 | 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(重命名) |
| 应用键值 | 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 官方文档 |
工具的行为方式
- 分页。 列表工具返回一页,最新的优先(按键顺序 K/V)。传回非空
next_cursor作为after,使用相同过滤器,获取下一页。 - 重试。 写入操作接受一个可选的
idempotency_key。重用它可安全重试相同写入;省略则开始新请求。配对、提示、截图、图像生成、邀请、浏览器链接、操作取消和反馈均需此参数,且其输入模式会说明。 - 修订。 写入操作接受一个可选的
revision。过时的修订会被拒绝:请重新读取资源,重新应用更改并重试。 - 审核。播放列表和屏幕更改工具接受可选的
review_note(最多 280 个字符),供审核者阅读。等待审核的更改会返回pending_review正文:请告知用户该更改正在等待其批准,并提供审核的url。更改已批准媒体标签的media_update会返回带有review_statepending的条目:屏幕保留其已批准的标签,其审核将在几秒内出现在审核中。media_restore接受相同的review_note并返回pending_review正文:在有人批准之前,媒体继续播放其当前文件。 - 播放内容。 屏幕播放一个堆栈中生效的最高层级:其接管、覆盖它的活动(
priority0 到 100,较高者优先,然后是最新的)、按顺序排列的播放列表排程条目,最后是其分配的播放列表。活动和排程条目接受与 CLI 相同的规则,包括monthly、dates、except和interaction。screen_get报告effective_playlist,其source为takeover、campaign、schedule或default。schedule_calendar接受from和to(相隔最多 93 天)以及screen_id、folder_id、tag或campaign_id之一:它把堆栈相同的屏幕分组,并列出每个层级的时间段(plays、partial、outranked、conditional)和冲突(同一优先级的两个活动同时生效、永远不播放的层级)。活动写入需要管理权限,且从不变成审核: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 应用主机中的交互卡提供 HTML UI 资源。
| URI | 内容 |
|---|---|
screenrig://project | 已认证项目 |
screenrig://screens/{id} | 一个屏幕。 |
screenrig://playlists/{id} | 一个播放列表。 |
screenrig://media/{id} | 一个媒体项的元数据。 |
screenrig://applications/{id} | 一个应用程序。 |
screenrig://operations/{id} | 一个异步操作。 |
事件
服务器实现 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 参数以跟踪单个屏幕。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 分钟。 - 取消订阅 使用
events/unsubscribe和相同的名称、参数及delivery.url。
组织跨其所有项目最多持有 100 个订阅,一个会话每小时最多订阅 120 次。订阅在其会话或服务客户端被撤销、应用断开连接、人员停用或项目删除时结束,权限每 15 分钟重新检查。
验证回调
会话首次订阅回调 URL 时发送签名验证 POST:
{ "type": "verification", "challenge": "RANDOM_CHALLENGE" }在5秒内以相同的JSON挑战响应2xx:
{ "challenge": "RANDOM_CHALLENGE" }检查失败时,订阅调用返回 JSON-RPC 错误 -32015,其 data.reason 为 challenge_failed、timeout、connection_refused、tls_error、http_4xx 或 http_5xx。
接收交付
每次投递都是一个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 签名;两者之间用空格分隔,在新密钥接管期间同时存在 |
X-MCP-Subscription-Id | 订阅 ID |
要验证,请将 whsec_ 后的 base64 解码为密钥,计算 HMAC-SHA256,内容包括 webhook-id、.、webhook-timestamp、. 和原始正文,并以恒定时间将其 base64 与每个 v1, 值比较。拒绝与本地时间相差超过五分钟的时间戳:
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 |