{"openapi":"3.1.0","info":{"title":"Scaleway (BYOK) API","version":"0.1.0","description":"Scaleway (BYOK) lets an AI assistant read your own Scaleway data through the Scaleway API with a key you supply (API secret key (give it read-only IAM permissions)). Read-only: 7 tools (list_projects, list_servers, get_server, list_flexible_ips, list_volumes, list_snapshots, list_security_groups). The BYOK key travels with each request, is used for that one call only and is never stored, logged...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-scaleway.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-scaleway/docs"},"termsOfService":"https://connectorbay.com/byok-scaleway/terms"},"servers":[{"url":"https://byok-scaleway.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-scaleway/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/list_projects":{"post":{"operationId":"list_projects","summary":"List the Projects of a Scaleway Organization with name, description, creation date and status. Use for \"Which Projects e","description":"List the Projects of a Scaleway Organization with name, description, creation date and status. Use for \"Which Projects exist in my Scaleway Organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Id (UUID) of the Organization whose Projects to list.","maxLength":64,"title":"Organization Id","type":"string"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only Projects whose name contains this text.","title":"Name"},"order_by":{"anyOf":[{"enum":["created_at_asc","created_at_desc","name_asc","name_desc"],"type":"string"},{"type":"null"}],"default":"created_at_asc","description":"Order of the list.","title":"Order By"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["organization_id"],"title":"list_projectsArguments","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_servers":{"post":{"operationId":"list_servers","summary":"List Instances (virtual servers) in one availability zone with state, commercial type, public and private IPs, image, ta","description":"List Instances (virtual servers) in one availability zone with state, commercial type, public and private IPs, image, tags and dates. The API lists running Instances unless a state is given. Use for \"Which of my Scaleway Instances are running in fr-par-1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Availability zone to query, for example 'fr-par-1'. Resources exist per zone, so ask each zone you use.","enum":["fr-par-1","fr-par-2","fr-par-3","nl-ams-1","nl-ams-2","nl-ams-3","pl-waw-1","pl-waw-2","pl-waw-3","it-mil-1"],"title":"Zone","type":"string"},"project":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources of this Project id (UUID).","title":"Project"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources whose name contains this text.","title":"Name"},"tags":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources with these exact tags; separate several tags with commas.","title":"Tags"},"state":{"anyOf":[{"enum":["running","stopped","stopped in place","starting","stopping","locked"],"type":"string"},{"type":"null"}],"default":null,"description":"Only Instances in this state; the API documents 'running' as its default.","title":"State"},"order":{"anyOf":[{"enum":["creation_date_desc","creation_date_asc","modification_date_desc","modification_date_asc"],"type":"string"},{"type":"null"}],"default":"creation_date_desc","description":"Order of the list.","title":"Order"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["zone"],"title":"list_serversArguments","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_server":{"post":{"operationId":"get_server","summary":"Get one Instance by id: state, commercial type, IPs, image, security group, tags and dates. Use for \"What is the state a","description":"Get one Instance by id: state, commercial type, IPs, image, security group, tags and dates. Use for \"What is the state and IP of Scaleway Instance 22222222-2222-4222-8222-222222222222\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Availability zone to query, for example 'fr-par-1'. Resources exist per zone, so ask each zone you use.","enum":["fr-par-1","fr-par-2","fr-par-3","nl-ams-1","nl-ams-2","nl-ams-3","pl-waw-1","pl-waw-2","pl-waw-3","it-mil-1"],"title":"Zone","type":"string"},"server_id":{"description":"Id (UUID) of the Instance, as shown by list_servers.","maxLength":64,"title":"Server Id","type":"string"}},"required":["zone","server_id"],"title":"get_serverArguments","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_flexible_ips":{"post":{"operationId":"list_flexible_ips","summary":"List flexible (routed) IP addresses in one zone with type, state, reverse DNS, tags and the Instance each is attached to","description":"List flexible (routed) IP addresses in one zone with type, state, reverse DNS, tags and the Instance each is attached to. Use for \"Which flexible IPs do I have in Scaleway fr-par-1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Availability zone to query, for example 'fr-par-1'. Resources exist per zone, so ask each zone you use.","enum":["fr-par-1","fr-par-2","fr-par-3","nl-ams-1","nl-ams-2","nl-ams-3","pl-waw-1","pl-waw-2","pl-waw-3","it-mil-1"],"title":"Zone","type":"string"},"project":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources of this Project id (UUID).","title":"Project"},"tags":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources with these exact tags; separate several tags with commas.","title":"Tags"},"name":{"anyOf":[{"maxLength":45,"type":"string"},{"type":"null"}],"default":null,"description":"Only IPs whose address contains this text, for example '51.15'.","title":"Name"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["zone"],"title":"list_flexible_ipsArguments","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 block or local volumes in one zone with type, size in bytes, state and the Instance each is attached to. The API li","description":"List block or local volumes in one zone with type, size in bytes, state and the Instance each is attached to. The API lists l_ssd volumes unless a type is given. Use for \"How big are my Scaleway volumes in fr-par-1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Availability zone to query, for example 'fr-par-1'. Resources exist per zone, so ask each zone you use.","enum":["fr-par-1","fr-par-2","fr-par-3","nl-ams-1","nl-ams-2","nl-ams-3","pl-waw-1","pl-waw-2","pl-waw-3","it-mil-1"],"title":"Zone","type":"string"},"project":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources of this Project id (UUID).","title":"Project"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources whose name contains this text.","title":"Name"},"tags":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources with these exact tags; separate several tags with commas.","title":"Tags"},"volume_type":{"anyOf":[{"enum":["l_ssd","b_ssd","unified","scratch","sbs_volume","sbs_snapshot"],"type":"string"},{"type":"null"}],"default":null,"description":"Volume type to list; the API documents 'l_ssd' as its default.","title":"Volume Type"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["zone"],"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_snapshots":{"post":{"operationId":"list_snapshots","summary":"List volume snapshots in one zone with type, size in bytes, state and creation date. Use for \"Which snapshots do I have ","description":"List volume snapshots in one zone with type, size in bytes, state and creation date. Use for \"Which snapshots do I have in Scaleway fr-par-1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Availability zone to query, for example 'fr-par-1'. Resources exist per zone, so ask each zone you use.","enum":["fr-par-1","fr-par-2","fr-par-3","nl-ams-1","nl-ams-2","nl-ams-3","pl-waw-1","pl-waw-2","pl-waw-3","it-mil-1"],"title":"Zone","type":"string"},"project":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources of this Project id (UUID).","title":"Project"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources with exactly this name.","title":"Name"},"tags":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources with these exact tags; separate several tags with commas.","title":"Tags"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["zone"],"title":"list_snapshotsArguments","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_security_groups":{"post":{"operationId":"list_security_groups","summary":"List security groups in one zone with default inbound and outbound policy, statefulness and attached Instances. Use for ","description":"List security groups in one zone with default inbound and outbound policy, statefulness and attached Instances. Use for \"Which security groups do I have in Scaleway fr-par-1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Availability zone to query, for example 'fr-par-1'. Resources exist per zone, so ask each zone you use.","enum":["fr-par-1","fr-par-2","fr-par-3","nl-ams-1","nl-ams-2","nl-ams-3","pl-waw-1","pl-waw-2","pl-waw-3","it-mil-1"],"title":"Zone","type":"string"},"project":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources of this Project id (UUID).","title":"Project"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources with exactly this name.","title":"Name"},"tags":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only resources with these exact tags; separate several tags with commas.","title":"Tags"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["zone"],"title":"list_security_groupsArguments","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}}}}