---
schema: "interfacedelta-service-md/1"
target_key: "sha256:a81aff9f4dccef45c6c0f90d6f5ef151588ef80f53ef8f0f982579f1950b91a0"
origin: "https://latchbell.com"
protocols: ["mcp"]
observed_at: "2026-11-12T09:10:45.641Z"
generated_at: "2026-11-13T01:04:48.776Z"
record_url: "https://interfacedelta.com/atlas/sha256:a81aff9f4dccef45c6c0f90d6f5ef151588ef80f53ef8f0f982579f1950b91a0"
record_api: "https://interfacedelta.com/api/v1/record/services/sha256:a81aff9f4dccef45c6c0f90d6f5ef151588ef80f53ef8f0f982579f1950b91a0"
source: "InterfaceDelta atlas"
license_note: "Use of this record is governed by https://interfacedelta.com/terms."
---

# Service record: https://latchbell.com

## Identity
- Origin: https://latchbell.com
- Endpoints: https://latchbell.com/mcp/agents
- Protocols: mcp
- Registry names: com.latchbell/latchbell
- First retained observation: 2026-11-12T09:10:45.641Z
- Latest observation: 2026-11-12T09:10:45.641Z

## Tools
- Tool 1: activate\_phone\_number (mcp); inputs: mode, number, owner\_approved; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 2: add\_booking (mcp); inputs: address, any\_time, customer\_email, customer\_name, customer\_phone, lead\_id, note, selections; inputs omitted: 3; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 3: add\_receptionist\_source (mcp); inputs: file\_base64, file\_name, file\_type, file\_url, note, title, url; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 4: approve\_own\_change (mcp); inputs: approval\_id, approve; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}
- Tool 5: ask\_business (mcp); inputs: business, customer\_name, inquiry\_id, message, reply\_token, selections, zip; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 6: block\_time (mcp); inputs: date, end, note, start, who; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}
- Tool 7: book (mcp); inputs: address, business, catalog\_revision, customer\_authorized, customer\_email, customer\_name, customer\_phone, dates; inputs omitted: 12; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 8: booking\_status (mcp); inputs: booking\_id, manage\_token, reply\_token; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 9: business\_info (mcp); inputs: business, id, offset, query; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 10: call\_brief (mcp); inputs: phone; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 11: cancel\_booking (mcp); inputs: booking\_id, manage\_token, reply\_token; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true}
- Tool 12: cancel\_customer\_booking (mcp); inputs: booking\_id; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true}
- Tool 13: cancel\_receptionist\_checkout (mcp); inputs: none shown; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 14: catalog (mcp); inputs: business, limit, offset, query; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 15: check\_in (mcp); inputs: booking\_id, reply\_token; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 16: checkout\_order (mcp); inputs: address, business, catalog\_revision, customer\_authorized, customer\_name, expected\_estimate\_cents, fulfillment, lines; inputs omitted: 5; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 17: close\_inquiry (mcp); inputs: inquiry\_id; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}
- Tool 18: coach\_phone\_call (mcp); inputs: call\_id, note; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 19: confirm\_business\_email (mcp); inputs: code, signup\_id; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 20: confirm\_request (mcp); inputs: booking\_id, minutes, price\_cents, start, who; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 21: contact\_business (mcp); inputs: business, customer\_name, message, request\_type; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 22: customer\_payment\_onboarding (mcp); inputs: none shown; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 23: edit\_receptionist\_source (mcp); inputs: remove, shareable, source\_id, text; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}
- Tool 24: estimate\_order (mcp); inputs: business, fulfillment, lines; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 25: find\_businesses (mcp); inputs: kind, query, zip; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 26: find\_services (mcp); inputs: city, date, days, fields, finish\_by, max\_price, options, repeat; inputs omitted: 4; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 27: find\_times (mcp); inputs: business, date, days, finish\_by, only\_who, repeat, selections, start\_after; inputs omitted: 2; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 28: flag\_bad\_lead (mcp); inputs: evidence, lead\_id, reason; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}
- Tool 29: follow\_up\_business (mcp); inputs: inquiry\_id, message, reply\_token; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 30: follow\_ups\_due (mcp); inputs: none shown; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 31: front\_desk (mcp); inputs: none shown; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 32: inquiries (mcp); inputs: none shown; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 33: inquiry\_status (mcp); inputs: inquiry\_id, reply\_token; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 34: log\_lead (mcp); inputs: add\_ons, bathrooms, bedrooms, clean\_type, contact, customer\_first\_name, details, issue; inputs omitted: 7; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}
- Tool 35: mark\_booking (mcp); inputs: booking\_id, step; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}
- Tool 36: message\_customer (mcp); inputs: booking\_id, follow\_up, inquiry\_id, message; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 37: move\_booking (mcp); inputs: booking\_id, start, who; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 38: my\_bookings (mcp); inputs: none shown; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 39: my\_business (mcp); inputs: none shown; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 40: my\_inquiries (mcp); inputs: none shown; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 41: my\_page (mcp); inputs: none shown; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 42: my\_website (mcp); inputs: path; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 43: note\_to\_owner (mcp); inputs: note; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}
- Tool 44: pair\_phone (mcp); inputs: code; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}
- Tool 45: phone\_call (mcp); inputs: call\_id, since; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 46: phone\_calls (mcp); inputs: limit; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 47: phone\_numbers (mcp); inputs: area\_code; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 48: phone\_portability (mcp); inputs: number; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 49: pipeline (mcp); inputs: month; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 50: place\_phone\_call (mcp); inputs: purpose, to; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 51: prepare\_number\_port (mcp); inputs: number; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 52: products (mcp); inputs: business, limit, offset, query; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 53: publish\_page (mcp); inputs: version\_id; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 54: publish\_website (mcp); inputs: rev; inputs omitted: 0; annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}
- Tool 55: quote (mcp); inputs: business, fulfillment, selections; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
- Tool 56: read\_business\_info (mcp); inputs: business, id, offset; inputs omitted: 0; annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}
Tools omitted: 40.

## Effect readings (AI)
- Tool 1 purpose: ◇ AI reading; Starts activating a phone number for the receptionist plan, by forwarding an existing one or ordering a new one.; lens: tool-purpose-v1; model: not recorded.
- Tool 2 (add\_booking): ◇ AI reading; state: counted; creates (confidence 0.91); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 2 purpose: ◇ AI reading; Creates a booking for a customer from catalog items at a start time, limited to open slots unless any\_time is set.; lens: tool-purpose-v1; model: not recorded.
- Tool 3 purpose: ◇ AI reading; Adds a price sheet, link, or note to the business's AI receptionist sources, rebuilding its public brief automatically.; lens: tool-purpose-v1; model: not recorded.
- Tool 4 purpose: ◇ AI reading; Authorizes or rejects a held change for a business this agent registered itself, identified by an approval ID.; lens: tool-purpose-v1; model: not recorded.
- Tool 5 (ask\_business): ◇ AI reading; state: counted; sends_messages (confidence 0.83); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 6 purpose: ◇ AI reading; Adds a time-off block for a date, all day or part of it, for one team member or everyone; overlapping bookings stay.; lens: tool-purpose-v1; model: not recorded.
- Tool 7 (book): ◇ AI reading; state: counted; creates (confidence 0.85); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 7 purpose: ◇ AI reading; Books a service appointment for a customer once they approve the listed services, cost and slot.; lens: tool-purpose-v1; model: not recorded.
- Tool 8 (booking\_status): ◇ AI reading; state: counted; reads (confidence 0.85); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 9 (business\_info): ◇ AI reading; state: counted; reads (confidence 0.87); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 9 purpose: ◇ AI reading; Returns a business's owner-published menu, prices, services, policies and events, with search and paging for more detail.; lens: tool-purpose-v1; model: not recorded.
- Tool 10 (call\_brief): ◇ AI reading; state: counted; reads (confidence 0.9); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 10 purpose: ◇ AI reading; Returns a short pre-call brief for a business's AI phone answerer, covering the caller's bookings and open messages.; lens: tool-purpose-v1; model: not recorded.
- Tool 11 (cancel\_booking): ◇ AI reading; state: counted; deletes (confidence 0.85); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 12 (cancel\_customer\_booking): ◇ AI reading; state: counted; deletes (confidence 0.82); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 13 (cancel\_receptionist\_checkout): ◇ AI reading; state: counted; deletes (confidence 0.8); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 13 purpose: ◇ AI reading; Cancels a pending unpaid plan checkout, expiring its payment link and releasing the held plan and spending-cap increase; charges nothing.; lens: tool-purpose-v1; model: not recorded.
- Tool 14 (catalog): ◇ AI reading; state: counted; reads (confidence 0.884); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 14 purpose: ◇ AI reading; Lists a business's owner-approved items with prices, option choices, and how each can be booked, requested, or bought.; lens: tool-purpose-v1; model: not recorded.
- Tool 15 purpose: ◇ AI reading; Updates a booking to checked-in status for a given booking ID, allowed starting 30 minutes ahead of its scheduled time.; lens: tool-purpose-v1; model: not recorded.
- Tool 16 (checkout\_order): ◇ AI reading; state: counted; moves_money (confidence 0.92); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 16 purpose: ◇ AI reading; Charges a customer for an approved, itemized order with a business, or returns a Stripe checkout link for them to pay.; lens: tool-purpose-v1; model: not recorded.
- Tool 17 (close\_inquiry): ◇ AI reading; state: counted; updates (confidence 0.8); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 17 purpose: ◇ AI reading; Changes a customer inquiry's status to closed, leaving appointments, orders and payments untouched and the sender unblocked.; lens: tool-purpose-v1; model: not recorded.
- Tool 18 purpose: ◇ AI reading; Sends a short owner note to the agent on an active outgoing call, reporting whether the agent heard it.; lens: tool-purpose-v1; model: not recorded.
- Tool 19 (confirm\_business\_email): ◇ AI reading; state: counted; creates (confidence 0.85); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 19 purpose: ◇ AI reading; Creates a business account once the emailed 6-digit code is verified, and returns its one-time owner API key.; lens: tool-purpose-v1; model: not recorded.
- Tool 20 purpose: ◇ AI reading; Updates a booking request by setting its price and duration once the customer has agreed a time.; lens: tool-purpose-v1; model: not recorded.
- Tool 21 purpose: ◇ AI reading; Sends a customer's initial message to a business, opening a conversation that is not yet a confirmed reservation or purchase.; lens: tool-purpose-v1; model: not recorded.
- Tool 22 purpose: ◇ AI reading; Generates a private onboarding link so the owner can set up customer payment acceptance with an external payment provider.; lens: tool-purpose-v1; model: not recorded.
- Tool 23 purpose: ◇ AI reading; Edits the text of a receptionist source or removes it, deleting uploaded files, then rebuilds the draft for owners.; lens: tool-purpose-v1; model: not recorded.
- Tool 24 purpose: ◇ AI reading; Estimates the total for a cart of products at a business, flagging items that need a quote; it places no order.; lens: tool-purpose-v1; model: not recorded.
- Tool 25 (find\_businesses): ◇ AI reading; state: counted; reads (confidence 0.93); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 25 purpose: ◇ AI reading; Lists local businesses matching a name or service query, optionally filtered by category and ZIP code, with no sign-in required.; lens: tool-purpose-v1; model: not recorded.
- Tool 26 (find\_services): ◇ AI reading; state: counted; reads (confidence 0.8); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 26 purpose: ◇ AI reading; Lists providers in a ZIP or city for house cleaning, plumbing or HVAC, with fixed prices and next open times.; lens: tool-purpose-v1; model: not recorded.
- Tool 27 (find\_times): ◇ AI reading; state: counted; reads (confidence 0.88); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 29 (follow\_up\_business): ◇ AI reading; state: counted; sends_messages (confidence 0.9); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 30 (follow\_ups\_due): ◇ AI reading; state: counted; reads (confidence 0.8); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 30 purpose: ◇ AI reading; Lists unanswered quoted leads due for a follow-up, each with a suggested draft message.; lens: tool-purpose-v1; model: not recorded.
- Tool 31 (front\_desk): ◇ AI reading; state: counted; reads (confidence 0.88); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 32 (inquiries): ◇ AI reading; state: counted; reads (confidence 0.88); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 32 purpose: ◇ AI reading; Lists recent inquiries a business received from customers or sent to other businesses, for owners only, with job details and pricing.; lens: tool-purpose-v1; model: not recorded.
- Tool 33 (inquiry\_status): ◇ AI reading; state: counted; reads (confidence 0.9); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 33 purpose: ◇ AI reading; Reports whether a customer's inquiry is open and if the business has replied, using its inquiry ID and reply token.; lens: tool-purpose-v1; model: not recorded.
- Tool 34 (log\_lead): ◇ AI reading; state: counted; creates (confidence 0.8); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 34 purpose: ◇ AI reading; Adds an incoming cleaning-service lead and returns a quote, open appointment slots and a suggested reply.; lens: tool-purpose-v1; model: not recorded.
- Tool 35 (mark\_booking): ◇ AI reading; state: counted; updates (confidence 0.86); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 36 (message\_customer): ◇ AI reading; state: counted; sends_messages (confidence 0.9); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 37 (move\_booking): ◇ AI reading; state: counted; updates (confidence 0.82); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 38 (my\_bookings): ◇ AI reading; state: counted; reads (confidence 0.87); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 38 purpose: ◇ AI reading; Lists bookings tied to the current account login, most recent first, and returns none when using the shared public key.; lens: tool-purpose-v1; model: not recorded.
- Tool 39 (my\_business): ◇ AI reading; state: counted; reads (confidence 0.87); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 40 (my\_inquiries): ◇ AI reading; state: counted; reads (confidence 0.9); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 41 (my\_page): ◇ AI reading; state: counted; reads (confidence 0.85); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 41 purpose: ◇ AI reading; Shows an owner's business page with its live and draft versions, pending edit status, past versions, photos and color themes.; lens: tool-purpose-v1; model: not recorded.
- Tool 42 (my\_website): ◇ AI reading; state: counted; reads (confidence 0.84); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 42 purpose: ◇ AI reading; Fetches a business's website state, including its pages, publish status, preview link and checks, or one page's HTML when given a path.; lens: tool-purpose-v1; model: not recorded.
- Tool 43 purpose: ◇ AI reading; Adds a short note of up to 300 characters to the owner's Latchbell inbox when no one is chatting with the agent.; lens: tool-purpose-v1; model: not recorded.
- Tool 45 (phone\_call): ◇ AI reading; state: counted; reads (confidence 0.88); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 45 purpose: ◇ AI reading; Reports the status, duration and new notes of a phone call the agent placed, identified by its call ID.; lens: tool-purpose-v1; model: not recorded.
- Tool 46 (phone\_calls): ◇ AI reading; state: counted; reads (confidence 0.88); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 46 purpose: ◇ AI reading; Lists recent outbound phone calls the business placed, newest first, up to 50, without event details.; lens: tool-purpose-v1; model: not recorded.
- Tool 47 (phone\_numbers): ◇ AI reading; state: counted; reads (confidence 0.85); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 47 purpose: ◇ AI reading; Lists available US local phone numbers in the owner's plan for a given area code; nothing is purchased.; lens: tool-purpose-v1; model: not recorded.
- Tool 48 (phone\_portability): ◇ AI reading; state: counted; reads (confidence 0.82); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 49 (pipeline): ◇ AI reading; state: counted; reads (confidence 0.85); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 50 purpose: ◇ AI reading; Starts a recorded phone call in which the business's AI assistant dials a number and pursues a written goal.; lens: tool-purpose-v1; model: not recorded.
- Tool 51 (prepare\_number\_port): ◇ AI reading; state: counted; creates (confidence 0.82); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 51 purpose: ◇ AI reading; Creates a draft number transfer for the signed-in owner, leaving the legal authorization for the owner to finish later.; lens: tool-purpose-v1; model: not recorded.
- Tool 52 (products): ◇ AI reading; state: counted; reads (confidence 0.9); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 53 (publish\_page): ◇ AI reading; state: counted; updates (confidence 0.81); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 53 purpose: ◇ AI reading; Updates the live business page by publishing the draft or restoring an earlier version, going live for customers immediately.; lens: tool-purpose-v1; model: not recorded.
- Tool 54 purpose: ◇ AI reading; Starts publishing the uploaded website draft live after a browser check passes; nothing goes live if the check fails.; lens: tool-purpose-v1; model: not recorded.
- Tool 55 (quote): ◇ AI reading; state: counted; none (confidence 0.8); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 55 purpose: ◇ AI reading; Estimates an itemized price for selected catalog items and options, by fulfillment method, before a customer books or orders.; lens: tool-purpose-v1; model: not recorded.
- Tool 56 (read\_business\_info): ◇ AI reading; state: counted; reads (confidence 0.93); lens: side-effects@1; model: claude-haiku-5.5.
- Tool 56 purpose: ◇ AI reading; Fetches one business info item by id, returning it in 6,000-character chunks so long text can be paged through.; lens: tool-purpose-v1; model: not recorded.

