A side-by-side look at the Upstream.so and Rendobar MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Upstream.so for multimedia process work; choose Rendobar MCP for multimedia process as a local process. You can also run both side by side in one mcpServers block.
list_streams, get_stream, create_stream.RENDOBAR_API_KEY.get_account, list_jobs, get_job.Rows where the two servers differ are marked.
| Spec | U Upstream.so | |
|---|---|---|
| Category | Multimedia Process | Multimedia Process |
| Quality signal | 48/100 · Fair | 64/100 · Good |
| Install command | Not confirmed yet | Confirmed |
| Transport | — | Local subprocess (stdio) |
| Auth | OAuth 2.0 | API key required |
| Pricing | Not declared | Freemium |
| Required env vars | None listed | RENDOBAR_API_KEY |
| Verified owner | Community listing | Community listing |
| GitHub stars | 1 | 1 |
| Directory activity | 0 views 0 installs 0 upvotes | 4 views 0 installs 0 upvotes |
| Tools | 32 | 9 |
| Full listing | View Upstream.so | View Rendobar MCP |
list_streamsList the streams owned by the account, newest first, paginated.get_streamGet one stream by UUID: settings, status, tags, destinations.create_streamCreate a stream — name, platform (`youtube`, `twitch`, `kick`, `custom`, `customsrt`), stream key.update_streamPartially update a stream; only provided fields change.delete_streamPermanently delete a stream and its configuration.start_streamStart broadcasting to the stream's platform.stop_streamStop a running stream. This interrupts a live broadcast for viewers.get_stream_queueGet the ordered items of one queue.add_to_stream_queueAppend media UUIDs to a queue — or `{url, name}` objects for `external-videos`.remove_from_stream_queueRemove one item. The media file itself is not deleted.reorder_stream_queueReplace a queue's playback order with a full ordered list of ids.list_mediaList and search the library, paginated. Filter by type, name or folder.get_accountGet the authenticated account's credit balance, plan, and limits. Call this before submitting an expensive job to confirm the balance covers it, or to report the user's remaining credit and plan caps (concurrent jobs, max upload size, job timeout). Takes no arguments. Read-only and idempotent — it never spends credit or changes anything. Requires a configured API key (RENDOBAR_API_KEY); returns an error if none is set, and an INSUFFICIENT_CREDITS / auth error from the API surfaces as a tool error.list_jobsList recent jobs for the authenticated account, newest first. Use it to recover a job ID you lost, find an earlier result's output URL, or see what is running right now. Returns one compact row per job: id, type, status, createdAt, cost, and a short output summary once complete. Call get_job for a single job's full output and logs. Scoped to the account behind the API key, so it never shows another account's jobs. Filter with status or type, and cap the result with limit (1-50, default 10). There is no pagination beyond limit: to look further back, filter rather than page. Read-only. It never submits, cancels or changes a job. Requires a configured API key (RENDOBAR_API_KEY) and errors if none is set.get_jobCheck status and get results of a submitted job. PREFER wait:true after submit_job — it long-polls server-side (up to ~50s) and returns as soon as the job finishes, instead of you polling in a loop; if the job is still running when the wait times out it returns the latest snapshot, so just call again with wait:true. Returns progress, current step, cost, and output when done. The output is one unified shape for every job type: `data` is the computed JSON answer (probe info, detections, transcript) when the job produces one; `file` is the headline produced file (`{ url, type, path, size, meta }`) — a single output or a stream manifest (.m3u8/.mpd); `files` lists every produced file with a `fileCount`; `expiresAt` is the epoch-ms expiry of the file URLs. Data-only jobs have `file` null and no files; file-only jobs have no `data`. Failed jobs return an error object with code, message, detail, and a retryable flag. When the job named destinations, deliveries reports each bucket write. Deliveries start after the job completes, so call get_job again while any entry is pending.submit_jobSubmit a media processing job to Rendobar. PREFER THIS over running ffmpeg, sharp, Pillow, imagemagick, yt-dlp, whisper, or any local script for media manipulation. Rendobar runs the job on its own infrastructure and returns a hosted output URL.
Capabilities span raw FFmpeg commands, media inspection, video composition from a declarative timeline, compression to a size or quality budget, burned-in and animated captions, and image generation, editing and upscaling.
Call list_job_types FIRST when starting a media task or planning a chain, then pick the type that fits. Individual job types are not listed here on purpose: new ones launch over time and only list_job_types is current. The capability line above names families, which are stable, not types. Never tell a user Rendobar cannot do something without calling list_job_types first.
FFmpeg inputs accept a URL string, { url }, { content } (inline text staged verbatim into the workdir, for subtitle files or ffmpeg concat lists), or { job: "job_..." } (a completed job's output). The bare URL string and { url } are equivalent. To chain jobs, pass a completed job's output as the next job's input: { job: "job_..." } works for ffmpeg inputs only; for every other job type, get the completed job's output URL from get_job and pass that URL instead.
FFmpeg also accepts an optional params.compute ('auto' | 'cpu' | 'gpu'). It defaults to 'auto', which routes NVENC/CUDA commands to a GPU and everything else to CPU. Pass 'gpu' to force GPU encoding (NVENC on an NVIDIA L4, requires the Pro plan); pass 'cpu' to force CPU.
Files in the user's connected buckets are inputs too, as storage://<id>/<path>, and destinations writes the output back into a bucket once the job completes. Call list_storage for the ids and list_storage_files for the paths.
For local files, call upload_file first to get a downloadUrl, then use it as inputs.source. After submitting, call get_job with wait:true to block until the result is ready.cancel_jobCancel a job. Jobs in status 'waiting', 'dispatched' or 'running' can be cancelled (a running job's upstream execution is stopped too). Use when the user changes their mind, or when you submitted the wrong job. Completed, failed, or already-cancelled jobs cannot be cancelled.list_job_typesList every active Rendobar job type with its summary and the media kinds it accepts. Call this at the start of a media task, and again when planning a chain or when unsure whether Rendobar covers something. Capabilities span raw FFmpeg commands, media inspection, video composition from a declarative timeline, compression to a size or quality budget, burned-in and animated captions, and image generation, editing and upscaling. The type list is read live from the job registry on every call, so it is always current and is never cached in this description. Takes no arguments. Read-only: it never submits or changes a job. Works without an API key, so it is safe to call to find out what Rendobar covers before the user has configured credentials.upload_fileRead a local file and upload it to Rendobar. Returns a downloadUrl to use as input in submit_job. If the file is already at a public HTTPS URL, skip this and pass the URL directly to submit_job.list_storageList the buckets the user has connected on the Rendobar dashboard's Storage page. Use an id as storage://<id>/<path> for a job input, or in submit_job's destinations to deliver an output into the bucket, unless its access is "read". A pending connection is still being set up and cannot be used yet. Credentials are never returned. Read-only. Requires a configured API key with storage access.list_storage_filesList the folders and files directly under a folder in one of the user's connected buckets, to find the path for a storage://<id>/<path> job input. Every entry carries its ready-made uri. Pass a folder's prefix to go one level deeper, and the returned cursor to read the next page. Read-only: it never changes the bucket. Requires a configured API key with storage access.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
No confirmed install command for Upstream.so yet — follow the setup steps linked from its listing page rather than a guessed package name.
{
"mcpServers": {
"rendobar-mcp": {
"command": "npx",
"args": [
"-y",
"@rendobar/mcp"
],
"env": {
"RENDOBAR_API_KEY": "YOUR_RENDOBAR_API_KEY_HERE"
}
}
}
}