vlearn
Summary: This vlearn MCP server lets an agent ingest, analyze, inspect, correct, and audit YouTube video reports with timestamped evidence and on-demand keyframes.
Ingest video metadata and subtitles from a URL/platform.
Start asynchronous video analysis and poll job status.
Retrieve Markdown reports and list detected conflicts, including unresolved ones.
Read a single frame at any timestamp, returning a VLM description/assertions and optionally the image.
Submit manual corrections to report assertions.
Browse ingested videos and inspect video metadata/source statistics.
Check cost and budget usage.
Import trending short-video CSV data and list top items by heat.
Preview keyframe selection for local frame-exact and remote seek-margin scenarios.
Manually arbitrate evidence for a specific bundle and time range.
Enables ingesting and analyzing YouTube videos by fetching metadata and subtitles, generating structured timestamped reports, detecting source conflicts, and extracting frames on demand for agent inspection.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vlearnAnalyze this YouTube video and give me a timestamped report: https://youtu.be/qp0HIF3SfI4"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
vlearn
Give image-capable LLMs the ability to understand video.
An open-source, model-agnostic MCP server that turns YouTube videos into structured, timestamped, verifiable reports. Use any OpenAI-compatible endpoint, hosted or local; run fully local for $0.
English · 繁體中文
Quickstart · MCP Server · How it works · Configuration · FAQ
vlearn is an open-source YouTube video summarizer and MCP server for people who want to check a summary, not just read it. It combines subtitles, keyframes and a vision-language model (VLM), local or hosted, into a report where every claim carries a timestamp and a source, and where disagreements between sources are flagged instead of silently merged.
It also lets AI agents (Claude Desktop, Hermes and other MCP clients) work with video even when their model can read images but has no native video input. Instead of a raw video, the agent gets a timestamped timeline of subtitles and keyframe descriptions, and can pull any single frame on demand.
Demo
🎬 Demo GIF coming soon.
$ vlearn ingest "https://youtube.com/watch?v=qp0HIF3SfI4" --platform youtube
{'video_id': 'qp0HIF3SfI4', 'title': 'How Great Leaders Inspire Action', 'duration': 1115.0, 'subtitle_segments': 43}
$ vlearn run qp0HIF3SfI4
{'run_id': 'run_abc123', 'bundles': 13, 'conflicts': 0, 'image_frames': 9, 'cost_usd': 0.0}
$ vlearn report run_abc123
# How Great Leaders Inspire Action | Simon Sinek | TED
## Core Content
### 00:45 – 02:14
- [official_subtitle] Why is Apple so innovative? ...
## Key Moments
### 09:45 – 11:14
- [name] Orville and Wilbur Wright
- [number] December 17th, 1903
- [number] 2.5%
- [color] deep red curtain
- [other] On-screen text: "Number of talks: 1"
...(abridged; every line carries its source tag and time range)
Related MCP server: YouTube MCP Server
Why vlearn?
Most YouTube summarizers return a paragraph you have to trust. vlearn is built around three ideas:
Verifiable. Every assertion is tagged with a timestamp and a source type (
official_subtitle,keyframe_ocr,keyframe_vlm,asr,danmaku). You can jump back to the evidence.Honest about conflicts. When the subtitles say one thing and a keyframe shows another, vlearn arbitrates by source reliability and, if unresolved, keeps both versions.
It looks at the video, not just the transcript. Keyframes are chosen by scene change and described by a VLM. The image pipeline is independent of subtitles, so silent videos work too.
Typical summarizer | vlearn | |
Output | Prose paragraph | Structured report with assertions |
Traceability | Usually none | Timestamp + source ref on every claim |
Source disagreement | Not surfaced | Detected, arbitrated, both versions kept |
Visual content | Often transcript only | Keyframes described by a VLM |
Where data goes | Usually a cloud service | Your machine (SQLite + files) |
Cost | API fees or subscription | $0 with local models |
Agent integration | Rarely | 15 MCP tools |
Corrections | Manual editing | Persistent correction loop ( |
Quickstart
Prerequisites: Python 3.10+, FFmpeg, Deno (needed by yt-dlp). An LLM endpoint (local server or hosted API) is optional but recommended. Frame analysis needs a vision-capable model; subtitle summaries work with text-only models.
# 1. Install
git clone https://github.com/MRSogzz/vlearn
cd vlearn
pip install -e ".[media]"
# 2. (Recommended) start a local LLM; any OpenAI-compatible server works
# Without one, vlearn falls back to regex extraction (lower quality, still free)
llama-server -m models/gemma-4-e4b.gguf --port 8080
# 3. Analyze a video
python -m app ingest "https://youtube.com/watch?v=qp0HIF3SfI4" --platform youtube
python -m app run qp0HIF3SfI4
python -m app report <run_id>Expect roughly 2–5 minutes for an 18-minute video, mostly LLM inference. No GPU is required, but one makes summaries much better.
MCP Server
vlearn exposes its pipeline through the Model Context Protocol, so an agent can ingest a video, read the report, inspect conflicts and request a single frame at any timestamp.
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"vlearn": {
"command": "/path/to/venv/bin/python",
"args": ["-m", "app.mcp.server"],
"env": {
"VLEARN_CONFIG": "/path/to/vlearn/config/default.yaml",
"PYTHONPATH": "/path/to/vlearn"
}
}
}
}Add to ~/.hermes/config.yaml:
mcp_servers:
vlearn:
command: "/path/to/venv/bin/python" # Windows: C:/path/to/venv/Scripts/python.exe
args: ["-m", "app.mcp.server"]
env:
VLEARN_CONFIG: "/path/to/vlearn/config/default.yaml"
PYTHONPATH: "/path/to/vlearn"
enabled: true
timeout: 600
connect_timeout: 60Then ask your agent: "Analyze this YouTube video and list any conflicts: ".
Tool | Purpose |
| Fetch metadata and subtitles |
| Start async analysis |
| Poll job progress |
| Read the Markdown report |
| List detected conflicts |
| Extract a single frame on demand |
| Submit a manual correction |
| Browse ingested videos |
| Cost ledger |
| Trending-video workflow |
| Debug frame-level selection |
| Debug seek-margin selection |
| Manual arbitration |
Resources: vlearn://videos/{video_id} (metadata JSON), vlearn://reports/{run_id} (full report)
Prompts: analyze_youtube(url), trend_digest()
How it works
YouTube URL
│
▼
INGEST metadata + subtitles (3-tier fallback: timedtext → yt-dlp → empty)
│
▼
ANALYZE ┌─ Subtitle pipeline: triage → window split → LLM summary
(orchestrator)├─ Image pipeline: probe → classify → scan → VLM description (independent of subtitles)
└─ Fusion: evidence bundles → consistency check
→ arbitration → backtrace → final summary
│
▼
Structured Markdown report + SQLiteDesign decisions that matter:
Keyframes are fetched on demand, not by downloading the whole video. Remote videos use a seek-margin strategy; frame-exact selection is kept for locally downloaded files (
download_media: true).Right-boundary truncation. A keyframe window never reaches into the next scene.
Evidence bundles use bidirectional overlap, so a short window is not swallowed by a long one.
Reliability-weighted arbitration:
official_subtitle > keyframe_ocr > keyframe_vlm > asr > danmaku. Unresolved conflicts keep both versions.Semantic color normalization.
red curtainand深紅色帷幕count as consistent, but the report preserves the original wording.Local state. Everything lives in SQLite plus files under
out/. Inference runs wherever you point it, including fully local.
Configuration
Swap models by editing config/models.yaml; no code changes. Any OpenAI-compatible endpoint works. The keyframe_desc stage needs a vision-capable model; the other stages work with text-only models.
providers:
local:
base_url: http://127.0.0.1:8080/v1
api_key: sk-local
models:
gemma:
role: cheap
supports_vision: true
input_usd: 0.0
output_usd: 0.0
routing:
triage: {provider: local, model: gemma}
local_summary: {provider: local, model: gemma}
keyframe_desc: {provider: local, model: gemma}providers:
local-qwen:
base_url: http://127.0.0.1:11434/v1
api_key: sk-local
models:
qwen3-27b:
role: cheap
supports_vision: false
input_usd: 0.0
output_usd: 0.0
routing:
triage: {provider: local-qwen, model: qwen3-27b}
local_summary: {provider: local-qwen, model: qwen3-27b}
keyframe_desc: {provider: local, model: gemma} # vision stays on Gemmaplatform:
primary: youtube
youtube:
download_media: false # true = full download
bilibili:
enabled: false
keyframes:
scene_threshold: 0.35 # FFmpeg scene-detection threshold
max_window_sec: 8.0 # max window for the last change point
min_gap_sec: 1.0 # merge dense change points
fixed_interval_sec: 90 # fallback sampling interval
max_frames_per_10min: 30 # frame budget
vision:
policy: on_demand # always | on_demand | none
max_images_per_video: 25
cost:
daily_usd: 2.0
per_video_usd: 0.10
on_exceed: degrade # degrade | stop
publish:
comment_enabled: falseCLI
vlearn ingest <url> --platform youtube # metadata + subtitles
vlearn run <video_id> --profile standard # full pipeline
vlearn report <run_id> --format md # read the report
vlearn review <run_id> --ref <assertion_ref> --old "old" --new "new" --note "why"
vlearn cost --daily # cost ledger
vlearn videos --limit 20
vlearn trend import <csv> && vlearn trend run --top 20Validation status
vlearn has been spot-checked on three videos of different types. We sampled 30 assertions from each video (90 in total) and checked every one against its source. All checks used a local 4B model, and other models have not been measured. The sample is small, so read this as a smoke test rather than a benchmark.
Metric | Result |
Sampled assertions | 90 (30 per video), each checked individually |
Traceability (timestamp + source ref resolves to evidence) | 100% (90/90) |
Wrong assertions in raw VLM output | 3/90 (3.3%; 95% confidence interval roughly 1% to 9%) |
Wrong assertions that reached the final summary | None observed (95% upper bound about 4%) |
Assertions drawn from the chart and case-study images in the sample | All checked correct (only four chart in the sample) |
About the 3 wrong assertions: each was a case where the VLM described the same frame in two conflicting ways. For example, one description said the speaker held a green microphone and another said a black microphone, while the frame actually shows a black microphone with a green label. Conflict detection flagged the disagreement, the pipeline excluded those assertions, and none of them was used in the summary.
Video types covered
Type | Length | Characteristics |
Humorous conference talk | about 6 min | Single-shot speaker, large projected screen, little on-screen text |
Formal business talk | about 18 min | Single-shot speaker, case-study images, one chart |
Music video | about 3.5 min | Multi-scene editing, lyric subtitles, stage and dance footage |
Together these span very dense to very sparse subtitles, nearly static to heavily edited footage, a 5x range in length, two talk styles, and repeated-text subtitles.
Not yet tested
Content type | Why it matters | Possible risk (unverified) |
Tutorials, slide decks, code demos, screen recordings | Where VLM hallucination is likely worst | A small VLM may invent chart numbers or code. Only one chart was tested, so evidence is thin |
Videos without subtitles (silent demos, dance) | Exercises the | May degrade to keyframe-only assertions |
Short videos under 2 minutes | Tests the | May be judged "not worth reading" and get only a light summary |
Non-English videos | Subtitle language coverage | CJK-weighted assertion filtering is only tuned for Chinese and English |
Interviews and podcasts (fixed camera, faces) | Redundant frames | May spend frame budget on frames with little information |
News and documentaries (mixed footage) | Subtitles and visuals are tightly linked | May trigger more conflicts |
Livestream recordings (over 1 hour) | Very long inputs | Many windows, so LLM call cost may grow quickly |
Help wanted: if you try vlearn on one of these types, please open an issue with the video type, what worked and what did not. Each report directly improves the roadmap.
Known limitations
Small local models (e.g. a 4B VLM) vary run to run: on the same video, assertion counts can range from about 16 to 48. A larger model or
temperature=0helps. Differences between different videos are normal and unrelated.Conflict detection catches inconsistent errors. A mistake the VLM makes the same way every time would not be flagged.
VLMs can over-interpret frames (for example "dark red" for "red"). Use
vlearn reviewto correct it; corrections persist across re-runs.apply_correctionsdoes plain substring replacement, and theassertionsfield does not reflect corrections.The video-type classifier may misjudge some talks (e.g. TED) as slide presentations.
CLI/MCP only; there is no web UI yet. Live streams are not supported.
FAQ
No. Without a local LLM, vlearn falls back to regex-based assertion extraction (lower quality, zero cost). Any OpenAI-compatible runtime works: llama.cpp, Ollama, LM Studio, vLLM.
Yes, edit config/models.yaml. Any OpenAI-compatible endpoint works, for example a hosted model such as GPT-4o or DeepSeek, or a local Qwen3 27B (text-only, so pair it with a vision model for frames). Claude and other APIs that are not OpenAI-format can be used through a compatible gateway such as OpenRouter or LiteLLM. Only a local 4B model has been validated so far (see Validation status).
Mostly. After a video has been ingested, vlearn run works fully offline. Only the first ingest needs the network, and not even that if subtitles are cached in cache/subs/<video_id>/.
Subtitles: any language YouTube provides. Assertion extraction works best in English and Chinese; other languages fall back to regex. Output language depends on the model you route to.
Two reasons: small VLMs over-interpret, and conflict detection normalizes deep red curtain, red curtain and 深紅色帷幕 to the same value while keeping the original text in the report. Fix wording with vlearn review.
Create an adapter in app/adapters/ and register it in AppContext.from_config() (app/context.py). The pipeline is platform-agnostic.
from app.adapters.base import PlatformAdapter, VideoMeta
class VimeoAdapter(PlatformAdapter):
name = "vimeo"
capabilities = {"metadata", "subtitles"}
def get_metadata(self, url: str) -> VideoMeta: ...
def get_subtitles(self, meta: VideoMeta) -> list[dict]: ...out/
├── vlearn.db # SQLite (all structured data)
├── run_xxx.md # Markdown reports
└── frames/<video_id>/ # Extracted keyframesDelete out/ to start fresh. vlearn.db can be backed up on its own.
When the source-reliability ranking can settle a disagreement, vlearn arbitrates and uses the more reliable source. When it cannot, vlearn keeps both versions, marks the conflict unresolved, and does not state either one as fact in the summary; you can inspect them with get_conflicts(run_id). The cost is that a report can contain fewer assertions than the raw model output. That trade is deliberate: a missing assertion is easier to live with than a wrong one that nobody can see.
No. vlearn is a local-first tool for technical users, which keeps videos on your machine and costs at zero. A multi-user web service would need auth, queues, storage isolation and cost attribution, which is a different product. The AGPL license lets you build one.
Development
pytest -qapp/
├── adapters/ platform adapters
├── keyframes/ keyframe selection (selector.py: right-boundary truncation)
├── summarize/ local LLM summarization (5-level JSON rescue)
├── evidence/ bundling, consistency, arbitration
├── fusion/ interleaved context + final summary
├── cost/ ledger, budget, router
├── storage/ SQLite + cache
├── mcp/ MCP server
└── orchestrator.pyRoadmap
M0 Subtitle extraction, keyframes, local summaries, Markdown report
M1 Triage, right-boundary truncation, evidence bundling, cost ledger
M2 Conflict detection, arbitration, image pipeline, manual corrections
M3 OCR (PaddleOCR), Bilibili adapter, trending-CSV workflow
M4 FastAPI layer + web UI
Docker image
Contributing
PRs are welcome; please open an issue first for major changes. Every new behavior needs a test.
git checkout -b feature/my-feature
pytest -q
git commit -m "feat: my feature"Disclaimer
vlearn uses yt-dlp to fetch subtitles and frames; it does not use YouTube's official API. It is intended for personal learning and research. You are responsible for complying with the terms of service of the platforms you use and with copyright law in your jurisdiction. The software is provided as-is, without warranty.
License
AGPL-3.0. Network services built on vlearn must publish their source. For commercial licensing: <MRSogzz@gmail.com>
Acknowledgments
yt-dlp · llama.cpp · MCP Python SDK · pydantic
If vlearn saves you time, a ⭐ helps others find it.
Available Tools
15 toolsanalyze_videoC
啟動異步分析,返回 job_id。
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | standard | |
| video_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose two useful traits: the operation is asynchronous and it returns a job_id rather than results. However, it says nothing about expected duration, whether analysis consumes billed resources (a get_cost_summary sibling exists), whether re-analysis overwrites prior results, or what job states to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded clause with no filler, so nothing is wasted, but the brevity crosses into under-specification rather than economy. The one sentence that exists is well-ordered (action then result).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async mutation-style tool with zero annotations, no output schema, and 0% schema coverage on two parameters, the description leaves out the polling workflow, the meaning of profile, and any expectation about results. What is present is correct but far from sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, so the description must compensate and does not: video_id is only inferable from the tool name, and the 'profile' parameter with its 'standard' default is completely unexplained — an agent cannot know what alternative profiles exist or what they change.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('啟動異步分析') and even the return value (job_id), which lets an agent distinguish it from read-only siblings like get_video or list_videos. It never says what the analysis produces or how it differs from sibling get_report/get_conflicts, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus ingest_video, get_video, or get_report, and no mention of the obvious workflow partner get_job_status for polling the returned job_id. The agent must infer the entire usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
arbitrate_evidenceC
對給定證據執行仲裁。summaries: [{source_type, confidence, quality_flags}]
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes | ||
| bundle_id | Yes | ||
| summaries | Yes | ||
| time_range | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses nothing about side effects, persistence, whether arbitration requires prior bundles, permission needs, or what the result looks like — for an action-named tool, that is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses with no filler and the core purpose up front. However, brevity here reads as under-specification rather than efficiency — the second fragment is a bare schema fragment that doesn't form a complete thought.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four required parameters at 0% schema coverage, no annotations, and no output schema, the description should carry most of the explanatory weight, but it explains only one parameter's inner shape and nothing about behavior or output. An agent could not confidently call this tool from the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description only partially compensates: it names the fields of the summaries array (source_type, confidence, quality_flags), which is useful, but leaves bundle_id, video_id, and time_range (including the expected time unit) completely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"對給定證據執行仲裁" restates the tool name (arbitrate_evidence) without adding specificity: it never says what arbitration produces, whether it resolves conflicts, merges summaries, or returns a verdict. Nothing distinguishes it from siblings like get_conflicts or get_report, which an agent would need to choose among.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus the alternatives (get_conflicts, get_report, analyze_video). The only hint is the summaries input shape, which implies the tool consumes prior analysis output, but that is inference, not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conflictsC
衝突列表;unresolved 保留雙版本。
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| only_unresolved | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 『unresolved 保留雙版本』 hints that unresolved entries return both original and new values, which is useful, but it is ambiguous and says nothing about read-only safety, ordering, volume, or what a 'conflict' object is. Read-only behavior can only be guessed from the 'get_' prefix.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses with no filler, and the resource is front-loaded. However, the brevity here is under-specification rather than efficiency — the space saved could have carried the run_id requirement or a hint about arbitrate_evidence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Placeholder
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so both parameters are undocumented in the schema. The description gestures at the unresolved concept (mapping loosely to only_unresolved) but never defines it or its default semantics, and the required run_id parameter is not mentioned at all. This does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
『衝突列表』 names the resource returned but supplies no verb and no scope (per-run? per-workspace?), so the agent must infer it retrieves conflicts. The second clause 『unresolved 保留雙版本』 is a cryptic behavioral remark rather than a purpose statement. It is distinguishable from siblings only because no other tool mentions conflicts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus alternatives — most notably arbitrate_evidence, which is presumably the tool that resolves conflicts found here. No prerequisites, no mention that a run_id must come from a prior analysis job. Usage is left entirely to inference from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cost_summaryC
成本與預算餘量。
| Name | Required | Description | Default |
|---|---|---|---|
| daily | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about read-only status, permissions, aggregation behavior, or what is actually returned. Two noun phrases give the agent zero behavioral context for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is short but that is under-specification rather than conciseness: it is a title-like fragment with no leading verb or scope statement. Shortness here costs information rather than saving it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and an undocumented parameter, the description should at least explain the return shape and the daily flag's effect. It covers neither, so an agent cannot call this tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'daily' (boolean, default true) has 0% schema description coverage and is never mentioned in the description. Because coverage is far below 50%, the description needed to explain what the flag toggles (per-day breakdown vs. aggregate to a period), and it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resources involved (cost and remaining budget), which goes slightly beyond the name by adding the budget-remaining notion, but it contains no verb and no scope. It doesn't distinguish this from siblings like get_report, so an agent still has to guess that this is a read-only cost/budget summary tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative-tool guidance anywhere in the description. With get_report as a sibling, the absence of any routing hint leaves selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_job_statusD
輪詢 job。
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses nothing: not the possible status values, whether the call blocks, what happens for an unknown or expired job_id, or any rate limits on polling. Four characters against zero annotation coverage is a serious gap for a polling endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short, but short here reflects under-specification rather than economy; there is no front-loaded statement of what is returned or when to call. Brevity without required content does not earn conciseness credit.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% parameter coverage, the description is the only channel for this tool's semantics and it supplies none of them. An agent cannot tell what a successful response looks like or how to terminate a polling loop.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain job_id, and it does not — no format, no source (returned by which sibling), no error behavior for a missing job. The single required parameter is left entirely to inference from its name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"輪詢 job" names a verb (poll) and a resource (job), which is enough to know this retrieves status for an asynchronous job. However it adds nothing beyond the tool name get_job_status and does not differentiate it from any sibling, nor explain what a "job" refers to in this server.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this, how often to poll, whether to poll until a terminal state, or which sibling created the job in the first place. The word "輪詢" implies repetition but gives no interval, backoff, or termination condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reportC
讀取 Markdown 報告。
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. '讀取' implies read-only access, but the description says nothing about what happens with an unknown run_id, whether the report must already exist, what format or size the Markdown output has, or any auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence is efficient and front-loaded, but at this length the brevity reflects under-specification rather than economy — there is no wasted text, yet nothing extra is provided either.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a completely undocumented required parameter, the description leaves an agent without enough information to invoke the tool reliably. It should at minimum state where run_id comes from and that the result is Markdown text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain run_id at all — not where to obtain it (e.g., from get_job_status or analyze_video), nor its expected format. Only the parameter's self-descriptive name gives the agent any clue.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description '讀取 Markdown 報告' pairs a specific verb (讀取/read) with a specific resource (Markdown 報告), so the basic action is clear. However, it gives no differentiation from siblings such as get_conflicts, get_cost_summary, or get_job_status, which also retrieve results, so an agent cannot tell when this tool is the right one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, no prerequisites, and no exclusions. The agent must infer that this tool fetches a finished report after a run exists, without any confirmation in the text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_videoC
視頻元數據 + 源片段統計。
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. "get" weakly implies a read, but the description says nothing about behavior for an unknown or invalid video_id, about whether analysis must happen first, about latency, or about the shape of the response. For a tool with a 0% annotation coverage, this becomes a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short fragment that can be read at a glance, so there is no wasted text. However, its brevity reflects under-specification rather than disciplined conciseness, and it lacks essential routing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and an untouched parameter, the description is the only source of context, and it offers two noun phrases. The meaning of "源片段統計" is ambiguous, and nothing tells an agent what it needs in order to call the tool correctly or interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, video_id, exists, and schema description coverage is 0%, so the description is the only place where the parameter could be explained. It never mentions video_id, its accepted format, whether it is an internal ID or a path, or what happens if the ID is wrong. The parameter is nearly self-evident from its type, which saves this from a 1.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase "視頻元數據 + 源片段統計" names the resource (video) and the two things it returns: metadata and source-clip statistics. However, it is a noun-phrase label rather than a verb-led statement, and it gives no indication of how this differs from siblings such as list_videos or analyze_video. The purpose is inferable but not sharply defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no stated prerequisites, and no mention of any sibling tool. An agent cannot tell from this text whether to call get_video before analyze_video, or instead of list_videos.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_trend_csvC
導入短影音熱度 CSV。
| Name | Required | Description | Default |
|---|---|---|---|
| path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses nothing beyond the fact that a CSV is imported. It does not say whether existing trend data is overwritten or merged, what CSV columns/format are required, whether it errors on partial data, or what it returns — all critical for an unannotated mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no padding and the key noun front-loaded, so there is no waste. However, the brevity reflects under-specification rather than economy — nothing here earns its place because almost nothing is there.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, an undocumented optional parameter, and no explanation of import semantics, the definition is far too thin for a data-mutating ingest tool in a pipeline that has 14 siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions the single `path` parameter. The word 'CSV' weakly implies the parameter is a CSV file location, but there is no statement of whether it is a filesystem path, a URL, or what happens when it is omitted (default null).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb-resource pair ("import ... CSV") and narrows 'trend' to short-video popularity data, which is slightly more than the name alone. But it never says what the import does with the data or how it relates to the trend-reading sibling (list_trend_top), leaving the purpose at a vague one-liner.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this tool versus alternatives, no prerequisites, and no note about how imported data relates to list_trend_top or get_report. An agent can only infer usage from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_videoC
攝取元數據 + 字幕。
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| platform | No | youtube |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It hints at outputs (metadata and subtitles) but never discloses side effects — whether ingestion persists data, is idempotent, requires authentication, hits network/rate limits, or runs asynchronously (a get_job_status sibling makes that a live question).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a two-word fragment: technically concise with no filler, but so terse that it is under-specified rather than efficient. There is no front-loaded context to orient the agent before calling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% parameter coverage, this short phrase does not carry enough information for an agent to invoke the tool correctly — URL format, platform enum values, and the effects of ingestion are all missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for both parameters, yet it mentions neither 'url' nor 'platform'. It adds no meaning about accepted URL formats, default 'youtube' behavior, or what other platforms are valid.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase '攝取元數據 + 字幕' names a specific action (ingest) and specific resources (metadata, subtitles), so the agent understands the general intent. However, 'ingest' is ambiguous — it could mean downloading, parsing, or persisting — and there is no differentiation from siblings such as analyze_video or get_video, which plausibly also touch metadata/subtitles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this tool versus get_video, analyze_video, or list_videos, and no prerequisites or exclusions are stated. The agent must infer the usage context entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_trend_topC
按熱度返回前 n 條。
| Name | Required | Description | Default |
|---|---|---|---|
| n | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it says nothing about how 'heat' is computed, tie-breaking, stability of ranking, or truncation behavior at the boundary. Only the ordering criterion is named, with no explanation of it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no padding and the ordering criterion front-loaded, which is efficient — but its brevity comes at the cost of under-specification rather than tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but for a listing tool the description still fails to identify what entity is being ranked or how the ranking is derived — the two things an agent most needs before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only says 'N' with a default of 20, so the description must compensate. It does partially by clarifying that n is a count of top items and that ranking is by heat, but it omits bounds, maximums, and behavior for n larger than the available set.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('return') and quantifier ('top n by heat'), but the resource itself is left as an unqualified '條' (items/entries) — an agent cannot tell whether these are videos, trends, reports, or clips without guessing from the tool name. Adjacent siblings like list_videos make this ambiguity material.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to prefer this over list_videos or get_report, no prerequisites, and no note on what happens when fewer than n items exist. Usage is only inferrable from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_videosC
列出已攝取視頻。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing about ordering, pagination behavior, permissions, or what counts as "ingested" versus pending/failed jobs. The word "已攝取" is the only behavioral hint, and an output schema covers return values, but key traits such as result ordering and default page size remain unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short front-loaded sentence with zero waste, but it is under-specified rather than genuinely concise. There is room for a clause on scope and the limit parameter without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, but for a listing tool in a family containing get_video, ingest_video, and analyze_video, the description should at least say what the listing covers and how results are bounded. The Chinese-only text in an otherwise English toolset is also a discoverability cost.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description says nothing about the single `limit` parameter, not even its default of 20 or whether it truncates the result set. Since the schema supplies only a name and a type, the description should have compensated and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The single sentence states a clear verb+resource (list ingested videos) and the qualifier "已攝取" (ingested) implies a scope narrower than all videos. It offers no differentiation from siblings such as get_video, list_trend_top, or ingest_video, so an agent cannot tell from the description alone which listing tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of alternatives like get_video for a single item. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_keyframe_selectionC
預覽右邊界截斷結果(幀級精確,本地完整視頻場景)。
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | ||
| duration | Yes | ||
| min_gap_sec | No | ||
| scene_points | Yes | ||
| max_window_sec | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. '幀級精確' and '本地完整視頻場景' hint that it works frame-accurately on a local video without remote IO, but it never says whether anything is mutated, whether this is a pure read, or what resources it consumes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the key qualifier front-loaded. The brevity costs clarity (unexplained jargon like 右邊界截斷), but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, for a 5-parameter tool with zero schema documentation, no annotations, and an ambiguous preview/mutation status, the description leaves too much unknown for a correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters (fps, duration, min_gap_sec, scene_points, max_window_sec) and the description names none of them. '幀級精確' and '右邊界' only indirectly gesture at fps and the window/gap parameters, so the agent has essentially no parameter meaning beyond bare names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a verb (預覽/preview) and an object (右邊界截斷結果/right-boundary truncation result), but 'truncation result' never connects explicitly to keyframe selection, which only appears in the tool name. Against the sibling preview_keyframe_selection_seek there is no differentiation at all, leaving the agent to guess what is actually being previewed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to call this versus preview_keyframe_selection_seek or read_frame_at, and no prerequisites or exclusions. The word 預覽 implies a dry-run/preview usage, but nothing routes the agent between the near-identical siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_keyframe_selection_seekC
預覽 seek 版的 margin 截斷結果(遠程 seek 場景)。
| Name | Required | Description | Default |
|---|---|---|---|
| duration | Yes | ||
| min_gap_sec | No | ||
| scene_points | Yes | ||
| max_window_sec | No | ||
| left_candidates | No | ||
| right_margin_sec | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description should carry the full behavioral burden. '預覽' implies a read-only preview, but the definition does not state side effects, permissions, remote-seek implications, or anything about how the preview behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single compact sentence with no filler, but for a six-parameter tool it is too terse to be usefully front-loaded. Brevity comes at the cost of clarity rather than through efficient information packing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, zero schema descriptions, and no annotations, the description is far too sparse. The presence of an output schema reduces the need to explain return values, but essential information about parameter meaning and safe invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain any of the six parameters. The term 'margin' loosely hints at right_margin_sec, but scene_points, duration, min_gap_sec, max_window_sec, and left_candidates are entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('預覽' / preview) and a resource ('seek 版的 margin 截斷結果'), and adds the scenario '遠程 seek'. However, 'margin 截斷結果' is jargon-heavy and the distinction from the sibling preview_keyframe_selection is only implied by 'seek 版', not made explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '遠程 seek 場景' gives a minimal usage context, but it does not say when to choose this tool over preview_keyframe_selection, nor does it state prerequisites or exclusions. An agent must infer the selection rule from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_frame_atA
按需讀單幀,返回 [本地 VLM 描述 + 原始圖片] 雙重視角。
include_image 參數(支持字符串形式 "true"/"false"):
True(默認):返回 [TextContent, ImageContent]
False:只返回 [TextContent]——適合客戶端處理圖片有 bug 的場景
無論 include_image 是 True 還是 False,TextContent 裡始終包含 Qwen3-VL 27B 生成的完整畫面描述 + 提取的斷言。
只下載 timestamp ±2 秒的片段(~200KB),不整片下載
命中 cache/frames/{video_id}/{rounded_ts}_{quality}.jpg 則直接返回
quality 可選:240p | 360p | 720p(默認)
| Name | Required | Description | Default |
|---|---|---|---|
| quality | No | 720p | |
| video_id | Yes | ||
| timestamp | Yes | ||
| include_image | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses that only a timestamp ±2s segment (~200KB) is downloaded rather than the full video, that cache/frames/{video_id}/{rounded_ts}_{quality}.jpg short-circuits the request, and exactly what content blocks are returned in each mode. It omits error behavior and any permission or rate considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line, then organized into return-shape, include_image, and download/cache bullets. Slightly padded by the mid-sentence line break and a partly redundant restatement that TextContent always carries the description, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description correctly takes on return-value explanation (TextContent vs ImageContent, Qwen3-VL description plus extracted assertions) and cost/caching behavior. The remaining gap is undocumented video_id/timestamp semantics, which an agent must guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does for two of four params: include_image gets full semantics including the string-form "true"/"false" quirk, and quality gets its enum values (240p/360p/720p, default 720p) that the schema lacks. video_id format and timestamp units/range are never explained beyond the ±2s window hint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: read a single frame on demand at a timestamp, returning a dual VLM description + original image. That is clearly distinct from list_videos/get_video (whole-video metadata) and preview_keyframe_selection (selection preview), though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use rule for include_image (True by default; False for clients with image-rendering bugs), which is genuinely actionable. However, it gives no guidance on when to call this instead of get_video, preview_keyframe_selection, or analyze_video, leaving the sibling choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_correctionD
提交人工修正。
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| new_value | Yes | ||
| old_value | Yes | ||
| user_note | No | ||
| assertion_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden, and it discloses nothing: not whether the correction is persisted, whether it overwrites prior values, whether it requires review, or what permissions are needed. For a mutation-style tool with zero annotation coverage, a single four-character phrase is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but this is under-specification rather than conciseness; there is a single sentence fragment with no structure, no front-loaded scope, and no detail that would help an agent act.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, four of them required, no annotations, no output schema, and 0% schema description coverage, the description supplies essentially none of the context needed to invoke this tool safely or correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters (run_id, assertion_ref, old_value, new_value, user_note) and the description explains none of them. It does not clarify what an 'assertion_ref' points to, whether old_value must match the current value, or how user_note is used.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase '提交人工修正' gives a verb (submit) and an object (human correction), so the general action is identifiable. However, it does not say what a 'correction' applies to, what artifact is being corrected, or how it differs from siblings like arbitrate_evidence or get_conflicts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this tool, when not to, or which sibling to prefer for adjacent tasks such as arbitrating evidence or resolving conflicts. The agent must infer the workflow entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v0.1.0- First observed
analyze_video - First observed
arbitrate_evidence - First observed
get_conflicts - First observed
get_cost_summary - First observed
get_job_status - First observed
get_report - First observed
get_video - First observed
import_trend_csv - First observed
ingest_video - First observed
list_trend_top - First observed
list_videos - First observed
preview_keyframe_selection - First observed
preview_keyframe_selection_seek - First observed
read_frame_at - First observed
submit_correction
TDQS
Scored across 15 tools
Most tools map to a distinct resource plus action (ingest, analyze, poll job, report, conflicts, cost, correction). The only real overlap is preview_keyframe_selection vs. preview_keyframe_selection_seek, which are near-duplicates split by local vs. remote scenario; the descriptions differentiate them but the boundary requires reading carefully.
Names are overwhelmingly verb-first snake_case (get_report, list_videos, ingest_video, analyze_video, submit_correction, read_frame_at), giving a predictable pattern. Minor deviations: list_trend_top inverts the noun/qualifier order, and import_trend_csv embeds the object, but nothing is genuinely chaotic.
15 tools sit at the top of the well-scoped range and each covers a step in the ingest → analyze → poll → report → correct pipeline, plus trend and cost views. No tool looks redundant except the deliberate preview pair.
The core lifecycle (ingest, async analyze, job polling, report, conflicts, correction) is covered, so no dead end in the main flow. However there is no way to delete or re-ingest a video, list/cancel running jobs, or enumerate available reports, and trend data can only be imported and read as top-n with no query or update path.
Maintenance
Related MCP Connectors
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
YouTube transcripts, search, channel/playlist listings and upload tracking for AI agents.
YouTube transcripts, search, channels, playlists and bulk transcript jobs for AI agents. 14 tools.
Build, run, schedule, and publish AI video pipelines to YouTube and TikTok from any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceFetches YouTube video transcripts with timestamps and provides them to LLM agents via MCP, enabling natural language access to video content.91 npm4MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI models to interact with YouTube content through 18 MCP tools for videos, transcripts, channels, and playlists.16 npm-
- AlicenseNot gradedqualityFmaintenanceGives MCP clients access to YouTube video transcripts and metadata. It lets AI agents read and summarize video content from a URL.7 npmMIT
- AlicenseBqualityBmaintenanceEnables AI agents to control a YouTube channel end-to-end by uploading videos, editing metadata, managing playlists, moderating comments, and reading analytics through MCP tools.20MIT