{"openapi":"3.1.0","info":{"title":"Linode Networking (BYOK) API","version":"0.1.0","description":"Linode Networking (BYOK) lets an AI assistant read your own Linode Networking data through the Linode Networking API with a key you supply (personal access token (read-only scopes are enough)). Read-only: 12 tools (list_vpcs, get_vpc, list_vpc_subnets, list_vpc_ips, list_firewalls, list_firewall_rules, list_firewall_devices, list_ip_addresses, list_ipv6_ranges, list_vlans, list_reserved_ips,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-linode-vpc-networking.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-linode-vpc-networking/docs"},"termsOfService":"https://connectorbay.com/byok-linode-vpc-networking/terms"},"servers":[{"url":"https://byok-linode-vpc-networking.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-linode-vpc-networking/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_vpcs":{"post":{"operationId":"list_vpcs","summary":"List VPCs with label, region, description and the subnets inside each. Use for \"Which VPCs do I have on Linode and in wh","description":"List VPCs with label, region, description and the subnets inside each. Use for \"Which VPCs do I have on Linode and in which regions\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"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"}},"title":"list_vpcsArguments","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_vpc":{"post":{"operationId":"get_vpc","summary":"Get one VPC by id with its region and subnets (subnet ids, IPv4 ranges and the Linodes, NodeBalancers and databases in t","description":"Get one VPC by id with its region and subnets (subnet ids, IPv4 ranges and the Linodes, NodeBalancers and databases in them). Use for \"What subnets does VPC 321 contain\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"vpc_id":{"description":"Numeric id of the VPC, as shown by list_vpcs.","minimum":1,"title":"Vpc Id","type":"integer"}},"required":["vpc_id"],"title":"get_vpcArguments","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_vpc_subnets":{"post":{"operationId":"list_vpc_subnets","summary":"List the subnets of one VPC with IPv4 range and attached Linodes, NodeBalancers and databases. Use for \"Which Linodes si","description":"List the subnets of one VPC with IPv4 range and attached Linodes, NodeBalancers and databases. Use for \"Which Linodes sit in the subnets of VPC 321\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"vpc_id":{"description":"Numeric id of the VPC, as shown by list_vpcs.","minimum":1,"title":"Vpc 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":["vpc_id"],"title":"list_vpc_subnetsArguments","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_vpc_ips":{"post":{"operationId":"list_vpc_ips","summary":"List IP addresses used inside all VPCs, with the VPC, subnet, Linode, NAT 1:1 address and whether each is active. Use fo","description":"List IP addresses used inside all VPCs, with the VPC, subnet, Linode, NAT 1:1 address and whether each is active. Use for \"Which private VPC IP addresses are in use on my account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"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"}},"title":"list_vpc_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_firewalls":{"post":{"operationId":"list_firewalls","summary":"List Cloud Firewalls with status, tags, inbound and outbound policy and the entities each protects. Use for \"Which Cloud","description":"List Cloud Firewalls with status, tags, inbound and outbound policy and the entities each protects. Use for \"Which Cloud Firewalls exist and are they enabled\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"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"}},"title":"list_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/list_firewall_rules":{"post":{"operationId":"list_firewall_rules","summary":"List the inbound and outbound rules of one Cloud Firewall with action, protocol, ports and allowed addresses. Use for \"W","description":"List the inbound and outbound rules of one Cloud Firewall with action, protocol, ports and allowed addresses. Use for \"What inbound rules does Linode firewall 4455 apply\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"firewall_id":{"description":"Numeric id of the Cloud Firewall, as shown by list_firewalls.","minimum":1,"title":"Firewall Id","type":"integer"}},"required":["firewall_id"],"title":"list_firewall_rulesArguments","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_firewall_devices":{"post":{"operationId":"list_firewall_devices","summary":"List the services (Linodes, NodeBalancers and similar) a Cloud Firewall is assigned to. Use for \"Which Linodes is firewa","description":"List the services (Linodes, NodeBalancers and similar) a Cloud Firewall is assigned to. Use for \"Which Linodes is firewall 4455 attached to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"firewall_id":{"description":"Numeric id of the Cloud Firewall, as shown by list_firewalls.","minimum":1,"title":"Firewall 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":["firewall_id"],"title":"list_firewall_devicesArguments","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_addresses":{"post":{"operationId":"list_ip_addresses","summary":"List IPv4 and IPv6 addresses on the account with RDNS, region, reserved flag and the Linode or entity using each. Use fo","description":"List IPv4 and IPv6 addresses on the account with RDNS, region, reserved flag and the Linode or entity using each. Use for \"What IP addresses do my Linodes have and which are reserved\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"skip_ipv6_rdns":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to leave out IPv6 RDNS lookups, which makes large accounts faster.","title":"Skip Ipv6 Rdns"},"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"}},"title":"list_ip_addressesArguments","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_ipv6_ranges":{"post":{"operationId":"list_ipv6_ranges","summary":"List routed IPv6 ranges with prefix length, region and the route target. Use for \"Which IPv6 ranges are routed to my Lin","description":"List routed IPv6 ranges with prefix length, region and the route target. Use for \"Which IPv6 ranges are routed to my Linodes\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"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"}},"title":"list_ipv6_rangesArguments","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_vlans":{"post":{"operationId":"list_vlans","summary":"List VLANs with region, creation time and the Linode ids attached to each. Use for \"Which VLANs do I have and what is at","description":"List VLANs with region, creation time and the Linode ids attached to each. Use for \"Which VLANs do I have and what is attached to them\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"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"}},"title":"list_vlansArguments","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_reserved_ips":{"post":{"operationId":"list_reserved_ips","summary":"List reserved IP addresses with region, tags and the Linode or entity each is assigned to. Use for \"Which reserved IP ad","description":"List reserved IP addresses with region, tags and the Linode or entity each is assigned to. Use for \"Which reserved IP addresses do I hold on Linode\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"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"}},"title":"list_reserved_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/get_reserved_ip_pricing":{"post":{"operationId":"get_reserved_ip_pricing","summary":"Show the hourly and monthly price of reserved IP addresses, with any per-region prices. Use for \"What does a reserved IP","description":"Show the hourly and monthly price of reserved IP addresses, with any per-region prices. Use for \"What does a reserved IP cost on Linode\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"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"}},"title":"get_reserved_ip_pricingArguments","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}}}}