ManyMore

Developers · MCP server v2

Book any ManyMore business from your agent

Every business on ManyMore is bookable by an AI assistant through one MCP server, with no work on the business's side. Your agent finds a business, reads its real open times, places a booking request, and can check, move or cancel it or leave a message later. The owner approves the request; the customer gets the same texts and emails as any other booking. Ready for Meta Muse, OpenAI Dots, ChatGPT and Claude.

Endpoint

POST https://manymore.ca/slotsmith/api/mcp
  • Protocol: Model Context Protocol over streamable HTTP, protocol version 2025-06-18, plain JSON-RPC 2.0 bodies. Responses are always JSON (no server-sent events), whatever the Accept header says. Methods: initialize (answers with an Mcp-Session-Id; the server is stateless and accepts any session id back), notifications/initialized, ping, tools/list, tools/call. Every tool carries annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) and an outputSchema; every result comes back as both text and structuredContent, with ok: false + error + message on failure.
  • Authentication:none required. Reads are public business information; writes carry the customer's own details and are gated by them (a booking is only ever shown to a caller holding its confirmation code and the phone number it was made with). Partners can send Authorization: Bearer <partner key> for higher limits; an unknown key is a 401. Keys: hello@manymore.ca.
  • Attribution: send X-ManyMore-Agent: muse (or dots, or your product's name). It is recorded on every booking and message, so businesses see which assistant sent the job. With a partner key the partner name is the default.
  • Limits and region: 60 requests a minute per IP (burst 30) without a key; 600 a minute with one. Businesses in Canada and the US.

Tools

find_pros read-only

Find bookable trades and service businesses: appliance repair, HVAC, plumbing, electrical, handyman, detailing, cleaning, restoration and more. Returns each business's services (ids, durations, prices where set, whether it quotes first), hours, service area, country, timezone, its phone line (answered by Wren) and booking page. Only businesses that are set up and listed are returned.

tradestring, optionalWhat kind of work, e.g. "appliance repair", "plumber".
nearstring, optionalCity or area, e.g. "Kingston, Ontario", "Austin".

get_availability read-only

Real open appointment slots for one service at one business, read from the business's own calendar. Defaults to today through 14 days ahead. Slot times are ISO 8601 in the business's own timezone (offset included, timezone named). A slot returned here is one a human customer could book too; booking it never double-books the business.

slugstring, requiredThe business slug from find_pros.
serviceIdstring, requiredThe service id from find_pros.
fromDateYYYY-MM-DD, optionalFirst day to include, in the business's timezone. Default: today.
toDateYYYY-MM-DD, optionalLast day to include. Default: fromDate + 14 days.

request_booking write

Place a booking request for the customer at a slot from get_availability. On most businesses this creates a request the owner accepts or declines (status REQUESTED); it is not a guaranteed confirmed booking. Returns a confirmationCode (give it to the customer), a manage link, and whatHappensNext. Call it only with the customer's explicit consent and real contact details: they will be texted and emailed directly. Idempotent: repeating the same request returns the same booking.

slugstring, requiredFrom find_pros.
serviceIdstring, requiredFrom find_pros.
startISOstring, requiredSlot start, ISO 8601, exactly as returned by get_availability.
customerNamestring, required
customerPhonestring, requiredThe customer's mobile, E.164 preferred.
customerEmailstringRequired unless smsConsent is true.
smsConsentboolean, optionalTrue only if the customer explicitly agreed to appointment texts at that number. Never assume it.
addressstring, requiredWhere the work happens.
problemstring, requiredWhat the customer needs, in their own words.
idempotencyKeystring, optionalYour own stable id for this request.

get_booking_status read-only

Look up one booking by its confirmation code and the phone number it was made with. Both must match or the answer is not_found. Returns status, when, service, business, and whether it can still be moved or cancelled. Nothing else about any customer is ever returned.

confirmationCodestring, requiredFrom request_booking, or the customer's confirmation text/email.
customerPhonestring, requiredThe phone number the booking was made with.

reschedule_booking write

Move the booking to a new open time from get_availability. Same code + phone check. The new time is re-validated against live availability. A tentative request stays a request; a confirmed booking is moved on the business's calendar and both parties are notified.

confirmationCodestring, required
customerPhonestring, required
newStartISOstring, requiredA slot start from get_availability, unchanged.

cancel_booking write, destructive

Cancel the booking. Same code + phone check. Frees the slot and notifies the business. Only with the customer's explicit confirmation; it cannot be undone (they would book again). Safe to retry.

confirmationCodestring, required
customerPhonestring, required
reasonstring, optionalIn the customer's words.

leave_message write

Leave a message for the business: a question, a callback, a quote request, something a booking doesn't cover. The owner is texted and emailed at once and sees it on their dashboard. Needs a name and a real callback number. The same message twice is delivered once.

slugstring, requiredFrom find_pros.
customerNamestring, required
customerPhonestring, requiredA number the business can call or text back.
messagestring, requiredUp to 1000 characters.
urgentboolean, optionalTrue if it can't wait (a leak, no heat, no power).

Example

curl -X POST https://manymore.ca/slotsmith/api/mcp \
  -H "content-type: application/json" -H "X-ManyMore-Agent: my-agent" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"find_pros","arguments":{"trade":"appliance repair","near":"Kingston, Ontario"}}}'

