get_tickets
Fetch Zendesk tickets with pagination and sorting options to manage and review support requests efficiently.
Instructions
Fetch the latest tickets with pagination support
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Number of tickets per page (max 100) | |
| sort_by | No | Field to sort by (created_at, updated_at, priority, status) | created_at |
| sort_order | No | Sort order (asc or desc) | desc |
Implementation Reference
- The core logic for `get_tickets` tool, which fetches tickets from Zendesk API.
def get_tickets(self, page: int = 1, per_page: int = 25, sort_by: str = 'created_at', sort_order: str = 'desc') -> Dict[str, Any]: """ Get the latest tickets with proper pagination support using direct API calls. Args: page: Page number (1-based) per_page: Number of tickets per page (max 100) sort_by: Field to sort by (created_at, updated_at, priority, status) sort_order: Sort order (asc or desc) Returns: Dict containing tickets and pagination info """ try: # Cap at reasonable limit per_page = min(per_page, 100) # Build URL with parameters for offset pagination params = { 'page': str(page), 'per_page': str(per_page), 'sort_by': sort_by, 'sort_order': sort_order } query_string = urllib.parse.urlencode(params) url = f"{self.base_url}/tickets.json?{query_string}" # Create request with auth header req = urllib.request.Request(url) req.add_header('Authorization', self.auth_header) req.add_header('Content-Type', 'application/json') # Make the API request with urllib.request.urlopen(req) as response: data = json.loads(response.read().decode()) tickets_data = data.get('tickets', []) # Process tickets to return only essential fields ticket_list = [] for ticket in tickets_data: ticket_list.append({ 'id': ticket.get('id'), 'subject': ticket.get('subject'), 'status': ticket.get('status'), 'priority': ticket.get('priority'), 'description': ticket.get('description'), 'created_at': ticket.get('created_at'), 'updated_at': ticket.get('updated_at'), 'requester_id': ticket.get('requester_id'), 'assignee_id': ticket.get('assignee_id') }) return { 'tickets': ticket_list, 'page': page, 'per_page': per_page, 'count': len(ticket_list), 'sort_by': sort_by, 'sort_order': sort_order, 'has_more': data.get('next_page') is not None, 'next_page': page + 1 if data.get('next_page') else None, 'previous_page': page - 1 if data.get('previous_page') and page > 1 else None } - src/zendesk_mcp_server/server.py:351-365 (handler)The MCP handler implementation that routes the "get_tickets" call to the client implementation.
elif name == "get_tickets": page = arguments.get("page", 1) if arguments else 1 per_page = arguments.get("per_page", 25) if arguments else 25 sort_by = arguments.get("sort_by", "created_at") if arguments else "created_at" sort_order = arguments.get("sort_order", "desc") if arguments else "desc" tickets = zendesk_client.get_tickets( page=page, per_page=per_page, sort_by=sort_by, sort_order=sort_order ) return [types.TextContent( type="text", text=json.dumps(tickets, indent=2)