create_ticket
Create a new support ticket in Zendesk to report issues, ask questions, or request assistance by specifying subject, description, priority, and assignee.
Instructions
Create a new Zendesk ticket
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| subject | Yes | Ticket subject | |
| description | Yes | Ticket description | |
| requester_id | No | ||
| assignee_id | No | ||
| priority | No | low, normal, high, urgent | |
| type | No | problem, incident, question, task | |
| tags | No | ||
| custom_fields | No |
Implementation Reference
- The `create_ticket` method in `ZendeskClient` is the actual handler that interacts with the Zendesk API to create a ticket using the Zenpy library.
def create_ticket( self, subject: str, description: str, requester_id: int | None = None, assignee_id: int | None = None, priority: str | None = None, type: str | None = None, tags: List[str] | None = None, custom_fields: List[Dict[str, Any]] | None = None, ) -> Dict[str, Any]: """ Create a new Zendesk ticket using Zenpy and return essential fields. Args: subject: Ticket subject description: Ticket description (plain text). Will also be used as initial comment. requester_id: Optional requester user ID assignee_id: Optional assignee user ID priority: Optional priority (low, normal, high, urgent) type: Optional ticket type (problem, incident, question, task) tags: Optional list of tags custom_fields: Optional list of dicts: {id: int, value: Any} """ try: ticket = ZenpyTicket( subject=subject, description=description, requester_id=requester_id, assignee_id=assignee_id, priority=priority, type=type, tags=tags, custom_fields=custom_fields, ) created_audit = self.client.tickets.create(ticket) # Fetch created ticket id from audit created_ticket_id = getattr(getattr(created_audit, 'ticket', None), 'id', None) if created_ticket_id is None: # Fallback: try to read id from audit events created_ticket_id = getattr(created_audit, 'id', None) # Fetch full ticket to return consistent data created = self.client.tickets(id=created_ticket_id) if created_ticket_id else None return { 'id': getattr(created, 'id', created_ticket_id), 'subject': getattr(created, 'subject', subject), 'description': getattr(created, 'description', description), 'status': getattr(created, 'status', 'new'), 'priority': getattr(created, 'priority', priority), 'type': getattr(created, 'type', type), 'created_at': str(getattr(created, 'created_at', '')), 'updated_at': str(getattr(created, 'updated_at', '')), 'requester_id': getattr(created, 'requester_id', requester_id), 'assignee_id': getattr(created, 'assignee_id', assignee_id), 'organization_id': getattr(created, 'organization_id', None), 'tags': list(getattr(created, 'tags', tags or []) or []), } except Exception as e: raise Exception(f"Failed to create ticket: {str(e)}") - src/zendesk_mcp_server/server.py:143-160 (registration)The `create_ticket` tool definition and schema registration in the MCP server.
types.Tool( name="create_ticket", description="Create a new Zendesk ticket", inputSchema={ "type": "object", "properties": { "subject": {"type": "string", "description": "Ticket subject"}, "description": {"type": "string", "description": "Ticket description"}, "requester_id": {"type": "integer"}, "assignee_id": {"type": "integer"}, "priority": {"type": "string", "description": "low, normal, high, urgent"}, "type": {"type": "string", "description": "problem, incident, question, task"}, "tags": {"type": "array", "items": {"type": "string"}}, "custom_fields": {"type": "array", "items": {"type": "object"}}, }, "required": ["subject", "description"], } ), - src/zendesk_mcp_server/server.py:333-349 (handler)The tool call handler in `server.py` which maps the `create_ticket` tool request to the `zendesk_client.create_ticket` implementation.
elif name == "create_ticket": if not arguments: raise ValueError("Missing arguments") created = zendesk_client.create_ticket( subject=arguments.get("subject"), description=arguments.get("description"), requester_id=arguments.get("requester_id"), assignee_id=arguments.get("assignee_id"), priority=arguments.get("priority"), type=arguments.get("type"), tags=arguments.get("tags"), custom_fields=arguments.get("custom_fields"), ) return [types.TextContent( type="text", text=json.dumps({"message": "Ticket created successfully", "ticket": created}, indent=2) )]