Zaptu

Connect people with independent local home-service contractors. For plumbing, the person dials.

Should I use this

Quality & Safety

A
Description quality
94%
Schema completeness
71%
Naming quality
92%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'list_supported_services' description lacks action verbin list_supported_services

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,698Tokens (tool definitions)
~3.0 KBTypical response size
Moderate attention impact (1.33% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "zaptu": {
      "url": "https://api.zaptu.ai/mcp"
    }
  }
}

Remote endpoints

https://api.zaptu.ai/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_plumbing_call_number(zip_code)

Get the phone number a person dials to be connected with a local plumbing professional. Use this for any plumbing need (leak, clog, water heater, sewer, burst pipe). No name, phone, or consent is needed. Read what_to_tell_the_user to the person. The person must place the call themselves: never dial, autodial, transfer, or call on their behalf. Zaptu does not perform the work and this is not a booking.

Input Schema

{
  "type": "object",
  "properties": {
    "zip_code": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional US ZIP of the job site. Not required.",
      "title": "Zip Code"
    }
  },
  "title": "get_plumbing_call_numberArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "title": "Result",
      "type": "string"
    }
  },
  "required": [
    "result"
  ],
  "title": "get_plumbing_call_numberOutput"
}
🟡request_home_service(service_type, zip_code, customer_name, customer_phone, consent_to_contact, ...)

Submit a home-service request (a lead, not a booking). Cleaning, pest control, HVAC, handyman, and other are collecting: the request is passed along when a buyer covers the service, and there is no live buyer yet, so do not promise a callback. Requires name, phone, ZIP, and the person's explicit consent. For plumbing, the result includes call_to_connect and call_instruction: give the person the number and have them dial it. Never place the call yourself. get_plumbing_call_number does the same without any personal details.

Input Schema

{
  "type": "object",
  "properties": {
    "service_type": {
      "description": "Type of local service requested. For plumbing, prefer get_plumbing_call_number.",
      "enum": [
        "house_cleaning",
        "deep_cleaning",
        "move_in_out_cleaning",
        "recurring_cleaning",
        "pest_control",
        "plumbing",
        "hvac",
        "handyman",
        "other"
      ],
      "title": "Service Type",
      "type": "string"
    },
    "zip_code": {
      "description": "US 5-digit ZIP for the job site.",
      "title": "Zip Code",
      "type": "string"
    },
    "customer_name": {
      "description": "Customer's full name.",
      "title": "Customer Name",
      "type": "string"
    },
    "customer_phone": {
      "description": "US phone number for follow-up contact about this request.",
      "title": "Customer Phone",
      "type": "string"
    },
    "consent_to_contact": {
      "description": "Must be true for non-plumbing services: the person agreed to a call or text about this request.",
      "title": "Consent To Contact",
      "type": "boolean"
    },
    "city": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "City"
    },
    "state": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "2-letter US state code.",
      "title": "State"
    },
    "address_line": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Address Line"
    },
    "bedrooms": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Bedrooms"
    },
    "bathrooms": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Bathrooms"
    },
    "square_feet": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Square Feet"
    },
    "home_type": {
      "anyOf": [
        {
          "enum": [
            "apartment",
            "condo",
            "townhouse",
            "single_family",
            "other"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Home Type"
    },
    "frequency": {
      "default": "one_time",
      "enum": [
        "one_time",
        "weekly",
        "biweekly",
        "monthly"
      ],
      "title": "Frequency",
      "type": "string"
    },
    "preferred_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Preferred date as YYYY-MM-DD, if any.",
      "title": "Preferred Date"
    },
    "flexible_dates": {
      "default": true,
      "title": "Flexible Dates",
      "type": "boolean"
    },
    "notes": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "What the person needs, in their words.",
      "title": "Notes"
    },
    "customer_email": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Customer Email"
    },
    "source_agent": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": "mcp",
      "description": "Your agent or product name.",
      "title": "Source Agent"
    },
    "dry_run": {
      "default": false,
      "description": "Validate only; nothing is saved or passed along.",
      "title": "Dry Run",
      "type": "boolean"
    }
  },
  "required": [
    "service_type",
    "zip_code",
    "customer_name",
    "customer_phone",
    "consent_to_contact"
  ],
  "title": "request_home_serviceArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "title": "Result",
      "type": "string"
    }
  },
  "required": [
    "result"
  ],
  "title": "request_home_serviceOutput"
}
⚪request_cleaning(zip_code, customer_name, customer_phone, consent_to_contact, bedrooms, ...)

Shortcut for residential house cleaning (collecting; not a booking). Same pipeline as request_home_service.

Input Schema

{
  "type": "object",
  "properties": {
    "zip_code": {
      "description": "US 5-digit ZIP for the home.",
      "title": "Zip Code",
      "type": "string"
    },
    "customer_name": {
      "description": "Customer's full name.",
      "title": "Customer Name",
      "type": "string"
    },
    "customer_phone": {
      "description": "US phone number.",
      "title": "Customer Phone",
      "type": "string"
    },
    "consent_to_contact": {
      "description": "Must be true: the person agreed to a call or text about this request.",
      "title": "Consent To Contact",
      "type": "boolean"
    },
    "bedrooms": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Bedrooms"
    },
    "bathrooms": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Bathrooms"
    },
    "square_feet": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Square Feet"
    },
    "frequency": {
      "default": "one_time",
      "enum": [
        "one_time",
        "weekly",
        "biweekly",
        "monthly"
      ],
      "title": "Frequency",
      "type": "string"
    },
    "preferred_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Preferred Date"
    },
    "notes": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Notes"
    },
    "customer_email": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Customer Email"
    },
    "city": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "City"
    },
    "state": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "State"
    }
  },
  "required": [
    "zip_code",
    "customer_name",
    "customer_phone",
    "consent_to_contact"
  ],
  "title": "request_cleaningArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "title": "Result",
      "type": "string"
    }
  },
  "required": [
    "result"
  ],
  "title": "request_cleaningOutput"
}
🟢get_lead_status(lead_id)

Look up a previously submitted service request by lead_id.

Input Schema

{
  "type": "object",
  "properties": {
    "lead_id": {
      "description": "ID returned by request_home_service.",
      "title": "Lead Id",
      "type": "string"
    }
  },
  "required": [
    "lead_id"
  ],
  "title": "get_lead_statusArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "title": "Result",
      "type": "string"
    }
  },
  "required": [
    "result"
  ],
  "title": "get_lead_statusOutput"
}
🟢list_supported_services

Which services are live (plumbing: the person dials a number) vs collecting, plus the rules for agents.

Input Schema

{
  "type": "object",
  "properties": {},
  "title": "list_supported_servicesArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "title": "Result",
      "type": "string"
    }
  },
  "required": [
    "result"
  ],
  "title": "list_supported_servicesOutput"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools