RunAPI MCP Server
OfficialRunAPI MCP Server connects MCP-compatible assistants to RunAPI for free catalog discovery plus authenticated media generation, task polling, and billing checks across 160+ image, video, audio, and utility models.
Browse the catalog —
list_modelslists models from the embedded catalog, filterable bymodality(image/video/audio/utility),service, oraction(no auth).Inspect a model —
get_model_inforeturns supported endpoint, required/constrained input fields, and current runtime pricing for a model slug, usingservice+actionto disambiguate multi-endpoint models (no auth).Discover endpoints —
list_actionsgroups RunAPI endpoint action names by output modality (no auth).Check pricing —
check_pricingreturns live pricing for aservice+actionpair, optionally scoped to amodel(no auth).Find prompt examples —
search_promptssearches reusable prompts by text query, modality, category, tags, model slug, featured flag, and pagination (no auth).Sign in —
loginopens a browser PKCE flow and saves credentials to~/.config/runapi/config.json;forcere-runs login (no key needed to invoke).Create media tasks —
create_taskruns an operation with a caller-generatedidempotency_key, optionally waiting for completion (wait,timeout_ms,poll_interval_ms); same key + same input safely replays one logical task (auth required).Poll task status —
get_taskfetches current status and latest payload for an existing task byservice+task_id, with optionalaction(auth required).Check account balance —
check_balancereturns balance and spending metrics (auth required).Flexible auth — use
RUNAPI_API_KEY, the shared config file, or thelogintool; catalog, pricing, and prompt tools work without a key.Multiple connection modes — local stdio via
npx -y @runapi.ai/mcp, or hosted remote MCP athttps://mcp.runapi.ai/mcp(hosted exposes the eight business tools;loginis local-only).
Provides access to ElevenLabs text-to-speech models through the RunAPI platform, enabling AI voice synthesis.
Provides access to Flux image generation models through the RunAPI platform, enabling AI image creation.
Provides access to Suno music generation models through the RunAPI platform, enabling AI music creation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@RunAPI MCP ServerGenerate an image of a futuristic city using Flux"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
What Is This?
RunAPI MCP Server connects MCP-compatible coding tools to RunAPI. It lets an assistant browse the RunAPI catalog, inspect model inputs, check current runtime pricing, create media tasks, poll task status, and check account balance.
The discovery tools work without an API key because they use the embedded build-time catalog.
Authenticated operations use the login tool, runapi login, RUNAPI_API_KEY, or shared RunAPI config.
This package is a pure client. It does not run a local generation backend and only needs RunAPI sign-in for authenticated tools.
Related MCP server: Google AI Studio MCP Server
Hosted MCP
Remote MCP clients can connect directly to:
https://mcp.runapi.ai/mcpNo Node.js installation is required. Use OAuth when the client supports remote MCP authorization, or configure a RunAPI API key as the bearer credential. See the Hosted MCP setup page for Cursor, Claude Desktop, VS Code, and Windsurf configurations.
Hosted MCP exposes the eight Business Tools documented below. Local Login remains available only in the Local MCP package.
Quick Start
For Local MCP over stdio, install RunAPI with Claude Code's MCP command:
claude mcp add runapi -s user -- npx -y @runapi.ai/mcpThe scope flag controls where the MCP server is stored:
-s user: global, available in all projects for your user.-s project: team-shared, written to.mcp.jsonin the current repo so it can be committed.
Use project scope when you want the whole team to share the same server config:
claude mcp add runapi -s project -- npx -y @runapi.ai/mcpCompatibility fallback for non-Claude Code platforms or manual JSON config:
{
"mcpServers": {
"runapi": {
"command": "npx",
"args": ["-y", "@runapi.ai/mcp"]
}
}
}If your host needs a generated config file, use the legacy init command as a fallback:
npx @runapi.ai/mcp init claude
npx @runapi.ai/mcp init cursor
npx @runapi.ai/mcp init vscode
npx @runapi.ai/mcp init windsurf
npx @runapi.ai/mcp init rooFree catalog tools work before sign-in.
For task creation, task status, and balance checks, ask your assistant to call the login tool. It opens a browser login and saves credentials to ~/.config/runapi/config.json, the same file used by runapi login.
Headless and CI hosts can still set RUNAPI_API_KEY before starting the MCP host.
Tools
Tool | Auth | Purpose |
| No | List RunAPI models from the embedded catalog. Supports |
| No | Return service, action, modality, input constraints, and current runtime pricing for a model slug. Use |
| No | Group endpoint action names by modality. |
| No | Return current runtime pricing for a |
| No | Search reusable prompt examples by |
| No | Start browser login and save RunAPI credentials to shared local config. |
| Yes | Create a media task with a required caller-generated |
| Yes | Fetch status and latest payload for an existing media task. |
| Yes | Return account balance and spending metrics. |
The catalog, pricing, and prompt search tools are designed for funnel-top discovery inside coding tools. The task and balance tools are designed for authenticated workflows.
Examples
Ask your assistant natural-language questions. The assistant should use the tools to discover current model slugs and pricing instead of relying on memorized names.
Browse The Catalog
What RunAPI image models are available?Expected behavior:
The assistant calls
list_modelswithmodality: "image".It summarizes the returned model slugs, services, actions, and required fields.
It avoids quoting stale prices unless it calls
check_pricing.
Search Prompt Examples
Find image prompt examples for a logo.Expected behavior:
The assistant calls
search_promptswithmodality: "image"andq: "logo".It summarizes returned titles, prompt text, model slugs, categories, and tags.
It uses the selected prompt with
get_model_infobefore creating a task.
Inspect A Model
Show me the required parameters for this model slug: <model-slug>Expected behavior:
The assistant calls
get_model_info.If the response is ambiguous, it chooses the relevant service/action from the returned matches and calls
get_model_infoagain withserviceandaction.It shows required fields, enum constraints, range constraints, conditional input rules, supported action, and current runtime pricing if available.
It tells you to choose another slug with
list_modelsif the slug is not found.
Create A Media Task
Generate a square product image with RunAPI. Pick a suitable image model.Expected behavior:
The assistant calls
list_modelsto choose a compatible image model.It calls
get_model_infowith the selected service/action/model to read the parameter descriptions.It asks for confirmation if the request is expensive, long-running, or a batch.
It generates one opaque
idempotency_keyfor this logical task and callscreate_task.It returns task ID, status, output URLs, and cost fields when available.
Wait For Completion
Hosted MCP keeps an asynchronous create_task call with wait: true open as request-scoped SSE for up to 300 seconds. It polls about every 5 seconds, sends an SSE heartbeat about every 15 seconds, and sends standard notifications/progress only when the MCP client supplied a progressToken. The terminal JSON-RPC response arrives in that same stream and then closes it.
The terminal tool result includes matching structuredContent and text content with task_id, final status, completed: true, and the RunAPI result. See examples/create-task-and-wait.arguments.json.
Submit Without Waiting
Create the task but do not wait for completion.Expected behavior:
The assistant generates one opaque
idempotency_keyand callscreate_taskwithwait: false.It returns the task ID.
You can later ask for status with
get_task.
Replay A Task Creation Safely
create_task requires an opaque idempotency_key from 1 to 512 characters. Generate one new key for each logical task and retain it with the exact service, action, model, and params used for that task.
If the create result is unknown because the connection closed or timed out, do not automatically create another task. Retry only when intended, using the same key with the same input. Reusing the key with different input returns a conflict. Do not derive the key from a JSON-RPC request ID or X-Client-Request-Id.
When Completion Wait reaches its deadline, task creation remains successful. The non-error result has matching structured and text content with task_id, latest status, completed: false, wait_deadline_reached: true, and next_action: "get_task". Continue with get_task; do not create a replacement task.
If polling fails or the connection closes after task creation, the task may still be processing. Continue with get_task; do not create a replacement task.
See examples/create-task.arguments.json for submit-only arguments.
Check Account Balance
Check my RunAPI balance.Expected behavior:
The assistant calls
check_balance.If no key is configured, it calls
loginfor browser login, or explainsRUNAPI_API_KEYfor headless hosts.
Catalog Coverage
The MCP Embedded Catalog is generated from RunAPI's contract snapshot. It includes only models executable by this server release.
Modality | What To Use |
Image |
|
Video |
|
Audio and music |
|
Utility |
|
Catalog contents can change between releases.
Use list_models for current service/action/model slugs and get_model_info for each model's current constraints.
Pricing
RunAPI pricing is exposed through the check_pricing tool and the public pricing page.
Do not rely on examples in README files for exact prices.
Useful flows:
Call
list_modelsto find a candidate model.Call
check_pricingwithservice,action, andmodel.Show the returned current price or link to runapi.ai/pricing.
Free catalog tools do not create tasks and do not consume account balance.
Platform Setup
Claude Code, Cursor, Windsurf, And VS Code
Run:
claude mcp add runapi -s user -- npx -y @runapi.ai/mcpUse -s user for a global install available in all projects.
Use -s project when you want Claude Code to write .mcp.json in the repo for team-shared config.
Restart or reload your MCP host after changing MCP configuration.
Compatibility Fallback: Generated Config
Use init only when a host needs a platform-specific JSON file or cannot use the Claude Code MCP command.
Claude Code fallback:
npx @runapi.ai/mcp init claudeThis writes .mcp.json in the current directory.
Cursor fallback:
npx @runapi.ai/mcp init cursorThis writes .cursor/mcp.json.
Open Cursor settings to verify the MCP server is enabled.
VS Code fallback:
npx @runapi.ai/mcp init vscodeThis writes .vscode/mcp.json.
VS Code uses a top-level servers key and type: "stdio" in generated config.
Windsurf fallback:
npx @runapi.ai/mcp init windsurfThis writes the generated config for the Windsurf target used by the init command.
Roo Code
Run:
npx @runapi.ai/mcp init rooThis writes .roo/mcp.json.
Manual Configuration
Use the example files in examples/ as starting points.
Each platform has slightly different wrapper keys and file paths, but all run the same command:
npx -y @runapi.ai/mcpConfiguration
The server reads configuration in this order:
RUNAPI_API_KEYenvironment variable, useful for headless and CI hosts~/.config/runapi/config.json, created by the MCPlogintool orrunapi loginNo key, which still allows free catalog tools
The config file is normally managed by login. A pre-provisioned headless config can use:
{
"apiKey": "your_runapi_key"
}You can also set a custom base URL for local testing:
{
"apiKey": "your_runapi_key",
"baseUrl": "https://runapi.ai"
}Do not commit real API keys.
Data Sync
This package ships build-time contract data:
data/contract.json: catalog, actions, model slugs, and input constraints
Refresh data from the RunAPI source tree before a release:
npm run sync:dataContract updates require a new package release. Pricing is queried from the RunAPI runtime API and does not use a package snapshot.
Development
npm install
npm run typecheck
npm test
npm pack --dry-runRun the server locally:
npm run devManual initialize smoke test:
printf '%s\n' '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"0.1.0"}},"id":1}' | npx tsx src/index.tsPackage Contents
The npm package includes:
compiled
dist/filesembedded
data/filesplatform examples
eval scenarios, when generated by this repo
README, changelog, license, and package metadata
It does not include node_modules, .env, local config files, or API keys.
Also Available Via CLI
RunAPI also has a separate command-line client for terminal workflows. Use this MCP server when you want RunAPI available inside an MCP host. Use the CLI when you want direct shell commands, scripts, or CI integration.
License
Licensed under the Apache License, Version 2.0.
Available Tools
9 toolscheck_balanceAInspect
Return the authenticated RunAPI account balance and spending metrics.
| 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 must disclose all behavioral traits. It only states output (balance and spending metrics) without mentioning authentication needs, rate limits, or side effects, leaving significant gaps.
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 description is a single, concise sentence that immediately conveys the tool's purpose. No extraneous information is present.
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 simple 0-parameter read tool, the description is mostly adequate but lacks specificity on the 'spending metrics' (e.g., what metrics are included). Without an output schema, more detail would improve completeness.
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 input schema has no parameters (schema coverage 100%), and the description adds no parameter details. Baseline 4 applies as the schema fully covers parameters.
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?
The description clearly states the specific action 'Return' and the exact resource 'authenticated RunAPI account balance and spending metrics'. It distinguishes from siblings like check_pricing and create_task.
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 explicit when-to-use or when-not-to-use guidance is provided. The tool's purpose is implied but not differentiated from sibling tools such as check_pricing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_pricingAInspect
Return current runtime pricing for a RunAPI model/action pair.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | RunAPI model slug | |
| action | Yes | RunAPI endpoint name, for example text_to_image or text_to_music | |
| service | Yes | RunAPI service slug returned by list_models |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the tool is read-only (returns pricing), but does not mention authentication requirements, rate limits, or potential errors. The behavior is straightforward but lacks depth.
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 description is a single sentence with no fluff. It is concise and to the point, though it could include slightly more context without becoming verbose.
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?
Given no output schema, the description does not specify return format or error conditions. It is adequate for a simple query but lacks completeness regarding behavioral details and expected response.
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 each parameter is already described. The tool description adds minimal extra meaning ('for a model/action pair'), but does not significantly enhance understanding beyond 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?
The description clearly states the verb 'return' and the resource 'current runtime pricing' for a specific scope ('RunAPI model/action pair'). It effectively distinguishes from sibling tools like list_models and check_balance by focusing on pricing for a model/action combination.
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 explicit when-to-use or when-not-to-use guidance is provided. The description implies usage for fetching pricing, but does not mention alternatives or contexts where other sibling tools might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskCInspect
Run a RunAPI operation with a caller-generated idempotency key. Asynchronous operations can optionally poll until completion.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Wait for the completed result when the endpoint requires durable processing. | |
| model | No | RunAPI model value sent to the server without local validation. | |
| action | Yes | RunAPI endpoint name, for example text_to_image | |
| params | No | Endpoint parameters sent to RunAPI for server-side validation. | |
| service | Yes | RunAPI service slug returned by list_models | |
| timeout_ms | No | Requested completion deadline in milliseconds; values above the endpoint limit are capped. | |
| idempotency_key | Yes | Opaque caller-generated key for safely replaying one logical task creation. | |
| poll_interval_ms | No | Status check interval while waiting for completion. |
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 two real behavioral traits: a caller-generated idempotency key for safe replay of one logical creation, and optional polling for asynchronous operations. However, it says nothing about permissions, what the response contains (e.g., a task handle), or how timeouts/caps behave, which the schema only partially covers.
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 short sentences with the primary constraint (idempotency key) front-loaded and the optional polling behavior second. It is tight and non-redundant, though the first sentence is generic enough that it reads more as filler than as a load-bearing specification.
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?
This is an 8-parameter tool with a nested free-form params object, no annotations, and no output schema, so the description must work harder. It never explains the params object, the service/action/model relationship, the timeout cap behavior, or what the agent gets back to later call get_task with. Substantial gaps remain for the tool's complexity.
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 all eight parameters are already documented in the schema itself, making 3 the baseline. The description only echoes the idempotency-key concept and the polling/wait idea, adding no syntax, format, or defaulting detail beyond what the schema provides.
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?
The name is create_task and the sibling set includes get_task, yet the description says it will 'Run a RunAPI operation,' which describes execution rather than task creation. An agent can infer task submission from the idempotency key and async/polling language, but the core verb+resource pairing is muddled rather than stated. Vague rather than specific.
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 notes that async operations can optionally poll until completion, which is a hint about the wait behavior, but it gives no when-to-use guidance against siblings like get_task, list_actions, or list_models, and no prerequisites such as needing a service slug from list_models. Context is implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_infoAInspect
Get supported endpoint, current runtime pricing, and input constraints for a RunAPI model slug. Add service and action when the model supports multiple endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | RunAPI model slug returned by list_models | |
| action | No | RunAPI endpoint name returned by list_models; use with service to disambiguate multi-endpoint models | |
| service | No | RunAPI service slug returned by list_models; use with action to disambiguate multi-endpoint models |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool returns endpoint, pricing, and constraints, but does not explain side effects, authentication requirements, or data freshness. The description is adequate but lacks deeper behavioral context.
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 with no wasted words. The first sentence delivers the core purpose; the second adds important usage nuance. Efficient and well-structured.
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?
While there is no output schema, the description gives a high-level summary of the return values (endpoint, pricing, constraints). For a simple info retrieval tool with well-described parameters, this is nearly complete. Minor gap: no mention of return format or pagination, but not critical.
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 baseline is 3. The description adds value by explaining that 'model' is a RunAPI model slug from list_models and that 'service'/'action' disambiguate multi-endpoint models. This provides meaningful context beyond the schema descriptions.
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?
The description clearly states the tool retrieves supported endpoint, current runtime pricing, and input constraints for a RunAPI model slug. It distinguishes itself from sibling tools like list_models (which lists all models) and check_pricing (focused only on pricing) by specifying the exact information gathered.
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 provides guidance on when to use the 'service' and 'action' parameters (for multi-endpoint models). While it doesn't explicitly exclude alternatives or state when not to use this tool, the usage context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskCInspect
Fetch the current status and latest payload for an existing RunAPI task.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | RunAPI endpoint name. Provide this when using media task routes. | |
| service | Yes | ||
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It implies a read ('Fetch'), but does not disclose auth requirements, rate limits, behavior for missing/expired task IDs, or whether status can be terminal.
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 front-loaded sentence with no filler; it gets to the resource and return data immediately. Slightly terse rather than padded, which is the right failure mode here.
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 33% schema coverage, no annotations, and no output schema, the description is too thin: it never explains the required identifiers or what the task is keyed on. It leaves the agent guessing about parameters it must supply.
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 only 33%: 'service' and 'task_id' are bare strings with no description, and the description does not explain their meaning or expected format. The one documented param (action, media task routes) is not referenced or clarified by the description either.
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 (Fetch) plus the resource and the exact data returned (current status and latest payload) for a RunAPI task. Implicitly distinguishes from create_task by scoping to 'existing' tasks, though it does not name 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?
Nothing says when to use this versus siblings; 'existing' hints that create_task is for new tasks but this is inference, not guidance. No mention of polling, retry, or what to do if the task is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_actionsAInspect
List RunAPI endpoint names grouped by output modality.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only states it lists endpoint names, implying a read-only operation, but does not discuss whether results are cached, paginated, or any side effects. This is insufficient for full transparency.
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 description is a single sentence that conveys the essential purpose without any extraneous words. It is front-loaded and every word contributes 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?
Given zero parameters, no output schema, and no annotations, the description is complete enough for the tool's simplicity. It adequately explains the output and grouping, covering the necessary context for use.
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 has no parameters, so the baseline for this dimension is 4. The description does not need to add parameter information, and it correctly omits any, leading to a high score.
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?
The description clearly states it lists RunAPI endpoint names grouped by output modality. It uses specific verb 'List' and resource 'endpoint names', and the grouping detail distinguishes it from sibling tools like check_balance or create_task, which have different purposes.
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 does not provide explicit guidance on when to use this tool versus alternatives. While the purpose is clear, it lacks context such as when listing endpoints is appropriate or any exclusions. The score is minimally viable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsCInspect
List RunAPI models from the embedded catalog. Optional filters: modality, service, or action.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | ||
| service | No | ||
| modality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only says 'List RunAPI models,' which implicitly suggests a read operation but does not explicitly state side-effect-free behavior, authentication requirements, or any potential limits. There is no mention of whether the operation is safe, such as a read-only guarantee.
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 description is a single, front-loaded sentence that states the primary function and the available filters. It's concise and to the point, 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?
The description gives only the most basic gist. It doesn't mention what the returned list contains, whether any authentication is required, or the meaning of each filter. With no output schema, the agent is left to guess the response structure. The sibling tools (get_model_info, list_actions) suggest a catalog context, but this description alone is insufficient for confident use.
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 schema provides no descriptions (0% coverage), so the description must compensate. It does so by stating the three parameters are optional filters, which clarifies their purpose. However, it doesn't explain the domain of 'service' or 'action' (e.g., what values are valid for action, or whether service is a name or ID). This is adequate but not thorough.
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?
The description specifies the action (list) and resource (RunAPI models) with clear optional filters, making the purpose evident. It does not explicitly contrast with siblings like get_model_info, but the wording is distinct enough to avoid major ambiguity.
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 guidance is provided on when to use this tool versus alternatives like list_actions or search_prompts. The description does not mention any exclusions or context where this tool is preferred, leaving the agent to infer based on the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loginAInspect
Authenticate RunAPI by opening a browser PKCE login flow and saving the API key to ~/.config/runapi/config.json.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Re-run browser login when the current credential comes from the local config file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the interactive browser flow and the file write side effect (config.json). However, it does not mention that it may overwrite existing credentials or that it could block waiting for user input, though these are implied.
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 description is a single, well-structured sentence that front-loads the action ('Authenticate RunAPI') and provides necessary details without extraneous information.
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 simple login tool with one optional parameter and no output schema, the description covers the core purpose and side effect. It lacks an explicit statement that this is a prerequisite for other tools, but that is implied.
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% (the only parameter 'force' has a description). The tool description adds no additional meaning about parameters beyond the schema, so the baseline of 3 applies.
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?
The description clearly states the tool's purpose with a specific verb ('Authenticate'), target resource ('RunAPI'), method ('browser PKCE login flow'), and side effect (saving to config.json). It is distinct from sibling tools, none of which relate to authentication.
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 implies usage (to authenticate RunAPI) but does not explicitly say when to run it (e.g., before other RunAPI tools) or when to use the 'force' parameter. Since there are no alternative auth tools among siblings, 'vs alternatives' is not applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_promptsBInspect
Search RunAPI prompt examples by modality, category, tags, text query, model, or featured status. Free, no API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Text query matched against prompt title and prompt text. | |
| page | No | ||
| tags | No | Tags to match. All provided tags must be present. | |
| model | No | RunAPI model slug, for example flux-kontext-pro or suno-v5. | |
| category | No | ||
| featured | No | ||
| modality | No | Prompt modality, for example image, image_edit, video, audio, or music. | |
| per_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does add genuinely useful context by disclosing that the call is free and needs no API key, which the agent cannot learn elsewhere. But it says nothing about result shape, pagination (page/per_page exist), defaults, or ordering.
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, front-loaded with the search scope followed by the access note. No filler or repetition, though it is minimal enough that it could have absorbed one more sentence of parameter guidance without bloat.
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, no-annotation, no-output-schema search tool, the description covers the filter surface and the auth/free condition, but leaves pagination behavior, defaults, and multi-tag matching semantics to the schema. Adequate but with clear gaps.
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 50%, with page, per_page, category, and featured left undocumented in both places. The description partially compensates by naming all the filter facets (modality, category, tags, text query, model, featured), but adds no syntax, matching semantics, or default values beyond what the schema already gives.
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 (Search) and resource (RunAPI prompt examples) and enumerates the filterable facets. Sibling tools are unrelated task/model utilities, so no sibling differentiation is needed, but the description doesn't state what makes this distinct as a retrieval tool beyond naming the resource.
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?
Usage context is implied by the enumeration of filters, and the note 'Free, no API key required' usefully signals the calling precondition. However, there is no explicit when-to-use guidance, no indication of when to prefer list_models or get_model_info instead, and no exclusions.
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.
3 tool updates
v0.15.0- Changed
create_task8 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / idempotency_key / maxLengthRemoved value: -512 - removed
Input schema / properties / idempotency_key / minLengthRemoved value: -1 - changed
Input schema / properties / model / descriptionPrevious value: -"RunAPI model slug"New value: +"RunAPI model value sent to the server without local validation." - changed
Input schema / properties / params / descriptionPrevious value: -"Endpoint parameters validated against data/contract.json where constrained."New value: +"Endpoint parameters sent to RunAPI for server-side validation." - added
Input schema / properties / params / propertyNamesAdded value: +{ + "type": "string" +} - added
Input schema / properties / poll_interval_ms / maximumAdded value: +9007199254740991 - added
Input schema / properties / timeout_ms / maximumAdded value: +9007199254740991
- Changed
get_task1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
search_prompts7 fields changed- added
Input schema / properties / modality / descriptionAdded value: +"Prompt modality, for example image, image_edit, video, audio, or music." - removed
Input schema / properties / modality / enumRemoved value: -[ - "image", - "image_edit", - "video", - "audio", - "music" -] - removed
Input schema / properties / page / exclusiveMinimumRemoved value: -0 - changed
Input schema / properties / page / typePrevious value: -"integer"New value: +"number" - removed
Input schema / properties / per_page / exclusiveMinimumRemoved value: -0 - removed
Input schema / properties / per_page / maximumRemoved value: -100 - changed
Input schema / properties / per_page / typePrevious value: -"integer"New value: +"number"
1 tool update
v0.12.2- Changed
create_task3 fields changed- changed
Input schema / properties / poll_interval_ms / descriptionPrevious value: -"Polling interval for asynchronous endpoints."New value: +"Status check interval while waiting for completion." - changed
Input schema / properties / timeout_ms / descriptionPrevious value: -"Requested Completion Wait deadline for asynchronous endpoints; values above 300000 milliseconds are capped."New value: +"Requested completion deadline in milliseconds; values above the endpoint limit are capped." - changed
Input schema / properties / wait / descriptionPrevious value: -"For asynchronous endpoints, poll until the task reaches a terminal status."New value: +"Wait for the completed result when the endpoint requires durable processing."
1 tool update
v0.12.0- Changed
list_models1 field changed- changed
Input schema / properties / modality / enumPrevious value: -[ - "image", - "video", - "audio", - "utility", - "llm" -]New value: +[ + "image", + "video", + "audio", + "utility" +]
2 tool updates
v0.6.0- Changed
create_task3 fields changed- added
Input schema / properties / idempotency_keyAdded value: +{ + "description": "Opaque caller-generated key for safely replaying one logical task creation.", + "maxLength": 512, + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / timeout_ms / descriptionPrevious value: -"Polling timeout for asynchronous endpoints."New value: +"Requested Completion Wait deadline for asynchronous endpoints; values above 300000 milliseconds are capped." - changed
Input schema / requiredPrevious value: -[ - "service", - "action" -]New value: +[ + "service", + "action", + "idempotency_key" +]
- Added
search_prompts
2 tool updates
v0.2.1- Changed
create_task3 fields changed- added
Input schema / properties / poll_interval_ms / descriptionAdded value: +"Polling interval for asynchronous endpoints." - added
Input schema / properties / timeout_ms / descriptionAdded value: +"Polling timeout for asynchronous endpoints." - changed
Input schema / properties / wait / descriptionPrevious value: -"Poll until the task reaches a terminal status."New value: +"For asynchronous endpoints, poll until the task reaches a terminal status."
- Removed
search_prompts
1 tool update
v0.1.16- Added
login
2 tool updates
v0.1.5- Removed
chat - Added
search_prompts
8 tool updates
v0.1.4- First observed
chat - First observed
check_balance - First observed
check_pricing - First observed
create_task - First observed
get_model_info - First observed
get_task - First observed
list_actions - First observed
list_models
TDQS
Scored across 9 tools
Most tools target distinct concerns (search vs execute vs authenticate vs billing). There is mild overlap between check_pricing and get_model_info (both surface runtime pricing) and between list_models/list_actions/get_model_info, but descriptions clarify the boundaries.
The set follows a mostly consistent verb_noun pattern (search_prompts, create_task, get_task, check_balance, list_models). The bare 'login' is a minor deviation from the verb_noun convention but is unambiguous.
Nine tools is well-scoped for an API gateway covering discovery, auth, execution, and billing. Each tool earns its place with no obvious redundancy.
The task lifecycle has create_task and get_task but no cancel/delete or list_tasks operation, leaving agents unable to enumerate or abort work. Auth also lacks a logout, though the core discover-execute-bill workflow is otherwise covered.
Maintenance
Related MCP Connectors
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Generate images, video, audio and short films with 140+ AI models from any MCP client.
Generate AI images and videos from any compatible MCP client.
Generate AI images, video, music, and sound effects, and upscale them, from any MCP client.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI photo generation, editing, and video creation from MCP-compatible clients like Claude Desktop, Cursor, and Windsurf.811 npmMIT
- FlicenseNot gradedqualityBmaintenanceExposes Google AI Studio models (Gemini, Imagen, Veo) as MCP tools for text generation, image generation, and video generation, integrating with code editors and LLM clients.-

Runware MCPofficial
AlicenseNot gradedqualityCmaintenanceMCP server that gives AI agents access to Runware's full API for image, video, audio, 3D, upscaling, and other media generation and processing tasks via natural language.215 npmMIT
ImageAPI AI MCP Serverofficial
AlicenseAqualityBmaintenanceMCP server for ImageAPI AI that lets AI assistants generate high-resolution images, refine prompts for free, and inspect account credits directly in development workflows and chat sessions.48 npmMIT