Tamora — User Guide

Connect Claude via MCP (Beta)

Let Claude create rooms and schedules in your account by signing in and approving access — no token to copy.

Tamora runs a small MCP server so a chat assistant can create rooms and build schedules on your behalf. You connect it by signing in to Tamora and approving the access once, in your browser — there is no token to generate, copy, or paste anywhere.

This is a beta feature. The sign-in flow underneath it is built on Supabase's OAuth 2.1 server, which is itself in beta, so the connection process may change. The two tools it exposes are unchanged and stable.

What this does, and does not, replace

MCP gives an assistant exactly two abilities:

  • Create a room (rooms.create)
  • Add a running order of timers to a room it just created, or any room you own (schedules.create)

Nothing else. An assistant connected this way cannot read, edit, delete, or reorder anything, cannot see your other rooms, and cannot touch account or billing settings. Those two abilities are exactly what you approve on the consent screen, in plain language, before the connection is made.

Which assistants this works with today

Claude on the web and in the desktop app supports this now. Add Tamora as a custom connector, and Claude walks you through signing in and approving access.

Claude Code does not work yet. It connects from a local loopback address on a port that changes each time, and our authorisation server matches redirect addresses exactly, so it is turned away before you ever see a sign-in page. This is a known limitation, not a misconfiguration you can work around at your end.

ChatGPT is not confirmed working yet. Its connector platform asks the authorisation server to stamp each token with the specific service it is for, and ours does not do that today. Whether ChatGPT accepts the connection anyway has not been verified against a real account, so this page does not claim it works.

Connecting Claude

  1. In Claude, open the connector settings for adding a custom remote MCP server.
  2. Set the server URL to your Tamora domain followed by /api/mcp — for example https://tamora.io/api/mcp.
  3. Save the connector, then click Connect. Claude opens a Tamora page in your browser.
  4. Sign in to Tamora if you are not already signed in.
  5. Read the consent screen. It names the app asking for access, shows the two abilities it is requesting, and shows which Tamora account you are about to connect. If any of that is not what you expect, click Decline.
  6. Click Approve. Claude finishes connecting on its own.

Claude's connector UI has changed shape before and may again — if a step here doesn't match what you see, look for wherever Claude lets you add a remote MCP server by URL.

Once connected, ask Claude to create a room or build a schedule in plain English — see the worked example below.

If you already connected using a token

Earlier versions of this page told you to paste an Agent access token into the connector's authorization header field. Those connectors will not upgrade themselves. Delete the existing connector in Claude and add it again following the steps above; the sign-in flow only starts from a connector that has no credential configured. See Agent access for the retirement timetable for those tokens.

Managing and disconnecting

Everything you have connected appears under Connected apps in account settings, at /settings/connected-apps. Each entry shows the app's name, what it may do, when you connected it, and when it was last used.

Disconnect takes effect on the very next request that app makes — it does not wait for a token to expire. Reconnecting afterwards is the same flow as connecting the first time.

Two things worth knowing:

  • You may see more than one entry for the same assistant. Claude registers itself afresh each time you set up a connection, so reconnecting can leave an older entry behind. Tell them apart by their connected and last-used dates. Nothing is merged or removed automatically, because removing the wrong one is worse than showing two.
  • Disconnecting from Claude's side does not tell us. If you delete the connector in Claude without disconnecting here, the entry stays in the list. It simply stops being used — which is why the list shows "last used" rather than claiming an entry is active.

A worked example

One message can create a room and populate it in a single turn. Claude calls rooms.create first, then schedules.create with the room id it gets back:

Create a new Tamora room called "Product All-Hands" in the Europe/London
timezone. Then add this running order to it:
1. Welcome & intro — 5 min (speaker: Alex)
2. Q3 roadmap — 15 min (speaker: Priya)
3. Open Q&A — 10 min
4. Wrap-up — 5 min

Claude replies with the new room's id and a summary of the timers it created. From there, open the room in the Controller exactly as you would one you created by hand — the MCP tools do not add a new place to view or run the show.

Claude can only act on a room it just created in that same conversation, or one whose id you give it directly — it has no way to look up a room by name (see "What this does, and does not, replace" above). A prompt like "add a timer to my Monday Standup room" only works if that room's id is already earlier in the conversation.

What the two tools do

Both tools require the matching ability to have been approved on the consent screen, and both act only on your own account — a tool call can never be pointed at a room you do not own by supplying a different id.

rooms.create

InputType
titletext
timezonean IANA name, e.g. Europe/London

Returns the new room's id, title, timezone, and creation time. Requires the "Create rooms" approval.

schedules.create

InputType
roomIdthe room id from rooms.create
itemsa list of timers to create
each item's titletext, optional — defaults to an empty title
each item's duration_secseconds, optional — defaults to 300, clamped 1 to 86400
each item's speaker/notestext, optional

Returns the timers that were created, including each one's id, title, and duration. The same 500-item cap as CSV import applies. Requires the "Add a running order to a room" approval.

Both tools accept an optional idempotencyKey: if Claude retries a call after a dropped response, passing the same key returns the original result instead of creating a duplicate room or schedule.

Troubleshooting

You seeWhat it means
Claude asks you to sign in againThe connection was disconnected, or Claude's access lapsed. Approve it again; nothing is lost.
"Authentication failed"The connection does not cover the ability this tool needs. Disconnect it under Connected apps and connect again to approve the current set.
"Not authorized"The room id does not exist, or you do not belong to it — these are intentionally indistinguishable, so a connection can't be used to probe which rooms exist.
"Upgrade required"The account is on the free tier and already has a room — the same limit the dashboard enforces. Connecting is free on every plan; the limits still apply.
"Rate limited"Too many calls in a short window. Wait and try again.
"Invalid request"A required field was missing or malformed — check the tables above.

If Claude cannot connect at all, check the server URL ends in /api/mcp, and that the connector has no authorization header configured — a leftover header from the token era stops the sign-in flow from starting.

Staying safe

There is no secret to leak here, which removes the biggest risk the old token flow carried. What replaces it is a decision you make on the consent screen, so it is worth a moment:

  • Check the app name and where it sends access. Any developer can register a connector and call it anything, including "Claude". The consent screen shows where your access will actually be sent, and flags anything it does not recognise. Only continue if you started the connection yourself, from the app it names.
  • Check which account you are approving. The consent screen shows the signed-in email. If it is the wrong one, switch accounts before approving.
  • Only approve connections you started. If a consent screen appears and you did not just click Connect somewhere, decline it.
  • Agent access — the token system this replaces, and when it stops working
  • CSV import — the row cap and duration clamp schedules.create shares with CSV import
  • Controller — where a room or schedule created this way appears, exactly like one created by hand