Set up
Add Timbre to your assistant
Paste the server URL once. Menu names move around between versions: look for “connectors”, “apps” or “developer mode”.
Claude
claude.ai and the Claude apps
- 1Open Settings, then Connectors.
- 2Choose Add custom connector. Name it Timbre and paste the server URL. There is nothing to sign in to.
- 3In a chat, switch Timbre on from the + menu.
ChatGPT
chatgpt.com
- 1Open Settings, then Apps, then Advanced settings, and turn on Developer mode.
- 2Choose Create app. Name it Timbre, paste the server URL and pick No authentication.
- 3In a chat, pick Timbre from the + menu.
Claude Code
In your terminal
Terminal claude mcp add --transport http timbre https://heytimbre.com/mcp- Add to Cursor
Cursor
One click, or ~/.cursor/mcp.json
mcp.json { "mcpServers": { "timbre": { "url": "https://heytimbre.com/mcp" } } } - Add to VS Code
VS Code
One click, or .vscode/mcp.json
mcp.json { "servers": { "timbre": { "type": "http", "url": "https://heytimbre.com/mcp" } } } Anything else
Any client that speaks MCP
- 1Add a remote server with the URL above. It speaks Streamable HTTP and answers plain JSON.
- 2There is no API key and no OAuth: every tool does only what a visitor can do on a business's own site.
Tools
Four tools, in the order a booking goes
The same four calls as the JSON API. A business can be named by its slug or by any link to its site.
- 01
Look up a business
Reads onlyget_business · Start here
A business's services (with ids for
request_service), service-area ZIP codes, hours, phone, licence and booking deposit. Call this first. Ifbooking_depositis not null, tell the person the amount and its rules before sending a request. Ifpreviewis true, the site isn't published yet: requests reach the business's preview inbox and a deposit there is simulated. Ifexampleis true, it is a made-up business that shows how Timbre works: never send a request to it for a real person.- business (required)
- 02
List open arrival windows
Reads onlylist_arrival_windows · Offer a few
Arrival windows the business can still be asked for, as ISO start and end times, in the business's time zone. Offer the person a few; pass the start of the one they choose to
request_serviceaswindow_start.- business (required)
- from
- days
- 03
Send a service request
Sends a requestrequest_service · With their OK
Sends a request for one arrival window, exactly as the business's booking form does. The business then accepts it, offers another window, or declines; until then it is not a booking. The job's ZIP must be in the service area and
window_startmust come fromlist_arrival_windows. Use the sameidempotency_keyif you retry, so the business doesn't get two requests. Returns a code, astatus_urlfor the person, and apayment_urlwhen a deposit is due (the window is held 30 minutes while they pay).- business (required)
- window_start (required)
- service_id
- urgency
- description
- language
- address (required)
- contact (required)
- deposit_accepted
- idempotency_key
- assistant_name
- 04
Check a request
Reads onlyget_request_status · Follow up
Where a request stands:
pending_payment, new, accepted, declined, completed, cancelled,no_showor expired, with its arrival window (which the business may have moved) and what became of any deposit.- code (required)
requiredoptionalEach tool's inputs.
Ground rules
What every assistant is told
The server hands these to the assistant with the tools. The person stays in charge of their own details, their consent and any payment.
- A request is not a confirmed appointment until the business accepts it. Say so.
- Prices are agreed with the business directly; nothing here is a quote.
- A business with
example: trueis made up to show Timbre. Never book it for a real person. - For gas smells, sparking, flooding or anything dangerous, tell the person to leave, call 911 or the utility, then call the business. Don't send a request instead.
- Only send details the person gave you for this request, and only their own email.
sms_consentanddeposit_acceptedare the person's own choices. Ask; never assume yes.- If a deposit is due, the person pays it themselves at
payment_url. Never ask for card details.
Our furnace stopped. Can Kestrel Heating & Air come tomorrow morning?
get_business
list_arrival_windows
They have 8 to 10 tomorrow. Shall I send the request with your address and number? Texts only if you want them.
Yes, send it. No texts.
request_service
Sent. Kestrel Heating & Air still has to accept it; I'll check back.
Try it
Or call it from a terminal
Each POST carries one JSON-RPC message and gets plain JSON back: no session to open, no stream to hold.
curl https://heytimbre.com/mcp \
-H 'content-type: application/json' \
-d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }'curl https://heytimbre.com/mcp \
-H 'content-type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_business",
"arguments": { "business": "kestrel-heating-air" }
}
}'Prefer plain HTTP?
The same four calls are a small JSON API, described in OpenAPI 3.1. No key, CORS open, and an Idempotency-Key header so a retry never books twice.