AgentStack
SKILL verified MIT Self-run

Ozor Video Library

skill-mintii-labs-ozor-skills-ozor-video-library · by Mintii-Labs

Browse, inspect, re-export, embed, or iterate on videos that already exist in the user's Ozor.ai account. Use this skill whenever the user wants to work with past or in-progress Ozor videos rather than create a new one — e.g. 'list my Ozor videos', 'show my recent videos', 'what's the status of my last video', 'get the embed code for that video', 'download my last Ozor video', 'share link for the…

No reviews yet
0 installs
2 views
0.0% view→install

Install

$ agentstack add skill-mintii-labs-ozor-skills-ozor-video-library

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Ozor Video Library? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Ozor Video Library

Manage existing Ozor.ai videos via the MCP: list, inspect, re-export, embed, or send follow-up edits to the video agent. This skill is the "everything except creating from scratch" surface for mcp__ozor__*.

When to use

Use this skill when the user wants to operate on videos that already exist in their Ozor account. Signals:

  • "List / show my videos"
  • "What's the status of ..."
  • "Get the share link / download / embed for ..."
  • "Re-export that video at 9:16"
  • "Send a follow-up edit: change scene 2 to ..."
  • "Show me the plan for that video"
  • "Is the job done yet" / "check on the export"

Do NOT use this skill when:

  • Creating a new video from text → ozor-generate
  • Creating from a document/file → ozor-document-video
  • Creating from a URL → ozor-url-to-video

Required MCP tools

| Task | Tool | |------|------| | List recent videos | mcp__ozor__list_videos | | Get one video's details | mcp__ozor__get_video | | Check a build job status | mcp__ozor__get_job | | Block until a job finishes | mcp__ozor__wait_for_job | | Fetch the plan a video was built from | mcp__ozor__get_plan | | Edit a plan | mcp__ozor__update_plan | | Trigger a (new) export | mcp__ozor__export_video | | Block until export ready | mcp__ozor__wait_for_export | | Get ` for embedding | mcp__ozor__getembedcode | | Send a follow-up edit message to the agent | mcp__ozor__sendmessage | | List available voices | mcp_ozor__list_voices` |

If the MCP isn't connected, tell the user and stop.

Common workflows

A. List recent videos

mcp__ozor__list_videos({ limit?: 10 })

Present as a table:

| # | Title | Status | Format | Updated | videoId |
|---|-------|--------|--------|---------|---------|
| 1 | ...   | exported | 16:9 | 2h ago | abc...  |

Offer 2–3 obvious next actions: "Want share links for any of these? An embed code? Re-export one as 9:16?"

B. Get details for a specific video

If the user names a video or gives an ID:

mcp__ozor__get_video({ videoId })

Surface: title, current status (draft / building / exported / failed), format, duration, last update, and any URLs that exist (share, editor, download).

C. "What's the status of my last video?"

  1. list_videos({ limit: 1 }) to find the most recent.
  2. If status is building, also call get_job (or wait_for_job if the user wants to block until it's done) to get progress.
  3. If status is exported, show the URLs.

D. Get the embed code

mcp__ozor__get_embed_code({ videoId })

If the video hasn't been exported yet, run the export first (workflow F below).

E. Get the share / download URL

If the video is already exported, get_video returns the URLs. If not:

mcp__ozor__export_video({ videoId })
mcp__ozor__wait_for_export({ videoId })

F. Re-export (e.g. user wants a fresh render after edits, or the URL expired)

mcp__ozor__export_video({ videoId })
mcp__ozor__wait_for_export({ videoId })   // -> fresh shareUrl, editorUrl, downloadUrl
mcp__ozor__get_embed_code({ videoId })    // -> fresh iframe

G. Re-render at a different format (e.g. landscape → vertical)

Format changes go through the plan:

  1. mcp__ozor__get_plan({ videoId }) — fetch the current plan
  2. mcp__ozor__update_plan({ planId, format: "9:16" }) — apply the change
  3. mcp__ozor__generate_from_plan({ planId }) is on the create-from-plan path — if the user wants the same project updated, prefer send_message instead (workflow H). If they want a new project at the new format, fall through to generate_from_plan, then export.

Note: generate_from_plan lives in ozor-document-video / ozor-url-to-video because it creates a fresh project. Tell the user when you're about to spin up a new project rather than mutating the existing one.

H. Send a follow-up edit to the agent

For copy/visual/scene tweaks on an existing video without starting over:

mcp__ozor__send_message({
  videoId,
  message: ""
})

This typically returns a new jobId. Then:

mcp__ozor__wait_for_job({ videoId, jobId })
mcp__ozor__export_video({ videoId })
mcp__ozor__wait_for_export({ videoId })

Surface the fresh URLs afterwards.

I. Inspect / edit a plan

mcp__ozor__get_plan({ videoId | planId })

Render the scenes as a numbered list to the user. If they want changes:

mcp__ozor__update_plan({ planId, ... })

Then re-fetch to confirm. Plan edits alone don't change the rendered video — they have to be followed by a regeneration (send_message for in-place, generate_from_plan for a new project) and an export.

J. List voices

When the user is choosing or swapping a voice:

mcp__ozor__list_voices()

Present a compact list (name, language, style). If swapping, update_plan({ planId, voice: "" }) then regenerate.

Disambiguating "that video" / "my last video"

If the user says "that video" or "my last one" without an ID:

  1. list_videos({ limit: 5 }).
  2. If exactly one matches the description, use it.
  3. If multiple plausible matches, show the short list and ask which.

Don't silently pick a random video.

Presenting URLs

Always present available URLs labeled:

**Share:** 
**Editor:** 
**Download:** 
**Embed:** (in a code block)

If a URL doesn't exist yet (e.g. video never exported), don't fabricate one — tell the user what's missing and offer to run the export.

Errors and recovery

  • videoId not found → list recent videos and ask which one they meant.
  • Job failed → relay the failure message verbatim; offer send_message with a fix or a re-export.
  • Export failed → retry once; if it fails again, surface the error and recommend opening the editor URL to inspect.
  • Plan / video out of sync (plan edited but not regenerated) → tell the user the changes are staged but not rendered, and offer to regenerate.

Rules

  1. Never invent video IDs, share URLs, or status. Everything comes from the MCP.
  2. For in-place edits, prefer send_message over creating a new project via generate_from_plan. The user almost always wants the existing video updated, not a duplicate.
  3. Re-exports are cheap and safe — if the user wants fresh URLs, just rerun export.
  4. When the user is vague about which video, ask — show a short list, don't guess.
  5. Surface every URL after every regeneration or re-export. Stale URLs from earlier in the conversation may have expired.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.