home / skills / composiohq / awesome-claude-skills / zendesk-automation

zendesk-automation skill

/zendesk-automation

This skill automates Zendesk tasks via Rube MCP, enabling ticket, user, and organization management with current tool schemas.

npx playbooks add skill composiohq/awesome-claude-skills --skill zendesk-automation

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
8.0 KB
---
name: zendesk-automation
description: "Automate Zendesk tasks via Rube MCP (Composio): tickets, users, organizations, replies. Always search tools first for current schemas."
requires:
  mcp: [rube]
---

# Zendesk Automation via Rube MCP

Automate Zendesk operations through Composio's Zendesk toolkit via Rube MCP.

**Toolkit docs**: [composio.dev/toolkits/zendesk](https://composio.dev/toolkits/zendesk)

## Prerequisites

- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
- Active Zendesk connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `zendesk`
- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas

## Setup

**Get Rube MCP**: Add `https://rube.app/mcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.


1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds
2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `zendesk`
3. If connection is not ACTIVE, follow the returned auth link to complete Zendesk auth
4. Confirm connection status shows ACTIVE before running any workflows

## Core Workflows

### 1. List and Search Tickets

**When to use**: User wants to view, filter, or search support tickets

**Tool sequence**:
1. `ZENDESK_LIST_ZENDESK_TICKETS` - List all tickets with pagination [Required]
2. `ZENDESK_GET_ZENDESK_TICKET_BY_ID` - Get specific ticket details [Optional]

**Key parameters**:
- `page`: Page number (1-based)
- `per_page`: Results per page (max 100)
- `sort_by`: Sort field ('created_at', 'updated_at', 'priority', 'status')
- `sort_order`: 'asc' or 'desc'
- `ticket_id`: Ticket ID for single retrieval

**Pitfalls**:
- LIST uses `page`/`per_page` pagination, NOT offset-based; check `next_page` in response
- Maximum 100 results per page; iterate with page numbers until `next_page` is null
- Deleted tickets are not returned by LIST; use GET_BY_ID which returns status 'deleted'
- Ticket comments and audits are included in GET_BY_ID but not in LIST responses

### 2. Create and Update Tickets

**When to use**: User wants to create new tickets or modify existing ones

**Tool sequence**:
1. `ZENDESK_SEARCH_ZENDESK_USERS` - Find requester/assignee [Prerequisite]
2. `ZENDESK_CREATE_ZENDESK_TICKET` - Create a new ticket [Required]
3. `ZENDESK_UPDATE_ZENDESK_TICKET` - Update ticket fields [Optional]
4. `ZENDESK_DELETE_ZENDESK_TICKET` - Delete a ticket [Optional]

**Key parameters**:
- `subject`: Ticket subject line
- `description`: Ticket body (for creation; becomes first comment)
- `priority`: 'urgent', 'high', 'normal', 'low'
- `status`: 'new', 'open', 'pending', 'hold', 'solved', 'closed'
- `type`: 'problem', 'incident', 'question', 'task'
- `assignee_id`: Agent user ID to assign
- `requester_id`: Requester user ID
- `tags`: Array of tag strings
- `ticket_id`: Ticket ID (for update/delete)

**Pitfalls**:
- Tags on UPDATE REPLACE existing tags entirely; merge with current tags to preserve them
- Use `safe_update` with `updated_stamp` to prevent concurrent modification conflicts
- DELETE is permanent and irreversible; tickets cannot be recovered
- `description` is only used on creation; use REPLY_ZENDESK_TICKET to add comments after creation
- Closed tickets cannot be updated; create a follow-up ticket instead

### 3. Reply to Tickets

**When to use**: User wants to add comments or replies to tickets

**Tool sequence**:
1. `ZENDESK_GET_ZENDESK_TICKET_BY_ID` - Get current ticket state [Prerequisite]
2. `ZENDESK_REPLY_ZENDESK_TICKET` - Add a reply/comment [Required]

**Key parameters**:
- `ticket_id`: Ticket ID to reply to
- `body`: Reply text content
- `public`: Boolean; true for public reply, false for internal note
- `author_id`: Author user ID (defaults to authenticated user)

**Pitfalls**:
- Set `public: false` for internal notes visible only to agents
- Default is public reply which sends email to requester
- HTML is supported in body text
- Replying can also update ticket status simultaneously

### 4. Manage Users

**When to use**: User wants to find or create Zendesk users (agents, end-users)

**Tool sequence**:
1. `ZENDESK_SEARCH_ZENDESK_USERS` - Search for users [Required]
2. `ZENDESK_CREATE_ZENDESK_USER` - Create a new user [Optional]
3. `ZENDESK_GET_ABOUT_ME` - Get authenticated user info [Optional]

**Key parameters**:
- `query`: Search string (matches name, email, phone, etc.)
- `name`: User's full name (required for creation)
- `email`: User's email address
- `role`: 'end-user', 'agent', or 'admin'
- `verified`: Whether email is verified

**Pitfalls**:
- User search is fuzzy; may return partial matches
- Creating a user with an existing email returns the existing user (upsert behavior)
- Agent and admin roles may require specific plan features

### 5. Manage Organizations

**When to use**: User wants to list, create, or manage organizations

**Tool sequence**:
1. `ZENDESK_GET_ALL_ZENDESK_ORGANIZATIONS` - List all organizations [Required]
2. `ZENDESK_GET_ZENDESK_ORGANIZATION` - Get specific organization [Optional]
3. `ZENDESK_CREATE_ZENDESK_ORGANIZATION` - Create organization [Optional]
4. `ZENDESK_UPDATE_ZENDESK_ORGANIZATION` - Update organization [Optional]
5. `ZENDESK_COUNT_ZENDESK_ORGANIZATIONS` - Get total count [Optional]

**Key parameters**:
- `name`: Organization name (unique, required for creation)
- `organization_id`: Organization ID for get/update
- `details`: Organization details text
- `notes`: Internal notes
- `domain_names`: Array of associated domains
- `tags`: Array of tag strings

**Pitfalls**:
- Organization names must be unique; duplicate names cause creation errors
- Tags on UPDATE REPLACE existing tags (same behavior as tickets)
- Domain names can be used for automatic user association

## Common Patterns

### Pagination

**List endpoints**:
- Use `page` (1-based) and `per_page` (max 100)
- Check `next_page` URL in response; null means last page
- `count` field gives total results

### Ticket Lifecycle

```
new -> open -> pending -> solved -> closed
                  |          ^
                  v          |
                hold --------+
```

- `new`: Unassigned ticket
- `open`: Assigned, being worked on
- `pending`: Waiting for customer response
- `hold`: Waiting for internal action
- `solved`: Resolved, can be reopened
- `closed`: Permanently closed, cannot be modified

### User Search for Assignment

```
1. Call ZENDESK_SEARCH_ZENDESK_USERS with query (name or email)
2. Extract user ID from results
3. Use user ID as assignee_id in ticket creation/update
```

## Known Pitfalls

**Tags Behavior**:
- Tags on update REPLACE all existing tags
- Always fetch current tags first and merge before updating
- Tags are lowercase, no spaces (use underscores)

**Safe Updates**:
- Use `safe_update: true` with `updated_stamp` (ISO 8601) to prevent conflicts
- Returns 409 if ticket was modified since the stamp

**Deletion**:
- Ticket deletion is permanent and irreversible
- Consider setting status to 'closed' instead of deleting
- Deleted tickets cannot be recovered via API

**Rate Limits**:
- Default: 400 requests per minute
- Varies by plan tier
- 429 responses include Retry-After header

## Quick Reference

| Task | Tool Slug | Key Params |
|------|-----------|------------|
| List tickets | ZENDESK_LIST_ZENDESK_TICKETS | page, per_page, sort_by |
| Get ticket | ZENDESK_GET_ZENDESK_TICKET_BY_ID | ticket_id |
| Create ticket | ZENDESK_CREATE_ZENDESK_TICKET | subject, description, priority |
| Update ticket | ZENDESK_UPDATE_ZENDESK_TICKET | ticket_id, status, tags |
| Reply to ticket | ZENDESK_REPLY_ZENDESK_TICKET | ticket_id, body, public |
| Delete ticket | ZENDESK_DELETE_ZENDESK_TICKET | ticket_id |
| Search users | ZENDESK_SEARCH_ZENDESK_USERS | query |
| Create user | ZENDESK_CREATE_ZENDESK_USER | name, email |
| My profile | ZENDESK_GET_ABOUT_ME | (none) |
| List orgs | ZENDESK_GET_ALL_ZENDESK_ORGANIZATIONS | page, per_page |
| Get org | ZENDESK_GET_ZENDESK_ORGANIZATION | organization_id |
| Create org | ZENDESK_CREATE_ZENDESK_ORGANIZATION | name |
| Update org | ZENDESK_UPDATE_ZENDESK_ORGANIZATION | organization_id, name |
| Count orgs | ZENDESK_COUNT_ZENDESK_ORGANIZATIONS | (none) |

---
*Powered by [Composio](https://composio.dev)*

Overview

This skill automates common Zendesk tasks through Composio's Zendesk toolkit via Rube MCP. It provides workflows for listing/searching tickets, creating and updating tickets, replying to tickets, and managing users and organizations. Always call RUBE_SEARCH_TOOLS first to retrieve current tool schemas before executing operations.

How this skill works

The skill orchestrates Rube MCP toolkit calls (zendesk) to perform API actions: list and page through tickets, fetch ticket details, create/update/delete tickets, post replies, search/create users, and manage organizations. It checks connection status via RUBE_MANAGE_CONNECTIONS and uses sequence patterns (search users → create ticket → update) to ensure required data like requester or assignee IDs are available. Pagination is 1-based and responses include next_page links to iterate.

When to use it

  • View or filter support tickets, including paginated searches and sorting.
  • Create new tickets or safely update fields, assignees, tags, and status.
  • Add public replies or internal agent notes to existing tickets.
  • Find, create, or upsert Zendesk users for assignment or notifications.
  • List, create, or update organizations and associate domain names.
  • Automate bulk workflows while respecting rate limits and safe-update patterns.

Best practices

  • Always call RUBE_SEARCH_TOOLS first to obtain current tool schemas and parameters.
  • Verify RUBE_MANAGE_CONNECTIONS shows an ACTIVE zendesk connection before running flows.
  • Use page/per_page and next_page from responses for pagination (per_page max 100).
  • Fetch current tags before updating and merge them—updates replace all tags.
  • Use safe_update with updated_stamp to avoid concurrent-modification 409 errors.
  • Prefer setting status to closed instead of deleting tickets unless deletion is required.

Example use cases

  • List all open high-priority tickets created in the last 24 hours and export summaries.
  • Create a ticket for a customer email, searching users first to reuse existing accounts.
  • Reply to a ticket with an internal note (public: false) to add agent-only context.
  • Update ticket tags and assignee after fetching current ticket state and merging tags.
  • Create an organization and associate domain names to auto-link new users by email domain.

FAQ

Do I need API keys to use Rube MCP with this toolkit?

No API keys are required for Rube MCP; add https://rube.app/mcp as an MCP server in your client configuration and ensure the zendesk connection is active.

How do I handle pagination when listing tickets?

Use page (1-based) and per_page (max 100). Check the response's next_page field and iterate pages until next_page is null.