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 need

https://mcp.deskday.ai/mcp

Every 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.

  1. Open claude.ai and go to Settings → Connectors.
  2. Click Add custom connector.
  3. Fill in:
    • Name: DeskDay
    • Remote MCP server URL: https://mcp.deskday.ai/mcp
  4. Click Add, then Connect. A browser window opens for DeskDay sign-in.
  5. Approve the requested scopes. Claude shows the connector as Connected.
  6. In any chat, open the tools/attachments menu and enable DeskDay to let Claude call its tools.
👍

Verify the connection

Ask Claude: "Use DeskDay to ping the server." The deskday_ping tool returns your MSP id and confirms connectivity without touching any data.


Claude (Desktop)

Claude Desktop (macOS/Windows) supports remote connectors natively.

  1. Open Claude Desktop → Settings → Connectors (or Extensions → Advanced on some builds).
  2. Click Add custom connector.
  3. Enter the URL https://mcp.deskday.ai/mcp and a name like DeskDay.
  4. 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.

  1. In chatgpt.com, go to Settings → Connectors (Business/Enterprise: Settings → Connectors; admins may need to allow custom connectors first).
  2. If present, toggle on Developer mode (under Settings → Connectors → Advanced).
  3. Click Create / Add custom connector and enter:
    • Name: DeskDay
    • MCP Server URL: https://mcp.deskday.ai/mcp
    • Authentication: OAuth (selected automatically via discovery)
  4. Click Create, then Connect and complete DeskDay sign-in in the browser.
  5. Start a chat, open the + / Tools menu, and enable DeskDay.
📘

Rich cards in ChatGPT

The 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.

  1. Sign in to the ChatGPT desktop app with the same account.
  2. Open Settings → Connectors and confirm DeskDay is listed (connectors added on the web appear here, and vice-versa).
  3. If it isn't there, add it exactly as in ChatGPT (Web) — the desktop app opens the same browser OAuth flow.
  4. 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.

  1. Open grok.com → Settings → Connectors (or Integrations / MCP, depending on build).
  2. Choose Add custom / remote MCP server.
  3. Enter:
    • Name: DeskDay
    • Server URL: https://mcp.deskday.ai/mcp
  4. Save and Connect; complete DeskDay sign-in in the browser.
  5. Enable the connector in your conversation's tools menu.
⚠️

If sign-in fails

If the browser callback returns access_denied or invalid 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"
    }
  }
}
  1. Create or edit the file above.
  2. Open Cursor → Settings → MCP (or Cursor Settings → Tools & Integrations). The deskday server appears.
  3. Click Connect / Login. Cursor opens the browser for DeskDay sign-in (Cursor's anysphere.cursor-mcp and cursor.com redirect hosts are allowlisted).
  4. Once the indicator turns green, the DeskDay tools are available to the Agent.
📘

One-click install

You 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"
    }
  }
}
  1. Create .vscode/mcp.json with the config above.
  2. VS Code shows a Start / Trust prompt on the server — accept it.
  3. A browser window opens for DeskDay sign-in (VS Code uses a localhost loopback callback, which is allowlisted).
  4. Open the Chat view, switch to Agent mode, and open the Tools picker to enable the DeskDay tools.
👍

Alternative

Run MCP: Add Server… from the Command Palette (Ctrl/Cmd+Shift+P), choose HTTP, and paste https://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.

  1. Open Antigravity → Settings → MCP / Tools (or the MCP servers panel).

  2. Choose Add MCP server and select the HTTP / remote option.

  3. Provide:

    • Name: DeskDay
    • URL: https://mcp.deskday.ai/mcp
  4. If Antigravity uses a JSON config file instead of a form, add:

    {
      "mcpServers": {
        "deskday": {
          "type": "http",
          "url": "https://mcp.deskday.ai/mcp"
        }
      }
    }
  5. Save, then Connect and complete DeskDay sign-in in the browser.

⚠️

Loopback fallback

If 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 through mcp-remote as 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:

FieldValue
Transport / typehttp (Streamable HTTP)
URLhttps://mcp.deskday.ai/mcp
AuthenticationOAuth 2.1 (discovered automatically)
Client registrationAutomatic (Dynamic Client Registration)
Token / API keyLeave 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:

  1. Your client requests https://mcp.deskday.ai/mcp and receives a 401 with a WWW-Authenticate challenge pointing at the server's Protected Resource Metadata.
  2. The client discovers the authorization server, dynamically registers itself (no manual app creation), and starts an Authorization Code + PKCE flow.
  3. Your browser opens the DeskDay (Logto) sign-in page. You approve the requested scopes.
  4. The server exchanges the code, verifies your identity, and issues a bearer token scoped to your MSP.
  5. 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):

AreaTools
Connectivitydeskday_ping
Ticketsdeskday_list_tickets, deskday_get_ticket, deskday_create_ticket, deskday_update_ticket, deskday_close_ticket, deskday_apply_ticket_sla, deskday_list_ticket_attachments
Customersdeskday_list_customers, deskday_get_customer, deskday_list_customer_sites, deskday_create_customer, deskday_update_customer
Usersdeskday_list_users, deskday_get_user, deskday_create_user, deskday_update_user
Time entriesdeskday_list_time_entries, deskday_get_time_entry, deskday_create_time_entry, deskday_update_time_entry
Billingdeskday_list_invoices, deskday_get_invoice, deskday_get_billing_statistics, deskday_update_invoice_status, deskday_record_invoice_payment
SLAdeskday_get_sla_statistics, deskday_get_ticket_sla_status, deskday_get_bulk_sla_status
Attachmentsdeskday_upload_attachment, deskday_get_attachment
Webhooksdeskday_create_webhook, deskday_list_webhooks, deskday_get_webhook, deskday_update_webhook, deskday_delete_webhook
Reference datadeskday_list_reference (boards, ticket statuses, work types/roles, ticket types/sub-types, tags, MSP locations, countries, states, team members)
📘

Resolve ids first

When creating or filtering tickets, ask the client to call deskday_list_reference first to get the right board_id, status, or type ids. The server's own instructions nudge well-behaved clients to do this automatically.


Troubleshooting

SymptomLikely cause & fix
Browser callback fails with access_denied or invalid redirectThe 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 appearEnable the DeskDay server in the client's tools/agent picker for the conversation.
401 Unauthorized after working fineYour grant expired — reconnect/sign in again.
429 Too Many RequestsYou 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 dataThe tool is tenant-scoped to your MSP. Confirm you signed in with the correct DeskDay account.
stdio-only client can't connectUse 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.

PropertyValue
Server namedeskday-public-mcp
Endpoint URLhttps://mcp.deskday.ai/mcp
TransportStreamable HTTP (MCP StreamableHTTP) — stateless, no session pinning
Legacy transportNot supported (no SSE-only endpoint; use a bridge for stdio-only clients)
Manual tokens/keysNot 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 allowlist

As 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 an invalid redirect or access_denied error, 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.


Did this page help you?