# then, with a slug and serviceId from the result:
curl -X POST https://manymore.ca/slotsmith/api/mcp \
  -H "content-type: application/json" -H "X-ManyMore-Agent: my-agent" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
       "params":{"name":"get_availability","arguments":{"slug":"northside-demo","serviceId":"<id>"}}}'

# book a slot (the demo business confirms on the spot):
curl -X POST https://manymore.ca/slotsmith/api/mcp \
  -H "content-type: application/json" -H "X-ManyMore-Agent: my-agent" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
       "params":{"name":"request_booking","arguments":{"slug":"northside-demo","serviceId":"<id>",
         "startISO":"<a slot>","customerName":"Pat Test","customerPhone":"+16135550199",
         "customerEmail":"pat@example.com","address":"12 King St, Kingston","problem":"Washer won't drain"}}}'

# later: {"name":"get_booking_status","arguments":{"confirmationCode":"<code>","customerPhone":"+16135550199"}}

For testing, use the demo business northside-demo (Northside Appliance Repair, a fictional business in Kingston). Its requests are confirmed automatically and cleared nightly, so nobody is dispatched. Requests to real businesses reach a real owner.

Guarantees

  • Availability comes from the business's own calendar, the same source its booking page uses. An agent is never offered a slot a person couldn't book.
  • Every write goes through the same engine as every other channel: idempotent, no double-booking, notice and buffer rules enforced, the same reschedule and cancel paths the customer's own link uses.
  • On businesses that screen requests, the owner accepts or declines. An agent cannot force a confirmed job onto anyone's calendar.
  • No tool returns another customer's information. A booking is shown only to a caller holding both its confirmation code and the phone number it was made with — the same trust as the customer's texted link.
  • Every agent booking and message is recorded with its source and the agent's name, so businesses can see which assistant sent what.
  • A business that has paused new requests answers with a clear message instead of taking the booking.

Connecting from Meta Muse

Muse connects to services through connectors; this server is ready as an existing MCPconnector. In Muse's connector settings, add a connector with:

  • Endpoint: https://manymore.ca/slotsmith/api/mcp
  • Connection type: Existing MCP
  • Authentication: none (or Other, with a partner key as a Bearer token)

Then ask Muse things like:

  • “Find me an appliance repair place in Kingston that can come this week — my washer won't drain.”
  • “Book the Thursday 10am slot with Northside Appliance Repair and send them my address.”
  • “What's the status of my booking? The code is in my texts.”

Connecting from OpenAI Dots

A dot uses the plugins (connectors) on your ChatGPT account. In ChatGPT: Settings → Connectors → Developer mode → Add connector (a paid plan is needed for custom connectors):

  • Name: ManyMore
  • MCP server URL: https://manymore.ca/slotsmith/api/mcp
  • Authentication: No authentication

Then tell your dot things like:

  • “What's the status of my booking? The code is in my texts.”
  • “Move my appliance appointment to next Tuesday morning.”
  • “Leave a message for Northside asking for a quote on a new dishwasher install.”

Building a connector?

Email hello@manymore.ca for a partner key, a test business of your own, and a heads-up before schema changes.