crv-guide
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GEMINI_API_KEY | No | Model API key for Gemini. Required for watching new videos during the guide step. Add this to .env together with SECOND_LOOK_PROVIDER=gemini. One model key (OpenAI or Gemini) is required. | |
| OPENAI_API_KEY | No | Model API key for OpenAI (used by default, e.g. gpt-4.1-mini). Add this to .env. One model key (OpenAI or Gemini) is required. | |
| SECOND_LOOK_PROVIDER | No | Selects the model provider. Set to "gemini" to use GEMINI_API_KEY (e.g. `GEMINI_API_KEY + SECOND_LOOK_PROVIDER=gemini`); defaults to OpenAI when OPENAI_API_KEY is used. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| watch_videoA | Actually watch a video: download (URL) or read (local path), extract scene-aware deduplicated keyframes and a timestamped transcript, all locally. Returns the transcript plus the first batch of keyframes as images; use get_frames for more frames from the same video. Args: source: Video URL (YouTube, Instagram, ...) or a local file path. max_frames: How many keyframes to return inline (1-24, default 12). language: Transcript language hint, e.g. "auto", "en", "zh". transcribe: Set false to skip audio transcription (frames only). |
| get_framesA | Fetch more keyframes from a video already analysed with watch_video. Args: source: The same URL or path given to watch_video. start_index: 1-based index of the first frame to return. count: How many frames to return (1-24). |
| search_memoryA | Search everything crv has ever watched — spoken words and on-screen text — and get back the video, the timestamp and the matching line. Use this instead of watch_video when the answer might already be on disk, or when the question spans several videos ("which video mentioned pricing?"). Args: query: What to look for, in any language. limit: Max hits to return (1-50). kind: "any", "speech" (spoken), "onscreen" (text on screen), or "note". |
| list_watchedA | List every video crv has already watched, newest first, with how long it was and how many searchable lines it produced. Cheap way to check whether a video needs watching again before spending time on it. |
| get_transcriptA | Return the full timestamped transcript of a video already analysed, without re-sending any frames. Use when you only need the words (quoting, searching a long talk) and the images would waste context. Args: source: The same URL or path given to watch_video. max_chars: Truncate beyond this many characters (default 20000). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 5 tools
Each tool targets a distinct stage of the pipeline: watch_video ingests, get_transcript and get_frames retrieve derived artifacts, search_memory queries across the whole cache, and list_watched inventories what exists. The descriptions explicitly cross-reference each other and state when NOT to use a tool (e.g. search_memory over watch_video for already-seen content). The transcript-vs-frames split is clearly signposted by modality and context cost.
All five tools use a consistent snake_case verb_noun pattern (get_transcript, watch_video, get_frames, search_memory, list_watched). Retrieval verbs are used consistently: get_ for fetching an artifact from a known source, list_/search_ for exploration, watch_ for the domain's primary action.
Five tools is tightly scoped for a video-ingestion-and-recall server, with each tool earning its place as a distinct step (ingest, frames, transcript, search, inventory). No obvious redundancy or bloat.
The core lifecycle (watch, page frames, get text, search across videos, list cache) is fully covered with no dead ends for the main workflow. Minor gaps: search_memory accepts kind="note" but no tool can write notes, and there is no way to delete/forget or re-index a stale video other than re-watching it.