Skip to main content
Glama

Media Downloader

CLI or API | MCP

PyPI - Version MCP Server PyPI - Downloads GitHub Repo stars GitHub forks GitHub contributors PyPI - License GitHub GitHub last commit (by committer) GitHub pull requests GitHub closed pull requests GitHub issues GitHub top language GitHub language count GitHub repo size GitHub repo file count (file type) PyPI - Wheel PyPI - Implementation

Version: 4.4.5

Documentation — Installation, deployment, and usage across the CLI, Python API, MCP, and A2A agent interfaces are maintained in the official documentation.


Related MCP server: media-downloader

Overview

Media Downloader is a production-grade Agent and Model Context Protocol (MCP) server designed to interface directly with Download audio/videos from the internet! Host an MCP Server for Agentic AI to download videos!.


Key Features

  • Consolidated Action-Routed MCP Tools: Minimizes token overhead and eliminates tool bloat in LLM contexts by grouping methods into optimized, togglable tool modules.

  • Enterprise-Grade Security: Complete support for Eunomia policies, OIDC token delegation, and granular execution context tracking.

  • Integrated Graph Agent: Built-in Pydantic AI agent supporting the Agent Control Protocol (ACP) and standard Web interfaces (AG-UI).

  • Native Telemetry & Tracing: Out-of-the-box OpenTelemetry exports and native Langfuse tracing.


CLI or API

This agent wraps the Download audio/videos from the internet! Host an MCP Server for Agentic AI to download videos! API. The operator can interact with it programmatically or via its integrated execution entrypoints.

Detailed instructions on how to use the underlying API wrappers, extended schema bindings, and developer SDK references are maintained in docs/index.md.


MCP

This server use dynamic Action-Routed tools to optimize token overhead and maximize IDE compatibility.

Available MCP Tools

Condensed action-routed tools (MCP_TOOL_MODE=condensed)

MCP Tool

Toggle Env Var

Description

build_watch_skill

—

Write a video-built skill, or append another video's findings to one.

download_media

—

Download video or audio from supported sites (YouTube, Rumble, etc.).

list_watch_skills

—

List video-built skills under a root and the videos each already has.

watch_media

—

Watch a video: download it with captions and extract key frames.

Verbose 1:1 API-mapped tools (MCP_TOOL_MODE=verbose or both)

MCP Tool

Toggle Env Var

Description

media_downloader_download_all

MEDIA_DOWNLOADERTOOL

Invoke the download_all operation.

media_downloader_download_video

MEDIA_DOWNLOADERTOOL

Invoke the download_video operation.

media_downloader_get_channel_videos

MEDIA_DOWNLOADERTOOL

Invoke the get_channel_videos operation.

media_downloader_open_file

MEDIA_DOWNLOADERTOOL

Invoke the open_file operation.

media_downloader_progress_hook

MEDIA_DOWNLOADERTOOL

Invoke the progress_hook operation.

media_downloader_set_progress_callback

MEDIA_DOWNLOADERTOOL

Invoke the set_progress_callback operation.

media_downloader_watch

MEDIA_DOWNLOADERTOOL

Download a video with its captions and extract scene-change key frames.

4 action-routed tool(s) · 7 verbose 1:1 tool(s). Each is enabled unless its <DOMAIN>TOOL toggle is set false; MCP_TOOL_MODE selects the surface (intent default — the six verb-tools, granular set loaded on demand · condensed action-routed · verbose 1:1 · both). Auto-generated — do not edit.

Detailed tool schemas, parameter shapes, and validation constraints are preserved in docs/usage.md.

Dynamic Tool Selection & Visibility

This MCP server supports dynamic toolset selection and visibility filtering at runtime. This allows the operator to restrict the set of exposed tools to prevent blowing up the LLM's context window.

The operator can configure tool filtering via multiple input channels:

  • CLI Arguments: Pass --tools or --toolsets (or their disabled counterparts --disabled-tools and --disabled-toolsets) during startup.

  • Environment Variables: Define standard environment variables:

    • MCP_ENABLED_TOOLS / MCP_DISABLED_TOOLS

    • MCP_ENABLED_TAGS / MCP_DISABLED_TAGS

  • HTTP SSE Request Headers: Pass custom headers during transport initialization:

    • x-mcp-enabled-tools / x-mcp-disabled-tools

    • x-mcp-enabled-tags / x-mcp-disabled-tags

  • HTTP SSE Request Query Parameters: Append query parameters directly to the operator's transport connection URL:

    • ?tools=tool1,tool2

    • ?tags=tag1

When query strings or parameters are supplied, an LLM-free Knowledge Graph resolution layer (using DynamicToolOrchestrator) matches query intents against known tool tags, names, or descriptions, with safe fallback and automated 24-hour background cache refreshing.


MCP Configuration Examples

Install the connector-focused [mcp] extra. Examples use media-downloader[mcp] to add FastMCP / FastAPI through scion-sdk; the required Scion SDK core still carries epistemic-graph[full]. The [agent-runtime] extra additionally enables model orchestration.

stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)

{
  "mcpServers": {
    "media-downloader-mcp": {
      "command": "uvx",
      "args": [
        "--from",
        "media-downloader[mcp]",
        "media-downloader-mcp"
      ],
      "env": {
        "MCP_TOOL_MODE": "intent",
        "MEDIA_DOWNLOADER_ALLOW_PRIVATE_HOSTS": "media.internal.example",
        "MEDIA_DOWNLOADER_MAX_WORKERS": "4",
        "MEDIA_DOWNLOADER_OUTPUT_ROOT": "/data/media",
        "WORKSPACE_PATH": "workspace"
      }
    }
  }
}

Runtime references require an alias-aware launcher such as Arbora. Other launchers must omit those entries and inject the resolved values through their own runtime secret boundary.

Streamable-HTTP Transport (networked / production)

{
  "mcpServers": {
    "media-downloader-mcp": {
      "command": "uvx",
      "args": [
        "--from",
        "media-downloader[mcp]",
        "media-downloader-mcp",
        "--transport",
        "streamable-http",
        "--port",
        "8000"
      ],
      "env": {
        "TRANSPORT": "streamable-http",
        "HOST": "127.0.0.1",
        "PORT": "8000",
        "MCP_TOOL_MODE": "intent",
        "MEDIA_DOWNLOADER_ALLOW_PRIVATE_HOSTS": "media.internal.example",
        "MEDIA_DOWNLOADER_MAX_WORKERS": "4",
        "MEDIA_DOWNLOADER_OUTPUT_ROOT": "/data/media",
        "WORKSPACE_PATH": "workspace"
      }
    }
  }
}

Alternatively, connect to a pre-deployed Streamable-HTTP instance by url:

{
  "mcpServers": {
    "media-downloader-mcp": {
      "url": "http://localhost:8000/media-downloader-mcp/mcp"
    }
  }
}

Run a reviewed container image as a least-privilege stdio child (no listener or published port):

docker run -i --rm \
  --read-only \
  --cap-drop=ALL \
  --security-opt=no-new-privileges \
  --pids-limit=256 \
  --tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
  -e TRANSPORT=stdio \
  -e MCP_TOOL_MODE=intent \
  -e MEDIA_DOWNLOADER_ALLOW_PRIVATE_HOSTS=media.internal.example \
  -e MEDIA_DOWNLOADER_MAX_WORKERS=4 \
  -e MEDIA_DOWNLOADER_OUTPUT_ROOT=/data/media \
  -e WORKSPACE_PATH=workspace \
  registry.example.invalid/media-downloader@sha256:<digest> media-downloader-mcp

For containerized network HTTP, supply an authenticated TLS ingress (or direct server TLS), exact MCP_ALLOWED_HOSTS, and an exact trusted-proxy CIDR policy through the operator-owned deployment profile. The generator does not emit an unauthenticated non-loopback listener.

Auto-generated from the code-read env surface (MCP_TOOL_MODE + package vars) — do not edit.

Additional Deployment Options

media-downloader can run as a local stdio process or container, or behind a remote network boundary. The Deployment guide carries the detailed transport contract.

  • Local container — launch a reviewed immutable image as a least-privilege stdio child with no listener or published port.

  • Remote URL — connect through an operator-supplied authenticated HTTPS ingress. Keep its URL, outbound identity references, trust profile, and exact MCP_ALLOWED_HOSTS in AgentConfig.

Agent

This repository features a fully integrated Pydantic AI Graph Agent. It communicates over the Agent Control Protocol (ACP) and interacts smoothly with the Agent Web UI (AG-UI) and Terminal interface.

Running the Agent CLI

To start the interactive command-line agent:

# Run the agent server
media-downloader-agent --provider openai --model-id gpt-4o

Docker Compose Orchestration

version: '3.8'

