# Vidreno (remote · vidreno.com)

Publish films, monetise them, earn money, and host and embed videos on sites and apps.

- Trust score: 23/100 (low)
- Change this week: −63
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `vidreno.com`: 23/100 (this document), [markdown](https://verifymcp.io/servers/com-vidreno-mcp/vidreno.md), [page](https://verifymcp.io/servers/com-vidreno-mcp/vidreno)

## Channel facts

- Endpoint: `https://vidreno.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.3`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint returned HTTP 504.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Tool Safety**: 0/100
  - Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 5 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the Vidreno MCP server?

Vidreno is a hosted endpoint at https://vidreno.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http com-vidreno-mcp 'https://vidreno.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-vidreno-mcp": {
      "url": "https://vidreno.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-vidreno-mcp": {
      "type": "http",
      "url": "https://vidreno.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-vidreno-mcp]
url = "https://vidreno.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-vidreno-mcp": {
      "type": "remote",
      "url": "https://vidreno.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-vidreno-mcp --url 'https://vidreno.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-vidreno-mcp:
    url: "https://vidreno.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-vidreno-mcp": {
      "Transport": "http",
      "Url": "https://vidreno.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-vidreno-mcp -t streamable-http -u 'https://vidreno.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-vidreno-mcp": {
      "type": "http",
      "url": "https://vidreno.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 23, −64)

- [security regression] Endpoint reachability: reachable → not serving MCP
- [security regression] Stability: 0.93 → unverified
- [security regression] Tool safety: pass → unverified
- [security regression] Authorization: pass → unverified
- [security regression] Transport: pass → fail
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-11-04 (score 87, −1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] New tool “archive_film_bonus”, which the server declares destructive
- [security] New tool “delete_project_post”, which the server declares destructive
- [security] New tool “remove_film_subtitle”, which the server declares destructive
- [security] New tool “request_film_deletion”, which the server declares destructive
- [security] New tool “revoke_project_invite”, which the server declares destructive
- [security] New tool “update_automatic_subtitle”, which the server declares destructive
- [functional regression] Tool coverage: 100% → 61%
- [functional improvement] Schema quality: 206 → 138
- [functional] Schema quality: excellent → good
- [functional] New tool “acknowledge_film_changes”
- [functional] New tool “cancel_film_protection_change”
- [functional] New tool “create_film_bonus”
- [functional] New tool “download_film_subtitle”
- [functional] New tool “edit_subtitle_cues”
- [functional] New tool “get_account_settings”
- [functional] New tool “get_branding”
- [functional] New tool “get_file_upload_status”
- [functional] New tool “get_film_languages”
- [functional] New tool “get_film_processing”
- [functional] New tool “get_film_workflow”
- [functional] New tool “get_project_discussion”
- [functional] New tool “get_subtitle_cues”
- [functional] New tool “list_connected_apps”
- [functional] New tool “list_film_bonus”
- [functional] New tool “list_film_subtitles”
- [functional] New tool “list_my_project_invites”
- [functional] New tool “list_project_invites”
- [functional] New tool “list_spoken_languages”
- [functional] New tool “pin_project_post”
- [functional] New tool “post_project_discussion”
- [functional] New tool “publish_film_replacement”
- [functional] New tool “read_project”
- [functional] New tool “relabel_film_subtitle”
- [functional] New tool “reorder_film_bonus”
- [functional] New tool “report_project_post”
- [functional] New tool “request_film_review”
- [functional] New tool “respond_to_project_invite”
- [functional] New tool “retry_film_file_check”
- [functional] New tool “retry_film_protection_change”
- [functional] New tool “send_project_invite”
- [functional] New tool “set_automatic_subtitles”
- [functional] New tool “set_film_artwork_position”
- [functional] New tool “set_film_languages”
- [functional] New tool “set_film_protection”
- [functional] New tool “set_film_sound”
- [functional] New tool “set_project_notifications”
- [functional] New tool “start_film_file_upload”
- [functional] New tool “start_film_master_upload”
- [functional] New tool “start_profile_avatar_upload”
- [functional] New tool “start_project_cover_upload”
- [functional] New tool “start_video_thumbnail_upload”
- [functional] New tool “update_account_settings”
- [functional] New tool “update_branding”
- [functional] New tool “update_film_bonus”
- [functional] New tool “withdraw_film_deletion_request”
- [cosmetic] “update_film” added an optional parameter “expected_updated_at”
- [cosmetic] “update_film” added an optional parameter “listed_in_marketplace”
- [cosmetic] “update_film” reworded the description of “original_language”

### 2026-11-02 (score 88, +1)

- [cosmetic] “update_film” reworded the description of “awards”

### 2026-11-01 (score 87, 0)

- [security] Tool “update_film” rewrote its description, which is the text the model reads
- [cosmetic] “update_film” added an optional parameter “original_language”
- [cosmetic] “update_film” added an optional parameter “short_description”
- [cosmetic] “create_film” reworded the description of “content_descriptors”
- [cosmetic] “update_film” reworded the description of “capture_format”
- [cosmetic] “update_film” reworded the description of “content_descriptors”
- [cosmetic] “update_film” dropped the optional parameter “runtime_minutes”

### 2026-10-31 (score 87, +1)

No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 86, 0)

- [security] Tool “update_film” rewrote its description, which is the text the model reads
- [cosmetic] “update_film” added an optional parameter “available_countries”
- [cosmetic] “update_film” added an optional parameter “hide_trailer_outside_countries”

### 2026-10-28 (score 86, +1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] New tool “remove_episode”, which the server declares destructive
- [security] New tool “remove_season”, which the server declares destructive
- [security] Tool “create_film” rewrote its description, which is the text the model reads
- [security] Tool “get_account” rewrote its description, which is the text the model reads
- [security] Tool “publish_film” rewrote its description, which is the text the model reads
- [security] Tool “update_film” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 9234 → 11822
- [functional] New tool “add_episode”
- [functional] New tool “add_season”
- [functional] New tool “publish_episode”
- [functional] New tool “publish_season”
- [functional] New tool “reorder_episodes”
- [functional] New tool “reorder_seasons”
- [functional] New tool “unpublish_episode”
- [functional] New tool “unpublish_season”
- [functional] New tool “update_episode”
- [functional] New tool “update_season”
- [cosmetic] “create_film” added an optional parameter “age_rating”
- [cosmetic] “create_film” added an optional parameter “content_descriptors”
- [cosmetic] “create_film” added an optional parameter “kind”
- [cosmetic] “start_film_upload” added an optional parameter “episode_id”
- [cosmetic] “update_film” added an optional parameter “age_rating”
- [cosmetic] “update_film” added an optional parameter “content_descriptors”
- [cosmetic] “publish_film” reworded the description of “confirm_rights”
- [cosmetic] “start_film_upload” reworded the description of “asset”

### 2026-10-26 (score 85, +1)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (111)

### `get_profile` (~29 tokens)

Connected Vidreno account

Identify the Vidreno account this connection belongs to. Call this when the user asks which account is connected.

Output parameters:

- `email` (string): Account email.
- `id` (string): Vidreno account id.
- `name` (string): Display name, when the account has one.
- `nickname` (string): Username, when the account has one.

### `get_account` (~86 tokens)

Account overview

The connected creator's account overview: which product it is set up for (creator_mode: On Demand for films, or Video Hosting for hosted videos; a preference that shapes what to suggest first, not a restriction on the tools), plan, hosted-video storage used versus the plan limit, how many hosted videos and films they have, and their public filmmaker profile link when the profile is public.

### `list_videos` (~156 tokens)

List videos

List the user's hosted videos, newest first, with optional search and visibility filter. Returns public video ids to use with the other tools. Paginate with page/page_size. In urls, share (/player/) is the public link to give out and embed_iframe the embed URL; manage (/video/) is the owner's own editing page, sign-in required, and anyone else opening it is sent to the player page — never hand it out as a share link.

Input parameters:

- `page` (integer): 1-based page number.
- `page_size` (integer): Videos per page (max 50).
- `search` (string): Case-insensitive match against title and description.
- `visibility` (string): Filter by visibility; default all.

### `get_video` (~206 tokens)

Video details

Full details of one hosted video: title, description, visibility, size, duration, views, player colour, category and its links, plus the direct HLS stream link (hls_url, a .m3u8 for third-party players and channel tools) when one is available and otherwise hls_status (ready, processing, not_encoded, not_included, private, unavailable) with hls_reason saying what is missing. HLS links are only given for public videos with ready adaptive quality versions (paid plans); plays through them count against the owner's bandwidth but record no views or earnings. In urls, share (/player/) is the public link to give out and embed_iframe the embed URL; manage (/video/) is the owner's own editing page, sign-in required, and anyone else opening it is sent to the player page — never hand it out as a share link.

Input parameters:

- `video_id` (string, required): The video's public id (from list_videos / get_video).

### `get_embed_code` (~381 tokens)

Embed code

Build the HTML embed snippet for a video with the chosen player options (autoplay, muted, loop, controls, corner radius, fullscreen, responsive or fixed size). The snippet keeps the video's own aspect ratio (16:9 when its size is unknown). Also returns the bare iframe URL, the player and share links, and the direct HLS stream link (hls_url, for third-party players and channel tools that take a .m3u8 rather than an iframe) when available, else hls_status and hls_reason explaining what is missing. In urls, share (/player/) is the public link to give out and embed_iframe the embed URL; manage (/video/) is the owner's own editing page, sign-in required, and anyone else opening it is sent to the player page — never hand it out as a share link.

Input parameters:

- `alignment` (string): Horizontal alignment inside the host page.
- `allow_fullscreen` (boolean): Allow the fullscreen button.
- `autoplay` (boolean): Start playing on load (browsers require muted for this to work).
- `controls` (boolean): Show the player controls.
- `corner_radius` (integer): Corner radius in pixels; 0 for square corners.
- `height` (integer): Fixed height in pixels (only when responsive is false). Omit it to get the width at the video's own aspect ratio (315 for 560 at 16:9).
- `loop` (boolean): Restart when finished.
- `muted` (boolean): Start muted.
- `responsive` (boolean): True for a fluid embed that fills its container at the video's own aspect ratio; false for a fixed pixel size.
- `video_id` (string, required): The video's public id (from list_videos / get_video).
- `width` (integer): Fixed width in pixels (only when responsive is false).

### `update_video` (~130 tokens)

Update video

Change a video's title, description, visibility (public/private), player colour or content category. Only the fields given are changed.

Input parameters:

- `category`: Content category used for ad targeting; null clears it.
- `description`: New description; null clears it.
- `player_color`: Player accent colour; null returns to your brand default.
- `title` (string): New title.
- `video_id` (string, required): The video's public id (from list_videos / get_video).
- `visibility` (string): Who can watch: public (anyone with the link / embed) or private (only you).

### `delete_video` (~94 tokens)

Delete video

Permanently delete a hosted video and its file. Irreversible: always confirm with the user first (name the video) and only then call with confirm set to true.

Input parameters:

- `confirm` (boolean, required): Must be true. Ask the user to confirm before calling; deletion is permanent and removes the file from Vidreno's storage.
- `video_id` (string, required): The video's public id (from list_videos / get_video).

### `get_analytics` (~62 tokens)

Analytics

How the user's videos are doing: totals (videos, views, storage), the most viewed videos, the newest uploads and a daily views series for the last N days.

Input parameters:

- `days` (integer): Length of the daily views window in days (default 30).

### `start_video_upload` (~180 tokens)

Start a video upload

Begin uploading a new video from the user's computer. Files cannot be sent through this connection: the tool returns an upload_url the user opens in their browser (signed in to Vidreno) to pick the file; the upload goes straight to Vidreno's storage with the metadata given here pre-filled. Afterwards call get_upload_status with the upload_id to get the finished video and its embed code. Links are single-use and expire after about an hour. This is also the right tool when the user attached the video in the chat unless this AI app can supply a temporary https download URL for the attachment (ChatGPT can; use upload_video_from_chat there).

Input parameters:

- `description` (string): Description to give the video once uploaded.
- `title` (string): Title to give the video once uploaded.
- `visibility` (string): Visibility once uploaded; default public.

### `upload_video_from_chat` (~256 tokens)

Upload a video attached in the chat

Store a video file the user attached in this conversation as a new hosted video. Only usable when the AI app itself fills in a temporary https download_url and file_id for the attachment (ChatGPT does this). Clients that cannot supply such a URL (including Claude) must not call this tool or try to send the file contents: call start_video_upload instead, which gives the user a browser upload link. Pass the attachment as `file`. The file must be a video of at most 512 MB, and the user's plan must have room for it (the same storage rule as any upload). The transfer runs on Vidreno's side; the tool waits briefly and returns status ready (with the video and its embed code), uploading (keep calling get_upload_status with the upload_id until it is ready or failed), or an error explaining what to do instead. For files above the limit or on the user's computer, use start_video_upload.

Input parameters:

- `description` (string): Description for the video.
- `file` (object, required): The video file attached in the conversation.
- `title` (string): Title for the video; defaults to the attachment's file name.
- `visibility` (string): Visibility of the video; default public.

### `get_upload_status` (~111 tokens)

Upload status

Check an upload started with start_video_upload, upload_video_from_chat or start_film_upload: awaiting_file (includes the upload_url while it can still be used), uploading, ready (a hosted video comes with its details and a default embed code; a film file with the film and slot it was attached to), expired (start a new upload), or failed (chat imports only; includes failure_reason).

Input parameters:

- `upload_id` (string, required): The upload_id returned by start_video_upload or upload_video_from_chat.

### `list_films` (~111 tokens)

List films

List the user's films (On Demand: free to watch or buy/rent), most recently edited first, with optional search and status filter. Returns public film ids to use with the other film tools. Paginate with page/page_size.

Input parameters:

- `page` (integer): 1-based page number.
- `page_size` (integer): Films per page (max 50).
- `search` (string): Case-insensitive match against title and synopsis.
- `status` (string): Filter by status; default all.

### `get_film` (~91 tokens)

Film details

Full details of one film: status (draft/published), how it is released (free to watch or buy/rent) and its prices, play count, metadata, main film and trailer state, credits (with credit_ids), the publish checklist and its public page link. Films cannot be embedded.

Input parameters:

- `film_id` (string, required): The film's public id (from list_films / get_film).

### `create_film` (~402 tokens)

Create film

Create a new draft film from a title (optionally with its age_rating and content_descriptors), exactly as the Studio's add-film dialog does. The draft starts as Buy or rent with no prices, no poster and no files, and is not public until publish_film. Returns the film's id, editor link and publish checklist (the same shape as get_film), so the next steps are update_film (details, access: free or paid, prices), start_film_upload (main film), the poster in the film editor, then publish_film.

Input parameters:

- `age_rating` (string): Age rating of the whole title (a series' rating covers every episode): all = All ages, 13 = 13+, 16 = 16+, 18 = 18+. An 18+ title asks viewers to confirm they're 18 or over before it plays. Sexual co…
- `content_descriptors` (array): Content descriptors shown on the film page: none = None of these apply, sexual-content = Sexual content, nudity = Nudity, violence = Violence, strong-language = Strong language, drug-use = Drug use,…
- `kind` (string): feature (default) = a single film with one main video; series = seasons of episodes, each with its own video, built with add_season and add_episode. A title's kind is set here and not changed through…
- `title` (string, required): The film's title (up to 200 characters); everything else is set afterwards.

### `update_film` (~1683 tokens)

Update film

Change a film's metadata (title, short_description (30–160 characters to publish), full synopsis (at least 150 characters to publish), director and cast lines, year, original_language, genres from the fixed list, country of production, what it was shot on (capture_format, camera), student_film, filming_locations, awards (checked by the Vidreno team before they show publicly), IMDb link, extra links, the AI disclosure mostly_ai_generated shown as 'Made with AI' on the film page, age_rating (all, 13, 16 or 18 — required to publish; 18+ titles ask viewers to confirm their age before playback) and content_descriptors (sexual content or nudity require age_rating 18), allow_search_engines: off keeps the page reachable by link but hides it from search engines and the sitemap, show_view_count: off keeps the film's view count off its public page and the profile cards, available_countries: where the film can be bought, rented and watched — null for everywhere or a list of ISO country codes; the film page stays visible everywhere and viewers outside the list see a 'Not available in your region' notice instead of the offers, and hide_trailer_outside_countries to withhold the trailer there too), how it is released (access: free = Free to watch, which needs no price; paid = Buy or rent) and its buy/rent prices in US cents (minimum $1.00), or detach its trailer. Only the fields given are changed; the same validation as the film editor applies, and a published film whose publish checklist no longer passes returns to draft. The poster cannot be set here: it is added in the film editor (the edit link). The main film is replaced with start_film_upload, never detached.

Input parameters:

- `access` (string): How the film is released: free (Free to watch) or paid (Buy or rent; needs at least one price to publish).
- `age_rating` (string): Age rating of the whole title (a series' rating covers every episode): all = All ages, 13 = 13+, 16 = 16+, 18 = 18+. An 18+ title asks viewers to confirm they're 18 or over before it plays. Sexual co…
- `allow_search_engines` (boolean): "Allow search engines to discover this film" (on by default). Off keeps the page reachable by its link but hides it from search engines and the sitemap.
- `available_countries`: "Where viewers can buy and watch": null = everywhere (the default); a list of ISO 3166-1 alpha-2 codes = only these countries, replaced as a whole. Viewers elsewhere still see the film page, but can'…
- `awards` (array): Wins, nominations and festival selections (festival, award, year, proof_url). A public http(s) proof_url is required for new or edited entries and becomes the award’s public link after approval; chan…
- `buy_price`: Buy price in US cents (minimum 100); null removes it. Only used when access is paid.
- `camera`: Camera make: red = RED, arri = ARRI, sony = Sony, canon = Canon, blackmagic = Blackmagic, panasonic = Panasonic, iphone = iPhone, other = Other; null clears it.
- `capture_format`: What it was shot on: no-camera = No camera used, digital = Digital, 16mm = 16mm film, 35mm = 35mm film, super8 = Super 8, other-film = Other film stock; null clears it.
- `cast`: Cast line, comma separated; null clears it.
- `comments_enabled` (boolean): Whether viewers can comment on the film page.
- `content_descriptors` (array): Content descriptors shown on the film page: none = None of these apply, sexual-content = Sexual content, nudity = Nudity, violence = Violence, strong-language = Strong language, drug-use = Drug use,…
- `country`: Country of production as an ISO 3166-1 alpha-2 code (GB, US, FR…); null clears it.
- `detach` (string): Remove a file from the film: trailer deletes the current trailer. The main film cannot be detached, only replaced with start_film_upload.
- `director`: Director line shown on the film page (credits are managed separately); null clears it.
- `expected_updated_at`: Last get_film updated_at; rejects concurrent Studio changes. Read before editing and supply this value.
- `extra_links` (array): Extra links shown on the film page (label + URL, up to 20). Replaces the whole list; an empty list clears it.
- `film_id` (string, required): The film's public id (from list_films / get_film).
- `filming_locations` (array): Where it was filmed, as free-text places ("Glasgow, Scotland"); up to 10, the list is replaced as a whole.
- `genres` (array): Genres from the fixed list (action = Action, adventure = Adventure, animation = Animation, biography = Biography, comedy = Comedy, crime = Crime, documentary = Documentary, drama = Drama, experimenta…
- `hide_trailer_outside_countries`: "Also hide the trailer outside these countries" (off by default; only applies with available_countries). By default the trailer still plays everywhere, so the film can be previewed where it isn't for…
- `imdb_url`: IMDb link; null clears it.
- `listed_in_marketplace` (boolean): Show in Discover/marketplace; false makes it unlisted while its link remains usable.
- `mostly_ai_generated` (boolean): AI disclosure: true when "The majority of this film is AI-generated". Shown to viewers as 'Made with AI' on your film page.
- `original_language`: Compatibility field: recognised language names/codes only. Prefer set_film_languages for canonical selections.
- `release_year`: Release year; null clears it.
- `rent_price`: Rental price in US cents (minimum 100); null removes it. Only used when access is paid.
- `rental_window_hours` (integer): How long a rental lasts, in hours.
- `short_description`: A short introduction for the film page and Discover; null clears it.
- `show_view_count` (boolean): "Show view and favourite counts publicly" (on by default). Shows the film's views and favourites on its page and on your profile. Off keeps both numbers to you in Studio.
- `student_film` (boolean): Made as a student film: Made while studying, as coursework or a graduation film.
- `synopsis`: New synopsis; null clears it.
- `title` (string): New title.

### `publish_film` (~426 tokens)

Publish film

Make a film public on its film page. Refused, with the same message the film editor shows, while the publish checklist is incomplete: title, poster, a ready main film, a price only when it is Buy or rent (a free-to-watch film publishes without one), and the creator's rights confirmation. The first time a film is published the user must agree to this statement, which you read to them in full before passing confirm_rights: true: "I confirm I own or hold every right needed to publish and sell this film, including music, footage, performances and releases from people in it. If it contains any sexual content or nudity, every performer was 18 or older and consented, and I keep records proving it. I accept full responsibility for any claim that it infringes someone's rights, as set out in the Terms of Service – Your warranties (/terms#your-warranties)." A film that already carries a confirmation is not asked again. The checklist comes back with how to finish each open item: update_film or start_film_upload where a tool can do it, publish_film with confirm_rights for the rights row, and the editor link for the poster, which is added in the film editor, not through this connection.

Input parameters:

- `confirm_rights` (boolean): The creator's rights confirmation, required the first time a film is published (not asked again once recorded). Pass true only after the user has agreed to this statement, read to them in full: "I co…
- `film_id` (string, required): The film's public id (from list_films / get_film).

### `unpublish_film` (~56 tokens)

Unpublish film

Take a film off its public page (back to draft). Viewers who already bought or rented it keep their access.

Input parameters:

- `film_id` (string, required): The film's public id (from list_films / get_film).

### `add_film_credit` (~205 tokens)

Add a credit

Add a credit (role + name) to a film's credit list, optionally linking it to a Vidreno filmmaker by username (they get a request to accept) or inviting the person by email (the invite is sent straight away; at most 60 credits per film, invites are rate-limited per day). Returns the full credit list with credit_ids.

Input parameters:

- `email` (string): Invite the person by email instead: the credit is stored and an invite email is sent now.
- `film_id` (string, required): The film's public id (from list_films / get_film).
- `name` (string, required): The person's name as it should appear.
- `position` (integer): 1-based position in the credit list; default last.
- `role` (string, required): The role, e.g. Director, Editor, Lead actor.
- `username` (string): Link the credit to an existing Vidreno filmmaker account by username (they are asked to accept).

### `remove_film_credit` (~73 tokens)

Remove a credit

Remove one credit from a film's credit list by credit_id (from get_film). A pending invite for it stops working.

Input parameters:

- `credit_id` (integer, required): The credit_id from get_film.
- `film_id` (string, required): The film's public id (from list_films / get_film).

### `reorder_film_credits` (~75 tokens)

Reorder credits

Set the order of a film's credits: pass every credit_id of the film in the order they should appear.

Input parameters:

- `credit_ids` (array, required): Every credit_id of the film, in the new order.
- `film_id` (string, required): The film's public id (from list_films / get_film).

### `invite_film_credit` (~169 tokens)

Send a credit invite

Email (or re-send) the invite for a credit that carries an email address, so the person can claim it with their Vidreno account. The same limits as the app apply: a daily cap per account and no repeat email to the same address for the same film within a day. Returns the invite link too; with link_only it only mints the link (nothing is sent), as the editor's copy-link button does.

Input parameters:

- `credit_id` (integer, required): The credit_id from get_film.
- `film_id` (string, required): The film's public id (from list_films / get_film).
- `link_only` (boolean): true returns the invite link without sending an email (for the user to pass on themselves); it does not count against the daily email cap.

### `update_film_credit` (~200 tokens)

Edit a credit

Change one credit in place by credit_id: its role or name, or who it is linked to (a Vidreno username, which they are asked to accept, or an invite email, which is sent straight away; null clears). The credit keeps its id, position and, when only the role or name changes, its accepted or linked state. Returns the full credit list.

Input parameters:

- `credit_id` (integer, required): The credit_id from get_film.
- `email`: Set the invite email (a new address sends the invite now; replaces any username); null clears it.
- `film_id` (string, required): The film's public id (from list_films / get_film).
- `name` (string): New name as it should appear.
- `role` (string): New role.
- `username`: Link the credit to a Vidreno filmmaker by username (they are asked to accept; replaces any email); null unlinks it.

### `convert_legacy_credits` (~98 tokens)

Convert director and cast lines into credits

Turn a film's plain director and cast text lines into credit rows (Director for the director line, Actor for each comma-separated cast name), appended after the existing credits, and clear the lines — the film editor's convert button. Nothing is linked or invited; use update_film_credit afterwards. Returns the full credit list.

Input parameters:

- `film_id` (string, required): The film's public id (from list_films / get_film).

### `start_film_upload` (~234 tokens)

Upload a film file

Begin uploading a film's main film or trailer from the user's computer. Files cannot be sent through this connection: the tool returns an upload_url the user opens in their browser (signed in to Vidreno) to pick the file; the upload goes straight to Vidreno's film storage (outside plan storage) and is attached to the film when it finishes, replacing the current file in that slot. Afterwards call get_film to see the new file's state; get_upload_status with the upload_id works too. Links are single-use and expire after about an hour.

Input parameters:

- `asset` (string): Which file this is: main (a feature's main film; the default), trailer (any kind), or episode (one episode of a series; give episode_id, which alone also selects this slot). Replaces the current file…
- `episode_id` (string): The episode this video belongs to (from get_film's seasons[].episodes); required for the episode slot.
- `film_id` (string, required): The film's public id (from list_films / get_film).

### `add_season` (~250 tokens)

Add a season

Add a season to a series (a film created with kind: series), numbered after the last one, as a draft. Title and synopsis are optional ("Season N" otherwise); a buy/rent price here sells the whole season once it is published with a playable episode. Up to 50 seasons. The age rating and content descriptors belong to the whole series (create_film / update_film), not to a season or episode. Returns the film (with every season) and the new season's id for add_episode.

Input parameters:

- `buy_price`: Buy price for the whole season in US cents (minimum 100); null removes it. Only sells once the season is published with a playable episode.
- `film_id` (string, required): The film's public id (from list_films / get_film).
- `rent_price`: Rental price for the whole season in US cents (minimum 100); null removes it.
- `rental_window_hours` (integer): How long a season rental lasts, in hours.
- `synopsis`: The season's synopsis; null clears it.
- `title`: The season's title (up to 200 characters); null clears it, leaving "Season N".

### `update_season` (~218 tokens)

Update a season

Change a season's title, synopsis, buy/rent price (US cents, minimum $1.00, null removes) or rental window. Only the fields given change; the same validation as the series editor applies. The season's poster is added in the film editor.

Input parameters:

- `buy_price`: Buy price for the whole season in US cents (minimum 100); null removes it. Only sells once the season is published with a playable episode.
- `film_id` (string, required): The film's public id (from list_films / get_film).
- `rent_price`: Rental price for the whole season in US cents (minimum 100); null removes it.
- `rental_window_hours` (integer): How long a season rental lasts, in hours.
- `season_id` (string, required): The season's id (from get_film's seasons).
- `synopsis`: The season's synopsis; null clears it.
- `title`: The season's title (up to 200 characters); null clears it, leaving "Season N".

### `remove_season` (~103 tokens)

Remove a season

Delete a season with all its episodes and their videos; the seasons after it are renumbered. Refused while the season or any of its episodes has been sold or is in a checkout (unpublish_season instead). Confirm with the user before calling it.

Input parameters:

- `film_id` (string, required): The film's public id (from list_films / get_film).
- `season_id` (string, required): The season's id (from get_film's seasons).

### `reorder_seasons` (~100 tokens)

Reorder seasons

Set the order of a series' seasons: every season id exactly once, first to last; they are renumbered 1, 2, 3…

Input parameters:

- `film_id` (string, required): The film's public id (from list_films / get_film).
- `season_ids` (array, required): Every season id of the series exactly once, in the new order (they are renumbered 1, 2, 3…).

### `publish_season` (~112 tokens)

Publish a season

Make a season live on the series page. Refused, with the editor's message, until the season has an episode with a playable video (the episode itself may still be a draft: publishing the season is what lets its episodes be published with publish_episode). The series itself goes public with publish_film.

Input parameters:

- `film_id` (string, required): The film's public id (from list_films / get_film).
- `season_id` (string, required): The season's id (from get_film's seasons).

### `unpublish_season` (~97 tokens)

Unpublish a season

Take a season off the series page (back to draft); its episodes keep their own status and show again when the season is republished. A published series left with no watchable episode returns to draft. Buyers keep their access.

Input parameters:

- `film_id` (string, required): The film's public id (from list_films / get_film).
- `season_id` (string, required): The season's id (from get_film's seasons).

### `add_episode` (~246 tokens)

Add an episode

Add an episode to a season, numbered after the last one, as a draft with no video. Title, synopsis, runtime and a buy/rent price for this episode alone are optional. Up to 200 per season. Then start_film_upload with asset: episode and the returned episode id for its video, and publish_episode once the video is ready and the season is published.

Input parameters:

- `buy_price`: Buy price for this episode in US cents (minimum 100); null removes it. Only sells once the episode is published.
- `film_id` (string, required): The film's public id (from list_films / get_film).
- `rent_price`: Rental price for this episode in US cents (minimum 100); null removes it.
- `rental_window_hours` (integer): How long an episode rental lasts, in hours.
- `runtime_minutes`: Runtime in minutes; null clears it.
- `season_id` (string, required): The season's id (from get_film's seasons).
- `synopsis`: The episode's synopsis; null clears it.
- `title`: The episode's title (up to 200 characters); null clears it, leaving "Episode N".

### `update_episode` (~234 tokens)

Update an episode

Change an episode's title, synopsis, runtime, buy/rent price (US cents, minimum $1.00, null removes) or rental window. Only the fields given change; the same validation as the series editor applies. The video is replaced with start_film_upload (asset: episode), never here.

Input parameters:

- `buy_price`: Buy price for this episode in US cents (minimum 100); null removes it. Only sells once the episode is published.
- `episode_id` (string, required): The episode's id (from get_film's seasons[].episodes).
- `film_id` (string, required): The film's public id (from list_films / get_film).
- `rent_price`: Rental price for this episode in US cents (minimum 100); null removes it.
- `rental_window_hours` (integer): How long an episode rental lasts, in hours.
- `runtime_minutes`: Runtime in minutes; null clears it.
- `synopsis`: The episode's synopsis; null clears it.
- `title`: The episode's title (up to 200 characters); null clears it, leaving "Episode N".

### `remove_episode` (~97 tokens)

Remove an episode

Delete an episode and its video; the episodes after it in the season are renumbered. Refused while the episode has been sold or is in a checkout (unpublish_episode instead). Confirm with the user before calling it.

Input parameters:

- `episode_id` (string, required): The episode's id (from get_film's seasons[].episodes).
- `film_id` (string, required): The film's public id (from list_films / get_film).

### `reorder_episodes` (~127 tokens)

Reorder episodes

Set the order of a season's episodes: every episode id of that season exactly once, first to last; they are renumbered 1, 2, 3… Episodes do not move between seasons.

Input parameters:

- `episode_ids` (array, required): Every episode id of that season exactly once, in the new order (renumbered 1, 2, 3…).
- `film_id` (string, required): The film's public id (from list_films / get_film).
- `season_id` (string, required): The season's id (from get_film's seasons).

### `publish_episode` (~113 tokens)

Publish an episode

Make an episode watchable on the series page. Refused, with the editor's message, until its video is ready (start_film_upload with asset: episode) and its season is published (publish_season). The first published, playable episode is what lets the series itself publish (publish_film).

Input parameters:

- `episode_id` (string, required): The episode's id (from get_film's seasons[].episodes).
- `film_id` (string, required): The film's public id (from list_films / get_film).

### `unpublish_episode` (~82 tokens)

Unpublish an episode

Take an episode off the series page (back to draft). A published series left with no watchable episode returns to draft. Buyers keep their access.

Input parameters:

- `episode_id` (string, required): The episode's id (from get_film's seasons[].episodes).
- `film_id` (string, required): The film's public id (from list_films / get_film).

### `get_filmmaker_profile` (~80 tokens)

Your filmmaker profile

The user's filmmaker profile as the Profile page shows it: username (the public handle) and why it cannot go public yet, display name, bio, location, roles, website and social links, whether the profile is public and its public link, plus how many credits from other filmmakers await an answer. The avatar is managed in the Profile page.

### `update_filmmaker_profile` (~245 tokens)

Update filmmaker profile

Change any part of the user's filmmaker profile: username, display name, bio, location, roles (up to 6, presets or custom), website, per-platform social links and whether the profile is public. Only the fields given change; the Profile page's validation, username rules and uniqueness check apply and its messages come back on failure. Avatar changes stay in the Profile page.

Input parameters:

- `bio`: Short bio; null clears it.
- `display_name`: Display name; null clears it.
- `location`: Location; null clears it.
- `public` (boolean): Whether the profile page is public (needs a valid username and a creator account).
- `roles` (array): The complete list of roles (up to 6; presets like Director, Writer, Screenwriter or custom text). Replaces the current list.
- `social_links` (object): Per-platform links; only the platforms given change, null removes one.
- `username` (string): New username (the public handle): lower-case letters, digits, dots and underscores; the Profile page's rules and uniqueness check apply.
- `website_url`: Website (https link); null clears it.

### `list_my_credits` (~70 tokens)

Credits other filmmakers gave you

Credits that other filmmakers added the user to on their films, pending first: the role and name as written, the film (id, title, status, public page) and the film owner's name. Pending ones await the user's answer (respond_to_credit); accepted ones show on the user's public profile.

### `respond_to_credit` (~120 tokens)

Answer a credit

Accept, decline or unlink a credit another filmmaker gave the user (credit_id from list_my_credits). Accepting a pending credit shows the film on the user's public profile; declining a pending one or unlinking an accepted one keeps the name on the film but removes the link to the user's account.

Input parameters:

- `action` (string, required): accept a pending credit; decline a pending one or unlink an accepted one (the name stays on the film, the link to your account goes).
- `credit_id` (integer, required): The credit_id from list_my_credits.

### `get_earnings` (~184 tokens)

Earnings and balance

What the user's Payouts page shows, read-only: lifetime and this month's earnings split into film sales and ad earnings, the balance (available to cash out, maturing inside the hold window, paid out, in flight), the payout minimum and hold period, the saved payout method in masked form, whether ad earnings are live for this account or still coming soon (with the current ad terms: what advertisers pay per 1,000 views and the share the user keeps after payment-processing fees), a per-film breakdown (sales, refunds, gross, net earnings) and the 5 most recent payouts. Amounts are in cents with a display string. Read-only: to cash out or change the payout method the user opens https://vidreno.com/payouts. Use list_payouts for the full payout history and list_film_sales for individual orders.

### `list_payouts` (~97 tokens)

Payout history

The user's cash-out requests, newest first: amount, status (requested, processing, paid or failed with the reason), method, masked destination, requested and paid dates. Read-only; the user requests payouts at https://vidreno.com/payouts. Paginate with page/page_size.

Input parameters:

- `page` (integer): 1-based page number.
- `page_size` (integer): Payouts per page (max 50).

### `list_film_sales` (~199 tokens)

Film sales

The user's film orders (buy and rent), newest first, one row per order: film, purchase or rental, price before tax, the payment processor's fee (processor_fee_estimated is true until the real fee is known; it comes off the price first), Vidreno's 10% cut of what is left after that fee, paid or refunded, what was credited and what the order is worth in the balance today (net: 0 once refunded), and dates. Never includes who bought. Filter by film_id (public film id) or status; paginate with page/page_size. Read-only.

Input parameters:

- `film_id` (string): Only this film's orders (a public film id from list_films).
- `page` (integer): 1-based page number.
- `page_size` (integer): Orders per page (max 50).
- `status` (string): Only paid orders, only refunded ones, or every order.

### `list_projects` (~79 tokens)

List projects

List the user's own projects (crew calls on Vidreno Projects), newest first: status (draft, live or closed), visibility, role count, how many applications are waiting, and the public and Studio links. Also says whether the user can post one (the filmmaker-profile requirements and the cap on live projects). Project ids are for the other project tools.

