Handsome Local

Search hand-picked websites for plumbers, electricians, roofers and other trades, with screenshots.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
73%
Naming quality
100%
Poisoning risk
100%
Permission match
80%
Protocol compliance
100%

Findings (2)

  • LOWTool 'search_websites' suggests web access but openWorldHint=falsein search_websites
  • LOWTool 'get_website' suggests web access but openWorldHint=falsein get_website

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,733Tokens (tool definitions)
~5.3 KBTypical response size
Moderate attention impact (1.35% 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": {
    "handsome-local": {
      "url": "https://handsomelocal.com/mcp"
    }
  }
}

Remote endpoints

https://handsomelocal.com/mcpstreamable-http

What it can do

Tool inventory

Tools (3)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_websites(trade, region, style, colour, platform, ...)

Search Handsome Local, a hand-picked gallery of real websites for trades and home services businesses (plumbers, electricians, roofers, builders, heating and HVAC firms, landscapers) in the UK and US. Every entry is a live site chosen by an editor because it is well built and wins work; each comes with a screenshot of the top of the page, a one-sentence summary, its tags and a credit for whoever built it. Filter by trade, region, style, colour, platform, conversion features or typeface, or search free text. Returns the newest matches first. Use it for visual references when designing or building a website for a tradesperson. It does not rate or rank sites and it covers the trades listed only.

Input Schema

{
  "type": "object",
  "properties": {
    "trade": {
      "description": "Primary trade of the business, e.g. plumbers, electricians, roofers, construction, hvac, landscapers.",
      "type": "string",
      "enum": [
        "plumbers",
        "electricians",
        "roofers",
        "construction",
        "hvac",
        "landscapers",
        "handyman",
        "cleaners",
        "pest-control"
      ]
    },
    "region": {
      "description": "uk or us.",
      "type": "string",
      "enum": [
        "uk",
        "us"
      ]
    },
    "style": {
      "description": "Visual style tag, e.g. minimal, bold, photographic, dark, traditional.",
      "type": "string",
      "enum": [
        "minimal",
        "bold",
        "photographic",
        "illustrated",
        "corporate",
        "friendly",
        "dark",
        "colourful",
        "typographic",
        "traditional"
      ]
    },
    "colour": {
      "description": "Dominant colour tag, e.g. navy, green, orange, black.",
      "type": "string",
      "enum": [
        "black",
        "white",
        "grey",
        "beige",
        "brown",
        "blue",
        "navy",
        "teal",
        "green",
        "yellow",
        "orange",
        "red",
        "pink",
        "purple",
        "multicolour"
      ]
    },
    "platform": {
      "description": "What the site is built on, e.g. wordpress, webflow, wix, squarespace, custom.",
      "type": "string",
      "enum": [
        "wordpress",
        "wix",
        "squarespace",
        "webflow",
        "framer",
        "duda",
        "godaddy",
        "shopify",
        "astro",
        "custom",
        "unknown"
      ]
    },
    "features": {
      "description": "Conversion features the site must have, all of them, e.g. click-to-call, phone-in-header, review-count, quote-form, licence-number, van-photo.",
      "maxItems": 6,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "click-to-call",
          "phone-in-header",
          "sticky-cta",
          "quote-form",
          "online-booking",
          "live-chat",
          "reviews-widget",
          "review-count",
          "accreditation-badges",
          "licence-number",
          "before-and-after",
          "project-gallery",
          "service-area-map",
          "team-photos",
          "van-photo",
          "prices-shown",
          "emergency-line"
        ]
      }
    },
    "typeface": {
      "description": "A typeface name to match, e.g. Inter, Poppins, DM Sans.",
      "type": "string",
      "minLength": 1,
      "maxLength": 60
    },
    "query": {
      "description": "Free text matched against the business name, town, review and tech tags. Use for a place (\"Manchester\", \"Texas\") or a thing the review mentions (\"Checkatrade\", \"emergency\").",
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "limit": {
      "default": 5,
      "description": "How many results to return, 1 to 8.",
      "type": "integer",
      "minimum": 1,
      "maximum": 8
    },
    "screenshots": {
      "default": true,
      "description": "Include each result's screenshot as an image block. Set false for text only.",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "total_matches": {
      "type": "number"
    },
    "returned": {
      "type": "number"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "trade": {
            "type": "string"
          },
          "region": {
            "type": "string"
          },
          "town": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "credit": {
            "type": "string"
          },
          "website": {
            "type": "string"
          },
          "page": {
            "type": "string"
          },
          "screenshot": {
            "type": "string"
          },
          "features": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "style": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "colour": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "platform": {
            "type": "string"
          },
          "typeface": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tech": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "published_at": {
            "type": "string"
          }
        },
        "required": [
          "slug",
          "name",
          "trade",
          "region",
          "summary",
          "credit",
          "website",
          "page",
          "features",
          "style",
          "colour",
          "platform",
          "typeface",
          "tech"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "total_matches",
    "returned",
    "results"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢get_website(slug, screenshot)

One entry from Handsome Local by its slug (the last part of an entry URL, e.g. gk-plumbing): the whole review paragraph, every tag, the credit, the live site, the entry page and the screenshots. Use after search_websites when the full review matters.

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[a-z0-9-]{1,60}$",
      "description": "Entry slug, lower case with hyphens."
    },
    "screenshot": {
      "default": true,
      "description": "Include the card screenshot as an image block.",
      "type": "boolean"
    }
  },
  "required": [
    "slug"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "trade": {
      "type": "string"
    },
    "region": {
      "type": "string"
    },
    "town": {
      "type": "string"
    },
    "summary": {
      "type": "string"
    },
    "credit": {
      "type": "string"
    },
    "website": {
      "type": "string"
    },
    "page": {
      "type": "string"
    },
    "screenshot": {
      "type": "string"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "style": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "colour": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "platform": {
      "type": "string"
    },
    "typeface": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "tech": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "published_at": {
      "type": "string"
    },
    "review": {
      "type": "string"
    },
    "captured_at": {
      "type": "string"
    },
    "full_page_screenshot": {
      "type": "string"
    }
  },
  "required": [
    "slug",
    "name",
    "trade",
    "region",
    "summary",
    "credit",
    "website",
    "page",
    "features",
    "style",
    "colour",
    "platform",
    "typeface",
    "tech",
    "review",
    "captured_at"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢list_filters

The trades and tags that have published entries on Handsome Local, each with a count, so a search can be built from filters that exist. Cheap; call it before search_websites when unsure what to filter on.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "total": {
      "type": "number"
    },
    "generated": {
      "type": "string"
    },
    "trades": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "entry_term": {
            "type": "string"
          },
          "count": {
            "type": "number"
          }
        },
        "required": [
          "id",
          "label",
          "entry_term",
          "count"
        ],
        "additionalProperties": false
      }
    },
    "facets": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "term": {
              "type": "string"
            },
            "label": {
              "type": "string"
            },
            "count": {
              "type": "number"
            }
          },
          "required": [
            "term",
            "label",
            "count"
          ],
          "additionalProperties": false
        }
      }
    }
  },
  "required": [
    "total",
    "generated",
    "trades",
    "facets"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded3 tools