services:
  media-downloader-mcp:
    image: example/media-downloader@sha256:<digest>
    container_name: media-downloader-mcp
    hostname: media-downloader-mcp
    restart: always
    env_file:
      - ../.env
    environment:
      - PYTHONUNBUFFERED=1
      - HOST=0.0.0.0
      - PORT=8000
      - TRANSPORT=streamable-http
    ports:
      - "8000:8000"
    healthcheck:
      test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

    image: example/media-downloader@sha256:<digest>
    container_name: media-downloader-agent
    hostname: media-downloader-agent
    restart: always
    depends_on:
      - media-downloader-mcp
    env_file:
      - ../.env
    command: [ "media-downloader-agent" ]
    environment:
      - PYTHONUNBUFFERED=1
      - HOST=0.0.0.0
      - PORT=9000
      - MCP_URL=http://media-downloader-mcp:8000/mcp
      - PROVIDER=${PROVIDER:-openai}
      - MODEL_ID=${MODEL_ID:-gpt-4o}
      - ENABLE_WEB_UI=True
      - ENABLE_OTEL=True
    ports:
      - "9000:9000"
    healthcheck:
      test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:9000/health')"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

Detailed graph node architecture explanations, custom skill configurations, and agentic trace guides are available in docs/deployment.md.


Security & Governance

Built directly upon the enterprise-ready scion-sdk core, standard security parameters are fully supported:

Access Control & Policy Enforcement

  • Eunomia Policies: Fine-grained, policy-driven tool authorization. Supports none, local embedded (mcp_policies.json), or centralized remote modes.

  • OIDC Token Delegation: Compliant with RFC 8693 token exchange for flowing authenticating user credentials from Web UI / ACP → Agent → MCP.

  • Scoped Credentials: Execution context runs restricted to the specific caller identity.

Runtime Security Grid

Feature

Feature

Enablement

Tool Guard

Sensitivity inspection with human-in-the-loop validation

Enabled by default

Prompt Injection Defense

Input scanning, repetition monitoring, and recursive loop blocks

Enabled by default

Context Safety Guard

Stuck-loop detectors and contextual overflow preemptive alerts

Enabled by default


Environment Variables

Package environment variables

Variable

Example

Description

HOST

0.0.0.0

PORT

8000

TRANSPORT

stdio

options: stdio, streamable-http, sse

ENABLE_OTEL

True

OTEL_EXPORTER_OTLP_ENDPOINT

http://localhost:8080/api/public/otel

OTEL_EXPORTER_OTLP_PUBLIC_KEY_REF

pk-...

OTEL_EXPORTER_OTLP_SECRET_KEY_REF

sk-...

OTEL_EXPORTER_OTLP_PROTOCOL

http/protobuf

EUNOMIA_TYPE

none

options: none, embedded, remote

EUNOMIA_POLICY_FILE

mcp_policies.json

EUNOMIA_REMOTE_URL

http://eunomia-server:8000

MEDIA_DOWNLOADER_MCP_IMAGE

knucklessg1/media-downloader@sha256:<digest>

Required by the hardened compose profiles — no floating tag is assumed. Point these at an immutable digest of a reviewed image before running docker compose up.

MEDIA_DOWNLOADER_AGENT_IMAGE

knucklessg1/media-downloader@sha256:<digest>

MEDIA_DOWNLOADER_OUTPUT_ROOT

/data/media

Every download is written beneath this root; a path that escapes it is rejected. Falls back to WORKSPACE_PATH, then ~/Downloads.

WORKSPACE_PATH

workspace

MEDIA_DOWNLOADER_ALLOW_PRIVATE_HOSTS

media.internal.example

Exact hostnames allowed to resolve to a private address. Downloads are restricted to publicly routable hosts otherwise; no wildcards are accepted.

MEDIA_DOWNLOADER_MAX_WORKERS

4

Parallel download workers, clamped to 1-4.

Inherited scion-sdk variables (apply to every connector)

Variable

Example

Description

MCP_TOOL_MODE

intent

Tool surface: intent | condensed | verbose | both

MCP_ENABLED_TOOLS

—

Comma-separated tool allow-list

MCP_DISABLED_TOOLS

—

Comma-separated tool deny-list

MCP_ENABLED_TAGS

—

Comma-separated tag allow-list

MCP_DISABLED_TAGS

—

Comma-separated tag deny-list

MCP_CLIENT_AUTH

—

Outbound MCP child auth: oidc-client-credentials | basic | none

OIDC_CLIENT_ID

—

OIDC client id (service-account auth)

OIDC_CLIENT_SECRET_REF

secret://identity/oidc-client-secret

Runtime secret reference for the OIDC service account

MCP_BASIC_AUTH_USERNAME

—

HTTP Basic username (MCP_CLIENT_AUTH=basic)

MCP_BASIC_AUTH_PASSWORD_REF

secret://identity/mcp-basic-password

Runtime secret reference for HTTP Basic auth (MCP_CLIENT_AUTH=basic)

DEBUG

False

Verbose logging

PYTHONUNBUFFERED

1

Unbuffered stdout (recommended in containers)

MCP_URL

http://localhost:8000/mcp

URL of the MCP server the agent connects to

PROVIDER

—

Operator-configured LLM provider for the agent

MODEL_ID

—

Operator-configured model id for the agent

ENABLE_WEB_UI

True

Serve the AG-UI web interface

17 package + 16 inherited variable(s). Auto-generated from .env.example + the shared scion-sdk set — do not edit.

Every variable the server reads. A local template is supplied inside .env.example — copy it to .env and adjust as needed.

MCP server / transport

Variable

Description

Default

TRANSPORT

stdio, streamable-http, or sse

stdio

HOST

Bind host (HTTP transports)

0.0.0.0

PORT

Bind port (HTTP transports)

8000

MCP_TOOL_MODE

Tool surface: condensed, verbose, or both

condensed

MCP_ENABLED_TOOLS / MCP_DISABLED_TOOLS

Comma-separated tool allow/deny list

—

MCP_ENABLED_TAGS / MCP_DISABLED_TAGS

Comma-separated tag allow/deny list

—

PYTHONUNBUFFERED

Unbuffered stdout (recommended in containers)

1

Telemetry & governance

Variable

Description

Default

ENABLE_OTEL

Enable OpenTelemetry export

True

OTEL_EXPORTER_OTLP_ENDPOINT

OTLP collector endpoint

—

OTEL_EXPORTER_OTLP_PUBLIC_KEY / OTEL_EXPORTER_OTLP_SECRET_KEY

OTLP auth keys

—

OTEL_EXPORTER_OTLP_PROTOCOL

OTLP protocol (e.g. http/protobuf)

—

EUNOMIA_TYPE

Authorization mode: none, embedded, remote

none

EUNOMIA_POLICY_FILE

Embedded policy file

mcp_policies.json

EUNOMIA_REMOTE_URL

Remote Eunomia server URL

—

Agent CLI (full [agent] runtime only)

Variable

Description

Default

MCP_URL

URL of the MCP server the agent connects to

http://localhost:8000/mcp

PROVIDER

LLM provider (e.g. openai)

openai

MODEL_ID

Model id (e.g. gpt-4o)

gpt-4o

ENABLE_WEB_UI

Serve the AG-UI web interface

True


Installation

Pick the extra that matches what the operator want to run:

Extra

Installs

Use when

media-downloader[mcp]

Connector-focused MCP server (scion-sdk — FastMCP/FastAPI + epistemic-graph[full])

The operator only run the MCP server (smallest install / image)

media-downloader[all]

Everything (mcp + agent + logfire)

Development / both surfaces

# Connector-focused MCP server (includes the shared graph engine)
uv pip install "media-downloader[mcp]"

# Agent runtime (adds model orchestration to the shared graph engine)

# Everything (development)
uv pip install "media-downloader[all]"      # or: python -m pip install "media-downloader[all]"

Container images (:mcp)

One multi-stage docker/Dockerfile builds the MCP-only image (--target mcp):

Image tag

Build target

Contents

Entrypoint

knucklessg1/media-downloader:mcp

--target mcp

media-downloader[mcp] — connector-focused, includes epistemic-graph[full]; no model-orchestration stack

media-downloader-mcp

docker build --target mcp   -t knucklessg1/media-downloader:mcp   docker/   # connector-focused MCP server

agent (default build) with a co-located :mcp sidecar. For an immutable production digest, tag and pin the operator's own build as shown in the hardened docker run pattern above.

Knowledge-graph database (epistemic-graph)

Scion SDK core dependency (epistemic-graph[full]). The [mcp] extra keeps deployments can use the bundled engine. For production — or to share one knowledge graph across multiple agents — run epistemic-graph as its own dedicated database service and configure the runtime to use it instead of the bundled engine. Deployment recipes (single-node + Raft HA), connection configuration, and the full database architecture (with diagrams) are documented in the epistemic-graph deployment guide.


Documentation

The complete documentation is published as the official documentation site and is the recommended reference for installation, deployment, and day-to-day operation.

Page

Contents

Installation

pip, source, extras, prebuilt Docker image

Deployment

run the MCP server, the agent server, Compose, Caddy + Technitium, env config

Usage

the MCP tools, the MediaDownloader Python API, the CLI

Overview

ecosystem role, enterprise readiness, architecture

Concepts

concept registry (CONCEPT:MDLD-*)

AGENTS.md is the canonical contributor/agent guidance.


Repository Owners

GitHub followers GitHub User's stars


Contribute

Contributions are welcome! Please ensure code quality by running local checks before submitting pull requests:

  • Format code using ruff format .

  • Lint code using ruff check .

  • Validate type-safety with mypy .

  • Ran test suites using pytest

Governed capability contract

