Zendesk MCP Server (Extended)
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HOST | No | HTTP bind address | 0.0.0.0 |
| MCP_PORT | No | HTTP port | 8000 |
| MCP_KEYS_DB | No | SQLite database path for keys and config | data/keys.db |
| MCP_AUTH_MODE | No | Authentication mode: keys, oauth, or both | keys |
| MCP_TRANSPORT | No | Transport mode: stdio or http | stdio |
| ZENDESK_EMAIL | No | Agent email for single-identity mode (either this or both ZENDESK_READ_EMAIL and ZENDESK_WRITE_EMAIL) | |
| MCP_ADMIN_HOST | No | Admin console bind address | 127.0.0.1 |
| MCP_ADMIN_PORT | No | Admin console port | 9000 |
| MCP_PUBLIC_URL | No | Public URL of the server (required for OAuth modes) | |
| ZENDESK_API_KEY | Yes | Zendesk API token | |
| MCP_AUTH_ENABLED | No | Enable authentication for HTTP mode | true |
| MCP_OAUTH_ISSUER | No | OIDC issuer URL | |
| ZENDESK_SUBDOMAIN | Yes | Your Zendesk subdomain (e.g., 'mycompany' from mycompany.zendesk.com) | |
| MCP_ADMIN_PASSWORD | No | Admin console password (enables admin console) | |
| MCP_OAUTH_AUDIENCE | No | Audience for JWT validation | |
| MCP_OAUTH_JWKS_URI | No | JWKS URI override | |
| ZENDESK_READ_EMAIL | No | Restricted user email for reads (dual identity) | |
| ZENDESK_WRITE_EMAIL | No | Full agent email for writes (dual identity) | |
| MCP_OAUTH_AUTH_SERVERS | No | Comma-separated authorization server URLs | |
| MCP_OAUTH_TENANT_CLAIM | No | JWT claim for tenant | zendesk_tenant |
| MCP_WRITE_CONFIRMATION | No | Elicit approval before public comments | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_ticketA | Retrieve a Zendesk ticket by its ID. |
| get_ticketsA | Fetch tickets with cursor pagination. Pass the returned after_cursor as |
| get_ticket_commentsB | Retrieve comments for a ticket (cursor-paginated), including attachment metadata. |
| search_ticketsA | Search tickets with Zendesk search syntax. Examples: 'status:open priority:high', 'requester:jane@example.com', 'printer error created>2026-01-01'. limit max is 100. |
| get_ticket_attachmentA | Fetch an image attachment by its content_url (from get_ticket_comments) and return it as base64-encoded data. Only safe image types are allowed. |
| get_userA | Get a Zendesk user by ID — resolve requester_id/assignee_id to name, email, role. |
| search_usersB | Search Zendesk users by name or email. |
| list_groupsA | List agent groups (teams) for routing tickets. |
| list_ticket_fieldsA | List ticket fields including custom fields with their IDs, types, and options. Use this to interpret or set custom_fields {id, value} pairs on tickets. |
| search_articlesA | Search Help Center knowledge-base articles. Prefer this over reading the whole zendesk://knowledge-base resource. |
| create_ticketA | Create a new Zendesk ticket. Requires the tickets:write scope. priority: low | normal | high | urgent. type: problem | incident | question | task. custom_fields: list of {id, value} objects (see list_ticket_fields). |
| update_ticketA | Update fields on an existing Zendesk ticket. Requires the tickets:write scope. status: new | open | pending | on-hold | solved | closed. priority: low | normal | high | urgent. due_at: ISO8601 datetime. |
| upload_attachmentA | Upload a file (base64) to Zendesk. Returns an upload token to pass to create_ticket_comment's upload_tokens. Requires the tickets:write scope. Max 10 MB. |
| create_ticket_commentA | Add a comment to an existing Zendesk ticket. Requires the tickets:write scope. WARNING: public=true comments are visible to the end customer. upload_tokens: tokens from upload_attachment to attach files. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| analyze-ticket | Analyze a Zendesk ticket and provide insights |
| draft-ticket-response | Draft a professional response to a Zendesk ticket |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Zendesk Knowledge Base | Access to Zendesk Help Center articles and sections |
TDQS
Scored across 14 tools
Each tool targets a distinct resource or action: groups, ticket fields, attachments, users, tickets (CRUD and search), comments, articles. Descriptions clearly differentiate similar tools like get_ticket vs get_tickets and search_tickets vs get_tickets.
All tools follow a consistent verb_snake_case pattern (list_, get_, search_, create_, update_, upload_). No mixing of conventions or ambiguous verb choices.
14 tools cover the essential operations for a Zendesk support MCP server: ticket lifecycle, user/group lookup, comment management, attachments, and article search. The count feels well-scoped without bloat.
Core ticket workflows are covered (CRUD, comments, attachments, search, user/group resolution). Missing delete ticket and some admin features, but these are reasonable omissions for an agent-focused server.