manage_dns
Configure and manage Tailscale DNS settings, including nameservers, search paths, and MagicDNS preferences, via the MCP server for streamlined network administration.
Instructions
Manage Tailscale DNS configuration
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| magicDNS | No | Enable/disable MagicDNS (for set_preferences operation) | |
| nameservers | No | DNS nameservers (for set_nameservers operation) | |
| operation | Yes | DNS operation to perform | |
| searchPaths | No | DNS search paths (for set_searchpaths operation) |
Implementation Reference
- src/tools/acl-tools.ts:193-306 (handler)The main handler function for the 'manage_dns' tool that handles DNS operations such as getting/setting nameservers, preferences, and search paths using Tailscale API.async function manageDNS( args: z.infer<typeof DNSSchema>, context: ToolContext, ): Promise<CallToolResult> { try { logger.debug("Managing DNS configuration:", args); switch (args.operation) { case "get_nameservers": { const result = await context.api.getDNSNameservers(); if (!result.success) { return returnToolError(result.error); } const nameservers = result.data?.dns || []; return returnToolSuccess( `DNS Nameservers:\n${ nameservers.length > 0 ? nameservers.map((ns) => ` - ${ns}`).join("\n") : " No custom nameservers configured" }`, ); } case "set_nameservers": { if (!args.nameservers) { return returnToolError( "Nameservers array is required for set_nameservers operation", ); } const result = await context.api.setDNSNameservers(args.nameservers); if (!result.success) { return returnToolError(result.error); } return returnToolSuccess( `DNS nameservers updated to: ${args.nameservers.join(", ")}`, ); } case "get_preferences": { const result = await context.api.getDNSPreferences(); if (!result.success) { return returnToolError(result.error); } return returnToolSuccess( `DNS Preferences:\n MagicDNS: ${ result.data?.magicDNS ? "Enabled" : "Disabled" }`, ); } case "set_preferences": { if (args.magicDNS === undefined) { return returnToolError( "magicDNS boolean is required for set_preferences operation", ); } const result = await context.api.setDNSPreferences(args.magicDNS); if (!result.success) { return returnToolError(result.error); } return returnToolSuccess( `MagicDNS ${args.magicDNS ? "enabled" : "disabled"}`, ); } case "get_searchpaths": { const result = await context.api.getDNSSearchPaths(); if (!result.success) { return returnToolError(result.error); } const searchPaths = result.data?.searchPaths || []; return returnToolSuccess( `DNS Search Paths:\n${ searchPaths.length > 0 ? searchPaths.map((path) => ` - ${path}`).join("\n") : " No search paths configured" }`, ); } case "set_searchpaths": { if (!args.searchPaths) { return returnToolError( "searchPaths array is required for set_searchpaths operation", ); } const result = await context.api.setDNSSearchPaths(args.searchPaths); if (!result.success) { return returnToolError(result.error); } return returnToolSuccess( `DNS search paths updated to: ${args.searchPaths.join(", ")}`, ); } default: return returnToolError( "Invalid DNS operation. Use: get_nameservers, set_nameservers, get_preferences, set_preferences, get_searchpaths, set_searchpaths", ); } } catch (error: unknown) { logger.error("Error managing DNS:", error); return returnToolError(error); } }
- src/tools/acl-tools.ts:37-60 (schema)Zod input schema for the manage_dns tool defining the operation and optional parameters for nameservers, magicDNS, and search paths.const DNSSchema = z.object({ operation: z .enum([ "get_nameservers", "set_nameservers", "get_preferences", "set_preferences", "get_searchpaths", "set_searchpaths", ]) .describe("DNS operation to perform"), nameservers: z .array(z.string()) .optional() .describe("DNS nameservers (for set_nameservers operation)"), magicDNS: z .boolean() .optional() .describe("Enable/disable MagicDNS (for set_preferences operation)"), searchPaths: z .array(z.string()) .optional() .describe("DNS search paths (for set_searchpaths operation)"), });
- src/tools/acl-tools.ts:524-529 (registration)Registration of the manage_dns tool within the aclTools module, specifying name, description, input schema, and handler function.{ name: "manage_dns", description: "Manage Tailscale DNS configuration", inputSchema: DNSSchema, handler: manageDNS, },