MCP Server

Tradehand

io.github.Humanleap/tradehand
Business & Operations Public & reachable MCP 2025-11-25

What this MCP does

Searches a UK directory of tradespeople, retrieves public trader and service details, and provides public website content.

browse_trades
List Tradehand's canonical UK trades. Instant quote is available before a trader is assigned.
Read only
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 20, 'minimum': 1}, 'query': {'type': 'string'}, 'cursor': {'type': 'string'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['schemaVersion', 'outcome', 'data', 'missingFacts', 'blockers', 'nextActions', 'continuation'], 'properties': {'data': {'type': 'object'}, 'outcome': {'enum': ['ready', 'needs_input', 'blocked', 'pending', 'completed'], 'type': 'string'}, 'blockers': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string'}, 'message': {'type': 'string'}}, 'additionalProperties': False}}, 'revision': {'type': 'string'}, 'nextActions': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'label', 'requiredFacts'], 'properties': {'code': {'type': 'string'}, 'label': {'type': 'string'}, 'requiredFacts': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'continuation': {'type': ['object', 'null'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'kind': {'enum': ['first_party'], 'type': 'string'}}, 'additionalProperties': False}, 'missingFacts': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'question'], 'properties': {'field': {'type': 'string'}, 'question': {'type': 'string'}}, 'additionalProperties': False}}, 'schemaVersion': {'type': 'integer', 'const': 1}}, 'additionalProperties': False}
get_agent_discovery
Return the public agent discovery endpoints, content policy, and canonical URLs for Tradehand.
Read only
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_page_markdown
Fetch a public Tradehand website page as clean markdown for agent reading and summarisation.
Read only
Input schema
{'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'default': '/', 'description': 'Public path on tradehand.com, for example /pricing or /for-trades.'}}, 'additionalProperties': False}
get_service_options
Return the listing's actual catalogue services when one exists. Does not reserve a slot or claim bookability.
Read only Open world
Input schema
{'type': 'object', 'required': ['publicReference'], 'properties': {'publicReference': {'type': 'string'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['schemaVersion', 'outcome', 'data', 'missingFacts', 'blockers', 'nextActions', 'continuation'], 'properties': {'data': {'type': 'object'}, 'outcome': {'enum': ['ready', 'needs_input', 'blocked', 'pending', 'completed'], 'type': 'string'}, 'blockers': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string'}, 'message': {'type': 'string'}}, 'additionalProperties': False}}, 'revision': {'type': 'string'}, 'nextActions': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'label', 'requiredFacts'], 'properties': {'code': {'type': 'string'}, 'label': {'type': 'string'}, 'requiredFacts': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'continuation': {'type': ['object', 'null'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'kind': {'enum': ['first_party'], 'type': 'string'}}, 'additionalProperties': False}, 'missingFacts': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'question'], 'properties': {'field': {'type': 'string'}, 'question': {'type': 'string'}}, 'additionalProperties': False}}, 'schemaVersion': {'type': 'integer', 'const': 1}}, 'additionalProperties': False}
get_trader
Return a public directory profile by listing slug. Instant quote remains available even when the listing has no purchasable catalogue. Does not expose phone, street address or coordinates.
Read only Open world
Input schema
{'type': 'object', 'required': ['publicReference'], 'properties': {'publicReference': {'type': 'string', 'description': 'Public directory listing slug from search_traders.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['schemaVersion', 'outcome', 'data', 'missingFacts', 'blockers', 'nextActions', 'continuation'], 'properties': {'data': {'type': 'object'}, 'outcome': {'enum': ['ready', 'needs_input', 'blocked', 'pending', 'completed'], 'type': 'string'}, 'blockers': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string'}, 'message': {'type': 'string'}}, 'additionalProperties': False}}, 'revision': {'type': 'string'}, 'nextActions': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'label', 'requiredFacts'], 'properties': {'code': {'type': 'string'}, 'label': {'type': 'string'}, 'requiredFacts': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'continuation': {'type': ['object', 'null'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'kind': {'enum': ['first_party'], 'type': 'string'}}, 'additionalProperties': False}, 'missingFacts': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'question'], 'properties': {'field': {'type': 'string'}, 'question': {'type': 'string'}}, 'additionalProperties': False}}, 'schemaVersion': {'type': 'integer', 'const': 1}}, 'additionalProperties': False}
read_okf_concept
Read one file of the Tradehand Open Knowledge Format bundle under /okf as raw markdown, YAML frontmatter intact. Start at /okf/index.md for the list of concepts.
Read only
Input schema
{'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'default': '/okf/index.md', 'description': 'Bundle path under /okf, for example /okf/costs/eicr.md, /okf/costs/ or /okf/log.md.'}}, 'additionalProperties': False}
search_traders
Find current public Tradehand directory listings by trade and optional UK postcode or place. Returns claim state, listing-source freshness, accreditation names, and canonical profile URLs; it does not claim availability, expose mixed-source ratings, or contact anyone.
Read only Open world
Input schema
{'type': 'object', 'required': ['trade'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 20, 'minimum': 1}, 'trade': {'type': 'string', 'description': 'Trade name or directory slug, for example Electricians, plumber, or roofers.'}, 'location': {'type': 'string', 'description': 'Optional UK town, city, or borough; do not combine with postcode.'}, 'postcode': {'type': 'string', 'description': 'Optional full UK postcode, for example CO1 1AA.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'trade', 'requestedLocation', 'resolvedArea', 'total', 'returned', 'truncated', 'coverageNote', 'listings'], 'properties': {'total': {'type': 'integer', 'minimum': 0}, 'trade': {'type': 'object', 'required': ['value', 'label', 'slug'], 'properties': {'slug': {'type': 'string'}, 'label': {'type': 'string'}, 'value': {'type': 'string'}}, 'additionalProperties': False}, 'status': {'enum': ['ok', 'empty'], 'type': 'string'}, 'listings': {'type': 'array', 'items': {'type': 'object', 'required': ['publicReference', 'name', 'trade', 'location', 'claimed', 'accreditations', 'sourceRegister', 'sourceCheckedAt', 'profileUrl'], 'properties': {'name': {'type': 'string'}, 'trade': {'type': 'string'}, 'claimed': {'type': 'boolean'}, 'location': {'type': 'string'}, 'profileUrl': {'type': 'string', 'format': 'uri'}, 'accreditations': {'type': 'array', 'items': {'type': 'string'}}, 'sourceRegister': {'type': ['string', 'null']}, 'publicReference': {'type': 'string', 'description': 'Public directory listing slug for get_trader.'}, 'sourceCheckedAt': {'type': ['string', 'null']}}, 'additionalProperties': False}}, 'returned': {'type': 'integer', 'minimum': 0}, 'truncated': {'type': 'boolean'}, 'coverageNote': {'type': 'string'}, 'resolvedArea': {'type': 'object', 'required': ['name', 'path'], 'properties': {'name': {'type': 'string'}, 'path': {'type': ['string', 'null'], 'format': 'uri'}}, 'additionalProperties': False}, 'requestedLocation': {'type': ['string', 'null']}}, 'additionalProperties': False}
Added
read_okf_concept
Oct. 2, 2026, 2:40 a.m.
Added
get_agent_discovery
Oct. 2, 2026, 2:40 a.m.
Added
get_page_markdown
Oct. 2, 2026, 2:40 a.m.
Added
get_service_options
Oct. 2, 2026, 2:40 a.m.
Added
get_trader
Oct. 2, 2026, 2:40 a.m.
Added
search_traders
Oct. 2, 2026, 2:40 a.m.
Added
browse_trades
Oct. 2, 2026, 2:40 a.m.