Skip to main content
Glama

smovie

A small download service for YouTube and TikTok, built to run all the time on the Mac mini. You send it a URL, it adds a job to a queue (to run now, in turn, or at a set time), and yt-dlp downloads the video. You follow progress on a view-only dashboard, through the REST API, or through an MCP server that agents can use.

URL ──► POST /api/jobs ──► SQLite queue ──► worker (yt-dlp, N at a time) ──► data/downloads/<job>/
                               ▲                                              │
        dashboard (view) ──────┤                                              ▼
        MCP server (agents) ───┘                               GET /api/jobs/<id>/file

Run

uv sync
uv run smovie                 # http://localhost:8787  (dashboard)  /docs (API)

To install it on the mini so it starts at login and restarts if it crashes:

SM_API_TOKEN=change-me deploy/install-launchd.sh

Requires ffmpeg (brew install ffmpeg) to merge video and audio.

Settings (environment variables)

Var

Default

SM_DATA_DIR

./data (launchd: ~/smovie-data)

DB, downloads, log

SM_PORT

8787

SM_CONCURRENCY

2

parallel downloads

SM_API_TOKEN

none

if set, API needs Authorization: Bearer … (dashboard: open /?token=… once)

SM_COOKIES_FILE

none

Netscape cookies.txt, for YouTube "confirm you're not a bot" errors

SM_API_URL

http://127.0.0.1:8787

where the MCP server finds the API

Related MCP server: Importly MCP Server

API

Method

Path

POST

/api/jobs

{"url", "when": "now"|"queue"|"schedule", "run_at"?, "audio_only"?, "max_height"?, "purpose"?, "studio"?}

GET

/api/jobs?status=queued,downloading&limit=100

list jobs

GET

/api/jobs/{id}

status, progress, speed, eta, title, error

GET

/api/jobs/{id}/file

download the finished file

POST

/api/jobs/{id}/cancel

cancel a scheduled, queued or running job

POST

/api/jobs/{id}/retry

requeue a failed or canceled job

DELETE

/api/jobs/{id}?delete_file=true

remove job (and its file)

GET

/api/stats, /api/health

when=now moves the job to the front of the queue (it still waits if all download slots are busy). run_at without a timezone means the mini's local time.

curl -X POST localhost:8787/api/jobs -H 'content-type: application/json' \
  -d '{"url":"https://www.tiktok.com/@user/video/123","when":"schedule","run_at":"2026-10-29T02:00"}'
curl -OJ localhost:8787/api/jobs/<id>/file

Jobs that were downloading when the service stopped go back to the queue when it restarts.

Animation Studio (codex-3d)

"purpose": "depth" (or "action") on a job hands the finished file to Animation Studio, which polls for done jobs once a minute and takes each in once (hardlinked, so deleting the job keeps its copy). "studio" carries its fields: id, name, rights, and optionally window [start, end] in seconds with scene, for a depth reference of that window. Depth and action downloads are video, capped at 1080.

curl -X POST localhost:8787/api/jobs -H 'content-type: application/json' \
  -d '{"url":"https://youtu.be/…","purpose":"depth","studio":{"id":"got-olenna","name":"Olenna","rights":"non-commercial reference"}}'

Agents

  • MCP: .mcp.json registers smovie-mcp (stdio). The tools are submit_video, wait_for_job, save_video, list_jobs, get_job, cancel_job, retry_job and delete_job. To use it from another machine, set SM_API_URL=http://<mini>.local:8787 (and SM_API_TOKEN).

  • Skill: .claude/skills/video-download/SKILL.md covers the same flow with curl.

Maintenance

YouTube and TikTok change often, so keep yt-dlp up to date. Running deploy/update-ytdlp.sh weekly is enough.

Roadmap

  • Trimming: add trim: {start, end} to the job options and run ffmpeg -ss … -to … -c copy after the download.

  • Cloud: the same service in a container. Expect YouTube to block datacenter IPs, so plan on cookies or a residential proxy.

License

