Skip to main content
Glama

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.

Python 3.10+ License: AGPL-3.0 MCP Server OpenAI-compatible

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 (vlearn review)

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: 60

Then ask your agent: "Analyze this YouTube video and list any conflicts: ".

Tool

Purpose

ingest_video(url, platform)

Fetch metadata and subtitles

analyze_video(video_id)

Start async analysis

get_job_status(job_id)

Poll job progress

get_report(run_id)

Read the Markdown report

get_conflicts(run_id)

List detected conflicts

read_frame_at(video_id, ts)

Extract a single frame on demand

submit_correction(...)

Submit a manual correction

list_videos(limit) / get_video(video_id)

Browse ingested videos

get_cost_summary(daily)

Cost ledger

import_trend_csv(path) / list_trend_top(n)

Trending-video workflow

preview_keyframe_selection(...)

Debug frame-level selection

preview_keyframe_selection_seek(...)

Debug seek-margin selection

arbitrate_evidence(...)

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 + SQLite

Design 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 curtain and 深紅色帷幕 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 Gemma
platform:
  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: false

CLI

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 20

Validation 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 subtitle = 0 fallback

May degrade to keyframe-only assertions

Short videos under 2 minutes

Tests the triage.min_duration_sec: 120 boundary

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=0 helps. 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 review to correct it; corrections persist across re-runs.

  • apply_corrections does plain substring replacement, and the assertions field 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 keyframes

Delete 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 -q
app/
├── 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.py

Roadmap

  • 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 tools
analyze_videoC

啟動異步分析,返回 job_id。

NameRequiredDescriptionDefault
profileNostandard
video_idYes

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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}]

NameRequiredDescriptionDefault
video_idYes
bundle_idYes
summariesYes
time_rangeYes

TDQS

C2.1/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose2/5

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.

Usage Guidelines2/5

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 保留雙版本。

NameRequiredDescriptionDefault
run_idYes
only_unresolvedNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness5/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

成本與預算餘量。

NameRequiredDescriptionDefault
dailyNo

TDQS

C2.1/5.0
Behavior1/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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。

NameRequiredDescriptionDefault
job_idYes

TDQS

D1.8/5.0
Behavior1/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines1/5

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 報告。

NameRequiredDescriptionDefault
run_idYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

視頻元數據 + 源片段統計。

NameRequiredDescriptionDefault
video_idYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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。

NameRequiredDescriptionDefault
pathNo

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

攝取元數據 + 字幕。

NameRequiredDescriptionDefault
urlYes
platformNoyoutube

TDQS

C2.3/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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 條。

NameRequiredDescriptionDefault
nNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

列出已攝取視頻。

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

預覽右邊界截斷結果(幀級精確,本地完整視頻場景)。

NameRequiredDescriptionDefault
fpsNo
durationYes
min_gap_secNo
scene_pointsYes
max_window_secNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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 場景)。

NameRequiredDescriptionDefault
durationYes
min_gap_secNo
scene_pointsYes
max_window_secNo
left_candidatesNo
right_margin_secNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.2/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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(默認)

NameRequiredDescriptionDefault
qualityNo720p
video_idYes
timestampYes
include_imageNo

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

提交人工修正。

NameRequiredDescriptionDefault
run_idYes
new_valueYes
old_valueYes
user_noteNo
assertion_refYes

TDQS

D1.8/5.0
Behavior1/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

  1. 15 tool updatesv0.1.0
    • First observedanalyze_video
    • First observedarbitrate_evidence
    • First observedget_conflicts
    • First observedget_cost_summary
    • First observedget_job_status
    • First observedget_report
    • First observedget_video
    • First observedimport_trend_csv
    • First observedingest_video
    • First observedlist_trend_top
    • First observedlist_videos
    • First observedpreview_keyframe_selection
    • First observedpreview_keyframe_selection_seek
    • First observedread_frame_at
    • First observedsubmit_correction

TDQS

C2.7/5.0

Scored across 15 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers