@takashito/linode-mcp-server
Version:
MCP server for Linode API
459 lines (458 loc) • 13 kB
TypeScript
import { AxiosInstance } from 'axios';
import { PaginatedResponse, PaginationParams } from './common';
export interface Account {
active_since: string;
address_1: string;
address_2?: string;
balance: number;
balances: {
uninvoiced: number;
past_due: boolean;
};
billing_source: string;
capabilities: string[];
city: string;
company: string;
country: string;
credit_card: {
expiry: string;
last_four: string;
};
email: string;
euuid: string;
first_name: string;
last_name: string;
phone: string;
state: string;
tax_id: string;
zip: string;
}
export interface UpdateAccountRequest {
address_1?: string;
address_2?: string;
city?: string;
company?: string;
country?: string;
email?: string;
first_name?: string;
last_name?: string;
phone?: string;
state?: string;
tax_id?: string;
zip?: string;
}
export interface Agreement {
id: string;
description: string;
body: string;
title: string;
created: string;
modified: string;
expiry?: string;
url?: string;
}
export interface AcknowledgeAgreementRequest {
agreement_ids: string[];
}
export interface ServiceAvailability {
region: string;
services: Record<string, boolean>;
}
export interface RegionServiceAvailability {
id: string;
services: Record<string, boolean>;
}
export interface CancelAccountRequest {
comments?: string;
}
export interface ChildAccount {
euuid: string;
company: string;
email: string;
is_active: boolean;
billing_cycle: string;
state: string;
has_credit_card: boolean;
enterprise_data?: {
credit_limit: number;
acl: Record<string, string>;
};
}
export interface ProxyTokenRequest {
expiry?: string;
scopes?: string[];
}
export interface ProxyToken {
token: string;
scopes: string[];
expiry: string;
}
export interface AccountEvent {
id: number;
action: string;
created: string;
entity: {
id: number;
label: string;
type: string;
url: string;
};
percent_complete?: number;
rate?: string;
read: boolean;
seen: boolean;
status: string;
time_remaining?: number;
username: string;
message?: string;
secondary_entity?: {
id: number;
label: string;
type: string;
url: string;
};
}
export interface Invoice {
id: number;
date: string;
label: string;
subtotal: number;
tax: number;
total: number;
}
export interface InvoiceItem {
amount: number;
from: string;
to: string;
label: string;
quantity: number;
type: string;
unit_price: string;
tax: number;
total: number;
}
export interface AccountLogin {
id: number;
datetime: string;
ip: string;
restricted: boolean;
status: string;
username: string;
}
export interface Maintenance {
when: string;
entity: {
id: string;
label: string;
type: string;
url: string;
};
duration: number;
status: string;
type: string;
reason: string;
key: string;
created: string;
updated: string;
}
export interface Notification {
body: string;
entity: {
id: number;
label: string;
type: string;
url: string;
};
label: string;
message: string;
severity: string;
type: string;
until: string;
when: string;
}
export interface OAuthClient {
id: string;
label: string;
redirect_uri: string;
secret: string;
public: boolean;
status: string;
thumbnail_url?: string;
}
export interface CreateOAuthClientRequest {
label: string;
redirect_uri: string;
public?: boolean;
}
export interface UpdateOAuthClientRequest {
label?: string;
redirect_uri?: string;
public?: boolean;
}
export interface OAuthClientSecret {
secret: string;
}
export interface AccountSettings {
managed: boolean;
longview_subscription: string | null;
network_helper: boolean;
backups_enabled: boolean;
object_storage: 'active' | 'disabled' | 'suspended';
}
export interface UpdateAccountSettingsRequest {
network_helper?: boolean;
backups_enabled?: boolean;
}
export interface AccountNetworkTransfer {
billable: number;
used: number;
quota: number;
}
export interface User {
username: string;
email: string;
restricted: boolean;
ssh_keys: string[];
two_factor_auth: boolean;
}
export interface CreateUserRequest {
username: string;
email: string;
restricted: boolean;
}
export interface UpdateUserRequest {
email?: string;
restricted?: boolean;
}
export interface UserGrants {
global: {
account_access: string;
add_domains?: boolean;
add_databases?: boolean;
add_firewalls?: boolean;
add_images?: boolean;
add_linodes?: boolean;
add_longview?: boolean;
add_nodebalancers?: boolean;
add_stackscripts?: boolean;
add_volumes?: boolean;
cancel_account?: boolean;
longview_subscription?: boolean;
};
database: Record<string, {
id: number;
permissions: string;
label: string;
}>;
domain: Record<string, {
id: number;
permissions: string;
label: string;
}>;
firewall: Record<string, {
id: number;
permissions: string;
label: string;
}>;
image: Record<string, {
id: number;
permissions: string;
label: string;
}>;
linode: Record<string, {
id: number;
permissions: string;
label: string;
}>;
longview: Record<string, {
id: number;
permissions: string;
label: string;
}>;
nodebalancer: Record<string, {
id: number;
permissions: string;
label: string;
}>;
stackscript: Record<string, {
id: number;
permissions: string;
label: string;
}>;
volume: Record<string, {
id: number;
permissions: string;
label: string;
}>;
}
export interface UpdateUserGrantsRequest {
global: {
account_access?: string;
add_domains?: boolean;
add_databases?: boolean;
add_firewalls?: boolean;
add_images?: boolean;
add_linodes?: boolean;
add_longview?: boolean;
add_nodebalancers?: boolean;
add_stackscripts?: boolean;
add_volumes?: boolean;
cancel_account?: boolean;
longview_subscription?: boolean;
};
database?: Record<string, {
permissions: string;
}>;
domain?: Record<string, {
permissions: string;
}>;
firewall?: Record<string, {
permissions: string;
}>;
image?: Record<string, {
permissions: string;
}>;
linode?: Record<string, {
permissions: string;
}>;
longview?: Record<string, {
permissions: string;
}>;
nodebalancer?: Record<string, {
permissions: string;
}>;
stackscript?: Record<string, {
permissions: string;
}>;
volume?: Record<string, {
permissions: string;
}>;
}
export interface Entity {
id: number;
type: string;
label: string;
url: string;
}
export interface IamRole {
name: string;
description: string;
permissions: string[];
}
export interface UserRolePermissions {
username: string;
roles: string[];
}
export interface UpdateUserRolePermissionsRequest {
roles: string[];
}
export interface DelegationChildAccount {
euuid: string;
company: string;
email: string;
is_active: boolean;
}
export interface DelegationChildAccountUsers {
euuid: string;
users: string[];
}
export interface UpdateDelegationChildAccountUsersRequest {
users: string[];
}
export interface DelegationDefaultRoles {
roles: string[];
}
export interface UpdateDelegationDefaultRolesRequest {
roles: string[];
}
export interface DelegationProfileAccount {
euuid: string;
company: string;
email: string;
is_active: boolean;
}
export interface DelegationToken {
token: string;
scopes: string[];
expiry: string;
}
export interface UserDelegations {
username: string;
child_accounts: string[];
}
export interface MaintenancePolicy {
id: number;
type: string;
frequency: string;
day_of_week: number;
pending: boolean;
}
export interface ResourceLock {
id: number;
resource_id: number;
resource_type: string;
reason?: string;
created: string;
}
export interface CreateResourceLockRequest {
resource_id: number;
resource_type: string;
reason?: string;
}
export interface AccountClientInterface {
getAccount(): Promise<Account>;
updateAccount(data: UpdateAccountRequest): Promise<Account>;
getAgreements(): Promise<Agreement[]>;
acknowledgeAgreements(data: AcknowledgeAgreementRequest): Promise<{}>;
getServiceAvailability(): Promise<ServiceAvailability[]>;
getRegionServiceAvailability(regionId: string): Promise<RegionServiceAvailability>;
cancelAccount(data: CancelAccountRequest): Promise<{}>;
getEvents(params?: PaginationParams): Promise<PaginatedResponse<AccountEvent>>;
getEvent(eventId: number): Promise<AccountEvent>;
markEventAsSeen(eventId: number): Promise<{}>;
getInvoices(params?: PaginationParams): Promise<PaginatedResponse<Invoice>>;
getInvoice(invoiceId: number): Promise<Invoice>;
getInvoiceItems(invoiceId: number, params?: PaginationParams): Promise<PaginatedResponse<InvoiceItem>>;
getLogins(params?: PaginationParams): Promise<PaginatedResponse<AccountLogin>>;
getLogin(loginId: number): Promise<AccountLogin>;
getMaintenances(params?: PaginationParams): Promise<PaginatedResponse<Maintenance>>;
getNotifications(): Promise<Notification[]>;
getOAuthClients(params?: PaginationParams): Promise<PaginatedResponse<OAuthClient>>;
createOAuthClient(data: CreateOAuthClientRequest): Promise<OAuthClient>;
deleteOAuthClient(clientId: string): Promise<void>;
getOAuthClient(clientId: string): Promise<OAuthClient>;
updateOAuthClient(clientId: string, data: UpdateOAuthClientRequest): Promise<OAuthClient>;
resetOAuthClientSecret(clientId: string): Promise<OAuthClientSecret>;
getOAuthClientThumbnail(clientId: string): Promise<any>;
updateOAuthClientThumbnail(clientId: string, thumbnailData: any): Promise<{}>;
getAccountSettings(): Promise<AccountSettings>;
updateAccountSettings(data: UpdateAccountSettingsRequest): Promise<AccountSettings>;
enableManagedService(): Promise<{}>;
getNetworkTransfer(): Promise<AccountNetworkTransfer>;
getUsers(params?: PaginationParams): Promise<PaginatedResponse<User>>;
createUser(data: CreateUserRequest): Promise<User>;
deleteUser(username: string): Promise<void>;
getUser(username: string): Promise<User>;
updateUser(username: string, data: UpdateUserRequest): Promise<User>;
getUserGrants(username: string): Promise<UserGrants>;
updateUserGrants(username: string, data: UpdateUserGrantsRequest): Promise<UserGrants>;
getEntities(params?: PaginationParams): Promise<PaginatedResponse<Entity>>;
getIamRoles(): Promise<IamRole[]>;
getUserRolePermissions(username: string): Promise<UserRolePermissions>;
updateUserRolePermissions(username: string, data: UpdateUserRolePermissionsRequest): Promise<UserRolePermissions>;
getDelegationChildAccounts(params?: PaginationParams): Promise<PaginatedResponse<DelegationChildAccount>>;
getDelegationChildAccountUsers(euuid: string): Promise<DelegationChildAccountUsers>;
updateDelegationChildAccountUsers(euuid: string, data: UpdateDelegationChildAccountUsersRequest): Promise<DelegationChildAccountUsers>;
getDelegationDefaultRoles(): Promise<DelegationDefaultRoles>;
updateDelegationDefaultRoles(data: UpdateDelegationDefaultRolesRequest): Promise<DelegationDefaultRoles>;
getDelegationProfileAccounts(params?: PaginationParams): Promise<PaginatedResponse<DelegationProfileAccount>>;
getDelegationProfileAccount(euuid: string): Promise<DelegationProfileAccount>;
createDelegationToken(euuid: string): Promise<DelegationToken>;
getUserDelegations(username: string): Promise<UserDelegations>;
getMaintenancePolicies(params?: PaginationParams): Promise<PaginatedResponse<MaintenancePolicy>>;
getResourceLocks(params?: PaginationParams): Promise<PaginatedResponse<ResourceLock>>;
getResourceLock(resourceLockId: number): Promise<ResourceLock>;
createResourceLock(data: CreateResourceLockRequest): Promise<ResourceLock>;
deleteResourceLock(resourceLockId: number): Promise<void>;
}
export declare function createAccountClient(axiosInstance: AxiosInstance): AccountClientInterface;