{"openapi":"3.1.0","info":{"title":"Linode Node Balancers (BYOK) API","version":"0.1.0","description":"Linode Node Balancers (BYOK) lets an AI assistant read your own Linode Node Balancers data through the Linode Node Balancers API with a key you supply (personal access token (read-only scopes are enough)). Read-only: 9 tools (list_nodebalancer_types, list_configs, get_config, list_config_nodes, get_config_node, list_nodebalancer_firewalls, get_nodebalancer_stats, list_nodebalancer_vpc_configs,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-linode-nodebalancers.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-linode-nodebalancers/docs"},"termsOfService":"https://connectorbay.com/byok-linode-nodebalancers/terms"},"servers":[{"url":"https://byok-linode-nodebalancers.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-linode-nodebalancers/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_nodebalancer_types":{"post":{"operationId":"list_nodebalancer_types","summary":"List the NodeBalancer plan types with hourly and monthly price, regional prices and monthly transfer. Use for \"How much ","description":"List the NodeBalancer plan types with hourly and monthly price, regional prices and monthly transfer. Use for \"How much does a Linode NodeBalancer cost\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_nodebalancer_typesArguments","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_configs":{"post":{"operationId":"list_configs","summary":"List the port configs of a NodeBalancer with port, protocol, algorithm, health check settings and counts of nodes up and","description":"List the port configs of a NodeBalancer with port, protocol, algorithm, health check settings and counts of nodes up and down. TLS keys are not returned. Use for \"How is my NodeBalancer 12345 configured and are its backends up\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"nodebalancer_id":{"description":"Numeric id of the NodeBalancer, as shown by the Linode connector's list_nodebalancers.","minimum":1,"title":"Nodebalancer Id","type":"integer"},"page_size":{"anyOf":[{"maximum":500,"minimum":25,"type":"integer"},{"type":"null"}],"default":100,"description":"How many results to return (25 to 500).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; 'pages' in the answer is the total number of pages.","title":"Page"}},"required":["nodebalancer_id"],"title":"list_configsArguments","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_config":{"post":{"operationId":"get_config","summary":"Get one NodeBalancer config: port, protocol, algorithm, stickiness, health check settings and counts of nodes up and dow","description":"Get one NodeBalancer config: port, protocol, algorithm, stickiness, health check settings and counts of nodes up and down. Use for \"Show the health check of NodeBalancer 12345 config 4321\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"nodebalancer_id":{"description":"Numeric id of the NodeBalancer, as shown by the Linode connector's list_nodebalancers.","minimum":1,"title":"Nodebalancer Id","type":"integer"},"config_id":{"description":"Numeric id of the NodeBalancer config (port listener), as shown by list_configs.","minimum":1,"title":"Config Id","type":"integer"}},"required":["nodebalancer_id","config_id"],"title":"get_configArguments","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_config_nodes":{"post":{"operationId":"list_config_nodes","summary":"List the backend nodes of a NodeBalancer config with address, mode, weight and up or down status. Use for \"Which backend","description":"List the backend nodes of a NodeBalancer config with address, mode, weight and up or down status. Use for \"Which backend nodes of NodeBalancer 12345 are down\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"nodebalancer_id":{"description":"Numeric id of the NodeBalancer, as shown by the Linode connector's list_nodebalancers.","minimum":1,"title":"Nodebalancer Id","type":"integer"},"config_id":{"description":"Numeric id of the NodeBalancer config (port listener), as shown by list_configs.","minimum":1,"title":"Config Id","type":"integer"},"page_size":{"anyOf":[{"maximum":500,"minimum":25,"type":"integer"},{"type":"null"}],"default":100,"description":"How many results to return (25 to 500).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; 'pages' in the answer is the total number of pages.","title":"Page"}},"required":["nodebalancer_id","config_id"],"title":"list_config_nodesArguments","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_config_node":{"post":{"operationId":"get_config_node","summary":"Get one backend node of a NodeBalancer config: address, mode, weight and status. Use for \"Is node 777 of NodeBalancer 12","description":"Get one backend node of a NodeBalancer config: address, mode, weight and status. Use for \"Is node 777 of NodeBalancer 12345 up\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"nodebalancer_id":{"description":"Numeric id of the NodeBalancer, as shown by the Linode connector's list_nodebalancers.","minimum":1,"title":"Nodebalancer Id","type":"integer"},"config_id":{"description":"Numeric id of the NodeBalancer config (port listener), as shown by list_configs.","minimum":1,"title":"Config Id","type":"integer"},"node_id":{"description":"Numeric id of the node, as shown by list_config_nodes.","minimum":1,"title":"Node Id","type":"integer"}},"required":["nodebalancer_id","config_id","node_id"],"title":"get_config_nodeArguments","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_nodebalancer_firewalls":{"post":{"operationId":"list_nodebalancer_firewalls","summary":"List the Cloud Firewalls attached to a NodeBalancer with status, tags and default inbound and outbound policy. Use for \"","description":"List the Cloud Firewalls attached to a NodeBalancer with status, tags and default inbound and outbound policy. Use for \"Which firewalls protect NodeBalancer 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"nodebalancer_id":{"description":"Numeric id of the NodeBalancer, as shown by the Linode connector's list_nodebalancers.","minimum":1,"title":"Nodebalancer Id","type":"integer"},"page_size":{"anyOf":[{"maximum":500,"minimum":25,"type":"integer"},{"type":"null"}],"default":100,"description":"How many results to return (25 to 500).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; 'pages' in the answer is the total number of pages.","title":"Page"}},"required":["nodebalancer_id"],"title":"list_nodebalancer_firewallsArguments","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_nodebalancer_stats":{"post":{"operationId":"get_nodebalancer_stats","summary":"Get the last day of connection and traffic in and out data points for a NodeBalancer. Use for \"How much traffic did Node","description":"Get the last day of connection and traffic in and out data points for a NodeBalancer. Use for \"How much traffic did NodeBalancer 12345 handle today\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"nodebalancer_id":{"description":"Numeric id of the NodeBalancer, as shown by the Linode connector's list_nodebalancers.","minimum":1,"title":"Nodebalancer Id","type":"integer"}},"required":["nodebalancer_id"],"title":"get_nodebalancer_statsArguments","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_nodebalancer_vpc_configs":{"post":{"operationId":"list_nodebalancer_vpc_configs","summary":"List the VPC subnet attachments of a NodeBalancer with VPC, subnet and IPv4 range. Use for \"Which VPC subnets is NodeBal","description":"List the VPC subnet attachments of a NodeBalancer with VPC, subnet and IPv4 range. Use for \"Which VPC subnets is NodeBalancer 12345 attached to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"nodebalancer_id":{"description":"Numeric id of the NodeBalancer, as shown by the Linode connector's list_nodebalancers.","minimum":1,"title":"Nodebalancer Id","type":"integer"},"page_size":{"anyOf":[{"maximum":500,"minimum":25,"type":"integer"},{"type":"null"}],"default":100,"description":"How many results to return (25 to 500).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; 'pages' in the answer is the total number of pages.","title":"Page"}},"required":["nodebalancer_id"],"title":"list_nodebalancer_vpc_configsArguments","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_nodebalancer_vpc_config":{"post":{"operationId":"get_nodebalancer_vpc_config","summary":"Get one VPC attachment of a NodeBalancer: VPC, subnet and IPv4 range. Use for \"Show VPC attachment 55 of NodeBalancer 12","description":"Get one VPC attachment of a NodeBalancer: VPC, subnet and IPv4 range. Use for \"Show VPC attachment 55 of NodeBalancer 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"nodebalancer_id":{"description":"Numeric id of the NodeBalancer, as shown by the Linode connector's list_nodebalancers.","minimum":1,"title":"Nodebalancer Id","type":"integer"},"vpc_config_id":{"description":"Numeric id of the VPC attachment, as shown by list_nodebalancer_vpc_configs.","minimum":1,"title":"Vpc Config Id","type":"integer"}},"required":["nodebalancer_id","vpc_config_id"],"title":"get_nodebalancer_vpc_configArguments","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}}}}