Koskamo

RelaySwitch MCP

An official MCP server that exposes every AI model available on the RelaySwitch platform as tools within compatible clients like Claude Code, Cursor, and Cline. It allows agents to perform chat, compare multiple models, search the web, embed text, rerank documents, transcribe audio, and generate images, video, and speech, all managed through a single prepaid key with built-in routing and observability.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

RelaySwitch MCP logo, by RelaySwitchVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-08Operated by RelaySwitch
You need:Get a keyPaid by card or in USDT, USDC, BTC, ETH, SOL, no KYC
MCP endpoint (Streamable HTTP)
https://api.relayswitch.io/mcp
Vendor documentation

What its tools do

15 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Can change data (3)

15 of 15 have a description · 15 of 15 declare behavior hints · 12 of 15 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to relayswitch.io ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Ask any chat model or compare multiple models side-by-side for a second opinion
  • Generate images, video, speech, or music using specific model settings
  • Search the web, embed text into vectors, or rerank documents for relevance
  • Transcribe audio or video files from a URL into text

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
relayswitch 2026-10-19
MCP protocol negotiated in check
2025-11-25
Tools
15 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
4 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

RelaySwitch serves abliterated and uncensored models on one prepaid key and one base URL (https://api.relayswitch.io/v1), plus image, video, speech, music and 3D models, priced per million tokens or per unit in USD. No subscription. Read prices live: list_models and list_media_models need no key and return every model id with its price. estimate prices a chat request before it is sent. proof reports the daily real-model check per model. Every model on the key is a tool here, so the client can call in whichever model suits each step. chat sends a conversation to any chat model id (system for instructions, image_urls for the models that see images, web_search for live results). compare sends the same messages to 2 to 5 models at once and returns each answer with its cost and time, for a second opinion or to pick a model. search runs one web search. embed turns text into vectors with an embedding model, rerank orders documents by relevance to a query, transcribe turns an audio or video file at a URL into text. list_models returns every text model with its type (chat, embedding, rerank, transcription) and price. Make media here instead of in a separate app: generate runs any image, video, speech, music or 3D model id with its settings ({ model, input }) and waits up to wait_seconds for the files; a video takes minutes, so when it answers still running, call generation with the id to keep waiting. media_model lists one model's settings (params, with the values each takes) and its price per tier; media_quote prices the exact call before it runs. generations lists what the organization has made, newest first. Files are URLs on this API, kept 30 days, returned as resource links; a finished image also comes back inline. Chain the tools by passing an output URL into another model's image_urls (image to video, an edit, image-upscaler). A failed generation is refunded in full. Four prompts hand you a saved chain of these tools with the user's inputs filled in: picture_to_clip, product_shot_set, clip_with_voiceover and upscale_and_animate. chat, compare, search, embed, rerank, transcribe, media_quote, generate, generation and generations need the caller's key in the Authorization header of the MCP request (Bearer sk-relay-live-...). Keys come from https://app.relayswitch.io/console.

Tools

15 advertised

list_models — List every text model and price
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every chat, embedding, rerank and transcription model on RelaySwitch with its id, type, the routes and tools that take it, our price (per million tokens, or per audio minute for transcription), the developer's list price where recorded, the wire formats it answers (openai, anthropic, gemini) and its specs. Image, video, speech, music and 3D models are in list_media_models. No key needed. Live from GET /v1/catalog.

list_models input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "type": {
      "enum": [
        "chat",
        "embedding",
        "rerank",
        "transcription"
      ],
      "type": "string",
      "description": "Only models of this type. Default: every text model."
    },
    "search": {
      "type": "string",
      "description": "A substring of the model id or name (opus, deepseek, uncensored...)."
    },
    "developer": {
      "type": "string",
      "description": "Only models from this developer (Anthropic, OpenAI, Google, DeepSeek...)."
    }
  }
}
list_models annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_media_models — List image, video, speech and 3D models and prices
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every media model on RelaySwitch with its id, kind, endpoint, unit and price per image, second, generation or minute at each setting, next to the developer's price where recorded. No key needed. Live from GET /v1/catalog/media.

