For plumbers

A pipe bursts at 22:40. The assistant finds your number and cannot use it.

Emergency work is the one job where the customer will take the first firm that can say yes. An assistant asked at 22:40 does not queue on hold and does not read your contact form. It picks whoever published availability and a price in a shape it can act on. If that is not you, you were never in the running.

Four questions an assistant asks before it sends someone your way

Answered from your own configuration, deterministically. No model sits between the question and your price.

Is anyone available right now, at 22:40 on a Tuesday?

check_hours

A datetime in, an open-or-closed answer plus your next opening time out. Out-of-hours call-out is a separate service with its own price, so "closed" comes back with a number attached rather than sending the customer to the next search result.

What does the emergency call-out cost, and does that include travel?

list_services

Structured prices with model, amount, currency and a VAT flag: 1295 SEK for the first hour, travel inside your stated area included, drain clearing from 2400 SEK. A wet-room job that genuinely needs a site visit is marked as quote-only, which is an honest answer and not a missing one.

Does a bathroom renovation qualify for the ROT deduction, and is the price before or after?

get_faq

Your wording, returned verbatim and filterable. ROT is where most quotes go wrong in conversation, because the rules turn on the property and the household rather than the pipe. You write the sentence once and every assistant repeats it exactly.

Is the firm Säker Vatten authorised, and insured for water damage?

get_business_info

Authorisation, insurance and the area you actually drive to, in a structured profile with your address, geo point, hours, contact and links. This is the field that decides whether an assistant recommends you for a wet room or quietly downgrades you to "handyman".

The same thing, on the wire

Nine MCP tools over JSON-RPC. Seven deterministic reads, two gated writes.

# Example tenant. Same wire shape as the live endpoint. $ curl -sS https://agents.ajarhq.com/t/vastrors/mcp \ -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' {"jsonrpc":"2.0","id":1,"result":{"tools":[ {"name":"get_business_info","description":"Profile, hours ..."}, {"name":"list_services", "description":"Prices, duration ..."}, {"name":"get_service", "description":"One service by id ..."}, {"name":"check_hours", "description":"Open at a time ..."}, {"name":"check_availability","description":"Candidate start times, not a confirmed diary ..."}, {"name":"request_quote", "description":"Gated. Held ..."}, {"name":"request_booking", "description":"Gated. Held ..."}, {"name":"get_request_status","description":"What happened to a request already submitted ..."}, {"name":"get_faq", "description":"Your own answers"}]}} # tools/call list_services -> result.content[0].text, decoded [{"id":"jour","name":"Emergency call-out, first hour", "price":{"model":"fixed","amount":1295,"currency":"SEK", "display":"1295 SEK"}, "duration_min":60,"bookable":true}, {"id":"avloppsspolning","name":"Drain clearing", "price":{"model":"from","amount":2400,"currency":"SEK", "display":"from 2400 SEK"}, "duration_min":120,"bookable":true}, {"id":"blandarbyte","name":"Tap or mixer replacement", "price":{"model":"fixed","amount":1150,"currency":"SEK", "display":"1150 SEK"}, "duration_min":60,"bookable":true}, {"id":"vatrum","name":"Wet-room renovation", "price":{"model":"quote","amount":null,"currency":"SEK", "display":"quote on request"}, "duration_min":null,"bookable":false}] # tools/call request_quote {"service_id":"vatrum","fields":{...}} { "status": "pending_owner_confirmation", "request_id": "4c07b1a9-3f2e-4d55-9a10-0b7e2c884d31", "service": {"id":"vatrum","name":"Wet-room renovation"}, "message": "Request received. Nothing is booked or bound until the owner confirms." }

Note the last one. A quote-only service still answers, it just answers honestly, and the request lands with you rather than in a confirmation nobody authorised.

An honest note about the numbers. Agent fetches are discovery evidence, not proven demand. Being readable means machines can now find your emergency rate and act on it. It does not mean a single call-out was booked. We count fetches and report them as what they are: sampled, best-effort, a lower bound with unknown error bars, and no substitute for a job on the calendar.

Open a page for your firm

Or look at who is already answering: the public directory.