This package ships a compact canonical skill surface with specialist procedures kept as referenced workflows. The current MCP tools, skill metadata, connector_manifest.yml, ontology, mappings, shapes, fixtures, migrations, tool-schema fingerprints, and certification metadata form one versioned capability contract. Validate them together; do not rely on stale tool names or historical per-task skill wrappers.

Runtime endpoints, credentials, certificate trust, tenant identity, retention, and observability policy are deployment inputs and are never packaged values. See Configuration, trust, and privacy before enabling a network transport, connector ingestion, Arbora delegation, or trace export.

Available Tools

11 tools
build_watch_skillBuild Watch SkillA

Write a video-built skill, or append another video's findings to one.

You supply the body - reading the transcript and frames is your job, not this tool's. It owns the mechanics: frontmatter, the provenance table every claim stays traceable to, the version bump, and WORKFLOW.md.

Appending a video the skill already lists is refused rather than duplicated, so re-running a pipeline is safe. Call list_watch_skills first to see which skill a new video belongs to.

Default to append. Use replace when the new source contradicts the skill, changes a conclusion, supersedes rather than extends it, leaves the body no longer reading as one document, or outgrows the description. A create or replace without a "What would change this skill" section is refused.

NameRequiredDescriptionDefault
bodyYesThe markdown body you wrote from the bundle, starting with a '# Title' heading and ending with a '## What would change this skill' section naming the evidence that would revise it. Do not include a Sources section - it is generated from the manifest.
modeNo'create' a new skill, 'append' a video's findings, or 'replace' the bodycreate
nameYesSkill name; becomes the directory name
tagsNoComma-separated frontmatter tags
descriptionNoSkill description; required when creating
skills_rootYesDirectory the skill lives in (one subdirectory per skill)
manifest_pathYesPath to the watch bundle's manifest.json, for provenance

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/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 idempotency ('Appending a video the skill already lists is refused... re-running a pipeline is safe'), the required body shape, the auto-generated artifacts (frontmatter, provenance table, WORKFLOW.md), and that create/replace without a 'What would change this skill' section is refused. It does not say what happens to the existing body on `replace` or what permissions/paths are needed, so a 4 rather than 5.

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?

Front-loaded with the action, then responsibilities, then mode selection, then hard refusals. Slightly long with a trailing paragraph on refusal rules, but every sentence carries operative information; no filler.

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?

Output schema exists, so return values need no explanation, and the description covers delegation of reading transcripts/frames, generated artifacts, and refusal conditions. The only meaningful gap is the mismatched `mode` default between prose and schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds real decision semantics on `mode` (default append, when to choose replace) and on what `body` must contain. However, it states 'Default to `append`' while the schema declares `mode` default 'create' — a conflict the agent must resolve, which keeps this below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opening sentence names specific verbs (write / append) and a concrete resource (video-built skill), and the tool is clearly distinct from siblings like list_watch_skills and watch_media. An agent knows exactly what this tool produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing guidance: 'Call `list_watch_skills` first to see which skill a new video belongs to', 'Default to `append`', and a clear enumerated set of conditions selecting `replace`. Alternatives and exclusions are both named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_mediaDownload MediaC

Download video or audio from supported sites (YouTube, Rumble, etc.).

NameRequiredDescriptionDefault
video_urlYesURL of the video/media to download
audio_onlyNoExtract audio and convert to MP3
download_directoryNoDirectory to save downloads.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/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 disclosure burden, yet it says nothing about authentication requirements, rate limits, blocking or long-running behavior, overwrite semantics for download_directory, or what 'supported sites' actually means. Only the basic read-and-write-to-disk nature is implied.

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 front-loaded sentence with no waste and no preamble. It is efficient, though its brevity contributes to the gaps in behavior and routing rather than being a deliberate trade-off.

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?

The output schema relieves the need to describe return values and the schema covers all parameters, but for a network-facing download tool with no annotations and nine closely related siblings, the definition omits failure modes, restrictions, and tool-selection context an agent needs to call it correctly.

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 100% and all three parameters are documented in the schema, including the audio_only MP3 conversion and download_directory default. The description adds only a slight hint about which sites are supported, so the baseline 3 applies.

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 ('Download') and resource ('video or audio') and names example sources (YouTube, Rumble), so the core action is unambiguous. However, it gives no signal distinguishing it from siblings like media_downloader_download_video, media_downloader_download_all, or watch_media, leaving the agent to guess among near-identical download tools.

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 description offers no when-to-use or when-not-to-use guidance and never mentions any alternative. With ten sibling tools in the media_downloader family, the absence of routing criteria is a real gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_watch_skillsList Watch SkillsA

List video-built skills under a root and the videos each already has.

Use it before building: it says whether a new video extends an existing skill and whether that skill already covers it.

