Use Cases Ask AI Pricing Embeds AI Skill MCP Server Sign in Get Started
Model Context Protocol

Helpdesky MCP server

This URL is a remote MCP endpoint, not a web page. Point Claude, ChatGPT, Cursor or any MCP client at it and the agent can manage your help center as you — within your operator permissions.

Endpoint

Streamable HTTPhttps://helpdesky.io/mcp

Authentication: OAuth 2.1 (authorization code + PKCE, dynamic client registration — what Claude and ChatGPT use when you paste the URL) or a personal MCP token sent as Authorization: Bearer hdmcp_pt_…. Tokens and connected agents are managed in Dashboard → MCP.

Connect from your client

Claude Desktop / Claude.ai

  1. Settings → Connectors → Add custom connector.
  2. Paste https://helpdesky.io/mcp.
  3. Sign in to Helpdesky and approve the consent screen.

ChatGPT

  1. Settings → Connectors → Create (developer mode).
  2. URL https://helpdesky.io/mcp, authentication OAuth.
  3. Sign in and approve. search and fetch make your help center usable as a knowledge source.

Cursor

Create a personal token, then add to .cursor/mcp.json:

{ "mcpServers": { "helpdesky": {
    "url": "https://helpdesky.io/mcp/x/lite",
    "headers": { "Authorization": "Bearer hdmcp_pt_…" } } } }

/x/lite stays under Cursor's 40-tool cap; /x/all serves everything.

Claude Code

claude mcp add --transport http helpdesky \
  https://helpdesky.io/mcp \
  --header "Authorization: Bearer hdmcp_pt_…"

Without --header, Claude Code uses OAuth instead.

Replit Agent, scripts, custom agents

Any MCP client that speaks Streamable HTTP works: use the URL with either a personal token header or the OAuth flow via the discovery documents above.

Tool sets

Every tool belongs to one set. What a connection sees depends on the sets stored on its credential (chosen on the consent screen or in Dashboard → MCP) or pinned by its URL. New connections get Support desk; core is always included.

PresetSetsToolsWhen
Support desk (default)core, knowledge-base, inbox, inbox-admin, team59Day-to-day support: ChatGPT, Claude and other hosted agents.
Setup+ settings, hosting, embeds, ai, data-sources+41Onboarding: settings, branding, domain & address, embeds, AI, data sources.
Growth+ seo, links+18SEO advisor and link scanner.
Litecore, knowledge-base, inbox33Clients with a tool cap (Cursor lists 40 across all servers).
Everythingall 12 sets118Scripts and agents that need the full surface.

Enabling more on request. The agent can call list_tool_sets and enable_tool_sets (e.g. ["setup"]) when you ask it to configure something; the sets are saved on that connection and tools/list grows. A tool from a disabled set answers with an "enable the … set first" message. Turning the permission off, or removing sets, is done in the dashboard — agents can only add.

URL variants pin the sets regardless of the credential: https://helpdesky.io/mcp/x/lite, https://helpdesky.io/mcp/x/support,setup, https://helpdesky.io/mcp/x/all, and …/readonly on any of them keeps only read-only tools (e.g. https://helpdesky.io/mcp/x/all/readonly). OAuth works on variants too (the resource URL is the variant).

Available tools

Generated from the live registry. Each tool returns structured output (structuredContent) plus a short text summary. Article content is Markdown.

Account

get_profileread

Returns the connected Helpdesky user: a stable opaque id, display name and email. Use it to tell accounts apart.

list_helpdesksread

Lists the helpdesks the connected user belongs to, with their role and operator permissions. Call this first; other tools need a helpdeskId when the user has more than one helpdesk.

get_helpdeskread

Returns a helpdesk's name, slug, public URL, enabled features and plan limits. Settings fields are limited to what the user's role may see.

Articles

list_articlesread

Lists knowledge-base articles (drafts and published) with optional status, category and title filters, paginated. Returns summaries; call get_article for the Markdown body.

get_articleread

Returns one article in full (Markdown content, publish state, category, authors, public URL) by id or by slug.

create_articlewrite

Creates a knowledge-base article. Content is Markdown. The slug is derived from the title unless given (must be unique per helpdesk). Articles are drafts unless published=true; publishing generates search embeddings, same as the dashboard. Fails with a clear message when the plan's article limit is reached.

update_articlewrite

Updates an article's title, Markdown content, excerpt, category, slug or display options. Only the fields you pass change. Use publish_article / unpublish_article to change the publish state.

publish_articlewrite

Publishes a draft so it appears on the public help center, in search and in AI answers (embeddings are generated). Counts toward the plan's article limit.

unpublish_articlewrite

Unpublishes an article: it disappears from the public help center, search and AI answers but keeps its content and slug as a draft.

delete_articledestructive

Permanently deletes an article and its redirects. This cannot be undone — confirm with the user first. Consider unpublish_article instead when the content might be needed later.

Categories

list_categoriesread

Lists the help center's categories in display order.

create_categorywrite

Creates a category. The slug is derived from the name. Optional icon is a Lucide icon name.

update_categorywrite

Renames a category (its slug follows the name) or changes its description/icon. Only passed fields change.

reorder_categorieswrite

Sets the display order of categories. Pass every category id in the desired order; ids that do not belong to the helpdesk are ignored.

delete_categorydestructive

Permanently deletes a category. Its articles are kept but become uncategorised. Confirm with the user first.

Redirects

list_redirectsread

Lists slug redirects (old article URL → current article), created automatically when a published article's slug changes or added manually.

update_redirectwrite

Changes the old slug of a redirect (the source URL). The slug must not be in use by an article or another redirect.

delete_redirectdestructive

Permanently deletes a redirect; the old URL will return 404 afterwards. Confirm with the user first.

Search & answers

search_help_centerread

Searches the helpdesk's published articles the way the public help center does (semantic search when embeddings exist). Returns summaries with public URLs.

ask_help_centerread

Asks the helpdesk's AI assistant a question and returns its answer with source articles, using the same retrieval-augmented pipeline (published articles + data sources) that answers visitors. Goes through the dashboard's authenticated Ask AI, so it works even when the widget is restricted to specific domains; requires an AI key (Settings > AI) and the messages permission.

searchread

Searches the published help-center articles of every helpdesk the user belongs to. Returns result ids, titles and absolute public URLs; pass an id to fetch for the full text.

fetchread

Fetches the full Markdown text of an article by the id returned from search.

Contacts

list_contactsread

Lists the customers (contacts) of a helpdesk with their conversation count and last contact date, optionally filtered to blocked or active contacts or searched by name/email. Paginated (limit ≤ 200).

list_contact_conversationsread

Returns the contact and every conversation they have had with the helpdesk, newest first. Useful to see history before replying.

block_contactdestructive

Blocks a contact: their new widget messages, emails and contact-form submissions are dropped and they can no longer open conversations. Existing conversations stay. Reversible with unblock_contact, but it silences a customer — confirm with the user first.

unblock_contactwrite

Lifts a block so the contact can message the helpdesk again.

update_contact_emailwrite

Changes a contact's email address; future replies on their conversations go to the new address. Fails when another contact of the helpdesk already uses it (merge by moving conversations with set_conversation_contact instead).

Conversations

list_conversationsread

Lists customer conversations (tickets) of a helpdesk, newest first by default, paginated. Status values: pending = new, awaiting the first operator reply; unresolved = in progress (an operator has replied); resolved = closed; stale = auto-flagged after a period without activity; promotional = bulk/marketing email kept out of the default list. Omitting status returns every status except promotional. assignee "me" means assigned to the connected operator. sort "unread" puts unread conversations first. search matches the contact name/email and the last message preview. Call get_conversation for the thread.

get_conversation_countsread

Returns the number of conversations that still need attention (every status except resolved and promotional) and the number of unread promotional conversations. The non-resolved count is owner-only; for staff it is returned as null.

get_conversationread

Reads one conversation: its details, the contact, and the latest messages (up to 20, oldest first). Use list_conversation_messages with offset to page through longer threads. Attachments are listed as filename/type/size plus the URL the dashboard uses; access to that URL is bound to the uploader and conversation, so the agent cannot necessarily download them. Replies through MCP are text-only: never pass attachment URLs or file contents when replying.

list_conversation_messagesread

Pages through a conversation's messages, oldest first (limit ≤ 100). Reading also marks the thread as seen by an operator, like opening it in the inbox. Attachments are listed as filename/type/size plus the URL the dashboard uses; access to that URL is bound to the uploader and conversation, so the agent cannot necessarily download them. Replies through MCP are text-only: never pass attachment URLs or file contents when replying.

reply_to_conversationdestructive

Sends an operator reply exactly as the dashboard does: the message is delivered to the customer by email (queued for a minute unless sendInstantly) and pushed live to the widget; the conversation is marked read, assigned to you if unassigned, and moved from pending/stale to unresolved. A sent reply cannot be unsent — confirm with the user (quote the draft) before calling this unless they already approved the exact text. Set isPrivateNote for an internal note that the customer never sees. Text-only: never include attachment URLs.

edit_messagewrite

Rewrites the body of an operator message you sent (owners can edit any operator message). Customer messages cannot be edited. Already-sent emails are not recalled; the widget and ticket center show the edited text.

delete_messagedestructive

Permanently deletes an operator message you sent (owners can delete any operator message); customer messages cannot be deleted. This cannot be undone — confirm with the user first.

translate_messagewrite

Translates one message into a target language with the helpdesk's AI translation (en, el, fr, de, es, it, pt, nl, ru, tr, ar, zh, ja, ko). Translations are cached per message and language; the original is never changed.

set_conversation_statuswrite

Changes a conversation's status. resolved closes it and records you as the resolver; pending or unresolved reopens it. Status values: pending = new, awaiting the first operator reply; unresolved = in progress (an operator has replied); resolved = closed; stale = auto-flagged after a period without activity; promotional = bulk/marketing email kept out of the default list. Stale and promotional cannot be set by hand.

