Der Server
| Einstellung | Wert |
|---|---|
| URL | https://api.screenrig.ai/mcp |
| Transport | Streamfähiges HTTP, zustandslos. Jede Anfrage ist ein POST. |
| Protokoll | MCP 2026-07-28, gesendet als MCP-Protocol-Version-Header. Clients, die mit initialize starten, verhandeln 2025-11-25, 2025-06-18 oder 2025-03-26. |
| Authentifizierung | OAuth 2.0: Authorization: Bearer <access token> bei jeder Anforderung |
| Antworten | JSON, projektintern, niemals zwischengespeichert |
Der Server speichert keine Sitzungen. Er lehnt GET, DELETE, Mcp-Session-Id und Cookies ab. Jede Anfrage authentifiziert sich selbst, sodass eine getrennte App beim nächsten Aufruf nicht mehr funktioniert. Anfragen sind auf 4 MiB begrenzt.
Das offizielle Plugin übernimmt den gesamten Workflow: Es lädt Dateien hoch und packt Anwendungen auf Ihrem Rechner. Verwenden Sie den MCP-Server, wenn Ihr Client Werkzeuge über MCP aufruft, und behalten Sie die gebündelte CLI für die lokale Arbeit.
Mit OAuth verbinden
MCP-Clients finden die Anmeldung selbst. Eine Anfrage ohne Token antwortet mit 401 und WWW-Authenticate: Bearer resource_metadata="https://api.screenrig.ai/.well-known/oauth-protected-resource/mcp", und dieses Dokument nennt den Autorisierungsserver, https://api.screenrig.ai. Seine Metadaten sind unter https://api.screenrig.ai/.well-known/oauth-authorization-server zu finden.
- Fügen Sie die Server-URL zu Ihrem Client hinzu. Der Client öffnet die screenRIG-Zustimmungsseite in Ihrem Browser.
- Melden Sie sich bei Bedarf am Dashboard an. Die Seite zeigt den Namen und die Domain der App an, wie sie von der App deklariert werden, ob screenRIG sie registriert hat und wohin Ihr Browser zurückkehrt.
- Wählen Sie das Projekt, Nur Lesen, Vorschlagen oder Verwalten sowie die Berechtigungen, dann wählen Sie App verbinden und bestätigen mit Ihrem Passkey.
- Ihr Browser kehrt zur App zurück, die jetzt eine eigene Sitzung hat. Diese erneuert die Sitzung selbst; jeder Zugriffstoken ist 15 Minuten gültig.
Verbinden Sie nur eine App, die Sie gerade selbst einrichten. Clients identifizieren sich mit einem Client-ID-Metadaten-Dokument (CIMD), daher gibt es keinen Registrierungsschritt. Die Autorisierung verwendet PKCE mit S256, exakten Redirect-URIs und einem einmal verwendbaren Code, der 60 Sekunden gültig ist.
Die App erscheint unter Verbundene Apps auf der Zugriff-Seite des Dashboards. Trennen dort beendet sie innerhalb von Sekunden; erneutes Verbinden ermöglicht die Auswahl eines anderen Projekts oder Zugriffslevels. Siehe Authentifizierung für die dahinterliegenden Sitzungen.
Der CLI- und MCP-Host führen separate Sitzungen. Kopieren Sie das gespeicherte CLI-Token nicht in die MCP-Konfiguration, fügen Sie keine Anmeldedaten in ein Gespräch ein und übergeben Sie sie nicht an eine eingebettete Karte. Der Host verwaltet seine OAuth-Tokens und deren Aktualisierung selbst.
Das offizielle Plugin fordert access:manage, screens, content, playlists und reports an; der Benutzer genehmigt den Zugriff während der Anmeldung. Ein frischer Screenshot erfordert Propose- oder Manage-Zugriff und die screens-Fähigkeit. Eine bestehende schreibgeschützte Verbindung benötigt vor der Anforderung einer Aufnahme eine erneute Zustimmung.
MCP-Apps-Hosts können interaktive Bildschirm-, Medien- und Playlist-Karten über die authentifizierte Verbindung rendern. Die Karte verwendet die MCP-Apps-Brücke des Hosts; sie enthält keine Zugangsdaten und ruft die API nicht direkt auf. Hosts ohne MCP-Apps-Rendering können weiterhin Tooltexte und strukturierte Daten verwenden.
Nur lesen, vorschlagen und verwalten
Verbundene Apps sind standardmäßig auf Nur lesen eingestellt. Eine Nur-Lesen-App listet nur Lesewerkzeuge auf, und der Aufruf eines Werkzeugs über das Sitzungsniveau antwortet mit HTTP 403 insufficient_access mit WWW-Authenticate: Bearer error="insufficient_scope" und dem scope, der dies erlaubt. Webhook-Empfänger-URLs werden für Nur lesen als geschwärzt angezeigt.
Eine Propose-App listet auch die Werkzeuge auf, die hochladen, annotieren und vorschlagen. Ihre Playlist- und Bildschirmänderungen geben status: "pending_review" mit der Überprüfung id und url zurück, anstatt sie anzuwenden, und eine Person genehmigt sie im Dashboard unter Reviews. Wenn das Projekt eine Überprüfung für Agentenänderungen verlangt, arbeitet jede App höchstens im Propose-Modus. Um der App direkte Änderungen zu erlauben, trennen Sie sie und verbinden Sie sie erneut mit Manage.
tools/list gibt nur die Werkzeuge zurück, die das Zugriffslevel und die Fähigkeiten der Sitzung erlauben. Die Planberechtigungen des Projekts gelten zusätzlich, genau wie bei der CLI. Jeder Werkzeugaufruf ist eine Agentenanfrage, die wie jede andere abgerechnet wird.
Claude verbinden
Fügen Sie in Claude (Web, Desktop oder Mobil) einen benutzerdefinierten Connector mit der URL https://api.screenrig.ai/mcp hinzu und verbinden Sie ihn. Claude öffnet die Zustimmungsseite.
Fügen Sie in Claude Code den Server hinzu und authentifizieren Sie sich dann von /mcp aus:
claude mcp add --transport http screenrig https://api.screenrig.ai/mcpChatGPT verbinden
Erstellen Sie in ChatGPT eine App (Connector) mit der Server-URL https://api.screenrig.ai/mcp und OAuth-Authentifizierung. ChatGPT öffnet die Zustimmungsseite, wenn Sie es verbinden. ChatGPT kann auch Events abonnieren, wie z. B. wenn ein Bildschirm offline geht, und Sie benachrichtigen, wenn dies geschieht.
Grok verbinden
Fügen Sie in Grok im Web einen benutzerdefinierten Connector mit der Server-URL https://api.screenrig.ai/mcp hinzu. Wenn nach einer OAuth-Client-ID gefragt wird, geben Sie screenrig-grok-web ein und lassen Sie das Client-Geheimnis leer. Grok öffnet die Zustimmungsseite.
Fügen Sie in Grok Build die Server-URL als Remote-HTTP-Server hinzu. Grok Build öffnet beim ersten Serverzugriff die Browser-Anmeldeseite.
Verwenden Sie den Server über eine API
Die Claude-, OpenAI- und xAI-APIs verbinden sich pro Anfrage mit einem entfernten MCP-Server, mit einem von Ihnen bereitgestellten Autorisierungswert. Verwenden Sie einen Service-Client: Fordern Sie ein Token mit resource=https://api.screenrig.ai/mcp an und übergeben Sie es zusammen mit der Server-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 | Wohin das Token geht |
|---|---|
| Claude API | authorization_token des MCP-Servereintrags |
| OpenAI Responses API | authorization des mcp-Werkzeugs |
| xAI API | authorization des entfernten MCP-Werkzeugs |
Ein Token aus dieser Anfrage funktioniert nur auf /mcp, ist 15 Minuten gültig und wirkt auf das Projekt des Service-Clients mit dessen Zugriffslevel und Fähigkeiten. Fordern Sie ein neues an, wenn es abläuft.
Werkzeuge
Jeder Werkzeugname beginnt mit screenrig_. Werkzeugaufrufe führen dieselben Handler wie CLI und REST API aus, mit derselben Projektisolation, Berechtigungen, Kreditbelastungen, Ratenbegrenzungen, Idempotenz- und Revisionsprüfungen.
| Bereich | Werkzeuge |
|---|---|
| Projekt und Agent | project_get, project_update (umbenennen), agent_status, project_credential_revoke |
| Einladungen | invitation_create (nur E-Mail), invitation_list, invitation_revoke |
| Bildschirme | 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 |
| Bildschirmordner | screen_folder_list, screen_folder_create, screen_folder_update, screen_folder_delete, screen_move |
| Flottenaktionen | screen_actions: eine Aktion über Bildschirme, ausgewählt nach ID, Tag oder Bildschirmordner |
| Zeitpläne und Übernahme | screen_playlist_schedule_get, _set, _clear; screen_takeover_set, _clear; schedule_calendar: was ein Bildschirm, Ordner, Tag oder eine Kampagne über bis zu 93 Tage abspielt, mit den Zeitspannen und Konflikten jeder Ebene; schedule_import_preview, schedule_import_commit: eine Tabelle mit Zeitplanzeilen, geprüft und in der Vorschau angezeigt, dann angewendet mit dem fingerprint der Vorschau (siehe Zeitplan-Import) |
| Kampagnen | campaign_list, campaign_get, campaign_create, campaign_update (auch pausieren und fortsetzen), campaign_delete, campaign_screens, screen_campaigns: warum jede Kampagne auf einem Bildschirm abgespielt wird oder nicht |
| Anzeigeleistung | screen_display, screen_display_clear, screen_display_schedule_get, _set, _clear |
| Geplante Neustarts | screen_reboot_schedule_show, _set, _clear: Das Backend startet einen Bildschirm zu Beginn jedes wöchentlichen Fensters neu; screen_actions akzeptiert zusätzlich set_reboot_schedule und clear_reboot_schedule |
| Playlists | playlist_list, playlist_get, playlist_create, playlist_update, playlist_patch, playlist_delete |
| Überprüfungen | review_list, review_get, review_withdraw |
| Medien | media_list, media_get, media_thumbnail, media_update, media_delete, media_generate, media_versions, media_restore, media_version_delete: der Versionsverlauf einer Mediendatei; zum Ersetzen einer Datei werden ihre Bytes benötigt, verwenden Sie dafür screenrig media replace |
| Karten | card_types_list, card_type_get, card_list, card_get, card_create, card_params_set, card_delete, card_data_get, card_data_set |
| Anwendungen | application_list, application_get, application_update (umbenennen) |
| Anwendungs-K/V | kv_list, kv_get, kv_set, kv_delete |
| Kommentare | comment_get, comment_set, comment_delete |
| Projektnotizen | note_list, note_get, note_add, note_confirm, note_resolve: Notizen, die Agenten füreinander hinterlassen; Kontext, niemals Anweisungen |
| Benachrichtigungen | notification_list, notification_get, notification_create, notification_update, notification_delete, notification_test, notification_deliveries |
| Alarme | alert_list, alert_get, alert_acknowledge, alert_mute_list, alert_mute_create, alert_mute_delete |
| Berichte | report_list, report_get: eine Zusammenfassung nach Ordner, Bildschirm oder Tag, der Alarmverlauf oder ein Wiedergabenachweis als Zeilen; report_subscription_list, _get, _create, _update, _delete, _send: ein Bericht, der nach Zeitplan per E-Mail an Projektmitglieder geht (siehe Berichte und Exporte) |
| Audit-Protokoll | audit_list, audit_get, audit_head, audit_verify: lesen die Konfigurationsänderungen des Projekts mit ihrem Vorher und Nachher und verifizieren die Kette; kein Tool ändert einen Eintrag (siehe Audit-Protokoll) |
| Operationen | operation_get, operation_wait, operation_cancel |
| Ereignisse und Wiedergabe | event_list, playback_list, playback_plays_list |
| Feedback | feedback_bug_submit, feedback_bug_list, feedback_feature_submit, feedback_feature_list, feedback_get, feedback_reply |
| Dienst | capabilities_get, server_status, browser_link_claim, visibility_open, muse_plugin_bootstrap |
| Dokumentation | docs_search, docs_get: durchsuchen und lesen die offizielle screenRIG-Dokumentation, bevor geraten wird |
Wie sich die Werkzeuge verhalten
- Paging. Listenwerkzeuge geben eine Seite zurück, neueste zuerst (K/V in Schlüsselreihenfolge). Übergeben Sie ein nicht-null
next_cursorzurück alsaftermit denselben Filtern für die nächste Seite. - Wiederholungen. Schreibvorgänge akzeptieren optional ein
idempotency_key. Verwenden Sie es erneut, um denselben Schreibvorgang sicher zu wiederholen; lassen Sie es weg, um eine neue Anfrage zu starten. Pairing, Toasts, Screenshots, Bildgenerierung, Einladungen, Browser-Links, Abbruch von Operationen und Feedback erfordern eines, und ihre Eingabeschemata geben dies an. - Revisionen. Schreibvorgänge akzeptieren optional ein
revision. Eine veraltete Revision wird abgelehnt: Lesen Sie die Ressource erneut, wenden Sie die Änderung erneut an und versuchen Sie es erneut. - Überprüfungen. Die Werkzeuge für Playlist- und Bildschirmänderungen akzeptieren ein optionales
review_notemit höchstens 280 Zeichen, das der Prüfer liest. Eine Änderung, die auf Überprüfung wartet, liefert den Bodypending_review: Teilen Sie dem Benutzer mit, dass sie auf seine Freigabe wartet, und nennen Sie ihm dieurlder Überprüfung. Einmedia_update, der die Tags freigegebener Medien ändert, liefert das Element mitreview_statepending: Bildschirme behalten die freigegebenen Tags, und die Überprüfung erscheint innerhalb weniger Sekunden unter Überprüfungen. Einmedia_restoreakzeptiert dasselbereview_noteund liefert den Bodypending_review: Das Medium spielt seine Datei weiter ab, bis eine Person freigibt. - Was abgespielt wird. Ein Bildschirm spielt die oberste geltende Ebene eines Stapels ab: seine Übernahme, die Kampagnen, die ihn erreichen (
priority0 bis 100, höhere zuerst, dann die neueste), seine Playlist-Zeitplaneinträge der Reihe nach, dann seine zugewiesene Playlist. Kampagnen und Zeitplaneinträge nehmen dieselben Regeln wie die CLI entgegen, daruntermonthly,dates,exceptundinteraction.screen_getmeldeteffective_playlistmitsourcetakeover,campaign,scheduleoderdefault.schedule_calendarnimmtfromundto(höchstens 93 Tage auseinander) und eines vonscreen_id,folder_id,tagodercampaign_id: Es gruppiert Bildschirme mit identischen Stapeln und listet die Zeitspannen jeder Ebene (plays,partial,outranked,conditional) und die Konflikte (zwei Kampagnen gleicher Priorität, die gleichzeitig gelten, eine Ebene, die nie abgespielt wird). Schreibvorgänge an Kampagnen erfordern Manage-Zugriff und werden nie zu Überprüfungen: Eine Propose-App listet nur die Lesewerkzeuge für Kampagnen auf. - Screenshots.
screen_screenshotwartet bis zu 60 Sekunden und liefert die Aufnahme alsimage/webpBildinhalt zurück.screen_screenshot_currentgibt das zuletzt fertige Standbild und dessencaptured_atZeit zurück, ohne eine neue Aufnahme anzufordern. - Benachrichtigungsregeln.
notification_createundnotification_updateakzeptierenmin_severity(info,warningodererror),severity(Bedingung zu Schweregrad, etwa{"not_playing": "error"}),active_hours(timezone,windowsundoutside,holdoderdrop) undaudience(die Regeln einer Kampagnen-Zielgruppe stattscreen_tags).reach_drop(screens,percent) legt fest, wie groß ein Rückgang der Reichweite einer Kampagne sein muss, damit einereach_dropped-Bedingung eine Meldung sendet; sie ist nur mit dieser Bedingung gültig.reach_droppedundgroup_emptyüberwachen Kampagnen, daher schränkenscreen_tagsundaudiencesie nie ein. Beim Aktualisieren löschtnulljeweils den Wert. Eine zurückgehaltene oder übersprungene Meldung erscheint innotification_deliveries. - Geheimnisse bleiben außen vor. Webhook-Ergebnisse enthalten niemals das Signaturgeheimnis und reduzieren jede Empfänger-URL auf ihren Ursprung. Einladungen erfolgen nur per E-Mail, sodass kein Einladungslink das Modell erreicht.
- Widerrufen.
project_credential_revoketrennt den Agenten, dessen Sitzung den Aufruf gemacht hat. Es erfordertconfirmation: "REVOKE"undallow_last_agent: true, um den letzten aktiven Agenten des Projekts zu trennen. Das Projekt und seine Inhalte bleiben erhalten. Eine verbundene App beendet ihre eigene Sitzung überhttps://api.screenrig.ai/oauth/revoke, oder eine Person trennt sie auf der Zugriffsseite. - Fehler. Ein abgelehnter Aufruf gibt einen Tool-Fehler zurück, dessen strukturierter Inhalt das Problem-Dokument der REST-API ist, mit
code,detailundstatus. Die Metadaten des Ergebnissesscreenrig/resultenthaltenhttp_statussowieetag,credit_remainingoderretry_after, wenn der Server diese gesendet hat.
Ressourcen
Projektressourcen geben private Metadaten preis und werden niemals zwischengespeichert. Der Server stellt auch eine HTML-Benutzeroberflächenressource für interaktive Karten in MCP Apps-Hosts bereit.
| URI | Inhalte |
|---|---|
screenrig://project | Das authentifizierte Projekt |
screenrig://screens/{id} | Ein Bildschirm |
screenrig://playlists/{id} | Eine Playlist |
screenrig://media/{id} | Metadaten eines Mediums |
screenrig://applications/{id} | Eine Anwendung |
screenrig://operations/{id} | Eine asynchrone Operation |
Ereignisse
Der Server implementiert MCP-Ereignisse mit Webhook-Zustellung. Eine App abonniert ein Ereignis, und screenRIG sendet eine signierte Nachricht an den HTTPS-Rückruf der App, wenn es passiert, sodass die App Ihnen mitteilen kann, dass ein Bildschirm offline ging oder ein Screenshot bereitsteht, ohne zu pollieren. Das Abonnieren benötigt eine OAuth-Sitzung: eine verbundene App oder einen Service-Client. Nur-Lese-Sitzungen können abonnieren, da Ereignisse Lesevorgänge sind.
| Ereignis | Wann | Daten | Fähigkeit |
|---|---|---|---|
screen.offline | Ein Bildschirm hat die Berichterstattung eingestellt | screenId, screenName | screens |
screen.online | Ein Bildschirm ist wieder online gekommen | screenId, screenName | screens |
screen.screenshot_ready | Ein angefordertes Screenshot wurde aufgenommen | screenId, screenName, captureId, width, height | screens |
screen.playlist_unavailable | Eine geplante Playlist kann nicht angezeigt werden | screenId, screenName, playlistId, code | screens |
screen.display_changed | Eine Anzeigeleistungsüberschreibung oder Zeitplan wurde geändert | screenId, screenName, change | screens |
agent_connection.approved | Eine Person hat die Verbindung oder Anmeldung eines Agenten genehmigt | agentId | project |
note.added | Ein Agent hat eine Projektnotiz hinzugefügt | noteId, authorAgentId, aboutId | irgendein |
note.resolved | Eine Projektnotiz wurde gelöst, ersetzt, ist abgelaufen, nicht bestätigt oder ihr Bildschirm oder ihre Playlist wurde gelöscht | noteId, cause | irgendein |
Eine App, die Änderungen vorschlägt, lernt jede Entscheidung von review.requested, review.approved, review.rejected und review.changes_requested.
Daten enthalten nur IDs und Zustände. Lesen Sie den vollständigen Datensatz mit einem Tool, wie screenrig_screen_get oder screenrig_screen_screenshot_current.
Auflisten und abonnieren
events/list gibt die Ereignisse zurück, die diese Sitzung abonnieren darf, jeweils mit einem inputSchema und einem payloadSchema. Bildschirmevents nehmen ein optionales screenId-Argument, um einem Bildschirm zu folgen. events/subscribe nimmt das Ereignis, seine Argumente und den Callback entgegen:
{
"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
}
}- Das Geheimnis gehört Ihnen:
whsec_gefolgt von Base64 von 24 bis 64 zufälligen Bytes. Es signiert jede Lieferung. - Der Callback ist eine HTTPS-URL an einer öffentlichen Adresse, ohne Weiterleitungen.
- Das Ergebnis enthält das Abonnement
id(sub_…),refreshBeforeundcursor: null. Lieferungen beginnen ab jetzt; es gibt keine Wiederholung. - Lebensdauer.
ttlMsverlangt 5 Minuten bis 24 Stunden; der Standard ist eine Stunde, undnullerhält 24 Stunden. Abonnieren Sie vorrefreshBeforeerneut mit demselben Namen, denselben Argumenten und URL, um es zu verlängern; die ID bleibt gleich, und das Ergebnis meldetdeliveryStatus. Ein neues Geheimnis bei einer Aktualisierung wird 10 Minuten lang neben dem alten signiert. - Abbestellen mit
events/unsubscribeund demselben Namen, Argumenten unddelivery.url.
Eine Organisation enthält bis zu 100 Abonnements über alle ihre Projekte, und eine Sitzung kann sich 120 Mal pro Stunde abonnieren. Ein Abonnement endet, wenn seine Sitzung oder sein Service-Client widerrufen wird, seine App getrennt wird, seine Person deaktiviert wird oder sein Projekt gelöscht wird, und seine Berechtigung wird alle 15 Minuten erneut geprüft.
Callback verifizieren
Das erste Abonnement von einer Sitzung zu einer Callback-URL sendet einen signierten Verifizierungs-POST:
{ "type": "verification", "challenge": "RANDOM_CHALLENGE" }Antworten Sie 2xx innerhalb von 5 Sekunden mit derselben Herausforderung als JSON:
{ "challenge": "RANDOM_CHALLENGE" }Eine fehlgeschlagene Prüfung antwortet auf den Subscribe-Aufruf mit JSON-RPC-Fehler -32015, dessen data.reason challenge_failed, timeout, connection_refused, tls_error , http_4xx oder http_5xx ist.
Lieferungen empfangen
Jede Zustellung ist ein POST eines Ereignisses, maximal 256 KiB:
{
"eventId": "evt_EVENT",
"name": "screen.offline",
"timestamp": "2026-10-08T14:02:11Z",
"data": { "screenId": "scr_LOBBY", "screenName": "Lobby" },
"cursor": null
}Zustellungen folgen Standard-Webhooks:
| Kopfzeile | Wert |
|---|---|
webhook-id | Die Nachrichten-ID. Deduplizieren anhand dieser oder eventId. |
webhook-timestamp | Unix-Sekunden, als es gesendet wurde |
webhook-signature | v1, und die base64 HMAC-SHA256-Signatur; zwei, getrennt durch ein Leerzeichen, während ein neuer Schlüssel übernimmt |
X-MCP-Subscription-Id | Die Abonnement-ID |
Zur Überprüfung dekodieren Sie das Base64 nach whsec_ in den Schlüssel, berechnen HMAC-SHA256 über webhook-id, ., webhook-timestamp, . und den Rohkörper und vergleichen dessen Base64 mit jedem v1,-Wert in konstanter Zeit. Lehnen Sie einen Zeitstempel ab, der mehr als fünf Minuten von Ihrer Uhr abweicht:
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);
});
}Antworten Sie 2xx schnell. Eine fehlgeschlagene Zustellung wird 15 Minuten lang erneut versucht; 410 Gone oder 413 Payload Too Large stoppt sie sofort.
Verwenden Sie die CLI für diese
Diese Schritte verschieben Dateien oder Geheimnisse oder laufen auf Ihrem Gerät, sodass sie in der gebündelten CLI bleiben:
| Aufgabe | CLI |
|---|---|
| Projekt erstellen | screenrig agent enroll --email ADDRESS --organization NAME |
| Einen Agenten bei einem bestehenden Konto anmelden | screenrig login |
| Mediendateien hochladen | screenrig media upload |
| Anwendung packen und hochladen | screenrig app pack, screenrig app upload |
| Webhook-Signaturgeheimnis erhalten oder rotieren | screenrig webhooks create druckt ihn einmal; screenrig webhooks rotate-secret |
| Senden Sie einen Einladungslink | screenrig invitations create --link |
| Verfolgen Sie Ereignisse live | screenrig events follow (über MCP, Abfrage screenrig_event_list) |
| Wiedergaben als CSV exportieren | screenrig playback plays --format csv |