@takashito/linode-mcp-server
Version:
MCP server for Linode API
337 lines (336 loc) • 11.2 kB
TypeScript
import { AxiosInstance } from 'axios';
import { PaginatedResponse, PaginationParams } from './common';
import { Volume } from './volumes';
import { NodeBalancer } from './nodebalancers';
export interface LinodeInstance {
id: number;
label: string;
region: string;
type: string;
status: string;
ipv4: string[];
ipv6: string;
created: string;
updated: string;
hypervisor: string;
specs: {
disk: number;
memory: number;
vcpus: number;
transfer: number;
};
alerts: {
cpu: number;
io: number;
network_in: number;
network_out: number;
transfer_quota: number;
};
backups: {
enabled: boolean;
schedule: {
day: string;
window: string;
};
last_successful: string | null;
};
image: string | null;
group: string;
tags: string[];
host_uuid: string;
watchdog_enabled: boolean;
}
export interface LinodeType {
id: string;
label: string;
class: string;
disk: number;
memory: number;
vcpus: number;
network_out: number;
transfer: number;
gpus: number;
price: {
hourly: number;
monthly: number;
};
addons: {
backups: {
price: {
hourly: number;
monthly: number;
};
};
};
successor: string | null;
}
export interface Backup {
id: number;
label: string;
status: string;
type: 'auto' | 'snapshot';
region: string;
created: string;
updated: string;
finished: string;
configs: string[];
disks: Record<string, any>;
available: boolean;
}
export interface NetworkTransfer {
used: number;
quota: number;
billable: number;
}
export interface MonthlyTransfer {
used: number;
quota: number;
billable: number;
}
export interface CreateLinodeRequest {
region: string;
type: string;
label?: string;
group?: string;
root_pass?: string;
image?: string;
authorized_keys?: string[];
authorized_users?: string[];
backups_enabled?: boolean;
booted?: boolean;
private_ip?: boolean;
tags?: string[];
firewall_id?: number;
}
export interface UpdateLinodeRequest {
label?: string;
group?: string;
tags?: string[];
watchdog_enabled?: boolean;
alerts?: {
cpu?: number;
io?: number;
network_in?: number;
network_out?: number;
transfer_quota?: number;
};
}
export interface ResizeLinodeRequest {
type: string;
allow_auto_disk_resize?: boolean;
}
export interface CloneLinodeRequest {
region?: string;
type?: string;
label?: string;
group?: string;
backups_enabled?: boolean;
private_ip?: boolean;
tags?: string[];
}
export interface RebuildLinodeRequest {
image: string;
root_pass: string;
authorized_keys?: string[];
authorized_users?: string[];
stackscript_id?: number;
stackscript_data?: Record<string, any>;
booted?: boolean;
}
export interface ConfigInterface {
id: number;
label: string;
purpose: 'public' | 'vlan' | 'vpc';
ipam_address: string | null;
primary?: boolean;
active?: boolean;
subnet_id?: number;
vpc_id?: number;
ipv4?: {
vpc?: string;
nat_1_1?: string;
};
}
export interface CreateConfigInterfaceRequest {
purpose: 'public' | 'vlan' | 'vpc';
label?: string;
ipam_address?: string;
primary?: boolean;
subnet_id?: number;
vpc_id?: number;
ipv4?: {
vpc?: string;
nat_1_1?: string;
};
}
export interface UpdateConfigInterfaceRequest {
label?: string;
ipam_address?: string;
primary?: boolean;
ipv4?: {
vpc?: string;
nat_1_1?: string;
};
}
export interface ConfigInterfaceOrderRequest {
ids: number[];
}
export interface LinodeConfig {
id: number;
label: string;
comments: string;
kernel: string;
memory_limit: number;
root_device: string;
devices: Record<string, any>;
initrd: string | null;
created: string;
updated: string;
helpers: {
updatedb_disabled: boolean;
distro: boolean;
network: boolean;
modules_dep: boolean;
};
interfaces: ConfigInterface[];
}
export interface CreateLinodeConfigRequest {
label: string;
kernel?: string;
comments?: string;
memory_limit?: number;
root_device?: string;
devices?: Record<string, any>;
initrd?: string | null;
helpers?: {
updatedb_disabled?: boolean;
distro?: boolean;
network?: boolean;
modules_dep?: boolean;
};
interfaces?: any[];
}
export interface LinodeDisk {
id: number;
label: string;
status: string;
size: number;
filesystem: string;
created: string;
updated: string;
}
export interface CreateLinodeDiskRequest {
label: string;
size: number;
filesystem?: string;
read_only?: boolean;
image?: string;
root_pass?: string;
authorized_keys?: string[];
authorized_users?: string[];
stackscript_id?: number;
stackscript_data?: Record<string, any>;
}
export interface CreateSnapshotRequest {
label: string;
}
export interface RestoreBackupRequest {
linode_id?: number;
overwrite?: boolean;
}
export interface LinodeIPAllocationRequest {
type: 'ipv4' | 'ipv6';
public: boolean;
}
export interface LinodeIPUpdateRequest {
rdns: string | null;
}
export interface ResetRootPasswordRequest {
root_pass: string;
}
export interface MigrateLinodeRequest {
region?: string;
}
export interface CloneDiskRequest {
label?: string;
}
export interface Kernel {
id: string;
label: string;
version: string;
kvm: boolean;
architecture: string;
pvops: boolean;
deprecated: boolean;
built: string;
}
export interface UpdateLinodeFirewallsRequest {
ids: number[];
}
export interface LinodeInstancesClient {
getLinodes: (params?: PaginationParams) => Promise<PaginatedResponse<LinodeInstance>>;
getLinodeById: (id: number) => Promise<LinodeInstance>;
createLinode: (data: CreateLinodeRequest) => Promise<LinodeInstance>;
updateLinode: (id: number, data: UpdateLinodeRequest) => Promise<LinodeInstance>;
deleteLinode: (id: number) => Promise<{}>;
bootLinode: (id: number, configId?: number) => Promise<{}>;
rebootLinode: (id: number, configId?: number) => Promise<{}>;
shutdownLinode: (id: number) => Promise<{}>;
resizeLinode: (id: number, data: ResizeLinodeRequest) => Promise<{}>;
cloneLinode: (id: number, data: CloneLinodeRequest) => Promise<LinodeInstance>;
rebuildLinode: (id: number, data: RebuildLinodeRequest) => Promise<LinodeInstance>;
rescueLinode: (id: number, devices: Record<string, number>) => Promise<{}>;
migrateLinode: (id: number, data?: MigrateLinodeRequest) => Promise<{}>;
mutateLinode: (id: number) => Promise<{}>;
resetRootPassword: (id: number, data: ResetRootPasswordRequest) => Promise<{}>;
getLinodeConfigs: (linodeId: number, params?: PaginationParams) => Promise<PaginatedResponse<LinodeConfig>>;
getLinodeConfig: (linodeId: number, configId: number) => Promise<LinodeConfig>;
createLinodeConfig: (linodeId: number, data: CreateLinodeConfigRequest) => Promise<LinodeConfig>;
updateLinodeConfig: (linodeId: number, configId: number, data: Partial<CreateLinodeConfigRequest>) => Promise<LinodeConfig>;
deleteLinodeConfig: (linodeId: number, configId: number) => Promise<{}>;
getConfigInterfaces: (linodeId: number, configId: number) => Promise<PaginatedResponse<ConfigInterface>>;
getConfigInterface: (linodeId: number, configId: number, interfaceId: number) => Promise<ConfigInterface>;
createConfigInterface: (linodeId: number, configId: number, data: CreateConfigInterfaceRequest) => Promise<ConfigInterface>;
updateConfigInterface: (linodeId: number, configId: number, interfaceId: number, data: UpdateConfigInterfaceRequest) => Promise<ConfigInterface>;
deleteConfigInterface: (linodeId: number, configId: number, interfaceId: number) => Promise<{}>;
reorderConfigInterfaces: (linodeId: number, configId: number, data: ConfigInterfaceOrderRequest) => Promise<{}>;
getLinodeDisks: (linodeId: number, params?: PaginationParams) => Promise<PaginatedResponse<LinodeDisk>>;
getLinodeDisk: (linodeId: number, diskId: number) => Promise<LinodeDisk>;
createLinodeDisk: (linodeId: number, data: CreateLinodeDiskRequest) => Promise<LinodeDisk>;
updateLinodeDisk: (linodeId: number, diskId: number, data: Partial<CreateLinodeDiskRequest>) => Promise<LinodeDisk>;
deleteLinodeDisk: (linodeId: number, diskId: number) => Promise<{}>;
resizeLinodeDisk: (linodeId: number, diskId: number, size: number) => Promise<{}>;
cloneDisk: (linodeId: number, diskId: number, data?: CloneDiskRequest) => Promise<LinodeDisk>;
resetDiskPassword: (linodeId: number, diskId: number, password: string) => Promise<{}>;
getBackups: (linodeId: number) => Promise<{
automatic: Backup[];
snapshot: {
current: Backup | null;
in_progress: Backup | null;
};
}>;
getBackup: (linodeId: number, backupId: number) => Promise<Backup>;
createSnapshot: (linodeId: number, data: CreateSnapshotRequest) => Promise<Backup>;
cancelBackups: (linodeId: number) => Promise<{}>;
enableBackups: (linodeId: number) => Promise<{}>;
restoreBackup: (linodeId: number, backupId: number, data?: RestoreBackupRequest) => Promise<{}>;
getLinodeIPs: (linodeId: number) => Promise<any>;
allocateIP: (linodeId: number, data: LinodeIPAllocationRequest) => Promise<any>;
getLinodeIP: (linodeId: number, address: string) => Promise<any>;
updateLinodeIP: (linodeId: number, address: string, data: LinodeIPUpdateRequest) => Promise<any>;
deleteLinodeIP: (linodeId: number, address: string) => Promise<{}>;
getLinodeFirewalls: (linodeId: number, params?: PaginationParams) => Promise<PaginatedResponse<any>>;
applyFirewalls: (linodeId: number) => Promise<{}>;
updateLinodeFirewalls: (linodeId: number, data: UpdateLinodeFirewallsRequest) => Promise<{}>;
getLinodeStats: (id: number) => Promise<any>;
getLinodeStatsByDate: (id: number, year: string, month: string) => Promise<any>;
getNetworkTransfer: (id: number) => Promise<NetworkTransfer>;
getMonthlyTransfer: (id: number, year: string, month: string) => Promise<MonthlyTransfer>;
getKernels: (params?: PaginationParams) => Promise<PaginatedResponse<Kernel>>;
getKernelById: (id: string) => Promise<Kernel>;
getTypes: (params?: PaginationParams) => Promise<PaginatedResponse<LinodeType>>;
getType: (id: string) => Promise<LinodeType>;
getLinodeNodeBalancers: (linodeId: number, params?: PaginationParams) => Promise<PaginatedResponse<NodeBalancer>>;
getLinodeVolumes: (linodeId: number, params?: PaginationParams) => Promise<PaginatedResponse<Volume>>;
}
export declare function createInstancesClient(axios: AxiosInstance): LinodeInstancesClient;