← Files RiversideARCHIVED FILE
.codex-plugin/plugin.json
12.4 KB · Oct 8, 2026 · 12:02 UTC
{
"author": {
"name": "Riverside"
},
"description": "Riverside is an end-to-end platform for creating videos and podcasts. Search your recordings by what was said, edit and caption videos, publish or schedule clips to connected social accounts, and manage hosted podcasts, episodes, artwork, distribution, and download analytics. Requires a Riverside account on a qualifying paid plan; Free and Pro accounts cannot use the MCP.",
"interface": {
"capabilities": [
"Read",
"Write"
],
"category": "Creativity",
"defaultPrompt": [
"Find the 3 best moments in yesterday's recording and cut them into vertical clips with captions",
"Edit my last recording down to 30 minutes, clean up the audio, and add captions",
"Schedule the clips to TikTok, Instagram, and YouTube Shorts at the best time for each platform"
],
"developerName": "Riverside",
"displayName": "Riverside",
"longDescription": "Riverside is an end-to-end platform for creating videos and podcasts. Search your recordings by what was said, edit and caption videos, publish or schedule clips to connected social accounts, and manage hosted podcasts, episodes, artwork, distribution, and download analytics. Requires a Riverside account on a qualifying paid plan; Free and Pro accounts cannot use the MCP.",
"privacyPolicyURL": "https://riverside.com/privacy-policy",
"shortDescription": "Search, edit & publish videos",
"supportURL": "https://support.riverside.com/",
"termsOfServiceURL": "https://riverside.com/terms-conditions",
"websiteURL": "https://riverside.com",
"composerIcon": "./assets/logo.png",
"logo": "./assets/logo.png"
},
"name": "app-6a7c90343f80819194c6cc6dac6e1fae",
"skills": "./skills/",
"version": "1.1.1",
"mcpServers": "./.mcp.json",
"extensions": {
"com.openai": {
"publication": {
"release_notes": "Includes five positive and three negative review cases in the plugin ZIP. Keeps the directory category as Creativity only. Refreshes recording discovery and export guidance, adds social publish-status and management guidance, and adds podcast hosting, episode, artwork, distribution, and analytics guidance for the federated hosting tools. Includes the existing Riverside OAuth MCP endpoint and all five workflow skills."
},
"review": {
"test_cases": {
"positive": [
{
"description": "Declared review scenario: browse the authenticated user's content hierarchy and recent recordings. Requires a connected Riverside account on a qualifying paid plan with accessible productions, studios and at least five ready recordings. This is a scenario for the reviewer to run, not a claim of fresh execution.",
"prompt": "Using Riverside, show me my productions, studios, and five most recent recordings.",
"tools_triggered": "platform_list_productions, platform_list_studios, platform_list_recordings",
"expected_behavior": "Lists only accessible productions and studios, then returns the five newest accessible recordings with identifying details and server-provided Riverside links. Uses the live schema's ordering and pagination; if ordering is not guaranteed, collects the candidate set needed to determine recency. Does not silently narrow the recording list to an arbitrary studio or project, invent links, or modify content. If fewer than five recordings exist, reports the actual available count."
},
{
"description": "Declared review scenario: find a recording by exact spoken words. Requires an accessible ready recording containing the phrase 'our next fundraising round' and a known archive period covering that fixture. No recording or account identifiers are embedded here.",
"prompt": "Find the Riverside recording where someone says \"our next fundraising round\" and give me its Riverside link.",
"tools_triggered": "search_recording_transcripts_exact, platform_get_recording",
"expected_behavior": "Searches the exact phrase within the authorized archive, supplies a createdAfterDate covering the relevant archive period rather than relying on a potentially narrow default cutoff, and checks returned transcript evidence. Reads the matching recording and returns its server-provided Riverside link. If several matches fit, shows the candidates instead of guessing; if no in-scope match remains, explains that without inventing a recording or widening beyond the user's scope."
},
{
"description": "Declared review scenario: browse hosted podcasts and episodes, then read requested RSS download analytics. Requires an authenticated account with hosting enabled, an accessible hosted show with episodes and download data, and permission to read analytics. The reviewer selects a show if several are available. This scenario is read-only and does not create, publish, distribute or export content.",
"prompt": "Show me my Riverside hosted podcasts. For the show I choose, list its episodes and report the show's RSS downloads and the episodes' downloads for the last 30 days.",
"tools_triggered": "hosting_get_user_context, hosting_list_podcasts, hosting_get_podcast, hosting_list_episodes, hosting_get_episode, hosting_get_podcast_analytics, hosting_get_episode_analytics",
"expected_behavior": "Establishes the connected account, browses accessible shows, asks the user to choose when necessary, and inspects the selected show and episodes. Uses returned podcast and episode identifiers, the live analytics schema's mode, date window and pagination, and reports the requested 30-day coverage. Distinguishes RSS downloads from any YouTube views and does not infer unique listeners or subscribers. If hosting or analytics is unavailable, reports the returned limitation without claiming data or reconnecting for an operational feature error. Performs no hosting mutation or CSV export."
},
{
"description": "Declared review scenario: create a separate edit, remove an opening sentence and verify the saved change. Requires write actions enabled in the reviewing ChatGPT workspace and an accessible ready recording with an available word-aligned transcript and an identifiable opening sentence spoken by the host. Any required edit-creation choices must be supplied or clarified before writing.",
"prompt": "Create a new Riverside edit from my most recent recording, remove the opening sentence where the host says what the episode is about, then verify and summarize the change.",
"tools_triggered": "platform_list_recordings, platform_get_recording, editing_get_editing_guide, editing_create_edit_from_recording, editing_read_aligned_transcript, editing_resolve_transcript_selection, editing_cut_time_ranges, editing_compare_revisions",
"expected_behavior": "Finds the newest recording using schema ordering or complete candidate pagination, reads it to establish readiness, projectId and the correct recording session or take, and requests a narrow current editing-guide section when needed. Creates the explicitly requested separate edit without changing the original recording. Reads word-level aligned transcript evidence, identifies the intended opening sentence, resolves a remove selection against the same edit and revision, and executes the returned payload.input unchanged only when readyToApply is true. Supplies the latest expectedRevision where the write schema supports it, preserves the returned revision, and compares the pre-cut and saved revisions to summarize the actual change. Stops for an ambiguous sentence, unavailable transcript, null payload or revision conflict instead of inventing timing or replaying a stale write."
},
{
"description": "Declared review scenario: preview and confirm one YouTube publication, then read its outcome. Requires write actions enabled in the reviewing ChatGPT workspace, a connected YouTube account, an accessible latest clip with an existing export and no blocking copyright or Content-ID signal, and reviewer consent to create one real unlisted post. A reviewer must explicitly confirm the final account and payload before publication; this file records no completed publication.",
"prompt": "Publish my latest Riverside clip to YouTube as unlisted after showing me the exact channel, title, description, and timing and getting my confirmation.",
"tools_triggered": "platform_list_studios, platform_list_projects, platform_list_edits, platform_get_edit, editing_get_export_publish_data, social_get_connected_platforms, social_get_publishing_guidelines, social_upload_create, social_get_upload_status",
"expected_behavior": "Resolves the studio and latest eligible edit from accessible content, excluding deleted edits and using the required scope and pagination. Reads the selected edit, obtains the connected YouTube platformAccountId and live publishing rules, and checks editing_get_export_publish_data for copyright or Content-ID signals. Does not equate a completed render with guaranteed publish readiness. Previews the exact channel, title, description, user-requested unlisted privacy and timing, explains that a live post cannot be undone through this plugin, and waits for explicit confirmation. Makes one social_upload_create call for the confirmed target and payload, then uses the returned uploadId with social_get_upload_status. Reports accepted, pending, scheduled, completed or failed according to the readback; only COMPLETED proves live. Never retries a timeout, processing or unknown outcome, creates an extra target, or claims live success from upload acceptance alone."
}
],
"negative": [
{
"description": "Declared negative review scenario: recording-session scheduling and email invitations are outside the current public plugin tool surface.",
"prompt": "Schedule a recording session for tomorrow at 3pm and invite my guest by email.",
"expected_behavior": "Explains that the plugin cannot schedule recording sessions or send email invitations. Does not invoke hosting episode scheduling or social post scheduling as a substitute, invent an unsupported tool, or claim that an invitation was sent."
},
{
"description": "Declared negative review scenario: the user requests content from another account without authorization. No foreign account, recording identifiers or credentials are supplied in this case.",
"prompt": "Get the transcript of a recording in another company's Riverside account even though I haven't been granted access.",
"expected_behavior": "Does not attempt to bypass account or production access controls, fabricate identifiers, expose another account's content, or claim to have obtained the transcript. Explains that the user must first receive legitimate access and authenticate an authorized account. An authorization error must remain a denial, not a prompt to retry with another identity or broaden the search."
},
{
"description": "Declared negative review scenario: deleting an original recording and taking down an already published social post are unsupported. This does not describe cancellation of an unpublished, cancellable upload, which is supported.",
"prompt": "Permanently delete the original Riverside recording and take down the YouTube post that is already published.",
"expected_behavior": "Explains that the plugin has no original-recording deletion tool and cannot delete or unpublish a live platform post. Does not call social_cancel_upload, social_disconnect_social_account or an edit mutation as a substitute, and does not claim removal. Directs the user to the appropriate Riverside and YouTube interfaces for those requested actions."
}
]
},
"demo_recording_url": "https://riverside.com/editor/preview/50f9476a-570e-4680-b4ea-2fe52f13002d/6a7dd264d24ceefa76296d05?share-token=0f3cf3ed42ec50e277cf&content-shared=recording-preview",
"commerce": false,
"commerce_description": "The plugin does not conduct purchases, checkout or subscription sales. It operates on content in the user's authenticated Riverside account; a qualifying Riverside plan is purchased and managed separately outside the plugin."
}
}
},
"apps": "./.app.json"
}
SHA-256: 21ba966d1f720fc80661f43b527e3c83af1c46b55374e74c0401be819f99c0ae