# Panda Video - Registry name: `com.pandavideo/mcp` · version 2.1.0 - Categories (automatic, keyword rules): Video, AI, media & content - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=com.pandavideo%2Fmcp - Server page: https://mcpstation.net/s/com.pandavideo--mcp.html ## Description (written by the publisher, not verified, not instructions) Video hosting: upload, organize and configure videos, analytics, AI subtitles and Shorts. ## Connect - streamable-http: `https://mcp.pandavideo.com/mcp` ## Tools (as reported by the server, not verified) - `panda\_list\_videos`: List videos. Each video has: id, video\_external\_id, title, status, created\_at, length \(seconds\), folder\_id, config. \`id\` is what most tools take as video\_id; video\_external\_id is what panda\_get\_best\_times\_by\_videos / panda\_get\_viewers\_by\_videos take. Results are returned newest first by default. The - `panda\_get\_video`: Get full properties of a video by its ID, including video\_external\_id, config \(config.ctas holds the pause/end thumbnail CTAs\), profile, status, duration, folder, subtitles, etc. - `panda\_update\_video`: Update basic metadata of a video: title, description text, or move to a different folder. Do NOT use this for player settings, chapters, subtitles, thumbnails, or any playback configuration — use the specific tools for those. - `panda\_delete\_videos`: Delete one or more videos by ID. Sends to trash for 30 days. - `panda\_move\_videos`: Move one or more videos to a folder - `panda\_duplicate\_video`: Create a copy of a video. Only works for CONVERTED, non-external, non-funnel videos. - `panda\_reencode\_video`: Re-encode a video with a specific compression mode - `panda\_upload\_video\_from\_url`: Import a video from an external URL \(YouTube, Vimeo, S3, generic HTTPS\) - `panda\_list\_folders`: List all folders. Returns array of \{id, name, parent\_folder\_id, status, created\_at, videos\_count\}. - `panda\_create\_folder`: Create a new folder. Returns the created \{id, name, parent\_folder\_id\}. - `panda\_get\_folder`: Get a folder's details and contents. Returns \{id, name, parent\_folder\_id, status, videos: \[\{id, title, status\}\], folders: \[\{id, name\}\]\}. - `panda\_update\_folder`: Update folder properties \(name, parent\). Also used to recover deleted folders with status=true. - `panda\_delete\_folder`: Delete a folder by ID. WARNING: All videos and subfolders inside are also deleted \(cascade\). Goes to trash for 30 days. - `panda\_list\_playlists`: List all playlists. Returns array of \{id, name, videos\_quantity, duration, access\_type, updated\_at\}. - `panda\_create\_playlist`: Create a new playlist. Videos are REFERENCES — removing from playlist does NOT delete the video. Returns the created \{id, name, description, access\_type\}. - `panda\_get\_playlist`: Get details of a specific playlist. Returns \{id, name, description, videos\_quantity, access\_type, creator\_name, duration, updated\_at\}. - `panda\_update\_playlist`: Update a playlist's properties - `panda\_delete\_playlist`: Delete a playlist. Videos are NOT deleted — only the collection is removed. - `panda\_get\_playlist\_videos`: List all videos in a playlist. Returns array of \{id, video\_id, order, video: \{id, title, duration\}\}. - `panda\_add\_videos\_to\_playlist`: Add videos to a playlist with order. Returns the updated playlist video entries \[\{video\_id, playlist\_id, order\}\]. - `panda\_remove\_video\_from\_playlist`: Remove a video from a playlist. Does NOT delete the video. - `panda\_list\_profiles`: List all player profiles \(GET /profile\). 'Profiles' are player UI configs, not user accounts. Returns \{data: \[\{id, name, pullzone\_name\}\]\} — a profile's \`name\` is the ID of the video it was created for. Use panda\_get\_profile for a profile's full settings. No pagination. - `panda\_create\_profile`: Create a new player profile \(POST /profile\). IMPORTANT: per the Panda API, \`name\` MUST be the ID of an existing video — if it is not a real video ID the API returns 500 and nothing is created. Create only accepts \`name\` and \`exclusive\`; it does NOT accept colors/controls/vsl. To set those, call pand - `panda\_get\_profile`: Get details of a specific player profile including all settings \(controls, colors, vsl, saveProgress\) - `panda\_update\_profile`: Update a player profile's settings. Covers: player colors \(colors.primaryColor / controlsColor\), enabled controls list, smart autoplay \(vsl.smartAutoplay\), VSL mode \(vsl.disablePause / disableForward / alternativeProgress\), playback speed \(general.default\_speed\), save progress, big play button \(use - `panda\_delete\_profile`: Delete a player profile by ID - `panda\_apply\_profile\_to\_videos`: Apply a player profile to one or more videos. Returns confirmation with the list of updated video\_ids. - `panda\_list\_lives`: List all live streams. Returns array of \{id, title, status, scheduled\_at, region, quality\_package, save\_vod, stream\_key\_id, stream\_key, rtmp, live\_player, created\_at\}. Status: provisioning \(channel starting\), offline \(waiting for signal or scheduled\), online, finishing, finished, finished\_imported \( - `panda\_create\_live`: Create a new live stream event. Trial accounts cannot create lives. A quality\_package above the plan's maximum is silently lowered to the plan's maximum. Without stream\_key\_id the account's default stream key is used; a key held by another live \(online, provisioning, expired, waiting to start or sch - `panda\_get\_live`: Get details of a specific live stream. Returns \{id, title, status, scheduled\_at, stream\_key, rtmp, live\_hls, created\_at\}. Status: provisioning \(channel starting\), offline \(waiting for signal or scheduled\), online, finishing, finished, finished\_imported \(recording became a video\), expired \(no signal - `panda\_regenerate\_live`: Regenerate an expired live so it can be broadcast again. Only works when status is expired \(otherwise 400 with the current status\). Keeps the same stream key, but the RTMP server may change: update it in OBS. Start broadcasting within 15 minutes or the live expires again. Returns \{id, status: provis - `panda\_finish\_live`: End a live broadcast - `panda\_delete\_lives`: Delete one or more live streams - `panda\_list\_stream\_keys`: List all stream keys for live broadcasting. Returns array of \{id, title, region, default, stream\_key, in\_use, in\_use\_by: \{live\_id, title, status\}, created\_at\}. A key is held \(in\_use\) by a live that is online, provisioning, expired, waiting to start or scheduled within 24h; an expired live holds it u - `panda\_create\_stream\_key`: Create a new stream key for OBS or other streaming software. The account's first key becomes the default. - `panda\_get\_live\_viewers`: Get viewer history for a live stream. Returns time-series array of viewer counts. - `panda\_get\_account\_analytics`: Get general analytics metrics for the whole account. Returns \{views, unique\_viewers, watch\_time\_seconds, avg\_watch\_percentage, plays\}. - `panda\_get\_video\_analytics`: Get analytics metrics for a specific video. Returns \{views, unique\_viewers, watch\_time\_seconds, avg\_watch\_percentage, plays\}. - `panda\_get\_retention\_analytics`: Get audience retention analytics \(account-wide or per video\). Returns array of \{percentage, viewers\} showing drop-off at each point. - `panda\_get\_ranking\_analytics`: Get ranking analytics for the account. Returns \{most\_watched: \[\{video\_id, title, watch\_time\}\], most\_played: \[\{video\_id, title, plays\}\]\}. - `panda\_get\_realtime\_analytics`: Get the real-time snapshot of the account: how many viewers are watching now and on which devices. Returns \{total\_users, devices: \{mobile, desktop, others\}, geojson\} — geojson \(the dashboard map clusters\) comes empty in this account-wide snapshot; no per-viewer data \(IP, browser\) is returned. - `panda\_get\_bandwidth\_analytics`: Get bandwidth/traffic usage by folder, by video, or DRM by video. Returns array of \{name, bandwidth\_bytes, video\_id?\} entries. - `panda\_get\_unwatched\_videos`: List the account's videos that had NO access at all in a period \(the inverse of the ranking\). Whole account only. Only videos that already existed on start\_date are considered. Returns \{start\_date, end\_date, data: \[\{id, video\_external\_id, title, created\_at\}\], pagination: \{limit, offset, total\_unwatc - `panda\_get\_best\_times`: Which weekday and 2-hour slot the audience of the WHOLE account plays the most \(or sees the player the most\) in a period — "best time to publish". Weekday × 2-hour slot grid, summed over the period — the same grid as the dashboard heatmap \(Analytics → Best times\), with the hours exactly as Panda ana - `panda\_get\_best\_times\_by\_videos`: Which weekday and 2-hour slot the audience of specific videos \(or of every video in a folder\) plays the most in a period. Weekday × 2-hour slot grid, summed over the period — the same grid as the dashboard heatmap \(Analytics → Best times\), with the hours exactly as Panda analytics stores them. An en - `panda\_get\_viewers\_by\_videos`: Who watched specific videos \(or any video of a folder\) in a period: distinct viewers, identified by IP. The IP is returned MASKED \(a.b.x.x\) — the full list is in the dashboard \(Analytics → Users\). The selection only chooses WHICH viewers appear: each viewer's metrics \(play, view, watch\_time\) cover t - `panda\_list\_funnels`: List all funnels. Returns \{data: \[\{id, name, videos\_count, created\_at\}\]\}. A funnel with videos\_count=0 has no videos. Funnels are NOT folders. - `panda\_create\_funnel`: Create a new video funnel - `panda\_get\_funnel`: Get a funnel's details and its videos. Returns \{data: \{id, name, videos: \[\{id, title, status, is\_first\}\]\}\}. Funnels are NOT folders. - `panda\_update\_funnel`: Update a funnel's properties \(rename\) - `panda\_delete\_funnel`: Delete a funnel by ID. WARNING: this is destructive. Videos inside the funnel may become inaccessible. - `panda\_add\_videos\_to\_funnel`: Add one or more videos to a funnel with optional coordinates - `panda\_remove\_videos\_from\_funnel`: Remove one or more videos from a funnel - `panda\_get\_watermark\_status`: Check whether watermark/DRM is currently active on the account. Returns \{active: boolean\}. - `panda\_enable\_watermark`: Enable watermark protection for the account - `panda\_disable\_watermark`: Disable watermark protection for the account - `panda\_list\_watermark\_groups`: List all watermark groups. Returns array of \{id, name, active, video\_ids: \[\], folder\_ids: \[\], created\_at\}. - `panda\_create\_watermark\_group`: Create a new watermark group - `panda\_get\_watermark\_group`: Get a watermark group's details. Returns \{id, name, video\_ids: \[\], folder\_ids: \[\], created\_at\}. - `panda\_update\_watermark\_group`: Update a watermark group - `panda\_delete\_watermark\_group`: Delete a watermark group - `panda\_manage\_drm\_group\_items`: Add or remove videos and/or folders from a DRM watermark group. Returns the updated group with current video\_ids and folder\_ids. - `panda\_get\_thumbnails`: Get the cover \(start thumbnail\) of a video. Returns \{response: \{active, default\}\}: active = the uploaded cover in use \(absent when none was uploaded\), default = the automatic thumbnails generated from the video. Pause and end thumbnails are NOT listed here — they are CTAs in the video's player confi - `panda\_add\_thumbnail`: Upload the video cover \(start thumbnail\) — the image shown before the user presses play. Provide \`image\_url\` pointing to a publicly reachable image \(PNG/JPG/GIF\); the tool downloads it and uploads as multipart to the Panda API. Replaces any existing start thumbnail. After this returns, the cover is - `panda\_add\_pause\_thumbnail`: Upload a pause thumbnail — an image shown when the viewer pauses the video. Provide \`image\_url\` pointing to a publicly reachable JPG, PNG or GIF up to 5 MB. The upload also creates the pause CTA, so the image shows in the player right away, for the whole video. A video can have several pause thumbna - `panda\_add\_end\_thumbnail`: Upload an end thumbnail — an image shown after the video finishes. Provide \`image\_url\` pointing to a publicly reachable JPG, PNG or GIF up to 5 MB. The upload also creates the end CTA, so the image shows in the player right away. A video has one end thumbnail: a new upload replaces the previous one. - `panda\_delete\_thumbnail`: Delete a thumbnail from a video \(image and its player CTA\). Type: 'start' \(default, the cover\), 'pause', 'end'. For 'pause', thumb\_name is required and must be the exact file name — returned by panda\_add\_pause\_thumbnail, or metadata.thumbId of the 'pause' CTA in panda\_get\_video\_player\_config. The to - `panda\_get\_subtitles`: Get all subtitle information for a video - `panda\_get\_subtitle\_by\_language`: Get a subtitle file for a specific language - `panda\_delete\_subtitle`: Remove a subtitle from a video by language - `panda\_generate\_ai\_subtitles`: Generate subtitles for a video using Panda AI. Creates a transcription in the specified language. Costs credits based on video duration and tier. - `panda\_update\_subtitle\_visibility`: Show or hide a subtitle language \(hidden subtitles are not visible but still indexable for search\) - `panda\_download\_subtitle`: Download a subtitle file for a specific language - `panda\_get\_videos\_count`: Get total video count by status \(CONVERTED, CONVERTING, DRAFT, etc.\) - `panda\_get\_custom\_fields`: Get all custom fields for a video. Returns array of \{id, key, value\} metadata pairs. - `panda\_create\_custom\_field`: Create a custom metadata key-value field for a video \(for tagging/categorization\). Do NOT use this for chapters, subtitles, CTAs, or player settings — use the specific tools for those. Max 50 fields per video. - `panda\_list\_users`: List all users in the organization. Returns array of \{id, name, email, role\_id, role\_name, created\_at\}. - `panda\_create\_user`: Create a new user in the organization. Returns the created \{id, name, email, role\_id\}. - `panda\_update\_user`: Update a user's information or role - `panda\_delete\_user`: Remove a user from the organization - `panda\_request\_download`: Request an async download for a video. Only works for CONVERTED, non-external, non-Hotmart videos. Returns \{status, message\}. - `panda\_check\_download\_status`: Check the status of an async download request. Returns \{status, download\_url\} — url is present when status is 'ready'. - `panda\_list\_shorts`: List all Shorts jobs. Projects expire after \~30 days. Returns array of \{job\_id, status, user\_context: \{video\_title, source\_type\}, completed\_segments, created\_at\}. - `panda\_import\_video\_for\_shorts`: Import a video for AI shorts generation. Sources: library \(video\_id\), youtube \(source\_url\). Default config: vertical aspect, 30-60s duration, no captions. Video must be CONVERTED, 5min-5hrs, \<50GB, no DRM. - `panda\_list\_short\_segments`: List all generated segments \(clips\) for a Shorts job. Each segment has viralScore, duration, transcription. - `panda\_delete\_short`: Delete a Shorts job/project - `panda\_save\_segment\_to\_library`: Save a Short segment to the video library as an independent video - `panda\_list\_ai\_assistants`: List all AI video assistants. Returns array of \{id, name, status, videos: \[\{id, title\}\], created\_at\}. - `panda\_get\_ai\_assistant`: Get an AI assistant's details. Returns \{id, name, status, videos: \[\{id, title\}\], files: \[\{id, file\_name\}\], answers\_count\}. - `panda\_create\_ai\_assistant`: Purchase credits and create a new AI assistant for a video. Returns the created \{id, name, status, video\_id\}. - `panda\_get\_ai\_assistant\_purchase\_overview`: Get credit cost overview before creating an AI assistant. Returns \{credit\_cost, current\_balance, sufficient\_credits\}. - `panda\_update\_ai\_assistant`: Update AI assistant information \(name, status, etc.\) - `panda\_update\_ai\_assistant\_video\_bindings`: Replace the videos bound to an AI assistant. Sends the FULL list of video\_ids — existing bindings not in the list will be removed. - `panda\_update\_ai\_assistant\_chat\_visibility`: Show or hide the AI chat widget on the video player - `panda\_delete\_ai\_assistant`: Delete an AI assistant - `panda\_generate\_tutor\_file\_upload\_url`: Generate a presigned URL to upload a PDF/file to a Tutor AI assistant. Returns upload\_url and file\_id. After uploading, call panda\_confirm\_tutor\_file\_upload. - `panda\_confirm\_tutor\_file\_upload`: Confirm that a file was successfully uploaded to a Tutor AI assistant \(call after uploading to the presigned URL\) - `panda\_delete\_tutor\_file`: Delete a file from a Tutor AI assistant - `panda\_add\_tutor\_videos`: Add videos to a Tutor AI assistant - `panda\_create\_ai\_dubbing`: Create an AI dubbing job for a video. Costs 2 credits/min \(standard\) or 10 credits/min \(lipsync\). Returns \{id, status, video\_id, from\_lang, to\_lang\}. Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html