For the technically minded
Connect your AI assistant
Doris has a remote MCP server: a secure connection that lets the AI assistant you already use - Claude, ChatGPT, and anything else that speaks MCP - read your organization's bookings, rooms, availability, analytics and billing statements, with your permission. Ask for your grant report, your month-end invoicing run, or whether the Blue Room is free on Wednesday, from wherever you already are.
Doris is so simple you don't need an AI to use it. But your AI can use Doris.
How to connect
In your assistant, add Doris as a connector and give it this URL:
https://api.bookwithdoris.com/mcpIn Claude, go to Settings, then Connectors, choose Add custom connector, and paste the URL. Registration is automatic: Claude fetches everything it needs from the URL, then sends you through a Doris sign-in and consent step in your browser. You sign in with your normal Doris account, pick which organization to connect (if you belong to more than one), review exactly what it will be able to do, and approve. That's it - no keys to copy, nothing to install.
The connection is pinned to the organization you approved. It never follows you across organizations; connecting a second organization is a second connector.
ChatGPT and other MCP clients follow the same shape: add a remote MCP server (sometimes called a custom connector), paste the same URL, and complete the sign-in when prompted. Doris is built to the open MCP standard, not to any one assistant.
Who can connect, and what the assistant sees
Only owners and admins can connect an assistant. The assistant acts as the person who connected it: every tool call re-checks that person's current role at the moment of the call, so an admin who leaves or steps down loses assistant access at the same instant they lose app access.
Reading is the default; the only write permission is drafting (shown as its own line on the consent screen), and everything drafted stays inert until a human approves it inside Doris - the assistant cannot send a statement, mark one paid, or touch a booking. Every connected assistant is listed in Settings under Connected assistants, where any admin can revoke it with one click.
The tools
Eight read-only tools, deliberately few and rich. The assistant composes them: a trustee report is get_analytics plus list_bookings narrated into prose; month-end invoicing is list_statements plus get_statement pushed into your accounts package through that package's own connector.
get_org_overviewThe organization at a glance: name, booking style, operating hours, booking horizon, room count and the caller's role. The orientation call an assistant makes first.
list_roomsRooms with capacity, facility tags and pricing.
check_availabilityFree and busy times for a date, across the organization or for one room, shaped to your booking style.
list_bookingsBookings in a date range, filterable by room and status, with references (DOR-XXXXXX) and prices.
get_bookingOne booking in full detail, by id or its DOR-XXXXXX reference.
get_analyticsComputed analytics for a period: room utilization, revenue per room, booking trends and a per-member summary. The trustee-report and what-if tool.
list_statementsBilling statements for a period: DOR-INV-XXXXXX references, member, amount and status. Requires the billing-reports add-on.
get_statementOne statement with its line items, priced from the frozen snapshots taken at generation - the numbers cannot drift under your accounts package's feet. Requires the billing-reports add-on.
Amounts are in pence throughout. The assistant knows this from the tool descriptions and will narrate pounds.
The write tools: prepare, never publish
Two tools can write - and both follow one rule: the assistant prepares, a human publishes. They appear only when the connection was approved with the drafting permission (its own plainly-worded line on the consent screen); read-only connections never see them.
generate_statementsGenerate draft billing statements for an elapsed period - the same drafts an admin creates in the Invoicing screen. Drafts are invisible to members until a human sends them; re-runs are safe because already-invoiced bookings are skipped. Requires the billing-reports add-on.
suggest_paymentsSuggest that statements have been paid, in a batch - reference, method, and the date the money arrived. This never marks anything paid: the Invoicing screen shows the suggestions to an admin, who confirms each (or all) with one tap, or dismisses them. Statements already paid or void are rejected entry by entry.
This closes the invoicing loop end to end: a scheduled routine generates the month's statements as drafts, you review and send them in Doris, payments arrive in the bank, the assistant reconciles them against your accounts package and suggests which statements are settled, and you confirm. Every state change that matters passes through a human tap in Doris - there is no confirm-by-chat, and no assistant that can approve its own work.
Member privacy
Assistants connected by an admin see what admins see, with one exception: member email addresses are hidden by default. Names are always visible (an admin sees them in the app anyway); emails are the gated field, because they are what an automation would use to contact people.
If a workflow genuinely needs emails - matching members to contacts in QuickBooks or Xero is the usual reason - an admin can enable them in Settings, in the Connected assistants card. The setting is organization-wide and off until someone turns it on. Phone numbers are never available: Doris does not collect them.
Scheduled routines: review, not send
Assistant platforms can run connectors on a schedule (Claude's scheduled tasks, for example). A Monday-morning routine that pulls last week's statements and drafts matching invoices in your accounts package is exactly what this connection is for. A few rules keep it safe:
- End every routine in a draft plus a summary message, never in a send. Draft invoices, draft emails, a spreadsheet to look over.
- Put the Doris reference (DOR-INV-XXXXXX) in the destination record's memo field. Re-runs then skip what already exists, and "which statements have no matching invoice?" becomes a question the assistant can answer.
- With the drafting permission, the routine can generate the statements itself - as drafts. Sending them stays yours, in Doris.
The human taps approve as the final step. That is the whole design.
Limits and logging
Each connection is limited to 60 tool calls per minute - generous for any real conversation, hostile to bulk extraction. Past the limit the assistant gets a clear try-again-later answer and will generally pace itself.
Every tool call is logged: which connection, which tool, when, and how many rows came back. Doris keeps the log for 30 days.
Bespoke tools (advanced)
Assistants like Claude and ChatGPT register themselves automatically - you never handle credentials. For a bespoke integration (a script, an internal tool) that cannot self-register, an admin can create a client connection in Settings, in the Connected assistants card, and receive OAuth client credentials to configure the tool with.
You will be asked for a redirect URL when creating one - it comes from the tool you are connecting (its OAuth callback), not from Doris. The secret is shown once at creation; store it like a password.
A note on trust
An AI assistant does what its context tells it to, and everything it reads becomes context. Doris's read-only design means a misled assistant cannot change or delete anything here, but it could still act oddly in other tools you have connected in the same conversation. Keep a human on the last step of any routine that spans systems, and be deliberate about which connectors you combine in automated runs.