Skip to main content

runfra-mcp

PyPI version

Model Context Protocol (MCP) server for Runfra — async batch image generation for high-volume creative and ecommerce automation. Plug it into Claude Desktop, Cursor, or any MCP-aware host and the assistant can submit text-to-image jobs, image-to-image ("product scene") jobs, and poll for results inside a conversation.

Tools

The server exposes three tools. All use RUNFRA_API_KEY from the environment.

runfra_create_image_job

Submit a text-to-image job. Returns immediately with job_id + seeds; pair with runfra_get_job_result to fetch the final image URLs.

Argument Default Notes
prompt required 1–2000 chars
model stable-diffusion-xl-base-1.0 also flux-schnell, flux-dev
width / height 1024 512–1024
batch_size 1 1–100. Your account tier may cap the maximum batch size.
quality_mode strict strict / soft / off
negative_prompt none ignored by flux-schnell and flux-dev

runfra_get_job_result

Get the current state of any job by ID.

Argument Default Notes
job_id required UUID returned by either creation tool
wait_for_seconds 0 0 = single-shot. >0 = poll every 3 s up to that many seconds (hard-capped at 300). On timeout the tool returns the in-progress state with timeout_exceeded: true so the caller can retry.

runfra_create_product_scene

Image-to-image: take a public HTTPS image URL plus a scene prompt, return one restyled image. This tool currently submits SDXL img2img jobs; output is capped at 768×768 px. Combines two backend calls (/v1/uploads/input-image-by-url + /v1/jobs) into one tool.

Argument Default Notes
image_url required Public HTTPS URL. PNG / JPEG / WebP, ≤10 MB, longest side ≤1024 px. SSRF-guarded server-side fetch.
scene_prompt required 1–2000 chars
width / height 512 / 512 384–768, multiples of 64; width × height ≤ 768×768
strength 0.6 0.4–0.9. Lower keeps the reference visible; higher re-imagines the frame
crop_anchor center also top / bottom / left / right / top-left / top-right / bottom-left / bottom-right
wait_for_seconds 90 poll for completion. 0 = fire-and-forget

Install

pip install runfra-mcp

Requires Python ≥3.10.

Configure your MCP client

Get an API key at runfra.com/dashboard/api-keys. The key is shown once at creation — save it immediately.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "runfra": {
      "command": "runfra-mcp",
      "env": {
        "RUNFRA_API_KEY": "rfa_your_key_here"
      }
    }
  }
}

Restart Claude Desktop. The three tools appear under "Runfra" in the tool picker.

Cursor

Edit ~/.cursor/mcp.json:

{
  "mcpServers": {
    "runfra": {
      "command": "runfra-mcp",
      "env": {
        "RUNFRA_API_KEY": "rfa_your_key_here"
      }
    }
  }
}

Restart Cursor.

Any other MCP host

Run the server directly:

RUNFRA_API_KEY=rfa_your_key_here runfra-mcp

It speaks MCP over stdio — no network port is opened.

Optional env vars

  • RUNFRA_BASE_URL — override the API base URL. Default is https://api.runfra.com. Useful for staging environments.

Example session

You — "Generate me a photoreal red panda on a wooden bridge, golden-hour light. Wait for the result."

Claude uses runfra_create_image_job(prompt="a photoreal red panda...", batch_size=4), then immediately runfra_get_job_result(job_id=..., wait_for_seconds=120), and replies with the best_result_url.

You — "Now take this photo (https://cdn.example.com/lamp.jpg) and put it in a Mediterranean kitchen at golden hour."

Claude uses runfra_create_product_scene(image_url="https://cdn.example.com/lamp.jpg", scene_prompt="on a marble countertop in a Mediterranean kitchen, golden hour light", strength=0.55) and replies with the result URL.

Pricing

runfra-mcp itself is free. Image generation consumes Runfra credits; new accounts come with 100 credits.

Model ≤512 px ≤768 px >768 px
SDXL 1 cr 2 cr 3 cr
FLUX Schnell 2 cr 3 cr 4 cr
RunFra Pro (flux-dev) 5 cr 9 cr 14 cr

Total cost = credits_per_image × batch_size. Platform failures and no-result jobs are refunded automatically. Best-effort delivery (no candidate cleared the quality gate) does not refund — the image is still delivered. See runfra.com/pricing for credit packs.

Security

  • Treat your RUNFRA_API_KEY like a password. The MCP host process spawns this server with the key in its environment — anyone with read access to the host's config file can read the key.
  • Revoke keys at runfra.com/dashboard/api-keys if a key is exposed.
  • Reference image URLs must be public HTTPS. The Runfra API refuses http://, file://, data:, and any host that resolves to a private/ reserved IP range (RFC 1918, loopback, link-local incl. cloud metadata, CGNAT, IPv6 ULA / link-local).

Develop

git clone https://github.com/spencer9714/Runfra.git
cd Runfra/mcp-server
pip install -e .
RUNFRA_API_KEY=rfa_your_key_here runfra-mcp   # runs the server on stdio

License

MIT

Metadata

Release files for runfra-mcp 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for runfra-mcp 0.1.1
File Size Uploaded
runfra_mcp-0.1.1.tar.gz 8.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for runfra-mcp 0.1.1
File Interpreter ABI Platform
runfra_mcp-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 18.4 kB

Release files / runfra_mcp-0.1.1.tar.gz

Download URL runfra_mcp-0.1.1.tar.gz
Size 8.4 kB
Tags Source
SHA-256 checksum
How to use checksums
02e72502fa365320418b35822af5e92a4e6c7a82d11b40670e4d5298a8d87867
BLAKE2b-256 checksum
How to use checksums
2c704cfe21873d5d34c3e59128ccf20ab4136c733b51a1b9d99d7deb7af0fc05
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Release files / runfra_mcp-0.1.1-py3-none-any.whl

Download URL runfra_mcp-0.1.1-py3-none-any.whl
Size 10.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ac851ef2547a07dd7174bc667804dc0b4fa7517f036aa49ffbbf11a298df2a59
BLAKE2b-256 checksum
How to use checksums
950fb502000c760155674569e0039c2d8012f912a5ac4eaae84f74133a829ee0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page