Skip to main content
Glama

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/mcp

No 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/mcp

The 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.json in 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/mcp

Compatibility 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 roo

Free 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

list_models

No

List RunAPI models from the embedded catalog. Supports modality, service, and action filters.

get_model_info

No

Return service, action, modality, input constraints, and current runtime pricing for a model slug. Use service + action when a model appears in multiple endpoints.

list_actions

No

Group endpoint action names by modality.

check_pricing

No

Return current runtime pricing for a service + action + model combination.

search_prompts

No

Search reusable prompt examples by modality, category, tags, q, model, featured, and pagination. Each prompt returns media: its approved example images, including the cover image of a video prompt. Example videos and reference images are not returned yet.

login

No

Start browser login and save RunAPI credentials to shared local config.

create_task

Yes

Create a media task with a required caller-generated idempotency_key; wait for completion by default or return immediately with wait: false.

get_task

Yes

Fetch status and latest payload for an existing media task.

check_balance

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:

  1. The assistant calls list_models with modality: "image".

  2. It summarizes the returned model slugs, services, actions, and required fields.

  3. It avoids quoting stale prices unless it calls check_pricing.

Search Prompt Examples

Find image prompt examples for a logo.

Expected behavior:

  1. The assistant calls search_prompts with modality: "image" and q: "logo".

  2. It summarizes returned titles, prompt text, model slugs, categories, tags, and example image URLs.

  3. It uses the selected prompt with get_model_info before creating a task.

Inspect A Model

Show me the required parameters for this model slug: <model-slug>

Expected behavior:

  1. The assistant calls get_model_info.

  2. If the response is ambiguous, it chooses the relevant service/action from the returned matches and calls get_model_info again with service and action.

  3. It shows required fields, enum constraints, range constraints, conditional input rules, supported action, and current runtime pricing if available.

  4. It tells you to choose another slug with list_models if the slug is not found.

Create A Media Task

Generate a square product image with RunAPI. Pick a suitable image model.

Expected behavior:

  1. The assistant calls list_models to choose a compatible image model.

  2. It calls get_model_info with the selected service/action/model to read the parameter descriptions.

  3. It asks for confirmation if the request is expensive, long-running, or a batch.

  4. It generates one opaque idempotency_key for this logical task and calls create_task.

  5. 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:

  1. The assistant generates one opaque idempotency_key and calls create_task with wait: false.

  2. It returns the task ID.

  3. 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:

  1. The assistant calls check_balance.

  2. If no key is configured, it calls login for browser login, or explains RUNAPI_API_KEY for 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

list_models with modality: "image"

Video

list_models with modality: "video"

Audio and music

list_models with modality: "audio"

Utility

list_models with modality: "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

MiniMax H3 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:

  1. Call list_models to find a candidate model.

  2. Call check_pricing with service, action, and model.

  3. 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/mcp

Use -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 claude

This writes .mcp.json in the current directory.

Cursor fallback:

npx @runapi.ai/mcp init cursor

This writes .cursor/mcp.json. Open Cursor settings to verify the MCP server is enabled.

VS Code fallback:

npx @runapi.ai/mcp init vscode

This 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 windsurf

This writes the generated config for the Windsurf target used by the init command.

Roo Code

Run:

npx @runapi.ai/mcp init roo

This 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/mcp

Configuration

The server reads configuration in this order:

  1. RUNAPI_API_KEY environment variable, useful for headless and CI hosts

  2. ~/.config/runapi/config.json, created by the MCP login tool or runapi login

  3. No 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:data

Contract 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-run

Run the server locally:

npm run dev

Manual 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.ts

Package Contents

The npm package includes:

  • compiled dist/ files

  • embedded data/ files

  • platform 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 tools
check_balanceAInspect

Return the authenticated RunAPI account balance and spending metrics.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
modelNoRunAPI model slug
actionYesRunAPI endpoint name, for example text_to_image or text_to_music
serviceYesRunAPI service slug returned by list_models

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
waitNoWait for the completed result when the endpoint requires durable processing.
modelNoRunAPI model value sent to the server without local validation.
actionYesRunAPI endpoint name, for example text_to_image
paramsNoEndpoint parameters sent to RunAPI for server-side validation.
serviceYesRunAPI service slug returned by list_models
timeout_msNoRequested completion deadline in milliseconds; values above the endpoint limit are capped.
idempotency_keyYesOpaque caller-generated key for safely replaying one logical task creation.
poll_interval_msNoStatus check interval while waiting for completion.

TDQS

