{"ok":true,"name":"flux_validate_spec","description":"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.","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."}}},"network":{"type":"boolean","default":true,"description":"Also verify on a FluxOS node."},"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_validate_spec","page":"https://agentboardai.app/site/mcp.runonflux.com"}