Give your agent eyes on video.
EndlessAI's hosted MCP server gives AI agents — Claude, Codex or any MCP client — video understanding, over streamable HTTP at https://platform.endlessai.com/mcp. Your agent can add videos, scan them, search frames and scenes, and ask the video agent — with the same key and the same prices as the REST API.
Credentials
Every request carries X-Api-Key. A project key (svk_…) scopes the agent to one project — the recommended default. A user token (svt_…) reaches all your projects and can create new ones.
Create either on the Developers page in the app. A bad key fails at connect time, not on the first tool call.
claude.ai
Add a custom connector with this URL. The server supports OAuth, so you sign in to the Platform and pick a project instead of pasting a key.
https://platform.endlessai.com/mcp
Connect a client
Claude Code
claude mcp add --transport http supervision https://platform.endlessai.com/mcp \
--header "X-Api-Key: svk_..."
Claude Desktop
In claude_desktop_config.json:
{
"mcpServers": {
"supervision": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://platform.endlessai.com/mcp",
"--header", "X-Api-Key: svk_..."]
}
}
}
OpenAI Agents SDK (Python)
from agents.mcp import MCPServerStreamableHttp
server = MCPServerStreamableHttp(params={
"url": "https://platform.endlessai.com/mcp",
"headers": {"X-Api-Key": "svk_..."},
})
Any MCP client (TypeScript SDK)
import { StreamableHTTPClientTransport } from
"@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("https://platform.endlessai.com/mcp"),
{ requestInit: { headers: { "X-Api-Key": "svk_..." } } },
);
19 tools
spends tokens marks the tools that start analysis work.
list_projects- list accessible projects
create_project- create a project (svt_ only)
get_project_config- read whitelisted analysis config (smart_scan, first_pass.auto_trigger, strategy.watch_for)
update_project_config- read-modify-write update of that same whitelisted config
list_videos- paginated video list for a project
get_video_status- single video processing status
upload_video_from_urlspends tokens- ingest video from a public URL; polls to terminal status; resume with get_video_status
upload_video_filespends tokens- upload a local file path (stdio-only, multipart; not on hosted transport)
trigger_smart_scanspends tokens- run a Smart Scan on a video: scene descriptions and summaries (dry_run:true = plan only, nothing is spent; returns run_id if the plan outlasts wait_seconds, default 45s)
get_smart_scan_results- scan status + summary merged (by video_id), or a dry-run plan (by run_id)
search_frames- find moments in a project's videos from a text description, or moments that look like a reference frame
search_scenes- text search over a project's scenes
list_face_persons- list face-gallery persons for a project
label_face_person- set/clear a face-gallery person's label
trigger_face_scanspends tokens- find the faces in a video and add them to the project's face gallery
get_usage- token/cost usage for a project, optional per-event list
ask_video_agentspends tokens- expensive, can take several minutes; the video agent answers a question about the project's videos with multi-step reasoning; returns answer or run_id
get_agent_run- poll/resume a prior ask_video_agent run by run_id; a completed run may also carry `correction` (a self-check found the run's own evidence contradicts the answer — the correction wins)
get_conclusions- site knowledge recorded for a project — claims from prior analyses with status (verified/proposed/refuted/stale), provenance and evidence refs; a claim is not a fact, quote `text` (returns enabled=false when site knowledge is off)
Long work never hangs
A hosted call is limited to about a minute. Work that takes longer keeps running: uploads, scans and video-agent questions return an id the agent polls with the matching get_* tool.
Limits
Plan for 120 requests a minute per credential, and one video-agent question at a time per credential. When the balance or monthly cap runs out, calls that spend tokens stop with a 402.