### `get_project` (~109 tokens)

Project details

Full details of one of the user's own projects, as the Studio editor shows them: every field, the roles with pay and their application counts, the publish checklist with the tool that completes each open item, whether it can be published, previous work and the films that could be listed as previous work, and the public and Studio links. Only the owner can read a project this way; anyone else's answers not found.

Input parameters:

- `project_id` (integer, required): The project's id (from list_projects or create_project).

### `create_project` (~183 tokens)

Create project

Create a new draft project exactly as the Studio's New project does: a title (optional) and whether it is public or private (invite only). The draft is not listed until publish_project. Refused with the Studio's own message when the user's filmmaker profile is not ready (a creator account with a public filmmaker profile, display name and at least one role) or the user already has the maximum number of live projects. Returns the project (same shape as get_project): next are update_project for the details, add_project_role for each role, then publish_project.

Input parameters:

- `title` (string): The project's working title (up to 120 characters); "Untitled project" until set.
- `visibility` (string): public (listed on Projects and Jobs, open to everyone) or private (invite only: reachable only by the people the owner invites from the Studio).

### `update_project` (~522 tokens)

Update project

Change a project's details (the Studio's Details tab): title, logline, description, project type, format, stage, country and city or remote-friendly, shoot dates or dates flexible, links, previous work (the user's own published films, by public id) and its visibility (public or private · invite only). Only the fields given change. Validation and messages are the Studio's own; making a live project public re-runs the publish checklist.

Input parameters:

- `city`: City; null clears it.
- `country_code`: ISO 3166-1 alpha-2 country code of the shoot, e.g. GB, US; null clears it.
- `dates_flexible` (boolean): Whether the dates are still flexible (satisfies the dates checklist item on its own).
- `description`: The story, the plan, what working on it is like. Markdown is accepted: **bold**, *italic*, ## and ### headings, [text](https://url) links, and lists starting with - or 1.; raw HTML is shown as text;…
- `format`: short, feature, documentary, series, music_video, commercial, student or other; null clears it.
- `links` (array): Links shown on the project page (label + URL, up to 4). Replaces the whole list; an empty list clears it.
- `logline`: One or two sentences that sell it; null clears it.
- `previous_work_film_ids` (array): Previous work shown on the project page: public film ids of the user's own published films (get_project lists the options), in display order, up to 6. Replaces the whole list.
- `project_id` (integer, required): The project's id (from list_projects or create_project).
- `project_type` (string): paid (Paid job), self_funded (Self-funded) or passion (Passion project).
- `remote_friendly` (boolean): Whether people can work on it remotely (satisfies the location checklist item on its own).
- `shoot_end`: Last shoot day as YYYY-MM-DD; null clears it.
- `shoot_start`: First shoot day as YYYY-MM-DD; null clears it.
- `stage`: development, pre_production, production or post_production; null clears it.
- `title` (string): New title.
- `visibility` (string): public (listed on Projects and Jobs, open to everyone) or private (invite only: reachable only by the people the owner invites from the Studio).

### `publish_project` (~133 tokens)

Publish project

Publish a project: it goes live on its page and, when public, on Projects and Jobs. Refused, with the same message the Studio editor shows, while the checklist is incomplete (title, logline, description, project type, location or remote, shoot dates or dates flexible, at least one role); the answer lists each open item with the tool that completes it (update_project or add_project_role). Also refused by the live-projects cap and while a project is under review. Publishing a closed project reopens it.

Input parameters:

- `project_id` (integer, required): The project's id (from list_projects or create_project).

### `close_project` (~140 tokens)

Close project

Close a live project: its page stays readable with a "no longer looking for people" notice, it leaves Projects, Jobs and the sitemaps, every open role closes and pending applicants are told by e-mail. Always confirm with the user first (name the project) and only then call with confirm set to true.

Input parameters:

- `confirm` (boolean, required): Must be true. Ask the user to confirm before calling: the project leaves Projects and Jobs, every open role closes and pending applicants are told; those applications stay closed even if publish_proj…
- `project_id` (integer, required): The project's id (from list_projects or create_project).

### `add_project_role` (~267 tokens)

Add a role

Add a role the project is looking for (the Studio's Roles tab): the role name, how many people, what it involves and the pay (paid with an amount, currency and per day / flat / per hour; expenses only; unpaid; deferred / profit share). Up to 20 roles per project. Returns the project with its roles and their ids.

Input parameters:

- `count_needed` (integer): How many people are needed for this role; default 1.
- `description`: What the role involves; null clears it.
- `pay_amount_cents`: The pay in the currency's minor unit (cents): 15000 with USD = $150. Paid roles only.
- `pay_currency`: ISO currency code for a paid role, e.g. USD, EUR, GBP.
- `pay_type` (string, required): paid (needs amount, currency and unit), expenses (expenses only), unpaid, or deferred (deferred / profit share).
- `pay_unit`: What the amount covers for a paid role: day, flat or hour.
- `project_id` (integer, required): The project's id (from list_projects or create_project).
- `role` (string, required): The role, e.g. Director of photography, Gaffer, Editor (the department is derived from it).

### `update_project_role` (~293 tokens)

Update a role

Change one of a project's roles: name, how many people, description, pay, or mark it filled (its pending applications close and the applicants are e-mailed) or open again. Only the fields given change; the role keeps its applications.

Input parameters:

- `count_needed` (integer): How many people are needed for this role; default 1.
- `description`: What the role involves; null clears it.
- `filled` (boolean): true marks the role filled (its pending applications close and the applicants are e-mailed); false reopens it.
- `pay_amount_cents`: The pay in the currency's minor unit (cents): 15000 with USD = $150. Paid roles only.
- `pay_currency`: ISO currency code for a paid role, e.g. USD, EUR, GBP.
- `pay_type` (string): paid (needs amount, currency and unit), expenses (expenses only), unpaid, or deferred (deferred / profit share).
- `pay_unit`: What the amount covers for a paid role: day, flat or hour.
- `project_id` (integer, required): The project's id (from list_projects or create_project).
- `role` (string): The role, e.g. Director of photography, Gaffer, Editor (the department is derived from it).
- `role_id` (integer, required): The role's id (from get_project or search_open_roles).

### `remove_project_role` (~79 tokens)

Remove a role

Remove a role from a project. A role that already has applications cannot be removed (mark it filled with update_project_role instead), so nobody's thread disappears.

Input parameters:

- `project_id` (integer, required): The project's id (from list_projects or create_project).
- `role_id` (integer, required): The role's id (from get_project or search_open_roles).

### `list_project_applications` (~161 tokens)

List applications

The applications to one of the user's projects (the Studio's Applicants tab), newest first, optionally for one role: each applicant's public profile card (name, handle, roles, location, website and social links, public films), their note and links, status, the owner's next moves, and the message thread. Open applications (submitted or shortlisted) by default; status all includes decided, withdrawn and closed ones.

Input parameters:

- `project_id` (integer, required): The project's id (from list_projects or create_project).
- `role_id` (integer): Only the applications to this role.
- `status` (string): open = still waiting on the owner (submitted or shortlisted, the default); all = every application, including accepted, declined, withdrawn and closed ones.

### `respond_to_application` (~138 tokens)

Respond to an applicant

The owner's move on an application to one of the user's projects: shortlist, accept or decline, with an optional message posted in the thread afterwards. The applicant is e-mailed, exactly as when the owner decides in the Studio. A decision is final (accepted and declined applications cannot be moved again).

Input parameters:

- `action` (string, required): shortlist (a submitted application), accept or decline (a submitted or shortlisted one).
- `application_id` (integer, required): The application's id (from list_project_applications, list_my_applications or apply_to_role).
- `message` (string): An optional message to the applicant, posted in the thread after the decision.

### `send_application_message` (~104 tokens)

Message about an application

Post a message in an application's thread as the user, whether they are the project owner or the applicant; the other side is e-mailed, as from the Studio. Returns the whole thread. Not possible once the application was withdrawn.

Input parameters:

- `application_id` (integer, required): The application's id (from list_project_applications, list_my_applications or apply_to_role).
- `message` (string, required): The message (sent as the user, to the other side of the application).

### `search_open_roles` (~301 tokens)

Search open roles

Search the open roles on Vidreno Jobs (public, live projects only): by free text, department or exact role, country, remote-friendly, pay type and project type, newest projects first, paged with limit and offset (total counts every match; follow next_offset while has_more is true). Each result is the role with its pay and the project (type, format, stage, location, dates, the owner's public profile card) and the public links. Role ids are for apply_to_role.

Input parameters:

- `country` (string): ISO 3166-1 alpha-2 country code of the shoot.
- `department` (string): Only roles in this department.
- `limit` (integer): How many roles to return per page (max 60), newest projects first.
- `offset` (integer): How many matching roles to skip: pass next_offset from the previous answer while has_more is true.
- `pay_type` (string): Only roles paid this way: paid, expenses, unpaid or deferred.
- `project_type` (string): Only paid jobs, self_funded or passion projects.
- `query` (string): Free-text match (case-insensitive, anywhere in the text) against the role, department, project title, logline, city and the owner's name or handle.
- `remote` (boolean): true = only projects that welcome remote work.
- `role` (string): Only this exact role, e.g. Gaffer.

### `list_my_applications` (~79 tokens)

My applications

The applications the user has made to other people's projects (the Studio's Applications page), newest first: role, project, status, note and links, whether it can still be withdrawn, the owner's public profile card and the message thread.

Input parameters:

- `status` (string): open = still waiting on the owner; all = every application (the default).

### `apply_to_role` (~158 tokens)

Apply to a role

Apply to an open role as the user, with their filmmaker profile as the application (the owner sees the public profile card), an optional note and up to 3 links. The apply form's rules apply unchanged: a creator account with a public filmmaker profile, display name and at least one role; one application per role; not the user's own project; up to 20 applications a day. The owner is e-mailed.

Input parameters:

- `links` (array): Up to 3 https links (reel, portfolio).
- `note` (string): A note to the owner (up to 600 characters): why the user fits the role.
- `role_id` (integer, required): The role's id (from get_project or search_open_roles).

### `withdraw_application` (~66 tokens)

Withdraw an application

Withdraw one of the user's own open applications (submitted or shortlisted). The thread stays readable; a withdrawn application cannot be reopened, so confirm with the user first.

Input parameters:

- `application_id` (integer, required): The application's id (from list_project_applications, list_my_applications or apply_to_role).

### `request_film_deletion` (~72 tokens)

request film deletion

Request staff deletion of a sold film you own. Immediately unpublishes it. Explicitly confirm buyers and renters will lose access if approved. This does not approve the request or delete the files.

Input parameters:

- `confirmed` (boolean, required)
- `film_id` (string, required)
- `reason` (string, required)

### `withdraw_film_deletion_request` (~38 tokens)

withdraw film deletion request

Withdraw your own pending deletion request; the film stays unpublished. Cannot change a decided request.

Input parameters:

- `film_id` (string, required)

### `start_film_master_upload` (~87 tokens)

start film master upload

Open a browser handoff for an HDR master/trailer, stereo/5.1/Atmos file, or bonus video. Uses the ordinary film upload engine and Studio attachment checks. Uploads do not automatically publish a replacement.

Input parameters:

- `bonus_id` (string)
- `episode_id` (string)
- `film_id` (string, required)
- `slot` (string, required)

### `list_film_bonus` (~40 tokens)

list film bonus

List your bonus materials, access rules, publication state and file readiness. Archive preserves access already promised to buyers.

Input parameters:

- `film_id` (string, required)

### `create_film_bonus` (~103 tokens)

create film bonus

Create a draft bonus item. Use a file handoff for PDF/image assets; video files use start_film_master_upload. Scope it to the film, a season or an episode.

Input parameters:

- `access` (string)
- `description` (string)
- `episode_id`
- `film_id` (string, required)
- `kind` (string, required)
- `season_id`
- `show_preview` (boolean)
- `title` (string, required)

### `update_film_bonus` (~135 tokens)

update film bonus

Replace a bonus item's metadata/access/publication settings. Read it first; send all fields and its revision. Published items must have a ready file. Existing buyers keep promised access.

Input parameters:

- `access` (string, required)
- `bonus_id` (string, required)
- `description` (string, required)
- `episode_id` (required)
- `expected_updated_at` (required): updated_at returned by the last read; rejects concurrent Studio edits
- `film_id` (string, required)
- `kind` (string, required)
- `season_id` (required)
- `show_preview` (boolean, required)
- `status` (string, required)
- `title` (string, required)

### `archive_film_bonus` (~45 tokens)

archive film bonus

Archive a bonus item, preserving existing customers' promised access.

Input parameters:

- `bonus_id` (string, required)
- `confirm` (boolean, required)
- `film_id` (string, required)

### `reorder_film_bonus` (~47 tokens)

reorder film bonus

Reorder all bonus items. Supply every current bonus public id exactly once; a changed list is rejected.

Input parameters:

- `bonus_ids` (array, required)
- `film_id` (string, required)

### `set_film_artwork_position` (~48 tokens)

set film artwork position

Set or reset a device artwork focal position using the same crop rules as Studio.

Input parameters:

- `device` (string, required)
- `film_id` (string, required)
- `position` (required)

### `set_film_protection` (~71 tokens)

set film protection

Request protected or clear film playback using Studio's protection safeguards. Applies to all episodes of a series. Never changes global DRM configuration.

Input parameters:

- `expected_updated_at` (required): updated_at returned by the last read; rejects concurrent Studio edits
- `film_id` (string, required)
- `protected` (boolean, required)

### `cancel_film_protection_change` (~31 tokens)

cancel film protection change

Cancel a pending protection change only while Studio allows it.

Input parameters:

- `film_id` (string, required)

### `retry_film_protection_change` (~40 tokens)

retry film protection change

Retry a failed protection change only while Studio allows it. This cannot retry an admin-only encoding job.

Input parameters:

- `film_id` (string, required)

### `retry_film_file_check` (~61 tokens)

retry film file check

Recheck an uploaded main/HDR/audio file whose inspection failed or is overdue. This does not retry encoding or restart the transcoder.

Input parameters:

- `episode_id` (string)
- `film_id` (string, required)
- `slot` (string, required)

### `publish_film_replacement` (~53 tokens)

publish film replacement

Explicitly put ready replacement versions live for an already-published film/series. Viewer access, copyright screening and readiness checks still apply.

Input parameters:

- `confirm` (boolean, required)
- `film_id` (string, required)

### `set_film_sound` (~91 tokens)

set film sound

Choose stereo Auto, generated stereo or an embedded track, and intentional silence, for a feature using the supported programme flow. Does not upload or attach files.

Input parameters:

- `expected_updated_at` (required): updated_at returned by the last read; rejects concurrent Studio edits
- `film_id` (string, required)
- `silent` (boolean, required)
- `stereo_mode` (string, required)
- `track_index` (integer)

### `request_film_review` (~48 tokens)

request film review

Ask staff to manually review your held film, with a note. This does not approve, restore or moderate it.

Input parameters:

- `film_id` (string, required)
- `note` (string, required)

### `acknowledge_film_changes` (~67 tokens)

acknowledge film changes

Confirm you addressed the current change request on your own film. Uses the exact reviewed_at from get_film_workflow; cannot reinstate a removed film.

Input parameters:

- `film_id` (string, required)
- `reviewed_at` (required): updated_at returned by the last read; rejects concurrent Studio edits

### `get_film_workflow` (~38 tokens)

get film workflow

Read your film's change request and deletion-request status. No admin-only review scores or diagnostics.

Input parameters:

- `film_id` (string, required)

### `start_film_file_upload` (~115 tokens)

start film file upload

Open a signed-in browser upload for film artwork, a season poster, an uploaded subtitle, or an existing bonus file/thumbnail. No arbitrary URL fetching. The upload uses the website's file validation and owner checks.

Input parameters:

- `bonus_id` (string)
- `episode_id` (string)
- `film_id` (string, required)
- `kind` (string, required)
- `label` (string)
- `language` (string)
- `season_id` (string)
- `subtitle_kind` (string)

### `start_profile_avatar_upload` (~24 tokens)

start profile avatar upload

Open a signed-in browser handoff to replace your own profile avatar.

### `start_project_cover_upload` (~33 tokens)

start project cover upload

Open a signed-in browser handoff to replace a project cover you own.

Input parameters:

- `project_id` (integer, required)

### `start_video_thumbnail_upload` (~34 tokens)

start video thumbnail upload

Open a signed-in browser handoff to replace a hosted video's thumbnail you own.

Input parameters:

- `video_id` (string, required)

### `get_file_upload_status` (~45 tokens)

get file upload status

Check a file handoff created for your account. Reports whether its destination has changed since the handoff; never returns stored object keys.

Input parameters:

- `upload_id` (string, required)

### `list_spoken_languages` (~37 tokens)

list spoken languages

Search the fixed language catalogue. Use returned canonical codes for filtering and metadata, not free-text names.

Input parameters:

- `search` (string)

### `get_film_languages` (~47 tokens)

get film languages

Read original language codes, No dialogue, detection progress and episode inheritance. Detection is separate from video encoding.

Input parameters:

- `episode_id` (string)
- `film_id` (string, required)

### `set_film_languages` (~88 tokens)

set film languages

Choose original languages from list_spoken_languages, or No dialogue. Manual choices take precedence over detection. An episode selection overrides series inheritance.

Input parameters:

- `episode_id` (string)
- `expected_updated_at` (required): updated_at returned by the last read; rejects concurrent Studio edits
- `film_id` (string, required)
- `languages` (array, required)
- `no_dialogue` (boolean, required)

### `get_film_processing` (~50 tokens)

get film processing

Read upload, encode, protection and subtitle status separately. Uploaded does not mean playable; automatic subtitles remain environment-gated.

Input parameters:

- `episode_id` (string)
- `film_id` (string, required)

### `list_film_subtitles` (~48 tokens)

list film subtitles

Read manual and automatic subtitle track metadata, versions, detection status and availability. Does not return cue text.

Input parameters:

- `episode_id` (string)
- `film_id` (string, required)

### `get_subtitle_cues` (~78 tokens)

get subtitle cues

Read a bounded page of automatic subtitle cues or a saved draft. Retain source_revision and version for editing.

Input parameters:

- `draft` (boolean)
- `episode_id` (string)
- `film_id` (string, required)
- `limit` (integer)
- `offset` (integer)
- `track_id` (string, required)

### `edit_subtitle_cues` (~114 tokens)

edit subtitle cues

Replace a bounded range of automatic subtitle cues. Reads the full track server-side and validates timing before saving; does not overwrite concurrent edits. Set draft=true to save without publishing.

Input parameters:

- `cues` (array, required)
- `delete_count` (integer, required)
- `draft` (boolean)
- `episode_id` (string)
- `film_id` (string, required)
- `offset` (integer, required)
- `source_revision` (string, required)
- `track_id` (string, required)
- `version` (integer, required)

### `set_automatic_subtitles` (~74 tokens)

set automatic subtitles

Explicitly enable, disable or generate automatic subtitles for your film/episode, only where the unfinished automatic-subtitle feature is enabled. Does not enable it for the environment.

Input parameters:

- `action` (string, required)
- `episode_id` (string)
- `film_id` (string, required)
- `source_revision` (required)

### `update_automatic_subtitle` (~112 tokens)

update automatic subtitle

Enable/disable a generated track, retry a failed translation, delete a generated track, or publish its saved draft. Requires its current source revision and version. Deleting original subtitles also cancels pending translations.

Input parameters:

- `action` (string, required)
- `confirm` (boolean)
- `enabled` (boolean)
- `episode_id` (string)
- `film_id` (string, required)
- `source_revision` (string, required)
- `track_id` (string, required)
- `version` (integer, required)

### `relabel_film_subtitle` (~82 tokens)

relabel film subtitle

Change an uploaded subtitle track's display label. Language and kind identify its slot and are not changed.

Input parameters:

- `episode_id` (string)
- `expected_updated_at` (required): updated_at returned by the last read; rejects concurrent Studio edits
- `film_id` (string, required)
- `label` (string, required)
- `track_id` (string, required)

### `remove_film_subtitle` (~75 tokens)

remove film subtitle

Permanently remove an uploaded subtitle track. Confirm with the user first.

Input parameters:

- `confirm` (boolean, required)
- `episode_id` (string)
- `expected_updated_at` (required): updated_at returned by the last read; rejects concurrent Studio edits
- `film_id` (string, required)
- `track_id` (string, required)

### `download_film_subtitle` (~67 tokens)

download film subtitle

Return a signed-in owner download link for an uploaded or generated subtitle track. The user must open it in their authenticated browser.

Input parameters:

- `episode_id` (string)
- `film_id` (string, required)
- `format` (string)
- `track_id` (string, required)

### `get_branding` (~22 tokens)

get branding

Read your account's hosted-player accent colour and branding banner entitlement.

### `update_branding` (~51 tokens)

update branding

Set your hosted-player account default. Null clears the colour. Free accounts must show the earn banner; paid accounts may hide it.

Input parameters:

- `brand_color`
- `show_earn_banner` (boolean)

### `get_account_settings` (~29 tokens)

get account settings

Read creator mode, marketing email preference and bandwidth usage. Sign-in credentials are never editable through MCP.

### `update_account_settings` (~56 tokens)

update account settings

Change creator mode and/or your marketing email preference. Only subscribe when the user explicitly asks. Does not change email, password, billing or payout settings.

Input parameters:

- `creator_mode` (string)
- `marketing_subscribed` (boolean)

### `list_connected_apps` (~28 tokens)

list connected apps

Read apps connected to your account and their granted permissions. Does not disconnect apps or expose tokens.

### `list_project_invites` (~51 tokens)

list project invites

List invitations you sent for a project you own. Invitations grant project access, not a role.

Input parameters:

- `limit` (integer)
- `offset` (integer)
- `project_id` (integer, required)

### `send_project_invite` (~72 tokens)

send project invite

Invite someone to your project by handle OR email; sends the Studio invitation email. This grants project access, not a role. Only send when requested by the user.

Input parameters:

- `email` (string)
- `note` (string)
- `project_id` (integer, required)
- `username` (string)

### `revoke_project_invite` (~39 tokens)

revoke project invite

Withdraw an invitation to your project; revokes private-project access.

Input parameters:

- `invite_id` (integer, required)
- `project_id` (integer, required)

### `list_my_project_invites` (~43 tokens)

list my project invites

List projects you have been invited to, including the invitation id used to accept or decline.

Input parameters:

- `limit` (integer)
- `offset` (integer)

### `respond_to_project_invite` (~36 tokens)

respond to project invite

Accept or decline an invitation addressed to your account.

Input parameters:

- `action` (string, required)
- `invite_id` (integer, required)

### `read_project` (~40 tokens)

read project

Read a project page you may access, including private projects you were invited to. Does not disclose owner-only applicant data.

Input parameters:

- `project_slug` (string, required)

### `get_project_discussion` (~49 tokens)

get project discussion

Read a permitted project's discussion. Replies accompany their parent; offset pages top-level posts.

Input parameters:

- `limit` (integer)
- `offset` (integer)
- `project_slug` (string, required)

### `post_project_discussion` (~62 tokens)

post project discussion

Post an update on your project or reply in a project you may access. Sends the same participant notifications as the website. Only post when requested.

Input parameters:

- `body` (string, required)
- `parent_id` (integer)
- `project_slug` (string, required)

### `delete_project_post` (~53 tokens)

delete project post

Delete a discussion post you are permitted to delete as creator. Deleting a parent also removes its replies.

Input parameters:

- `confirm` (boolean, required)
- `post_id` (integer, required)
- `project_slug` (string, required)

### `pin_project_post` (~57 tokens)

pin project post

Pin or unpin a top-level post on a project you own. This is a project-owner feature, not admin moderation.

Input parameters:

- `pinned` (boolean, required)
- `post_id` (integer, required)
- `project_slug` (string, required)

### `report_project_post` (~48 tokens)

report project post

Report a project discussion post for staff review; does not moderate or remove it.

Input parameters:

- `post_id` (integer, required)
- `project_slug` (string, required)
- `reason` (string, required)

### `set_project_notifications` (~40 tokens)

set project notifications

Mute or unmute your own email notifications for a project you can access.

Input parameters:

- `muted` (boolean, required)
- `project_slug` (string, required)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-vidreno-mcp/vidreno#diagnostics

## Score history

- 2026-11-05: 23
- 2026-11-04: 87
- 2026-11-03: 88
- 2026-11-02: 88
- 2026-11-01: 87
- 2026-10-31: 87
- 2026-10-30: 86
- 2026-10-29: 86
- 2026-10-28: 86
- 2026-10-27: 85
- 2026-10-26: 85
- 2026-10-25: 84
- 2026-10-24: 84
- 2026-10-23: 83
- 2026-10-22: 83
- 2026-10-21: 83
- 2026-10-20: 82
- 2026-10-19: 82
- 2026-10-18: 81
- 2026-10-17: 81
- 2026-10-16: 81
- 2026-10-15: 80
- 2026-10-14: 80
- 2026-10-13: 80
- 2026-10-12: 79
- 2026-10-10: 78

## Common questions

### What is the Vidreno MCP server?

Vidreno is an MCP server listed in the public MCP registry as com.vidreno/mcp. Publish films, monetise them, earn money, and host and embed videos on sites and apps. This page covers its hosted endpoint (https://vidreno.com/mcp).

### Is the Vidreno MCP server safe to use?

Vidreno scores 23 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Vidreno MCP server expose?

Vidreno exposes 111 tools: get_profile, get_account, list_videos, get_video, get_embed_code, and 106 more. Their descriptions and schemas cost roughly 14,114 tokens of context every time the server is loaded.

### Does the Vidreno MCP server require authentication?

Its publisher declares no required credentials for Vidreno. We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.

### Is the Vidreno MCP server still maintained?

Vidreno is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the Vidreno MCP server?

VerifyMCP ran 5 checks on Vidreno, covering TLS certificate, HTTPS, HSTS header, DNSSEC and 1 more. 6 items could not be completed, a gap on our side rather than a finding about Vidreno: Authorization, Schema quality, Stability, Tool coverage and 2 more. 5 categories score 0 for that reason, because we only credit what we can confirm. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://vidreno.com/mcp
- Website: https://vidreno.com/mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/com-vidreno-mcp/vidreno.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-vidreno-mcp/vidreno/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/com-vidreno-mcp/vidreno.json
- HTML version of this page: https://verifymcp.io/servers/com-vidreno-mcp/vidreno