list_media_models input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "kind": {
      "enum": [
        "image",
        "video",
        "audio",
        "3d"
      ],
      "type": "string",
      "description": "Only models of this kind."
    },
    "search": {
      "type": "string",
      "description": "A substring of the model id or name (nano-banana, veo, kling...)."
    }
  }
}
list_media_models annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
media_model — One media model's settings and prices
Advertised by the server during the last successful anonymous check.
Advertised read-only

Everything generate needs to call one image, video, speech, music or 3D model: each setting under params with its type, the values it takes, its range and its default, and the price per unit at each setting under pricing. No key needed. Live from GET /v1/catalog/media.

media_model input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "model"
  ],
  "properties": {
    "model": {
      "type": "string",
      "description": "A media model id from list_media_models (nano-banana-2, kling-3.0-pro, seedance-2, elevenlabs-v3, image-upscaler...)."
    }
  }
}
media_model annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
estimate — Estimate what a request costs
Advertised by the server during the last successful anonymous check.
Advertised read-only

The cost of a request on every chat model (or the ids given), cheapest first, with the developer's list cost and the saving. Give input_tokens, or a prompt / messages to count from. With the caller's key, prices are the key's own (price locks included). Live from POST /v1/estimate.

estimate input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "models": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 200,
      "description": "Model ids to price. Default: every chat model, cheapest first."
    },
    "prompt": {
      "type": "string",
      "description": "Text to estimate the prompt tokens from, instead of input_tokens."
    },
    "messages": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "role",
          "content"
        ],
        "properties": {
          "role": {
            "type": "string"
          },
          "content": {
            "type": "string"
          }
        }
      },
      "description": "Chat messages to estimate from, instead of input_tokens."
    },
    "input_tokens": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Prompt tokens. Give this or a prompt / messages to count from."
    },
    "output_tokens": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Completion tokens. Default 1000."
    }
  }
}
estimate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
media_quote — Price a generation before running it
Advertised by the server during the last successful anonymous check.
Advertised read-only

What generate would charge for exactly these settings, at the key's own rates: the units billed, the charge, and the developer's own price for the same request where one is on record. The settings are checked as a real request's would be, so a wrong value fails here, not at the model. Nothing runs and nothing is charged. Needs the key. Live from POST /v1/generations/quote.

media_quote input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "model",
    "input"
  ],
  "properties": {
    "input": {
      "type": "object",
      "description": "The model's settings, as media_model lists them under params: prompt, size or aspect_ratio, resolution, duration, image_urls, text, voice... A setting left out takes the model's default.",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "model": {
      "type": "string",
      "description": "A media model id from list_media_models."
    }
  }
}
media_quote annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
proof — Daily real-model check
Advertised by the server during the last successful anonymous check.
Advertised read-only

Whether each model is still the model it says it is: every day one fixed prompt goes to every model and the verdict per model is stable, changed, failed or unchecked, with the time of the last check and how long the answer has been unchanged. No key needed. Live from GET /v1/proof.

proof input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "model": {
      "type": "string",
      "description": "One model id. Default: every model."
    }
  }
}
proof annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
chat — Send a chat request
Advertised by the server during the last successful anonymous check.
Open-world

Sends messages to any chat model id through POST /v1/chat/completions and returns the answer, the token usage and what the request cost. system adds instructions, image_urls lets a model that sees images look at them (a file generate made works), web_search lets the model search while it answers. Billed to the key in the MCP request's Authorization header (Bearer sk-relay-live-...); without one it fails.

