MCP server

UberLLM is an MCP server at https://api.uberllm.dev/mcp. An agent connected to it can list models, price a request, make and edit images, make videos and check your balance, without writing HTTP calls.

It uses the Streamable HTTP transport. Sign in with the same API key you use for /v1, sent as Authorization: Bearer ull_.... A tool call is billed, limited and refused exactly like the same request to the API: the same prices, the same per-key spend limits, and failed requests cost nothing.

Claude Code

Replace $KEY with your API key, or set KEY in your shell first:

claude mcp add --transport http uberllm https://api.uberllm.dev/mcp --header "Authorization: Bearer $KEY"

Add --scope user to use it in every project. Run claude mcp list to check that it connected.

Other clients

Clients that read an mcpServers file (Cursor, for example) take:

{
  "mcpServers": {
    "uberllm": {
      "url": "https://api.uberllm.dev/mcp",
      "headers": { "Authorization": "Bearer ull_your_key_here" }
    }
  }
}

Tools

Tool What it does Spends
list_models Models you can call now, with their price. type is chat, image, video or music; search keeps models whose id or name contains the words. No
get_model One model: its price and, for a media model, parameters, a JSON Schema of the options its requests take. No
quote Checks an image, video, music or text-to-speech request against the model and prices it, without making anything. Returns cost_usd, the listed price and the most it is billed, and max_cost_usd, what is held while it runs. No
generate_image Makes pictures from a prompt. Returns links and usage.cost_usd. With return_image: true the pictures also come back in the answer. Yes
edit_image Changes the picture in image_url (or the pictures in input_images) following the prompt. Use an editing model, such as one whose id ends in -edit. Yes
start_video Starts a video and returns a job. Send idempotency_key so a retry never starts or pays for a second video. Yes, when the video is made
get_job A video or music job: status, progress and, once it succeeded, its file links and cost. No
wait_job Waits until a job ends, for up to timeout_seconds (50 at most). If done is false, call it again. No
balance What you can spend now and what is held for requests and jobs still running, in US dollars. No

Options a model lists in its parameters schema (for example duration_seconds, resolution or aspect_ratio) go in options on quote, generate_image, edit_image and start_video. Send max_cost (US dollars) on a spending tool to refuse anything that could cost more.

A video takes from about 30 seconds to several minutes. The usual flow is get_model, quote, start_video, then wait_job until the status is succeeded, failed, canceled or expired.

Files

Result links (/v1/media/artifacts/...) need the same API key in the Authorization header to download. Files are kept for about 3 hours after a job finishes; image links for about 15 minutes. See Make a video or image for the details of each request.

Errors

When the API refuses a call, the tool answers with an error result carrying the API's own message and code, for example insufficient_credits or max_cost_too_low. The codes are the ones in Errors. A request without a valid key is answered 401 before any tool runs.

Check the connection

curl https://api.uberllm.dev/mcp \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'