NameRequiredDescriptionDefault
skills_rootYesDirectory holding video-built skills

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. "List" implies a non-mutating read and the description discloses what comes back (skills plus their existing videos), but it says nothing about behavior on a missing/invalid skills_root, whether the root is created, or ordering/pagination.

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?

Two short sentences with the capability stated first and the usage rationale second. The second sentence is slightly redundant in phrasing ("extends an existing skill" vs "already covers it"), but no sentence 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?

An output schema exists, so return values need not be detailed, and with one well-documented parameter the surface is small. The only meaningful gap is undefined behavior for an invalid or empty skills_root.

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 100% for the single parameter, so the schema already defines skills_root as the directory holding video-built skills. The description adds no format, path-resolution, or constraint detail beyond that, making the baseline 3 appropriate.

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: it lists video-built skills under a root directory plus the videos each already contains. That is clearly a read/inspection operation and distinct from build_watch_skill, though the sibling is never named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use it before building" gives a concrete trigger point, and the follow-on clause explains the decision it informs (extend an existing skill vs. create new, and coverage overlap). It stops short of naming build_watch_skill or stating when not to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

media_downloader_download_allDownload allC

Invoke the download_all operation.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, and destructiveHint=false, so the agent knows this is a non-destructive but externally-reaching operation. The description adds nothing beyond that: it does not say what gets downloaded, whether files are written to disk, how progress is reported (despite a sibling progress_callback tool), or how large an 'all' operation may be.

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?

One short sentence with no wasted words, but it is under-specified rather than concise — there is no front-loaded statement of scope or outcome. The single sentence carries no information an agent could act on.

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 parameters and no output schema, the description is the only place to explain what 'all' covers, where the results go, and what side effects to expect on an openWorld operation. It supplies none of that, leaving a meaningful gap for a tool that likely triggers bulk downloads.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate at the parameter level. Baseline 4 applies; the missing semantics are about behavior, not inputs.

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?

The description is a tautology: 'Invoke the download_all operation' merely restates the tool name and title without saying what is downloaded, from where, or to where. It gives no basis for distinguishing it from siblings such as download_media, media_downloader_download_video, or watch_media.

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 use this versus the several download/watch siblings, and no prerequisites or exclusions are stated. The agent must infer scope 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.

media_downloader_download_videoDownload videoD

Invoke the download_video operation.

NameRequiredDescriptionDefault
linkYes
extra_optsNo

TDQS

D1.1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and openWorldHint=true, so an agent knows this is a non-destructive write that reaches the open web, but the description adds nothing beyond that — no mention of download location, size/format limits, network/auth requirements, or blocking behavior. For a network-writing tool with zero added context, this 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?

It is one short sentence with no filler, but brevity here is under-specification rather than conciseness — there is no front-loaded statement of purpose or scope to justify the sentence that exists.

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?

A two-parameter, open-world network operation with 0% schema coverage, no output schema, and no annotations covering input semantics requires substantially more description. Nothing an agent needs in order to call it correctly is present.

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%: `link` is required but untyped and undocumented, and `extra_opts` has only a title with a null default. The description provides no meaning for either parameter, so the agent has no idea what format `link` expects (URL? ID?) or what belongs in `extra_opts`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description merely restates the tool name and title ("Invoke the download_video operation") without stating what resource is fetched, from where, or how it differs from siblings like download_media, media_downloader_download_all, or watch_media. It is a tautology that gives an agent no basis for selecting this tool over the other download-family tools.

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 when-to-use guidance at all — no mention of supported sources, no distinction from download_media or download_all, and no noted prerequisites. An agent must guess between at least four download-related siblings with zero routing signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

media_downloader_get_channel_videosGet channel videosC
Read-onlyIdempotent

Find a channel's video links; queue them on self.links and return them.

