nodes_create
Add new VPN nodes to the Remnawave panel by specifying name, address, port, country, traffic settings, and configuration profiles.
Instructions
Create a new node in Remnawave
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Node name | |
| address | Yes | Node address (IP or hostname) | |
| port | No | Node port | |
| countryCode | No | Country code (e.g. US, DE, NL) | |
| isTrafficTrackingActive | No | Enable traffic tracking | |
| trafficLimitBytes | No | Traffic limit in bytes | |
| trafficResetDay | No | Day of month to reset traffic (1-31) | |
| notifyPercent | No | Traffic notification threshold percentage | |
| consumptionMultiplier | No | Traffic consumption multiplier | |
| activeConfigProfileUuid | Yes | Config profile UUID to assign | |
| activeInbounds | Yes | Array of inbound UUIDs to enable |
Implementation Reference
- src/tools/nodes.ts:77-108 (handler)The handler for the 'nodes_create' tool, which constructs the request body from parameters and calls the client's createNode method.
async (params) => { try { const body: Record<string, unknown> = { name: params.name, address: params.address, configProfile: { activeConfigProfileUuid: params.activeConfigProfileUuid, activeInbounds: params.activeInbounds, }, }; if (params.port !== undefined) body.port = params.port; if (params.countryCode !== undefined) body.countryCode = params.countryCode; if (params.isTrafficTrackingActive !== undefined) body.isTrafficTrackingActive = params.isTrafficTrackingActive; if (params.trafficLimitBytes !== undefined) body.trafficLimitBytes = params.trafficLimitBytes; if (params.trafficResetDay !== undefined) body.trafficResetDay = params.trafficResetDay; if (params.notifyPercent !== undefined) body.notifyPercent = params.notifyPercent; if (params.consumptionMultiplier !== undefined) body.consumptionMultiplier = params.consumptionMultiplier; const result = await client.createNode(body); return toolResult(result); } catch (e) { return toolError(e); } }, - src/tools/nodes.ts:42-76 (schema)The Zod schema defining the input parameters for the 'nodes_create' tool.
{ name: z.string().describe('Node name'), address: z.string().describe('Node address (IP or hostname)'), port: z.number().optional().describe('Node port'), countryCode: z .string() .optional() .describe('Country code (e.g. US, DE, NL)'), isTrafficTrackingActive: z .boolean() .optional() .describe('Enable traffic tracking'), trafficLimitBytes: z .number() .optional() .describe('Traffic limit in bytes'), trafficResetDay: z .number() .optional() .describe('Day of month to reset traffic (1-31)'), notifyPercent: z .number() .optional() .describe('Traffic notification threshold percentage'), consumptionMultiplier: z .number() .optional() .describe('Traffic consumption multiplier'), activeConfigProfileUuid: z .string() .describe('Config profile UUID to assign'), activeInbounds: z .array(z.string()) .describe('Array of inbound UUIDs to enable'), }, - src/tools/nodes.ts:39-109 (registration)The tool registration block for 'nodes_create' in the MCP server.
server.tool( 'nodes_create', 'Create a new node in Remnawave', { name: z.string().describe('Node name'), address: z.string().describe('Node address (IP or hostname)'), port: z.number().optional().describe('Node port'), countryCode: z .string() .optional() .describe('Country code (e.g. US, DE, NL)'), isTrafficTrackingActive: z .boolean() .optional() .describe('Enable traffic tracking'), trafficLimitBytes: z .number() .optional() .describe('Traffic limit in bytes'), trafficResetDay: z .number() .optional() .describe('Day of month to reset traffic (1-31)'), notifyPercent: z .number() .optional() .describe('Traffic notification threshold percentage'), consumptionMultiplier: z .number() .optional() .describe('Traffic consumption multiplier'), activeConfigProfileUuid: z .string() .describe('Config profile UUID to assign'), activeInbounds: z .array(z.string()) .describe('Array of inbound UUIDs to enable'), }, async (params) => { try { const body: Record<string, unknown> = { name: params.name, address: params.address, configProfile: { activeConfigProfileUuid: params.activeConfigProfileUuid, activeInbounds: params.activeInbounds, }, }; if (params.port !== undefined) body.port = params.port; if (params.countryCode !== undefined) body.countryCode = params.countryCode; if (params.isTrafficTrackingActive !== undefined) body.isTrafficTrackingActive = params.isTrafficTrackingActive; if (params.trafficLimitBytes !== undefined) body.trafficLimitBytes = params.trafficLimitBytes; if (params.trafficResetDay !== undefined) body.trafficResetDay = params.trafficResetDay; if (params.notifyPercent !== undefined) body.notifyPercent = params.notifyPercent; if (params.consumptionMultiplier !== undefined) body.consumptionMultiplier = params.consumptionMultiplier; const result = await client.createNode(body); return toolResult(result); } catch (e) { return toolError(e); } }, );