Zendesk MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MODE | No | Tool mode: 'full' (all 55 tools) or 'lite' (10 essential tools) | full |
| PORT | No | HTTP server port (default: 3030, HTTP mode only) | |
| ZENDESK_DEBUG | No | Enable debug logging | false |
| ZENDESK_EMAIL | No | Your Zendesk email address (for API token auth) | |
| SERVER_BASE_URL | No | Base URL for the server (HTTP mode only, use https:// in production) | |
| ANTHROPIC_API_KEY | No | Anthropic API key for AI image/document analysis features | |
| ZENDESK_API_TOKEN | No | Your Zendesk API token (for API token auth) | |
| ZENDESK_SUBDOMAIN | No | Your Zendesk subdomain (e.g., mycompany) | |
| ZENDESK_OAUTH_CLIENT_ID | No | OAuth client ID for HTTP mode | |
| ZENDESK_OAUTH_REDIRECT_URI | No | OAuth redirect URI (e.g., http://localhost:3030/zendesk/oauth/callback) | |
| ZENDESK_OAUTH_CLIENT_SECRET | No | OAuth client secret for HTTP mode |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_ticketsA | List ALL tickets in the Zendesk instance (no filtering). Has no parameters for filtering by recipient, assignee, requester, status, tags, or dates — for any filtered query use |
| get_ticketA | Fetch one ticket by numeric ID, returning the full ticket object plus named_custom_fields (e.g. ado_work_item_id). Pass |
| create_ticketC | Create a new ticket. Supports named_custom_fields (e.g. ado_work_item_id) and raw custom_fields. |
| update_ticketA | Update an existing ticket. Supports named_custom_fields (e.g. ado_work_item_id, pass null to clear) and raw custom_fields. Pass |
| delete_ticketB | Delete a ticket |
| get_ticket_commentsA | List the comment thread for a ticket (both public replies and internal agent notes). Useful when you need conversation history but already used |
| add_ticket_commentA | Append a comment to an existing ticket. Default visibility is |
| get_ticket_attachmentsA | List every attachment across a ticket's comment thread (files and inline images). Use this to discover what's attached before deciding to call |
| analyze_ticket_imagesB | Download and analyze images from a ticket using AI vision with comprehensive analysis. Includes both file attachments and inline images embedded in comment bodies. |
| list_usersA | List Zendesk users with optional role filter ( |
| get_userA | Fetch one user by numeric ID, returning the full profile (name, email, role, organization, tags, custom_fields). If you only have an email or name, use |
| create_userA | Create a new Zendesk user. Email must be unique across the instance — duplicates return 422. Role defaults to |
| update_userA | Update an existing user. Pass only the fields you want to change; omitted fields are preserved. Use |
| delete_userA | Soft-delete a Zendesk user (sets active:false; the record is retained for ticket history). To permanently purge, use Zendesk's GDPR delete endpoint (not exposed by this tool). Cannot delete the account owner. |
| list_organizationsA | List ALL organizations in the Zendesk instance. No filter parameters — to find an organization by name, domain, external_id, or tag use |
| get_organizationA | Fetch one organization by numeric ID, returning name, domain_names, tags, custom_fields, and notes. If you only have a name or domain, use |
| create_organizationA | Create a new organization. Name must be unique within the instance. Use domain_names (array) to auto-associate end-users whose email domain matches. |
| update_organizationA | Update an existing organization. Pass only the fields you want to change. To clear domain_names or tags, pass an empty array. |
| delete_organizationA | Delete an organization. Associated users are not deleted but are unlinked from the org. |
| list_groupsA | List ALL agent groups (teams that own tickets) in the Zendesk instance. Each group has an ID used in ticket routing — use this when you need to discover group IDs for |
| get_groupA | Fetch one agent group by numeric ID, returning name, description, and metadata. |
| create_groupA | Create a new agent group. Group members are added separately via Zendesk's group_memberships endpoint (not exposed by this tool). |
| update_groupC | Update an existing group's name or description. |
| delete_groupA | Delete an agent group. Tickets currently assigned to this group will be unassigned (group_id set to null). |
| list_macrosA | List ALL macros (predefined ticket actions agents can apply) accessible to the API user. Use this to discover macro IDs and inspect what canned responses or ticket updates your team has built. |
| get_macroA | Fetch one macro's definition by numeric ID, including the title and the array of actions it performs (status change, comment, tag adds, etc.). |
| create_macroB | Create a new macro. Provide |
| update_macroA | Update an existing macro's title or actions. Pass |
| delete_macroA | Delete a macro. Tickets previously modified by it are unaffected. |
| list_viewsA | List ALL saved ticket views (filtered ticket lists agents use as dashboards) accessible to the API user. Use this to discover view IDs, then call Zendesk's |
| get_viewA | Fetch one view's definition by numeric ID, returning the filter conditions, title, and metadata. Useful for understanding how an agent's existing dashboard is built. |
| create_viewA | Create a new ticket view. Pass |
| update_viewA | Update an existing view's title, description, conditions, and/or output (columns, grouping, sort). Use |
| delete_viewA | Delete a saved view. Tickets are unaffected. |
| list_triggersA | List ALL triggers (event-driven rules that fire on ticket create/update). Use this to audit existing triggers before adding new ones, or to discover trigger IDs for inspection. For time-based rules use |
| get_triggerA | Fetch one trigger's definition by numeric ID, returning its conditions (all_conditions/any_conditions) and actions array. |
| create_triggerB | Create a new trigger. Requires title, conditions (when it fires), and actions (what it does). Triggers run on every ticket create/update — be conservative with conditions to avoid performance impact. |
| update_triggerA | Update an existing trigger. Pass |
| delete_triggerA | Delete a trigger. Tickets previously modified by it are unaffected. |
| list_automationsA | List ALL automations (time-based rules that run hourly — e.g. closing pending tickets after 7 days). Unlike triggers, automations fire on a schedule, not on events. Use this to audit existing time-based workflows. |
| get_automationA | Fetch one automation's definition by numeric ID, including its conditions and actions array. |
| create_automationA | Create a new automation (runs hourly on tickets matching the conditions). Requires title, conditions, and actions. Conditions should include a time-based field (e.g. hours_since_update) — otherwise consider a trigger instead. |
| update_automationA | Update an existing automation. Pass |
| delete_automationA | Delete an automation. Tickets previously modified by it are unaffected. |
| searchA | Search Zendesk tickets, users, organizations, groups, and Help Center articles using Zendesk's full search query language. The |
| list_articlesA | List Help Center (knowledge-base) articles. To find articles by title/body/section, use |
| get_articleA | Fetch one Help Center article by numeric ID, returning title, body (HTML), section_id, labels, and locale. |
| create_articleB | Create a Help Center article in a specific section. Body accepts HTML. Specify |
| update_articleA | Update an existing Help Center article's title, body, labels, or section. Pass only the fields you want to change. |
| delete_articleA | Delete a Help Center article. Soft-deletable — Zendesk retains the record briefly for undo. Existing links to the article will 404. |
| support_infoA | Return the authenticated agent's identity (id, name, email, role) plus account-level Support metadata: subdomain, account settings, brands, and ticket forms. Use this to confirm which Zendesk instance the session is connected to and which ticket forms / brands are available before constructing tickets. |
| get_talk_statsA | Return Zendesk Talk (voice) aggregate stats: total calls, average wait, abandoned rate, agent availability. Requires Zendesk Talk add-on. Returns the rolling window Zendesk publishes (typically last 30 days). |
| list_chatsA | List Zendesk Chat conversations (live chat transcripts), most recent first. Requires Zendesk Chat to be enabled on the account. Use this for end-of-day chat reviews or to find a recent chat by visitor name. |
| analyze_ticket_documentsA | Comprehensively analyze all document attachments from a ticket (PDF, DOCX, TXT, CSV, etc). v2.1 with truncation. Note: This may take 30-60 seconds for multiple documents. |
| get_document_summaryB | Get a quick summary of all documents attached to a ticket |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/SShadowS/zendesk-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server