Cloudinary MCP Server

Official

Upload, search, transform and organise your Cloudinary media library from a chat window

Local + remotestreamable-httpssestdioTypeScriptMIT

What is the Cloudinary MCP server?

Most developer tooling work still happens through a UI a human drives. Cloudinary MCP server moves it into the conversation instead. Connects assistants to a Cloudinary media library so they can upload files, run search and visual search, apply transformations, manage folders and tags.

The short version

Connects assistants to a Cloudinary media library so they can upload files, run search and visual search, apply transformations, manage folders and tags.

Getting it running

The server ships on npm as @cloudinary/asset-management-mcp, so your MCP client can launch it on demand — there is no separate build step. Add the server block to your client's configuration, restart it, and the tools register themselves.

The tools it exposes

The server publishes 20 tools. What each one is for:

  • upload-asset — Upload an image, video or raw file from a local path or remote URL, setting public ID, folder and tags at ingest time
  • search-assets — Run a structured expression search across the media library with sorting, aggregation and pagination
  • visual-search-assets — Find assets by visual similarity or image content rather than by filename or tag
  • transform-asset — Apply a Cloudinary transformation string to an existing asset via the explicit API, with optional CDN invalidation
  • get-tx-reference — Return Cloudinary's full transformation reference so the model can compose valid transformation strings
  • get-asset-details — Fetch the full metadata record for one asset by asset ID
  • asset-update — Update an existing asset — tags, contextual metadata, moderation state and other mutable fields
  • asset-rename — Change an asset's public ID, optionally overwriting an existing target
  • delete-asset — Delete an asset by asset ID
  • list-images — List image resources in the product environment with filtering and pagination
  • list-videos — List video resources in the product environment
  • list-files — List raw (non-image, non-video) files

What it needs from you

Configuration is passed through the environment: CLOUDINARY_CLOUD_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET, CLOUDINARY_URL, CLOUDINARY_MCP_APPS. Treat anything key-shaped as a real credential — scope it to the minimum the server needs, and rotate it if it ever lands in a shared config.

A Cloudinary account. The hosted endpoint authorises over OAuth; running the npm package locally needs Node.js 18+ and a cloud name, API key and API secret.

Things to watch

  • It runs with your machine's permissions. That is convenient and also the reason to think about what you point it at before you approve a tool call.
  • With 20 tools registered it takes up a noticeable share of the context window; turn it off in projects that never touch Cloudinary.
  • Keep per-call confirmation enabled while you learn its behaviour; it is the cheapest safeguard you have.

How it compares

This sits in the developer tooling group, where several servers overlap in what they claim to do but differ sharply once you actually set them up. Cloudinary's toolset — upload-asset, search-assets, visual-search-assets and 17 more — is a fair guide to whether it matches your workflow. It is maintained by Cloudinary rather than a third party, which usually means auth handling and breaking changes are dealt with faster.

We check each listing at SyncDev against the project's documentation before it goes live — if something here drifts out of date, it is a bug worth reporting.

What you can do with it

Bulk clean-up after a migration

Point the assistant at a folder of freshly imported assets and have it normalise public IDs, apply a consistent tag scheme, and flag anything that failed to upload.

Prototyping transformations

Ask for a crop-and-optimise variant, look at the result, iterate on the transformation string in conversation, then copy the final string into your delivery code.

Assembling a hand-off package

Search for every asset tagged for a campaign, confirm the list, and generate a single ZIP archive to send to an agency or partner.

Finding a picture you cannot name

Use visual search to locate an asset by describing what is in the frame when nobody remembers the filename or tag.

Available tools

ToolWhat it does
upload-assetUpload an image, video or raw file from a local path or remote URL, setting public ID, folder and tags at ingest time.
search-assetsRun a structured expression search across the media library with sorting, aggregation and pagination.
visual-search-assetsFind assets by visual similarity or image content rather than by filename or tag.
transform-assetApply a Cloudinary transformation string to an existing asset via the explicit API, with optional CDN invalidation.
get-tx-referenceReturn Cloudinary's full transformation reference so the model can compose valid transformation strings.
get-asset-detailsFetch the full metadata record for one asset by asset ID.
asset-updateUpdate an existing asset — tags, contextual metadata, moderation state and other mutable fields.
asset-renameChange an asset's public ID, optionally overwriting an existing target.
delete-assetDelete an asset by asset ID.
list-imagesList image resources in the product environment with filtering and pagination.
list-videosList video resources in the product environment.
list-filesList raw (non-image, non-video) files.
list-tagsList the tags currently in use across the library.
create-folderCreate a new folder in the asset hierarchy.
search-foldersSearch the folder tree by expression.
generate-archiveBuild a ZIP or TGZ archive from a set of assets matched by tag, prefix or public ID.
generate-imageGenerate a new image from a text prompt and store it in the library.
generate-image-from-imagesGenerate a new image conditioned on one or more existing assets.
get-generation-taskPoll the status of an asynchronous generation task.
get-usage-detailsReport account usage — credits, storage, bandwidth and transformation counts.

How to install the Cloudinary MCP server

claude mcp add cloudinary --transport http https://asset-management.mcp.cloudinary.com/mcp

Configuration

A Cloudinary account. The hosted endpoint authorises over OAuth; running the npm package locally needs Node.js 18+ and a cloud name, API key and API secret.

VariableDescriptionRequired
CLOUDINARY_CLOUD_NAMECloud name of the Cloudinary product environment you want the server to act on. Local runs only.e.g. demoOptional
CLOUDINARY_API_KEYAPI key for the product environment. Local runs only; the hosted endpoint uses OAuth instead.e.g. 123456789012345Optional
CLOUDINARY_API_SECRETAPI secret paired with the API key. Local runs only.Optional
CLOUDINARY_URLSingle-string alternative that encodes cloud name, key and secret together.e.g. cloudinary://key:secret@cloud-nameOptional
CLOUDINARY_MCP_APPSControls the interactive MCP UI apps (asset gallery, asset details, upload view). Set to 'none' to disable them.e.g. asset-gallery,asset-detailsOptional

Example prompts to try

  • Upload every image in ./launch-assets to the folder spring-2026 and tag them launch,hero.
  • Find all videos in the marketing folder uploaded in the last 30 days and show me their durations.
  • Transform the asset 'homepage-banner' with c_fill,w_1600,h_600/f_auto,q_auto and invalidate the CDN cache.
  • Build a ZIP archive of everything tagged export-ready and tell me how big it is.

Frequently asked questions

No. Cloudinary hosts the asset management server at https://asset-management.mcp.cloudinary.com/mcp, and any client that supports remote MCP servers can point at that URL and complete an OAuth sign-in. Installing the @cloudinary/asset-management-mcp npm package locally is optional and mainly useful if you want to pin a version, run it in CI, or authenticate with a raw API key instead of OAuth.