## Change history
No changes recorded in the retained history.

## Payment rails
- Protocols observed: none.
- HTTP 402 seen in retained observations: false.

## Not covered
- We don't call tools.
- We don't rate or certify.
- We don't publish prices.
- We cover only what was observed.

## Evidence
- Identity: observed / declared; observation time: 2026-11-12T09:10:45.641Z.
- Tools: declared; observation time: 2026-11-12T09:10:45.641Z.
- Effect readings (AI): AI reading; observation time: 2026-11-12T09:10:45.641Z.
- Change history: observed; observation time: 2026-11-12T09:10:45.641Z; change observation times: none.
- Payment rails: observed; observation time: 2026-11-12T09:10:45.641Z.

```json
{
  "schema": "interfacedelta-service-md/1",
  "target_key": "sha256:a81aff9f4dccef45c6c0f90d6f5ef151588ef80f53ef8f0f982579f1950b91a0",
  "origin": "https://latchbell.com",
  "protocols": [
    "mcp"
  ],
  "observed_at": "2026-11-12T09:10:45.641Z",
  "generated_at": "2026-11-13T01:04:48.776Z",
  "record_url": "https://interfacedelta.com/atlas/sha256:a81aff9f4dccef45c6c0f90d6f5ef151588ef80f53ef8f0f982579f1950b91a0",
  "record_api": "https://interfacedelta.com/api/v1/record/services/sha256:a81aff9f4dccef45c6c0f90d6f5ef151588ef80f53ef8f0f982579f1950b91a0",
  "source": "InterfaceDelta atlas",
  "license_note": "Use of this record is governed by https://interfacedelta.com/terms.",
  "identity": {
    "origin": "https://latchbell.com",
    "endpoints": [
      "https://latchbell.com/mcp/agents"
    ],
    "protocols": [
      "mcp"
    ],
    "registry_names": [
      "com.latchbell/latchbell"
    ],
    "first_retained_observation": "2026-11-12T09:10:45.641Z",
    "latest_observation": "2026-11-12T09:10:45.641Z"
  },
  "tools": [
    {
      "name": "activate_phone_number",
      "protocol": "mcp",
      "inputs": [
        "mode",
        "number",
        "owner_approved"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Starts activating a phone number for the receptionist plan, by forwarding an existing one or ordering a new one.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "add_booking",
      "protocol": "mcp",
      "inputs": [
        "address",
        "any_time",
        "customer_email",
        "customer_name",
        "customer_phone",
        "lead_id",
        "note",
        "selections"
      ],
      "inputs_omitted": 3,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "creates",
            "confidence": 0.91
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Creates a booking for a customer from catalog items at a start time, limited to open slots unless any_time is set.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "add_receptionist_source",
      "protocol": "mcp",
      "inputs": [
        "file_base64",
        "file_name",
        "file_type",
        "file_url",
        "note",
        "title",
        "url"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Adds a price sheet, link, or note to the business's AI receptionist sources, rebuilding its public brief automatically.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "approve_own_change",
      "protocol": "mcp",
      "inputs": [
        "approval_id",
        "approve"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Authorizes or rejects a held change for a business this agent registered itself, identified by an approval ID.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "ask_business",
      "protocol": "mcp",
      "inputs": [
        "business",
        "customer_name",
        "inquiry_id",
        "message",
        "reply_token",
        "selections",
        "zip"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "sends_messages",
            "confidence": 0.83
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "block_time",
      "protocol": "mcp",
      "inputs": [
        "date",
        "end",
        "note",
        "start",
        "who"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Adds a time-off block for a date, all day or part of it, for one team member or everyone; overlapping bookings stay.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "book",
      "protocol": "mcp",
      "inputs": [
        "address",
        "business",
        "catalog_revision",
        "customer_authorized",
        "customer_email",
        "customer_name",
        "customer_phone",
        "dates"
      ],
      "inputs_omitted": 12,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "creates",
            "confidence": 0.85
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Books a service appointment for a customer once they approve the listed services, cost and slot.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "booking_status",
      "protocol": "mcp",
      "inputs": [
        "booking_id",
        "manage_token",
        "reply_token"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.85
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "business_info",
      "protocol": "mcp",
      "inputs": [
        "business",
        "id",
        "offset",
        "query"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.87
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Returns a business's owner-published menu, prices, services, policies and events, with search and paging for more detail.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "call_brief",
      "protocol": "mcp",
      "inputs": [
        "phone"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.9
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Returns a short pre-call brief for a business's AI phone answerer, covering the caller's bookings and open messages.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "cancel_booking",
      "protocol": "mcp",
      "inputs": [
        "booking_id",
        "manage_token",
        "reply_token"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": true,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "deletes",
            "confidence": 0.85
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "cancel_customer_booking",
      "protocol": "mcp",
      "inputs": [
        "booking_id"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": true,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "deletes",
            "confidence": 0.82
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "cancel_receptionist_checkout",
      "protocol": "mcp",
      "inputs": [],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "deletes",
            "confidence": 0.8
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Cancels a pending unpaid plan checkout, expiring its payment link and releasing the held plan and spending-cap increase; charges nothing.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "catalog",
      "protocol": "mcp",
      "inputs": [
        "business",
        "limit",
        "offset",
        "query"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.884
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Lists a business's owner-approved items with prices, option choices, and how each can be booked, requested, or bought.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "check_in",
      "protocol": "mcp",
      "inputs": [
        "booking_id",
        "reply_token"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Updates a booking to checked-in status for a given booking ID, allowed starting 30 minutes ahead of its scheduled time.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "checkout_order",
      "protocol": "mcp",
      "inputs": [
        "address",
        "business",
        "catalog_revision",
        "customer_authorized",
        "customer_name",
        "expected_estimate_cents",
        "fulfillment",
        "lines"
      ],
      "inputs_omitted": 5,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "moves_money",
            "confidence": 0.92
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Charges a customer for an approved, itemized order with a business, or returns a Stripe checkout link for them to pay.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "close_inquiry",
      "protocol": "mcp",
      "inputs": [
        "inquiry_id"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "updates",
            "confidence": 0.8
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Changes a customer inquiry's status to closed, leaving appointments, orders and payments untouched and the sender unblocked.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "coach_phone_call",
      "protocol": "mcp",
      "inputs": [
        "call_id",
        "note"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Sends a short owner note to the agent on an active outgoing call, reporting whether the agent heard it.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "confirm_business_email",
      "protocol": "mcp",
      "inputs": [
        "code",
        "signup_id"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "creates",
            "confidence": 0.85
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Creates a business account once the emailed 6-digit code is verified, and returns its one-time owner API key.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "confirm_request",
      "protocol": "mcp",
      "inputs": [
        "booking_id",
        "minutes",
        "price_cents",
        "start",
        "who"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Updates a booking request by setting its price and duration once the customer has agreed a time.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "contact_business",
      "protocol": "mcp",
      "inputs": [
        "business",
        "customer_name",
        "message",
        "request_type"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Sends a customer's initial message to a business, opening a conversation that is not yet a confirmed reservation or purchase.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "customer_payment_onboarding",
      "protocol": "mcp",
      "inputs": [],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Generates a private onboarding link so the owner can set up customer payment acceptance with an external payment provider.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "edit_receptionist_source",
      "protocol": "mcp",
      "inputs": [
        "remove",
        "shareable",
        "source_id",
        "text"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Edits the text of a receptionist source or removes it, deleting uploaded files, then rebuilds the draft for owners.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "estimate_order",
      "protocol": "mcp",
      "inputs": [
        "business",
        "fulfillment",
        "lines"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Estimates the total for a cart of products at a business, flagging items that need a quote; it places no order.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "find_businesses",
      "protocol": "mcp",
      "inputs": [
        "kind",
        "query",
        "zip"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.93
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Lists local businesses matching a name or service query, optionally filtered by category and ZIP code, with no sign-in required.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "find_services",
      "protocol": "mcp",
      "inputs": [
        "city",
        "date",
        "days",
        "fields",
        "finish_by",
        "max_price",
        "options",
        "repeat"
      ],
      "inputs_omitted": 4,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.8
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Lists providers in a ZIP or city for house cleaning, plumbing or HVAC, with fixed prices and next open times.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "find_times",
      "protocol": "mcp",
      "inputs": [
        "business",
        "date",
        "days",
        "finish_by",
        "only_who",
        "repeat",
        "selections",
        "start_after"
      ],
      "inputs_omitted": 2,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.88
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "flag_bad_lead",
      "protocol": "mcp",
      "inputs": [
        "evidence",
        "lead_id",
        "reason"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": null
    },
    {
      "name": "follow_up_business",
      "protocol": "mcp",
      "inputs": [
        "inquiry_id",
        "message",
        "reply_token"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "sends_messages",
            "confidence": 0.9
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "follow_ups_due",
      "protocol": "mcp",
      "inputs": [],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.8
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Lists unanswered quoted leads due for a follow-up, each with a suggested draft message.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "front_desk",
      "protocol": "mcp",
      "inputs": [],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.88
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "inquiries",
      "protocol": "mcp",
      "inputs": [],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.88
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Lists recent inquiries a business received from customers or sent to other businesses, for owners only, with job details and pricing.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "inquiry_status",
      "protocol": "mcp",
      "inputs": [
        "inquiry_id",
        "reply_token"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.9
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Reports whether a customer's inquiry is open and if the business has replied, using its inquiry ID and reply token.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "log_lead",
      "protocol": "mcp",
      "inputs": [
        "add_ons",
        "bathrooms",
        "bedrooms",
        "clean_type",
        "contact",
        "customer_first_name",
        "details",
        "issue"
      ],
      "inputs_omitted": 7,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "creates",
            "confidence": 0.8
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Adds an incoming cleaning-service lead and returns a quote, open appointment slots and a suggested reply.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "mark_booking",
      "protocol": "mcp",
      "inputs": [
        "booking_id",
        "step"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "updates",
            "confidence": 0.86
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "message_customer",
      "protocol": "mcp",
      "inputs": [
        "booking_id",
        "follow_up",
        "inquiry_id",
        "message"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "sends_messages",
            "confidence": 0.9
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "move_booking",
      "protocol": "mcp",
      "inputs": [
        "booking_id",
        "start",
        "who"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "updates",
            "confidence": 0.82
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "my_bookings",
      "protocol": "mcp",
      "inputs": [],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.87
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Lists bookings tied to the current account login, most recent first, and returns none when using the shared public key.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "my_business",
      "protocol": "mcp",
      "inputs": [],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.87
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "my_inquiries",
      "protocol": "mcp",
      "inputs": [],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.9
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "my_page",
      "protocol": "mcp",
      "inputs": [],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.85
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Shows an owner's business page with its live and draft versions, pending edit status, past versions, photos and color themes.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "my_website",
      "protocol": "mcp",
      "inputs": [
        "path"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.84
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Fetches a business's website state, including its pages, publish status, preview link and checks, or one page's HTML when given a path.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "note_to_owner",
      "protocol": "mcp",
      "inputs": [
        "note"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Adds a short note of up to 300 characters to the owner's Latchbell inbox when no one is chatting with the agent.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "pair_phone",
      "protocol": "mcp",
      "inputs": [
        "code"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": null
    },
    {
      "name": "phone_call",
      "protocol": "mcp",
      "inputs": [
        "call_id",
        "since"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.88
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Reports the status, duration and new notes of a phone call the agent placed, identified by its call ID.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "phone_calls",
      "protocol": "mcp",
      "inputs": [
        "limit"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.88
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Lists recent outbound phone calls the business placed, newest first, up to 50, without event details.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "phone_numbers",
      "protocol": "mcp",
      "inputs": [
        "area_code"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.85
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Lists available US local phone numbers in the owner's plan for a given area code; nothing is purchased.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "phone_portability",
      "protocol": "mcp",
      "inputs": [
        "number"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.82
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "pipeline",
      "protocol": "mcp",
      "inputs": [
        "month"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.85
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "place_phone_call",
      "protocol": "mcp",
      "inputs": [
        "purpose",
        "to"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Starts a recorded phone call in which the business's AI assistant dials a number and pursues a written goal.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "prepare_number_port",
      "protocol": "mcp",
      "inputs": [
        "number"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "creates",
            "confidence": 0.82
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Creates a draft number transfer for the signed-in owner, leaving the legal authorization for the owner to finish later.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "products",
      "protocol": "mcp",
      "inputs": [
        "business",
        "limit",
        "offset",
        "query"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.9
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      }
    },
    {
      "name": "publish_page",
      "protocol": "mcp",
      "inputs": [
        "version_id"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "updates",
            "confidence": 0.81
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Updates the live business page by publishing the draft or restoring an earlier version, going live for customers immediately.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "publish_website",
      "protocol": "mcp",
      "inputs": [
        "rev"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "openWorldHint": true
      },
      "effects": null,
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Starts publishing the uploaded website draft live after a browser check passes; nothing goes live if the check fails.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "quote",
      "protocol": "mcp",
      "inputs": [
        "business",
        "fulfillment",
        "selections"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "none",
            "confidence": 0.8
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Estimates an itemized price for selected catalog items and options, by fulfillment method, before a customer books or orders.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    },
    {
      "name": "read_business_info",
      "protocol": "mcp",
      "inputs": [
        "business",
        "id",
        "offset"
      ],
      "inputs_omitted": 0,
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "openWorldHint": false
      },
      "effects": {
        "marker": "◇ AI reading",
        "state": "counted",
        "classes": [
          {
            "class": "reads",
            "confidence": 0.93
          }
        ],
        "lens": "side-effects@1",
        "model": "claude-haiku-5.5"
      },
      "purpose": {
        "marker": "◇ AI reading",
        "text": "Fetches one business info item by id, returning it in 6,000-character chunks so long text can be paged through.",
        "lens": "tool-purpose-v1",
        "model": null
      }
    }
  ],
  "tools_omitted": 40,
  "tools_state": "recorded",
  "changes": [],
  "payment_rails": {
    "protocols": [],
    "http_402_seen": false
  },
  "not_covered": [
    "We don't call tools.",
    "We don't rate or certify.",
    "We don't publish prices.",
    "We cover only what was observed."
  ],
  "evidence": [
    {
      "section": "Identity",
      "classes": [
        "observed",
        "declared"
      ],
      "observed_at": "2026-11-12T09:10:45.641Z"
    },
    {
      "section": "Tools",
      "classes": [
        "declared"
      ],
      "observed_at": "2026-11-12T09:10:45.641Z"
    },
    {
      "section": "Effect readings (AI)",
      "classes": [
        "AI reading"
      ],
      "observed_at": "2026-11-12T09:10:45.641Z"
    },
    {
      "section": "Change history",
      "classes": [
        "observed"
      ],
      "observed_at": "2026-11-12T09:10:45.641Z",
      "observation_times": []
    },
    {
      "section": "Payment rails",
      "classes": [
        "observed"
      ],
      "observed_at": "2026-11-12T09:10:45.641Z"
    }
  ]
}
```