assign_conversationwrite

Assigns a conversation to an operator of the same helpdesk (ids from list_assignable_operators; your own id is currentOperatorId in get_conversation), or unassigns it when operatorId is null. Assignment only affects inbox filters and avatars; it does not notify the operator.

mark_conversation_readwrite

Clears (or, with unread: true, restores) the unread flag on a conversation, exactly like the inbox's read/unread toggle.

set_conversation_contactwrite

Re-links a conversation to a different contact of the same helpdesk (for example after a customer wrote from a second address). Future reply emails go to the new contact.

set_conversation_notification_emailswrite

Replaces the list of extra email addresses (max 5) that receive operator replies for this conversation instead of the contact's own address. Pass an empty list to go back to emailing the contact.

mass_close_conversationsdestructive

Marks EVERY conversation of the helpdesk that is not yet resolved (pending, unresolved, stale, open) as resolved in one go. Owner only. There is no undo and no per-conversation selection — confirm with the user first, naming the exact helpdesk; use set_conversation_status to close individual conversations.

delete_conversationdestructive

Permanently deletes a conversation with all of its messages and attachments. This cannot be undone — confirm with the user first. Prefer set_conversation_status resolved when the history should be kept.

Team

list_operatorsread

Lists the helpdesk's team: owners and staff, pending invitations included, with each member's permissions. Requires the staff permission (owners always have it).

list_assignable_operatorsread

Lists the active operators a conversation can be assigned to (id + display label). Needs only the messages permission, so any inbox user can assign.

invite_operatordestructive

Invites a person to the helpdesk team by email with a role and permissions; Helpdesky sends the invitation email (the same one the dashboard sends) and it cannot be recalled, so confirm with the user first. An existing user is added straight away and gains access immediately. Requires the staff permission (owners always have it).

invite_operator_batchdestructive

Invites the same person to several helpdesks at once with one role and permission set; one invitation email covers all of them and cannot be recalled, so confirm with the user first. Each helpdesk is checked separately and reported in results. Requires the staff permission (owners always have it).

update_operator_permissionswrite

Replaces a staff member's permission set (pass the full list you want them to end up with). Owner only; owners' own permissions cannot be restricted.

update_operator_rolewrite

Promotes a staff member to owner or demotes an owner to staff. Owner only. Demoting keeps the member's existing permission list, so review it with update_operator_permissions afterwards.

update_operator_notificationswrite

Turns new-message email notifications on or off for one team member. Members can change their own setting; owners can change anyone's.

remove_operatordestructive

Removes a team member (or cancels a pending invitation) from the helpdesk; their conversations become unassigned. They lose access immediately and must be re-invited to return — confirm with the user first. Requires the staff permission (owners always have it).

Overview

get_overviewread

The same numbers the dashboard Overview shows: published and draft article counts, total article views, category count and the five most recently updated articles.

Messaging settings

get_notification_settingsread

Reads who gets emailed about new customer messages: the owner toggle, promotional toggle, extra notification addresses and each operator's own preference.

update_notification_settingswrite

Changes the helpdesk-wide new-message notification settings. Owner only; only the fields you pass change. Use update_operator_notifications for a single member's preference.

get_messaging_settingsread

Reads whether messaging is enabled and the messaging configuration (widget/ticket-center/contact-form options and custom fields). Works while messaging is switched off. Credentials (ticket-center signing secret, Turnstile secret key) are never returned; manage them in the dashboard.

update_messaging_settingswrite

Turns messaging on/off (also the way to re-enable it) and/or merges top-level keys into the messaging configuration (keys you pass overwrite the stored value of that key; other keys are kept). Ticket-center keys need the ticket_center permission and contact-form/turnstile keys the contact_form permission; anything else needs settings. Credential keys such as turnstileSecretKey are refused — set them in the dashboard. Read get_messaging_settings first and send complete values for the keys you change.

get_automation_settingsread

Reads the inbox automations: auto-resolve (close conversations with no activity after N days) and stale marking (flag quiet conversations after N days).

update_automation_settingswrite

Changes auto-resolve and stale-marking automations (1–365 days). Only the fields you pass change; enabling auto-resolve starts the clock from now, so older quiet conversations are not closed retroactively.

Other tools

list_tool_setsread

Lists the tool sets of this server with their tools and whether each is enabled for this connection, plus the presets (named bundles of sets). Tools from disabled sets are not listed by tools/list; use enable_tool_sets to turn a set on, then list tools again.

enable_tool_setswrite

Enables one or more tool sets (or presets such as setup / growth / all) for this connection, saved on the credential so later requests keep them. Returns the tools that became available; call tools/list again afterwards. Sets can only be added here — the user removes sets from the Helpdesky dashboard. Permissions still apply: a set never grants more than the user's operator role allows.

Full setup guide: /docs/mcp. REST alternative: /docs/api.