1. MCP server
Public API
  • Welcome to the deskbird developer docs
  • Public API
    • Overview
    • Users
      • Lists company users
      • Retrieves a single company user
    • Bookings
      • Lists company bookings
      • Creates a new resource booking
      • Gets a single company booking
      • Updates an existing booking
      • Cancels a booking
      • Checks in to a booking
      • Releases a booking early
    • Groups
      • Lists company user groups
      • Retrieves a single company user group
    • Resources
      • Gets a resource by ID
      • Lists company resources
    • Offices
      • Lists company offices
      • Checks a user into an office
    • Scheduling
      • Lists company scheduling statuses
      • Deletes scheduling statuses by IDs
      • Adds new scheduling statuses for a user
    • Scheduling Options
      • Lists company scheduling options
    • Rooms
      • Lists company rooms
      • Gets a single room
      • Lists room bookings
      • Creates a room booking
      • Gets a single room booking
      • Updates a room booking
      • Checks in to a room booking
      • Cancels a room booking
      • Lists company room bookings
    • Floors
      • Lists company floors
    • Zones
      • Lists company zones
    • Tickets
      • Updates a ticket
    • Sensors
      • Lists company monitors
  • MCP server
    • Overview
    • Authentication
    • Tools reference
  • Schemas
    • Provider
    • UserStatus
    • UserIncludeOptions
    • BookingStatus
    • GuestEmbeddedResponse
    • UserEmbeddedResponse
    • ResourceEmbeddedResponse
    • BookingHistoryResponse
    • BookingResponse
    • PaginatedBookingResponse
    • CreateBookingGuestDto
    • CreateBookingDto
    • UpdateBookingDto
    • CheckInDto
    • AddressResponse
    • OpeningHourResponse
    • OpeningHoursResponse
    • OfficeResponse
    • EnvelopedOfficeResponse
    • CheckUserIntoOfficeBody
    • SharedResourceAccessInfoResponse
    • DedicatedResourceAccessInfoResponse
    • EquipmentResponse
    • ResourceResponse
    • ResourceType
    • PaginatedResourceResponse
    • SchedulingOutput
    • UserStatusInput
    • AddUserStatusesInput
    • SchedulingOptionOutput
    • AttendeeResponse
    • RoomBookingResponse
    • PaginatedRoomBookingResponse
    • RoomBookingDetailedResponse
    • AttendeeDto
    • RoomResponse
    • PaginatedRoomResponse
    • CreateRoomBookingDto
    • UpdateRoomBookingDto
    • FloorResponse
    • PaginatedFloorResponse
    • AssignedGroupResponse
    • ZoneResponse
    • PaginatedZoneResponse
    • UpdateTicketDto
    • MonitorState
    • MonitorOfficeResponse
    • MonitorFloorResponse
    • MonitorAreaResponse
    • MonitorDeskResponse
    • MonitorMappingResponse
    • MonitorResponse
    • PaginatedMonitorResponse
  1. MCP server

Authentication

The deskbird MCP server uses OAuth 2.1 with the authorization code flow and PKCE. Users authenticate with their own deskbird account, and every connection requires explicit consent on a deskbird-hosted screen. API keys are not accepted on the MCP endpoint.
Most users never see any of this: connecting from Claude handles the whole flow automatically. This page is a reference for what happens underneath.

Flow summary#

1.
The MCP client calls POST /mcp without a token and receives 401 Unauthorized with a WWW-Authenticate header pointing to the resource metadata.
2.
The client discovers the authorization server through the well-known documents below.
3.
The client starts an authorization code flow with PKCE (S256). The user logs in to deskbird and approves the consent screen.
4.
The client exchanges the code for tokens at the token endpoint and calls POST /mcp with the access token as a Bearer header.

Discovery#

DocumentURL
Protected resource metadata (RFC 9728)https://connect.deskbird.com/.well-known/oauth-protected-resource
Authorization server metadata (RFC 8414)https://connect.deskbird.com/.well-known/oauth-authorization-server

Client registration#

The server does not offer dynamic client registration (DCR). Every client must identify itself with a Client ID Metadata Document (CIMD): the client_id is an HTTPS URL pointing to a JSON document that describes the client, which deskbird fetches and validates. CIMD support is the requirement to connect – a client that cannot present a CIMD is not able to authenticate, regardless of anything else.
Redirect URIs are restricted to an allowlist:
the hosted Claude callback https://claude.ai/api/mcp/auth_callback, and
standards-compliant localhost loopback redirects (RFC 8252), used by native desktop clients.

Supported clients#

Claude (web, desktop, mobile, and Claude Code) – supported.
Other native clients that support CIMD – supported. For example, the ChatGPT Codex desktop app uses a loopback redirect and presents a CIMD, so it connects.
Clients without CIMD support – not supported yet. For example, Codex on the web does not present a CIMD, so it cannot connect even though it is otherwise a valid OAuth client.
If you are building an MCP client and want to integrate with deskbird, contact us. The main requirement is CIMD support.

Scope and tokens#

Scopemcp (the only scope)
Access tokenSigned JWT, valid for 1 hour
Refresh tokenOpaque, single use, rotated on every refresh
Session lifetime30 days per refresh token, 90 days absolute per connection
Refresh tokens rotate: each refresh invalidates the old token and returns a new one. Reusing an already-rotated refresh token is treated as theft and revokes the whole session chain. After the 90-day absolute lifetime, the user reconnects and consents again.
Every refresh also re-checks that the user is still active, still an admin, and still in the same company.

Requirements re-checked on every request#

A valid token alone is not enough. On each POST /mcp call the server verifies:
the token signature, audience, issuer, and expiry
the mcp scope and the admin role
that the company still has the MCP server feature
If any check fails, the request returns 401 (invalid token) or 403 (feature or role no longer available).

Disconnecting#

Removing the connector in Claude stops its access. Tokens also expire on their own as described above.
Previous
Overview
Next
Tools reference
Built with