# MCP server: images, video and speech in AI apps > Connect Claude, ChatGPT, Cursor, VS Code and other MCP apps to Nano Banana, GPT Image, Seedance, Kling and Gemini TTS: sign in or use a key, the tools, prices and security. Source: https://zurelay.com/docs/mcp Give Claude, ChatGPT, Cursor, VS Code and other AI apps Zurelay’s image, video and speech models. Connect the MCP server once, sign in, and ask for a picture, a clip or a voiceover in the chat: it’s made with Nano Banana, GPT Image, Seedance, Kling, Wan or Gemini TTS and paid from your Zurelay balance, at the same prices as the API. MCP server URL: ``` https://api.zurelay.com/mcp ``` It’s a remote server (Streamable HTTP), so there is nothing to install. Sign in from the app, or send an API key. It’s listed in the official MCP Registry as `com.zurelay/mcp`. ## What it does | Tool | What it does | Cost | | --- | --- | --- | | `generate_image` | Makes an image from a prompt, or edits and combines up to 14 or 16 pictures. Returns links and a preview the AI can look at. | From $0.02 an image | | `generate_video` | Starts a video from a prompt, a first (and last) frame, or reference images, with sound. Returns its id and price. | From $0.03 a second, when it’s done | | `generate_speech` | Reads text aloud in one of 30 voices, in the style you describe. Returns an MP3 or WAV link. | From about $0.009 a minute | | `get_result` | Fetches an image, video or speech request that was still running. | Free | | `list_models` | Lists the models with their prices, sizes and lengths, and your balance. | Free | | `create_upload_link` | A one-time link for uploading a file from your computer, for apps that can run commands. | Free | Chat models aren’t tools here: an app that runs on a model already has one. To run Claude Code, Cursor or any other app on Zurelay’s chat models, change its base URL instead (see [Integrations](https://zurelay.com/docs/integrations)). ## Connect your app Every app below can sign in: you approve it once on zurelay.com and never paste a key. Apps that can’t sign in, or setups that shouldn’t open a browser (servers, CI), send an API key instead. ### Claude (web, desktop and mobile) [Add Zurelay to Claude](https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Zurelay&connectorUrl=https%3A%2F%2Fapi.zurelay.com%2Fmcp) opens the form already filled in. Or by hand: 1. Go to **Customize**, then **Connectors**, choose **Add** and then **Add custom connector**. 2. Name it `Zurelay` and paste `https://api.zurelay.com/mcp` as the MCP server URL. Either OAuth client choice works: **Use Claude’s published identity** or **Register automatically**. Add it. 3. Choose **Connect**. Zurelay opens: sign in, pick a daily spending limit and choose **Allow**. 4. In a chat, open **+**, then **Connectors**, turn Zurelay on and ask for what you want: “Make a 16:9 poster of…”, “Animate this into a 5-second clip”, “Read this aloud in a calm voice”. Connectors work on the web, in the desktop app and on your phone, on every plan (Free allows one custom connector). On Team and Enterprise, an owner adds Zurelay under **Organization settings**, **Connectors** (**Add**, **Custom**, **Web**); each member then connects their own Zurelay account. ### Claude Code Terminal: ```bash claude mcp add --transport http zurelay https://api.zurelay.com/mcp ``` Then type `/mcp` in Claude Code, pick `zurelay` and sign in in the browser that opens (or run `claude mcp login zurelay`). With an API key instead, no browser needed: Terminal: ```bash claude mcp add --transport http zurelay https://api.zurelay.com/mcp \ --header "Authorization: Bearer $ZURELAY_API_KEY" ``` It’s added for the current project; add `--scope user` to have it everywhere, or `--scope project` to share it through the project’s `.mcp.json` (keep keys out of shared files: `.mcp.json` reads `${ZURELAY_API_KEY}` from the environment). ### ChatGPT 1. In **Settings**, **Security and login**, turn on **Developer mode** (Plus, Pro, Business, Enterprise and Edu; a workspace admin may have to allow it). 2. Open [ChatGPT Plugins](https://chatgpt.com/plugins) and press **+**. Name it Zurelay and enter `https://api.zurelay.com/mcp` as the connection URL, with OAuth. 3. Sign in to Zurelay and choose **Allow**. In a chat, open **+**, choose **Developer mode** and pick Zurelay. ChatGPT signs in only: it can’t send an API key. ### Cursor [Add Zurelay to Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=zurelay&config=eyJ1cmwiOiJodHRwczovL2FwaS56dXJlbGF5LmNvbS9tY3AifQ==), then choose **Connect** next to it in Cursor’s MCP settings to sign in. Or add it to `~/.cursor/mcp.json` (every project) or `.cursor/mcp.json` (one project): **Sign in** (`~/.cursor/mcp.json`): ```json { "mcpServers": { "zurelay": { "url": "https://api.zurelay.com/mcp" } } } ``` **API key** (`~/.cursor/mcp.json`): ```json { "mcpServers": { "zurelay": { "url": "https://api.zurelay.com/mcp", "headers": { "Authorization": "Bearer ${env:ZURELAY_API_KEY}" } } } } ``` ### VS Code [Add Zurelay to VS Code](https://vscode.dev/redirect/mcp/install?name=zurelay&config=%7B%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.zurelay.com%2Fmcp%22%7D), or add it to `.vscode/mcp.json` in your project (or run **MCP: Add Server** from the Command Palette and choose HTTP). VS Code asks you to sign in the first time Copilot’s agent mode uses it. With an API key, it prompts for the key once and keeps it encrypted: **Sign in** (`.vscode/mcp.json`): ```json { "servers": { "zurelay": { "type": "http", "url": "https://api.zurelay.com/mcp" } } } ``` **API key** (`.vscode/mcp.json`): ```json { "inputs": [ { "type": "promptString", "id": "zurelay-key", "description": "Zurelay API key", "password": true } ], "servers": { "zurelay": { "type": "http", "url": "https://api.zurelay.com/mcp", "headers": { "Authorization": "Bearer ${input:zurelay-key}" } } } } ``` ### Codex, Gemini CLI and other apps Any app that speaks MCP over Streamable HTTP works. Codex signs in with `codex mcp login zurelay` and Gemini CLI with `/mcp auth zurelay`; for a key, most apps take an `Authorization` header: **Codex** (`~/.codex/config.toml`): ```toml # or: codex mcp add zurelay --url 'https://api.zurelay.com/mcp' --bearer-token-env-var ZURELAY_API_KEY [mcp_servers.zurelay] url = "https://api.zurelay.com/mcp" bearer_token_env_var = "ZURELAY_API_KEY" ``` **Gemini CLI** (`~/.gemini/settings.json`): ```json { "mcpServers": { "zurelay": { "httpUrl": "https://api.zurelay.com/mcp", "headers": { "Authorization": "Bearer $ZURELAY_API_KEY" } } } } ``` **Zed** (`settings.json`): ```json { "context_servers": { "zurelay": { "url": "https://api.zurelay.com/mcp" } } } ``` **Cline** (`cline_mcp_settings.json`): ```json { "mcpServers": { "zurelay": { "type": "streamableHttp", "url": "https://api.zurelay.com/mcp", "headers": { "Authorization": "Bearer YOUR_ZURELAY_KEY" } } } } ``` **Other apps** (`mcp.json`): ```json { "mcpServers": { "zurelay": { "type": "http", "url": "https://api.zurelay.com/mcp", "headers": { "Authorization": "Bearer YOUR_ZURELAY_KEY" } } } } ``` ## Signing in or an API key **Signing in** is the easy and safer way. The app opens zurelay.com, where you sign in with an emailed code, choose the workspace it spends from and a daily spending limit, and allow it. Zurelay then adds a key named after the app, such as “Claude (MCP)”, to your [Keys page](https://zurelay.com/app/keys), with that limit. The app never sees an API key: it holds a token that lasts an hour and a refresh token that changes every time it’s used, and both work only at the MCP server, never on the rest of the API. Change the limit on the Keys page, or revoke the key there to disconnect the app. **An API key** goes in the `Authorization: Bearer zr_live_…` header. Everything set on the key applies: its budgets, rate limit, allowed models and allowed IP addresses. Make a key just for the app, with a daily budget, so a busy agent can’t spend more than you planned (see [Key limits and rules](https://zurelay.com/docs/key-rules)). Apps like Claude and ChatGPT call from their own servers, so leave allowed IP addresses empty on a key meant for them. ## Prices, links and waiting - The same prices as the API: see each model on the [models page](https://zurelay.com/models), or ask the AI to call `list_models`. Nothing is charged for a request that fails, and a video is charged only once it’s done. - A tool answers within about 35 seconds. Images and speech are usually done by then; anything slower (most videos) comes back with an id, and the AI calls `get_result`, which waits up to 45 seconds more each time. - Results are links to our storage, valid for 24 hours. Images and videos stay in your [Library](https://zurelay.com/app/library) for 30 days, and every request shows on your [Requests page](https://zurelay.com/app/requests) like any other. - Images also come back as a small preview, so the AI can see what it made and adjust. Ask it to leave previews out to save context. ## Files from your computer To edit a picture or animate a frame, the model needs the file at a link. Files already online can be passed as their `https` links. For files on your computer, apps that can run commands (Claude Code, Cursor, Codex) use `create_upload_link`: one PNG, JPEG, WebP, MP4, MOV, MP3 or WAV of up to 20 MB, uploaded within 15 minutes. The link it gives back works for 2 hours, and the file is deleted after 2 days. Upload links need credit on the account. What the agent does: ``` # 1. The agent calls create_upload_link and gets a one-time URL. # 2. It uploads the file with curl: curl -sS -T ./product-photo.png 'https://api.zurelay.com/mcp/uploads/…' # {"url":"https://…/inputs/2026-10-05/….png","type":"image/png","bytes":482113,…} # 3. It passes that url to generate_image's reference_images or generate_video's first_frame. ``` > **Tip:** In Claude or ChatGPT in the browser, a picture you attach to the chat isn’t passed to tools. Give the AI a link to the picture instead, or use Claude Code or Cursor, which can upload it. ## Security - Sign-in follows the MCP specification: OAuth 2.1 with PKCE (S256 only), registered redirect addresses only, and one-time codes that last 5 minutes. A code used twice ends whatever it was exchanged for. - Tokens are random and stored only as SHA-256 hashes. Access tokens last an hour and work only at the MCP server. Refresh tokens change on every use; one used again more than a minute later was copied, so the connection ends and its key is revoked. - Every connection is a key on your Keys page with its own daily limit, visible to your workspace’s members. Revoking it, or leaving the workspace, disconnects the app. - The consent page can’t be shown inside another site, and tells you when an app isn’t one Zurelay recognizes and where it will return you. - Upload links are signed, take one file and expire in 15 minutes; uploaded files are deleted after 2 days. - Each key and workspace has its own rate limit for MCP calls, and every call in a batch counts. ## For developers The server speaks MCP 2025-11-25 (and 2025-06-18, 2025-03-26 and 2024-11-05) over Streamable HTTP: POST JSON-RPC to `https://api.zurelay.com/mcp` and get JSON back. It keeps no sessions, so there are no server-sent events and `GET` answers 405. Without a token it answers 401 with `WWW-Authenticate` pointing at `https://api.zurelay.com/.well-known/oauth-protected-resource/mcp`; the authorization server’s metadata is at `https://api.zurelay.com/.well-known/oauth-authorization-server`, with dynamic client registration. cURL: ```bash curl https://api.zurelay.com/mcp \ -H "Authorization: Bearer $ZURELAY_API_KEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "generate_image", "arguments": { "prompt": "A lighthouse at dusk, oil painting", "model": "nano-banana-pro" } } }' ``` ## Troubleshooting - **The app keeps asking to sign in:** the key it made was revoked, or its sign-in wasn’t used for a year. Connect it again. - **“Your Zurelay balance is empty”** or **“reached its daily budget”**: add credit on the [Billing page](https://zurelay.com/app/billing), or raise the key’s limit on the Keys page. - **“This token belongs to an app connected through Zurelay’s MCP server”**: you sent an app’s token to the API. Use an API key there. - **A video seems stuck:** ask the AI to call `get_result` again; videos take 1 to 5 minutes, sometimes longer when a model is busy. - [Image generation](https://zurelay.com/docs/images): Sizes, aspect ratios and prices for every image model. - [Video generation](https://zurelay.com/docs/video): Lengths, resolutions, sound and references for every video model. - [Text to speech](https://zurelay.com/docs/speech): The 30 voices, styles and prices. - [Integrations](https://zurelay.com/docs/integrations): Run Claude Code, Cursor and other apps on Zurelay’s chat models.