MIT, see LICENSE. Only download content you have the right to; downloading may break YouTube's and TikTok's terms of service.

Available Tools

8 tools
cancel_jobC

Cancel a scheduled, queued or running job.

NameRequiredDescriptionDefault
job_idYes

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 burden. It states a state precondition but says nothing about whether cancellation is reversible, whether a running job's partial output is retained, whether the call blocks until the job stops, or what errors occur for ineligible states.

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 zero filler. It is efficient, though the brevity comes at the cost of the missing detail noted elsewhere.

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 a mutation tool with no annotations, no output schema, and an undocumented parameter, the description is too thin. An agent still cannot tell what the return looks like, whether the operation is idempotent, or how to handle a job that has already finished.

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 the single required parameter, and the description adds nothing about job_id — not its format, nor that it is a job identifier rather than a video identifier, which is a real ambiguity given siblings like submit_video and save_video in the same family.

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?

Clear specific verb+resource ("Cancel ... job") with an added scope qualifier enumerating the valid job states (scheduled, queued, running). It does not distinguish itself from the sibling delete_job, so an agent must infer whether cancel and delete differ.

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?

The state list implies when the tool applies (only non-terminal jobs), which is useful, but there is no explicit when-not guidance, no mention of what to do for an already-completed job, and no routing to delete_job or retry_job as alternatives.

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

delete_jobB

Remove a job from the list, and its file from the server unless delete_file is false.

NameRequiredDescriptionDefault
job_idYes
delete_fileNo

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the key behavioral trait: the file is deleted from the server unless delete_file is false. However, it does not state that the removal is irreversible, whether permissions are required, or what happens if the job is still running.

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?

A single efficient sentence that front-loads the primary action and folds the conditional file deletion into the same clause. No waste.

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?

For a simple two-parameter tool with no output schema the description covers the main risk (file deletion), but it leaves out irreversibility and any interaction with in-flight jobs, which matter for a destructive operation with no annotations backing it up.

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. It usefully explains the effect of delete_file (file retention vs. deletion) but omits the default of true that the schema declares, and says nothing about job_id beyond its obvious role.

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 ('Remove a job from the list') and adds the scope of the side effect on the server file. It distinguishes itself in substance from siblings like cancel_job or retry_job, though it never names an alternative explicitly.

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 choose this over cancel_job — a sibling that would be the obvious alternative when a user wants to stop a job without erasing it. Usage is only inferable from the word 'Remove'.

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

get_jobC

Get one job: status, progress %, speed, title, filename, error.

NameRequiredDescriptionDefault
job_idYes

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 behavioral burden, and it discloses only the returned fields. It says nothing about whether a missing/expired job_id errors or returns empty, whether status is terminal, or that this does not block like wait_for_job.

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 compact, front-loaded sentence with a verb first and the returned fields enumerated after the colon. No waste, though the telegram style leaves behavior unstated rather than over-explaining.

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?

With no output schema, the description usefully lists the return fields, which is the main completeness win. For a job-polling tool in a family containing wait_for_job and cancel_job, though, it omits error/terminal-state behavior an agent needs to act on the result.

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?