NameRequiredDescriptionDefault
limitNo
channelYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds real value by disclosing a side effect the annotations do not mention: links are queued on ``self.links`` so they can presumably be passed to download_all later. That disclosure sits awkwardly against readOnlyHint/idempotentHint (does a repeat call enqueue duplicates?), and the description doesn't resolve that, nor does it say whether the queue is cleared first.

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 front-loaded sentence with no padding, which is good. But it spends its words on the internal implementation token ``self.links``, which is jargon an agent may not be able to interpret, rather than on the parameter and return details that are actually missing.

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 output schema, 0% schema descriptions, and no parameter documentation, the description carries the full burden and does not discharge it: return shape ('return them' – links? IDs? objects?), channel identifier format, and the meaning of limit=-1 are all absent. For a 2-parameter network tool that mutates an internal queue, this leaves too much for the agent to guess.

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%: neither `channel` (untyped) nor `limit` (default -1, presumably meaning unlimited, but unstated) carries any documentation. The description mentions a channel only in passing and never explains `limit` or the accepted channel identifier format, so it fails to compensate for a total schema documentation gap.

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 description states a specific verb and resource ('Find a channel's video links'), so an agent knows exactly what the tool retrieves. It does not, however, contrast itself with siblings such as media_downloader_download_video or media_downloader_download_all, nor does it say how the discovered links relate to those downloaders.

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 explicit guidance on when to choose this tool versus download_all, download_video, or watch. Usage is only implied by the word 'Find'. Nothing states prerequisites (does the channel need to be authenticated?) or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

media_downloader_open_fileOpen fileD

Invoke the open_file operation.

NameRequiredDescriptionDefault
fileYes

TDQS

D1.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered structurally, but the description adds nothing: it doesn't explain what 'open' actually does, whether it launches an external process, or what side effects openWorldHint implies.

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?

A single short sentence is technically concise, but it is under-specified rather than efficient—there is no front-loaded useful information to structure.

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?

For an open-world, non-read-only tool with an undocumented required parameter and no output schema, the description supplies none of the information an agent needs to call it correctly or predict its effects.

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?

There is one required parameter 'file' with 0% schema description coverage and no type information; the description says nothing about it, so an agent cannot tell whether it expects a path, URL, or identifier.

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?

'Invoke the open_file operation' only restates the tool name; it does not say what resource is opened, in what sense (OS handler launch, file read, stream), or how it differs from siblings like watch_media or download_media.

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?

No guidance whatsoever on when to call this versus the ten sibling tools (download_media, watch_media, media_downloader_watch, etc.), nor any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

media_downloader_progress_hookProgress hookD

Invoke the progress_hook operation.

NameRequiredDescriptionDefault
dYes

TDQS

D1.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, openWorldHint=true, and destructiveHint=false, so the safety profile is partly covered. The description adds nothing about side effects, what the hook does when invoked, or what it returns; it doesn't contradict annotations, but contributes zero behavioral context.

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?

One short sentence with no wasted words, but this is under-specification rather than conciseness. There is no front-loaded information an agent can act on.

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?

A single-parameter tool with an opaque parameter name, no output schema, and annotations only hinting at open-world non-destructive behavior. The description is far too thin for an agent to call this 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?

The single required parameter is named 'd' with no type and 0% schema description coverage. The description says nothing that would explain what 'd' should contain, leaving the agent unable to supply a meaningful value.

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?

The description merely restates the tool name as 'Invoke the progress_hook operation,' adding no verb specificity or resource clarification. It doesn't distinguish this from media_downloader_set_progress_callback or explain what a 'progress hook' does.

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 use this versus the closely related media_downloader_set_progress_callback, nor any prerequisites or conditions. The agent must infer everything 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.

media_downloader_set_progress_callbackSet progress callbackD

Invoke the set_progress_callback operation.

NameRequiredDescriptionDefault
callbackYes

TDQS

D1.3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the description carries a lower burden — yet it adds nothing at all. It does not say that setting a callback mutates downloader state, whether it replaces a previously registered callback, whether it persists, or how the callback is invoked (signature, threading, frequency).

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?

It is short, but the brevity is under-specification rather than efficiency — a single contentless sentence that front-loads nothing useful.

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 one untyped parameter, no output schema, and only minimal annotations, the description should explain what the callback receives and what registering it changes. None of that is present.

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?

There is a single required parameter 'callback' whose schema is an empty object with no type, description, or signature information, and schema description coverage is 0%. This is the one place the description had to compensate, and it says nothing about the expected callback shape.

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?

The description is a tautology: 'Invoke the set_progress_callback operation' restates the tool name and title without saying what a progress callback is for, what it attaches to, or what it reports. It gives no way to distinguish this from the sibling media_downloader_progress_hook.

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 indication of when to call this, whether a download must be in flight first, or how it relates to media_downloader_progress_hook and media_downloader_watch. An agent has to guess entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

media_downloader_watchWatchB

Download a video with its captions and extract scene-change key frames.

Returns the bundle manifest: the media, the transcript, the key frames, and whatever could not be obtained. status is success only when both captions and frames are present, so a caller can surface a partial result before reasoning over an incomplete bundle. A degraded run never raises.

NameRequiredDescriptionDefault
linkYes
max_framesNo
min_framesNo
subtitle_langsNo
scene_thresholdNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false) by disclosing the return manifest shape, the `status` success/partial semantics, and the important trait that a degraded run never raises. That failure-mode disclosure is exactly the kind of thing annotations cannot convey; it stops short of covering on-disk artifacts or network/permission constraints.

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?

