@takashito/linode-mcp-server
Version:
MCP server for Linode API
145 lines (144 loc) • 4.38 kB
TypeScript
import { AxiosInstance } from 'axios';
import { PaginationParams, PaginatedResponse } from './instances';
export interface IPAddress {
address: string;
gateway: string | null;
subnet_mask: string | null;
prefix: number | null;
type: string;
public: boolean;
rdns: string | null;
linode_id: number | null;
region: string | null;
}
export interface IPv6Range {
range: string;
prefix: number;
region: string;
route_target: string | null;
}
export interface IPv6Pool {
range: string;
prefix: number;
region: string;
}
export interface AllocateIPRequest {
type: 'ipv4';
public: boolean;
linode_id?: number;
}
export interface UpdateIPRequest {
rdns: string | null;
}
export interface ShareIPsRequest {
linode_id: number;
ips: string[];
}
export interface Firewall {
id: number;
label: string;
created: string;
updated: string;
status: string;
rules: {
inbound_policy: 'ACCEPT' | 'DROP';
outbound_policy: 'ACCEPT' | 'DROP';
inbound: FirewallRule[];
outbound: FirewallRule[];
};
tags: string[];
}
export interface FirewallRule {
ports: string;
protocol: 'TCP' | 'UDP' | 'ICMP';
addresses: {
ipv4?: string[];
ipv6?: string[];
};
action: 'ACCEPT' | 'DROP';
}
export interface CreateFirewallRequest {
label: string;
rules: {
inbound_policy: 'ACCEPT' | 'DROP';
outbound_policy: 'ACCEPT' | 'DROP';
inbound?: FirewallRule[];
outbound?: FirewallRule[];
};
devices?: {
linodes?: number[];
nodebalancers?: number[];
};
tags?: string[];
}
export interface UpdateFirewallRequest {
label?: string;
tags?: string[];
status?: 'enabled' | 'disabled';
}
export interface FirewallDevice {
id: number;
entity_id: number;
type: 'linode' | 'nodebalancer';
label: string;
url: string;
created: string;
updated: string;
}
export interface CreateFirewallDeviceRequest {
id: number;
type: 'linode' | 'nodebalancer';
}
export interface UpdateFirewallRulesRequest {
inbound_policy?: 'ACCEPT' | 'DROP';
outbound_policy?: 'ACCEPT' | 'DROP';
inbound?: FirewallRule[];
outbound?: FirewallRule[];
}
export interface VLAN {
id: string;
description: string;
region: string;
linodes: number[];
created: string;
}
export interface LinodeNetworkingClient {
getIPAddresses: () => Promise<{
ipv4: {
public: IPAddress[];
private: IPAddress[];
shared: IPAddress[];
};
ipv6: {
slaac: IPAddress;
link_local: IPAddress;
ranges: IPv6Range[];
};
}>;
getIPAddress: (address: string) => Promise<IPAddress>;
updateIPAddress: (address: string, data: UpdateIPRequest) => Promise<IPAddress>;
allocateIPAddress: (data: AllocateIPRequest) => Promise<IPAddress>;
shareIPAddresses: (data: ShareIPsRequest) => Promise<{}>;
getIPv6Ranges: () => Promise<PaginatedResponse<IPv6Range>>;
getIPv6Range: (range: string) => Promise<IPv6Range>;
getIPv6Pools: () => Promise<PaginatedResponse<IPv6Pool>>;
getFirewalls: (params?: PaginationParams) => Promise<PaginatedResponse<Firewall>>;
getFirewall: (id: number) => Promise<Firewall>;
createFirewall: (data: CreateFirewallRequest) => Promise<Firewall>;
updateFirewall: (id: number, data: UpdateFirewallRequest) => Promise<Firewall>;
deleteFirewall: (id: number) => Promise<{}>;
getFirewallDevices: (firewallId: number) => Promise<PaginatedResponse<FirewallDevice>>;
createFirewallDevice: (firewallId: number, data: CreateFirewallDeviceRequest) => Promise<FirewallDevice>;
deleteFirewallDevice: (firewallId: number, deviceId: number) => Promise<{}>;
getFirewallRules: (firewallId: number) => Promise<{
inbound: FirewallRule[];
outbound: FirewallRule[];
}>;
updateFirewallRules: (firewallId: number, data: UpdateFirewallRulesRequest) => Promise<{
inbound: FirewallRule[];
outbound: FirewallRule[];
}>;
getVLANs: (params?: PaginationParams) => Promise<PaginatedResponse<VLAN>>;
getVLAN: (regionId: string, label: string) => Promise<VLAN>;
}
export declare function createNetworkingClient(axios: AxiosInstance): LinodeNetworkingClient;