Handsome Local
Search hand-picked websites for plumbers, electricians, roofers and other trades, with screenshots.
Should I use this
Quality & Safety
Findings (2)
- LOWin search_websites
- LOWin get_website
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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-httpWhat it can do
Tool inventory
Tools (3)
🟢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
Evidence