A side-by-side look at the Rendobar MCP and Templated MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Rendobar MCP for multimedia process work as a local process; choose Templated for multimedia process as a local process. You can also run both side by side in one mcpServers block.
RENDOBAR_API_KEY.get_account, list_jobs, get_job.TEMPLATED_API_KEY.create_render, get_render, list_renders.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Multimedia Process | Multimedia Process |
| Quality signal | 64/100 · Good | 63/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | API key required | Not declared |
| Pricing | Freemium | Not declared |
| Required env vars | RENDOBAR_API_KEY | TEMPLATED_API_KEY |
| Verified owner | Community listing | Community listing |
| GitHub stars | 1 | 3 |
| Directory activity | 5 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 9 | 25 |
| Full listing | View Rendobar MCP | View Templated |
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.create_renderRender a Templated template into an image (JPG, PNG or WebP), a PDF or an MP4 video, with new text, images and colors in its layers. Use this when the user wants a finished design from one of their templates, such as a social media post, banner, OG image, certificate or invoice. Templated fills the saved template with the exact values given: this is template rendering, not AI image generation. Pass the template ID and 'layers' keyed by the layer names from get_template_layers; names the template doesn't have are rejected before anything is rendered. Multi-page templates render every page, or only the pages listed in 'pages'. Each output counts toward the account's render usage. Returns the render with its file URL (one render per page for multi-page templates).get_renderGet one render by ID with its status, format, size and file URL. Use this to check whether a render has finished or to find its URL again.list_rendersList the renders in the connected Templated account, newest first, 25 per page by default (max 100). Use this to find a render's ID or file URL, for example to merge PDFs with merge_renders. Returns each render's id, url, status, format, size and template.delete_renderPermanently delete a render from the connected Templated account; it can't be restored. Use this when the user asks to remove a render. Takes the render ID from list_renders and returns a confirmation.merge_rendersMerge several renders into one PDF, in the order given, for example one certificate or invoice per recipient. Image renders become PDF pages. Use this after creating the individual renders. Each merge counts toward the account's render usage. Returns the URL of the merged PDF. With host set to false the PDF itself is returned inline instead, which only works for PDFs up to 100 KB.list_templatesList the templates in the connected Templated account, 25 per page by default (max 100), optionally filtered by name (query), size (width, height) or tags. Use this first to find the template ID for create_render, get_template_layers or update_template. Returns each template's id, name, size, thumbnail, folder, and layer and page counts.get_templateGet one template's details by ID: name, size, background, thumbnail, tags, folder, and layer and page counts. Use this to check a template's size or settings; get_template_layers returns its editable layers.get_template_layersList a template's layers with their names, types and current values (text, image_url, colors, fonts, position and size). Use this before create_render: the layer names are the keys create_render accepts in 'layers'. Covers every page of a multi-page template; get_template_pages groups the layers by page.get_template_pagesList the pages of a multi-page or multi-size template, each with its name, width, height and layers keyed by layer name. Use this to render specific pages with create_render ('pages') or to edit pages with update_template, which accepts the same shape.create_templateCreate a new template in the connected Templated account from layers, for example a social media post, banner, OG image, certificate or invoice. Use this when none of the existing templates fits or the account has no templates yet. Each layer has a unique name in 'layer' and a 'type': text, image, shape or rating. Shape layers draw rectangles, circles and other shapes from SVG content in 'html'. For a multi-page or multi-size template (several sizes in one template), pass 'pages' in place of 'layers'. Returns the new template; its ID can be rendered right away with create_render.update_templateChange an existing template: name, description, size, background, default video duration, layers or pages. Use this to edit a design, resize it, or add sizes to a multi-size template. Layers are matched by their 'layer' name: an existing layer is updated in place and a new name is added. Top-level 'layers' apply to the first page; 'pages' reaches the others. With replaceLayers true, layers missing from the request are deleted. To move a layer, send both x and y (a missing coordinate is set to 0). In 'pages', a page name that doesn't exist yet is added and an existing page has its layers updated. On a multi-size template, set width and height per page inside 'pages'; top-level width and height are rejected there because they would resize every page. Returns the updated template.clone_templateCopy a template, with all its layers and pages, into a new template in the same account. Use this to make a variation without changing the original. Returns the copy, which keeps the original's name unless 'name' is given.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.
{
"mcpServers": {
"rendobar-mcp": {
"command": "npx",
"args": [
"-y",
"@rendobar/mcp"
],
"env": {
"RENDOBAR_API_KEY": "YOUR_RENDOBAR_API_KEY_HERE"
}
}
}
}
{
"mcpServers": {
"templated": {
"command": "npx",
"args": [
"-y",
"mcp-server-templated"
],
"env": {
"TEMPLATED_API_KEY": "YOUR_TEMPLATED_API_KEY_HERE"
}
}
}
}