For electricians

A customer asks their assistant for an electrician in Gothenburg. It cannot answer for you.

Assistants read websites all day. What they cannot do is read a call-out fee off a photo of a van, and they will not ring you to check. So they answer with whoever published the number in a shape a machine can parse. Ajar is that shape: your prices, your hours, your rules, served to the assistant and gated on your yes.

Five questions an assistant asks before it names an electrician

These are the ones that decide whether you are recommended or skipped. Four of them are answered with no model in the path, so a price is never invented.

What does a call-out cost, and is the first hour billed differently?

list_services

Every service comes back with a price object: model, amount, currency, VAT flag and a formatted display string. An emergency call-out is a priced line like any other, so the assistant repeats "1450 SEK for the first hour" instead of "contact them for pricing" and moving on to the next firm.

Can someone come out tonight?

check_hours

Pass an ISO 8601 datetime, get back whether you are open at that instant and when you next open. Out-of-hours work is its own service with its own price, so a closed Tuesday evening is an answer with a number attached, not a dead end.

Does this job qualify for the ROT deduction, and are the listed prices before or after?

get_faq

Your own wording, returned verbatim and filterable by substring. Whether ROT applies to a given job, and how you quote it, is a sentence you write once. It is not something a model should be inferring from the fine print on your homepage.

Is the firm a registered electrical installer?

get_business_info

Name, category, description, address, geo, hours, contact and links in one structured object. Your registration with Elsäkerhetsverket and any certifications live in text you control, not in a logo image on an About page that no assistant will ever read.

How quickly will they answer if I ask for a quote?

request_quote

The request is validated against the intake fields you defined, then held. The response body tells the assistant, in plain language, that nothing is booked or bound until you confirm. It can pass that on to the customer instead of making a promise on your behalf.

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/nordel-el/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":"felsokning","name":"Fault finding and repair", "price":{"model":"hourly","amount":895,"currency":"SEK", "display":"895 SEK/hour"}, "duration_min":60,"bookable":true}, {"id":"laddbox","name":"EV charger installation", "price":{"model":"from","amount":12900,"currency":"SEK", "display":"from 12900 SEK"}, "duration_min":240,"bookable":false}, {"id":"jourutryckning","name":"Emergency call-out, outside hours", "price":{"model":"fixed","amount":1450,"currency":"SEK", "display":"1450 SEK"}, "duration_min":60,"bookable":true}] # tools/call request_quote {"service_id":"laddbox","fields":{...}} { "status": "pending_owner_confirmation", "request_id": "e2956786-8161-42a0-b712-e544a191c4ce", "service": {"id":"laddbox","name":"EV charger installation"}, "message": "Request received. Nothing is booked or bound until the owner confirms." }

The reads answer instantly. The two write tools stop at your desk and wait, every time, for every agent.

An honest note about the numbers. Agent fetches are discovery evidence, not proven demand. A page like this tells you machines are reading your business and can finally act on what they read. It does not tell you anyone booked. We count the fetches and report them as what they are: sampled, best-effort, a lower bound with unknown error bars, and no substitute for a signed job.

Open a page for your firm

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