api.video MCP by usefulapi
Manage videos and live streams, inspect captions, players and webhooks, and read play analytics.
Should I use this
Quality & Safety
Findings (1)
- LOWin apivideo_get_live_stream_analytics
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"apivideo": {
"url": "https://apivideo.usefulapi.io/mcp"
}
}
}Remote endpoints
https://apivideo.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (15)
🟢apivideo_list_videos(title, tags, metadata, description, liveStreamId, ...)
List videos in the account, with optional filters (title, tags, metadata, description, liveStreamId) and sorting. Read-only. GET /videos.
Input Schema
{
"type": "object",
"properties": {
"title": {
"description": "Filter by video title (substring).",
"type": "string"
},
"tags": {
"description": "Filter by tags (all must match). Sent as tags[].",
"type": "array",
"items": {
"type": "string"
}
},
"metadata": {
"description": "Filter by metadata key/value pairs. Sent as metadata[key]=value.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"description": {
"description": "Filter by description (substring).",
"type": "string"
},
"liveStreamId": {
"description": "Return only videos recorded from this live stream id.",
"type": "string"
},
"sortBy": {
"description": "Field to sort by.",
"type": "string",
"enum": [
"title",
"createdAt",
"publishedAt",
"updatedAt"
]
},
"sortOrder": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"currentPage": {
"description": "Page number (1-based). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Results per page (max 100). Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apivideo_get_video(videoId)
Get a single video object by id (title, assets, player URL, status flags). Read-only. GET /videos/{videoId}.
Input Schema
{
"type": "object",
"properties": {
"videoId": {
"type": "string",
"description": "The video id, e.g. vi4k0jvEUuaTdRAEjQ4Jfrgz."
}
},
"required": [
"videoId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apivideo_get_video_status(videoId)
Get encoding and ingest status for a video (upload progress, encoding qualities, playability). Read-only. GET /videos/{videoId}/status.
Input Schema
{
"type": "object",
"properties": {
"videoId": {
"type": "string",
"description": "The video id."
}
},
"required": [
"videoId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apivideo_list_live_streams(streamKey, name, sortBy, sortOrder, currentPage, ...)
List live streams in the account, with optional filters (streamKey, name) and sorting. Read-only. GET /live-streams.
Input Schema
{
"type": "object",
"properties": {
"streamKey": {
"description": "Filter by exact stream key.",
"type": "string"
},
"name": {
"description": "Filter by live stream name (substring).",
"type": "string"
},
"sortBy": {
"description": "Field to sort by.",
"type": "string",
"enum": [
"createdAt",
"updatedAt"
]
},
"sortOrder": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"currentPage": {
"description": "Page number (1-based). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Results per page (max 100). Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apivideo_get_live_stream(liveStreamId)
Get a single live stream object by id (stream key, RTMP ingest, player URL). Read-only. GET /live-streams/{liveStreamId}.
Input Schema
{
"type": "object",
"properties": {
"liveStreamId": {
"type": "string",
"description": "The live stream id, e.g. li400mYKSgQ6xs7taUeSaEup."
}
},
"required": [
"liveStreamId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apivideo_list_captions(videoId, currentPage, pageSize)
List caption tracks for a video (language, source URL, default flag). Read-only. GET /videos/{videoId}/captions.
Input Schema
{
"type": "object",
"properties": {
"videoId": {
"type": "string",
"description": "The video id."
},
"currentPage": {
"description": "Page number (1-based). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Results per page (max 100). Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"videoId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apivideo_list_chapters(videoId, currentPage, pageSize)
List chapter tracks for a video. Read-only. GET /videos/{videoId}/chapters.
Input Schema
{
"type": "object",
"properties": {
"videoId": {
"type": "string",
"description": "The video id."
},
"currentPage": {
"description": "Page number (1-based). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Results per page (max 100). Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"videoId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apivideo_list_players(sortBy, sortOrder, currentPage, pageSize)
List customized player themes in the account. Read-only. GET /players.
Input Schema
{
"type": "object",
"properties": {
"sortBy": {
"description": "Field to sort by.",
"type": "string",
"enum": [
"createdAt",
"updatedAt"
]
},
"sortOrder": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"currentPage": {
"description": "Page number (1-based). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Results per page (max 100). Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apivideo_list_webhooks(events, currentPage, pageSize)
List webhooks configured in the account, optionally filtered by event name. Read-only. GET /webhooks.
Input Schema
{
"type": "object",
"properties": {
"events": {
"description": "Filter by event name, e.g. \"video.encoding.quality.completed\".",
"type": "string"
},
"currentPage": {
"description": "Page number (1-based). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Results per page (max 100). Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apivideo_get_video_analytics(from, to, dimension, filter, currentPage, ...)
Aggregated play analytics for videos over a date range, grouped by a dimension. Read-only. GET /analytics/videos/plays.
Input Schema
{
"type": "object",
"properties": {
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date yyyy-mm-dd (inclusive). Required."
},
"to": {
"description": "End date yyyy-mm-dd (inclusive).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"dimension": {
"type": "string",
"enum": [
"videoId",
"emittedAt",
"country",
"deviceType",
"operatingSystem",
"browser"
],
"description": "Dimension to group plays by."
},
"filter": {
"description": "Filter expression, e.g. \"videoId:vi123\".",
"type": "string"
},
"currentPage": {
"description": "Page number (1-based). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Results per page (max 100). Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"from",
"dimension"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apivideo_get_live_stream_analytics(from, to, dimension, filter, currentPage, ...)
Aggregated play analytics for live streams over a date range, grouped by a dimension. Read-only. GET /analytics/live-streams/plays.
Input Schema
{
"type": "object",
"properties": {
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start date yyyy-mm-dd (inclusive). Required."
},
"to": {
"description": "End date yyyy-mm-dd (inclusive).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"dimension": {
"type": "string",
"enum": [
"liveStreamId",
"emittedAt",
"country",
"deviceType",
"operatingSystem",
"browser"
],
"description": "Dimension to group plays by."
},
"filter": {
"description": "Filter expression, e.g. \"liveStreamId:li123\".",
"type": "string"
},
"currentPage": {
"description": "Page number (1-based). Default 1.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"pageSize": {
"description": "Results per page (max 100). Default 25.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"from",
"dimension"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴apivideo_create_video(title, description, source, public, panoramic, ...)
WRITE. Create a new video object. If `source` (a public video URL) is provided, api.video ingests the video from that URL — recommended for hosted use, since raw file bytes cannot stream through MCP. POST /videos.
Input Schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Video title. Required."
},
"description": {
"description": "Video description.",
"type": "string"
},
"source": {
"description": "Public URL of a video file to ingest from. Recommended over uploading bytes.",
"type": "string"
},
"public": {
"description": "Whether the video is public (default true) or private.",
"type": "boolean"
},
"panoramic": {
"description": "Whether the video is a 360/panoramic video.",
"type": "boolean"
},
"mp4Support": {
"description": "Whether to also generate a downloadable MP4.",
"type": "boolean"
},
"tags": {
"description": "Tags for the video.",
"type": "array",
"items": {
"type": "string"
}
},
"metadata": {
"description": "Key/value metadata pairs (sent as [{key,value}]).",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"playerId": {
"description": "Id of a custom player theme to attach.",
"type": "string"
}
},
"required": [
"title"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴apivideo_update_video(videoId, title, description, tags, metadata, ...)
WRITE. Update fields on an existing video. Only the provided fields are changed. PATCH /videos/{videoId}.
Input Schema
{
"type": "object",
"properties": {
"videoId": {
"type": "string",
"description": "The video id to update."
},
"title": {
"description": "New title.",
"type": "string"
},
"description": {
"description": "New description.",
"type": "string"
},
"tags": {
"description": "Replacement tag list.",
"type": "array",
"items": {
"type": "string"
}
},
"metadata": {
"description": "Replacement metadata (sent as [{key,value}]).",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"public": {
"description": "New public/private flag.",
"type": "boolean"
},
"panoramic": {
"description": "New panoramic flag.",
"type": "boolean"
},
"playerId": {
"description": "Player theme id to attach.",
"type": "string"
}
},
"required": [
"videoId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴apivideo_delete_video(videoId)
WRITE. Permanently DELETE a video and all its assets. This cannot be undone. DELETE /videos/{videoId}.
Input Schema
{
"type": "object",
"properties": {
"videoId": {
"type": "string",
"description": "The video id to permanently delete."
}
},
"required": [
"videoId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴apivideo_create_live_stream(name, public, playerId)
WRITE. Create a new live stream, returning a stream key and RTMP ingest URL to broadcast to. POST /live-streams.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Live stream name. Required."
},
"public": {
"description": "Whether the stream is public (default true) or private.",
"type": "boolean"
},
"playerId": {
"description": "Id of a custom player theme to attach.",
"type": "string"
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence