https://api.rendobar.com/mcp gives an MCP client the whole platform: submit a job, upload a file, poll status, chain a completed job into the next one, and manage API keys. Connect it with one command over OAuth, no API key to copy.
Connect
- Claude Code
- claude.ai
- Other MCP clients
What can I do with it?
Calllist_job_types first. It returns every active job type fresh, so it never goes stale like a hardcoded list would. Pass type (for example "compose") to get that one job type’s complete parameter schema instead, with per-field documentation: ranges, defaults, units, and usage notes. Agents should do this before authoring a complex payload like a compose timeline.
{ job: "job_..." } inside submit_job’s inputs chains a completed job straight into the next one today for ffmpeg inputs. For any other job type, pass the prior job’s output URL (from get_job) as a plain URL input instead.
A failed call returns isError: true with { error: { code, message, retryable } } instead of throwing, so the agent can react to it. See the error catalogue for codes.
Can I use it from my phone?
A phone has no filesystem the agent can reach, so a media file routes through a page you open yourself.1
Connect on claude.ai mobile
Settings, Connectors, Add custom connector, paste
https://api.rendobar.com/mcp, approve.2
Ask for the edit
“Trim this video to the first 10 seconds and burn in captions.” Claude calls
list_job_types, then upload_media with no files declared, since it can’t read anything off your phone.3
Tap the upload link
upload_media returns a pageUrl. Claude sends it to you in the chat. Open it, pick the file from your camera roll, and it uploads.4
Get the result in chat
Claude polls
get_upload({ wait: true }) until the asset is ready, calls submit_job with its URL, then get_job({ wait: true }), and replies with the finished clip.From an agent with shell access
An agent that can run shell commands skips the upload page and PUTs bytes directly.1
Declare the file
Pass the filename and size. A known size gets you a presigned URL right away: a single PUT under 100 MB, part URLs above it.
2
PUT the bytes
3
Finalize the asset
url. For a multipart upload, pass parts: [{ partNumber, etag }] collected from each part’s PUT response.4
Submit the job
{ jobId: "job_9c31", status: "waiting" }.5
Chain a second job off the first
Pass the completed job’s id as the next job’s input. No download, no re-upload.
6
Wait for the result
output.file.url.Run the local server for direct disk access
The hosted server can’t read your disk, so even a shell-capable agent goes through the presigned-URL handshake above.@rendobar/mcp, the local stdio server, skips that: its upload_file tool reads a file off disk and uploads it in a single call.
It has the same storage tools as the hosted server, plus list_storage_files for finding a path inside a connected bucket.
Get an API key at app.rendobar.com, Settings, API keys.
- Claude Code
- Claude Desktop
- Other clients
Needs Node 20.10 or later. The server checks at startup and exits with a clear message if it’s older.
How do I limit what it can reach?
Approving a connection grants access to one workspace, and you can take it back. Account, Security lists every app you have connected, what each one can reach, and the workspace it was granted in. Revoking cuts an app off and forces it to ask again from the start. One caveat worth knowing: revoking deletes the grant and every stored token, so the app cannot get new access or renew what it has, but an access token it is already holding stays valid until it expires. That is under an hour. An app connected before 2026-09-13 cannot calllist_storage, because storage scopes did not exist
when you approved it. Revoke it and connect again to allow Storage.
See also
- FFmpeg reference: the job type
submit_jobcalls in every example on this page - How a job works: the job lifecycle and the
outputshape - Error codes: every code behind an
isErrorresponse - Plan limits: file size caps and concurrency by plan
- Scopes: what an app is asking for, and how to narrow it