Lets AI assistants manage Cloudinary upload presets, named transformations, streaming profiles, webhooks, and folder mappings using natural language.
Also known as cloudinary/environment-config-mcp, environment-config-mcp, @cloudinary/environment-config-mcp
- Stars
- 0
- Tools
- —
- Downloads, 30 days
- 1,290
- Latest version
- 0.6.4
- Last commit
- Nov 14, 2026
- License
- MIT
What is Cloudinary Environment Config MCP?
Cloudinary Environment Config lets AI assistants manage Cloudinary upload presets, named transformations, streaming profiles, webhooks, and folder mappings using natural language.
Summary generated from the project's README
About Cloudinary Environment Config MCP server
Managing Cloudinary environment settings through natural language is what this MCP server enables for developers. It connects AI assistants like Claude Desktop, Cursor, Gemini, Windsurf, and VS Code directly to your Cloudinary account to handle configuration tasks without leaving your coding environment. You can use it to control named transformations, upload presets, streaming profiles, webhooks, and folder mappings.
To set up the server, you must provide your Cloudinary cloud name, API key, and API secret via environment variables or a single Cloudinary URL. The server runs locally using Node.js 20.19.0 or later and can be installed as a desktop extension or via npx. It supports a dynamic mode to reduce token usage by allowing the AI to discover specific tools on demand rather than loading every available command into the context window at once.
What you can do with it
- 1Modify image transformationsAsk your AI assistant to create or update specific named transformations for your media assets.
- 2Configure upload presetsInstruct the AI to set up new upload presets with specific settings like auto tagging.
- 3Manage video streaming profilesUse natural language to adjust bitrate settings or create custom profiles for high-resolution video delivery.
- 4Set up event webhooksDirect the AI to configure webhook triggers that respond to specific upload events.
- 5Organize folder mappingsTell the AI to map specific folders to predefined templates for automated organization.
Written from the project's README. Every use case is checked against a quote from it.
How to install Cloudinary Environment Config MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall Cloudinary Environment Config MCP in Claude Code
$ claude mcp add --env 'CLOUDINARY_API_SECRET=<YOUR_CLOUDINARY_API_SECRET>' --env 'CLOUDINARY_API_KEY=<CLOUDINARY_API_KEY>' --env 'CLOUDINARY_CLOUD_NAME=<CLOUDINARY_CLOUD_NAME>' environment-config-mcp -- npx -y @cloudinary/environment-config-mcpInstall Cloudinary Environment Config MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"environment-config-mcp": {
"command": "npx",
"args": [
"-y",
"@cloudinary/environment-config-mcp"
],
"env": {
"CLOUDINARY_API_SECRET": "<YOUR_CLOUDINARY_API_SECRET>",
"CLOUDINARY_API_KEY": "<CLOUDINARY_API_KEY>",
"CLOUDINARY_CLOUD_NAME": "<CLOUDINARY_CLOUD_NAME>"
}
}
}
}Install Cloudinary Environment Config MCP in VS Code
.vscode/mcp.json
{
"servers": {
"environment-config-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@cloudinary/environment-config-mcp"
],
"env": {
"CLOUDINARY_API_SECRET": "<YOUR_CLOUDINARY_API_SECRET>",
"CLOUDINARY_API_KEY": "<CLOUDINARY_API_KEY>",
"CLOUDINARY_CLOUD_NAME": "<CLOUDINARY_CLOUD_NAME>"
}
}
}
}Install Cloudinary Environment Config MCP in VS Code CLI
$ code --add-mcp '{"name":"environment-config-mcp","type":"stdio","command":"npx","args":["-y","@cloudinary/environment-config-mcp"],"env":{"CLOUDINARY_API_SECRET":"<YOUR_CLOUDINARY_API_SECRET>","CLOUDINARY_API_KEY":"<CLOUDINARY_API_KEY>","CLOUDINARY_CLOUD_NAME":"<CLOUDINARY_CLOUD_NAME>"}}'Install Cloudinary Environment Config MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"environment-config-mcp": {
"command": "npx",
"args": [
"-y",
"@cloudinary/environment-config-mcp"
],
"env": {
"CLOUDINARY_API_SECRET": "<YOUR_CLOUDINARY_API_SECRET>",
"CLOUDINARY_API_KEY": "<CLOUDINARY_API_KEY>",
"CLOUDINARY_CLOUD_NAME": "<CLOUDINARY_CLOUD_NAME>"
}
}
}
}Install Cloudinary Environment Config MCP in Codex
$ codex mcp add environment-config-mcp --env 'CLOUDINARY_API_SECRET=<YOUR_CLOUDINARY_API_SECRET>' --env 'CLOUDINARY_API_SECRET=<YOUR_CLOUDINARY_API_SECRET>' --env 'CLOUDINARY_API_KEY=<CLOUDINARY_API_KEY>' --env 'CLOUDINARY_API_KEY=<CLOUDINARY_API_KEY>' --env 'CLOUDINARY_CLOUD_NAME=<CLOUDINARY_CLOUD_NAME>' --env 'CLOUDINARY_CLOUD_NAME=<CLOUDINARY_CLOUD_NAME>' -- npx -y @cloudinary/environment-config-mcpInstall Cloudinary Environment Config MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.environment-config-mcp] command = "npx" args = ["-y", "@cloudinary/environment-config-mcp"] [mcp_servers.environment-config-mcp.env] CLOUDINARY_API_SECRET = "<YOUR_CLOUDINARY_API_SECRET>" CLOUDINARY_API_KEY = "<CLOUDINARY_API_KEY>" CLOUDINARY_CLOUD_NAME = "<CLOUDINARY_CLOUD_NAME>"
Install Cloudinary Environment Config MCP in Gemini CLI
$ gemini mcp add -s user -e 'CLOUDINARY_API_SECRET=<YOUR_CLOUDINARY_API_SECRET>' -e 'CLOUDINARY_API_SECRET=<YOUR_CLOUDINARY_API_SECRET>' -e 'CLOUDINARY_API_KEY=<CLOUDINARY_API_KEY>' -e 'CLOUDINARY_API_KEY=<CLOUDINARY_API_KEY>' -e 'CLOUDINARY_CLOUD_NAME=<CLOUDINARY_CLOUD_NAME>' -e 'CLOUDINARY_CLOUD_NAME=<CLOUDINARY_CLOUD_NAME>' environment-config-mcp npx -- -y @cloudinary/environment-config-mcpInstall Cloudinary Environment Config MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"environment-config-mcp": {
"command": "npx",
"args": [
"-y",
"@cloudinary/environment-config-mcp"
],
"env": {
"CLOUDINARY_API_SECRET": "<YOUR_CLOUDINARY_API_SECRET>",
"CLOUDINARY_API_KEY": "<CLOUDINARY_API_KEY>",
"CLOUDINARY_CLOUD_NAME": "<CLOUDINARY_CLOUD_NAME>"
}
}
}
}Configuration
CLOUDINARY_API_SECRETRequiredSecretYour Cloudinary API secret. Found in Dashboard > Settings > Access Keys.
CLOUDINARY_API_SECRETRequiredSecretYour Cloudinary API secret. Found in Dashboard > Settings > Access Keys.
CLOUDINARY_API_KEYRequiredYour Cloudinary API key. Found in Dashboard > Settings > Access Keys.
CLOUDINARY_API_KEYRequiredYour Cloudinary API key. Found in Dashboard > Settings > Access Keys.
CLOUDINARY_CLOUD_NAMERequiredYour Cloudinary cloud name. Find it in your Cloudinary Dashboard.
CLOUDINARY_CLOUD_NAMERequiredYour Cloudinary cloud name. Find it in your Cloudinary Dashboard.
CLOUDINARY_URL
| Name | Description | |
|---|---|---|
| CLOUDINARY_API_SECRET | Your Cloudinary API secret. Found in Dashboard > Settings > Access Keys. | RequiredSecret |
| CLOUDINARY_API_SECRET | Your Cloudinary API secret. Found in Dashboard > Settings > Access Keys. | RequiredSecret |
| CLOUDINARY_API_KEY | Your Cloudinary API key. Found in Dashboard > Settings > Access Keys. | Required |
| CLOUDINARY_API_KEY | Your Cloudinary API key. Found in Dashboard > Settings > Access Keys. | Required |
| CLOUDINARY_CLOUD_NAME | Your Cloudinary cloud name. Find it in your Cloudinary Dashboard. | Required |
| CLOUDINARY_CLOUD_NAME | Your Cloudinary cloud name. Find it in your Cloudinary Dashboard. | Required |
| CLOUDINARY_URL | — |
Automated checks
Ran Nov 13, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachablePass
- Open source license (OSI)Pass
- Commit or release in the last yearPass
- Package name not close to a popular packagePass
- Remote endpoint uses HTTPSPass
- Destructive tools are labelledNot checked
- No hidden instructions to the modelPass
- No critical advisory in the package or its dependenciesPass
README
View on GitHubCloudinary Environment Config MCP Server
Summary
Cloudinary Environment Config MCP Server: Connects AI assistants (including Claude Desktop, Cursor, Gemini, Windsurf, and VS Code) directly to your Cloudinary account. Use natural language to manage named transformations, create and update upload presets, configure adaptive streaming profiles for video delivery, set up event-driven webhooks (triggers), and manage upload folder mappings. Designed for developers who want to control Cloudinary environment configuration without leaving their AI-powered coding environment.
Table of Contents
Installation
The MCP server requires Node.js 20.19.0 or later.
Install the MCP server as a Desktop Extension using the pre-built mcp-server.mcpb file:
Simply drag and drop the mcp-server.mcpb file onto Claude Desktop to install the extension.
The MCP bundle package includes the MCP server and all necessary configuration. Once installed, the server will be available without additional setup.
[!NOTE] MCP bundles provide a streamlined way to package and distribute MCP servers. Learn more about Desktop Extensions.
Or manually:
- Open Cursor Settings
- Select Tools and Integrations
- Select New MCP Server
- If the configuration file is empty paste the following JSON into the MCP Server Configuration:
{
"command": "npx",
"args": [
"@cloudinary/environment-config-mcp",
"start",
"--api-key",
"",
"--api-secret",
"",
"--cloud-name",
""
]
}
claude mcp add CloudinaryEnvConfig -- npx -y @cloudinary/environment-config-mcp start --api-key --api-secret --cloud-name
gemini mcp add CloudinaryEnvConfig -- npx -y @cloudinary/environment-config-mcp start --api-key --api-secret --cloud-name
Refer to Official Windsurf documentation for latest information
- Open Windsurf Settings
- Select Cascade on left side menu
- Click on
Manage MCPs. (To Manage MCPs you should be signed in with a Windsurf Account) - Click on
View raw configto open up the mcp configuration file. - If the configuration file is empty paste the full json
{
"command": "npx",
"args": [
"@cloudinary/environment-config-mcp",
"start",
"--api-key",
"",
"--api-secret",
"",
"--cloud-name",
""
]
}
Or manually:
Refer to Official VS Code documentation for latest information
- Open Command Palette
- Search and open
MCP: Open User Configuration. This should open mcp.json file - If the configuration file is empty paste the full json
{
"command": "npx",
"args": [
"@cloudinary/environment-config-mcp",
"start",
"--api-key",
"",
"--api-secret",
"",
"--cloud-name",
""
]
}
npx @cloudinary/environment-config-mcp start --api-key --api-secret --cloud-name
For a full list of server arguments, run:
npx @cloudinary/environment-config-mcp --help
Configuration
Environment Variables
The MCP server supports the following environment variables:
| Variable | Description | Required |
|---|---|---|
CLOUDINARY_CLOUD_NAME |
Your Cloudinary cloud name | Yes |
CLOUDINARY_API_KEY |
Your Cloudinary API key | Yes |
CLOUDINARY_API_SECRET |
Your Cloudinary API secret | Yes |
CLOUDINARY_URL |
Complete Cloudinary URL (alternative to individual vars) | No |
CLOUDINARY_URL Format
You can use a single CLOUDINARY_URL instead of individual variables:
CLOUDINARY_URL=cloudinary://API_KEY:API_SECRET@CLOUD_NAME
Authentication
The MCP server uses your Cloudinary API key and secret for authentication:
{
"env": {
"CLOUDINARY_CLOUD_NAME": "demo",
"CLOUDINARY_API_KEY": "123456789012345",
"CLOUDINARY_API_SECRET": "abcdefghijklmnopqrstuvwxyz12"
}
}
Available Tools
The MCP server exposes Cloudinary's Environment Configuration API as tools. Use your AI application to discover and invoke the available tools for managing transformations, upload presets, streaming profiles, triggers, and upload mappings.
Usage Examples
Example 1: Manage Named Transformations
1. List transformations: "Show me all named transformations in my account"
2. Create transformation: "Create a named transformation 't_thumbnail' with 'c_fill,w_200,h_200'"
3. Update transformation: "Update transformation 't_thumbnail' to add sharpen effect"
4. Delete transformation: "Delete the transformation named 't_old_banner'"
Example 2: Configure Upload Presets
1. List presets: "Show all my upload presets"
2. Create preset: "Create an upload preset named 'user_avatars' with auto tagging enabled"
3. Get details: "Show me the configuration for upload preset 'product_images'"
4. Update preset: "Update 'user_avatars' preset to use 'square' eager transformation"
Example 3: Manage Streaming Profiles
1. List profiles: "Show all streaming profiles"
2. Get profile: "Get details for the 'hd' streaming profile"
3. Create profile: "Create a custom streaming profile for 4K video"
4. Update profile: "Update the 'mobile' profile with lower bitrate settings"
Example 4: Configure Webhooks (Triggers)
1. List triggers: "Show all webhook triggers configured in my account"
2. Create trigger: "Create a webhook trigger for upload events to https://myapp.com/webhooks"
3. Update trigger: "Update the webhook URL for trigger [trigger-id]"
4. Delete trigger: "Delete the webhook trigger [trigger-id]"
Example 5: Manage Upload Mappings
1. List mappings: "Show all upload folder mappings"
2. Create mapping: "Map folder 'blog' to template 'https://example.com/blog/%s'"
3. Update mapping: "Update the mapping for 'blog' folder"
4. Delete mapping: "Remove the upload mapping for 'old-site' folder"
Development
Building from Source
Prerequisites
- Node.js v20 or higher
- npm, pnpm, bun, or yarn
Build Steps
# Clone the repository
git clone https://github.com/cloudinary/environment-config-mcp.git
cd environment-config-mcp
# Install dependencies
npm install
# Build the project
npm run build
# Run locally
npm start
Project Structure
environment-config-mcp/
├── src/
│ ├── hooks/ # Custom authentication hooks
│ ├── mcp-server/ # MCP server implementation
│ │ ├── server.ts # Main server (auto-generated)
│ │ └── tools/ # Generated tool wrappers
│ ├── funcs/ # API function implementations
│ └── models/ # Type definitions
├── .github/
│ └── workflows/ # CI/CD workflows
└── .speakeasy/ # Speakeasy configuration
Contributions
While we value contributions to this MCP Server, the code is generated programmatically. Any manual changes to generated files will be overwritten on the next generation.
What you can contribute:
- ✅ Custom hooks in
src/hooks/ - ✅ Documentation improvements
- ✅ Bug reports and feature requests
Generated files (do not edit):
- ❌
src/mcp-server/server.ts - ❌
src/mcp-server/tools/*.ts - ❌
src/funcs/*.ts - ❌
src/models/*.ts
We look forward to hearing your feedback. Feel free to open a PR or issue with a proof of concept and we'll do our best to include it in a future release.
MCP Server Created by Speakeasy
Progressive Discovery
MCP servers with many tools can bloat LLM context windows, leading to increased token usage and tool confusion. Dynamic mode solves this by exposing only a small set of meta-tools that let agents progressively discover and invoke tools on demand.
To enable dynamic mode, pass the --mode dynamic flag when starting your server:
{
"mcpServers": {
"CloudinaryEnvConfig": {
"command": "npx",
"args": ["@cloudinary/environment-config-mcp", "start", "--mode", "dynamic"],
// ... other server arguments
}
}
}
In dynamic mode, the server registers only the following meta-tools instead of every individual tool:
list_tools: Lists all available tools with their names and descriptions.describe_tool_input: Returns the input schema for one or more tools by name.execute_tool: Executes a tool by name with its arguments.list_scopes: Lists the scopes available on the server.
This approach significantly reduces the number of tokens sent to the LLM on each request, which is especially useful for servers with a large number of tools.
You can combine dynamic mode with scope and tool filters:
{
"mcpServers": {
"CloudinaryEnvConfig": {
"command": "npx",
"args": ["@cloudinary/environment-config-mcp", "start", "--mode", "dynamic", "--scope", "admin"],
// ... other server arguments
}
}
}
Cloudinary Environment Config MCP questions
How do I add Cloudinary Environment Config MCP to Claude Code?
Run claude mcp add --env 'CLOUDINARY_API_SECRET=<YOUR_CLOUDINARY_API_SECRET>' --env 'CLOUDINARY_API_KEY=<CLOUDINARY_API_KEY>' --env 'CLOUDINARY_CLOUD_NAME=<CLOUDINARY_CLOUD_NAME>' environment-config-mcp -- npx -y @cloudinary/environment-config-mcp in your terminal. Add --scope user to make it available in every project.
How do I add Cloudinary Environment Config MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What can I manage with this server?
You can manage named transformations, upload presets, adaptive streaming profiles, event-driven webhooks (triggers), and upload folder mappings.
How do I authenticate with Cloudinary?
The server uses your Cloudinary API key and secret for authentication, which can be provided via environment variables or a single CLOUDINARY_URL.
How can I reduce token usage in my AI client?
You can enable dynamic mode by passing the --mode dynamic flag, which uses meta-tools to discover and invoke tools on demand instead of loading all tools at once.