chat input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "model",
    "messages"
  ],
  "properties": {
    "model": {
      "type": "string",
      "description": "A chat model id from list_models."
    },
    "system": {
      "type": "string",
      "maxLength": 100000,
      "description": "Instructions placed ahead of the conversation as a system message."
    },
    "messages": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "role",
          "content"
        ],
        "properties": {
          "role": {
            "enum": [
              "system",
              "user",
              "assistant"
            ],
            "type": "string"
          },
          "content": {
            "type": "string"
          }
        }
      },
      "minItems": 1,
      "description": "The conversation, OpenAI chat format."
    },
    "image_urls": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "uri"
      },
      "maxItems": 8,
      "description": "Image URLs attached to the last user message, for the chat models that take images (input_modalities in list_models). A file generate made works."
    },
    "max_tokens": {
      "type": "integer",
      "maximum": 128000,
      "minimum": 1,
      "description": "Cap on completion tokens."
    },
    "web_search": {
      "type": "boolean",
      "description": "True: the model may search the web while it answers (billed per search, the price in GET /v1/catalog server_tools)."
    },
    "temperature": {
      "type": "number",
      "maximum": 2,
      "minimum": 0
    }
  }
}
chat annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
compare — Ask several models the same thing
Advertised by the server during the last successful anonymous check.
Open-world

Sends the same conversation (or one prompt) to 2 to 5 chat model ids at once through POST /v1/chat/completions and returns every answer side by side with its token usage, cost and time, plus the total. For a second opinion from another model, or to pick the model that answers a kind of question best. Completions are capped at max_tokens each (default 1024). Each model is billed to the key in the MCP request's Authorization header; a model that fails is reported and not charged.

compare input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "models"
  ],
  "properties": {
    "models": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 5,
      "minItems": 2,
      "description": "2 to 5 chat model ids from list_models, asked at the same time."
    },
    "prompt": {
      "type": "string",
      "description": "One user message, in place of messages."
    },
    "system": {
      "type": "string",
      "maxLength": 100000,
      "description": "Instructions placed ahead of the conversation as a system message."
    },
    "messages": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "role",
          "content"
        ],
        "properties": {
          "role": {
            "enum": [
              "system",
              "user",
              "assistant"
            ],
            "type": "string"
          },
          "content": {
            "type": "string"
          }
        }
      },
      "minItems": 1,
      "description": "The conversation, OpenAI chat format."
    },
    "image_urls": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "uri"
      },
      "maxItems": 8,
      "description": "Image URLs attached to the last user message, for the chat models that take images (input_modalities in list_models). A file generate made works."
    },
    "max_tokens": {
      "type": "integer",
      "maximum": 32000,
      "minimum": 1,
      "description": "Cap on completion tokens per model. Default 1024."
    },
    "temperature": {
      "type": "number",
      "maximum": 2,
      "minimum": 0
    }
  }
}
compare annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
search — Search the web
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

One web search through POST /v1/search: titles, URLs, snippets and publish dates, up to 10 results, optionally only from the last day, week, month or year. Billed as one search to the key in the MCP request's Authorization header (the price in GET /v1/catalog server_tools); a search that fails is not charged.

search input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 400,
      "minLength": 1,
      "description": "What to search for, up to 400 characters."
    },
    "freshness": {
      "enum": [
        "day",
        "week",
        "month",
        "year"
      ],
      "type": "string",
      "description": "Only pages published inside this window."
    },
    "max_results": {
      "type": "integer",
      "maximum": 10,
      "minimum": 1,
      "description": "1 to 10 results. Default 5."
    }
  }
}
search annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
embed — Turn text into vectors
Advertised by the server during the last successful anonymous check.
Advertised read-only

Embeds one text or up to 64 through POST /v1/embeddings with an embedding model id from list_models (type embedding) and returns one vector per text, in order, with the token usage and the charge. Billed to the key in the MCP request's Authorization header.

embed input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "model",
    "input"
  ],
  "properties": {
    "input": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "maxItems": 64,
          "minItems": 1
        }
      ],
      "description": "One text, or up to 64 texts, to embed."
    },
    "model": {
      "type": "string",
      "description": "An embedding model id from list_models (type embedding)."
    }
  }
}
embed annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
rerank — Rank documents by relevance
Advertised by the server during the last successful anonymous check.
Advertised read-only

Orders up to 100 documents by relevance to a query through POST /v1/rerank with a rerank model id from list_models (type rerank): each result's index into documents, its score and its text, best first. Billed per input token to the key in the MCP request's Authorization header.

