{"openapi":"3.1.0","info":{"title":"Fly.io Machines (BYOK) API","version":"0.1.0","description":"Fly.io Machines (BYOK) lets an AI assistant read your own Fly.io Machines data through the Fly.io Machines API with a key you supply (Fly.io access token (a read-only or org-scoped token is enough)). Read-only: 9 tools (get_current_token, list_apps, get_app, list_machines, get_machine, list_volumes, list_certificates, list_ip_assignments, list_regions). The BYOK key travels with each request, is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-flyio.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-flyio/docs"},"termsOfService":"https://connectorbay.com/byok-flyio/terms"},"servers":[{"url":"https://byok-flyio.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-flyio/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_current_token":{"post":{"operationId":"get_current_token","summary":"Show what the access token is: the user, organization and apps it is limited to. Use for \"What can my Fly.io token acces","description":"Show what the access token is: the user, organization and apps it is limited to. Use for \"What can my Fly.io token access\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_current_tokenArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_apps":{"post":{"operationId":"list_apps","summary":"List the Fly.io apps of one organization with status, Machine and volume counts and network name. Use for \"Which Fly.io ","description":"List the Fly.io apps of one organization with status, Machine and volume counts and network name. Use for \"Which Fly.io apps do I have in my personal organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org_slug":{"description":"Organization slug whose apps to list, or 'personal' for your own account.","maxLength":100,"title":"Org Slug","type":"string"},"limit":{"anyOf":[{"maximum":5000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many apps to return (1 to 5000). Without it all apps come in one answer; with it, use next_cursor to continue.","title":"Limit"},"cursor":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"The next_cursor value from the previous answer; needs limit. Cursors expire after 30 minutes.","title":"Cursor"}},"required":["org_slug"],"title":"list_appsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_app":{"post":{"operationId":"get_app","summary":"Get one Fly.io app: status, organization, Machine and volume counts and network. Use for \"How many Machines does Fly app","description":"Get one Fly.io app: status, organization, Machine and volume counts and network. Use for \"How many Machines does Fly app my-app have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Name of the Fly app, for example 'my-app'.","maxLength":100,"title":"App Name","type":"string"}},"required":["app_name"],"title":"get_appArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_machines":{"post":{"operationId":"list_machines","summary":"List the Machines of an app with state, region, image reference, private IP and dates. By default only the summary is re","description":"List the Machines of an app with state, region, image reference, private IP and dates. By default only the summary is returned (no environment or config). Use for \"Which Machines of Fly app my-app are started, and in which regions\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Name of the Fly app, for example 'my-app'.","maxLength":100,"title":"App Name","type":"string"},"region":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only Machines in this region code, for example 'ams'.","title":"Region"},"state":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated states to keep: created, started, stopped, suspended.","title":"State"},"include_deleted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include deleted Machines.","title":"Include Deleted"},"summary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True (default) returns summary info only; false adds config, checks and events, which may contain environment values.","title":"Summary"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many Machines to return (1 to 1000); the API treats it as advisory and may return fewer.","title":"Limit"}},"required":["app_name"],"title":"list_machinesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_machine":{"post":{"operationId":"get_machine","summary":"Get one Machine by id: state, region, image, CPU and memory size, private IP and dates. Environment variables and secret","description":"Get one Machine by id: state, region, image, CPU and memory size, private IP and dates. Environment variables and secrets are not returned. Use for \"What size and state is Machine 148e21ab1e7d98 of Fly app my-app\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Name of the Fly app, for example 'my-app'.","maxLength":100,"title":"App Name","type":"string"},"machine_id":{"description":"Id of the Machine, as shown by list_machines.","maxLength":64,"title":"Machine Id","type":"string"}},"required":["app_name","machine_id"],"title":"get_machineArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_volumes":{"post":{"operationId":"list_volumes","summary":"List the volumes of an app with size in GB, region, state, encryption and the Machine each is attached to. Use for \"Whic","description":"List the volumes of an app with size in GB, region, state, encryption and the Machine each is attached to. Use for \"Which volumes does Fly app my-app have and where are they attached\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Name of the Fly app, for example 'my-app'.","maxLength":100,"title":"App Name","type":"string"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many volumes to return (1 to 1000); the API treats it as advisory and may return fewer.","title":"Limit"}},"required":["app_name"],"title":"list_volumesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_certificates":{"post":{"operationId":"list_certificates","summary":"List the TLS certificates of an app with hostname, status and configuration state. Use for \"Which certificates and hostn","description":"List the TLS certificates of an app with hostname, status and configuration state. Use for \"Which certificates and hostnames does Fly app my-app have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Name of the Fly app, for example 'my-app'.","maxLength":100,"title":"App Name","type":"string"},"filter":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only hostnames that contain this text.","title":"Filter"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many certificates to return (1 to 500, default 25).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"The next_cursor value from the previous answer.","title":"Cursor"}},"required":["app_name"],"title":"list_certificatesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_ip_assignments":{"post":{"operationId":"list_ip_assignments","summary":"List the IP addresses assigned to an app with region, service name, and whether each is shared or egress. Use for \"Which","description":"List the IP addresses assigned to an app with region, service name, and whether each is shared or egress. Use for \"Which IP addresses does Fly app my-app have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_name":{"description":"Name of the Fly app, for example 'my-app'.","maxLength":100,"title":"App Name","type":"string"}},"required":["app_name"],"title":"list_ip_assignmentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_regions":{"post":{"operationId":"list_regions","summary":"List Fly.io regions with code, name, geographic area, whether a paid plan is required and which one is nearest. Use for ","description":"List Fly.io regions with code, name, geographic area, whether a paid plan is required and which one is nearest. Use for \"Which Fly.io regions are available\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_regionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}