Concierge

Developers

Connect an AI assistant to Concierge

Concierge publishes two servers for the open Model Context Protocol (MCP). The business server gives a signed-in staff member the tools their role allows, behind OAuth 2.1 with PKCE; the guest server publishes a listed property's profile and FAQ, and a guest's own stays after they verify their WhatsApp number. Every guest-visible or destructive write stops for the person's confirmation.

  • Two MCP servers
  • OAuth 2.1 with PKCE
  • Published metadata
  • Read-only and destructive hints
  • Confirmation before guest-visible writes

Endpoints

Two MCP servers: one for your team, one for guests

Both speak MCP over Streamable HTTP: one endpoint, every operation a POST. Each server is its own OAuth 2.1 authorization server, with its own issuer and its own signing key.

Endpoints are published when the service opens

The paths below are what each server answers on. The host names follow when the service opens; until then, ask us for early access.

Ask for early access

Business server

For your team's assistant

Assistant Access Live

A signed-in staff member gets the tools their role allows. The token is short-lived and bound to this server, and the person's seat is checked again on every call.

Host
Published when the service opens
MCP endpoint
/mcp
Resource metadata · RFC 9728
/.well-known/oauth-protected-resource
Authorization server metadata · RFC 8414
/.well-known/oauth-authorization-server

Scopes

concierge.read
Read the inbox, escalations, stays, FAQ, analytics and reports
concierge.write
Internal changes: FAQ entries, escalations, stays and drafts
concierge.send
Messages that reach guests on WhatsApp
concierge.admin
The group console and platform operations

Guest server

For your guests' assistants

Guest Assistant On request

The public endpoint needs no sign-in: a listed property's profile, public contacts and FAQ. The personal endpoint adds a guest's own stays and messages, after they verify their WhatsApp number.

Host
Published when the service opens
Public endpoint · no sign-in
/mcp
Personal endpoint · after WhatsApp verification
/mcp/me
Resource metadata · RFC 9728
/.well-known/oauth-protected-resource

Scopes

guest.read
The guest's own stays, conversations and the property's FAQ
guest.message
Message the hotel and raise a request as the guest
guest.data
Consent, display name, connections and data requests

Sign-in and safety

How does an assistant sign in?

Staff sign in with their normal Concierge login, and guests prove their WhatsApp number on Concierge's own pages, never inside the assistant. Every call checks the person's seat, the property and the scope again.

  • OAuth 2.1 with PKCE

    The authorization code flow with PKCE (S256) is required, for public clients only. Refresh tokens rotate on every use, and a replayed one revokes the whole chain.

  • Published metadata

    RFC 9728 resource metadata and RFC 8414 server metadata tell a client where to sign in after a 401. Clients register with a metadata document or dynamically.

  • A hint on every tool

    Every tool says whether it only reads and whether it is destructive, and tools/list shows only what the person's seat and the token's scopes allow.

  • One token, one server

    Access tokens are ES256-signed, last sixty minutes and name the server that issued them, so a business token is refused by the guest server.

Every guest-visible or destructive write stops for the person's confirmation

A client on the 2026-07-28 protocol revision shows Concierge's summary as a form inside the assistant. Any other client gets a link to a Concierge confirm page, and calls the tool again once the person has approved.

  1. The assistant asks

    It calls a write tool such as conversation_reply. Nothing has happened yet.

  2. Concierge writes the summary

    The server, not the assistant, states what will happen. The person approves it or declines.

  3. It runs once, and is recorded

    The approval is single-use, bound to the person, the tool and its arguments, and lapses after five minutes. The audit trail names the person and the assistant.

Connect

Add Concierge to your assistant

Assistants that support MCP connect the same way, such as Anthropic's Claude, OpenAI's ChatGPT and Microsoft Copilot. Your group admin decides which ones your staff may connect; guests choose their own.

  1. Add the server URL

    Paste the business or the guest endpoint where your assistant adds a custom connector or MCP server.

  2. Sign in when it asks

    The first call answers 401 with the metadata address. Staff use their Concierge login; guests verify their WhatsApp number.

  3. Allow the connection

    You allow it once, for one property. For staff, the assistant must be on the list your group admin allowed, which starts empty.

