MCP Server
Coverr provides a Model Context Protocol (MCP) server that enables AI assistants and agents to interact with the Coverr API using structured tools.
Endpoint
POST https://mcp.coverr.co/mcp
The MCP server is available at the https://mcp.coverr.co/mcp URL and follows the Streamable HTTP transport specification.
Authentication
Every call needs your Coverr API key. The server accepts it three ways — pick whichever your MCP client supports.
Method 1: x-api-key header
The standard API key header, and the one most MCP clients offer out of the box:
x-api-key: {api_key}
Method 2: x-coverr-api-key header
An explicitly namespaced alias, useful when your client already sends an x-api-key for another service:
x-coverr-api-key: {api_key}
Method 3: OAuth 2.0 (Bearer token)
The server implements an OAuth 2.0 flow for MCP clients. When configuring your client:
- Client ID: Any value (can be "coverr-client")
- Client Secret: Use your Coverr API Key as the secret.
The OAuth metadata is available at:
GET /.well-known/oauth-authorization-server
If more than one is present, x-coverr-api-key wins, then x-api-key, then the Authorization: Bearer token.
Available Tools
Videos
get_videos
Fetch a list of videos from the Coverr API. Supports search, filtering, and pagination.
| Parameter | Type | Description |
|---|---|---|
query | string | Free-text search query for videos. Optional. |
page | number | Page number (0-based). Default: 0. |
page_size | number | Number of results per page. Max: 100. |
category | string | Category slug to filter by (e.g., "nature"). Optional. |
sort_by | enum | Sort order: date, popular, trending. Optional. |
filter | string | Filter string, e.g. is_vertical:true or tags:"nature". Optional. |
get_video
Fetch a single video by ID. Returns video details including URLs.
| Parameter | Type | Description |
|---|---|---|
id | string | Video ID. Required. |
Collections
get_collections
Fetch a paginated list of curated video collections.
| Parameter | Type | Description |
|---|---|---|
page | number | Page number (0-based). Default: 0. Optional. |
page_size | number | Number of results per page. Max: 100. Optional. |
get_collection
Fetch a single collection by ID.
| Parameter | Type | Description |
|---|---|---|
id | string | Collection ID. Required. |
get_collection_videos
Fetch videos from a specific collection. Supports search and pagination.
| Parameter | Type | Description |
|---|---|---|
id | string | Collection ID. Required. |
page | number | Page number (0-based). Default: 0. Optional. |
page_size | number | Number of results per page. Max: 100. Optional. |
query | string | Search videos within the collection. Optional. |
urls | boolean | Include video URLs in the response. Optional. |
Categories
get_categories
Fetch a paginated list of video categories.
| Parameter | Type | Description |
|---|---|---|
page | number | Page number (0-based). Default: 0. Optional. |
page_size | number | Number of results per page. Max: 100. Optional. |
get_category
Fetch a single category by ID or slug.
| Parameter | Type | Description |
|---|---|---|
id | string | Category ID or slug. Required. |
get_category_videos
Fetch videos from a specific category. Supports search and pagination.
| Parameter | Type | Description |
|---|---|---|
id | string | Category ID or slug. Required. |
page | number | Page number (0-based). Default: 0. Optional. |
page_size | number | Number of results per page. Max: 100. Optional. |
query | string | Search videos within the category. Optional. |
urls | boolean | Include video URLs in the response. Optional. |
Audios
get_audios
Fetch a list of audio tracks. Supports search, filtering, and pagination.
| Parameter | Type | Description |
|---|---|---|
query | string | Free-text search query for audio tracks. Optional. |
page | number | Page number (0-based). Default: 0. Optional. |
page_size | number | Number of results per page. Max: 100. Optional. |
sort_by | enum | Sort order: date, popular. Optional. |
get_audio
Fetch a single audio track by ID.
| Parameter | Type | Description |
|---|---|---|
id | string | Audio ID. Required. |
Video Scenes
get_video_scenes
Fetch a paginated list of video scenes. Each scene includes up to 4 preview videos.
| Parameter | Type | Description |
|---|---|---|
page | number | Page number (0-based). Default: 0. Optional. |
page_size | number | Number of results per page. Max: 100. Optional. |
get_video_scene
Fetch a single video scene by slug or ID. Returns up to 8 preview videos sorted by popularity.
| Parameter | Type | Description |
|---|---|---|
slug_or_id | string | Video scene slug or ID. Required. |
filter | string | Exclude a specific video ID from preview videos. Optional. |
get_video_scene_videos
Fetch videos from a specific video scene.
| Parameter | Type | Description |
|---|---|---|
slug_or_id | string | Video scene slug or ID. Required. |
page | number | Page number (0-based). Default: 0. Optional. |
page_size | number | Number of results per page. Max: 100. Optional. |
AI Models
These tools describe what the account can generate, and what each model accepts. Call them before generating.
list_ai_models
List the AI models available for generation. Only active models are returned.
| Parameter | Type | Description |
|---|---|---|
type | enum | Restrict to one generation type: video, image, audio. Optional. |
page | number | Page number (0-based). Default: 0. Optional. |
page_size | number | Number of results per page. Max: 100. Optional. |
Each model carries:
key— the value to pass asmodelwhen generating.config— what the model can do and which values it allows (textToVideo,imageToVideo,durations,aspectRatios,resolutions, …).inputFields— the exact keys to send those values under, inside the generation tool'sconfig. Anything not listed here is ignored and silently falls back to the model's default.modes— if non-empty, the model has variants. A mode's ownconfigandinputFieldsreplace the model-level ones, and a mode may override price and generation time too.pricePerUnit,generationTime,isFeatured— for weighing cost against speed. Video is charged per second of duration, so a long clip multiplies the price.
get_ai_model
Get a single AI model. Returns the same details as list_ai_models for one model.
| Parameter | Type | Description |
|---|---|---|
key | string | AI model key (not the display name), or its ID. Required. |
Generations
Requires an active Coverr subscription with available credits — generation is not part of the free API tier. See coverr.co/pricing;
get_account_statusreports what the account currently has.
Generation is asynchronous, so the flow is always the same:
list_ai_models— choose a modelkeyand read itsinputFields.create_<type>_generation— returns a task id immediately, plusestimatedSeconds.wait_<type>_generation— call repeatedly with that id until it reportsdone: true.
<type> is one of video, image or audio, giving nine tools in total.
create_video_generation / create_image_generation / create_audio_generation
Start a generation. Spends credits.
| Parameter | Type | Description |
|---|---|---|
prompt | string | What to generate. Required. |
model | string | Model key from list_ai_models. Required. |
config | object | Model-specific fields, keyed by that model's inputFields. Optional. |
projectId | string | Project to file the result under. Optional. |
If the model has modes, pass the chosen mode key inside config as well.
Returns the created task, including its id and estimatedSeconds. Identical calls made within 2 minutes of each other are deduplicated and return the original task, so an immediate retry after a network error will not double-charge.
Two failures are worth handling explicitly:
- "Not enough credits or free generations" — the account has no active subscription, or not enough credits for this generation. Retrying will not help. Check
get_account_status, then subscribe or top up at coverr.co/pricing. - HTTP 429 — too many generations already running in parallel for this plan. Wait for one to finish;
get_account_statusreports the plan's parallel limit.
wait_video_generation / wait_image_generation / wait_audio_generation
Wait up to 45 seconds for a generation to finish, then report done.
| Parameter | Type | Description |
|---|---|---|
taskId | string | Task id returned by create. Required. |
While done is false the generation is still running and nothing has been lost — call again with the same id. The 45-second ceiling is the MCP client's tool-call timeout, not the model's pace, so expect several calls in a row.
get_video_generation / get_image_generation / get_audio_generation
Read the current status of a generation task once, without waiting.
| Parameter | Type | Description |
|---|---|---|
taskId | string | Task id returned by create. Required. |
list_generations
List the account's own generations of one type, newest first, with their results attached. Reading costs no credits.
| Parameter | Type | Description |
|---|---|---|
type | enum | Which kind to list: video, image, audio. Required. |
limit | number | How many to return. Default: 10. Max: 50. Optional. |
offset | number | How many to skip, for paging through older generations. Optional. |
projectId | string | Only generations filed under this project. Optional. |
Returns the standard paged envelope — page, pages, pageSize, total, hits — where each hit is a generation task with its result. Deleted generations are excluded. If any listed task is still running, the response also carries a nextAction naming those ids so they can be followed up with wait_<type>_generation.
Account
get_account_status
Check the account's remaining generation credits, plan tier and parallel generation limit. Useful before generating, or after a generation fails for lack of credits.
| Parameter | Type | Description |
|---|---|---|
type | enum | Report the parallel limit for this type: video, image, audio. Optional. |
Returns tier, subscription status, a credits breakdown (free, plan, extra, total — charged in that order), parallelLimit and an upgradeUrl.
Already have an API key? Configure your MCP client and start fetching videos!