Connect an MCP Client to DeskDay
Set up the DeskDay Model Context Protocol (MCP) server in Claude, ChatGPT, Grok, Cursor, VS Code, Antigravity, and any other MCP-compatible client
The DeskDay Public MCP server lets any Model Context Protocol client — Claude, ChatGPT, Grok, Cursor, VS Code, Antigravity, and more — act on your DeskDay tenant in natural language. Ask it to "list open critical tickets for Acme" or "log 30 minutes against ticket X" and the client calls DeskDay tools on your behalf, scoped to your MSP.
This guide is the same for everyone: point your client at one URL and sign in through your browser. There are no API keys to copy, paste, or rotate — the server mints and manages a short-lived key for you behind an OAuth flow.
The one URL you needhttps://mcp.deskday.ai/mcpEvery client below uses this same endpoint. Authentication happens in your browser the first time you connect.
Before you start
- A DeskDay account. You sign in with the same credentials you use for the DeskDay admin portal. The MCP grants exactly what your tenant's tools allow — everything stays scoped to your
MSP/Organistion Account, and you can never see or touch another tenant's data. - A client that supports remote MCP servers over OAuth. All the clients in this guide do. For stdio-only clients, see Any other client for the bridge option.
- A browser. The first connection opens a DeskDay/Logto sign-in page. Approve it once and the client stays connected until the grant expires.
Claude (Web)
Custom connectors on claude.ai require a Pro, Max, Team, or Enterprise plan.
- Open claude.ai and go to Settings → Connectors.
- Click Add custom connector.
- Fill in:
- Name:
DeskDay - Remote MCP server URL:
https://mcp.deskday.ai/mcp
- Name:
- Click Add, then Connect. A browser window opens for DeskDay sign-in.
- Approve the requested scopes. Claude shows the connector as Connected.
- In any chat, open the tools/attachments menu and enable DeskDay to let Claude call its tools.
Verify the connectionAsk Claude: "Use DeskDay to ping the server." The
deskday_pingtool returns your MSP id and confirms connectivity without touching any data.
Claude (Desktop)
Claude Desktop (macOS/Windows) supports remote connectors natively.
- Open Claude Desktop → Settings → Connectors (or Extensions → Advanced on some builds).
- Click Add custom connector.
- Enter the URL
https://mcp.deskday.ai/mcpand a name likeDeskDay. - Save. Claude opens your browser to complete DeskDay sign-in, then shows Connected.
Fallback: config-file setup via mcp-remote
If your Claude Desktop build predates native remote connectors, bridge the HTTP+OAuth server through mcp-remote. Edit claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"deskday": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.deskday.ai/mcp"]
}
}
}Restart Claude Desktop. mcp-remote opens the browser OAuth flow on a localhost callback (allowlisted) and caches the grant locally.
ChatGPT (Web)
Custom connectors require ChatGPT Plus, Pro, Business, or Enterprise, and may need Developer mode enabled.
- In chatgpt.com, go to Settings → Connectors (Business/Enterprise: Settings → Connectors; admins may need to allow custom connectors first).
- If present, toggle on Developer mode (under Settings → Connectors → Advanced).
- Click Create / Add custom connector and enter:
- Name:
DeskDay - MCP Server URL:
https://mcp.deskday.ai/mcp - Authentication: OAuth (selected automatically via discovery)
- Name:
- Click Create, then Connect and complete DeskDay sign-in in the browser.
- Start a chat, open the + / Tools menu, and enable DeskDay.
Rich cards in ChatGPTThe DeskDay server ships Apps SDK widgets. When ChatGPT calls the ticket-list, ticket-detail, or invoice-detail tools, results render as interactive cards instead of raw JSON. Other clients receive the same data as text.
ChatGPT (Desktop)
The ChatGPT desktop app shares connector settings with the web app.
- Sign in to the ChatGPT desktop app with the same account.
- Open Settings → Connectors and confirm DeskDay is listed (connectors added on the web appear here, and vice-versa).
- If it isn't there, add it exactly as in ChatGPT (Web) — the desktop app opens the same browser OAuth flow.
- Enable DeskDay from the tools menu in a conversation.
Grok
Grok (grok.com / the xAI apps) supports remote MCP connectors. Support is best-effort — the grok.com and x.ai redirect hosts are allowlisted, but Grok's connector UI changes frequently.
- Open grok.com → Settings → Connectors (or Integrations / MCP, depending on build).
- Choose Add custom / remote MCP server.
- Enter:
- Name:
DeskDay - Server URL:
https://mcp.deskday.ai/mcp
- Name:
- Save and Connect; complete DeskDay sign-in in the browser.
- Enable the connector in your conversation's tools menu.
If sign-in failsIf the browser callback returns
access_deniedorinvalid redirect, Grok used a redirect host that isn't allowlisted yet. Note the exact callback URL from the error and contact DeskDay support.
Cursor
Cursor reads MCP servers from a JSON config. Use ~/.cursor/mcp.json for all projects, or .cursor/mcp.json inside a project.
{
"mcpServers": {
"deskday": {
"url": "https://mcp.deskday.ai/mcp"
}
}
}- Create or edit the file above.
- Open Cursor → Settings → MCP (or Cursor Settings → Tools & Integrations). The
deskdayserver appears. - Click Connect / Login. Cursor opens the browser for DeskDay sign-in (Cursor's
anysphere.cursor-mcpandcursor.comredirect hosts are allowlisted). - Once the indicator turns green, the DeskDay tools are available to the Agent.
One-click installYou can also add the server from Settings → MCP → Add new MCP server and paste the URL directly instead of editing the file.
VS Code
VS Code (with GitHub Copilot / Agent mode) supports MCP servers via .vscode/mcp.json in your workspace, or globally through the command palette.
{
"servers": {
"deskday": {
"type": "http",
"url": "https://mcp.deskday.ai/mcp"
}
}
}- Create
.vscode/mcp.jsonwith the config above. - VS Code shows a Start / Trust prompt on the server — accept it.
- A browser window opens for DeskDay sign-in (VS Code uses a
localhostloopback callback, which is allowlisted). - Open the Chat view, switch to Agent mode, and open the Tools picker to enable the DeskDay tools.
AlternativeRun MCP: Add Server… from the Command Palette (
Ctrl/Cmd+Shift+P), choose HTTP, and pastehttps://mcp.deskday.ai/mcp. VS Code writes the config for you.
Antigravity
Google's Antigravity agentic IDE supports MCP servers through its MCP configuration. Support is best-effort — the gemini.google.com redirect host is allowlisted.
-
Open Antigravity → Settings → MCP / Tools (or the MCP servers panel).
-
Choose Add MCP server and select the HTTP / remote option.
-
Provide:
- Name:
DeskDay - URL:
https://mcp.deskday.ai/mcp
- Name:
-
If Antigravity uses a JSON config file instead of a form, add:
{ "mcpServers": { "deskday": { "type": "http", "url": "https://mcp.deskday.ai/mcp" } } } -
Save, then Connect and complete DeskDay sign-in in the browser.
Loopback fallbackIf Antigravity's browser callback isn't accepted, configure it to use a loopback (
localhost/127.0.0.1) redirect if the option exists, or bridge throughmcp-remoteas shown in Any other client. Loopback callbacks are always allowlisted.
Any other client (generic setup)
Any MCP client that supports remote HTTP servers with OAuth connects with the same details:
| Field | Value |
|---|---|
| Transport / type | http (Streamable HTTP) |
| URL | https://mcp.deskday.ai/mcp |
| Authentication | OAuth 2.1 (discovered automatically) |
| Client registration | Automatic (Dynamic Client Registration) |
| Token / API key | Leave blank — minted server-side after sign-in |
Most clients accept one of these two config shapes:
{
"mcpServers": {
"deskday": {
"url": "https://mcp.deskday.ai/mcp"
}
}
}{
"servers": {
"deskday": {
"type": "http",
"url": "https://mcp.deskday.ai/mcp"
}
}
}stdio-only clients
If your client only speaks stdio (local command/args) and can't reach a remote HTTP server, bridge it with mcp-remote, which runs a local stdio↔HTTP proxy and handles the OAuth flow on an allowlisted localhost callback:
{
"mcpServers": {
"deskday": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.deskday.ai/mcp"]
}
}
}Requires Node.js 18+ on the machine running the client.
How authentication works
You never handle a secret directly. Here's what happens on first connect:
- Your client requests
https://mcp.deskday.ai/mcpand receives a401with aWWW-Authenticatechallenge pointing at the server's Protected Resource Metadata. - The client discovers the authorization server, dynamically registers itself (no manual app creation), and starts an Authorization Code + PKCE flow.
- Your browser opens the DeskDay (Logto) sign-in page. You approve the requested scopes.
- The server exchanges the code, verifies your identity, and issues a bearer token scoped to your MSP.
- Behind the scenes it mints a short-lived DeskDay API key (encrypted at rest, default 7-day lifetime) bounded to exactly the scopes the MCP tools need — so a compromised session can never exceed what the tools can do, and everything remains isolated to your
msp_id.
Re-authentication is automatic while your grant is valid; when it expires, your client prompts you to sign in again.
Available tools
Once connected, the client exposes these DeskDay tools (names are deterministic: deskday_list_* / deskday_get_* are read-only; create/update/close/apply/record/upload/delete modify data):
| Area | Tools |
|---|---|
| Connectivity | deskday_ping |
| Tickets | deskday_list_tickets, deskday_get_ticket, deskday_create_ticket, deskday_update_ticket, deskday_close_ticket, deskday_apply_ticket_sla, deskday_list_ticket_attachments |
| Customers | deskday_list_customers, deskday_get_customer, deskday_list_customer_sites, deskday_create_customer, deskday_update_customer |
| Users | deskday_list_users, deskday_get_user, deskday_create_user, deskday_update_user |
| Time entries | deskday_list_time_entries, deskday_get_time_entry, deskday_create_time_entry, deskday_update_time_entry |
| Billing | deskday_list_invoices, deskday_get_invoice, deskday_get_billing_statistics, deskday_update_invoice_status, deskday_record_invoice_payment |
| SLA | deskday_get_sla_statistics, deskday_get_ticket_sla_status, deskday_get_bulk_sla_status |
| Attachments | deskday_upload_attachment, deskday_get_attachment |
| Webhooks | deskday_create_webhook, deskday_list_webhooks, deskday_get_webhook, deskday_update_webhook, deskday_delete_webhook |
| Reference data | deskday_list_reference (boards, ticket statuses, work types/roles, ticket types/sub-types, tags, MSP locations, countries, states, team members) |
Resolve ids firstWhen creating or filtering tickets, ask the client to call
deskday_list_referencefirst to get the rightboard_id, status, or type ids. The server's own instructions nudge well-behaved clients to do this automatically.
Troubleshooting
| Symptom | Likely cause & fix |
|---|---|
Browser callback fails with access_denied or invalid redirect | The client's redirect host isn't allowlisted. Loopback + Claude/ChatGPT/Cursor always work; Grok and Antigravity are best-effort. Note the exact callback URL and contact support. |
| Client shows connected but no tools appear | Enable the DeskDay server in the client's tools/agent picker for the conversation. |
401 Unauthorized after working fine | Your grant expired — reconnect/sign in again. |
429 Too Many Requests | You hit the MCP rate limit (600/min per account, 300/min per user). Respect the Retry-After header and slow down. |
| Empty results when you expected data | The tool is tenant-scoped to your MSP. Confirm you signed in with the correct DeskDay account. |
| stdio-only client can't connect | Use the mcp-remote bridge. |
Compatibility & specification
Use this table to confirm a client can connect and to fill in any advanced configuration fields it asks for.
| Property | Value |
|---|---|
| Server name | deskday-public-mcp |
| Endpoint URL | https://mcp.deskday.ai/mcp |
| Transport | Streamable HTTP (MCP StreamableHTTP) — stateless, no session pinning |
| Legacy transport | Not supported (no SSE-only endpoint; use a bridge for stdio-only clients) |
| Manual tokens/keys | Not required and not supported — keys are minted server-side |
| Rate limits (MCP ingress) | 600 requests/min per MSP account · 300 requests/min per user, (429 with Retry-After when exceeded) |
Redirect-host allowlistAs an anti-phishing control, the server only completes OAuth for clients whose redirect URI resolves to an allowlisted host. Fully supported: Claude (
claude.ai), ChatGPT (chatgpt.com), Cursor, and any client using a loopback redirect (localhost/127.0.0.1). Best-effort: Grok (grok.com,x.ai) and Gemini/Antigravity (gemini.google.com). If a client's browser callback fails with aninvalid redirectoraccess_deniederror, its redirect host is not yet allowlisted — contact DeskDay support with the client name.
Still stuck? Reach out to DeskDay support with your client name, the exact error text, and the failing callback URL (if any). Do not share bearer tokens or minted keys — support never needs them.
Updated about 1 month ago