mcp.json Example client configuration
{
  "mcpServers": {
    "concierge": {
      "type": "http",
      "url": "https://<business-host>/mcp"
    },
    "concierge-guest": {
      "type": "http",
      "url": "https://<guest-host>/mcp/me"
    }
  }
}

The two host names are sent with early access.

The first call, before sign-in

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="mcp",
  resource_metadata="…/.well-known/oauth-protected-resource"

Tools

What can an assistant do?

A selection from both servers. The list an assistant sees is per person and per connection: a tool the person's seat could never open is left out, and so is a write the token has no scope for.

  • inbox_list Read-only

    The inbox, paged and filtered, with phone numbers masked.

    Server
    Business
    Scope
    concierge.read
    Confirms
    No confirmation
  • conversation_get Read-only

    One thread with its messages, the guest's name and the linked stay.

    Server
    Business
    Scope
    concierge.read
    Confirms
    No confirmation
  • broadcast_preview Read-only

    A dry run of a campaign: who it reaches and who is skipped. Sends nothing.

    Server
    Business
    Scope
    concierge.read
    Confirms
    No confirmation
  • faq_create Write

    Adds one language version of a FAQ question. Takes effect at once.

    Server
    Business
    Scope
    concierge.write
    Confirms
    No confirmation
  • conversation_reply Destructive

    Queues a staff reply on WhatsApp after the person confirms the exact text.

    Server
    Business
    Scope
    concierge.send
    Confirms
    Confirms
  • stay_checkout Destructive

    Checks a stay out: the stay QR code stops working and the conversation closes.

    Server
    Business
    Scope
    concierge.write
    Confirms
    Confirms
  • broadcast_send Destructive

    Queues a campaign after the person confirms how many guests it reaches and how many are skipped.

    Server
    Business
    Scope
    concierge.send
    Confirms
    Confirms
  • search_faq Read-only

    Ranked answers from a listed property's live FAQ for a guest's question.

    Server
    Guest · public
    Scope
    No sign-in
    Confirms
    No confirmation
  • get_property Read-only

    A listed property's public profile. Never its WhatsApp number.

    Server
    Guest · public
    Scope
    No sign-in
    Confirms
    No confirmation
  • my_stays Read-only

    The guest's own stays. Never a check-in code or a stay QR link.

    Server
    Guest · personal
    Scope
    guest.read
    Confirms
    No confirmation
  • message_hotel Write

    Posts the guest's message into their thread; the answer from the FAQ comes back to the assistant.

    Server
    Guest · personal
    Scope
    guest.message
    Confirms
    Confirms
  • request_data_deletion Destructive

    Asks the hotel group to delete the guest's records, due within thirty days.

    Server
    Guest · personal
    Scope
    guest.data
    Confirms
    Confirms

Your assistant's tools/list returns the full list for the person who signed in.

Refusals are tool errors

A refusal comes back as a tool error whose text starts with a machine-readable code, so the assistant can say what went wrong. An unknown property and one you cannot reach both answer not_found.

  • unauthorized
  • no_property
  • not_found
  • forbidden
  • module_not_entitled
  • invalid_argument
  • insufficient_scope
  • conflict
  • unavailable
  • confirmation_required
  • declined
  • expired
  • not_approved

What an assistant never gets

  • A guest's full phone number: it is masked in every result and export.
  • A property's WhatsApp number, account or routing.
  • Check-in codes or stay QR links.
  • A password: no tool takes one as an argument.
  • Guest-written text as instructions: every result marks it as data.

Documentation

Read the details

The servers describe themselves in their published metadata, and this site publishes a plain-text summary for AI assistants and answer engines.

  • llms.txt

    A plain-text summary of Concierge for AI assistants and answer engines, with a link to the full site copy.

  • Server metadata

    Each server publishes RFC 9728 resource metadata and RFC 8414 authorization server metadata: the resource, the scopes and where the keys are.

    Published when the service opens

  • Security and privacy

    Hosting in the EU, one hotel's data kept apart from another's, masking, consent, the audit trail and where our controls stop.

  • Report a vulnerability

    Our security contact, machine-readable under RFC 9116. Please tell us privately before you publish anything.

Book a demo or ask us anything

Tell us about your property and we will show Concierge on your own questions. We reply within one business day.