For physiotherapists

A client asks their assistant to find a physio and book an initial assessment. There is nowhere to send the request.

Most UK physio clinics publish what a session costs. The assistant a client actually asks cannot reliably read that price, and even when it guesses right it has no address to send the booking to, so the conversation ends at "give them a call". Ajar is the address: your prices in a shape a machine parses exactly, and a request path where every booking waits for your yes.

What we measured, before writing this page

Ten UK physiotherapy clinic sites, ten cities, checked 31 July 2026. Found by searching the vertical and city only, no price words, so the sample is not biased toward clinics that publish prices.

Publish a visible price for at least one session type8 of 10
Publish any price in structured data a machine reads reliably0 of 10
Have anywhere an assistant can send a request0 of 10
Serve a real llms.txt1 of 10

The details are worse than the totals. Two of the sites carry schema.org markup whose only pricing is a priceRange of "££" — the schema is there, the number is not. One clinic's initial-assessment price exists only inside its online booking application, invisible on the page an assistant would read. One llms.txt answers 200 and serves an HTML page, so even the checks overcount. From-prices appear here too, "starting from" an amount being how some of the clinics state their headline price. That is not a flaw: it is how they actually price, and it needs a price model that says so. One national chain's site refused a non-browser fetch outright during sampling and had to be substituted out. The full survey — method, all 20 rows across physio and dental, and the six extraction traps — is published at the UK practice price survey. Two of the five recorded assistant sessions we ran against sites from it were physiotherapy clinics: one stated its session price plainly enough that any extractor got it, the other kept its price inside the booking application, and neither could be booked — written up at can an AI assistant book you a dentist appointment?

Five questions an assistant asks before it names a physio

These decide whether your clinic is recommended or skipped. Four are answered with no model in the path, so a price is never invented. Nothing here gives clinical advice, and no symptom has to be typed into a request.

What does an initial assessment cost, and how long is it?

list_services

Each session type comes back as a price object with a duration in minutes: model, amount, currency, VAT flag and a display string. A 45-minute initial assessment and a 30-minute follow-up are separate priced lines, and a From-price is a first-class model rather than something a parser has to guess at.

Do I need a GP referral? Do you deal with my insurer?

get_faq

Your own wording, returned verbatim and filterable by substring. Referral policy, insurer arrangements, what to wear, whether the first session includes treatment: sentences you write once, correct in one place, and an assistant repeats instead of inferring.

Are you open Saturday morning?

check_hours

Pass an ISO 8601 datetime, get back whether the clinic is open at that instant and when it next opens. A closed Saturday comes back with the Monday opening attached, so the assistant can offer the next real option instead of a dead end.

Which clinic offers that treatment, and at what price?

get_service

One service by id: its price, duration, whether it can be booked, any published deposit terms, and the address of its own page. Every treatment you list gets a stable URL carrying structured data, so it is a thing an assistant can cite and link, not a row in a price table image.

Book me an initial assessment next week.

request_booking

The request is validated against the intake fields you defined, then held. The response tells the assistant, in plain language, that nothing is booked or bound until the clinic confirms. It carries a name, a contact and a requested slot, never a symptom, and it becomes an appointment only when you say so.

The same thing, on the wire

Nine MCP tools over JSON-RPC. Seven deterministic reads, two gated writes. Captured from the live UK demo practice on 4 August 2026, read-only calls, responses verbatim.

# Wrenfield Dental Practice, our own demonstration tenant. Descriptions shortened. $ curl -sS https://agents.ajarhq.com/t/ajar-demo-dental/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":"Business profile: name, category ..."}, {"name":"list_services", "description":"All services with prices ..."}, {"name":"get_service", "description":"One service by id: its price ..."}, {"name":"check_hours", "description":"Whether the business is open ..."}, {"name":"check_availability","description":"Candidate start times, not a confirmed diary ..."}, {"name":"request_quote", "description":"Submit a quote request. Gated ..."}, {"name":"request_booking", "description":"Submit a booking request ... Gated ..."}, {"name":"get_request_status","description":"What happened to a request already submitted ..."}, {"name":"get_faq", "description":"FAQ entries, optionally filtered ..."}]}} # tools/call check_hours {"datetime":"2026-08-08T10:00:00+01:00"} (a Saturday) { "open": true, "hours_published": true, "timezone": "Europe/London", "day": "sat", "closes_at": "13:00" } # tools/call get_service {"service_id":"new-patient-examination"} -> decoded { "id":"new-patient-examination","name":"New patient examination", "price":{"model":"fixed","amount":95,"currency":"GBP","display":"£95"}, "duration_min":30,"bookable":true, "url":"https://agents.ajarhq.com/t/ajar-demo-dental/services/new-patient-examination" }

The demonstration tenant is a dental practice rather than a physio clinic, and it is fictional — ours, openly labelled, on a phone number Ofcom reserves for drama. It is here because the shape is identical: a first appointment is a priced, bookable line with its own page address, in the currency and terms the clinic sets, and the Saturday morning it publishes is answered in London time rather than guessed. Open the page or point your own assistant at it.

An honest note about the numbers. The ten-site survey says machines cannot read physio prices today; it does not say clients are currently lost over it, and we will not pretend to know that. Agent fetches are discovery evidence, not proven demand. Being readable means an assistant can find your assessment price and your Saturday hours. It does not mean a client walked in. We count what we can and report it as what it is: sampled, best-effort, a lower bound with unknown error bars.

Open a page for your clinic

Or read the demonstration practice first, then who is already answering: the public directory.