Overview
Hosted HTTP
POST https://rheba.io/mcp with JSON-RPC 2.0. One round-trip per call. Best for hosted LLM platforms (Claude.ai, ChatGPT plugins, custom apps).
Stdio (local)
@rheba/mcp-server — runs as a subprocess of Claude Desktop, Codex, or any MCP-compatible client. Owns its own OAuth dance + DPoP keypair.
Transport
Both transports speak JSON-RPC 2.0. The HTTP endpoint accepts tools/list, tools/call, and the standard initialize handshake. Tools/list is filtered by the token's scopes — an LLM never sees a tool it isn't authorized to call.
curl -X POST https://rheba.io/mcp \
-H "Authorization: DPoP <access-token>" \
-H "DPoP: <dpop-proof-jwt>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Authentication
OAuth 2.1 with PKCE. Tokens may optionally be sender-constrained with DPoP (RFC 9449) — the stdio client does this by default. The authorization-server metadata is served at the standard well-known location:
→ /.well-known/oauth-authorization-server
→ Dashboard → Apps shows connected agents and lets users disconnect any one of them with immediate effect.
→ POST /api/v1/auth/revoke for RFC 7009 token revocation.
Scopes
The user grants scopes during authorize. The MCP layer enforces them per tool call and filters the tool list at tools/list.
availability:readRead the user's availability buckets and group mutual times.
coordinate:readRead coordination requests and group proposals.
coordinate:writeCreate proposals, respond to slots, finalize accepted slots.
events:readRead the user's calendar (creator-only at the MCP boundary).
events:writeCreate, update, delete, restore the user's events.
groups:readList the user's groups and their members (names only).
users:readSearch users in the caller's network (group-shared only).
Tool Catalog
23 tools
Below is the live catalog from the running server — sourced directly from app/mcp/tools.ts. Names, descriptions, and argument schemas update with each deploy.
rheba_bulk_clear_eventsSoft-delete the user's scheduling events in a date range. Capped at 90 days per call.
Scopes
events:writeArguments
startDatestringrequiredendDatestringrequiredrheba_check_spatial_fitPre-flight: can a candidate booking fit at the city + time given existing bookings?
Scopes
events:readArguments
datestringrequiredcityIdstringrequiredstartTimestringrequiredendTimestringrequiredbufferMinutesnumberrheba_create_eventCreate a single non-recurring scheduling event. Default duration 1 hour. Use this for one-off events. For repeating series use rheba_create_recurring_events.
Scopes
events:writeArguments
titlestringrequireddatestringrequiredISO YYYY-MM-DDstartTimestringrequiredHH:MM 24h, e.g. "14:30"endTimestringHH:MM 24h. Defaults to startTime + 1 hour.descriptionstringcityIdstringCity id; defaults to user's home citycitystringDisplay name for the citybufferMinutesnumberrheba_create_proposalCreate a group coordination proposal with 3–5 candidate slots. Initiator must be a member of the target group. Slot 0 goes out for confirmation immediately; on any decline the cycle advances to the next slot. Always propose 3+ slots — single-slot proposals leave the recipient no real choice.
Scopes
coordinate:writegroups:readArguments
groupIdstringrequiredtitlestringrequiredmessagestringproposedSlotsarrayrequiredMust propose 3-5 candidate slots so the recipient has real options to pick from.expiresInMinutesnumberrheba_create_recurring_eventsCreate a recurring scheduling or task series.
Scopes
events:writeArguments
titlestringrequiredanchorDatestringrequiredstartTimestringrequiredendTimestringrequiredhorizonMonthsnumberrequiredkindstringrequiredruleobjectrequireddescriptionstringcityIdstringrheba_delete_eventDelete a single scheduling event by id. For recurring series use rheba_delete_event_series with scope 'one' | 'following' | 'all'.
Scopes
events:writeArguments
eventIdstringrequiredrheba_delete_event_seriesDelete one occurrence, this and following, or the whole series.
Scopes
events:writeArguments
eventIdstringrequiredscopestringrequiredrheba_find_group_availabilityMutual free times across all members of a group on a date range.
Scopes
availability:readgroups:readArguments
groupIdstringrequiredstartDatestringrequiredendDatestringrheba_find_group_availability_rangeMutual free times across a group over a date range. Wider than find_group_availability (which is single-day). Use for 'when can the family meet next week?' patterns.
Scopes
availability:readgroups:readArguments
groupIdstringrequiredstartDatestringrequiredendDatestringrequiredflavorstringrheba_find_mutual_with_personWhen the user asks 'when can X and I meet?' — pass the person's first name. Returns mutual free times for the smallest group both share. Permission-gated: only finds people the user already shares at least one group with — if there's no match, the user is not connected to anyone by that name.
Scopes
availability:readgroups:readusers:readArguments
personNamestringrequiredThe other person's first name (or any substring of their name)startDatestringrequiredISO YYYY-MM-DDendDatestringISO YYYY-MM-DD (defaults to startDate)rheba_get_availabilityUser's availability buckets for a date.
Scopes
availability:readArguments
datestringrequiredrheba_get_availability_bucketsDetailed availability breakdown for a date: avail (marked available), scheduled (booked by an event), other (unmarked free gaps), and a combined times array. Optionally filter by flavor.
Scopes
availability:readArguments
datestringrequiredISO YYYY-MM-DDflavorstringrheba_get_calendarReturn events the user CREATED in a date range. Does NOT return events the user was invited to or is attending — those are app-only and not exposed via MCP for privacy. Dates are ISO YYYY-MM-DD.
Scopes
events:readArguments
startDatestringrequiredISO YYYY-MM-DDendDatestringISO YYYY-MM-DDrheba_get_day_citiesUser's own bookings on a date with cities, ordered by start.
Scopes
events:readavailability:readArguments
datestringrequiredrheba_get_deleted_eventsUser's recently soft-deleted events.
Scopes
events:readArguments
rangeDaysnumberrheba_get_proposalFull state of a coordination proposal: current slot, all proposed slots, per-member responses, and cycle history. Caller must be initiator or member.
Scopes
coordinate:readArguments
crCodestringrequiredrheba_list_group_membersMembers of a group the caller belongs to.
Scopes
groups:readArguments
groupIdstringrequiredrheba_list_groupsList the user's groups.
Scopes
groups:readrheba_list_proposalsGroup coordination proposals where the user is the initiator or an invited member. Includes status, current slot, and members' responses.
Scopes
coordinate:readrheba_respond_to_proposalConfirm or decline the current slot of a proposal. Caller must be a member of the proposal. A reason is required when declining.
Scopes
coordinate:writeArguments
crCodestringrequiredresponsestringrequiredreasonstringrheba_restore_eventsRestore soft-deleted events by id list.
Scopes
events:writeArguments
idsarrayrequiredrheba_search_usersSearch the user's network by name or email. Scoped to people who share a group with the caller — not a global directory. Use to resolve names like 'Brad' to userIds before calling availability tools.
Scopes
users:readArguments
querystringrequiredName or email substring (≥2 chars)limitnumberrheba_todayToday's date in ISO + RDate.