Only one parameter (job_id) with 0% schema description coverage, so the description must compensate; "one job" weakly implies job_id identifies the job but gives no format or provenance (e.g., where job_id comes from, such as submit_video's response). The parameter is largely self-explanatory, keeping this at minimum viable.

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?

"Get one job" states a specific verb and singular resource, and the field list (status, progress %, speed, title, filename, error) makes clear what comes back. The word "one" implicitly separates it from list_jobs, but no sibling is 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 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 versus list_jobs or wait_for_job, which is the key decision for a job-status tool (poll once vs block until done). The agent must infer that this is a single non-blocking snapshot.

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

list_jobsA

List recent jobs, newest first. status filters by comma-separated states: scheduled, queued, downloading, done, failed, canceled.

NameRequiredDescriptionDefault
limitNo
statusNo

TDQS

A3.5/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 full burden. It usefully discloses sort order (newest first) and that results are bounded to "recent" jobs, but says nothing about default result count, truncation behavior, or whether older jobs are retrievable.

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 tight sentences, front-loaded with purpose and sort order, followed by the one parameter detail that the schema cannot supply. 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?

For a two-parameter read-only list tool with no output schema, the definition covers purpose, ordering, and the filter vocabulary. The missing piece is result-size semantics (what limit actually bounds), which an agent needs to page 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 0%, and the status parameter has no enum in the schema, so the description's enumeration of valid states (scheduled, queued, downloading, done, failed, canceled) and comma-separated syntax is genuinely valuable. The limit parameter, however, is left completely unexplained (no bounds, no meaning beyond the default of 20).

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 ("List recent jobs") plus the ordering ("newest first"), which distinguishes it from the singular get_job sibling. It does not explicitly name siblings, so it stops short of a 5.

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 by the verb: an agent can infer this is for browsing recent activity. There is no explicit statement of when to prefer it over get_job or wait_for_job, and no guidance on paging through more than the default window.

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

retry_jobA

Put a failed or canceled job back in the queue.

NameRequiredDescriptionDefault
job_idYes

TDQS

A3.5/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 but only says the job is re-queued. It does not disclose whether prior progress/outputs are reset, whether the job_id is preserved or a new job spawned, required permissions, or whether the original failure artifacts remain.

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?

One sentence, front-loaded with the action and immediately qualified by the eligible states. No filler, nothing buried.

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?

For a one-parameter mutation with no annotations and no output schema, the agent still needs to know the post-call effect (new job id vs. same id, whether prior results survive) and error behavior on ineligible states. The definition is adequate but leaves those operational questions open.

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% for the single job_id parameter, so the only semantic hint is that the id must reference a failed or canceled job. That is useful but does not document the id format or what happens if the state is wrong.

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 (put back in queue) and resource (a failed or canceled job), plus the precondition on job state. It is clearly distinguishable from siblings like cancel_job or submit_video by intent, though it never names them.

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?

"Failed or canceled" gives an explicit eligibility gate, which is genuine when-to-use context beyond the name. It stops short of naming alternatives (e.g. re-submitting via submit_video) or saying what to do if the job is still running.

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

save_videoB

Copy a finished job's file from the service to a local folder. Returns the saved path.

NameRequiredDescriptionDefault
job_idYes
dest_dirNo~/Downloads

TDQS

B3.3/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It usefully states the job must be finished and that the saved path is returned, but omits key behavior for a disk-writing tool: whether dest_dir is created, whether existing files are overwritten, and what errors occur.

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?

Two short sentences that front-load the action and append the return value. No wasted text.

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?

The return value is disclosed in the absence of an output schema, which is a plus. But for a file-writing tool with zero annotations and undocumented parameters, the definition should say more about side effects and failure modes before an agent commits to it.

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 and largely does not. "Local folder" hints at dest_dir, but the default (~/Downloads) and its optionality are never mentioned, and job_id's expected format is left entirely to the schema title.

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 object — copying a finished job's file to a local folder — which clearly separates it from metadata siblings like get_job or list_jobs. It never names a sibling explicitly, but the operation is unmistakable.

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?

"A finished job's file" implies a prerequisite (the job must be complete, so after wait_for_job), but the description never states that condition outright or says what happens if the job is still running. No alternatives or exclusions are offered.

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

submit_videoA

Add a YouTube or TikTok URL to the download queue.

when: "now" jumps the queue, "queue" waits its turn, "schedule" starts at run_at
(ISO 8601, e.g. "2026-10-29T02:00"; no timezone = the server's local time).
max_height caps resolution (e.g. 1080). Returns the job, including its id.
purpose: "depth" (or "action") hands the finished file to Animation Studio (codex-3d), which picks up
done jobs by itself; studio carries its fields: id, name, rights, and optionally window [start, end]
in seconds and scene (then a depth reference is made for that window).
NameRequiredDescriptionDefault
urlYes
whenNoqueue
run_atNo
studioNo
purposeNokeep
audio_onlyNo
max_heightNo

TDQS

A4.3/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 scheduling/timezone defaults, that the call returns a job with an id, and that 'depth'/'action' purposes hand the finished file to Animation Studio, which polls done jobs itself. It omits auth/permission needs, duplicate-URL behavior, and failure modes, keeping it out of the top band.

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 broken into labeled lines for when and purpose, which is easy to scan. The purpose paragraph is dense and slightly awkward ('studio carries its fields'), but no sentence is pure 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?

For a 7-parameter mutation tool with no annotations and no output schema, the description covers nearly everything an agent needs: scheduling semantics, the returned job id, and the downstream Animation Studio handoff. The undocumented audio_only flag is the one meaningful gap.

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 description coverage is 0%, so the description must compensate and largely does: it explains when, run_at format with a concrete ISO example and the no-timezone rule, max_height with an example value, purpose semantics, and the shape of the studio object (id, name, rights, window, scene). Only audio_only is left entirely undocumented.

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?

States a specific verb and resource — 'Add a YouTube or TikTok URL to the download queue' — including the accepted source domains. The queueing framing distinguishes it from siblings like save_video or get_job without needing to open any schema.

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?

The three 'when' modes are spelled out with clear semantics (now jumps the queue, queue waits, schedule uses run_at), and the purpose modes are explained. It stops short of saying when to prefer this tool over siblings such as save_video or how to follow up with wait_for_job, but the context is otherwise clear.

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

wait_for_jobC

Wait until a job is done, failed or canceled (or the timeout passes) and return it.

NameRequiredDescriptionDefault
job_idYes
timeout_secondsNo

TDQS

C2.9/5.0
Behavior2/5

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

With zero annotations, the description carries the full behavioral burden, and it only partially discharges it: it discloses the terminal states and that a timeout can end the wait, but not whether a timeout raises an error or returns the job in its current state, whether the call blocks the session, or the 600-second default that lives only in the schema.

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?

One sentence, front-loaded with the verb and outcome set, with the timeout caveat parenthesized rather than padding the sentence. Nothing is wasted.

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?

For a two-parameter blocking tool with no annotations and no output schema, the description covers the outcome space but leaves the most consequential question unanswered: what the caller gets back when the timeout fires. Return values needn't be described in general, but this tool's defining behavior is the timeout branch.

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 and it largely does not. It alludes to a timeout but never explains its unit, default, or upper bound, and never clarifies that job_id is the identifier of an already-submitted job (cf. submit_video).

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 ('Wait') and resource ('job') and enumerates the terminal conditions (done, failed, canceled) plus the timeout escape. This implicitly distinguishes it from the immediate sibling get_job, but never names that sibling explicitly.

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 about when to prefer this blocking call over get_job (poll once) or list_jobs, and no mention of preconditions such as the job existing or being pending. The only usage cue is the word 'Wait', which the agent must infer.

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. 8 tool updatesv0.1.0
    • First observedcancel_job
    • First observeddelete_job
    • First observedget_job
    • First observedlist_jobs
    • First observedretry_job
    • First observedsave_video
    • First observedsubmit_video
    • First observedwait_for_job

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a clearly distinct role across the job lifecycle: submit, inspect, list, wait, save, cancel, retry, and delete. The nearest pair, get_job and wait_for_job, is differentiated by wait_for_job blocking until a terminal state or timeout.

Naming Consistency5/5

All eight tools follow a consistent snake_case verb_noun pattern (get_job, submit_video, list_jobs, wait_for_job, save_video, cancel_job, retry_job, delete_job). No mixed casing or inconsistent verb styles appear.

Tool Count5/5

Eight tools is well-scoped for a video download queue service, covering submission, monitoring, waiting, file retrieval, and lifecycle management without bloat. Each tool earns its place in the workflow.

Completeness5/5

The surface covers the full job lifecycle: create/submit, get, list, wait, save finished files, cancel, retry, and delete. Scheduling and Animation Studio handoff are handled through submit_video, leaving no obvious dead ends for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers