Server definition
- Hash
- sha256:cc82fd0267b4c5329b47b47638b2650f14c11dd056132ae2f16412cc44cad59a
- What it is
- What a remote MCP server returned when asked what it offers: 17 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "Ask a question about one or more videos with visual analysis. Most effective on focused time ranges — use start/end to specify the segment to analyze.\n\nBEFORE calling this tool, read the reka://docs/guide resource for recommended workflows. In most cases, you should first:\n- search_videos to find WHEN something happens, then pass those timestamps here as start/end\n- segment_video to detect and locate specific objects\n- get_transcript to read what was said\n\nFor single-video questions, pass video_id with start/end. For cross-video questions, pass videos — a list of video references with start/end each.\n\nFor follow-up questions, pass conversation_id from the previous response. You can add start/end to drill into a specific moment while keeping the conversation context.\n\nRequires qa_only or full pipeline.",
"inputSchema": {
"$defs": {
"VideoContext": {
"properties": {
"end": {
"title": "End",
"type": "number"
},
"start": {
"title": "Start",
"type": "number"
},
"video_id": {
"title": "Video Id",
"type": "string"
}
},
"title": "VideoContext",
"type": "object"
}
},
"properties": {
"conversation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Conversation Id"
},
"end": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "End"
},
"question": {
"title": "Question",
"type": "string"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"start": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Start"
},
"video_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Video Id"
},
"videos": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/VideoContext"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Videos"
}
},
"required": [
"question"
],
"title": "ask_videoArguments",
"type": "object"
},
"name": "ask_video",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "ask_videoOutput",
"type": "object"
}
},
{
"description": "Create a new video group. Groups organize videos into collections. Returns the new group's ID and name.",
"inputSchema": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
}
},
"required": [
"name"
],
"title": "create_groupArguments",
"type": "object"
},
"name": "create_group",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "create_groupOutput",
"type": "object"
}
},
{
"description": "Delete a video group. Videos in the group are not deleted — they are simply removed from the group.",
"inputSchema": {
"properties": {
"group_id": {
"title": "Group Id",
"type": "string"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
}
},
"required": [
"group_id"
],
"title": "delete_groupArguments",
"type": "object"
},
"name": "delete_group",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "delete_groupOutput",
"type": "object"
}
},
{
"description": "Permanently delete a video and all its indexed data (transcript, captions, embeddings, etc.). This cannot be undone.",
"inputSchema": {
"properties": {
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"video_id": {
"title": "Video Id",
"type": "string"
}
},
"required": [
"video_id"
],
"title": "delete_videoArguments",
"type": "object"
},
"name": "delete_video",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "delete_videoOutput",
"type": "object"
}
},
{
"description": "Get AI-generated visual descriptions of what happens on screen. Use this to understand the visual content without watching — each caption describes a short segment with timestamps.\n\nUse start/end to narrow results.\n\nRequires the captions feature (qa_only or full pipeline).",
"inputSchema": {
"properties": {
"end": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "End"
},
"max_results": {
"default": 50,
"title": "Max Results",
"type": "integer"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"start": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Start"
},
"video_id": {
"title": "Video Id",
"type": "string"
}
},
"required": [
"video_id"
],
"title": "get_captionsArguments",
"type": "object"
},
"name": "get_captions",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "get_captionsOutput",
"type": "object"
}
},
{
"description": "List available video analysis features with their dependencies and descriptions. Use this to understand what features exist and what pipelines to use with index_video.",
"inputSchema": {
"properties": {
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
}
},
"title": "get_feature_catalogArguments",
"type": "object"
},
"name": "get_feature_catalog",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "get_feature_catalogOutput",
"type": "object"
}
},
{
"description": "Get detected scene boundaries with start/end timestamps. Use this to understand the video's structure, then pass scene timestamps as start/end to:\n- ask_video for per-scene contextual analysis\n- segment_video to detect specific objects per scene (scenes typically fit in segment_video's 15s max range)\n\nRequires transcript indexed with scene detection (on by default; skipped only if index_video was called with scene_detection=False).",
"inputSchema": {
"properties": {
"max_results": {
"default": 200,
"title": "Max Results",
"type": "integer"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"video_id": {
"title": "Video Id",
"type": "string"
}
},
"required": [
"video_id"
],
"title": "get_scenesArguments",
"type": "object"
},
"name": "get_scenes",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "get_scenesOutput",
"type": "object"
}
},
{
"description": "Get the spoken words in a video. Use this instead of ask_video when you need to read what was said — it returns the actual text, not a summary.\n\nUse start/end to narrow results for long videos.\n\nRequires the transcript feature to be indexed.",
"inputSchema": {
"properties": {
"end": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "End"
},
"format": {
"default": "text",
"enum": [
"text",
"segments",
"words"
],
"title": "Format",
"type": "string"
},
"max_chars": {
"default": 10000,
"title": "Max Chars",
"type": "integer"
},
"max_results": {
"default": 100,
"title": "Max Results",
"type": "integer"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"start": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Start"
},
"video_id": {
"title": "Video Id",
"type": "string"
}
},
"required": [
"video_id"
],
"title": "get_transcriptArguments",
"type": "object"
},
"name": "get_transcript",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "get_transcriptOutput",
"type": "object"
}
},
{
"description": "Get detailed information about a video including upload status, metadata (duration, resolution, fps), and per-feature indexing status. Use this to check if upload or indexing is complete. The 'url' field is a short-lived HTTPS presigned URL (expires within hours) — fetch immediately and do not store; call get_video again for a fresh URL when needed.",
"inputSchema": {
"properties": {
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"video_id": {
"title": "Video Id",
"type": "string"
}
},
"required": [
"video_id"
],
"title": "get_videoArguments",
"type": "object"
},
"name": "get_video",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "get_videoOutput",
"type": "object"
}
},
{
"description": "Index a video for search, QA, or full analysis. Processes the video through a pipeline of AI features. Typically takes 3-7 minutes; longer for long videos or the 'full' pipeline. Times out after 10 minutes by default.\n\nPipelines:\n- search_only: transcription + captions + embeddings (enables search_videos)\n- qa_only: transcription + captions (enables ask_video)\n- full: transcription + captions + embeddings (enables all tools)\n\nScene detection is enabled by default and produces scene boundaries for get_scenes. Pass scene_detection=False to skip it.\n\nPrerequisites: if using video_id, the video must be in 'uploaded' status. Use get_video to check status before calling this tool.",
"inputSchema": {
"properties": {
"pipeline": {
"default": "search_only",
"enum": [
"search_only",
"qa_only",
"full"
],
"title": "Pipeline",
"type": "string"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"scene_detection": {
"default": true,
"title": "Scene Detection",
"type": "boolean"
},
"video_id": {
"title": "Video Id",
"type": "string"
}
},
"required": [
"video_id"
],
"title": "index_video_hostedArguments",
"type": "object"
},
"name": "index_video",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "index_video_hostedOutput",
"type": "object"
}
},
{
"description": "List all video groups. Use list_videos with a group_id to see videos in a specific group.",
"inputSchema": {
"properties": {
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
}
},
"title": "list_groupsArguments",
"type": "object"
},
"name": "list_groups",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "list_groupsOutput",
"type": "object"
}
},
{
"description": "List all videos in your account, or filter to a specific group by passing group_id. Shows upload status and which features have been indexed for each video. Each video's 'url' is a short-lived HTTPS presigned URL (expires within hours) — fetch immediately and do not store; call list_videos or get_video again for a fresh URL when needed.",
"inputSchema": {
"properties": {
"group_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Group Id"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
}
},
"title": "list_videosArguments",
"type": "object"
},
"name": "list_videos",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "list_videosOutput",
"type": "object"
}
},
{
"description": "Find WHEN and WHERE something happens across your videos. Returns timestamped results ranked by relevance — use these timestamps as start/end in ask_video for focused analysis.\n\nThis is the recommended first step for most questions. Instead of asking ask_video about the entire video, search first to narrow down the relevant moments.\n\nEach result's 'video_url' is a short-lived HTTPS presigned URL (expires within hours) — fetch immediately and do not store; call search_videos or get_video again for a fresh URL when needed.\n\nRequires search_only or full pipeline.",
"inputSchema": {
"properties": {
"group_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Group Id"
},
"max_results": {
"default": 10,
"title": "Max Results",
"type": "integer"
},
"query": {
"title": "Query",
"type": "string"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"video_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Video Ids"
}
},
"required": [
"query"
],
"title": "search_videosArguments",
"type": "object"
},
"name": "search_videos",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "search_videosOutput",
"type": "object"
}
},
{
"description": "Detect objects in a video segment using text prompts. Describe what to look for and get per-frame detections with bounding boxes and confidence scores.\n\nPrompt tips:\n- Use broad, visual categories: 'animal', 'vehicle', 'person', 'text on screen'\n- Specific labels ('rabbit', 'Toyota') are less reliable — the detector matches visual patterns, not semantic concepts\n- Best for confirming whether a category of object appears in a time window, not for precise identification\n\nHow to pick a time range:\n- Use search_videos to find WHEN something appears, then pass those timestamps here\n- Use get_scenes to scan systematically — call segment_video once per scene (scenes typically fit in the 15s window)\n- Or pass any range you already know\n\nMaximum range is 15 seconds per call; for longer spans, make multiple calls with consecutive windows.\n\nDoes NOT require any feature indexing — works on any uploaded video.",
"inputSchema": {
"properties": {
"end": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "End"
},
"prompts": {
"items": {
"type": "string"
},
"title": "Prompts",
"type": "array"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"start": {
"title": "Start",
"type": "number"
},
"threshold": {
"default": 0.5,
"title": "Threshold",
"type": "number"
},
"video_id": {
"title": "Video Id",
"type": "string"
}
},
"required": [
"video_id",
"prompts",
"start"
],
"title": "segment_videoArguments",
"type": "object"
},
"name": "segment_video",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "segment_videoOutput",
"type": "object"
}
},
{
"description": "Start here. Get a compact overview of a video: metadata, which features are indexed, a transcript preview, and scene count. Use this to decide which tools to call next — then use segment_video to detect specific objects in time ranges of interest.",
"inputSchema": {
"properties": {
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"video_id": {
"title": "Video Id",
"type": "string"
}
},
"required": [
"video_id"
],
"title": "summarize_videoArguments",
"type": "object"
},
"name": "summarize_video",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "summarize_videoOutput",
"type": "object"
}
},
{
"description": "Update a video's display name, title, description, or move it to a different group. At least one field must be provided. To remove a video from its group, pass group_id as null.",
"inputSchema": {
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"group_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Group Id"
},
"move_group": {
"default": false,
"title": "Move Group",
"type": "boolean"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"video_id": {
"title": "Video Id",
"type": "string"
}
},
"required": [
"video_id"
],
"title": "update_videoArguments",
"type": "object"
},
"name": "update_video",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "update_videoOutput",
"type": "object"
}
},
{
"description": "Upload a video from a URL. Returns a video_id. Local file paths are not accepted; upload files outside the MCP server and pass a reachable video_url. The upload runs asynchronously — poll get_video until status is 'uploaded', then call index_video to enable search and analysis.",
"inputSchema": {
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"group_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Group Id"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"video_url": {
"title": "Video Url",
"type": "string"
}
},
"required": [
"video_url"
],
"title": "upload_videoArguments",
"type": "object"
},
"name": "upload_video",
"outputSchema": {
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "upload_videoOutput",
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:cc82fd0267b4c5329b47b47638b2650f14c11dd056132ae2f16412cc44cad59a | sha256sum