Tradehand

Browse and book local tradespeople in the UK.

Should I use this

Quality & Safety

A
Description quality
93%
Schema completeness
82%
Naming quality
97%
Poisoning risk
100%
Permission match
90%
Protocol compliance
100%

Findings (2)

  • LOWTool 'get_agent_discovery' description lacks action verbin get_agent_discovery
  • LOWTool 'browse_trades' suggests web access but openWorldHint=falsein browse_trades

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,868Tokens (tool definitions)
~2.7 KBTypical response size
Moderate attention impact (1.46% 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": {
    "tradehand": {
      "url": "https://tradehand.com/api/mcp"
    }
  }
}

Remote endpoints

https://tradehand.com/api/mcpstreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢browse_trades(query, cursor, limit)

List Tradehand's canonical UK trades. Instant quote is available before a trader is assigned.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "cursor": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 20
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "schemaVersion": {
      "type": "integer",
      "const": 1
    },
    "outcome": {
      "type": "string",
      "enum": [
        "ready",
        "needs_input",
        "blocked",
        "pending",
        "completed"
      ]
    },
    "data": {
      "type": "object"
    },
    "revision": {
      "type": "string"
    },
    "missingFacts": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "field",
          "question"
        ],
        "properties": {
          "field": {
            "type": "string"
          },
          "question": {
            "type": "string"
          }
        }
      }
    },
    "blockers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      }
    },
    "nextActions": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "code",
          "label",
          "requiredFacts"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "requiredFacts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      }
    },
    "continuation": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": false,
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "first_party"
          ]
        },
        "url": {
          "type": "string",
          "format": "uri"
        }
      }
    }
  },
  "required": [
    "schemaVersion",
    "outcome",
    "data",
    "missingFacts",
    "blockers",
    "nextActions",
    "continuation"
  ],
  "additionalProperties": false
}
🟢search_traders(trade, postcode, location, limit)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "trade": {
      "type": "string",
      "description": "Trade name or directory slug, for example Electricians, plumber, or roofers."
    },
    "postcode": {
      "type": "string",
      "description": "Optional full UK postcode, for example CO1 1AA."
    },
    "location": {
      "type": "string",
      "description": "Optional UK town, city, or borough; do not combine with postcode."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 10
    }
  },
  "required": [
    "trade"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "ok",
        "empty"
      ]
    },
    "trade": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "value",
        "label",
        "slug"
      ],
      "properties": {
        "value": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        }
      }
    },
    "requestedLocation": {
      "type": [
        "string",
        "null"
      ]
    },
    "resolvedArea": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "path"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "path": {
          "type": [
            "string",
            "null"
          ],
          "format": "uri"
        }
      }
    },
    "total": {
      "type": "integer",
      "minimum": 0
    },
    "returned": {
      "type": "integer",
      "minimum": 0
    },
    "truncated": {
      "type": "boolean"
    },
    "coverageNote": {
      "type": "string"
    },
    "listings": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "publicReference",
          "name",
          "trade",
          "location",
          "claimed",
          "accreditations",
          "sourceRegister",
          "sourceCheckedAt",
          "profileUrl"
        ],
        "properties": {
          "publicReference": {
            "type": "string",
            "description": "Public directory listing slug for get_trader."
          },
          "name": {
            "type": "string"
          },
          "trade": {
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "claimed": {
            "type": "boolean"
          },
          "accreditations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sourceRegister": {
            "type": [
              "string",
              "null"
            ]
          },
          "sourceCheckedAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "profileUrl": {
            "type": "string",
            "format": "uri"
          }
        }
      }
    }
  },
  "required": [
    "status",
    "trade",
    "requestedLocation",
    "resolvedArea",
    "total",
    "returned",
    "truncated",
    "coverageNote",
    "listings"
  ],
  "additionalProperties": false
}
🟢get_trader(publicReference)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "publicReference": {
      "type": "string",
      "description": "Public directory listing slug from search_traders."
    }
  },
  "required": [
    "publicReference"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "schemaVersion": {
      "type": "integer",
      "const": 1
    },
    "outcome": {
      "type": "string",
      "enum": [
        "ready",
        "needs_input",
        "blocked",
        "pending",
        "completed"
      ]
    },
    "data": {
      "type": "object"
    },
    "revision": {
      "type": "string"
    },
    "missingFacts": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "field",
          "question"
        ],
        "properties": {
          "field": {
            "type": "string"
          },
          "question": {
            "type": "string"
          }
        }
      }
    },
    "blockers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      }
    },
    "nextActions": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "code",
          "label",
          "requiredFacts"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "requiredFacts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      }
    },
    "continuation": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": false,
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "first_party"
          ]
        },
        "url": {
          "type": "string",
          "format": "uri"
        }
      }
    }
  },
  "required": [
    "schemaVersion",
    "outcome",
    "data",
    "missingFacts",
    "blockers",
    "nextActions",
    "continuation"
  ],
  "additionalProperties": false
}
🟢get_service_options(publicReference)

Return the listing's actual catalogue services when one exists. Does not reserve a slot or claim bookability.

Input Schema

{
  "type": "object",
  "properties": {
    "publicReference": {
      "type": "string"
    }
  },
  "required": [
    "publicReference"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "schemaVersion": {
      "type": "integer",
      "const": 1
    },
    "outcome": {
      "type": "string",
      "enum": [
        "ready",
        "needs_input",
        "blocked",
        "pending",
        "completed"
      ]
    },
    "data": {
      "type": "object"
    },
    "revision": {
      "type": "string"
    },
    "missingFacts": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "field",
          "question"
        ],
        "properties": {
          "field": {
            "type": "string"
          },
          "question": {
            "type": "string"
          }
        }
      }
    },
    "blockers": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      }
    },
    "nextActions": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "code",
          "label",
          "requiredFacts"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "requiredFacts": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      }
    },
    "continuation": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": false,
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "first_party"
          ]
        },
        "url": {
          "type": "string",
          "format": "uri"
        }
      }
    }
  },
  "required": [
    "schemaVersion",
    "outcome",
    "data",
    "missingFacts",
    "blockers",
    "nextActions",
    "continuation"
  ],
  "additionalProperties": false
}
🟢get_page_markdown(path)

Fetch a public Tradehand website page as clean markdown for agent reading and summarisation.

Input Schema

{
  "type": "object",
  "properties": {
    "path": {
      "type": "string",
      "description": "Public path on tradehand.com, for example /pricing or /for-trades.",
      "default": "/"
    }
  },
  "required": [
    "path"
  ],
  "additionalProperties": false
}
🟢get_agent_discovery

Return the public agent discovery endpoints, content policy, and canonical URLs for Tradehand.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢read_okf_concept(path)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "path": {
      "type": "string",
      "description": "Bundle path under /okf, for example /okf/costs/eicr.md, /okf/costs/ or /okf/log.md.",
      "default": "/okf/index.md"
    }
  },
  "required": [
    "path"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools