Skip to main content
Glama

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
NameRequiredDescriptionDefault
subjectYesTicket subject
descriptionYesTicket description
requester_idNo
assignee_idNo
priorityNolow, normal, high, urgent
typeNoproblem, incident, question, task
tagsNo
custom_fieldsNo

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)}")
  • 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"],
        }
    ),
  • 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)
        )]

Latest Blog Posts

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/kdopenshaw/zendesk-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server