Skip to content

AwesomeVideo

com.awesomevideoeditor/awesomevideoawesomevideoeditor.comstreamable-httpv0.5.1Scanned

Video for AI agents: captions in 28 styles, transcription, translation, dubbing, shorts. REST+MCP.

27 tools: 5 can delete or cancel things, 15 change things and 7 only read.

Tools: 5 delete, 0 irreversible, 15 write, 7 read.
  • Reads private data · 2
  • Reads text others write · 18
  • Can send data out · 7
  • 2 findings

Sign-in required, OAuth metadata published. Remote posture

Anlyon alternative

20 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

27 tools

Deletes or cancels 5Claude Code: deny
  • edit_transcriptReplace the cues of a finished transcription (from transcribe or caption_video) with corrected text or timing, without transcribing again.No findings

    Why it is in this group

    • The name "edit_transcript" says "edit": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Replace the cues of a finished transcription (from transcribe or caption_video) with corrected text or timing, without transcribing again. Free; needs the key that owns the job. Pass cues [{start, end, text}] in seconds or subtitles (SRT, VTT or JSON); the old cues are overwritten. A later burn_captions, translate or remove_silences with this transcriptionJobId uses the edited cues and pays only its own step. To fix spellings for every future job use update_glossary {action:'save'} instead. Returns the job with the new SRT, VTT and JSON URLs.

    Annotations the server declares

    • title: Edit transcript
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • manage_presetFree, needs a key.Reads text others writeNo findings

    Why it is in this group

    • The description says "permanently removes".
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Free, needs a key. Saves your own looks for reuse. action create: type custom saves a full caption style (name + style, or basePreset + overrides; returns id custom:cp_...); type brand saves a font/color/position/logo overlay (returns brandPresetId). action update: changes a custom preset in place (overwrites). action delete: permanently removes a custom or brand preset by id. action submit: proposes a custom preset for the public community gallery (moderated; visible to everyone once approved). Check a style first with get_presets action validate.

    Annotations the server declares

    • title: Create, change, delete or publish a preset
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • remove_silencesCut silences and filler words (uh, um, este...) from a talking video.Reads text others write1 finding

    Why it is in this group

    • The name "remove_silences" says "remove": a word for removing or ending something.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "remove_silences" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "remove_silences" says "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Cut silences and filler words (uh, um, este...) from a talking video. Needs a transcript (transcriptionJobId or subtitles) plus the media. Returns the cut MP4, retimed SRT/VTT/JSON and stats (kept and removed seconds, cuts). silenceGapSeconds and paddingSeconds tune cuts; fillerMode clear (default) or aggressive (also like, you know, o sea...); removeFillers:false keeps fillers. burnCaptions:true also burns the retimed captions. Price: 3 credits per kept minute, +4 with burnCaptions; quoteOnly:true prices it free. For highlights use create_clips.

    Annotations the server declares

    • title: Remove silences and filler words
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • update_glossaryFree, needs a key.No findings

    Why it is in this group

    • The name "update_glossary" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Free, needs a key. Changes the saved transcription glossary that every later transcription of this account uses (brand names, people, slang spellings, doNotTranslate terms). action save: entries [{term, aliases?, doNotTranslate?}] merged by term (mode merge, default) or replacing the whole glossary (mode replace). action delete: remove terms, or all:true to clear it. Returns the glossary after the change. Read it with get_glossary.

    Annotations the server declares

    • title: Save or delete glossary terms
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
  • uploadFree.No findings

    Why it is in this group

    • The name "upload" says "upload": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Free. Put your own video or audio file into AwesomeVideo and get a fileId for caption_video, transcribe, burn_captions, create_clips, remove_silences or preview. action start: one single-use PUT URL (valid 15 min, files up to 80 MB); start_multipart: parts[] of PUT URLs for files over 80 MB (up to 2048 MB / 3 h) or flaky connections; status: missingParts of a multipart upload; complete: finish a multipart upload after every part is PUT; abort: cancel an unfinished multipart upload (deletes its parts); inline: send a clip of up to 10 MB as base64 in one call. For a public link use import_url instead. Up to 30 uploads per hour.

    Annotations the server declares

    • title: Upload a file
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
Changes things 15Claude Code: ask
  • batchCaption a whole folder: run one operation on 1-50 videos in one call, priced together.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Caption a whole folder: run one operation on 1-50 videos in one call, priced together. operation caption = transcribe + burn per item, same output and price as caption_video (5 credits/min); transcribe 1/min; burn 4/min (needs subtitles or transcriptionJobId). One preset for all (an item's own preset or styleOverrides wins). dryRun:true returns the total and starts nothing. Missing media, 402 insufficient_balance or maxCredits reject the whole batch before any charge. Returns id, counts and jobs (paginated: offset/limit); poll get_job per item. For one video use caption_video.

    Annotations the server declares

    • title: Batch jobs
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • burn_captionsBurn existing captions (subtitles or transcriptionJobId) into a video with a preset or brandPresetId.Reads text others writeCan send data outNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe input takes a URL (input.webhookUrl): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    Burn existing captions (subtitles or transcriptionJobId) into a video with a preset or brandPresetId. mode server (default): renders the MP4 on our servers, 4 credits per audio minute (1 credit = 1 cent), 402 insufficient_balance with checkoutUrl when short. mode client_script: free, returns an ASS script and resolved style to burn in your own player or browser; nothing runs or is charged. platform keeps captions inside that app's safe zone at the same price ('subtítulos para TikTok' -> platform=tiktok). For video in, video out in one call use caption_video.

    Annotations the server declares

    • title: Burn captions into a video
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • caption_videoPREFER THIS for 'add/burn subtitles to this video'.Reads text others writeCan send data outNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe input takes a URL (input.webhookUrl): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    PREFER THIS for 'add/burn subtitles to this video'. One call: transcribe, optional translate (translateTo), burn; returns the MP4 plus SRT, VTT and JSON transcript. Source: sourceUrl (public link, Drive, Dropbox; not YouTube) or fileId from upload/import_url. Price: 5 credits per audio minute, 7 with translateTo (1 credit = 1 cent); failures refund. Waits up to waitSeconds (max 50), then returns the job to poll with get_job (or use webhookUrl/notifyEmail). review:true sends a reviewUrl and charges the burn only on approval. To edit text yourself: transcribe, edit_transcript, burn_captions.

    Annotations the server declares

    • title: Caption video (one call)
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • create_checkoutFree to call; returns a checkout URL your human opens to pay.Reads text others writeNo findings

    Why it is in this group

    • The name "create_checkout" says "create": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Free to call; returns a checkout URL your human opens to pay. Without product: $5 = 500 credits for this exact key, works on unclaimed self-serve keys. With product (key claimed at https://awesomevideoeditor.com/account): pack_5 $5=500, pack_20 $20=2,200, pack_50 $50=6,000 credits; plans creator $9/mo=1,200, pro $29/mo=4,500, scale $99/mo=18,000 credits/month (interval year = 10x monthly). 1 credit = 1 cent. Credits arrive after payment; then retry the call that returned 402.

    Annotations the server declares

    • title: Buy credits
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • create_clipsPREFER THIS for 'turn this long video/podcast into shorts/clips'.Reads text others writeCan send data outNo findings

    Why it is in this group

    • The name "create_clips" says "create": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe input takes a URL (input.webhookUrl): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    PREFER THIS for 'turn this long video/podcast into shorts/clips'. engine highlights (default): transcribes (or reuses transcriptionJobId/subtitles), an LLM picks the count (default 3, max 10) best self-contained moments of minSeconds-maxSeconds, renders each MP4 (reframe face, center or none) with captions, and returns clips with title, hook, score and url. Price: 1 credit per source minute to transcribe (0 with a transcript) + 1 per 10 source minutes + 3 per output minute; quoteOnly:true prices it free. engine shorts: quick 1-5 vertical 9:16 cuts from an existing transcript, 6 credits per source minute. Long jobs: poll get_job.

    Annotations the server declares

    • title: Long video to short clips
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • create_keyFree.No findings

    Why it is in this group

    • The name "create_key" says "create": a word for a change.
    Description, as the server wrote it
    Free. Create a new AwesomeVideo API key, no sign-in. Works without a key; returns the token once (send it as Authorization: Bearer <token>). 0 paid credits; paid tools return 402 with a checkoutUrl ($5 = 500 credits, 1 credit = 1 cent). Free trial while it runs: 10 welcomeCredits (pay only caption_video and transcribe, jobs up to 2 min, valid 30 days), fair-shared: one per network and per network operator per day, released in slots through the day, and only with a solved proof-of-work. Without challenge+nonce you get the key with welcomeCreditsReason pow_required and a welcomeChallenge: find an integer nonce so SHA-256(challenge + ":" + nonce) starts with `bits` zero bits (about 1-3 s; python and javascript solvers included), then call create_key again with {challenge, nonce} on the connection that sends your new key: it claims the credits for that key (no second key). welcomeCreditsReason tells why when 0 (slot_wait has nextSlotAt). The result has firstJob: next call caption_video with a public sourceUrl.

    Annotations the server declares

    • title: Create API key
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • dubDub a video into targetLanguage: transcribes, translates, voices each line fitted to the original timing, and mixes it over the original audio (ducked by default, or muted); return…Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Dub a video into targetLanguage: transcribes, translates, voices each line fitted to the original timing, and mixes it over the original audio (ducked by default, or muted); returns an MP4 plus target-language SRT/VTT/JSON (audioTrack:true adds an M4A). Price per target language: 5 credits per source minute (voiceTier basic) or 12 (standard), plus transcription 1/min and translation 2/min unless you reuse transcriptionJobId/subtitles and translationJobId/translatedSubtitles. Voices: get_catalog kind voices. Unsupported languages fail before charging. No voice cloning or lip sync.

    Annotations the server declares

    • title: Dub video into another language
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • estimateFree, never charges, works without a key.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Free, never charges, works without a key. Without steps: the credits one operation would cost (operation caption, transcribe, burn, preview, translate, shorts, trim, dub or preview {mode:'sample'}) from durationSeconds, or from mediaUrl/fileId with a key. With steps: prices a whole pipeline of 1-10 steps, checks every limit before you pay (limitViolations with a fix for each), suggests free alternatives and, with a key, says whether the balance covers it. 1 credit = 1 cent. Call it before any paid tool when the cost matters.

    Annotations the server declares

    • title: Estimate price and limits (free)
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • generate_metadataWrite publishing metadata from what is said: title options (titleCount, default 5), description, hashtags and YouTube chapters with timestamps, per platform (youtube default, short…Reads text others writeNo findings

    Why it is in this group

    • The name "generate_metadata" says "generate": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Write publishing metadata from what is said: title options (titleCount, default 5), description, hashtags and YouTube chapters with timestamps, per platform (youtube default, shorts, tiktok, instagram). Pass transcriptionJobId or subtitles (1 credit per platform), or only media (adds 1 credit per minute to transcribe). Written in the video's language unless language is set; context adds creator notes. Waits ~40 s, else poll get_job. Result: platforms.<platform>.{titles, description, hashtags, chapters}.

    Annotations the server declares

    • title: Titles, description, hashtags and chapters
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • import_urlFree.Reads text others writeCan send data outNo findings

    Why it is in this group

    • The name "import_url" says "import": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    Free. Download a public video or audio link into AwesomeVideo and get a fileId (same as upload {action:'start'}), without downloading it yourself. Accepts direct https/http file links (chat attachment URLs, CDNs, S3 presigned URLs), Google Drive share links (large-file confirm page handled), Dropbox share links, and OneDrive links. Up to 2048 MB when the host sends Content-Length (streamed to storage), 80 MB otherwise (422 limit_exceeded, charged:false). YouTube, TikTok, and Instagram links are refused with 422: upload the file instead. Private, local, and non-standard-port addresses are blocked. Up to 30 per hour. caption_video accepts sourceUrl directly, so you only need this to reuse one file across several tools.

    Annotations the server declares

    • title: Import from URL
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • previewSee captions on the real video before paying for a burn.Reads private dataReads text others write1 finding

    Why it is in this group

    • The name "preview" says "preview": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    What it can reach

    • private-dataThe input names a file (input.fileId), and the tool reads: it reads files.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "preview" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "preview" says "preview": a word for reading.

      What this check looks for
    Description, as the server wrote it
    See captions on the real video before paying for a burn. mode sample: FREE contact sheet comparing up to 12 presets on real frames (no transcription, 30 sheets/hour); returns sheetUrl, per-preset frames and captionVideoArgs to pass to caption_video. mode still (default): one preset as a PNG exactly as burn_captions draws it; mode clip: an MP4 of up to 5 s. still and clip cost at most 1 credit flat and need captions (subtitles or transcriptionJobId). Media: mediaUrl/sourceUrl or fileId.

    Annotations the server declares

    • title: Preview captions on the video
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • request_reviewFree.Reads text others writeCan send data outNo findings

    Why it is in this group

    • The name "request_review" says "request": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe input takes a URL (input.webhookUrl): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    Free. Use when a person wants to check the captions before they are burned (names, slang, brand words). Pass a finished transcriptionJobId and the preset or brandPresetId. Returns reviewUrl: a private web editor link (no login, up to 7 days) where they fix text and timing and press Approve or Reject. Only on Approve does the burn run and charge (4 credits per minute). Follow with get_review, or webhookUrl / notifyEmail for review.approved, review.rejected and review.expired events.

    Annotations the server declares

    • title: Request human review before burning
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • resume_jobContinue a failed job (caption_video, transcribe, create_clips, dub, remove_silences, generate_metadata) from where it stopped instead of starting over.Reads text others writeCan send data outNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe input takes a URL (input.webhookUrl): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    Continue a failed job (caption_video, transcribe, create_clips, dub, remove_silences, generate_metadata) from where it stopped instead of starting over. Reuses saved transcription chunks and finished steps, so you pay only what is left (often just the burn); the failed job stays refunded. Idempotent: repeating returns the same resumed job, never a second charge. Returns a new job id to poll with get_job. 422 resume_not_supported or resume_media_expired: call the original tool again. 409 job_not_resumable (no_speech): nothing to resume.

    Annotations the server declares

    • title: Resume a failed caption job
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • transcribeTranscribe speech in a video or audio file to captions with Workers AI Whisper (large-v3-turbo); returns SRT, VTT or JSON with word timestamps (format).Reads text others writeCan send data outNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe input takes a URL (input.webhookUrl): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    Transcribe speech in a video or audio file to captions with Workers AI Whisper (large-v3-turbo); returns SRT, VTT or JSON with word timestamps (format). Paid: 1 credit per audio minute (1 credit = 1 cent); a short balance gets 402 insufficient_balance (requiredCents, balanceCents, checkoutUrl) and no job starts. Use it when you only need the text or want to edit it before burning (then edit_transcript -> burn_captions). For burned-in subtitles in one call use caption_video; for highlights use create_clips. Audio is extracted to 16 kHz mono (video frames are not decoded). Language defaults to auto-detect; the saved glossary is applied. Results are cached per key, language, format and duration; another key cannot read them.

    Annotations the server declares

    • title: Transcribe
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • translateTranslate existing captions (subtitles or transcriptionJobId) into another language with Workers AI m2m100, keeping cue timing; returns SRT, VTT and JSON.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Translate existing captions (subtitles or transcriptionJobId) into another language with Workers AI m2m100, keeping cue timing; returns SRT, VTT and JSON. Paid: 2 credits per minute; burn: true also burns the translation into the video (+4 credits/min; needs mediaUrl or fileId and a preset). Word-level highlight timing is not kept. To transcribe, translate and burn in one call use caption_video with translateTo; for a spoken (voice) translation use dub. Saved do-not-translate glossary terms are kept as is. 402 insufficient_balance with checkoutUrl when short; failed jobs refund.

    Annotations the server declares

    • title: Translate subtitles
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Only reads 7Show 7 read-only tools
  • get_accountFree, read-only, needs a key.No findings

    Why it is in this group

    • The name "get_account" says "get": a word for reading.
    Description, as the server wrote it
    Free, read-only, needs a key. This key's spendable balance (balanceCents in credits, 1 credit = 1 cent, and as transcription seconds), the per-minute prices, and credit usage over a range (usage: per day and total, split into transcription and server burn; default the last 30 days; from and to in unix ms). response_format concise (default) returns usage totals only; detailed adds the per-day rows. Call it before a paid job or after a 402; top up with create_checkout; individual jobs are in list_jobs.

    Annotations the server declares

    • title: Get balance and usage
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_catalogFree, read-only, works without a key.No findings

    Why it is in this group

    • The name "get_catalog" says "get": a word for reading.
    Description, as the server wrote it
    Free, read-only, works without a key. Everything you can choose from, by kind: presets (built-in, approved community and, with a key, your custom presets, plus bundled fonts), styles (every caption style field with type, range and examples), voices (dub voices with tier, price and sampleUrl; filter with language and tier), platforms (where videos are posted, with safe zones), audio_visuals (the ten editorial podcast designs for audio-only input). Paginated with limit and cursor; response_format concise (default) drops nested objects such as full style JSON, detailed returns them. Pass ids you find here as preset, voice, platform or audioVisual to the job tools.

    Annotations the server declares

    • title: Read the AwesomeVideo catalog
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_glossaryRead the saved transcription glossary of this account (or key): correct spellings with their aliases (what speech-to-text writes instead) and do-not-translate terms.No findings

    Why it is in this group

    • The name "get_glossary" says "get": a word for reading.
    Description, as the server wrote it
    Read the saved transcription glossary of this account (or key): correct spellings with their aliases (what speech-to-text writes instead) and do-not-translate terms. Free, read-only; needs a key. Every transcribe and translate applies it automatically, so read it to check why a word came out as it did. Change it with update_glossary {action:'save'} or update_glossary {action:'delete'}.

    Annotations the server declares

    • title: Get saved glossary
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_jobRead any job.No findings

    Why it is in this group

    • The name "get_job" says "get": a word for reading.
    Description, as the server wrote it
    Read any job. Includes status, step (queued, transcribe, translate, burn, finalize, done, failed), progress (0-100, burn uses real ffmpeg progress), eta_seconds and estimatedCompletionAt (from media length x rolling per-step averages), pollAfterSeconds (wait that long before the next poll), cost, and an expiring result URL when the job succeeded. A batch id returns the batch view (counts and item jobs). A failed caption job with resumable:true can be restarted with resume_job.

    Annotations the server declares

    • title: Get job
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_presetsFree, read-only, needs a key.No findings

    Why it is in this group

    • The name "get_presets" says "get": a word for reading.
    Description, as the server wrote it
    Free, read-only, needs a key. action list (default) returns only YOUR saved presets, not the 34 built-in ones: to browse built-in, community and your presets together use get_catalog kind presets (an empty list here just means you saved none). type custom (full caption styles from manage_preset, ids custom:cp_...) or brand (font, color, position and logo overlays); paginated with limit and cursor, response_format concise (default) or detailed. action get: any one preset with its full style by id, built-in (e.g. builtin:number-punch or number-punch), community or custom:cp_..., the same style JSON the web editor loads (use it as basePreset or copy and tweak it with manage_preset). action validate: check a style document (style, or basePreset + overrides) against the renderer schema before saving; returns valid, the normalized style or errors [{path, message}]. Built-in and community presets are listed by get_catalog kind presets.

    Annotations the server declares

    • title: Read your saved presets
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_reviewCheck a human review created by request_review: awaiting_review, approved (with burnJobId and, when finished, the burned video URL), rejected (note says why; nothing charged), or e…Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_review" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "note": it reads notes.
    • untrusted-inputThe name "get_review" says "get" and "review": it reads comments, which other people can write.
    • untrusted-inputThe description's first sentence says "review": it reads comments, which other people can write.
    Description, as the server wrote it
    Check a human review created by request_review: awaiting_review, approved (with burnJobId and, when finished, the burned video URL), rejected (note says why; nothing charged), or expired. Free, read-only; needs the key that created it. Poll it after sharing reviewUrl; once burnJobId exists you can also poll get_job for that burn.

    Annotations the server declares

    • title: Get review
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_jobsList recent jobs (transcribe, burn, caption_video, clips, dub, trim...) newest first for this key, or for every key on the account when the key is claimed: id, kind, status, create…Reads text others writeNo findings

    Why it is in this group

    • The name "list_jobs" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "list" and "url": it reads web pages, which anyone can write.
    Description, as the server wrote it
    List recent jobs (transcribe, burn, caption_video, clips, dub, trim...) newest first for this key, or for every key on the account when the key is claimed: id, kind, status, created time, credits charged, and a download URL while the result is still stored. Free, read-only; needs a key. Paginated: limit (default 50, max 100) and cursor = nextCursor from the previous page. For one job's full status, progress and files use get_job; for credit totals per day use get_account.

    Annotations the server declares

    • title: List jobs
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

252 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 2 private-data tools breaks every one.

Reads private data2
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write18
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out7
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
deny to break every path
{
  "permissions": {
    "deny": [
      "mcp__awesomevideo__get_review",
      "mcp__awesomevideo__preview"
    ]
  }
}

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Remote posture

What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.

Sign-in required, OAuth metadata published

Looked at Oct 31, 2026, 23:18 UTC, unchanged since Oct 31, 2026. No credentials were sent and no tool was called. What is looked at.

Reachable
yes
HTTP status of an anonymous initialize
401
tools/list served without credentials
no
Tools that change things, listed without credentials
0
Protocol version
not observed
WWW-Authenticate on 401
yes
resource_metadata in WWW-Authenticate
https://api.awesomevideoeditor.com/.well-known/oauth-protected-resource/mcp/oauth
RFC 9728 protected resource metadata
https://api.awesomevideoeditor.com/.well-known/oauth-protected-resource/mcp/oauth
Authorization servers
https://api.awesomevideoeditor.com
Legacy HTTP+SSE transport
no
Dynamic client registration
yes
Client ID metadata documents
no

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The server marks "remove_silences" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "remove_silences" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "preview" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "preview" says "preview": a word for reading.

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 0.5.1. Values in angle brackets are yours to fill in.

claude mcp add --transport http awesomevideo https://api.awesomevideoeditor.com/mcp
claude mcp add --transport http awesomevideo https://api.awesomevideoeditor.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__awesomevideo__get_review",
      "mcp__awesomevideo__get_glossary",
      "mcp__awesomevideo__get_job",
      "mcp__awesomevideo__list_jobs",
      "mcp__awesomevideo__get_catalog",
      "mcp__awesomevideo__get_presets",
      "mcp__awesomevideo__get_account"
    ],
    "ask": [
      "mcp__awesomevideo__create_key",
      "mcp__awesomevideo__import_url",
      "mcp__awesomevideo__caption_video",
      "mcp__awesomevideo__transcribe",
      "mcp__awesomevideo__batch",
      "mcp__awesomevideo__translate",
      "mcp__awesomevideo__dub",
      "mcp__awesomevideo__generate_metadata",
      "mcp__awesomevideo__request_review",
      "mcp__awesomevideo__resume_job",
      "mcp__awesomevideo__burn_captions",
      "mcp__awesomevideo__estimate",
      "mcp__awesomevideo__preview",
      "mcp__awesomevideo__create_clips",
      "mcp__awesomevideo__create_checkout"
    ],
    "deny": [
      "mcp__awesomevideo__edit_transcript",
      "mcp__awesomevideo__remove_silences",
      "mcp__awesomevideo__upload",
      "mcp__awesomevideo__manage_preset",
      "mcp__awesomevideo__update_glossary"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as awesomevideo. Review it before you use it.

Capability tags behind 18 rules
  • mcp__awesomevideo__import_url untrusted-input, outbound
  • mcp__awesomevideo__caption_video untrusted-input, outbound
  • mcp__awesomevideo__transcribe untrusted-input, outbound
  • mcp__awesomevideo__batch untrusted-input
  • mcp__awesomevideo__translate untrusted-input
  • mcp__awesomevideo__dub untrusted-input
  • mcp__awesomevideo__generate_metadata untrusted-input
  • mcp__awesomevideo__remove_silences untrusted-input
  • mcp__awesomevideo__request_review untrusted-input, outbound
  • mcp__awesomevideo__get_review private-data, untrusted-input
  • mcp__awesomevideo__list_jobs untrusted-input
  • mcp__awesomevideo__resume_job untrusted-input, outbound
  • mcp__awesomevideo__burn_captions untrusted-input, outbound
  • mcp__awesomevideo__estimate untrusted-input
  • mcp__awesomevideo__preview private-data, untrusted-input
  • mcp__awesomevideo__manage_preset untrusted-input
  • mcp__awesomevideo__create_clips untrusted-input, outbound
  • mcp__awesomevideo__create_checkout untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/com.awesomevideoeditor/awesomevideo/verify?hash=e08611fe07b37bc002ab95ee649766a5040cde0133591f1e2dd3623d750b8aab" | jq -e '.changed == false'

Pinned hash e08611fe07b3, from Nov 4, 2026, 17:17 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/com.awesomevideoeditor/awesomevideo/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for com.awesomevideoeditor/awesomevideo
[![anlyon.dev](https://anlyon.dev/badge/com.awesomevideoeditor/awesomevideo.svg)](https://anlyon.dev/servers/com.awesomevideoeditor/awesomevideo)

Source: MCP Registry. Synced Nov 4, 2026, 18:17 UTC.