rerank input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "model",
    "query",
    "documents"
  ],
  "properties": {
    "model": {
      "type": "string",
      "description": "A rerank model id from list_models (type rerank)."
    },
    "query": {
      "type": "string",
      "maxLength": 4000,
      "minLength": 1,
      "description": "What the documents are ranked against."
    },
    "top_n": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "How many to return, best first. Default: all."
    },
    "documents": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "maxItems": 100,
      "minItems": 1,
      "description": "Up to 100 texts to rank."
    }
  }
}
rerank annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
transcribe — Transcribe audio or video
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Turns the speech in an audio or video file at an https URL (25 MB at most; a file generate made works) into text through POST /v1/audio/transcriptions, or into English with translate. Use a transcription model id from list_models (type transcription). Billed per second of audio to the key in the MCP request's Authorization header; a request that fails is not charged.

transcribe input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "model",
    "audio_url"
  ],
  "properties": {
    "model": {
      "type": "string",
      "description": "A transcription model id from list_models (type transcription)."
    },
    "prompt": {
      "type": "string",
      "maxLength": 1000,
      "description": "Names or words to spell right, or the text that came before."
    },
    "language": {
      "type": "string",
      "maxLength": 16,
      "minLength": 2,
      "description": "The spoken language as an ISO-639-1 code (en, es, zh...), when known."
    },
    "audio_url": {
      "type": "string",
      "format": "uri",
      "description": "An https URL of the audio or video file: mp3, mp4, m4a, wav, webm, ogg, flac or aac, 25 MB at most. A file generate made works."
    },
    "translate": {
      "type": "boolean",
      "description": "True: translate the speech into English instead (the models that can)."
    }
  }
}
transcribe annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
generate — Generate an image, video, speech, music or 3D file
Advertised by the server during the last successful anonymous check.
Open-world

Runs any media model id from list_media_models with its settings (see media_model) through POST /v1/generations, waits up to wait_seconds for the files, and returns the generation: a link per file (kept 30 days), a finished image inline, and the charge. A video that is still running when the wait ends is returned as it stands; call generation with its id to keep waiting. Charged to the key in the MCP request's Authorization header when the model accepts the task; a failed generation is refunded in full. To go from an image to a video or an edit, pass the image's URL in image_urls.

generate input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "model",
    "input"
  ],
  "properties": {
    "input": {
      "type": "object",
      "description": "The model's settings, as media_model lists them under params: prompt, size or aspect_ratio, resolution, duration, image_urls, text, voice... A setting left out takes the model's default.",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "model": {
      "type": "string",
      "description": "A media model id from list_media_models."
    },
    "preview": {
      "type": "boolean",
      "description": "Default true: a finished image comes back inline as image content besides its link."
    },
    "wait_seconds": {
      "type": "integer",
      "maximum": 120,
      "minimum": 0,
      "description": "Seconds to wait for the files before answering with the generation as it stands, 0 to 120. Images usually finish inside the default 60; a video takes minutes, so follow up with generation."
    }
  }
}
generate annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
generation — A generation's status and files
Advertised by the server during the last successful anonymous check.
Advertised read-only

One generation by id: its status, progress, files and charge, waiting up to wait_seconds for it to finish first. Use it after generate answers with a video still running. Needs the key the generation was made with. Live from GET /v1/generations/{id}.

generation input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^gen_[0-9a-f]{24}$",
      "description": "The generation id generate answered with (gen_ then 24 hex characters)."
    },
    "preview": {
      "type": "boolean",
      "description": "Default true: a finished image comes back inline as image content besides its link."
    },
    "wait_seconds": {
      "type": "integer",
      "maximum": 120,
      "minimum": 0,
      "description": "Seconds to wait for the files before answering with the generation as it stands, 0 to 120. Images usually finish inside the default 60; a video takes minutes, so follow up with generation."
    }
  }
}
generation annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generations — List the generations made on this key's organization
Advertised by the server during the last successful anonymous check.
Advertised read-only

