Skip to main content

Overview

ModelRunner ships a hosted Model Context Protocol server that exposes the platform as a set of tools your AI assistant can call directly. Once connected, your assistant can browse models, run inference, upload files, and inspect your request history without ever leaving the chat. For a plain-language overview with FAQs, see the ModelRunner MCP page; the server is listed in the official MCP registry as ai.modelrunner/mcp. Connection uses OAuth 2.1 with Dynamic Client Registration (RFC 7591) — clients register themselves on first connect, then prompt you to log in to ModelRunner in your browser. You never paste an API key into the client config.

Quick start

Add ModelRunner to your claude_desktop_config.json:
Restart Claude Desktop. On the first tool call, you’ll be redirected to ModelRunner to authorize the client.
Using a client that only speaks local (stdio) servers? Bridge to the remote endpoint with mcp-remote:
After authorization, ask your assistant “list the recommended image models on ModelRunner” — it should return a curated shortlist via the recommended_models tool.

What you can run

Every public model in the catalog is callable through the same run_model tool — one connection covers all of it. Browse live model lists and per-model pricing by capability:

Text-to-Image API

Generate images from prompts — priced per image or per megapixel.

Image-to-Image API

Edit, restyle, and upscale existing images.

Text-to-Video API

Generate video from prompts — priced per second of output.

Image-to-Video API

Animate still images into video.

Video-to-Video API

Restyle, edit, extend, or upscale footage.

Music Generation API

Full tracks and instrumentals, flat per-output pricing.

Speech-to-Text API

Transcribe audio files to text.

Image-to-3D API

Turn a single image into a textured 3D mesh.
The full catalog lives at modelrunner.ai/models; each model page shows the same endpoint, inputs, and price your assistant sees through get_model.

Tools

The server exposes 23 tools, grouped by what they do.

Discovery

Inference

Files & history

Local filesystem paths are not accepted — the MCP server is remote. For a local file, create_upload_url + a shell PUT is the fast, token-free path; upload_file with base64 bytes is the fallback when the assistant has no shell.

Authoring wrappers

These tools let your assistant build and manage wrappers — your own products composed on top of base models.
See Build a wrapper for a full worked example of this flow — from reading a base model’s schema to publishing a live endpoint. The three focused getters exist so the assistant fetches only the part it is editing — a large wrapper’s template alone can run tens of thousands of characters.

Typical assistant flow

A common end-to-end pattern your assistant will run:
For an image-to-image flow, prepend create_upload_url (or upload_file) to convert local bytes to a URL the model can consume.

OAuth flow (for client implementers)

If you’re building a third-party MCP client and want to support ModelRunner natively, the server publishes the standard discovery documents:
  • Protected Resource Metadata (RFC 9728): GET /.well-known/oauth-protected-resource
  • Authorization Server Metadata (RFC 8414): GET /.well-known/oauth-authorization-server
Supported flows:
  • authorization_code with PKCE (S256)
  • refresh_token
  • Dynamic Client Registration via POST /oauth/register
  • Token revocation via POST /oauth/revoke (RFC 7009)
Scope: mcp. Unauthorized requests to /mcp get a 401 with a WWW-Authenticate header pointing at the protected-resource metadata document — the standard MCP auth discovery handshake.

Troubleshooting

  • 401 Unauthorized on every tool call — Your token expired or was revoked. Disconnect and re-authorize in your client.
  • Tool list missing or empty — The client must send an InitializeRequest as the first POST to /mcp with no Mcp-Session-Id header. Most clients handle this automatically; check that you’re using a current MCP SDK build.
  • upload_file returns “exceeds the 200 MiB upload cap” — Use the direct multipart upload flow instead and pass the resulting fileUrl to run_model.