C2.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
modelYesRunAPI model slug returned by list_models
actionNoRunAPI endpoint name returned by list_models; use with service to disambiguate multi-endpoint models
serviceNoRunAPI service slug returned by list_models; use with action to disambiguate multi-endpoint models

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
actionNoRunAPI endpoint name. Provide this when using media task routes.
serviceYes
task_idYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
actionNo
serviceNo
modalityNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
forceNoRe-run browser login when the current credential comes from the local config file.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
qNoText query matched against prompt title and prompt text.
pageNoPage number; the API clamps values below 1 to 1.
tagsNoTags to match. All provided tags must be present.
modelNoRunAPI model slug, for example flux-kontext-pro or suno-v5.
categoryNo
modalityNoPrompt modality: image, video, music, or audio.
per_pageNoPage size; the API clamps values to 1–100.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 5 tool updatesv0.17.0
    • Changedcheck_pricing1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_model_info1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_models1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlogin1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedsearch_prompts1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
  2. 1 tool updatev0.16.0
    • Changedsearch_prompts4 fields changed
      • removedInput schema / properties / featured
        Removed value: -{
        -  "type": "boolean"
        -}
      • changedInput schema / properties / modality / description
        Previous value: -"Prompt modality, for example image, image_edit, video, audio, or music."New value: +"Prompt modality: image, video, music, or audio."
      • addedInput schema / properties / page / description
        Added value: +"Page number; the API clamps values below 1 to 1."
      • addedInput schema / properties / per_page / description
        Added value: +"Page size; the API clamps values to 1–100."
  3. 3 tool updatesv0.15.0
    • Changedcreate_task8 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / idempotency_key / maxLength
        Removed value: -512
      • removedInput schema / properties / idempotency_key / minLength
        Removed value: -1
      • changedInput schema / properties / model / description
        Previous value: -"RunAPI model slug"New value: +"RunAPI model value sent to the server without local validation."
      • changedInput schema / properties / params / description
        Previous value: -"Endpoint parameters validated against data/contract.json where constrained."New value: +"Endpoint parameters sent to RunAPI for server-side validation."
      • addedInput schema / properties / params / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / poll_interval_ms / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / timeout_ms / maximum
        Added value: +9007199254740991
    • Changedget_task1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedsearch_prompts7 fields changed
      • addedInput schema / properties / modality / description
        Added value: +"Prompt modality, for example image, image_edit, video, audio, or music."
      • removedInput schema / properties / modality / enum
        Removed value: -[
        -  "image",
        -  "image_edit",
        -  "video",
        -  "audio",
        -  "music"
        -]
      • removedInput schema / properties / page / exclusiveMinimum
        Removed value: -0
      • changedInput schema / properties / page / type
        Previous value: -"integer"New value: +"number"
      • removedInput schema / properties / per_page / exclusiveMinimum
        Removed value: -0
      • removedInput schema / properties / per_page / maximum
        Removed value: -100
      • changedInput schema / properties / per_page / type
        Previous value: -"integer"New value: +"number"
  4. 1 tool updatev0.12.2
    • Changedcreate_task3 fields changed
      • changedInput schema / properties / poll_interval_ms / description
        Previous value: -"Polling interval for asynchronous endpoints."New value: +"Status check interval while waiting for completion."
      • changedInput schema / properties / timeout_ms / description
        Previous 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."
      • changedInput schema / properties / wait / description
        Previous 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."
  5. 1 tool updatev0.12.0
    • Changedlist_models1 field changed
      • changedInput schema / properties / modality / enum
        Previous value: -[
        -  "image",
        -  "video",
        -  "audio",
        -  "utility",
        -  "llm"
        -]New value: +[
        +  "image",
        +  "video",
        +  "audio",
        +  "utility"
        +]
  6. 2 tool updatesv0.6.0
    • Changedcreate_task3 fields changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Opaque caller-generated key for safely replaying one logical task creation.",
        +  "maxLength": 512,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Polling timeout for asynchronous endpoints."New value: +"Requested Completion Wait deadline for asynchronous endpoints; values above 300000 milliseconds are capped."
      • changedInput schema / required
        Previous value: -[
        -  "service",
        -  "action"
        -]New value: +[
        +  "service",
        +  "action",
        +  "idempotency_key"
        +]
    • Addedsearch_prompts
  7. 2 tool updatesv0.2.1
    • Changedcreate_task3 fields changed
      • addedInput schema / properties / poll_interval_ms / description
        Added value: +"Polling interval for asynchronous endpoints."
      • addedInput schema / properties / timeout_ms / description
        Added value: +"Polling timeout for asynchronous endpoints."
      • changedInput schema / properties / wait / description
        Previous value: -"Poll until the task reaches a terminal status."New value: +"For asynchronous endpoints, poll until the task reaches a terminal status."
    • Removedsearch_prompts
  8. 1 tool updatev0.1.16
    • Addedlogin
  9. 2 tool updatesv0.1.5
    • Removedchat
    • Addedsearch_prompts

TDQS

B3.4/5.0

Scored across 9 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers