Skip to main content
Glama
Flux Cloud MCP server

Flux Cloud MCP server

Official
by RunOnFlux

Flux Cloud MCP server

An MCP server that lets any AI agent use Flux Cloud, the decentralized cloud: quote an app in US dollars, deploy it, pay for it, watch it come up, read its logs, update it, and cancel it. Works with Claude Code, Claude Desktop, Cursor, Windsurf, OpenCode and every other MCP host.

There is no account. Two keys are the whole identity:

Key

Address

Role

FLUX_ID_PRIVATE_KEY

Flux ID, 1...

Owns apps. Signs specifications and API sessions. Never holds funds.

FLUX_PAYMENT_PRIVATE_KEY

Flux address, t1...

Holds FLUX and pays deployment fees on-chain.

The server generates a pair for you (flux_generate_keys); fund the payment address with FLUX and deploy.

Pricing policy

Every price this server shows is the Flux Cloud USD price, the same one home.runonflux.io charges, converted to FLUX at the live market rate with the 5 percent pay-in-FLUX discount. Quotes come from the network itself (/apps/calculatefiatandfluxprice), so they include the $0.99 minimum, hardware and term discounts, and update credits.

The blockchain's own acceptance threshold is several times lower. It is never shown as a price; it is only checked as a guard before a payment is broadcast.

Related MCP server: Nexlayer MCP

Install

npm install -g @runonflux/flux-cloud-mcp     # or: yarn global add @runonflux/flux-cloud-mcp

Or run it without installing: npx @runonflux/flux-cloud-mcp.

Claude Code

claude mcp add flux-cloud -s user \
  -e FLUX_ID_PRIVATE_KEY=<wif> -e FLUX_PAYMENT_PRIVATE_KEY=<wif> \
  -- npx -y @runonflux/flux-cloud-mcp

Claude Desktop, Cursor, Windsurf (JSON config)

{
  "mcpServers": {
    "flux-cloud": {
      "command": "npx",
      "args": ["-y", "@runonflux/flux-cloud-mcp"],
      "env": {
        "FLUX_ID_PRIVATE_KEY": "<wif of the Flux ID>",
        "FLUX_PAYMENT_PRIVATE_KEY": "<wif of the payment address>"
      }
    }
  }
}

Keys are optional. Without them every read-only tool works, and flux_generate_keys will create a pair to put into the config.

OpenCode

{
  "mcp": {
    "flux-cloud": {
      "type": "local",
      "command": ["npx", "-y", "@runonflux/flux-cloud-mcp"],
      "environment": {
        "FLUX_ID_PRIVATE_KEY": "<wif>",
        "FLUX_PAYMENT_PRIVATE_KEY": "<wif>"
      }
    }
  }
}

Tools

Tool

What it does

Spends FLUX

flux_get_identity

Flux ID, payment address, balance in FLUX and USD

no

flux_generate_keys

New Flux ID + payment key pair with setup instructions

no

flux_get_pricing

USD rate card, FLUX/USD rate, discounts, reference sizes

no

flux_build_spec

Simple description (image, ports, cpu/ram/hdd, months) to a full v8 spec

no

flux_validate_spec

Local rules plus verification on a FluxOS node

no

flux_quote_app

USD price and FLUX to pay, for a registration or an update

no

flux_deploy_app

Plan (default) or, with confirm=true, sign, broadcast and pay

with confirm

flux_wait_for_app

Poll until accepted and instances run; returns URLs

no

flux_get_app

Any app's spec, expiry, instances, URLs

no

flux_list_my_apps

Apps owned by the Flux ID, with instance counts and days left

no

flux_get_app_logs

Container logs from a running instance (owner only); component auto-selected, private apps decrypted with the owner key

no

flux_get_app_stats

Live CPU/memory/network of an instance (owner only)

no

flux_control_app

Restart, redeploy or remove instances, per node or globally

no

flux_cancel_app

End an app early by shortening its term

with confirm

flux_get_network_info

Node counts, height, FLUX/USD, deployment address

no

Resources flux://guide/overview, flux://guide/spec-format, flux://guide/pricing and flux://guide/gotchas give the agent the domain knowledge; the deploy_on_flux prompt walks it through a deployment.

A typical session

> deploy nginx on flux, 3 instances, one month

flux_get_identity      -> Flux ID 1Ab..., payer t1Cd..., 996.98 FLUX ($48.74)
flux_build_spec        -> v8 spec, port 39978 -> 80, r:/data, valid
flux_quote_app         -> $0.99 for 1 month, pay 19.24 FLUX (5% FLUX discount)
   user agrees
flux_deploy_app confirm=true
                       -> message hash 8d2f..., paid 19.24 FLUX, txid 0c41...
flux_wait_for_app      -> accepted at height 2941560, 3/3 instances running
                          https://myapp.app.runonflux.io