Front-loaded with the core action, then return contract and edge-case behavior. Four sentences, each carrying information, with no filler; the double-backtick emphasis on `status`/`partial` is slightly verbose but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Return semantics are well covered despite no output schema, and the non-raising guarantee is valuable. However, for a five-parameter tool with zero schema documentation, the description leaves the agent unable to set frame limits, language preferences, or scene sensitivity correctly.

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 five parameters, and the description adds no meaning to `link`, `max_frames`, `min_frames`, `subtitle_langs`, or `scene_threshold`. It only obliquely implies captions and scene-based frame extraction, so an agent gets no guidance on tuning frame counts or thresholds.

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 compound action: download a video with captions and extract scene-change key frames. Clear verb+resource. It doesn't differentiate itself from siblings like media_downloader_download_video, download_media, or watch_media, so an agent must infer that this is the combined media+transcript+frames pipeline.

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?

Usage is only implied: a caller wanting media, transcript, and key frames together should use this, and can tolerate a partial bundle. There is no explicit 'use this instead of X' or precondition statement, despite three plausible overlapping siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

watch_mediaWatch MediaA

Watch a video: download it with captions and extract key frames.

Returns a manifest describing a bundle on disk - the caption transcript plus scene-change key frames whose filenames carry their timestamp, so what was on screen can be lined up against what was said. Use this to analyse a tutorial, demo, talk, or screen recording rather than merely archive it.

Check status before trusting the bundle: partial means the captions or the frames are missing, and captions.fallback then names the audio-transcriber skill to recover a transcript.

NameRequiredDescriptionDefault
video_urlYesURL of the video/media to watch
max_framesNoMaximum key frames to extract (1-200)
scene_thresholdNoffmpeg scene-change sensitivity; lower finds more frames
download_directoryNoDirectory to save the watch bundle.
subtitle_languagesNoComma-separated yt-dlp caption language codesen,en-orig

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full load and does well: it discloses the on-disk bundle layout, that frame filenames carry timestamps, and that `status` can be `partial`. It adds a recovery path via `captions.fallback`. It doesn't mention disk footprint, network/size limits, or whether directories are created, which keeps it off a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then return shape, then caveat. Every sentence carries distinct information, and there is no filler or repetition of the schema.

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?

An output schema exists, so return values needn't be fully restated, and the description still covers the one thing the schema likely doesn't: the meaning of `status: partial` and the fallback path. An agent has enough to call it and interpret results, with only operational details like disk usage missing.

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 100%, so all five parameters are already documented, and the description adds no syntax or format detail beyond them. The reference to captions and `captions.fallback` is output-related rather than parameter guidance, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+output: 'Watch a video: download it with captions and extract key frames.' It also explicitly contrasts itself with archiving, which separates it from the download_media / media_downloader_download_video siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear when-to-use list ('analyse a tutorial, demo, talk, or screen recording') and an implicit exclusion ('rather than merely archive it'), which points at the plain downloader siblings. It stops short of naming the alternative tool explicitly.

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. 11 tool updatesv4.4.7
    • First observedbuild_watch_skill
    • First observeddownload_media
    • First observedlist_watch_skills
    • First observedmedia_downloader_download_all
    • First observedmedia_downloader_download_video
    • First observedmedia_downloader_get_channel_videos
    • First observedmedia_downloader_open_file
    • First observedmedia_downloader_progress_hook
    • First observedmedia_downloader_set_progress_callback
    • First observedmedia_downloader_watch
    • First observedwatch_media

TDQS

C2.2/5.0

Scored across 11 tools

Disambiguation2/5

There are near-duplicate pairs: watch_media and media_downloader_watch have essentially identical descriptions, and download_media overlaps with media_downloader_download_video/download_all. The two progress tools (set_progress_callback, progress_hook) are internal callbacks with no distinguishing description, so an agent cannot tell which to call or when.

Naming Consistency2/5

Names mix a `media_downloader_` prefix (set_progress_callback, download_all, open_file, watch) with bare snake_case (download_media, watch_media, build_watch_skill), and equivalent actions appear under both conventions. Several delegated names are also opaque stubs ('Invoke the download_all operation') that don't follow the descriptive verb_noun style of the others.

Tool Count3/5

11 tools is a reasonable count for the domain, but several slots are wasted on duplicated or internal-only operations (watch vs watch_media, download_all/download_video, progress_hook, open_file). Trimming the redundant entries would leave a tighter, clearer core.

Completeness3/5

The core loop is covered: list skills, download, watch, build/append skill, plus channel video discovery. However there is no way to delete or remove a skill, no way to inspect a stored skill's contents, and progress/callback plumbing is exposed as tools rather than handled internally.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers