← All integrations

Zendesk

Let a support agent work your Zendesk queue without quietly solving the ticket that mattered. It searches and reads tickets, replies, adds internal notes, sets status and priority, assigns and tags, and a reply or a solve can wait for a person.

Zendesksecret · ZENDESK
host
{subdomain}.zendesk.com
connect
API key, per user
  • Create ticket

    zendesk-create-ticket

  • Reply to ticket

    zendesk-reply-to-ticket

  • Add internal note

    zendesk-add-internal-note

  • Set ticket status

    zendesk-set-ticket-status

writes are off until switched on

Reads and writes in Zendesk. Writes are off until you switch them on.

Each one is a named operation from the pack. Reads change nothing.

Writes

  • Create ticket

    read back

    zendesk-create-ticket

    Create one ticket with a subject and an opening comment. The requester is the user given by requester_id, or by requester email (Zendesk creates an end user for an email it does not know), or the connected agent when both are left out. A public opening comment can be emailed to the requester by the account's triggers.

  • Reply to ticket

    read back

    zendesk-reply-to-ticket

    Send a public reply on one ticket. The requester and the ticket's CCs can be emailed it by the account's triggers.

  • Add internal note

    read back

    zendesk-add-internal-note

    Add an internal note to one ticket. Agents see it; the requester does not.

  • Set ticket status

    read back

    zendesk-set-ticket-status

    Set one ticket's status to open, pending, hold or solved. Solving it can email the requester through the account's triggers, and Zendesk closes a solved ticket later by its own automations.

  • Set ticket priority

    read back

    zendesk-set-ticket-priority

    Set one ticket's priority to low, normal, high or urgent.

  • Assign ticket

    read back

    zendesk-assign-ticket

    Assign one ticket to an agent, and optionally move it to a group the agent belongs to. The agent must belong to the ticket's group, or to the group given.

  • Add ticket tags

    read back

    zendesk-add-ticket-tags

    Add one tag to a ticket. The ticket's other tags stay.

Reads

  • Search tickets

    zendesk-search-tickets

    Search tickets with Zendesk's search syntax, e.g. status<solved requester:dana@example.com tags:billing. Returns up to 10 tickets a page in results, with count and next_page. Sort by updated_at, created_at, priority, status or ticket_type (relevance when left out). Pass page for the next page. Zendesk returns at most 1000 results a query; narrow it with a date such as created>2026-10-01. New or changed tickets can take a few minutes to appear in search.

  • List tickets

    zendesk-list-tickets

    List the account's tickets, 10 a page, in ascending id order unless sort is given. Each ticket has id, subject, status, priority, type, requester_id, assignee_id, group_id, tags and dates. When meta.has_more is true, pass meta.after_cursor as cursor for the next page. Archived tickets (closed for more than 120 days) are left out by Zendesk. Use search-tickets to filter.

  • Get ticket

    zendesk-get-ticket

    Get one ticket: subject, description (the opening comment), status, priority, type, requester_id, assignee_id, group_id, organization_id, tags, custom fields and dates. Read its conversation with list-ticket-comments.

  • List ticket comments

    zendesk-list-ticket-comments

    List a ticket's comments, 10 a page, oldest to newest unless sort is -created_at. Each comment has id, author_id, body, html_body, public (false for an internal note), attachments and created_at. When meta.has_more is true, pass meta.after_cursor as cursor for the next page.

  • List user tickets

    zendesk-list-user-tickets

    List the tickets one user requested, 10 a page, by ticket id. Use it to see a customer's history. When meta.has_more is true, pass meta.after_cursor as cursor for the next page. Archived tickets are left out by Zendesk.

  • Search users

    zendesk-search-users

    Find users (customers and agents) by name, email or other text, e.g. an email address or role:agent. Returns up to 20 users a page in users, each with id, name, email, role, organization_id and tags, with count and next_page. Pass page for the next page.

  • Get user

    zendesk-get-user

    Get one user: name, email, role (end-user, agent or admin), organization_id, time zone, locale, tags, whether suspended, and custom user fields.

  • List groups

    zendesk-list-groups

    List the account's agent groups, 50 a page, each with id, name, description and whether it is the default group. Use a group id with assign-ticket or create-ticket. When meta.has_more is true, pass meta.after_cursor as cursor for the next page.

How do users connect? Each one brings their own Zendesk.

  1. 1.Call for the userYour server invokes the action for the signed-in user. Without a Zendesk connection, the SDK throws EndUserNotConnectedError with a connect link.
  2. 2.The user pastes a keyThe link opens a form that shows where in Zendesk's settings to create the key. The link lasts 10 minutes and works once.
  3. 3.Anlyon checks itThe key is checked with Zendesk before it is kept, and bound to {subdomain}.zendesk.com. It is never shown back.
  4. 4.Your server confirmsYour server confirms the connection for the user who is signed in, and the call goes through.

Guardrails. Suggested limits and approvals, for you to review.

Suggested limits

  • 50 tickets created a day
  • 200 public replies a day
  • 300 internal notes a day
  • 300 status changes a day
  • 200 priority changes a day
  • 200 assignments a day
  • 300 tags added a day

Suggested approvals

  • A person approves replying to a requester
  • A person approves creating a ticket
  • A person approves solving a ticket

What the key must allow

  • An API token, with token access turned on
  • Your Zendesk subdomain and the email of the agent the calls act as

Good to know

  • The calls act as the agent whose email you give, so pick one whose role fits.
  • A closed ticket cannot be changed. An account trigger can change a status again after an update.

For your own account

  1. 1.In Zendesk, open Admin Center, Apps and integrations, APIs, Zendesk API, turn on token access and add a token.
  2. 2.In Anlyon, open Actions, then Integrations, and choose Zendesk.
  3. 3.Enter your subdomain (acme for acme.zendesk.com), an agent's email and the token.
  4. 4.Anlyon checks them with Zendesk before storing them. They become a secret named ZENDESK, bound to your subdomain's host.

Zendesk in your code. For one of your users, or for your own account.

Act for one of your users from your server, or connect your company's own Zendesk with the CLI.

zendesk.ts
import { Client, EndUserNotConnectedError } from "@anlyonhq/sdk";const anlyon = new Client({ apiKey: process.env.ANLYON_API_KEY! });try {  const { data } = await anlyon    .forUser(session.userId)    .actions.invoke("zendesk-add-internal-note", {      ticket_id: "35436",      body: "Refund issued, waiting on the bank."    });  return { status: "done", grade: data.grade };} catch (error) {  if (error instanceof EndUserNotConnectedError) {    // The user connects their own Zendesk, then you call again.    return { status: "connect_required", url: error.connectUrl };  }  throw error;}

Let your agent act for your users, safely.

A few lines of server code, then send a user a connect link. Nothing to host.

$ claude mcp add --transport http anlyon https://api.anlyon.com/mcp