{"ok":true,"name":"flux_deploy_app","description":"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["spec"],"properties":{"spec":{"type":"object","required":["name","description","compose"],"properties":{"name":{"type":"string","maxLength":63,"minLength":1},"nodes":{"type":"array","items":{"type":"string"},"default":[]},"owner":{"type":"string","description":"Flux ID. Defaults to the configured FLUX_ID_PRIVATE_KEY identity."},"expire":{"type":"integer","default":88000,"maximum":1056000,"minimum":1,"description":"Term in blocks; 88000 = 1 month."},"compose":{"type":"array","items":{"type":"object","required":["repotag","containerData","cpu","ram","hdd"],"properties":{"cpu":{"type":"number","description":"Cores, 0.1 to 15 in 0.1 steps."},"hdd":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"GB, 1 to 820."},"ram":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"MB, 100 to 59000 in steps of 100."},"name":{"type":"string","maxLength":63,"description":"Component name. Defaults to the app name."},"ports":{"type":"array","items":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},"default":[],"description":"Public ports. Prefer 31000-39999."},"domains":{"type":"array","items":{"type":"string"},"default":[],"description":"Custom domain per port, \"\" for none. Parallel to ports."},"repotag":{"type":"string","description":"Docker image with an explicit tag, e.g. \"nginx:1.27-alpine\"."},"commands":{"type":"array","items":{"type":"string"},"default":[],"description":"Container Cmd, max 20 strings."},"repoauth":{"type":"string","default":"","description":"\"user:token\" for a private registry, else \"\"."},"description":{"type":"string","maxLength":256},"containerData":{"type":"string","description":"Persisted path, e.g. \"r:/data\" (r: = replicated across instances)."},"containerPorts":{"type":"array","items":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},"default":[],"description":"Ports the container listens on, parallel to ports."},"environmentParameters":{"type":"array","items":{"type":"string"},"default":[],"description":"\"KEY=value\" strings, max 20."}}},"maxItems":10,"minItems":0},"version":{"type":"number","const":8,"default":8},"contacts":{"type":"array","items":{"type":"string"},"default":[]},"staticip":{"type":"boolean","default":false},"instances":{"type":"integer","default":3,"maximum":100,"minimum":1},"enterprise":{"type":"string","default":""},"description":{"type":"string","maxLength":256,"minLength":1},"geolocation":{"type":"array","items":{"type":"string"},"default":[],"description":"e.g. [\"acEU\"] allow Europe, [\"a!cAS\"] deny Asia."}}},"confirm":{"type":"boolean","default":false,"description":"Set true to actually sign, broadcast and pay."},"enterprise":{"type":"object","required":["compose"],"properties":{"compose":{"type":"array","items":{"type":"object","required":["repotag","containerData","cpu","ram","hdd"],"properties":{"cpu":{"type":"number","description":"Cores, 0.1 to 15 in 0.1 steps."},"hdd":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"GB, 1 to 820."},"ram":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"MB, 100 to 59000 in steps of 100."},"name":{"type":"string","maxLength":63,"description":"Component name. Defaults to the app name."},"ports":{"type":"array","items":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},"default":[],"description":"Public ports. Prefer 31000-39999."},"domains":{"type":"array","items":{"type":"string"},"default":[],"description":"Custom domain per port, \"\" for none. Parallel to ports."},"repotag":{"type":"string","description":"Docker image with an explicit tag, e.g. \"nginx:1.27-alpine\"."},"commands":{"type":"array","items":{"type":"string"},"default":[],"description":"Container Cmd, max 20 strings."},"repoauth":{"type":"string","default":"","description":"\"user:token\" for a private registry, else \"\"."},"description":{"type":"string","maxLength":256},"containerData":{"type":"string","description":"Persisted path, e.g. \"r:/data\" (r: = replicated across instances)."},"containerPorts":{"type":"array","items":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},"default":[],"description":"Ports the container listens on, parallel to ports."},"environmentParameters":{"type":"array","items":{"type":"string"},"default":[],"description":"\"KEY=value\" strings, max 20."}}},"maxItems":10,"minItems":1},"contacts":{"type":"array","items":{"type":"string"},"default":[]}},"description":"Make the app private: these components and contacts are encrypted so only the nodes running the app can read them. When set, spec.compose should be [] and spec.enterprise \"\"."},"fluxIdPrivateKey":{"type":"string","description":"WIF private key of the Flux ID that owns the app. Use a dedicated key from flux_generate_keys, never a main wallet key."},"paymentPrivateKey":{"type":"string","description":"WIF private key of the Flux address that pays. Fund it with only what you intend to spend."}}},"serverUrl":"https://mcp.runonflux.com/mcp","transport":"http","handshake":"ok","host":"mcp.runonflux.com","score":17,"grade":"F","auth":"unknown","lastScannedAt":"2026-10-30T13:18:52.515Z","stale":false,"permalink":"https://agentboardai.app/mcp/mcp.runonflux.com/flux_deploy_app","page":"https://agentboardai.app/site/mcp.runonflux.com"}