Server has 9 well-named tools with complete input schemas and descriptions. Naming follows verb_noun pattern (upload_video, get_video_*). Descriptions are present and contextual (avg ~120 chars), exceeding the 10-char minimum. All parameters have type definitions and descriptions. However, output schemas are not formally documented in the code, return types are inferred from Pydantic models (VideoInsights, VideoTranscript, etc.) but not visible in the tool registration. Error handling is minimal; no recovery guidance or actionable error messages. No tool annotations (readOnlyHint, destructiveHint). Parameter constraints (e.g., page_size 1-128, format enum) are documented in descriptions but not enforced via JSON Schema enums. Missing: per-parameter validation, error classification, and structured error responses.
Get video captions/subtitles in VTT, SRT, or other formats. Returns the caption file content as text.
Get the full raw Video Indexer JSON for a video. Warning: response can be very large (1MB+). Prefer get_video_insights, get_video_transcript, or get_video_timeline for structured access.
Get a compact summary of video insights: topics, keywords, brands, named people/locations, sentiments, emotions, speaker stats, and labels.
Get a video thumbnail or keyframe image as base64-encoded PNG. Use thumbnail IDs from get_video_timeline or get_video_index.
Get the visual timeline of a video: scenes broken into shots with keyframe thumbnail IDs. Use get_video_thumbnail to retrieve keyframe images.
Output schemas not formally documented. Return types (VideoInsights, VideoTranscript, VideoTimeline, etc.) are Pydantic models but not visible in tool registration. LLMs cannot plan downstream operations without knowing response structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). upload_video is destructive (WRITE risk) but not marked. Agents cannot distinguish safe reads from state-modifying calls.
Parameter constraints documented in descriptions but not enforced via JSON Schema. 'page_size (1-128)' and 'format: Vtt, Srt, Txt, ...' should be enums or min/max in schema. LLMs may pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Get the full transcript of a video with speaker identification and timestamps per utterance.
List videos in the Video Indexer account with pagination. Returns video IDs, names, states, and processing progress.
Search across all indexed videos by transcript text, OCR, keywords, topics, or other content. Returns matching videos with search hit details.
Upload a video to Azure Video Indexer for processing. Provide either a public URL or a local file path (not both). Returns the video ID for tracking indexing progress.
No error handling or recovery guidance. If upload_video fails or get_video_index returns 404, no actionable error message guides the LLM on next steps (e.g., 'Try list_videos() to find valid video IDs').
Large response warning in get_video_index (1MB+) but no pagination or result limiting. Agents may exhaust context window. Consider capping raw index size or offering a summary-only mode.