How a deployment works

  1. The spec is verified through api.runonflux.io exactly as it will be at registration (image reachable, architecture, ports, name free). If the balancer refuses, a few healthy nodes are probed and tried in turn.

  2. The network quotes the USD price; the server checks the payer's balance.

  3. With confirm=true the Flux ID signs the spec, the same endpoint broadcasts it to the network and returns a 64-character message hash.

  4. The payment address sends the quoted FLUX to the network deployment address with the hash in an OP_RETURN output. Right before signing, the amount is re-checked against a freshly fetched price table, because an underpaid message is dropped silently and the FLUX is not refunded.

  5. Nodes pair the confirmed payment with the message and publish the app. Instances then spawn and pull the image.

Private (enterprise) apps publish an empty component list, so flux_get_app, flux_get_app_logs and flux_get_app_stats fetch the decrypted specification from an ArcaneOS node with the owner key when it is configured or passed. Only component names, images, ports and sizes are returned; environment variables, commands and registry credentials never leave the server.

Updates use the same tool: an existing app of the same owner gets a fluxappupdate message and the network credits the unused part of the old term. Private (enterprise) apps are supported through the enterprise argument: components are encrypted for the network and only ArcaneOS nodes can run them.

Hosted server: mcp.runonflux.com

The same server also runs on Flux Cloud itself, over Streamable HTTP, for hosts that cannot start a local process (claude.ai connectors, ChatGPT, browser and mobile agents). Add it as a remote MCP server:

https://mcp.runonflux.com/mcp   (also https://mcp.runonflux.io/mcp)

The hosted server holds no keys. Read-only tools need none. Tools that sign or pay take fluxIdPrivateKey and paymentPrivateKey as call arguments, used in memory for that call and never logged or stored. The server's instructions tell agents to create a dedicated pair with flux_generate_keys and to have the user fund only what a deployment needs, rather than asking for the keys of a wallet used elsewhere. Anything typed into a chat passes through the AI vendor and the host's history, so treat such a pair as disposable and keep its balance small. For larger budgets, run the local server, where keys never leave your machine.

Run your own copy with Docker:

docker run -p 3000:3000 runonflux/flux-cloud-mcp

It is stateless, so any number of instances can sit behind one load balancer. GET /healthz reports liveness. The Flux app specification that runs the public instance is in deploy/cloudmcp.json.

Configuration

Variable

Default

Purpose

FLUX_ID_PRIVATE_KEY

WIF of the Flux ID (owner)

FLUX_PAYMENT_PRIVATE_KEY

WIF of the paying address

FLUX_API_URL

https://api.runonflux.io

Load-balanced FluxOS API for reads and quotes

FLUX_NODE_URL

auto

Pin one FluxOS node for registrations

FLUX_EXPLORER_URLS

explorer.runonflux.io,flux-explorer.sspwallet.io

Insight explorers for UTXOs and broadcast

FLUX_STATS_URL

https://stats.runonflux.io

USD rate card

FLUX_RATES_URL

https://viprates.runonflux.io

FLUX market rate

Security notes

  • Private keys stay in the server process. No tool ever returns a configured key; flux_generate_keys returns only the keys it just created.

  • Nothing is spent unless a tool is called with confirm=true. Hosts that ask before tool calls will show the USD amount in the arguments' context.

  • FluxOS sessions are self-issued signed phrases valid for a few hours; no password or token is stored anywhere.

  • Use a dedicated payment address holding only what you intend to spend.

Development

yarn install
yarn type-check && yarn lint && yarn format:check && yarn build && yarn test
yarn test:live      # differential test of the USD estimator against the network

The USD estimator, the specification formatter and the consensus guard mirror the FluxOS code (appSpecHelpers.js, appUtilities.js, messageVerifier.js) and the live test checks the estimator against the network on every run.

License

MIT

Available Tools

15 tools
flux_build_specBuild a Flux app specification from a simple descriptionBInspect

Turns images, ports, resources and a term into a complete, correctly formatted v8 specification, with public ports auto-picked and data replication enabled. Returns the spec plus local validation errors and warnings.

Inputs: name (required), components (required), nodes, months, +6 more.

flux_cancel_appCancel an app (stop it and stop paying)AInspect

Ends an app early by updating its term so it expires within about an hour. The network then uninstalls it everywhere. With confirm=true this signs and pays the (usually minimal) update; without it, returns the plan.

Inputs: name (required), confirm.

flux_control_appRestart, redeploy or remove app instancesAInspect

restart: restarts containers. redeploy: pulls the image again and recreates containers (hard=true also wipes data). remove: uninstalls from nodes; the registration stays and the network re-spawns it elsewhere, so use flux_cancel_app to stop paying. Scope is one node (nodeIp) or every node running the app (global). Requires the owner key.

Inputs: name (required), action (required), hard, scope, +1 more.

flux_deploy_appDeploy (register or update) an app and pay for itAInspect

Validates the specification on a node, quotes it, and with confirm=true signs it with the Flux ID, broadcasts it and pays the quoted FLUX from the payment address. Without confirm it only returns the plan (price, balance, warnings) and spends nothing. Registers a new name or updates an existing app of the same owner. Then call flux_wait_for_app with the returned txid.

