Model Context Protocol server for Zendesk support desk integration, exposing tickets, comments, users, organizations, groups, views, macros and Help Centre knowledge base.
Strong foundation with 27 well-named tools, comprehensive descriptions (avg 150-200 chars), and explicit JSON Schema for all parameters. All tools have type definitions and descriptions. However, output schemas are not documented, responses are returned as raw JSON strings without structured field definitions. Error handling lacks recovery guidance and actionable messages. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Missing idempotency guarantees for write operations. Composition is sound: tools chain well (e.g., search_tickets → get_ticket → create_ticket_comment), and parameter naming is consistent (ticketId, userId, etc.).
Create a new Zendesk ticket.
Add a comment to an existing ticket. Comments are public by default.
Create a new user.
Delete a ticket by its ID. This cannot be undone.
Get the user the API is authenticating as (the shared service account).
Retrieve a single agent group by ID.
Retrieve a single macro by ID.
Output schemas not documented. Tools return raw JSON strings without field definitions. LLMs cannot plan downstream calls or extract specific fields reliably.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. delete_ticket is marked DESTRUCTIVE but lacks annotation. Agents cannot distinguish safe from dangerous operations.
Error handling lacks recovery guidance. No actionable error messages or categorization (retryable vs user-fixable vs fatal). Agents cannot self-correct on failures.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 70 | 2026-07-28+ | v2 |
Retrieve a single organization by ID.
Retrieve a single Zendesk ticket by its ID.
Download a ticket attachment by its content_url (from get_ticket_comments) and return it as an image. Only image attachments up to 10 MB are supported (JPEG, PNG, GIF, WEBP).
Retrieve all comments (conversation) for a ticket by its ID. Inline (pasted) screenshots embedded in a comment body are surfaced in that comment's 'attachments' array with "inline": true and a content_url; fetch them the same way as any attachment, via get_ticket_attachment.
List the most recent tickets, with pagination and sorting.
Retrieve a single user by ID.
Retrieve a single view by ID.
Execute a view and return the tickets it contains.
List all agent groups (e.g. to find the 'Dev Team' group ID).
List the macros (canned ticket actions).
List organizations, with pagination.
List users, with pagination.
List the saved views (the filters you see in the Zendesk agent UI).
Search Help Centre (knowledge base) articles by text.
Search organizations by name or other attributes.
Search tickets using the Zendesk search query language. Your query is automatically scoped to tickets. Examples: 'group:"Dev Team" status:open', 'assignee:none status:new', 'tags:gift_card status<solved'.
Search users by name, e-mail, phone or other attributes.
Update fields on an existing ticket (status, priority, assignee, tags, etc.).
Update fields on an existing user.
Escape hatch for any Zendesk REST API v2 endpoint not covered by a dedicated tool. Use the curated tools where they exist; use this for the long tail (tags, ticket fields, automations, triggers, satisfaction ratings, Talk, etc.). Example: method='GET', path='/api/v2/ticket_fields.json'.
Pagination present (page, perPage) but no total count or next_cursor returned. LLMs cannot determine if more results exist or plan multi-page fetches efficiently.
customFieldsJson parameter requires manual JSON string construction. Should accept structured object or key-value pairs to reduce LLM serialization errors.