RunAPI MCP Server
OfficialRunAPI MCP Server lets an MCP-compatible assistant discover RunAPI media models, inspect constraints and pricing, search prompts, and run authenticated image/video/audio tasks.
Browse 160+ models across image, video, audio/music, and utility modalities with
list_models.Inspect model input constraints, supported service/action, and runtime pricing with
get_model_infoandcheck_pricing.List endpoint actions grouped by modality with
list_actions.Search reusable prompt examples and approved example images with
search_prompts.Log in via browser PKCE and save RunAPI credentials locally with
login.Create media tasks with idempotency support, optionally waiting for completion, using
create_task.Fetch task status and latest payload with
get_task.Check account balance and spending metrics with
check_balance.Use catalog, pricing, and prompt-discovery tools without an API key; task and balance tools require authentication.
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: Runware MCP
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, tags, and example image URLs.
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_pricingBInspect
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?
No annotations are provided, so the description carries the full burden. It implies a read-only lookup and mentions 'current runtime' pricing, which suggests live rather than cached data, but it does not state permission requirements, rate limits, or whether pricing is per-call/per-unit.
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 with no wasted words. It states the action and subject immediately.
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?
There is no output schema and no annotations, so the description should do more to explain what pricing information is returned, such as currency, units, or scope. It also does not clarify the required 'service' parameter versus the optional 'model' parameter, leaving key context missing for a tool with no structured return metadata.
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 all three parameters. The description adds only the phrase 'model/action pair' and does not explain how 'service' relates to the other parameters, so the baseline score of 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?
The description states a specific verb and resource: return current runtime pricing for a RunAPI model/action pair. It is distinguishable from check_balance and get_model_info by focusing on pricing, but it does not explicitly name siblings. There is also a slight mismatch: the description says 'model/action pair' while the schema requires 'service' and 'action' and treats 'model' as optional.
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 gives no explicit guidance on when to use this tool versus alternatives such as check_balance, get_model_info, or list_models. Usage is only implied by the tool name and the phrase 'current runtime pricing'.
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 the full burden. 'Get' plus the enumerated outputs make the read-only, lookup nature clear, but it says nothing about failure behavior for an unknown slug, whether pricing is cached or per-request, or any auth/rate-limit 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?
Two sentences, front-loaded with the primary purpose and return payload, followed by the one conditional parameter rule. 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 output schema, the description usefully names the three returned artifacts (endpoint, pricing, input constraints), which is the key missing piece for a lookup tool. Only error/precondition behavior (invalid slug, prerequisite call to list_models) is left uncovered.
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 all three parameters including the service/action disambiguation rule. The description's 'Add service and action when the model supports multiple endpoints' restates what the schema already says rather than adding format or precedence detail.
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 ('Get supported endpoint, current runtime pricing, and input constraints for a RunAPI model slug') and enumerates exactly what comes back, which separates it from list_models (enumeration) and check_pricing (pricing only). An agent can tell what this returns 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?
The second sentence gives a conditional rule for supplying service/action, but only in terms of multi-endpoint models. There is no explicit guidance on when to call this versus check_pricing or list_actions, nor that a slug must first come from list_models (that hint lives only in the schema).
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?
With no annotations, the description carries the full behavioral burden. "Embedded catalog" hints that results come from local static data rather than a live service (useful), but the description never says whether the list is paginated, how large it is, whether filters combine with AND or OR, or what happens with an unknown filter value.
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, front-loaded with purpose followed by inputs, with no filler. It is efficient, though the second sentence spends its budget on names the schema already exposes rather than on value semantics.
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-required-parameter read-only listing tool this is close to sufficient: the agent knows what it enumerates and what it can filter on. The remaining gap is that with no output schema and no annotations, nothing describes the returned model records or how to consume them.
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 0%, so the description must compensate, and it only repeats the three parameter names verbatim. It gives no valid value sets for `service` or `action` (only `modality` has an enum in the schema, not the description), no case-sensitivity or matching semantics, and no indication whether filters are combinable.
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 plus the data source ("List RunAPI models from the embedded catalog"), which is clearer than a bare name restatement. It only weakly distinguishes itself from siblings like get_model_info or list_actions, but the list-vs-get distinction is inferable.
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 only usage signal is "Optional filters: modality, service, or action," which describes input shape rather than when to call this tool. Nothing tells the agent when to use this instead of get_model_info for lookup or list_actions for a sibling enumeration, and there are no stated exclusions or prerequisites.
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 full burden and does disclose meaningful traits: it is an interactive browser-based OAuth/PKCE flow and it writes the API key to a specific file path. It omits whether the call blocks while the user completes the browser step, whether existing credentials are overwritten, and how failures surface — gaps that matter for an interactive 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?
A single sentence with zero filler, front-loading the action, the mechanism, and the observable side effect. Nothing to trim and nothing 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 one-parameter tool with no output schema and no annotations, the description is adequate but leaves an agent guessing on interaction semantics: whether it blocks on a browser window, whether it can be called in a non-interactive environment, and what a caller should do on failure. These are non-trivial for an auth bootstrap 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 100%, so the `force` parameter is already fully documented as re-running browser login when the credential comes from the local config file. The description never mentions `force`, but the schema does the work, so baseline 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?
States a specific verb (Authenticate) plus the resource (RunAPI) and the exact mechanism (browser PKCE login flow) and its persistence side effect (~/.config/runapi/config.json). No sibling tool overlaps with authentication, so there is nothing to confuse it with; an agent can identify this as the credential-bootstrap tool immediately.
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 is only implied: an agent infers this is the tool to call when unauthenticated, but the description never says so, nor does it state prerequisites (e.g. must run before other RunAPI tools), when NOT to re-authenticate, or what the browser flow requires of the caller. There are no competing alternatives to route against, which keeps it at minimum-viable rather than worse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_promptsAInspect
Search RunAPI prompt examples by modality, category, tags, text query, or model. Each prompt includes its approved example images in media; example videos and reference images are not returned. Free, no API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Text query matched against prompt title and prompt text. | |
| page | No | Page number; the API clamps values below 1 to 1. | |
| 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 | ||
| modality | No | Prompt modality: image, video, music, or audio. | |
| per_page | No | Page size; the API clamps values to 1–100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden, and it does disclose meaningful behavior: what is returned (approved example images in media) and what is deliberately omitted (example videos, reference images). It also states the no-auth/no-cost access profile. It stops short of pagination or result-ordering behavior, which matters given two paging params.
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 with the capability stated first and return/access caveats following; nothing is redundant or padded.
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 and no annotations, the description supplies the key missing context: the contents of 'media' in results and the access terms. Only paging/ordering expectations are left unaddressed, a minor gap for a simple search 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 86%, so most parameters are already documented in the schema, and the description merely echoes the facets (modality, category, tags, query, model) without adding format or combining semantics such as whether facets are ANDed.
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) plus the dimensions available for searching, so an agent knows exactly what this retrieves. It does not explicitly contrast with siblings, but none of the listed siblings (list_models, get_task, etc.) are close substitutes, so confusion risk is low.
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?
'Free, no API key required' sets access context, but there is no explicit when-to-use/when-not or reference to an alternative tool. The searchable facets imply the use case, leaving routing to inference.
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.
5 tool updates
v0.17.0- Changed
check_pricing1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_model_info1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
list_models1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
login1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
search_prompts1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
1 tool update
v0.16.0- Changed
search_prompts4 fields changed- removed
Input schema / properties / featuredRemoved value: -{ - "type": "boolean" -} - changed
Input schema / properties / modality / descriptionPrevious value: -"Prompt modality, for example image, image_edit, video, audio, or music."New value: +"Prompt modality: image, video, music, or audio." - added
Input schema / properties / page / descriptionAdded value: +"Page number; the API clamps values below 1 to 1." - added
Input schema / properties / per_page / descriptionAdded value: +"Page size; the API clamps values to 1–100."
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
TDQS
Scored across 9 tools
Each tool has a fairly distinct role: catalog discovery (list_models, list_actions), detail lookup (get_model_info), pricing (check_pricing), prompt search, auth, balance, and task lifecycle. The main overlap is between get_model_info, which already returns runtime pricing and constraints, and the dedicated check_pricing tool, which could cause hesitation when an agent just wants pricing.
Nearly all tools follow a clean verb_noun snake_case pattern (list_models, get_model_info, check_pricing, create_task). The lone 'login' verb-only name is a minor deviation but still readable and unambiguous.
Nine tools is well-scoped for a model-catalog-plus-task-execution server, with each tool corresponding to a distinct phase (discover, price, authenticate, check funds, run, poll). No bloat and nothing trivially redundant.
The discovery, pricing, auth, and balance surface is complete, and tasks can be created and fetched by id. However, there is no way to list a user's existing tasks, cancel a running task, or poll an already-created async task without its id, leaving notable dead ends in the task lifecycle.
Maintenance
Related MCP Connectors
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Generate AI video, images and audio, and browse your history, from any MCP client.
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.
Related MCP Servers
- 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 gradedqualityBmaintenanceMCP 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.87 npmMIT- FlicenseNot gradedqualityCmaintenanceEnables AI clients like Claude and ChatGPT to generate images and videos, animate images, create lip-synced videos, list TTS voices, and manage media via remote MCP tools.-

PopNow MCP Serverofficial
AlicenseNot gradedqualityBmaintenanceEnables ChatGPT, Claude, Cursor, VS Code and other MCP clients to create and edit AI images, videos, songs and voiceovers from plain-language requests, including background removal, upscaling, and effect videos. Connects as a hosted remote server with OAuth 2.1 or API key sign-in, quotes credit prices before generating, and returns results directly in the chat.1MIT