The organization's generations, newest first, each with its status, model, files and charge: the asset library behind generate. Filter by kind, model or status; page with before. Files are kept 30 days. Needs the key. Live from GET /v1/generations.

generations input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "kind": {
      "enum": [
        "image",
        "video",
        "audio",
        "3d"
      ],
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "How many, newest first. Default 20."
    },
    "model": {
      "type": "string",
      "description": "Only this media model id."
    },
    "before": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Only generations created before this Unix time (seconds, or the ms next_before of the last page)."
    },
    "status": {
      "enum": [
        "queued",
        "running",
        "succeeded",
        "failed"
      ],
      "type": "string"
    }
  }
}
generations annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

4 advertised

picture_to_clip — Picture to clip

Advertised by the server during the last successful anonymous check.

Make a picture from a description, then animate it into a video clip. No key to get it; the tools it calls bill your key.

picture
What the picture shows: subject, setting, light, style. Leave out to take it from the conversation.
motion
What moves in the clip and how the camera moves. Default: natural motion with a slow push-in.
aspect_ratio
Aspect ratio. Default 16:9.
image_model
A image model id from list_media_models. Default nano-banana-2.
video_model
A video model id from list_media_models. Default veo-3.1-fast.
max_usd
Optional budget in USD: the agent stops before the first generate if the quoted total is above it.
product_shot_set — Product shot set

Advertised by the server during the last successful anonymous check.

One product prompt rendered in several aspect ratios on one image model. No key to get it; the tools it calls bill your key.

product
The product and the shot: what it is, the surface, the light, the background. Leave out to take it from the conversation.
ratios
Aspect ratios, comma separated. Default 1:1, 4:5, 9:16, 16:9.
model
A image model id from list_media_models. Default nano-banana-2.
resolution
The image model's resolution setting (1K, 2K, 4K on Nano Banana 2). Default 2K where the model takes it.
max_usd
Optional budget in USD: the agent stops before the first generate if the quoted total is above it.
clip_with_voiceover — Clip with voice-over

Advertised by the server during the last successful anonymous check.

A video clip and a spoken voice-over of your script, made side by side. No key to get it; the tools it calls bill your key.

scene
What the clip shows. Leave out to take it from the conversation.
script
The words the voice-over says. Leave out to take it from the conversation.
voice
A voice the speech model takes (media_model lists them). Default: the model's own.
aspect_ratio
Aspect ratio. Default 16:9.
video_model
A video model id from list_media_models. Default veo-3.1-fast.
voice_model
A speech model id from list_media_models. Default elevenlabs-v3.
max_usd
Optional budget in USD: the agent stops before the first generate if the quoted total is above it.
upscale_and_animate — Upscale and animate

Advertised by the server during the last successful anonymous check.

Upscale an image, then animate the sharper copy into a video clip. No key to get it; the tools it calls bill your key.

image_url
The image to upscale: a file URL from generate, or any public http(s) image URL. Leave out to take it from the conversation.
motion
What moves in the clip and how the camera moves. Default: natural motion with a slow push-in.
scale
How many times larger. Default 2.
aspect_ratio
Aspect ratio. Default 16:9.
video_model
A video model id from list_media_models. Default veo-3.1-fast.
max_usd
Optional budget in USD: the agent stops before the first generate if the quoted total is above it.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
359 ms
95th percentile latency
359 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 359 ms · metadata changed · 15 tool(s), 4 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http relayswitch-mcp https://api.relayswitch.io/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add relayswitch-mcp --url https://api.relayswitch.io/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable relayswitch-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "relayswitch-mcp": {
      "url": "https://api.relayswitch.io/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "relayswitch-mcp": {
      "type": "streamableHttp",
      "url": "https://api.relayswitch.io/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start relayswitch-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "relayswitch-mcp": {
      "type": "http",
      "url": "https://api.relayswitch.io/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http relayswitch-mcp https://api.relayswitch.io/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.relayswitch.io/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "relayswitch-mcp": {
      "serverUrl": "https://api.relayswitch.io/mcp"
    }
  }
}

Let your agent find its tools

Find servers like RelaySwitch MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run RelaySwitch MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing