# Cloudinary Structured Metadata MCP server

> Lets an AI client create and manage Cloudinary structured metadata fields, datasources, and rules.

- Repository: https://github.com/cloudinary/structured-metadata-mcp
- Page: https://hostedmcp.org/servers/cloudinary/structured-metadata-mcp
- Transport: stdio, remote
- Stars: 0
- License: MIT
- Latest version: 0.6.2

## Install

### Claude Code

```sh
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>' structured-metadata-mcp -- npx -y @cloudinary/structured-metadata-mcp
```

### Cursor (`~/.cursor/mcp.json`)

```json
{
  "mcpServers": {
    "structured-metadata-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@cloudinary/structured-metadata-mcp"
      ],
      "env": {
        "CLOUDINARY_API_SECRET": "<YOUR_CLOUDINARY_API_SECRET>",
        "CLOUDINARY_API_KEY": "<CLOUDINARY_API_KEY>",
        "CLOUDINARY_CLOUD_NAME": "<CLOUDINARY_CLOUD_NAME>"
      }
    }
  }
}
```

### VS Code (`.vscode/mcp.json`)

```json
{
  "servers": {
    "structured-metadata-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@cloudinary/structured-metadata-mcp"
      ],
      "env": {
        "CLOUDINARY_API_SECRET": "<YOUR_CLOUDINARY_API_SECRET>",
        "CLOUDINARY_API_KEY": "<CLOUDINARY_API_KEY>",
        "CLOUDINARY_CLOUD_NAME": "<CLOUDINARY_CLOUD_NAME>"
      }
    }
  }
}
```

### VS Code CLI

```sh
code --add-mcp '{"name":"structured-metadata-mcp","type":"stdio","command":"npx","args":["-y","@cloudinary/structured-metadata-mcp"],"env":{"CLOUDINARY_API_SECRET":"<YOUR_CLOUDINARY_API_SECRET>","CLOUDINARY_API_KEY":"<CLOUDINARY_API_KEY>","CLOUDINARY_CLOUD_NAME":"<CLOUDINARY_CLOUD_NAME>"}}'
```

### Claude Desktop (`claude_desktop_config.json`)

```json
{
  "mcpServers": {
    "structured-metadata-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@cloudinary/structured-metadata-mcp"
      ],
      "env": {
        "CLOUDINARY_API_SECRET": "<YOUR_CLOUDINARY_API_SECRET>",
        "CLOUDINARY_API_KEY": "<CLOUDINARY_API_KEY>",
        "CLOUDINARY_CLOUD_NAME": "<CLOUDINARY_CLOUD_NAME>"
      }
    }
  }
}
```

### Codex

```sh
codex mcp add structured-metadata-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/structured-metadata-mcp
```

### Codex config.toml (`~/.codex/config.toml`)

```toml
[mcp_servers.structured-metadata-mcp]
command = "npx"
args = ["-y", "@cloudinary/structured-metadata-mcp"]

[mcp_servers.structured-metadata-mcp.env]
CLOUDINARY_API_SECRET = "<YOUR_CLOUDINARY_API_SECRET>"
CLOUDINARY_API_KEY = "<CLOUDINARY_API_KEY>"
CLOUDINARY_CLOUD_NAME = "<CLOUDINARY_CLOUD_NAME>"
```

### Gemini CLI

```sh
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>' structured-metadata-mcp npx -- -y @cloudinary/structured-metadata-mcp
```

### Gemini settings.json (`~/.gemini/settings.json`)

```json
{
  "mcpServers": {
    "structured-metadata-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@cloudinary/structured-metadata-mcp"
      ],
      "env": {
        "CLOUDINARY_API_SECRET": "<YOUR_CLOUDINARY_API_SECRET>",
        "CLOUDINARY_API_KEY": "<CLOUDINARY_API_KEY>",
        "CLOUDINARY_CLOUD_NAME": "<CLOUDINARY_CLOUD_NAME>"
      }
    }
  }
}
```

## Environment variables

| Name | Required | Secret | Description |
|---|---|---|---|
| `CLOUDINARY_API_SECRET` | yes | yes | Your Cloudinary API secret. Found in Dashboard > Settings > Access Keys. |
| `CLOUDINARY_API_SECRET` | yes | yes | Your Cloudinary API secret. Found in Dashboard > Settings > Access Keys. |
| `CLOUDINARY_API_KEY` | yes | no | Your Cloudinary API key. Found in Dashboard > Settings > Access Keys. |
| `CLOUDINARY_API_KEY` | yes | no | Your Cloudinary API key. Found in Dashboard > Settings > Access Keys. |
| `CLOUDINARY_CLOUD_NAME` | yes | no | Your Cloudinary cloud name. Find it in your Cloudinary Dashboard. |
| `CLOUDINARY_CLOUD_NAME` | yes | no | Your Cloudinary cloud name. Find it in your Cloudinary Dashboard. |
| `CLOUDINARY_URL` | no | no |  |

## FAQ

### What authentication methods are supported?

The server uses your Cloudinary API key, API secret, and cloud name for authentication, which can be provided via environment variables or a single CLOUDINARY_URL.

### Can I use dynamic mode to save tokens?

Yes, you can enable dynamic mode by passing the --mode dynamic flag, which exposes meta-tools for progressive discovery instead of all tools at once.
