Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,537Letters: 14Defects: 1,323counted 4 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:cc82fd0267b4c5329b47b47638b2650f14c11dd056132ae2f16412cc44cad59a | sha256sum