@takashito/linode-mcp-server
Version:
MCP server for Linode API
258 lines • 11.8 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerNetworkingTools = registerNetworkingTools;
const client_1 = require("../../client");
const schemas = __importStar(require("./schemas"));
const errorHandler_1 = require("../common/errorHandler");
function registerNetworkingTools(server, client) {
// IP Address operations
server.addTool({
name: 'get_ip_addresses',
description: 'Get all IP addresses',
parameters: schemas.getIPAddressesSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.getIPAddresses();
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'get_ip_address',
description: 'Get details for a specific IP address',
parameters: schemas.getIPAddressSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.getIPAddress(params.address);
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'update_ip_address',
description: 'Update reverse DNS for an IP address',
parameters: schemas.updateIPSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.updateIPAddress(params.address, { rdns: params.rdns });
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'allocate_ip',
description: 'Allocate a new IP address',
parameters: schemas.allocateIPSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.allocateIPAddress(params);
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'share_ips',
description: 'Share IP addresses between Linodes',
parameters: schemas.shareIPsSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.shareIPAddresses(params);
return JSON.stringify(result, null, 2);
})
});
// IPv6 operations
server.addTool({
name: 'get_ipv6_ranges',
description: 'Get all IPv6 ranges',
parameters: schemas.getIPv6RangesSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.getIPv6Ranges();
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'get_ipv6_range',
description: 'Get a specific IPv6 range',
parameters: schemas.getIPv6RangeSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.getIPv6Range(params.range);
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'get_ipv6_pools',
description: 'Get all IPv6 pools',
parameters: schemas.getIPv6PoolsSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.getIPv6Pools();
return JSON.stringify(result, null, 2);
})
});
// Firewall operations
server.addTool({
name: 'get_firewalls',
description: 'Get all firewalls',
parameters: schemas.getFirewallsSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const paginationParams = {
page: params.page,
page_size: params.page_size
};
const result = await (0, client_1.createClient)(context, server).networking.getFirewalls(paginationParams);
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'get_firewall',
description: 'Get details for a specific firewall',
parameters: schemas.getFirewallSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.getFirewall(params.id);
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'create_firewall',
description: 'Create a new firewall',
parameters: schemas.createFirewallSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
// Create FirewallRequest with correct structure
const firewall = {
label: params.label,
rules: {
inbound_policy: params.rules?.inbound_policy || 'DROP',
outbound_policy: params.rules?.outbound_policy || 'ACCEPT',
inbound: params.rules?.inbound || [],
outbound: params.rules?.outbound || []
}
};
// Add optional fields if provided
if (params.tags) {
firewall.tags = params.tags;
}
if (params.devices) {
firewall.devices = params.devices;
}
const result = await (0, client_1.createClient)(context, server).networking.createFirewall(firewall);
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'update_firewall',
description: 'Update a firewall',
parameters: schemas.updateFirewallSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const { id, ...updateData } = params;
const result = await (0, client_1.createClient)(context, server).networking.updateFirewall(id, updateData);
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'delete_firewall',
description: 'Delete a firewall',
parameters: schemas.deleteFirewallSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.deleteFirewall(params.id);
return JSON.stringify(result, null, 2);
})
});
// Firewall rules operations
server.addTool({
name: 'get_firewall_rules',
description: 'Get all rules for a specific firewall',
parameters: schemas.getFirewallRulesSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.getFirewallRules(params.firewallId);
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'update_firewall_rules',
description: 'Update rules for a specific firewall',
parameters: schemas.updateFirewallRulesSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const { firewallId, ...ruleData } = params;
const result = await (0, client_1.createClient)(context, server).networking.updateFirewallRules(firewallId, ruleData);
return JSON.stringify(result, null, 2);
})
});
// Firewall device operations
server.addTool({
name: 'get_firewall_devices',
description: 'Get all devices for a specific firewall',
parameters: schemas.getFirewallDevicesSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const { firewallId, page, page_size } = params;
// The client doesn't accept pagination for this endpoint based on the interface
const result = await (0, client_1.createClient)(context, server).networking.getFirewallDevices(firewallId);
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'create_firewall_device',
description: 'Create a new device for a specific firewall',
parameters: schemas.createFirewallDeviceSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const { firewallId, ...deviceData } = params;
const result = await (0, client_1.createClient)(context, server).networking.createFirewallDevice(firewallId, deviceData);
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'delete_firewall_device',
description: 'Delete a device from a specific firewall',
parameters: schemas.deleteFirewallDeviceSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.deleteFirewallDevice(params.firewallId, params.deviceId);
return JSON.stringify(result, null, 2);
})
});
// VLAN operations
server.addTool({
name: 'get_vlans',
description: 'Get all VLANs',
parameters: schemas.getVLANsSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const paginationParams = {
page: params.page,
page_size: params.page_size
};
const result = await (0, client_1.createClient)(context, server).networking.getVLANs(paginationParams);
return JSON.stringify(result, null, 2);
})
});
server.addTool({
name: 'get_vlan',
description: 'Get a specific VLAN',
parameters: schemas.getVLANSchema,
execute: (0, errorHandler_1.withErrorHandling)(async (params, context) => {
const result = await (0, client_1.createClient)(context, server).networking.getVLAN(params.regionId, params.label);
return JSON.stringify(result, null, 2);
})
});
}
//# sourceMappingURL=tools.js.map