Skip to main content
Glama
rosschurchill

Technitium MCP Secure

dns_uninstall_app

Uninstall a DNS app from the server by specifying its name and setting confirm to true to execute the removal.

Instructions

Uninstall a DNS app from the server. Requires confirm=true to execute.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesName of the app to uninstall
confirmNoMust be true to confirm uninstall. Without this, returns a warning instead.

Implementation Reference

  • The handler function for dns_uninstall_app tool. It validates the app name length, checks for confirm=true (returning a warning if not confirmed), then calls the API endpoint /api/apps/uninstall to uninstall the app.
    handler: async (args) => {
      const name = validateStringLength(args.name as string, 200, "App name");
      if (args.confirm !== true) {
        return JSON.stringify(
          {
            warning: `This will uninstall the app '${name}' and remove its data. Set confirm=true to proceed.`,
          },
          null,
          2
        );
      }
      const data = await client.callOrThrow("/api/apps/uninstall", { name });
      return JSON.stringify(
        { success: true, uninstalled: name, ...data },
        null,
        2
      );
    },
  • The input schema for dns_uninstall_app. Defines required 'name' (string) and optional 'confirm' (boolean) parameters. Used for input validation.
    definition: {
      name: "dns_uninstall_app",
      description:
        "Uninstall a DNS app from the server. Requires confirm=true to execute.",
      inputSchema: {
        type: "object",
        properties: {
          name: {
            type: "string",
            description: "Name of the app to uninstall",
          },
          confirm: {
            type: "boolean",
            description:
              "Must be true to confirm uninstall. Without this, returns a warning instead.",
          },
        },
        required: ["name"],
      },
  • src/tools/apps.ts:5-6 (registration)
    The appTools() function that returns an array of tool entries, including dns_uninstall_app. This is called from getAllTools() in src/tools/index.ts.
    export function appTools(client: TechnitiumClient): ToolEntry[] {
      return [
  • The getAllTools() function that aggregates all tool collections from various modules, including appTools() which contains dns_uninstall_app.
    export function getAllTools(client: TechnitiumClient): ToolEntry[] {
      return [
        ...dashboardTools(client),
        ...dnsClientTools(client),
        ...zoneTools(client),
        ...recordTools(client),
        ...blockingTools(client),
        ...cacheTools(client),
        ...settingsTools(client),
        ...logTools(client),
        ...appTools(client),
        ...dnssecTools(client),
      ];
    }
  • The validateStringLength helper used by the handler to validate the 'name' parameter length.
    export function validateStringLength(value: string, maxLength: number, fieldName: string): string {
      if (typeof value !== "string") {
        throw new Error(`${fieldName} must be a string`);
      }
      if (value.length > maxLength) {
        throw new Error(`${fieldName} exceeds maximum length of ${maxLength}`);
      }
      return value;
    }

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.2.0

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It mentions the confirm=true requirement, hinting at the destructive nature, but it does not explicitly state that uninstalling is permanent, irreversible, or what happens to associated data. The word 'uninstall' implies removal, but consequences are not disclosed. This is a significant gap for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no fluff. Every word earns its place. The key information (what it does and the confirm requirement) is front-loaded and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with only 2 params, and schema covers both completely. However, it is a destructive operation with no annotations or output schema, so the description could be more explicit about side effects or reversibility. The confirm requirement is helpful, but the overall context feels minimally sufficient rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description repeats what the schema already states for confirm ('Requires confirm=true') but adds no new semantic meaning beyond the schema's existing 'Must be true' description. For the name parameter, the description adds 'DNS app' context already obvious from the schema. No extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the action clearly: 'Uninstall a DNS app from the server.' This uses a specific verb (uninstall) and resource (DNS app), distinguishing it from sibling tools like dns_install_app, dns_list_apps, and dns_get_app_config. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates that confirm=true is required for execution, which is a critical usage prerequisite. However, it does not explicitly contrast with alternatives or state when to prefer this over other tools, though the name and context make that obvious. No exclusions are given, but the confirm requirement conveys a safety gate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.