Install
openclaw skills install justfixUse this skill when the user asks for a quote, estimate, price, or "how much" for a UK trades job – electrical, plumbing, locksmith, glazing, carpentry, handyperson, heating, gas, roofing, drains, white goods, or boiler service. Calls the JustFix Estimator MCP server to return a cost breakdown, scope summary, and a tappable booking link that completes the booking in the browser.
openclaw skills install justfixA drop-in skill that lets your AI agent quote UK trades jobs in real time, and pop the user out to the browser to complete the booking.
JustFix is a UK home-services platform. The skill talks to the public JustFix Estimator MCP server, returns a price breakdown for any of 13 service categories, and produces a tappable booking link the user can complete in their browser.
Trigger on any of these intents, in any phrasing:
If the user is outside the UK, mention that JustFix is UK-only and only quote if they confirm they're in the UK or want a UK quote anyway.
Three tools are available on the MCP. Use them in this order depending on intent:
list_services (when user asks what's available)Returns the 13 service categories with their hourly rates. Use when:
call_out_fee (when user asks about the booking fee)Returns the flat call-out fee that applies to every booking. Use when:
service-estimate-card (the main one – generates a quote)Required arguments:
service_code (string) – one of the codes from the service-code map belowbooking_description (string) – a clear one-sentence description of the workOptional arguments:
estimate (number, default 1) – hours estimated to complete the jobwork_items (array of strings) – optional list of specific tasks within the jobReturns the cost breakdown and a unique booking URL the user can tap to complete the booking on https://my.justfix.app.
Map natural-language descriptions to the right service_code:
| User says | service_code | £/hr |
|---|---|---|
| electrician, electrical, sockets, lights, wiring, fuse box, fuse | electrical | £90 |
| plumber, plumbing, leak, dripping tap, blocked sink, water pressure | plumbing | £90 |
| locksmith, lock, locked out, change locks, key | locksmith | £90 |
| glazier, glazing, broken window, broken glass, replace glass | glazing | £80 |
| carpenter, carpentry, wooden door, skirting, floorboards, joinery | carpentry | £90 |
| handyman, handyperson, odd jobs, mounting, assembly, picture hanging | handyman | £80 |
| heating, gas heating, boiler not working, radiator, central heating | heating_and_gas | £90 |
| gas appliance, gas hob, gas oven, gas cooker, gas safety | gas_appliances | £90 |
| roofer, roofing, roof leak, slipped tiles, gutters | roofing | £80 |
| drains, blocked drain, sewer, drainage, blocked toilet | drains | £90 |
| white goods, dishwasher, washing machine, tumble dryer, fridge | white_goods | £55 |
| boiler service, annual boiler check, gas safety certificate, CP12 | boiler_service | £70 |
| anything else / unsure | something_else | £80 |
If the user describes a job that could fit two codes (e.g. "my dishwasher is leaking" – could be plumbing or white_goods), pick the more specific one (white_goods) and mention you assumed that.
If the user doesn't say how long the job is, use these sensible defaults:
| Service | Default hours | Notes |
|---|---|---|
boiler_service | 1 | Fixed-scope annual check, 1 hour is standard |
locksmith | 1 | Lock changes take ~1hr |
gas_appliances | 1-2 | Simple install / safety check |
white_goods | 1 | Most diagnostics + repairs |
electrical | 2 | Variable – ask if scope is bigger |
plumbing | 2 | Variable – ask if scope is bigger |
glazing | 2 | Small window replacement |
carpentry | 2 | Standard repair / install |
handyman | 2 | Catch-all |
heating_and_gas | 2 | Diagnostics + simple fix |
drains | 2 | Clearance + camera survey if needed |
roofing | 3 | Minimum useful site visit |
something_else | 2 | Catch-all default |
Always tell the user how many hours you've estimated so they can correct you. The estimate is just a starting point.
After calling service-estimate-card, render the response as a clean, channel-appropriate card. Always include:
[Complete booking →](URL) if your channel renders markdown, otherwise the raw URL🔧 **[Service Name] Estimate**
**Scope:** [booking_description]
**Estimated duration:** [estimate] hour(s)
| Line | Amount |
|---|---|
| Labour ([hrs] × £[rate]/hr) | £[hrs × rate] |
| Call-out fee | £50.00 |
| **Total estimate** | **£[total]** |
📅 **[Tap to complete booking →]([booking_url])**
_The final invoice will reflect actual time spent on the job._
JustFix [Service Name] estimate
Scope: [booking_description]
Estimated duration: [estimate] hour(s)
Labour: £[hrs × rate]
Call-out fee: £50.00
Total estimate: £[total]
Complete booking: [booking_url]
Final invoice reflects actual time spent.
If your channel exposes inline buttons (Telegram inlinebuttons, Slack blocks, Discord buttons), render the booking URL as a button labelled "📅 Book this job" pointing at the booking_url. The URL is unique per estimate – use exactly what the MCP returns.
CAN:
my.justfix.app)estimateCAN'T:
my.justfix.app)When the user is ready to book, send them the URL. The booking page asks for their details, postcode, preferred date, and payment.
Each service-estimate-card call returns a URL with a unique chatgpt_booking_link_id UUID query parameter. JustFix uses this to attribute MCP-driven bookings. Don't strip or modify the URL – pass it through to the user exactly as returned.
User: How much for someone to come and fix my dripping kitchen tap?
Agent: Calls service-estimate-card with service_code=plumbing, estimate=1, booking_description="Diagnose and repair dripping kitchen tap, replace washers or cartridge if needed."
🔧 Plumbing Estimate
Scope: Diagnose and repair dripping kitchen tap, replace washers or cartridge if needed. Estimated duration: 1 hour
| Line | Amount |
|---|---|
| Labour (1 hr × £90/hr) | £90.00 |
| Call-out fee | £50.00 |
| Total estimate | £140.00 |
The final invoice will reflect actual time spent on the job. If you'd like a bigger or smaller estimate, just say.
See the install/ folder of the repo for per-harness setup:
install/openclaw.mdinstall/hermes.mdinstall/claude-code.mdinstall/cursor.mdinstall/codex-cli.mdinstall/gemini-cli.mdAll harnesses follow the same pattern: register the MCP endpoint, then put this SKILL.md somewhere the agent's skill discovery can find it.
MIT – see LICENSE in the repo. You can use, modify, distribute, and embed this skill anywhere, commercially or not, with attribution.