Inputs: spec (required), confirm, enterprise.

flux_generate_keysGenerate a new Flux ID and payment key pairAInspect

Creates two fresh private keys (WIF): one for the Flux ID that will own apps, one for the address that pays. The response contains the secrets; store them in the MCP server environment as FLUX_ID_PRIVATE_KEY and FLUX_PAYMENT_PRIVATE_KEY, then restart the server. Nothing is stored or sent anywhere by this tool.

Inputs: no named parameters.

flux_get_appGet a deployed app: spec, status, instances, URLsBInspect

Looks up any app on the network by name and returns its published specification, expiry, running instances and URLs.

Inputs: name (required).

flux_get_app_logsRead container logs from a running instanceAInspect

Fetches the last N log lines of an app (or one component of it) from one of the nodes running it. Requires the owner key.

Inputs: name (required), lines, nodeIp, component.

flux_get_app_statsGet live resource usage of a running instanceBInspect

CPU, memory and network stats of the containers of an app on one node. Requires the owner key.

Inputs: name (required), nodeIp, component.

flux_get_identityShow the configured Flux identity and balanceAInspect

Returns the Flux ID (app owner address), the payment address and its spendable FLUX balance with its USD value. Explains what to configure if keys are missing. Never returns private keys.

Inputs: no named parameters.

flux_get_network_infoNetwork overviewBInspect

Node counts by tier, current block height, FLUX/USD rate and the deployment payment address.

Inputs: no named parameters.

flux_get_pricingGet the Flux Cloud rate cardAInspect

Returns the current USD rate card, the live FLUX/USD rate, the pay-in-FLUX discount and instant USD estimates for a few reference sizes. Use flux_quote_app for the exact price of a specific app.

Inputs: no named parameters.

flux_list_my_appsList apps owned by the configured Flux IDBInspect

Lists every app registered by the owner (or a given Flux ID) with expiry and instance counts.

Inputs: owner, nameContains.

flux_quote_appQuote the price of an app in USD and FLUXAInspect

Returns the Flux Cloud price for registering the given specification, or for updating it if an app of that name already exists (the unused part of the current term is credited). Price is in USD with the FLUX amount at market rate.

Inputs: spec (required).

flux_validate_specValidate a specification locally and on the networkAInspect

Runs the local rule checks, then asks a FluxOS node to verify the specification exactly as it would at registration (image reachable, architecture, ports, name availability). Returns the node-formatted spec on success.

Inputs: spec (required), network.

flux_wait_for_appWait for a deployment to be accepted and its instances to runAInspect

Polls the network for up to timeoutSeconds (default 300, max 600). Returns payment confirmations, whether the spec was accepted, and the running instances with URLs. Safe to call repeatedly until done=true.

Inputs: name (required), txid, previousHash, timeoutSeconds.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 15 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes across the deployment lifecycle, with explicit descriptions separating build/validate/quote/deploy. The main potential confusion is between flux_cancel_app and flux_control_app's remove option, but the descriptions clarify that cancel stops payment while remove only uninstalls from nodes.

    Naming Consistency5/5

    All tool names use the same flux_ prefix and consistent snake_case verb_noun pattern, such as flux_get_app, flux_deploy_app, flux_list_my_apps, and flux_get_app_logs. There are no mixed conventions or ambiguous naming styles.

    Tool Count5/5

    15 tools is well within the appropriate range for a cloud deployment and management server. Each tool covers a distinct step in the Flux app lifecycle, from key generation and pricing to deployment, monitoring, and cancellation.

    Completeness5/5

    The surface covers the full app lifecycle: identity and keys, pricing and quotes, spec building and validation, deployment and waiting, listing and inspection, logs and stats, runtime control, cancellation, and network info. Update is handled through deploy_app for existing apps, so no major gaps are apparent.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Enables AI agents to participate in a marketplace for buying, selling, and trading services with atomic escrow and cryptographic verification. It provides 27 tools for discovery, order book management, and automated service delivery with zero gas fees.
      32
      60 npm
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Agentic cloud platform with 45+ MCP tools. Deploy any containerized stack, debug live pods (shell, file editing, DB queries), manage custom domains & TLS, push to built-in container registry, scale pods, and manage GPU workloads. The infrastructure layer where AI agents ship software to production.
      9
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables developers and AI agents to check, price, pay for, and follow paid work on a network of AI agents over stdio or streamable HTTP, exposing eight tools where only ordering can spend and only behind four safety gates. Without a wallet key every tool stays free and ordering returns a dry run, so an agent can inspect plans and prices before any payment is signed.
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables an AI agent to check live GPU prices, get a cost quote, rent a per-minute GPU instance, upload code and data, run jobs in the background, tail logs, download results and destroy the instance to stop billing. Includes guardrail limits on spend, hours and idle time, safe file transfer, and access to an OpenAI-compatible model API for inference without renting a GPU.
      1,341 npm
      MIT