Skip to main content
Glama

zendesk-mcp

A self-hosted MCP server that connects AI assistants (Claude Code, Codex, Cursor) to your Zendesk account. 14 curated tools over the official Zendesk Support and Help Center APIs. No third-party services in between: your API token talks directly to Zendesk from your machine.

How it works: server and client are two different things

There are two pieces, with different requirements:

  • The server is this project: a small Python process that holds your Zendesk credentials and makes the API calls. It needs Python, uv and a Zendesk API token.

  • The client is your AI assistant (Claude Code, Codex or Cursor). It needs no Python and never sees your Zendesk token directly; it just calls the server's tools.

In the default local setup, your machine plays both roles at once: the client starts the server automatically in the background each session (you never run the server manually) and talks to it over stdio. Nothing is exposed to the network.

[ your machine ]                                [ internet ]
Client (Claude Code / Codex / Cursor)
   └─ starts → Server (this repo, Python)  ──→  Zendesk API
                 holds ZENDESK_API_TOKEN

Later, the server can move to its own machine (a VPS) and serve several people; the requirements split accordingly. See "Remote deployment" below.

Related MCP server: Zendesk MCP Server

Tools

Tool

Type

What it does

search_tickets

read

Search tickets with Zendesk query syntax

get_ticket

read

Full detail of one ticket

get_ticket_comments

read

Conversation thread (replies + internal notes)

get_user

read

User by ID

search_users

read

Find users by name or email

search_organizations

read

Find organizations by name

list_org_tickets

read

All tickets of one organization

search_articles

read

Search Help Center knowledge base

get_article

read

Full article body

create_ticket

write

Create a ticket (auto-creates requester if new)

update_ticket

write

Change status, priority, assignee, tags

add_ticket_comment

write

Internal note (default) or public reply

create_or_update_user

write

Idempotent upsert by email or external_id

create_or_update_organization

write

Idempotent upsert by external_id

Server setup (your machine)

These requirements are for the server role of your machine.

  1. Python 3.10+ and uv (a fast Python package manager):

    # Windows
    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
    # macOS / Linux
    curl -LsSf https://astral.sh/uv/install.sh | sh
  2. A Zendesk API token: in Zendesk, go to Admin Center > Apps and integrations > APIs > Zendesk API > Add API token. Copy it immediately (it is shown only once). Make sure "Token access" is enabled on that page. Reference: https://support.zendesk.com/hc/en-us/articles/4408889192858

    The token inherits ALL permissions of the user who created it. Prefer creating it from a user with agent (not admin) role if you can.

Then install:

git clone https://github.com/miguel-escribano/zendesk-mcp.git
cd zendesk-mcp
uv sync

That is all for the server. You never start it manually in local use: the client does it for you.

Client setup (connect your assistant)

These steps are for the client role: telling your AI assistant where the server lives and which credentials to hand it at startup. The client itself needs no Python.

You need three values: your subdomain (yourcompany if your Zendesk is yourcompany.zendesk.com), the email of the Zendesk user that owns the token, and the token itself.

Claude Code

claude mcp add zendesk \
  -e ZENDESK_SUBDOMAIN=yourcompany \
  -e ZENDESK_EMAIL=you@yourcompany.com \
  -e ZENDESK_API_TOKEN=your-token \
  -- uv run --directory /absolute/path/to/zendesk-mcp zendesk-mcp

Codex

Add to ~/.codex/config.toml:

[mcp_servers.zendesk]
command = "uv"
args = ["run", "--directory", "/absolute/path/to/zendesk-mcp", "zendesk-mcp"]

[mcp_servers.zendesk.env]
ZENDESK_SUBDOMAIN = "yourcompany"
ZENDESK_EMAIL = "you@yourcompany.com"
ZENDESK_API_TOKEN = "your-token"

Cursor

Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "zendesk": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/zendesk-mcp", "zendesk-mcp"],
      "env": {
        "ZENDESK_SUBDOMAIN": "yourcompany",
        "ZENDESK_EMAIL": "you@yourcompany.com",
        "ZENDESK_API_TOKEN": "your-token"
      }
    }
  }
}

On Windows, use a full path like C:/projects/zendesk-mcp in the --directory argument.

Test it: restart your client and ask: "search my open Zendesk tickets". You should see results from your account.

Supervised use

This server exposes write tools (create_ticket, update_ticket, add_ticket_comment, upserts) with no restrictions of its own. It is designed for supervised, human-in-the-loop use: your MCP client asks for approval before each write call (Claude Code does this by default). Do not wire it into unattended/autonomous agents without adding your own safeguards. add_ticket_comment defaults to internal notes; customer-visible replies require public=true explicitly.

Privacy note

Every tool call puts ticket content, including end-customer names, emails and message bodies, into the context of the LLM you are using. Review your privacy obligations (e.g. GDPR, customer DPAs) before using this with real customer data.

Multiple Zendesk accounts

The server handles one Zendesk instance per process by design. For several accounts, register the server multiple times in your client with different names and env vars, e.g. zendesk-acme and zendesk-globex, each with its own ZENDESK_SUBDOMAIN / ZENDESK_EMAIL / ZENDESK_API_TOKEN.

Remote deployment (optional)

This is where the two roles physically split: the server (Python, uv, Zendesk token) moves to a VPS, and each teammate's machine keeps only the client role, with zero local installs. The same code runs as a shared HTTP server:

export ZENDESK_SUBDOMAIN=... ZENDESK_EMAIL=... ZENDESK_API_TOKEN=...
export MCP_TRANSPORT=http MCP_HTTP_PORT=8000
export MCP_AUTH_TOKEN=$(openssl rand -hex 32)   # clients must send this as a Bearer token
uv run zendesk-mcp

The server binds to 127.0.0.1 and refuses to start without MCP_AUTH_TOKEN. Put a reverse proxy with TLS in front (Caddy, nginx) and be aware that your Zendesk token now lives on that server: use a dedicated Zendesk user, restrict access, rotate the token periodically. Clients connect with:

claude mcp add --transport http zendesk https://your-host/mcp --header "Authorization: Bearer <MCP_AUTH_TOKEN>"

For multi-user OAuth instead of a shared bearer token, see FastMCP auth providers (https://gofastmcp.com); not needed for a small trusted team.

Troubleshooting

  • 401 Unauthorized: wrong email or token, or token access disabled in Admin Center > Apps and integrations > APIs.

  • 403 Forbidden: the Zendesk user owning the token lacks permission for that action.

  • Server not found / spawn error: check the --directory path is absolute and uv is on your PATH (restart the terminal after installing uv).

  • Inspect tools manually: npx @modelcontextprotocol/inspector uv run --directory /path/to/zendesk-mcp zendesk-mcp

Alternatives

If you prefer not to self-host, Swifteq offers a managed Zendesk MCP/AI integration (https://swifteq.com/zendesk-chatgpt-app and their free MCP Server app on the Zendesk Marketplace). Trade-off: zero maintenance, but a third party sits between your AI client and your Zendesk data.

License

MIT

Available Tools

14 tools
add_ticket_commentA

WRITE: Add a comment to a ticket (PUT /api/v2/tickets/{id} with a comment object). Defaults to an internal note; set public=true only to send a customer-visible reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
publicNofalse = internal note (default, safe); true = reply VISIBLE TO THE CUSTOMER
ticket_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states 'WRITE' to signal mutation, explains the default internal-note behavior, and warns that public=true is for customer-visible replies. It also specifies the exact API call, adding transparency. It does not mention permissions or side effects beyond visibility, but such details are not essential here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence starting with 'WRITE' and provides the core information without waste. The inclusion of the API endpoint is concise and useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is an output schema (not shown), so return values are already covered. The description sufficiently covers the write nature, default behavior, and the caution about public visibility. It is complete enough for an agent to select and invoke the tool correctly, though it could optionally mention authentication prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers only 33% of parameters (only public has a description). The tool description does not explicitly explain body or ticket_id, though their names are self-explanatory. It does add context to public by saying 'set public=true only to send a customer-visible reply,' which reinforces the schema description. Overall, it adds some semantic value but does not fully compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a comment to a ticket' with a specific verb and resource, and includes the HTTP endpoint (PUT /api/v2/tickets/{id}). This distinguishes it from sibling tools like create_ticket, update_ticket, and get_ticket_comments by specifying the exact action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: 'Defaults to an internal note; set public=true only to send a customer-visible reply.' This tells the agent when to use the default vs. the public flag. It doesn't name alternative tools but the context is clear for this operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_or_update_organizationA

WRITE: Create an organization, or update it if one matches by external_id (POST /api/v2/organizations/create_or_update). Idempotent.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesOrganization name (must be unique in Zendesk)
tagsNo
notesNo
external_idNoID from an external system, used for matching (case-insensitive). If an org with this external_id exists it is updated, else created.
domain_namesNoEmail domains; Zendesk auto-assigns users by domain

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses 'WRITE' (mutation) and 'Idempotent,' which is meaningful behavioral context beyond a simple create/update. However, it omits details like permission requirements, reversibility, or what happens with null external_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with 'WRITE,' and contains zero filler. Every word contributes to understanding the tool's purpose and behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The core logic is clear and an output schema exists, so return values need not be explained. However, the description does not address edge cases like null external_id, multiple matches, or the uniqueness constraint on name, leaving some gaps for a 5-parameter mutation tool with no annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 60%, leaving tags and notes undocumented in both schema and description. The tool description itself does not add any parameter meaning beyond what the schema already provides, failing to compensate for the gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Create an organization, or update it if one matches by external_id.' It specifies the resource (organization) and the distinguishing upsert behavior, setting it apart from sibling tools like create_or_update_user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you want to create or update an org by external_id) and notes idempotency, which is a strong usage hint. It does not explicitly name alternatives or exclusions, but the context is clear given the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_or_update_userA

WRITE: Create a user, or update it if one already exists with the same email or external_id (POST /api/v2/users/create_or_update). Idempotent: cannot create duplicates.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
roleNo
emailYes
phoneNo
external_idNoUnique ID from an external system, used for matching
organization_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of disclosing side effects. It openly labels the operation as WRITE, notes idempotency, and states the deduplication rule ('cannot create duplicates'). It does not specify whether update replaces all fields or only provided ones, which is a notable gap, but the core behavioral traits are well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the WRITE label and action, and every phrase adds value. It efficiently conveys purpose, matching criteria, endpoint, and idempotency without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and the tool handles a common upsert pattern, the description covers the essential purpose, matching keys, and safety properties. It falls short only in not clarifying update semantics for omitted fields, which is a meaningful but not fatal omission for this complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17%, so the description must compensate. It adds meaning by identifying email and external_id as matching keys, and it implies the upsert logic. However, it does not explain the roles of name, role, phone, or organization_id beyond their obvious names, leaving several parameters under-documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's verb and resource: 'Create a user, or update it if one already exists' with a specific endpoint. It distinguishes itself from siblings like get_user and search_users by describing upsert semantics and matching keys (email or external_id).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: use this tool to create or update a user based on email or external_id, and the idempotency guarantee is stated. However, it does not explicitly mention when not to use it or provide named alternatives, though the sibling list makes the distinction implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_ticketC

WRITE: Create a new ticket (POST /api/v2/tickets).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
typeNo
subjectYes
priorityNo
assignee_idNo
comment_bodyYesFirst comment / ticket description
requester_emailNoEnd user email. If the user does not exist, Zendesk creates it automatically.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only indicates it's a write operation via 'WRITE' and 'POST', but doesn't explain permissions, side effects, auto-creation of users, or response behavior. This is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence, front-loaded with 'WRITE:' and the action. Every word is purposeful, no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description is overly terse for a create operation with 7 parameters and no annotations. It omits context about required permissions, side effects (like auto-creating the requester user), and any operational caveats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter semantics. Schema coverage is only 29%, and the description doesn't compensate, leaving most parameters (tags, type, subject, priority, assignee_id) without explanatory context beyond their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function ('Create a new ticket') with a specific verb and resource, and includes the HTTP endpoint. It distinguishes from siblings like update_ticket and add_ticket_comment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this vs. alternatives; the description only provides a terse statement and endpoint without mentioning update_ticket or any conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_articleA

Get one Help Center article including its full HTML body (GET /api/v2/help_center/articles/{id}).

ParametersJSON Schema
NameRequiredDescriptionDefault
article_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool returns the full HTML body, which is a useful behavioral detail. It also shows a GET method, implying a read-only operation, but with no annotations it does not address auth, rate limits, or error behavior. The description carries only some of the transparency burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the action and resource, followed by the endpoint. Every word earns its place, with no unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity—one parameter, an output schema, and a straightforward GET operation—the short description is largely sufficient. It covers the core purpose and response content, though it omits error handling or comparison to search_articles, which would be nice but not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema defines article_id as an integer with no description, and the description does not explicitly explain the parameter. However, the endpoint includes {id}, and the parameter name is self-explanatory, so the description adds minimal contextual meaning beyond the schema. For a single obvious parameter, this is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get one Help Center article' with a specific verb and resource, and includes the full HTTP endpoint. It distinguishes itself from search_articles by specifying a single article by ID, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have a specific article ID, and the endpoint reinforces that. However, it does not explicitly contrast with search_articles or state when not to use this tool, so guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ticketA

Get full details of one ticket (GET /api/v2/tickets/{id}).

ParametersJSON Schema
NameRequiredDescriptionDefault
ticket_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that the operation is a read-only GET request, which is useful context, but it does not disclose any error conditions, authentication requirements, or other caveats beyond the basic retrieval action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence that front-loads the action and resource. The API path is included without any wasted words, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-id tool, the description covers the essential purpose and endpoint, and the presence of an output schema handles return value documentation. However, it lacks explicit guidance on when to use this tool versus sibling tools, which is a minor gap given the tool's simple nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema shows a single required integer 'ticket_id' with no description. The description's REST path 'tickets/{id}' implies that the parameter is the ticket's unique identifier, adding a small amount of semantic meaning. Since there is only one obvious parameter, this minimal linkage is sufficient but not rich.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Get full details of one ticket', which uses a specific verb and resource, clearly distinguishing it from sibling tools like search_tickets (multiple tickets) and create/update tools. The inclusion of the REST endpoint (GET /api/v2/tickets/{id}) further clarifies the action and resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need complete details of a specific ticket, but it does not explicitly state when to use this tool over alternatives like get_ticket_comments or search_tickets. No when-not-to-use scenarios or alternative recommendations are provided, leaving the context implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ticket_commentsA

Get the conversation thread of a ticket, public replies and internal notes, newest first (GET /api/v2/tickets/{id}/comments).

ParametersJSON Schema
NameRequiredDescriptionDefault
per_pageNo
ticket_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses that both public replies and internal notes are included and that results are ordered newest first. It also provides the API endpoint, giving additional context about execution. This goes beyond merely stating 'get comments'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the purpose. It is concise with no filler or redundant information. Including the API endpoint adds useful context without unnecessary length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the presence of an output schema (not shown), the description adequately covers the core behavior: retrieving a conversation thread with public and internal notes, newest first. It does not mention pagination behavior beyond the schema, but the schema already includes per_page defaults. Overall, the description is sufficient for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 2 parameters with 0% description coverage, so the description must compensate. While the endpoint path '/api/v2/tickets/{id}/comments' implicitly maps 'id' to 'ticket_id', the 'per_page' parameter is completely unexplained, including its default and max values. The description adds minimal insight beyond the raw parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('Get') and resource ('conversation thread of a ticket'), and specifies the contents ('public replies and internal notes') and ordering ('newest first'). This distinguishes it from sibling tools like 'get_ticket' (likely ticket details) and 'add_ticket_comment' (writes).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use this to retrieve the comment thread for a ticket. It does not explicitly mention alternatives or exclusions, but the wording 'Get the conversation thread' implies the appropriate use case. There is no misleading guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_userA

Get a Zendesk user by ID (GET /api/v2/users/{id}). Use to resolve requester_id / assignee_id values returned by ticket tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the HTTP method (GET), implying a safe read operation, and explains the intended purpose. However, it does not address behaviors like 404 responses or authorization, though for a simple read-by-ID tool this is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, followed by a practical use case. No redundancy or filler; every word contributes to understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one integer parameter, GET operation) and the presence of an output schema, the description is complete. It provides the endpoint, purpose, and use case without needing to explain return values. No further context is necessary for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must add meaning. It clarifies that the user_id parameter corresponds to requester_id/assignee_id values from tickets, linking the parameter to its real-world usage. The endpoint template also confirms the parameter mapping, adding value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a Zendesk user by ID' and includes the exact REST endpoint, making the operation unambiguous. It distinguishes itself from sibling tools like search_users by emphasizing ID-based lookup and connecting it to ticket tool outputs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Use to resolve requester_id / assignee_id values returned by ticket tools' gives a specific, practical context for when the tool should be used. It does not explicitly name alternatives or exclusions, but the guidance is clear enough to prevent misuse with search tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_org_ticketsA

List all tickets of one organization, the account-health view (GET /api/v2/organizations/{id}/tickets). Use search_organizations first to get the organization_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
per_pageNo
organization_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral transparency burden. It discloses that the tool returns all tickets for an organization and identifies the 'account-health view', but it does not mention pagination behavior, authentication needs, rate limits, or how the result is structured. This is minimal but meaningful context beyond a tautology.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with key information front-loaded. Every clause adds value: the first defines scope and purpose, the second provides a usage prerequisite. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with an output schema present, the description is largely complete: it gives purpose, scope, and a prerequisite workflow. The only notable gap is that it does not explain pagination behavior or warn about potentially large result sets, but the page/per_page parameters and output schema partially cover this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for parameter meaning. It explains how to obtain organization_id via search_organizations, but page and per_page are left entirely to the schema's defaults and bounds without any added context about their practical use. This is only partial compensation for one of three parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (List), the resource (tickets), and the scope (all tickets of one organization). It also names the endpoint and distinguishes this tool from siblings like search_tickets by emphasizing the organization-level account-health view.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs the agent to call search_organizations first to obtain the organization_id, providing a clear prerequisite workflow. It does not explicitly state when not to use this tool versus search_tickets, but the 'all tickets of one organization' scope gives strong contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_articlesA

Search Help Center knowledge base articles by relevance (GET /api/v2/help_center/articles/search). Use before answering questions that the knowledge base may already cover.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesFree-text search string
localeNoe.g. 'en-us', 'es'. Use '*' for all locales. Omit for default.
per_pageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It mentions 'by relevance' and the GET method, implying a read-only search operation, but does not explicitly state that it is non-destructive or discuss rate limits or other behavioral traits. Some transparency is provided, but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first identifies the action and endpoint, the second provides usage guidance. It is concise, front-loaded, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, an output schema exists, and parameters are reasonably self-explanatory. The description sufficiently supports selection and invocation, though it lacks explicit mention of pagination or ordering behavior, which is not critical given the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67% (query and locale have descriptions), and the description adds 'by relevance' which relates to query semantics. However, it does not detail per_page or locale behavior beyond the schema. With moderate schema coverage, the description offers minimal additional parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Search' and clearly identifies the resource as 'Help Center knowledge base articles', distinguishing it from sibling tools like search_tickets and search_users. The HTTP GET endpoint further clarifies the exact API.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit context: 'Use before answering questions that the knowledge base may already cover.' This tells the agent when to invoke this tool, though it doesn't explicitly mention alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_organizationsA

Find organizations by name (GET /api/v2/organizations/autocomplete). Returns organizations whose names begin with the given value.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesOrganization name or its beginning

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states the HTTP method (GET) and the return behavior ('Returns organizations whose names begin with...'), conveying a read-only operation. It adds useful context about prefix matching beyond the schema, though it does not discuss pagination or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action, includes the endpoint and precise matching rule. No redundant information, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter search tool with an output schema, the description covers the core purpose and matching behavior. Minor gaps like case sensitivity or pagination are not critical for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description for 'name' is somewhat vague ('Organization name or its beginning'), but the tool description clarifies that the parameter is the prefix for matching. This adds meaningful semantics beyond the schema, and the schema coverage is 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'find' with resource 'organizations' and clarifies the matching behavior ('names begin with the given value'). It clearly distinguishes itself from sibling tools like search_users by scoping to organizations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the tool is for searching organizations by name prefix, providing clear context for when to use it. However, it does not explicitly mention alternatives or exclusion cases, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_ticketsA

Search tickets (GET /api/v2/search). Use this first to find tickets, then get_ticket / get_ticket_comments for detail. Returns slim tickets. API caps results at 1000 per query; narrow with date ranges if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
queryYesZendesk search query, e.g. 'status:open priority:high', 'requester:user@example.com created>2026-01-01'. 'type:ticket' is added automatically.
sort_byNoupdated_at
per_pageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses key behavioral traits: 'Returns slim tickets' and 'API caps results at 1000 per query', which are important for expectation-setting. It does not cover authentication or rate limits but provides meaningful context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with purpose, followed by usage guidance and limitation. Every sentence contributes unique value without redundancy, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description need not explain return values. It covers purpose, usage, and a key API limitation. However, it omits details about pagination behavior and sort options, which could be important for complex queries. Still, the schema partially compensates, making the overall description reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only the query parameter is described), and the tool description does not compensate. It mentions 'date ranges' as a narrowing strategy but does not explain page, per_page, or sort_by meaning or usage. The defaults and enum in the schema are present, but the description adds little semantic value for the undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'Search tickets' and includes the endpoint 'GET /api/v2/search', clearly identifying the action and resource. It differentiates from sibling search tools by focusing on tickets and explicitly references get_ticket / get_ticket_comments for detail, establishing a distinct purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to 'Use this first to find tickets, then get_ticket / get_ticket_comments for detail', providing clear when-to-use guidance and naming alternatives. Also advises to narrow with date ranges when needed, covering a practical usage scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_usersA

Search users by name or email (GET /api/v2/users/search).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesName, email, or partial match

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the method (GET), indicating a read-only operation. However, it does not mention additional behavioral aspects such as pagination, result limits, authentication requirements, or whether partial matches return multiple results. Some transparency is provided via the HTTP method, but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the primary action and includes the endpoint as supplementary context. It is succinct and every element serves a purpose, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter) and has an output schema, so return values are covered by the schema. The description identifies the search criteria and endpoint. It does not mention potential edge cases (e.g., exact vs fuzzy matching), but given the output schema and simplicity, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100% with the 'query' parameter described as 'Name, email, or partial match'. The tool description largely repeats this information ('by name or email') without adding extra meaning. The baseline of 3 applies because the schema already documents the parameter thoroughly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Search users') and the query criteria ('by name or email'). It also includes the HTTP method and endpoint (GET /api/v2/users/search), which adds specificity. This distinguishes it from sibling tools like get_user (retrieval by ID) and search_organizations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when searching by name/email) but does not explicitly state exclusions or alternatives. No mention of 'use get_user for exact ID lookup' or 'for organization search use search_organizations'. Usage guidance is implied but not explicitly contrasted with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_ticketA

WRITE: Update ticket fields: status, priority, assignee, tags (PUT /api/v2/tickets/{id}). Does not add comments; use add_ticket_comment for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoReplaces the FULL tag list (Zendesk set behavior)
statusNo
priorityNo
ticket_idYes
assignee_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the behavioral burden. It does label the operation as 'WRITE' and states the HTTP method, but it does not disclose whether fields are merged or fully replaced, nor what happens when a field is set to null. It does explicitly note the non-comment behavior, which is useful, but leaves other side effects unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the operation type ('WRITE') and a clear list of fields. It wastes no words and provides the key differentiator in the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward update tool with an output schema and a sibling list, the description is largely sufficient. It gives the endpoint, the fields, and the key exclusion (comments). The main gap is the lack of explanation about merge-vs-replace semantics and null handling, which could affect usage, but the schema's tag description partially covers one aspect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% (only the 'tags' parameter has a description in the schema), so the description is expected to compensate. It mentions the field names 'status, priority, assignee, tags' but does not explain their semantics, types, or accepted values. There is also a mismatch: the description says 'assignee' while the schema parameter is 'assignee_id', and it does not clarify that this is a user ID, nor does it describe the enum values for status/priority.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Update') and resource ('ticket fields: status, priority, assignee, tags'), and clearly distinguishes what it does from the sibling tool add_ticket_comment by explicitly stating 'Does not add comments' and directing to that alternative. It also states the HTTP method and endpoint, making the function unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states when to use the tool (to update ticket fields) and explicitly states when not to use it (for adding comments), providing the exact sibling tool to use instead (add_ticket_comment). This gives both an inclusion and exclusion criterion, which is strong guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 14 tool updatesv0.1.0
    • First observedadd_ticket_comment
    • First observedcreate_or_update_organization
    • First observedcreate_or_update_user
    • First observedcreate_ticket
    • First observedget_article
    • First observedget_ticket
    • First observedget_ticket_comments
    • First observedget_user
    • First observedlist_org_tickets
    • First observedsearch_articles
    • First observedsearch_organizations
    • First observedsearch_tickets
    • First observedsearch_users
    • First observedupdate_ticket

TDQS

A4/5.0

Scored across 14 tools

Disambiguation5/5

Each tool targets a distinct resource-action pair: ticket creation/update/comment/search/get/comments, user search/get/upsert, org search/upsert/ticket-listing, and article search/get. No overlapping purposes; even search_tickets vs list_org_tickets have clearly different scopes.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (create_ticket, search_users, get_article, list_org_tickets, etc.). The verb prefixes are uniform (create, update, add, get, search, list), with only minor abbreviation like 'org' that doesn't break the pattern.

Tool Count5/5

14 tools is well-scoped for a Zendesk server, covering four core entities (tickets, users, organizations, articles) with essential operations. Each tool earns its place without redundancy or bloat.

Completeness4/5

The surface covers the main workflows: full ticket lifecycle (create, update, comment, search, get, comments), user lookup/upsert, organization search/upsert and ticket listing, plus article search/get. Minor gaps like delete operations or get_organization by ID exist, but agents can work around them with current tools.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    This server provides a comprehensive integration with Zendesk. Retrieving and managing tickets and comments. Ticket analyzes and response drafting. Access to help center articles as knowledge base.
    7
    119
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Enables comprehensive management of Zendesk tickets, comments, and Help Center articles through tools for searching, creating, and updating content. It includes specialized prompts for ticket analysis and response drafting to streamline support workflows.
    7
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to search tickets, manage tags, create tickets, inspect automations, and more in Zendesk.
    MIT