AI Gateway MCP
This server is an AI Gateway MCP connector that lets your chat app generate and edit pictures, video and voice with 400+ models, plus generate text, transcribe audio, and inspect models and spend — all billed to your own Vercel AI Gateway credits.
Images:
generate_image(text-to-image),edit_image(restyle, background removal, outpaint, combine up to 4 images, optional mask),upscale_image(Topaz).Video:
start_video(text-to-video, image-to-video, first-to-last frame, reference-to-video, optional sound),motion_control(copy moves from a reference video onto a character),edit_videoandextend_video(Grok Imagine),upscale_video(Topaz).Async video jobs: every video tool returns a
job_id;get_videopolls it and returns the finished clip with expiring download links.Voice:
generate_speech(text-to-speech, multiple voices/languages/formats) andtranscribe(speech-to-text from audio or video, optional timestamps).Text:
generate_textwith any language model, optionally reading images, videos, audio or PDFs viafile_urls.Discovery & account:
list_models(catalog with types, capabilities and prices),check_credits(remaining credits and 30-day connector spend),list_files(previously made media with fresh links).Cost control:
estimate_onlyon image/video tools returns catalog pricing without generating or charging.Output: images and audio return inline (and as expiring Blob links); an inline MCP Apps viewer shows a picture grid, video player and audio players in supporting chat apps.
Runs on your own Vercel account and calls Vercel AI Gateway with Vercel's OIDC token to generate images, video, speech and transcriptions using any model in the gateway catalog (Veo, Kling, FLUX, Nano Banana, GPT Image, Seedance, Whisper, TTS, etc.), billed to your own Vercel credits. Also exposes tools to list models with their AI Gateway catalog prices and to check remaining credits, and relies on Vercel Blob storage plus Vercel spend budgets to store outputs and cap spending.
The provider's own price, right inside your chat. No markup, no subscription, no API key. Add this connector to Claude, ChatGPT or any MCP app and it can make pictures, video and voice with 400+ models on Vercel AI Gateway: Veo, Kling, Seedance, Nano Banana, GPT Image, FLUX and more. You run your own copy on your own Vercel account, so every call is paid from your own Gateway credits at the price the provider sets.
What you can make
Ask in plain words. Your chat does the thinking and the writing with everything it already knows about you; the connector makes the pictures, the video and the voice.
Costs are AI Gateway catalog prices from October 2026, for the example quantities shown. They are examples, not quotes: the provider's bill can differ from the catalog (see What it costs), and each call reports what it actually cost. Ask list_models for today's catalog.
Related MCP server: Aetherwave Studio
How it works
You ask in chat. Claude, ChatGPT or any app that speaks MCP picks the right tool.
Your own copy answers. It runs on your Vercel account and checks your secret link.
AI Gateway runs the model, billed to your own credits at the provider's price. No API key: your copy signs in with Vercel's own token.
What is MCP? The Model Context Protocol is how chat apps plug in outside tools. This project is one of those tools: once you add its link, your chat app can make things with any model on AI Gateway.
Get started
You need a Vercel account and a GitHub, GitLab or Bitbucket account.
Then set a spend budget in the Vercel dashboard (AI Gateway → Budgets). It is the real limit on what your link can ever spend.
Your copy comes with its own setup page
Open your copy and it shows where you are: an arch of six stones, one per step. Set stones glow, the next one breathes, and clicking a stone opens its step.
Once every step is done, the guide steps aside for good. From then on your page opens on the brand and goes straight to your usage. If anything comes undone later (say MCP_SECRET_SHA256 is removed), the guide comes back by itself.
What it costs
Nothing from this project: it is free and MIT licensed, with no plan and no fee. You pay what each provider charges, with no markup, through your own AI Gateway credits, and every Vercel team gets free monthly credits for a set of models. In Vercel's words (AI Gateway pricing):
AI Gateway charges no markup and no platform fee on tokens. You pay the provider's list price on a pay-as-you-go basis.
You ask for | Model | Catalog price |
A picture |
| $0.007 |
A picture |
| $0.134 |
An edit of your own photo |
| $0.04 |
8 seconds of video, with sound |
| $1.20 |
10 seconds of motion copied onto a character |
| $1.26 |
1,000 words read aloud |
| about $0.17 |
An hour of speech written down |
| $0.36 |
From the AI Gateway catalog, October 2026. The catalog is a guide, not the bill: the provider's charge can differ. In October 2026 bfl/flux-3-image was listed at $0.024 for a 1024x1024 picture while Black Forest Labs billed $0.048 (passed on with no surcharge); the catalog has since been corrected. Each call reports its actual cost; ask list_models for today's catalog.
This project is not made by or affiliated with Vercel. Version 1 means you run your own copy, so setup is as short as I could make it: the goal is for everyone to use AI at the price providers actually set.
Tools
Your chat app picks these for you; you never have to name them. Every tool returns readable errors that name the model: unknown model, not enough credits, video not on your plan, provider errors.
Tool | What it does |
| Lists the models in the AI Gateway catalog with their type ( |
| Generates text. Returns the text plus its cost when AI Gateway reports one. With |
| Works with image models ( |
| Changes existing images from an instruction. Works with edit-capable image models ( |
| Makes an image sharper and larger. Uses |
| Starts a video job and returns a |
| Makes the character in a picture move like the person in a reference video (Kling motion control). |
| Makes a video sharper and larger and cleans up noise (Topaz Proteus by default). |
| Changes an existing video from an instruction (Grok Imagine Video, up to 720p). |
| Continues a video from its last frame (Grok Imagine Video). |
| On the image and video tools: returns the price from the AI Gateway catalog instead of running. Nothing is generated or charged. Often a range, because resolution or audio is left to the model's defaults; token-priced models (e.g. |
| For every video tool above: reports whether the job is still generating. When it finishes, the video is saved to your Blob store and you get an expiring link; call it again later for a fresh one. |
| Turns text into speech ( |
| Turns speech in an audio or video file (up to 25 MB) into text, optionally with timestamps. |
| Shows the team's AI Gateway credits and what this connector spent in the last 30 days. The spend part needs AI Gateway's usage report, which Vercel offers on paid plans only; on Hobby it says so, and each reply still shows what that call cost. |
| Lists the pictures, videos and audio this connector made, newest first, with fresh expiring links. |
Inline viewer. In chat apps that support MCP Apps (Claude on the web, desktop and phone), generate_image, edit_image, upscale_image, get_video and list_files show their result right in the conversation: a picture grid, a video player and audio players, with Download, Upscale and Extend. Upscale and Extend ask the chat to run the tool, so nothing is spent behind your back. Other apps get the same pictures and links as plain content.
Keep it safe
Your link works like a password that spends money. Anyone who has it can use your AI Gateway credits. Keep it private.
Set an AI Gateway budget. Only Vercel's budget limits your total spend.
If the link leaks, make a new secret on your setup page, put its fingerprint in Project Settings → Environment Variables and redeploy. The old link stops working at once.
Your usage is yours. Anyone can open your setup page, but the numbers only appear for someone who has your secret.
Your connector URL works like a password that spends money. Anyone who has it can use your AI Gateway credits and generate content under your Vercel account.
Set an AI Gateway budget. This server caps each call (
MAX_VIDEO_SECONDS,MAX_IMAGES_PER_CALL,MAX_SPEECH_CHARACTERS,ALLOWED_MODELS), but only Vercel's budget limits your total spend. Tools that start from your own video (motion_control,upscale_video,edit_video) follow its length, which the per-call caps cannot see.Rotate the secret if the URL leaks. Set a new fingerprint (or
MCP_SECRET) and redeploy. The old URL stops working right away, and any unfinished video jobs are abandoned.Optional: rate-limit the endpoint. Guessing is hopeless, but every wrong request still counts toward your project's usage. If your plan includes Vercel Firewall rate limiting, add a rule for paths starting with
/mcp/(for example, by IP). Do not turn on Attack Challenge Mode for it: Claude's and ChatGPT's servers cannot solve the challenge, so your connector would stop working.Files are private, but links are not. Pictures, videos and audio are stored in a private Blob store. Anyone who holds one of the links returned in chat can open that file until the link expires (
SIGNED_URL_TTL_HOURS).Usage stats need the secret.
POST /api/statschecks it in constant time and answers 404 otherwise. Remembering the secret in a browser lets anyone using that browser see your usage; "Forget" removes it.Logs: this app never logs the secret or request URLs. Vercel's own request logs record request paths, so members of your Vercel team can see the secret there.
Generated media is stored exactly as the provider returns it. Watermarks and metadata are never removed.
Reference
Your secret
Your connector link is your deployment's address plus the secret. The setup page builds it in your browser:
https://<your-project>.vercel.app/mcp/<your-secret>The secret is a random value of at least 32 characters. The Deploy button doesn't ask for it: a fresh copy starts with the endpoint off, and its setup page makes one in your browser and remembers it there, so your link is filled in after the redeploy.
Vercel never gets the secret itself, only its SHA-256 fingerprint as MCP_SECRET_SHA256. A fingerprint can't be turned back into the secret, so anyone who can read your environment variables, or the chat you pasted the setup prompt into, still can't use your connector. The other side of this: Vercel can't show you your secret either. If you lose the browser that holds it (and it isn't in your phone or your chat app's connector settings), make a new one and redeploy.
To do it yourself: make a secret with openssl rand -hex 32, and set MCP_SECRET_SHA256 to the output of printf %s '<your-secret>' | shasum -a 256 (the hex part). For local development a plain MCP_SECRET=<your-secret> is simpler; the fingerprint wins when both are set. Use URL-safe characters only; hex is ideal.
A random 64-character hex secret holds 256 bits: guessing it over the network is not possible in practice, and every wrong guess gets the same 404 as any unknown URL, compared in constant time. Secrets typed by hand are the weak spot, so the endpoint also stays off when the secret has fewer than 8 different characters or repeats one short block (aaaa…, passwordpassword…).
claude.ai custom connectors only support OAuth or no auth, and they can't send custom headers, so the secret goes in the URL path. If no secret is set (or a plain MCP_SECRET is shorter than 32 characters, or the fingerprint isn't 64 hex characters), the MCP endpoint is disabled. A wrong secret gets the same 404 page as any unknown URL.
Variable | Default | Purpose |
| none (this or | SHA-256 fingerprint (hex) of the secret in the connector URL. Set by the setup page; wins over |
| none | The secret itself, at least 32 characters. Simpler for local development. |
|
| Longest video |
|
| Highest |
|
| Longest text |
| empty (all models) | Comma-separated allowlist of model ids. |
|
| How long file links stay valid. The maximum is 168 (7 days). |
| unset | Optional. Use it for local development. When set, it replaces the OIDC token. |
Vercel sets the Blob variables (BLOB_STORE_ID, plus BLOB_READ_WRITE_TOKEN as a fallback) and VERCEL_OIDC_TOKEN automatically when the store is connected. Without a Blob store, text, pictures and voice still work inline; video and file links need one. Create a private Blob store under the project's Storage tab, connect it and redeploy. The setup page links there.
npm install
vercel link && vercel env pull # pulls MCP_SECRET_SHA256, Blob and a 12-hour OIDC token into .env.local
# or put AI_GATEWAY_API_KEY=... and MCP_SECRET=... in .env.local
npm run devTest the server with the MCP Inspector:
npx @modelcontextprotocol/inspector@latestChoose Streamable HTTP and connect to http://localhost:3000/mcp/<MCP_SECRET>.
The same tools also run over stdio, for local MCP clients and for directories that start the server to list its tools (Glama does this). Your deployment does not use it.
npm run build:stdio # bundles scripts/stdio.ts into dist/stdio.mjs
AI_GATEWAY_API_KEY=... MCP_SECRET=... node dist/stdio.mjsA stdio server is a process you start yourself, so it has no secret check: it spends whatever Gateway key it is given. MCP_SECRET only signs video job ids there. Listing the tools needs no variables at all.
Two development-only addresses preview states you cannot reach without a deployment: /?preview-open shows the page as it looks once setup is done, and /?sample-stats fills the usage with sample numbers.
Setup page:
/checks the deployment live and guides each step, then hides the guide once every required step is done (agateway-opencookie, ignored whenever a server check fails). Black and white, drawn in code, with motion that rests finished under reduced motion./setupredirects there.Usage stats: every call from this server carries AI Gateway tags (
ai-gateway-mcp,tool:<name>,client:<app>, the app guessed from its User-Agent). The setup page reads AI Gateway's own spend report filtered by those tags, so there is no database. The report is a paid-plan feature: on Hobby, Vercel answers 403 and the page says so instead (credits still show). Keeping our own log in Blob was ruled out: Hobby includes 2,000 Blob advanced operations a month, and going over blocks Blob for 30 days.Inline viewer: one MCP Apps resource,
ui://gateway-mcp/media.html, built fromui/byscripts/build-ui.mjs(esbuild, beforedev,buildandtypecheck). Its CSP allowshttps://*.blob.vercel-storage.comfor images and media.Stack: Next.js (App Router) and TypeScript. MCP is served over Streamable HTTP using
mcp-handlerv2, and model calls go through the AI SDK with the AI Gateway provider.Secret check:
proxy.tsrejects a wrong secret before routing by rewriting it to the standard 404 page. The route handler then checks the secret again, in constant time.Media in, media out: files you give a tool are downloaded by the server (https only, size-capped), so this server's own private links work as input. Video jobs send theirs as links, since AI Gateway keeps a job's start request small.
Video jobs: no database. Each
job_idholds the model and the AI Gateway job id, signed with a key derived from the fingerprint (orMCP_SECRET) and only accepted from callers holding the secret, so it can't be forged.
License
MIT
Available Tools
15 toolscheck_creditsA
Show how many AI Gateway credits are left on this Vercel team, and what this connector spent in the last 30 days. Use it before big jobs (many videos) to check there is enough.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that this is a read-style lookup, that it is team-scoped, and that spend is measured over a 30-day window, but says nothing about auth/permission requirements, caching or freshness of the numbers, or whether the call itself consumes anything.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste: the first defines the payload, the second defines the trigger. The purpose is front-loaded before the guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter lookup with no output schema, the description compensates by naming the returned facts (credits remaining, 30-day spend). It is nearly complete; only freshness/permission caveats are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is an empty object, so there is nothing to document; per baseline this warrants a 4. The description correctly implies no input is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Show how many AI Gateway credits are left') plus the exact data window for spend ('last 30 days'). It is unmistakably distinct from every sibling, which are all generative/edit operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to call it: 'Use it before big jobs (many videos) to check there is enough.' No alternatives or when-not conditions are named, but there is no sibling that overlaps this function, so the omission is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_imageA
Change existing images with an instruction: remove or replace the background, add or remove things, restyle, extend the canvas (outpaint), change the framing, or combine several images. Give https links to the images (links returned by this server work). Good models: "bfl/flux-kontext-pro", "openai/gpt-image-2", "google/gemini-3-pro-image". Pass mask_url (white = area to change) for precise edits with models that take one, e.g. "bfl/flux-pro-1.0-fill".
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | Number of results (image-only models). Default 1. | |
| model | Yes | Image model id from list_models with type "image" | |
| prompt | Yes | What to change, e.g. "remove the background, keep the product" | |
| mask_url | No | https link to a mask image (white = change, black = keep) | |
| image_urls | Yes | https links to 1–4 input images | |
| estimate_only | No | Only return the estimated price from AI Gateway's list prices. Nothing is started or charged. | |
| size_or_aspect | No | Aspect ratio like "16:9" or size like "1024x1024". Support varies by model. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose input constraints (https links, links from this server are valid) and mask color semantics, but says nothing about cost, credit consumption, whether the call is synchronous or queued, or whether edits are non-reversible. Useful but incomplete for a paid generation endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then practical usage details, then parameter hints. Every sentence carries information; the model-id list is slightly dense but directly actionable rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description covers inputs, model selection, and mask usage, and the schema documents all seven parameters. The remaining gap is behavioral: nothing about latency, async behavior, or billing, which an agent invoking a paid image edit would benefit from knowing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds value beyond it: it names specific model ids to use for model, and clarifies the mask convention (white = area to change) and the models that accept a mask, which the schema only states generically.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (change/edit) and resource (existing images) and enumerates the concrete edit operations supported: background removal/replacement, add/remove objects, restyle, outpaint, reframe, and multi-image combine. The word 'existing' plus the operation list separates it cleanly from the sibling generate_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable guidance: supply https links (and notes that links returned by this server work), recommends concrete good models, and explains when to pass mask_url with which model. It does not explicitly state the negative case (use generate_image for brand-new images), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_videoA
Change an existing video with an instruction, like "give the person sunglasses" or "make it snow". Uses "spacexai/grok-imagine-video". The result keeps the input's length and shape, at up to 720p. Returns a job_id for get_video. Links must be https; links returned by this server work. If this call times out or returns no answer, do not call it again on your own: the job may already be running and a retry pays twice. Tell the user and let them decide.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | A Grok Imagine Video model id. Default "spacexai/grok-imagine-video". | |
| prompt | Yes | What to change | |
| video_url | Yes | The video to change | |
| estimate_only | No | Only return the estimated price from AI Gateway's list prices. Nothing is started or charged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the double-charge/idempotency hazard on retry after timeout, the job_id handoff to get_video, resolution and shape-preservation guarantees, and the https constraint on inputs. This is unusually strong behavioral disclosure for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and example, then constraints, then the critical retry-safety warning last. Every sentence contributes distinct information (examples, model, output shape, return value, link rule, retry hazard) with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations exist, so the description must cover the essentials alone, and it does: what it does, return value (job_id for get_video), input constraints, output characteristics (720p, length/shape preserved), and failure handling. An agent has everything needed to call it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by giving concrete prompt examples and stating that links must be https and that server-returned links are valid, which clarifies the video_url contract; estimate_only and model remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (edit an existing video) with concrete prompt examples ('give the person sunglasses', 'make it snow') and names the backing model. This clearly separates it from generate/start/extend/motion_control siblings, which create rather than modify an input video.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides rich contextual guidance: result preserves input length/shape at up to 720p, returns a job_id for get_video, links must be https and server-returned links work, and explicit when-not-to-act behavior on timeout (do not retry, tell the user). It does not name sibling alternatives (e.g., extend_video vs edit_video) for disambiguation, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extend_videoA
Continue a video from its last frame, so a scene keeps going ("the cat jumps off the windowsill"). Uses "spacexai/grok-imagine-video". Returns a job_id for get_video; the result is the new part. Links must be https; links returned by this server work. If this call times out or returns no answer, do not call it again on your own: the job may already be running and a retry pays twice. Tell the user and let them decide.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | A Grok Imagine Video model id. Default "spacexai/grok-imagine-video". | |
| prompt | Yes | What happens next | |
| duration | No | Seconds to add | |
| video_url | Yes | The video to continue | |
| estimate_only | No | Only return the estimated price from AI Gateway's list prices. Nothing is started or charged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden and does so well: it discloses the return mechanism (job_id consumed by get_video, result is the new part), the underlying model, URL provenance constraints, and a cost-safety warning that a timeout retry pays twice. Cost, failure handling and output routing are all covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then layers model, return value, constraints and failure handling in a logical order, with every sentence carrying information. Minor redundancy: the hard-coded model string and the estimate_only 'nothing is charged' point are already present in the schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must explain returns and mutation-side effects; it does both by routing results through get_video via job_id and warning about double-billing on retry. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real meaning beyond the schema: 'Links must be https; links returned by this server work' clarifies acceptable video_url values, and the get_video/job_id note frames video_url as an existing job artifact. It does not add much for duration or prompt beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with a concrete behavior: 'Continue a video from its last frame, so a scene keeps going', plus an illustrative example. This operationally separates it from start_video (new video), edit_video (alter existing), and upscale_video/motion_control without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to reach for it (continuing an existing scene) and an example, and adds explicit retry guidance for timeouts. It does not, however, explicitly contrast itself with siblings like start_video or edit_video, leaving some selection inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_imageB
Generate images with an AI Gateway image model (e.g. "bfl/flux-2-pro", "openai/gpt-image-2") or an image-capable LLM (e.g. "google/gemini-3-pro-image"). Images are returned inline; if a Blob store is connected, private download links that expire are returned too.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | Number of images (image-only models). Default 1. | |
| model | Yes | Image model id from list_models with type "image" | |
| prompt | Yes | ||
| estimate_only | No | Only return the estimated price from AI Gateway's list prices. Nothing is generated or charged. | |
| size_or_aspect | No | Aspect ratio like "16:9" or size like "1024x1024". Support varies by model. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses return behavior (images returned inline; expiring private download links when a Blob store is connected), but says nothing about cost/credits, latency, permissions, or failure modes for what is a charged external generation call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core purpose front-loaded and output behavior second; the examples earn their place by clarifying valid model ids. No wasted preamble.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must carry behavioral and return semantics. It covers return format adequately, but cost/credit implications and when-not-to-use are left to the schema's estimate_only field, leaving real gaps for a multi-sibling generation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the baseline is 3. The description's model examples ('bfl/flux-2-pro', 'openai/gpt-image-2') add slight context for the required model param, but it adds no syntax or format detail for prompt, n, size_or_aspect, or estimate_only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Generate images') and distinguishes two accepted model classes (AI Gateway image models vs image-capable LLMs) with concrete ids. It is clearly separable from edit_image/upscale_image by verb, but never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance: it never says when to pick this over edit_image, upscale_image, or which model class to choose for a given task. Only the schema's estimate_only param hints at a preview workflow, and that is not surfaced in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_speechA
Turn text into spoken audio: narration, voice-overs, audiobook chapters, podcast intros. Returns the audio inline and, if a Blob store is connected, a private download link that expires. Models: "openai/tts-1-hd", "google/gemini-3.8-flash-tts", "fish-audio/s2-pro", "microsoft/mai-voice-2.1" (list_models with type "speech" shows all and their prices). Voices are model-specific, e.g. "alloy", "nova" or "onyx" on OpenAI.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | What to say | |
| model | Yes | Speech model id from list_models with type "speech" | |
| speed | No | 1 is normal; 0.5 is half speed, 2 is double | |
| voice | No | Voice name for this model, e.g. "nova" (OpenAI) | |
| format | No | Audio format like "mp3" or "wav". Default depends on the model. | |
| language | No | ISO 639-1 code like "en" or "th", or "auto" | |
| instructions | No | How to say it, e.g. "warm and slow, like a bedtime story" (models that support it) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does disclose two real behaviors: audio is returned inline, and a private, expiring download link is produced only if a Blob store is connected. It omits cost, text-length limits, latency, and whether the link's expiry/size is configurable, leaving meaningful gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, then return behavior, then model/voice discovery. No filler, no restatement of the tool name, and the list_models pointer is placed exactly where model selection becomes relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by describing the return (inline audio plus conditional expiring Blob link). Combined with a fully-described 7-param schema, an agent has enough to invoke correctly; only cost/length/rate expectations are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds genuine selection value: it enumerates concrete model ids ("openai/tts-1-hd", "google/gemini-3.8-flash-tts", etc.) and voice examples ("alloy", "nova", "onyx") that the schema only describes generically. It stops short of explaining interactions like model-dependent support for "instructions" or "language".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Turn text into spoken audio') and immediately scopes the domain with concrete use cases (narration, voice-overs, audiobook chapters, podcast intros). It is unmistakably distinct from siblings generate_text, generate_image, transcribe, and start_video without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent to list_models with type "speech" to discover models and prices, and warns that voices are model-specific with per-model examples. However it gives no explicit exclusions or when-not-to-use guidance relative to siblings like transcribe (speech-to-text) or generate_text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_textA
Generate text with any AI Gateway language model (e.g. "openai/gpt-5.5", "anthropic/claude-sonnet-5"). Billed to this deployment owner's AI Gateway credits. With file_urls, the model reads images, videos, audio or PDFs too, e.g. Gemini ("google/gemini-3.5-flash-lite") watching a video to summarize it; list_models shows what each model reads. Links must be https; links returned by this server work.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model id from list_models, e.g. "google/gemini-3-flash" | |
| prompt | Yes | ||
| system | No | Optional system instructions | |
| file_urls | No | Images, videos, audio or PDFs for the model to read, 20 MB in total at most | |
| max_tokens | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does meaningful work: it discloses billing against the deployment owner's credits, that only https links are accepted, and that links returned by this server are valid. It omits return shape, latency, and rate/limit behavior, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and cost, and every sentence carries information. The second half is one long run-on with stacked parenthetical examples, which costs some readability without adding waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param, no-annotation, no-output-schema tool it covers purpose, cost, model selection, and the media-input path. Remaining gaps are return format and failure behavior, which are secondary for a single-shot generation call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, so the schema documents model, system, and file_urls but leaves prompt and max_tokens bare. The description compensates by explaining what file_urls actually does (media the model reads, per-model capability) and pointing at list_models for valid model ids, adding real semantics over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (generate text) plus the concrete mechanism (AI Gateway language models) with an example model id. It is immediately distinguishable from siblings such as generate_image, generate_speech, and transcribe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to list_models for model discovery and explains the file_urls branch (use it when the model must read media). It does not state exclusions against siblings, but the text-generation scope is unambiguous from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_videoA
Check a video job from start_video, motion_control, upscale_video, edit_video or extend_video. Returns "still generating" or, when done, what AI Gateway billed and private download links (they expire; calling again issues fresh links).
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job_id returned by a video tool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, this description carries the full load and does so well: it discloses the two outcome states ('still generating' vs done), that returned download links are private and expire, and that calling again reissues fresh links. It also mentions billing attribution (AI Gateway billed), so the agent knows the cost-inspection aspect is bundled into the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the action and source tool list, followed by the return semantics and expiry caveat. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-input polling tool with no output schema, the description covers the call trigger, the two possible return shapes, link expiry behavior, and re-issuance behavior. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds value by indicating job_id must come from one of the specified video tools, which reinforces the dependency beyond the schema's generic 'returned by a video tool' phrasing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Check) and resource (a video job) and explicitly names all five sibling tools that produce the job (start_video, motion_control, upscale_video, edit_video, extend_video), so an agent can route unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description identifies the source of the job_id via the named sibling tools and explains the re-call behavior for expired links. It does not explicitly state when NOT to use it (e.g., use start_video for launching new jobs), but the input dependency makes the trigger condition clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesA
List pictures, videos and audio this connector made before, newest first, with fresh private links (they expire). Needs a connected Blob store.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Only this kind of file | |
| limit | No | How many to return, newest first. Default 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it discloses three non-obvious traits: results are ordered newest first, the returned links are freshly minted and expire, and a Blob store connection is required. It omits auth requirements and anything about pagination beyond the limit cap already in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the resource and scope, then appends the two operational caveats (link expiry, Blob store requirement). Nothing is padded and nothing important is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter read tool with 100% schema coverage and no output schema, the description supplies what the schema cannot: ordering, link volatility, and the connection prerequisite. Return-value detail beyond 'links' is thin, but adequate for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so 'kind' and 'limit' are already documented with enum values, defaults, and bounds. The description only restates the media kinds and the newest-first ordering, which the schema already conveys — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (list) plus a tightly scoped resource — the media assets this connector previously generated — with ordering ('newest first') and payload shape ('fresh private links'). It is easily distinguished from siblings like list_models, which enumerate models rather than generated files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names a hard prerequisite ('Needs a connected Blob store'), which tells the agent when the call is even viable, and implies the retrieval use case for prior outputs. It does not name an alternative or an explicit when-not-to-use condition, but no sibling competes for this job.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsA
List AI Gateway models this server can call. Filter by type (text, image, video, speech for text-to-speech, transcription for speech-to-text) and/or a search query. Returns one line per model: id | type | capabilities | price.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Only models of this type | |
| query | No | Case-insensitive match on model id or name, e.g. "veo" or "flux" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It does add real value by disclosing the return shape ('one line per model: id | type | capabilities | price'), which is not in any schema. It omits anything about ordering, pagination, or read-only/auth characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, filters, and return format. The core purpose is front-loaded and nothing is repeated from the schema verbatim without added meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter list tool with no output schema, the description is nearly self-sufficient: it names the filter axes and describes the returned line format. Only minor gaps remain (ordering, result limits, whether an empty filter returns everything).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, which sets a baseline of 3, but the description goes beyond it: it decodes the ambiguous enum values ('speech for text-to-speech, transcription for speech-to-text') and explains the query semantics ('case-insensitive match on model id or name'). That is genuine semantic uplift over the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('AI Gateway models this server can call'), and the filtering dimensions make clear this is a discovery/catalog tool. This cleanly distinguishes it from every sibling, which are all generation or file-manipulation actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the tool's role and its two filter dimensions clear, so usage is implied (discover available models before invoking generate_*). However, it never states when to reach for this versus an alternative, nor any prerequisite such as needing a resolved model id before generation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
motion_controlA
Make the character in a picture move like the person in a reference video (a dance, a gesture, a walk). Uses "klingai/kling-v3.0-motion-control" by default. The result is as long as the reference video: up to 10 seconds with orientation "image" (the default). Returns a job_id for get_video. Links must be https; links returned by this server work. If this call times out or returns no answer, do not call it again on your own: the job may already be running and a retry pays twice. Tell the user and let them decide.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | A motion-control model id. Default "klingai/kling-v3.0-motion-control". | |
| prompt | No | Optional scene or camera notes | |
| quality | No | "std" (default) or "pro" (costs more) | |
| image_url | Yes | The character: a .jpg or .png, at most 10 MB | |
| video_url | Yes | The motion to copy: an .mp4 or .mov, at least 3 seconds, at most 100 MB | |
| keep_sound | No | Keep the reference video's sound. Default true. | |
| orientation | No | Face the way the picture does ("image", up to 10 s) or the way the video does ("video", up to 30 s). Default "image". | |
| estimate_only | No | Only return the estimated price from AI Gateway's list prices. Nothing is started or charged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and does so well: it discloses the default model, that output length is tied to the reference video (up to 10 s with orientation "image"), that only https links are accepted, that server-returned links work, and a non-obvious timeout/retry hazard that would otherwise cause double billing. That retry warning is exactly the kind of trait structured fields cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded, followed by default model, output length, return value, and the retry caveat in roughly priority order. Every sentence carries information an agent needs; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter generation tool with no annotations and no output schema, the definition covers inputs, defaults, output (job_id for get_video), duration, link requirements and failure behavior. Remaining gaps are modest – no cost framing outside the schema's estimate_only, and no permission or async-polling detail – but nothing essential to a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents every parameter including defaults and enums. The description adds practical meaning beyond the schema by explaining the https constraint on both URLs and that links produced by this server are acceptable, plus the duration consequence of the orientation choice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource – animate the character in an image using the motion from a reference video – and implicitly separates itself from siblings like start_video, extend_video and edit_video by naming both inputs (image_url + video_url). The agent can identify exactly what the tool produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operational guidance: it names get_video as the follow-up for the returned job_id, and explicitly says not to retry on timeout because a job may already be running and a retry pays twice. It does not explicitly contrast itself with start_video or other video siblings, so the when-to-use-vs-alternative story is clear from context rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_videoA
Start an asynchronous AI Gateway video and return a job_id immediately. Then call get_video with that job_id every ~30 seconds until it is done (usually 1–5 minutes). Text-to-video needs only a prompt. image_url animates a picture (i2v models); add end_image_url to move from the first picture to the last (Veo, Kling, Seedance). reference_urls (pictures or videos of characters or objects) makes a new scene with them (r2v models such as "alibaba/wan-v2.6-r2v": call them character1, character2… in the prompt). For dialogue, write the lines in the prompt and set sound (models with audio, e.g. Veo 3.1, HeyGen). Links must be https; links returned by this server work. If this call times out or returns no answer, do not call it again on your own: the job may already be running and a retry pays twice. Tell the user and let them decide.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Video model id from list_models with type "video", e.g. "google/veo-3.1-fast-generate-001" | |
| sound | No | Generate audio with the video (models that support it). Costs more on some models. | |
| prompt | Yes | ||
| duration | No | Length in seconds; supported values vary by model | |
| image_url | No | Start image for image-to-video (i2v) | |
| aspect_ratio | No | e.g. "16:9" or "9:16" | |
| end_image_url | No | Last frame to end on; needs image_url too | |
| estimate_only | No | Only return the estimated price from AI Gateway's list prices. Nothing is started or charged. | |
| reference_urls | No | Reference pictures or videos for reference-to-video (r2v) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does so well: it discloses the async job model, expected polling cadence (~30s) and duration (1-5 min), the fact that retries are charged twice, the https-only URL constraint, and that estimate_only starts nothing and charges nothing. Almost no behavioral gap remains for a job-launching tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The start-and-poll instruction is correctly front-loaded and every sentence carries non-redundant information - no filler. It is dense and parenthesis-heavy, though, which slightly hurts scannability for an agent parsing modality branches.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, yet the description covers the return value (job_id), the polling loop, typical completion time, the timeout/retry hazard, and cost caveats. For a 9-parameter async-launch tool, nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 89%, so the baseline is 3. The description adds real meaning beyond the schema by mapping parameters to model families and conventions - i2v for image_url, Veo/Kling/Seedance for end_image_url, r2v plus the 'character1, character2…' prompt convention for reference_urls, and audio-capable models for sound. It does not, however, add anything for duration or aspect_ratio beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Start an asynchronous AI Gateway video') and immediately pairs it with the return contract ('return a job_id immediately'). The follow-up instruction to poll get_video makes it distinguishable from generate_image, edit_video, and extend_video without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes by modality: prompt-only for text-to-video, image_url for i2v, end_image_url for first-to-last-frame, reference_urls for r2v with named characters, and sound for dialogue. It also names the alternative action on timeout ('do not call it again... let them decide'), which is exactly the when/when-not guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribeA
Turn speech in an audio or video file into text, optionally with timestamps (for subtitles, notes or translating a voice-over). Give an https link to the file, up to 25 MB. Models: "openai/gpt-4o-transcribe", "openai/whisper-1", "google/gemini-3.5-transcribe" (list_models with type "transcription").
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Transcription model id from list_models with type "transcription" | |
| audio_url | Yes | https link to an audio or video file | |
| timestamps | No | Include a timestamp on each line, when the model returns them. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and delivers real constraints: the 25 MB upload cap and the https-link requirement. It also notes timestamps are returned only 'when the model returns them', which preempts a false expectation of guaranteed timestamps. It stops short of describing error behavior or output formatting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with the core purpose front-loaded, then the optional capability, then the operational constraint and model routing. Every sentence carries information; only slight density loss from the parenthetical use-cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema and no annotations, the description covers purpose, input constraints, model selection path, and the optional timestamps behavior. A brief note on the returned text format would close the remaining gap, but nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns above baseline by enumerating concrete model ids ("openai/gpt-4o-transcribe", "openai/whisper-1", "google/gemini-3.5-transcribe") that the schema has no enum for, and by restating the 25 MB ceiling on audio_url that the schema omits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (turn speech in audio/video into text) and immediately scopes it with the optional-timestamps variant, distinguishing it from audio-adjacent siblings like generate_speech (text→speech) and generate_text. An agent can tell exactly what this tool produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete invocation guidance: supply an https link, max 25 MB, and pick a model from list_models with type "transcription", explicitly pointing to the sibling that resolves the model argument. It does not explicitly state when-not to use it, but the transcription framing is unambiguous against the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upscale_imageA
Make an image sharper and larger without changing what is in it. Uses "topaz/wonder-3.5" (Topaz) unless you name another model. Give an https link to the image (links returned by this server work).
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Image model id. Default "topaz/wonder-3.5". | |
| prompt | No | Optional guidance, e.g. "restore the faces" or "keep the film grain" | |
| image_url | Yes | https link to the image to upscale | |
| estimate_only | No | Only return the estimated price from AI Gateway's list prices. Nothing is started or charged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the burden. It discloses the default model and the cost-free nature of estimate_only indirectly, but never states what a normal invocation returns (a URL? an image?), whether the real run is charged, or any latency/rate limit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and constraint before the model default and link requirement. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should explain what comes back from an upscale call; it does not. It is adequate for invoking the tool but leaves the agent guessing about the return shape and cost implications of a real run.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents model, prompt, image_url and estimate_only. The description adds only the model default and the provenance hint for image_url, which is a marginal gain over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (sharpen and enlarge an image) and, crucially, the scope constraint 'without changing what is in it', which separates it from edit_image and generate_image without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives practical context (default model applies unless you name another; image_url must be an https link and 'links returned by this server work'), but never states when to choose this over upscale_video, edit_image, or generate_image.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upscale_videoA
Make a video sharper and larger, and clean up noise, blur and compression. Uses "topaz/proteus" (Topaz) by default; "topaz/starlight-precise-2.6" is the other choice. Priced by the length of the input video. Returns a job_id for get_video. Links must be https; links returned by this server work. If this call times out or returns no answer, do not call it again on your own: the job may already be running and a retry pays twice. Tell the user and let them decide.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Default "topaz/proteus" | |
| video_url | Yes | The video to upscale (.mp4, .mov or .webm link) | |
| resolution | No | Output size like "1920x1080" (default) or "3840x2160" | |
| estimate_only | No | Only return the estimated price from AI Gateway's list prices. Nothing is started or charged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: it discloses pricing is based on input video length, that a job_id is returned for get_video, the link scheme constraint, and the critical failure-mode warning that a timeout/empty response may mean the job is already running and a retry double-charges. This is exactly the behavioral context an agent needs before invoking a paid async job.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then layers model choice, pricing, return value, link constraint, and the retry warning. Every sentence carries actionable content, though the paragraph is dense and could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid asynchronous video job with no output schema, the description covers what it does, what it returns (job_id for get_video), how it is priced, the input constraints, and the retry hazard. An agent has everything needed to invoke it responsibly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents each parameter including the default model, so the baseline is 3. The description adds the alternative model name and the https-link constraint, but nothing about resolution syntax or the estimate_only semantics beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb set (sharpen, enlarge, denoise) on a specific resource (video), which cleanly distinguishes it from siblings like upscale_image and edit_video. It even names the underlying models used, so an agent knows exactly what this call produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: default vs alternative model choice, the https link requirement, and the explicit instruction not to auto-retry on timeout because a retry pays twice. It does not explicitly frame when to choose this over upscale_image or edit_video, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v0.1.0- First observed
check_credits - First observed
edit_image - First observed
edit_video - First observed
extend_video - First observed
generate_image - First observed
generate_speech - First observed
generate_text - First observed
get_video - First observed
list_files - First observed
list_models - First observed
motion_control - First observed
start_video - First observed
transcribe - First observed
upscale_image - First observed
upscale_video
TDQS
Scored across 15 tools
Most tools target a clearly distinct modality+action (generate_text, generate_image, transcribe, generate_speech), and the video family is well-separated by purpose (start_video vs motion_control vs upscale_video vs edit_video vs extend_video). The only mild risk is telling apart the six video-job tools at a glance and distinguishing generate_image/edit_image/upscale_image, but descriptions resolve these.
The set largely follows a verb_noun pattern (generate_text, edit_image, start_video, upscale_video, check_credits). Minor deviations exist: 'transcribe' is a bare verb and 'motion_control' is a noun phrase with no verb, breaking the otherwise consistent convention.
15 tools is well within the ideal 3-15 range and each maps to a distinct operation (generation, editing, upscaling, async job polling, credits, model listing). No tool feels redundant or padded.
The surface covers the full multimodal lifecycle: discover models, generate/edit/upscale text, image, speech, audio, and video, plus transcription and credit checks. Minor gaps include no explicit file retrieval/deletion beyond list_files and no embedding or batch operations, but core workflows are covered.
Maintenance
Related MCP Connectors
Create images & video from any MCP agent — 17 models, spend limits, one URL.
Generate AI images, video, voiceovers and music from Claude, ChatGPT or Cursor through 50+ models (Veo 3.1, Kling 3, Seedance, Nano Banana, GPT Image, ElevenLabs). Also image editing, upscaling, background removal, face swap, transcription, voice cloning and UGC-style video ads. Sign in with OAuth — no API key to paste. Tools are annotated (read-only vs. credit-spending); failed generations are refunded.
Best Image and video generation: 20+ models (Kling, Seedance, Veo, NB, FLUX.2), OAuth, pay-per-use.
Generate AI video from any MCP client. Pick the model, see the per-second price before you spend.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceAccess 400+ generative AI models directly from your AI assistant — generate images (FLUX, Midjourney, GPT-4o), create videos (Veo3, Kling), make music (Suno), and enhance photos, all via a single MCP server.12MIT
- AlicenseAqualityBmaintenanceOne MCP server for music, image, video, and audio generation across Suno, Grok Imagine, Seedance, Kling, Hailuo, Wan, VEO, Ideogram, and GPT Image 2. Generate, edit, upscale, reframe, and master through one API key and one credit pool.1698 npm6MIT
- FlicenseNot gradedqualityCmaintenanceKeyless, pay-per-call AI gateway: 248 LLMs plus image/video/voice/music generation and live crypto, DeFi, markets, web-search and research tools through one MCP server. Pay per call in USDC via x402 on Base/Solana — no API key, no signup, free tier.-

GlianaAI MCP Serverofficial
AlicenseAqualityBmaintenanceEnables pay-per-call access to 90+ generative AI models and utility tools via any MCP client, with no signup or API key, using wallet-based USDC payments on Base, Tempo, or Solana.773 npmMIT