Skip to main content
Glama
Zendesk MCP Server by Fruggr

Zendesk MCP Server by Fruggr

Zendesk MCP Server

Glama score MCP Registry npm version License: MIT Node.js Container base

A Model Context Protocol (MCP) server that puts Zendesk inside your AI assistant, for both sides of the conversation.

For agents: it finds answers in the Help Center; drafts, updates and translates articles while keeping the languages in sync; and handles Support tickets end to end, comments, triage and image attachments included.

For your customers: the Help Center's "Submit a request" form, in plain language: pick the request, answer its questions, follow the replies, close it. See End-user mode.

For your Zendesk admins: teach the assistant how your team works, with house tone, lexicon, procedures and ready-made workflows, from a dedicated back-office, with no redeploy. See Context and customizations.

It all happens in plain language, without switching apps.

It does roughly what the Zendesk agent for Microsoft 365 Copilot does, minus the tie to one vendor: it drops into any MCP client (Claude Desktop, Claude Code, Cursor, VS Code, and the rest). And it always acts with each user's own Zendesk permissions, never a shared admin key.

What your assistant can do

Ask in natural language; the assistant works out the context and the intent, then calls the right tools on your behalf.

  • Find answers in the Help Center. "How do I request a software license?" or "what's the time-off policy?" surfaces the right article, matched by meaning rather than by keyword.

  • Create, view and update tickets without leaving the conversation: open a ticket, check its status, add a public reply or an internal note, change the priority or the assignee, mark it solved.

  • Summarize a ticket for a report or a quick decision. The assistant pulls the details and the full comment thread and gives you the gist in a sentence.

  • Read the screenshots and photos attached to a ticket. Error dialogs, UI captures and product photos are handed to your assistant's own model as images, so it can describe them or act on what they show.

  • Search and triage your queue in plain language: "show me my open tickets about billing from this week."

  • Draft and maintain knowledge-base articles. You can write a new one, or revise a large one a single section at a time, so the whole HTML body never has to round-trip through the model.

  • Follow your team's playbook. Instructions, prompts and skills written by your admins reach every user's assistant, whatever MCP client they use.

  • Submit and follow a request as a customer, not an agent. Choose between the kinds of request the vendor offers, answer only the questions that form asks, and then track it: what was replied, what you replied, and whether it's done.

Related MCP server: Zendesk MCP Server

Why this server

Most Zendesk integrations run on a shared admin API key, which hands every user full access to every ticket, and bolt on a fixed set of tools. This one is built differently.

  • Per-user authentication, OAuth only. Both transports use OAuth 2.1 PKCE: each user signs in with their own Zendesk credentials, so the assistant sees and touches exactly what that person is allowed to, the same scoping you get by signing into Zendesk directly. Static API tokens are deliberately not supported (why).

  • Two audiences, one server. Because auth is per-user rather than a shared admin key, the same install serves your agents and your customers — the end-user surface is a namespace you switch on, speaking the API path Zendesk reserves for requesters. Most Zendesk MCP servers are agent-only by construction.

  • Section-based article editing. For large Help Center articles, read and rewrite one section at a time (parsed by h1/h2/h3 headings) instead of shuffling the full HTML body through the assistant. On a targeted edit that cuts tokens by a factor of 10 to 100.

  • Native multimodal attachments. Ticket images come back as native MCP image content, so the client's own model (Claude, GPT, Gemini, whichever) sees the pixels directly. No server-side vision model, no extra API key, and nothing tying you to one provider. Non-image attachments come back as text references, and both image caps are configurable.

  • A tool surface you can cap. Expose every operation as its own tool, group them into namespace proxies, or collapse everything into a single unified tool. You can also filter by namespace or down to read-only operations, so each context loads only the surface it needs (see Tool surface).

  • Your practices ship with the server. Most teams hand-distribute a skill or a rules file per AI client. Here admins author instructions, prompts and skills once, inside the server, behind a back-office reserved to Zendesk admins, and every MCP client receives them. Skills fall back to prompts on clients that don't support them yet.

  • Two deployment shapes, same auth story, on a lean stack. Run it on your laptop as a stdio MCP server, or deploy it as a private remote MCP server reached over HTTP, each client carrying its own user's token; underneath, the official MCP TypeScript SDK plus zod, speaking to the Zendesk Support and Help Center (Guide) APIs.

Look elsewhere when:

  • You need Zendesk products outside Support and Guide (Talk, Explore analytics, Sell). Those endpoints aren't covered.

  • You need a single shared service account, or static API-token auth. This server supports neither, by design (see below).

What this server does not do

There is no API-token authentication. The server speaks OAuth 2.1 PKCE and nothing else: no ZENDESK_EMAIL + ZENDESK_API_TOKEN (Basic auth) mode, in any transport. That is deliberate, for two reasons.

  1. API tokens are insufficiently secure. A Zendesk API token is a long-lived, static, shared secret that carries the full rights of the user who issued it. There is no per-user scoping, no short expiry, and no per-user consent or revocation. OAuth 2.1 PKCE issues per-user, revocable tokens instead.

  2. API tokens don't scale. A single static credential can't attribute actions to individual users, and it can't be revoked granularly. It also makes a multi-user remote deployment unsafe: over HTTP it would expose the issuing user's rights to every caller.

If you specifically need an API-token or service-account mode (headless CI with a shared account, say), use one of the other Zendesk MCP servers that support it. A few are listed under Inspiration & related projects.

Quick start: local (stdio)

The default shape: one developer, one Zendesk account, OAuth 2.1 PKCE in the browser. You need Node.js >= 22 and a Zendesk instance (Support or Suite).

Install

# Run without installing
npx -y @fruggr/zendesk-mcp-server <your-subdomain>

# Or install globally
npm install -g @fruggr/zendesk-mcp-server
zendesk-mcp-server <your-subdomain>

Signing in needs a Zendesk OAuth client, so register one first (next section).

Zendesk OAuth setup

  1. Go to Admin Center → Apps and integrations → APIs → OAuth Clients

  2. Create a public client:

    • Identifier: <your-subdomain>_zendesk (or set ZENDESK_OAUTH_CLIENT_ID)

    • Redirect URL: http://localhost:27439/callback (change the port to match OAUTH_CALLBACK_PORT / --callback-port if you override it; Zendesk accepts several redirect URLs, one per line)

If the client restricts its allowed scopes, it needs read — plus write unless the server runs with --read-only, which asks Zendesk for the read scope alone.

On the first tool call the server starts the sign-in flow: it opens a browser window and returns the authorize URL in a tool message. The call does not block waiting for sign-in, so authenticate in the browser and then retry the request. The token is persisted to an owner-only file and reused across restarts, so you don't authenticate again every time your MCP client respawns the server (path and overrides: OAUTH_TOKEN_FILE). Several instances can run side by side — a read-write one and a --read-only one, say — without trading credentials.

MCP client wiring

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "zendesk": {
      "command": "npx",
      "args": ["-y", "@fruggr/zendesk-mcp-server", "<your-subdomain>", "--mode", "single"]
    }
  }
}
claude mcp add zendesk -- npx -y @fruggr/zendesk-mcp-server <your-subdomain> --mode single

Add to your .vscode/mcp.json:

{
  "servers": {
    "zendesk": {
      "command": "npx",
      "args": ["-y", "@fruggr/zendesk-mcp-server", "<your-subdomain>", "--mode", "single"]
    }
  }
}

Something not working? See Troubleshooting.

Quick start: remote (HTTP)

Experimental. The HTTP transport ships, but it has not yet been exercised end-to-end against a real Zendesk tenant from every MCP client. Local stdio is the supported path.

You can also deploy a private remote MCP server for one Zendesk account. It is its own OAuth authorization server: web clients such as claude.ai and ChatGPT add it by URL and register themselves, each user signs in to Zendesk through it, and no shared admin key or per-client Zendesk setup is involved. Each release also ships a hardened, distroless container image for it (ghcr.io/fruggr/zendesk-mcp-server), signed and attested. The full guide covers the image, the one redirect URL to add to your Zendesk OAuth client, the master secret and grant store, --public-url behind a reverse proxy, trusted clients, MCP client wiring, CORS and what stays the operator's job: docs/http-deployment.md.

Tool surface

Tools are grouped into namespaces: Tickets, Help Center, Users & Organizations, Search, Connector preferences — this server's own per-user settings, such as SLA alert thresholds, never written to Zendesk — and Requests — the end-user surface, which is opt-in and covered under End-user mode. The server registers them in one of three modes, so you can trade granularity against context budget:

  • all: every operation as its own tool, for clients with good tool selection;

  • namespace (default): one proxy tool per namespace, a balanced middle ground;

  • single: a single zendesk tool, for models with limited tool slots (the connector's own preferences keep their connector_preferences proxy beside it).

Proxies take { "operation": "<tool_name>", "params": { … } } and validate params through the original schema. --namespace, --tool and --read-only filter tools before the proxies are built, so each proxy describes only the operations that survive.

There's one way to pick the inventory (--namespace / --tool), --mode packages it, and --read-only narrows it. When the combination isn't obvious, don't guess — --print-tools has the server answer what it would expose, with no credentials needed.

Every tool with its description and its read/write mode: docs/mcp-tools-reference.md. The flags and worked examples: docs/configuration.md.

End-user mode

The audience for everything above is a Zendesk agent. This section is about the other one: your customers.

On the web, a customer opens a ticket through the Help Center's "Submit a request" form — they pick a kind of request, fill in the fields that kind asks for, attach a file, and later come back to read the replies. End-user mode is that same journey, in their assistant.

Who it's for

A vendor pointing their customers at an MCP server, so support happens where those customers already work. They install it themselves, sign in with their own Help Center account, and never see anything that isn't theirs.

Turning it on

The end-user tools live in the requests namespace, and it is opt-in: an agent install shouldn't inherit tools built for someone else, and one of them (marking a request solved) doesn't work under an agent token at all — Zendesk accepts it and silently does nothing. help_center is worth serving alongside it, since a customer who can search the knowledge base often doesn't need to open a ticket in the first place.

The flags, and how to have the server print what a combination exposes: docs/configuration.md.

The journey it supports

  • See what kinds of request are available. The forms the vendor offers, by their customer-facing names.

  • Learn what one of them asks. The questions on that form, which are required, and for dropdowns the exact choices — so the assistant can gather them in conversation instead of guessing at a payload.

  • Submit it, with attachments.

  • Follow it. List their requests, read one with its whole conversation (each reply attributed, and support agents marked as such), reply back, and mark it solved when it is.

What it asks of the Zendesk account

Nothing the agent side doesn't already need, plus one thing: at least one ticket form marked visible to end users, because that is what a customer picks between. Sign-in is interactive, through a browser, by design — there is no scripted or headless path to an end-user token, which is the same protection that stops anyone else signing in as your customer.

The prerequisites in full: docs/configuration.md. The step-by-step walkthrough, written for someone who doesn't work in a terminal: docs/end-user-onboarding.md.

What a customer can't do — and shouldn't

A customer can do less than an agent. That's the point, not a gap:

  • Only their own tickets. Enforced by Zendesk, not by us.

  • No internal notes, in either direction. Agent-only notes never appear in what this surface returns — Zendesk filters them out of the requester's view of a ticket entirely.

  • No priority or type. Zendesk drops both when a customer sets them; triage stays with the agents.

  • Closing a ticket only once an agent has picked it up. Until then Zendesk won't let the requester solve it, so the tool says so rather than pretending.

  • No search across the ticket base, no user lookups, no views, no macros.

Context and customizations

The assistant gets two kinds of context besides tools:

  • Built in: the structure of your Help Center (locales, the category → section tree with IDs, segments, permission groups), so it uses real IDs instead of guessing, fetched with the caller's own token. Details: docs/help-center-context.md.

  • Yours: instructions, prompts and skills your Zendesk admins write from /mcp/admin, a second connector on the same server. A guided setup prompt walks them through it and reminds them what is already built in. Nothing is stored in Zendesk, and no workflow is imposed: each team writes its own. Details: docs/customizations.md.

Configuration

The complete reference for the CLI flags (--mode, --namespace, --read-only, --transport, --public-url, and so on) and the environment variables (ZENDESK_SUBDOMAIN, OAUTH_TOKEN_FILE, PUBLIC_URL, the attachment-vision caps) lives in docs/configuration.md. Every variable has its own anchor, so you can deep-link a specific setting.

Troubleshooting

Browser not opening during OAuth login, the callback port already in use, having to re-authenticate every time, and Permission denied on the Guide-admin endpoints are covered in docs/troubleshooting.md. Restart with LOG_LEVEL=debug for the full OAuth flow trace.

Development

Setting up the repo, the toolchain, dev mode and how to test a PR branch are covered in CONTRIBUTING.md. Architecture and code-style conventions live in AGENTS.md.

FAQ

Which Zendesk products are supported? Zendesk Support (tickets, users, organizations) and the Help Center / Guide (articles, sections, categories, translations, labels, content tags, segments, attachments). Talk, Explore and Sell are out of scope.

Do I need a Zendesk admin API key? No, and the server doesn't support one. Each user authenticates with their own credentials and the server acts with exactly their permissions (why).

Is it safe to run via npx? Releases are published from CI via npm Trusted Publishing (OIDC), so each version carries a build provenance attestation you can verify on its npm page. No secrets are ever logged by the server.

Contributing

Pull requests are welcome, AI-assisted ones included, as long as the human author has read and validated every line. The guide, the author checklist and the review workflow are in CONTRIBUTING.md.

Versions follow SemVer and are released automatically from Conventional Commits; the history is in CHANGELOG.md.

This project was built with reference to:

License

MIT


Built and maintained by Digital4better for the Fruggr project.

Available Tools

63 tools
add_private_noteAdd Private NoteA

Add an internal note (not visible to requester) to a ticket, optionally with file attachments (uploaded via the Zendesk Uploads API and carried on the note). The note is appended to the ticket thread; use add_public_comment instead when the reply should be visible to the requester.

NameRequiredDescriptionDefault
bodyYesNote text (internal, agent-only); not shown to the requester. Markdown is rendered (**bold**, lists, links): wrap code, identifiers containing _ or * and <placeholders> in backticks so they show literally. HTML is not rendered (tags show as literal text), so do not send HTML.
ticket_idYesTicket ID — the numeric id of the ticket to annotate. Obtain it from search_tickets or list_tickets.
attachmentsNoFiles to attach to this note (base64-encoded content).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the description's job is to add semantics beyond mutability, which it does: visibility (internal, agent-only), append semantics ('appended to the ticket thread'), and the attachment delivery path via the Zendesk Uploads API. It does not address what happens on repeated calls (non-idempotent, so duplicates append) or failure behavior for oversized uploads, leaving a small 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 with no filler; the core behavior and requester-visibility constraint come first, and the alternative-tool routing comes second. Every clause 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?

For a 3-parameter mutation tool with a fully documented schema and no output schema, the description covers purpose, visibility, threading behavior, attachment handling, and the sibling alternative. It stops short of describing the response (e.g., whether the created note or attachment references are returned), which matters slightly given there is no output 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 100%, so the schema already carries markdown/HTML rendering rules, ticket_id sourcing, and attachment size limits. The description adds only that attachments are uploaded via the Uploads API and carried on the note, which is useful framing but not new per-parameter meaning. Baseline 3 applies.

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?

States a specific verb and resource ('Add an internal note ... to a ticket') plus the critical scope detail that it is not visible to the requester. It explicitly distinguishes itself from add_public_comment, so an agent can route between the two without opening either schema.

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?

Names the alternative tool (add_public_comment) and the exact condition that selects it ('when the reply should be visible to the requester'). This is an explicit when/when-not rule rather than implied usage.

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

add_public_commentAdd Public CommentA

Add a public comment (visible to requester) to a ticket, optionally with file attachments (uploaded via the Zendesk Uploads API and carried on the comment). The comment is appended to the ticket thread and emails the requester; use add_private_note instead for an internal, agent-only note.

NameRequiredDescriptionDefault
bodyYesComment text sent to the requester; visible in the ticket. Markdown is rendered (**bold**, lists, links): wrap code, identifiers containing _ or * and <placeholders> in backticks so they show literally. HTML is not rendered (tags show as literal text), so do not send HTML.
ticket_idYesTicket ID — the numeric id of the ticket to reply on. Obtain it from search_tickets or list_tickets.
attachmentsNoFiles to attach to this comment (base64-encoded content).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the description's real contribution is the undisclosed side effect: posting emails the requester and appends to the ticket thread. It also explains the attachment pipeline (Uploads API, carried on the comment), which no annotation conveys. It stops short of noting irreversibility (no edit/delete path mentioned) or any rate/size caveats 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?

Two sentences, zero filler, with the visibility constraint and the email side effect front-loaded before the sibling routing advice. Every clause carries decision-relevant information.

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 write tool with rich schema and solid annotation coverage, the description supplies the missing behavioral piece (requester email, thread append) and the key sibling choice. It does not describe the response shape, but the operation is simple enough that this is a minor gap.

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 100%, so body, ticket_id, and the attachment fields are already fully documented, including Markdown/HTML rendering rules and size caps. The description adds only that attachments are uploaded via the Zendesk Uploads API and carried on the comment, which is modest mechanism context beyond the schema, so the baseline of 3 is appropriate.

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 gives a specific verb and resource ("Add a public comment ... to a ticket"), states the audience ("visible to requester"), and explicitly distinguishes itself from the sibling add_private_note. An agent can pick between the two comment tools without opening either schema.

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 names the concrete alternative (add_private_note) and the exact condition that selects it (internal, agent-only note), which is the primary fork an agent faces here. The requester-visible/emails-the-requester framing further reinforces when this tool is appropriate.

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

add_request_commentReply on My RequestA

Reply on one of the signed-in user's own requests, optionally attaching files. Returns confirmation with the request's status after the reply, which matters because replying on a request that was already solved REOPENS it — Zendesk moves it back to open, and the user should know that is what their message did. The comment is always public: end users cannot post internal notes, and Zendesk silently ignores any attempt to mark one private. A closed request rejects new comments outright. Agents replying to a requester want add_public_comment, or add_private_note for an internal note.

NameRequiredDescriptionDefault
bodyYesThe message to send. Visible to the support agents on the ticket and included in their email notification. Sent as plain text: neither Markdown nor HTML is rendered for an end user (both show as literal text), so write it without formatting markup.
request_idYesNumber of the request to reply on, as shown by list_requests.
attachmentsNoFiles to attach to this reply, such as a screenshot or a log, with their content base64-encoded.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the non-obvious side effect that replying to a solved request REOPENS it, that comments are always public because end users cannot post internal notes and private flags are silently ignored, and that a closed request rejects comments outright. These are exactly the behavioral traits an agent could not infer from readOnlyHint/destructiveHint/idempotentHint.

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

Conciseness4/5

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

Front-loads purpose, then conventions, then alternatives, so an agent gets the essentials in the first clause. A few phrases are rhetorically padded ('which matters because', 'the user should know that is what their message did') though they do carry meaning about user-facing consequences.

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?

For a mutating, attachment-bearing tool with no output schema, the description covers the return value (confirmation with the request's status), side effects, and a failure mode. It gives the agent everything needed to call it correctly and to anticipate the consequence.

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 100%, so the parameters are already documented, including plain-text body rendering and base64 attachment limits. The description adds only that files are optionally attached to the reply, which is largely a restatement of the schema. Baseline 3 is appropriate.

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?

States a specific verb and resource — 'Reply on one of the signed-in user's own requests' — and scopes it to the caller's own requests, with optional file attachments. It is immediately distinguishable from the named siblings add_public_comment and add_private_note.

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 routes the agent: agents replying to a requester should use add_public_comment, and internal notes belong to add_private_note. It also names a condition under which the call is unnecessary or unsafe (a closed request rejects comments), leaving nothing to inference.

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

archive_articleArchive Help Center ArticleA
DestructiveIdempotent

Archive (soft-delete) a Help Center article: it is removed from the Help Center but can be restored from the Guide admin UI. Returns a confirmation message; the article and all its translations become invisible to end users. This is the only removal the Zendesk API offers — permanent deletion is not available via the API (do it from the Guide admin UI). To only hide an article temporarily while keeping it in the knowledge base, use update_article with draft: true (unpublish) instead. Guarded by a required confirm flag.

NameRequiredDescriptionDefault
confirmYesExplicit safety guard: must be set to true to archive the article. Any other value refuses the operation without calling Zendesk.
article_idYesArticle ID — the numeric id of the Help Center article. Obtain it from list_articles or search_articles.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds substantial context beyond them: it is a soft-delete that is restorable from the Guide admin UI, the article and all translations become invisible to end users, and it returns a confirmation message. The statement that permanent deletion is unavailable via the API is a critical behavioral disclosure.

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

Conciseness4/5

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

The destructive semantics are front-loaded in the first clause and each sentence carries useful information. There is mild redundancy with 'Guide admin UI' appearing in two separate sentences, but overall it is efficient and well-ordered.

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?

For a destructive mutation with no output schema, the description covers the safety profile, restore path, end-user impact, and return value. An agent has everything needed to call it correctly and safely.

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 coverage is 100%, so both parameters are fully documented in the schema itself, including the confirm safety guard. The description only echoes the guard ('Guarded by a required confirm flag') without adding syntax or format detail beyond what the schema provides, so the baseline of 3 applies.

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?

States a specific verb and resource ('Archive (soft-delete) a Help Center article') and immediately clarifies the semantics of the operation. It distinguishes itself from the sibling update_article by naming it explicitly as the non-destructive alternative.

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 tells the agent when to use this tool versus alternatives: it is the only removal the API offers, permanent deletion is not available, and update_article with draft: true should be used to hide temporarily. This covers when-to-use, when-not, and named alternatives.

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

compare_translationsCompare Article TranslationsA
Read-onlyIdempotent

Compare two locales of the same article to decide whether the target translation needs work, reporting independent signals instead of one ambiguous verdict. (1) Header — a "Freshness" verdict for the target, derived from the two translations' updated_at timestamps: if the source was edited after the target it is "likely behind, review recommended" (with the day gap), otherwise "up to date". This is the primary staleness signal and is always available. (2) Zendesk's own per-translation "outdated" flag for the target ("yes"/"no"/"unknown"), shown as a secondary overlay: it is only set through Guide's native "mark out of date" workflow and NOT by API edits, so a "no" does not by itself mean current — prefer Freshness. (3) A global structure check (section count and heading-tag sequence); on mismatch the header warns the per-index rows may be misaligned. (4) A per-section table matched by index, status "ok" (present in both), "missing" (present in source, absent in target) or "extra" (present in target, absent in source). (5) Per-section source/target word counts, INFORMATIONAL ONLY: a length difference between languages is normal and is deliberately NOT flagged as a divergence — do not read a word-count gap as an edit regression or staleness. Read-only; performs three Help Center GET calls (both translations plus the translations list for the outdated flag).

NameRequiredDescriptionDefault
article_idYesArticle ID — the numeric id of the Help Center article. Obtain it from list_articles or search_articles.
source_localeYesReference locale to diff against, e.g. "en-us". Usually the article source_locale (from get_article).
target_localeYesTarget locale to compare against source

TDQS

A4.4/5.0
Behavior5/5

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

With annotations already covering the read-only/safe profile, the description adds substantial behavioral context: it discloses that the outdated flag is set only by Guide's native workflow and NOT by API edits, that structure mismatches warn of row misalignment, and that it performs three GET calls. This is exactly the beyond-schema context an agent needs to interpret output correctly.

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

Conciseness4/5

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

Front-loaded with purpose followed by five numbered signals, so structure is legible. It is dense and long, but with no output schema nearly every sentence carries necessary return-value semantics, so the length is largely earned.

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?

No output schema exists, and the description fully compensates by enumerating each returned signal (Freshness, outdated flag, structure check, per-section table, word counts) and their semantics. For a read-only comparison tool, nothing an agent needs to call and interpret it is missing.

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 coverage is 100%, so all three parameters are already documented with descriptions. The description consistently uses 'source' and 'target' but adds no format or constraint details beyond what the schema provides, so baseline 3 applies.

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?

States a specific verb (compare) and resource (two locales of the same article) plus the decision it supports (whether the target translation needs work). An agent can distinguish this from siblings like find_translation_gaps or list_article_translations without opening a schema.

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?

Strong guidance on how to use the result — 'prefer Freshness' over the outdated flag, and warnings that word-count gaps must not be treated as divergence. However, it never explicitly names when to choose this tool over sibling gap-analysis tools, so the comparison framing is left implicit.

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

configure_sla_alertsConfigure SLA Alert ThresholdsA
Idempotent

Read or change your personal SLA alert thresholds: how close to a breach a running SLA metric must be to count as WARNING or CRITICAL. Called with no parameters it changes nothing and reports the thresholds in force for you and where each comes from (your preference or the server default). With parameters it saves your own thresholds per metric family (reply: first_reply_time and next_reply_time; wait: every other metric) on this MCP server — nothing is written to Zendesk — and they then drive list_sla_alerts and the Urgency line of get_ticket / search_tickets for you only; reset goes back to the server defaults. When the operator turned personal thresholds off (SLA_USER_PREFERENCES=off), only the read works and the reply says so.

NameRequiredDescriptionDefault
resetNoDrop your personal thresholds for one family ("reply" or "wait") or both ("all") and follow the server defaults again; "all" also makes your next list_sla_alerts call explain the thresholds again. Cannot be combined with new values for the same family.
wait_warningNoTime left before a wait or resolution metric (requester_wait_time, agent_work_time and every other non-reply metric) breaches at which it turns WARNING. A readable duration: 30m, 4h, 2d, 1w, or a mix like 1d4h. Omit to keep the current value.
reply_warningNoTime left before a reply metric (first_reply_time, next_reply_time) breaches at which it turns WARNING. A readable duration: 30m, 4h, 2d, 1w, or a mix like 1d4h. Omit to keep the current value.
wait_criticalNoTime left before a wait or resolution metric breaches at which it turns CRITICAL; must not exceed the wait warning threshold. A readable duration: 30m, 4h, 2d, 1w, or a mix like 1d4h. Omit to keep the current value.
reply_criticalNoTime left before a reply metric breaches at which it turns CRITICAL; must not exceed the reply warning threshold. A readable duration: 30m, 4h, 2d, 1w, or a mix like 1d4h. Omit to keep the current value.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond annotations, it discloses that nothing is written to Zendesk, that thresholds are per-server and per-user only, that they drive list_sla_alerts and the Urgency line of get_ticket/search_tickets, and that resetting the 'wait'/'reply'/'all' families has different downstream effects. It also documents the operator-disabled degradation path, which annotations cannot express.

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

Conciseness4/5

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

The read-vs-write split is front-loaded in the first two sentences and every subsequent clause adds an operational fact. It is a single dense paragraph, though, and the reset/disabled-mode details could be split for easier scanning.

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?

With no output schema, the description still tells the agent what a no-parameter call returns (thresholds in force plus their origin: user preference vs server default) and what the disabled-operator reply looks like. For a 5-parameter, zero-required, configuration tool that is complete.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real value on top by defining the metric families (reply = first_reply_time/next_reply_time; wait = everything else) that the individual parameter descriptions only gesture at. It stops short of restating duration syntax or the warning/critical ordering constraint, which the schema already carries.

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 states a specific verb pair and resource: read or change your personal SLA alert thresholds (WARNING/CRITICAL proximity to breach). It clearly distinguishes itself from list_sla_alerts by describing the latter as a consumer of the stored thresholds, so an agent can tell read-and-write-config from the read-only alert listing.

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 spells out the two modes explicitly: no parameters = pure read, parameters = persist per-family thresholds, and reset = fall back to server defaults. It also gives the failure case (SLA_USER_PREFERENCES=off means only the read works and the response says so), which is exactly the kind of when-not guidance an agent needs.

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

create_articleCreate Help Center ArticleA

Create a new article in a section and return the created article with its id. The locale becomes the article's source_locale. Requires a permission_group_id (use list_permission_groups to find available IDs). To add content in other locales afterwards, use create_article_translation.

NameRequiredDescriptionDefault
bodyYesArticle body as HTML (this becomes the source-locale content).
draftNoWhen true (default), the article is created unpublished; set false to publish immediately.
titleYesTitle of the new article, in its source locale.
localeNoSource locale for the article, e.g. "en-us" or "fr". Defaults to the Help Center's default locale; becomes the article's source_locale.
promotedNoWhen true, marks the article as promoted (featured) in its section. Defaults to false.
author_idNoAuthor user ID. Defaults to the authenticated user.
section_idYesSection that will contain the article (numeric id from list_sections).
label_namesNoLabel names for search ranking (use list_labels to see existing labels)
content_tag_idsNoContent tag IDs (use list_content_tags to find them)
user_segment_idNoUser segment ID for visibility (use list_user_segments to find it; if that is forbidden because the token is not a Guide admin, reuse the user_segment_id of an existing article from get_article). Defaults to everyone.
permission_group_idYesPermission group ID (use list_permission_groups to find it; if that is forbidden because the token is not a Guide admin, reuse the permission_group_id of an existing article from get_article).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (not read-only, not idempotent, not destructive). The description adds genuinely useful behavior beyond them: the tool returns the created article with its id, and the supplied locale becomes the article's source_locale. It does not mention the draft/publish default or any rate/permission constraints, which keeps it short of a 5.

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?

Three compact sentences, front-loaded with the core action and return value, then the permission prerequisite, then the sibling handoff. No 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 an 11-parameter creation tool with no output schema, the description covers the key gaps an agent needs: the return value, the critical required permission_group_id, and the translation follow-up path. It leaves some behavioral detail (draft default behavior, author default) to the schema, which is acceptable given full schema coverage.

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 100%, including usage hints like list_sections/list_labels/list_user_segments, so the schema carries parameter explanation. The description only reinforces permission_group_id and the locale↔source_locale relationship, adding marginal value over structured data.

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?

Specific verb (Create) plus resource (article in a section) and it states the return (created article with id). It is clearly distinguishable from sibling create_article_translation, which it explicitly names as the follow-up for other locales.

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?

Gives sequencing guidance: use list_permission_groups to obtain the required permission_group_id, and use create_article_translation afterwards for other locales. It does not state when-not-to-use this tool (e.g. for existing articles, where update_article applies), so it stops short of full routing.

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

create_article_attachmentCreate Article AttachmentA

Upload a file to a Help Center article and return the created attachment (its id, file name, content type, size and content URL). Not idempotent: calling it again uploads another copy rather than replacing the previous one. This is for article assets — for files on support tickets use get_ticket_attachments, and to see an article's existing attachments use list_article_attachments.

NameRequiredDescriptionDefault
file_nameYesName to store the file under, including its extension (e.g. "screenshot.png"); used as the download name.
article_idYesArticle ID — the numeric id of the Help Center article. Obtain it from list_articles or search_articles.
file_base64YesThe file's raw bytes as a base64-encoded string; the server decodes them before upload. At most 10420224 characters (about 7.45 MB of file); the HTTP transport additionally caps request bodies at 4 MB.
content_typeNoMIME type of the file, e.g. "image/png" or "application/pdf". Defaults to application/octet-stream when omitted.application/octet-stream

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, but the description adds the concrete consequence of non-idempotency ('uploads another copy rather than replacing'), which is actionable beyond the boolean. It also compensates for the absent output schema by enumerating the returned fields. It does not mention auth/permission requirements, so not a full 5.

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?

Three sentences, front-loaded with the core action and return value, followed by the important non-idempotency caveat and sibling routing. No filler; every sentence earns its place.

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?

For a write tool with no output schema, the description supplies what the schema cannot: the shape of the return value, the non-idempotency behavior, and disambiguation from related attachment tools. Nothing an agent needs to call it correctly is missing.

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 100%, so the schema already documents all four parameters including base64 encoding, size limits and MIME type. The description adds no parameter-level detail beyond what the schema provides, so the baseline 3 applies.

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?

States a specific verb (upload) and resource (file to a Help Center article), and explicitly describes the return payload. It distinguishes itself from siblings by naming both get_ticket_attachments and list_article_attachments, so an agent can tell it apart without opening other schemas.

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 routes the agent: 'for files on support tickets use get_ticket_attachments' and 'to see an article's existing attachments use list_article_attachments.' Both the when-to-use and the alternatives are stated.

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

create_article_translationCreate Article TranslationA

Create a translation for an existing article in a specific locale. The article must already exist (create it with create_article); this adds a new localized version and returns the created translation (locale, title, draft state). The target locale must not already have a translation — use update_article_translation to modify an existing one, and list_article_translations to see which locales exist. Provide the full HTML body.

NameRequiredDescriptionDefault
bodyYesTranslated body (HTML)
draftNoCreate the translation as a draft (not visible to end users). Defaults to false (published).
titleYesTranslated article title.
localeYesTarget locale (e.g., "fr", "de")
article_idYesID of the existing article to translate.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare the safety profile (not read-only, not idempotent, not destructive, open-world). The description adds meaningful context beyond them: the article-existence prerequisite, the no-existing-translation constraint (which effectively explains the non-idempotent behavior), and the return payload (locale, title, draft state). It does not mention permission/auth requirements, which is the remaining 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?

Front-loads the core action, then the prerequisites, the constraint with alternatives, and the input requirement. Every sentence carries distinct information with no repetition.

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?

For a mutation tool with no output schema, the description covers the action, prerequisites, constraint, alternatives, required inputs, and even the shape of the returned translation. Nothing an agent needs to invoke it correctly is missing.

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 100%, so all five parameters are already documented in the schema. The description only reinforces the body requirement ('full HTML body') and the locale/draft concepts, adding marginal meaning over the structured fields. Baseline 3 is appropriate.

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?

States a specific verb (create) and resource (article translation) scoped to a locale, and explicitly distinguishes itself from create_article (which creates the source article) and update_article_translation (which modifies an existing translation). An agent can route correctly without opening any schema.

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 states the precondition (article must already exist, use create_article first), the constraint (target locale must not already have a translation), and names the two alternatives — update_article_translation for modifying and list_article_translations for discovering existing locales. Nothing is left to inference.

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

create_content_tagCreate Content TagA

Create a new content tag for Guide articles. Content tags are end-user visible labels that help readers discover related articles; this returns the created tag with its id. Check list_content_tags first (filter by name_prefix) to avoid duplicates, then attach the new id via the content_tag_ids parameter of create_article or update_article. For internal search-ranking labels that are not shown to end users, use article labels (list_labels) instead.

NameRequiredDescriptionDefault
nameYesContent tag name as shown to end users (e.g., "billing", "getting-started").

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds useful behavior beyond that: it discloses the return payload ('returns the created tag with its id') and implies a non-idempotent duplicate risk by recommending a lookup first. Permission requirements and the consequence of duplicates are not stated, keeping it short of a 5.

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?

Three tightly written sentences: purpose first, then what it returns and the duplicate-avoidance workflow, then the contrasting alternative. Every sentence carries distinct information with no repetition.

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?

Despite having no output schema, the description states the return value ('the created tag with its id'), covers the create-then-attach lifecycle, and routes to the correct alternative for a closely related concept. Nothing needed to invoke it correctly is missing.

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?

Only one parameter, and schema description coverage is 100% with a clear description and example values ('billing', 'getting-started'). The description's 'end-user visible labels' phrasing reinforces the schema rather than adding new syntax or constraint detail, so the baseline 3 for fully documented schema applies.

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?

States a specific verb+resource ('Create a new content tag for Guide articles') and immediately defines what a content tag is and how it differs from article labels, a sibling concept (list_labels). An agent can distinguish it from manage_tags and list_content_tags without opening any schema.

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?

Gives an explicit pre-flight step ('check list_content_tags first, filter by name_prefix, to avoid duplicates'), the follow-up attachment path ('content_tag_ids of create_article or update_article'), and a named alternative for the when-not case (internal search-ranking labels → list_labels).

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

create_requestSubmit a RequestA

Submit a new support request as the signed-in user — the MCP equivalent of the Help Center's "Submit a request" form. Returns the created request with its number, which the user can then follow with list_requests and get_request. The submission is checked before sending: an unknown form id, a missing field the form marks required, or a dropdown answer the form does not offer is refused here rather than sent, because Zendesk would answer 201 having silently substituted the default form, accepted an empty subject or dropped the unrecognised value. Call get_request_form first to learn which fields to gather. Priority and type cannot be set by an end user — Zendesk drops them — so triage is left to the agents. This posts as the authenticated user; an agent opening a ticket on someone else's behalf wants create_ticket instead.

NameRequiredDescriptionDefault
bodyYesThe request itself: what happened, what was expected, and any steps to reproduce. Becomes the first public comment on the ticket. Sent as plain text: neither Markdown nor HTML is rendered for an end user (both show as literal text), so write it without formatting markup.
form_idNoForm id chosen from list_request_forms, deciding which questions apply. Omit to use the account default form.
subjectYesOne-line summary of the request, shown as the ticket title to the support agents who pick it up.
attachmentsNoFiles to attach to the request, such as a screenshot or a log, with their content base64-encoded.
custom_fieldsNoAnswers to the form's own questions, as { id, value } pairs. Take both the ids and the accepted values from get_request_form; an id this form does not carry, or a value a dropdown does not offer, is refused here because Zendesk would drop it without an error. Option values are the tag strings, never numbers.

TDQS

A4.6/5.0
Behavior4/5

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

Goes well past the annotations by disclosing the validation contract (unknown form id, missing required field, or unoffered dropdown value is refused client-side) and the reason: Zendesk answers 201 while silently substituting the default form, accepting an empty subject, or dropping unknown values. It also discloses that priority and type are silently dropped for end users, and that the return value is the created request including its number. The only gap is that it doesn't describe auth failure modes or rate limiting.

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

Conciseness4/5

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

Front-loaded with purpose, then prerequisites, validation behavior, and the sibling alternative in a sensible order. A few clauses are redundant with the schema's own custom_fields text (the tag-string rule appears twice across description and schema), costing a point.

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?

For a non-idempotent write tool with no output schema, the description covers the return value (created request plus number), the fabrication-failure modes, prerequisite discovery via get_request_form, and the correct alternative tool. Nothing an agent needs to call it correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema cannot: it warns that priority and type are not settable by an end user, ties form_id and custom_fields back to get_request_form/list_request_forms, and flags that submissions are validated rather than silently coerced. It does repeat the schema's own dropdown-tag-not-number rule, which keeps it from a 5.

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?

States a specific verb and resource ("Submit a new support request as the signed-in user") and anchors it to the familiar Help Center form. It explicitly separates itself from the two nearest siblings: create_ticket (agent acting for someone else) and get_request/list_requests (follow-up reads).

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?

Gives an explicit prerequisite ("Call get_request_form first to learn which fields to gather"), an explicit exclusion ("This posts as the authenticated user; an agent opening a ticket on someone else's behalf wants create_ticket instead"), and names the follow-up tools the user would use afterward.

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

create_ticketCreate Zendesk TicketA

Create a new Zendesk support ticket with subject, description, and optional priority/type/assignee/tags. The description becomes the first public comment of the ticket, and the new ticket id is returned. After creation, use update_ticket to change status or assignee, add_public_comment or add_private_note to reply, and manage_tags to adjust tags. Look up valid assignee_id / group_id and custom field ids via search_users or your Zendesk admin settings. Discover custom field ids and their accepted option values with list_ticket_fields.

NameRequiredDescriptionDefault
tagsNoTags to set on the new ticket. Each tag is a single lowercase token (join multi-word tags with an underscore). Use manage_tags later to add or remove individual tags.
typeNoTicket type. One of problem, incident, question, task.
subjectYesTicket subject — the short summary line shown in ticket lists and search results.
group_idNoId of the group to assign the ticket to.
priorityNoTicket priority. One of urgent, high, normal, low.
assignee_idNoUser id of the agent to assign the ticket to.
descriptionYesTicket description — the body of the request. It becomes the ticket's first public comment (visible to the requester). Markdown is rendered (**bold**, lists, links): wrap code, identifiers containing _ or * and <placeholders> in backticks so they show literally. HTML is not rendered (tags show as literal text), so do not send HTML.
custom_fieldsNoCustom field values as { id, value } pairs (field ids come from your Zendesk admin settings). Call list_ticket_fields first to discover the numeric field ids and, for dropdown/multiselect fields, the exact option values Zendesk accepts.

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the annotations (write, open-world, non-idempotent), the description discloses a real side effect: the description body becomes the first public comment visible to the requester, and markdown is rendered while HTML is not. That is valuable context an agent would otherwise miss. It stops short of stating who the requester becomes (no requester_id parameter exists) or any permission/auth requirements, which leaves a meaningful gap for a creation tool.

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?

Four sentences, front-loaded with what is created and what is returned, followed by follow-up routing and lookup guidance. Every sentence carries information an agent needs; nothing is repeated from the schema or annotations.

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?

With no output schema, the description compensates by stating the new ticket id is returned, and it covers side effects, follow-up tools and id-discovery for the non-obvious parameters. The one unresolved question for a creation tool is who the ticket is created for / whether the caller becomes the requester, which is not addressed.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds actionable meaning by pointing to search_users for assignee_id/group_id and to list_ticket_fields for custom field ids and accepted dropdown tags. It does not add anything about subject or priority beyond what the schema enums and descriptions already state.

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 first sentence names a specific verb and resource ('Create a new Zendesk support ticket') and enumerates the fields it accepts (subject, description, optional priority/type/assignee/tags), so an agent can immediately separate it from read tools like get_ticket and from adjacent creators such as create_request or create_article.

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 explicitly routes post-creation work to update_ticket, add_public_comment, add_private_note and manage_tags, and states prerequisites for the harder parameters (resolve assignee_id via search_users, discover custom field ids and accepted option values via list_ticket_fields). This is a complete when/when-next/where-to-look map rather than a vague hint.

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

find_translation_gapsFind Help Center Translation GapsA
Read-onlyIdempotent

Audit the Help Center tree for a target locale and report every category and section that has no translation, or one that is still an unpublished draft. Use it before or after translating articles: an article published in a second locale is unreachable while its parent section only exists in the source locale. Listing sections in that locale cannot answer this — a node with no translation is simply absent, without saying why, and a node whose translation is an unpublished draft may still be listed under its draft name — so this audit reads the draft flag on each node instead of trusting that listing. Costs two listings and covers up to 100 categories and 100 sections; past that only the first page of each level is audited, and the report says so — pass category_id to narrow it. Fix what it reports with set_section_translation / set_category_translation.

NameRequiredDescriptionDefault
localeYesLocale to audit, e.g. "fr" or "de" — usually a non-default active locale of the Help Center (zendesk-hc://topology lists them). A locale that is not active is reported as a warning, since every node would then look untranslated.
category_idNoRestrict the audit to this category and the sections it contains (id from list_categories). Omit to sweep the whole tree, which costs two listings and covers up to 100 categories and 100 sections.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses the cost (two listings), the coverage cap (100 categories and 100 sections, only first page past that, with a self-reporting caveat), the inactive-locale warning, and crucially that it reads the draft flag rather than trusting the listing. This is exactly the kind of behavior an agent cannot infer from annotations.

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

Conciseness4/5

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

Front-loads the purpose in the first sentence and keeps every clause information-bearing. The second sentence is a dense run-on with multiple em-dash clauses, which slightly hurts scannability, but no content is padding.

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?

With no output schema, the description still tells the agent what the report contains (gaps plus the reason: missing vs unpublished draft) and its limits. Combined with the routing to fix tools, nothing an agent needs to call it correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains the tradeoff of omitting category_id (full sweep costs two listings, capped at 100/100) versus passing it to narrow the audit, and notes the inactive-locale warning behavior for locale.

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?

States a specific verb (audit), resource (Help Center tree for a target locale), and precisely what it reports: categories/sections with no translation or only an unpublished draft. It is unambiguously distinguishable from the listing siblings like list_sections/list_articles.

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 says when to use it (before/after translating articles) with the concrete motivating scenario of an article being unreachable while its parent section only exists in the source locale. It names the alternative (listing sections in that locale) and explains why it fails, and routes fixes to set_section_translation / set_category_translation.

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

get_articleGet Help Center ArticleA
Read-onlyIdempotent

Retrieve an article by ID with full body content. For large articles, prefer get_article_outline + get_article_section to save tokens. Optionally specify locale for a translated version. Returns body (HTML), metadata, source_locale, and list of available translations.

NameRequiredDescriptionDefault
localeNoLocale for translated version
article_idYesArticle ID — the numeric id of the Help Center article. Obtain it from list_articles or search_articles.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior, so safety is covered. The description adds value beyond that by disclosing the return payload (body as HTML, metadata, source_locale, available translations) and the token-cost tradeoff, which the annotations do not express.

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?

Four tight sentences, each earning its place: retrieval scope, routing alternative, locale option, return shape. It is front-loaded with the core action and contains no filler.

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?

There is no output schema, yet the description enumerates the return contents (body HTML, metadata, source_locale, translations). Combined with complete parameter coverage and annotation-backed safety, an agent has everything needed to call it correctly.

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 100%, so both parameters are already documented in the schema (article_id even names its source tools). The description's note that locale fetches a translated version is a small addition but largely restates the schema's own 'Locale for translated version' text, so the baseline 3 applies.

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?

States a specific verb (Retrieve) and resource (an article) and clarifies scope: 'by ID with full body content'. It explicitly distinguishes itself from the sibling tools get_article_outline and get_article_section, so an agent can route without opening any schema.

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?

Names the alternative tools (get_article_outline + get_article_section) and the exact condition that selects them ('For large articles ... to save tokens'). This is explicit when-to-use/when-to-prefer-alternative guidance, not merely implied context.

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

get_article_outlineGet Article OutlineA
Read-onlyIdempotent

Return a compact outline of an article (list of sections delimited by h1/h2/h3, with word counts) for the given locale (defaults to source_locale). Includes available translations with their outdated status. Use get_article_section to fetch a specific section.

NameRequiredDescriptionDefault
localeNoLocale of the body to outline (defaults to article source_locale)
article_idYesArticle ID — the numeric id of the Help Center article. Obtain it from list_articles or search_articles.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds real behavioral value beyond annotations: it discloses the return shape (h1/h2/h3 sections with word counts) and that translations with outdated status are bundled in — non-obvious extra content the agent should expect.

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 tight sentences with the primary behavior front-loaded and the sibling routing second. Every clause earns its place; nothing is padded.

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?

With no output schema, the description does the necessary work of describing the return payload (sections, word counts, translation status), which is what an agent needs to decide to call it. What it omits — ordering, pagination, empty-article behavior — is minor for a read-only outline tool.

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 100%, and both params (article_id, locale) are documented in the schema. The description only restates the locale default that the schema already states, adding no syntax or format detail beyond it, so the baseline 3 applies.

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?

States a specific verb and resource ('Return a compact outline of an article') and details exactly what the outline contains — h1/h2/h3 sections with word counts plus translation/outdated status. An agent can distinguish it from get_article and get_article_section without opening a schema.

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?

Explicitly routes the agent to a sibling: 'Use get_article_section to fetch a specific section,' which distinguishes outline-level vs section-level access. It stops short of stating when to prefer this over get_article for a full body, but the alternative is named with a selecting condition.

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

get_article_sectionGet Article SectionA
Read-onlyIdempotent

Retrieve the content of a single section of an article in a given locale. Use get_article_outline first to discover section indexes. Default format="html" for round-trip safety. Pass format="markdown" only for human review — the Markdown representation is lossy on some structures ( with , tables with multi- cells are kept as raw HTML to limit the damage, but do not round-trip markdown content back through update_article_section). The "## [n] hN: ..." line at the top is a label, not part of the content.

NameRequiredDescriptionDefault
formatNoOutput format. "html" (default) is round-trip safe. "markdown" is lossy on some HTML structures — use only for human review, not before update_article_section.html
localeYesLocale of the body (e.g., "en-us", "fr")
article_idYesArticle ID — the numeric id of the Help Center article. Obtain it from list_articles or search_articles.
section_indexYes0-based index of the section (see get_article_outline)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/non-destructive, but the description adds real behavioral context beyond them: markdown lossiness on specific structures (pre/br, multi-p table cells), the round-trip hazard with update_article_section, and the fact that the leading '## [n] hN:' line is a label rather than content.

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

Conciseness4/5

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

Front-loaded with the core purpose, then prerequisites, then format guidance. Every sentence carries information, though the middle format sentence is dense and could be trimmed slightly.

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?

With no output schema, the description does the work of describing what comes back in each format and warns about the lossy representation and label line. It stops short of covering error cases (e.g., invalid section_index) or whether nested subsections are included.

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?

Schema coverage is 100%, so the baseline is 3; the description still adds meaning beyond the schema by explaining the risk profile of the markdown enum value and by documenting an undocumented aspect of the returned content (the label line at the top).

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?

States a specific verb (Retrieve), resource (content of a single section of an article), and scope qualifiers (single section, given locale), which cleanly separates it from get_article and get_article_outline without ambiguity.

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 names the prerequisite tool ('Use get_article_outline first to discover section indexes') and gives a conditional rule for the format parameter (html default vs markdown only for human review), including a when-not case (not before update_article_section).

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

get_current_userGet Current Zendesk UserA
Read-onlyIdempotent

Get the currently authenticated Zendesk user. Useful to verify identity and permissions.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, covering the safety and mutation profile. The description adds the scope that this returns the authenticated user and a use case, but says nothing about auth requirements, rate limits, or return shape. With annotations doing the heavy lifting, a 3 is appropriate.

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 short sentences, front-loaded with the core action and followed by a brief use case. No filler or repetition; every sentence earns its place.

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?

For a simple, zero-parameter read tool with rich annotations and no output schema, the description gives the agent everything needed: what it retrieves, whose identity it targets, and why one would call it. No critical details are missing.

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 tool takes zero parameters, so the rubric sets the baseline at 4. The schema is empty and the description introduces no additional parameter semantics, which is acceptable for a no-argument tool.

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

Purpose4/5

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

States a clear verb and resource ('Get the currently authenticated Zendesk user'), and the 'currently authenticated' scope inherently distinguishes it from sibling tools like get_user or search_users. However, it does not explicitly name an alternative, so it falls short of a 5 under the rubric.

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 a clear use case: 'Useful to verify identity and permissions.' This tells the agent when to reach for the tool, but it does not state when not to use it or name alternatives such as get_user, so it lacks exclusion guidance.

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

get_linked_incidentsGet Linked IncidentsA
Read-onlyIdempotent

Get all incident tickets linked to a problem ticket. Returns the list of incidents that reference the given problem (Zendesk problem/incident relationship); useful to gauge a problem's blast radius before resolving it. Each ticket's description is cut to a 200-character excerpt; get_ticket returns it in full.

NameRequiredDescriptionDefault
problem_idYesProblem ticket ID — the numeric id of the ticket of type "problem" whose linked incidents to list. Obtain it from search_tickets or list_tickets.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds real value beyond them: results are truncated to 200-character excerpts and get_ticket should be used for the full body — behavior an agent could not infer from the schema. Pagination/result limits are left 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?

Three tight sentences: purpose first, then use case, then the truncation caveat with the escape hatch. Nothing is redundant and the most decision-relevant information is front-loaded.

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?

With no output schema, the description carries the burden of explaining returns, and it does: a list of incident tickets with truncated descriptions. It is missing any statement about result ordering, pagination, or how many links are returned, which matters for a potentially unbounded list.

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 coverage is 100% and the schema already explains that problem_id is the numeric id of a ticket of type "problem" and where to obtain it. The description only reinforces that the id identifies the problem whose incidents are listed, adding no syntax or format detail beyond the schema. Baseline 3 applies.

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?

States a specific verb and resource — fetch incident tickets linked to a problem ticket — and grounds it in the Zendesk problem/incident relationship. It is clearly distinguishable from get_ticket (full description) and list_tickets (all tickets) by scope.

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?

Gives a concrete usage context: "useful to gauge a problem's blast radius before resolving it." It also names an alternative (get_ticket) for the full description. No explicit when-not guidance or mention of siblings like search_tickets, but the intended scenario is clear.

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

get_organizationGet Zendesk OrganizationA
Read-onlyIdempotent

Retrieve a single organization by its numeric id. Returns full details (name, tags, domains, notes) — more than the name/id that search or list_organizations surface. Use list_organizations to browse or search for a name-based lookup.

NameRequiredDescriptionDefault
organization_idYesOrganization ID — the numeric id of the Zendesk organization to fetch. Obtain it from list_organizations, search, or a user record.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds genuine value with no output schema present by naming the returned fields (name, tags, domains, notes) and noting it is richer than list/search results. It stops short of mentioning auth scope or failure modes for an invalid 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?

Three short sentences with zero filler: purpose, payload differentiation, and the routing alternative, all front-loaded in that order.

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 single-param read tool with no output schema, the description covers purpose, routing, and field-level return content, which is enough to call it correctly. Missing only edge details such as behavior on an unknown id.

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 coverage is 100% and the single parameter is fully documented in the schema, including where to obtain the id. The description only echoes 'numeric id', so this is the baseline 3 for a schema that does the lifting.

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?

States a specific verb (Retrieve) and resource (a single organization) with the keying constraint (numeric id), and explicitly contrasts the richer payload against what search or list_organizations return. An agent can distinguish it from list_organizations without opening either schema.

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 routes the agent: use this for a known numeric id, use list_organizations to browse or do a name-based lookup. That names both the alternative and the condition that selects it.

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

get_requestGet My RequestA
Read-onlyIdempotent

Read one of the signed-in user's own requests, optionally with the whole conversation on it. Returns the request's status, the form it was submitted on, whether the user may mark it solved, and — with include_comments — every public message on it, each labelled with its author and marked when that author is a support agent. Internal agent notes are never returned on this path, so nothing agent-private can leak through it. A request belonging to someone else answers "permission denied" rather than "not found", so a denial here does not tell you whether that id exists. Find the number with list_requests; agents reading a ticket they do not own want get_ticket instead.

NameRequiredDescriptionDefault
request_idYesNumber of the request to read, as shown by list_requests or returned when it was submitted.
include_commentsNoWhen true, appends the full public conversation — agent replies and the user's own messages. Defaults to false so a status check stays cheap.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds real behavioral context beyond them: internal agent notes are never returned on this path, so no agent-private data can leak. It also discloses the security-relevant quirk that a foreign request returns "permission denied" rather than "not found", which changes how an agent should interpret the error.

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 sentences are dense but front-loaded: purpose and return shape first, then the privacy guarantee, then the permission-denied caveat, then sibling routing. Every sentence carries information an agent needs, with no filler or restatement of the name.

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?

With only two parameters, no output schema, and simple annotations, the description supplies everything needed: what is returned, what the optional parameter adds, what is deliberately excluded, and how errors should be read. Nothing required to call it correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: with include_comments, each message is labelled with its author and flagged when that author is a support agent. It also explains the cost tradeoff implied by the default, though the include_comments wording overlaps substantially with the schema text.

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?

Opening sentence names a specific verb and resource with an explicit scope: reading one of the signed-in user's own requests, optionally with the full conversation. It also names the sibling it is not (get_ticket) and points to list_requests for id discovery, so the agent can differentiate it from get_ticket and list_requests without opening any schema.

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 gives concrete routing instructions: use list_requests to find the number, and use get_ticket when an agent is reading a ticket it does not own. That is an explicit when-to-use plus a named alternative, leaving nothing to inference.

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

get_request_formGet Request FormA
Read-onlyIdempotent

Read what one request form actually asks for, so the user can be walked through it question by question. Returns the fields on that form in the order the portal shows them, each with its customer-facing label, whether it is required, and for dropdowns the exact values Zendesk accepts — plus any conditional rules ("if Type is Bug, Version becomes required"). Joins the form definition with the field definitions, because the form itself carries only field ids. Use it after list_request_forms and before create_request; omit form_id to describe the account default form. Conditional fields are reported as rules rather than resolved, since which ones apply depends on answers not yet given.

NameRequiredDescriptionDefault
form_idNoForm id whose questions to read, as returned by list_request_forms. Omit to describe the account default form.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the read-only/idempotent/non-destructive profile, yet the description still adds substantive behavior: it discloses the join between form and field definitions, the ordering of returned fields, and the key limitation that conditional fields are reported as rules rather than resolved. That limitation is exactly the kind of caveat an agent cannot get from the schema or annotations.

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

Conciseness4/5

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

Front-loaded with the core action, then return contents, then workflow placement, then the conditional-rule caveat — a logical order with no filler. The opening clause about walking the user through question by question is slightly redundant with the following sentence, but the paragraph stays tight for the amount of useful detail it carries.

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?

There is no output schema, so the description must describe returns, and it does: field order, customer-facing labels, required flags, exact dropdown values, and rule objects. Combined with the workflow guidance and default-form behavior, an agent has everything needed to call and interpret this tool.

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 coverage is 100% and the single form_id parameter is already documented, including the 'omit to describe the account default form' behavior. The description repeats that meaning and adds only that the id comes from list_request_forms, which is marginal value over structured data, so baseline 3 applies.

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?

States a specific verb and resource: read one request form's fields, in portal order, with labels, required flags, dropdown values and conditional rules. It also explains the internal join with field definitions, which clarifies what the tool actually returns rather than leaving it ambiguous against list_request_forms.

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?

Explicit sequencing is given: 'Use it after list_request_forms and before create_request', plus the fallback that omitting form_id describes the account default form. That is a clear when-to-use, a named prerequisite sibling, and a next-step sibling, leaving nothing to inference.

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

get_ticketGet Zendesk TicketA
Read-onlyIdempotent

Retrieve a Zendesk ticket by ID, including its live SLA state (per-metric stage and breach countdown) when an SLA policy applies, plus its comments if requested. Returns ticket details (subject, status, priority, assignee, tags, description) and optionally all comments/internal notes. It also lists the followers and email CCs on the ticket, resolved to names, which is how you tell who a ticket update actually reaches: followers are notified of updates including internal notes, email CCs take part in the public correspondence, and being the requester makes someone neither. Both lists come back empty on an account where the "CCs and followers" setting is not enabled in Zendesk. The per-ticket Show endpoint exposes no SLA, so the SLA block is resolved via a scoped search and may be absent for a very high-volume requester or a just-updated ticket; SLA targets and policy conditions live in list_sla_policies. When the operator turned SLA push on, the SLA block also carries an Urgency line naming the most urgent running metric as BREACHED, CRITICAL or WARNING against the caller's alert thresholds. This returns the ticket as it stands now; for the history of changes behind that state (who changed what, and when), use get_ticket_history. The comment thread is appended in one block — the first page of comments Zendesk returns, cut past the response character limit — so on a long ticket read it with list_ticket_comments, which pages the comments and returns the newest first.

NameRequiredDescriptionDefault
ticket_idYesTicket ID — the numeric id of the ticket to fetch. Obtain it from search_tickets or list_tickets.
include_commentsNoWhen true, appends the full public comment and internal note thread to the response. Defaults to false to keep the payload small; enable it when you need the conversation, not just the ticket fields. On a long thread prefer list_ticket_comments — this flag appends one unpaginated block, so comments past Zendesk's first page are absent and the rest is cut at the response character limit.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnly/idempotent/openWorld; the description adds substantial behavioral context beyond them: SLA resolved via scoped search and may be absent for high-volume requesters or just-updated tickets, follower/CC lists empty when the Zendesk 'CCs and followers' setting is off, and the comment block is truncated at the character limit. It also explains notification semantics (followers vs CCs vs requester).

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

Conciseness4/5

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

Front-loaded with the core purpose and the returned data before the caveats. It is dense and every clause carries operational meaning, though the follower/CC notification explanation and SLA-push detail make it longer than strictly necessary for invocation.

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?

For a read-only two-param tool with no output schema, the description covers return contents, optionality, missing-data cases (SLA absent, empty follower/CC lists), truncation behavior, and sibling routing. An agent has everything needed to call it correctly and interpret edge cases.

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?

Schema coverage is 100% so both params are already documented, but the description adds value beyond it: it clarifies what include_comments actually appends, its default rationale, and the truncation/pagination caveat. ticket_id sourcing is also reinforced in the schema. Nuance is added on top of a complete 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?

States a specific verb (retrieve) and resource (Zendesk ticket by ID) and enumerates the returned payload (fields, SLA block, comments, followers/CCs). It explicitly distinguishes itself from get_ticket_history, list_ticket_comments, and list_sla_policies, so an agent can route correctly without opening schemas.

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?

Gives explicit when-to-use vs when-to-use-alternative guidance: use get_ticket_history for change history, list_ticket_comments for paged/long threads, list_sla_policies for SLA targets. Also names the exact condition (include_comments on a long ticket) where the alternative wins.

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

get_ticket_attachmentsGet Zendesk Ticket AttachmentsA
Read-onlyIdempotent

Download the files attached to a ticket's comments so you can look at them: images come back embedded inline, other files as text references (file name, id, content type, size, download URL). Use it to see an attached image, or a file's name, size and download URL (only images come back with their content); to learn which files a comment carries, list_ticket_comments already shows their ids. Pass those ids as attachment_ids to fetch only them, or omit it to collect the attachments of the ticket's comments, read up to a page cap (10 pages of 100 comments by default); past it the response says later comments were not scanned, and attachment_ids fetches their files. An image over the per-image size limit or past the embedded-image cap comes back as a reference saying why, and once the response size budget is spent the remaining files are counted as omitted.

NameRequiredDescriptionDefault
ticket_idYesTicket ID — the numeric id of the ticket whose attachments to fetch. Obtain it from search_tickets or list_tickets.
attachment_idsNoAttachment IDs to fetch directly (e.g. extracted from a previous list_ticket_comments or get_ticket(include_comments=true) call). When provided, skips the comments fetch entirely. When omitted, the attachments of the ticket's comments are returned, read up to a page cap: on a very long thread the scan stops there, and the response says so.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial operational detail beyond them: a 10-page-of-100-comments scan cap with a notice in the response, per-image size limits, an embedded-image cap, and a response-size budget that converts remaining files into an 'omitted' count. These are exactly the degradations an agent needs to anticipate.

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

Conciseness4/5

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

Front-loaded with the action and the return shape, and every clause carries real information (caps, fallbacks, truncation signals) rather than padding. The middle sentence is dense and parenthetical-heavy, making the alternative-to-sibling guidance harder to scan than it needs to be.

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?

There is no output schema, so the description carries the return-format burden and does: images embedded inline, other files as references with name, id, content type, size and URL, plus explicit explanation of partial results. For a 2-parameter read tool, nothing needed for a correct call is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema only implies: attachment_ids skips the comments fetch entirely, while omitting it triggers the page-capped comment scan and the truncation message. It also tells the agent where ids come from and how to recover files from unscanned comments.

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?

States a specific verb + resource: 'Download the files attached to a ticket's comments.' It also distinguishes itself from the nearest sibling by noting that list_ticket_comments returns attachment ids rather than content, so an agent can pick correctly without opening either schema.

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?

Gives concrete use cases ('to see an attached image, or a file's name, size and download URL') and routes metadata-only needs to list_ticket_comments. It also explains the two invocation modes (pass attachment_ids vs. omit). It stops short of explicit exclusions such as 'do not use for full comment text.'

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

get_ticket_historyGet Zendesk Ticket HistoryA
Read-onlyIdempotent

Read a ticket's change history — its audit trail — as a chronological, oldest-first timeline of who changed what and when. Each entry shows the actor (name and id) and the channel, then the field changes that update carried (status, priority, assignee, group, tags, custom fields) as before → after, with assignee/requester/group ids resolved to names. Comments appear as one-line presence markers (public comment vs internal note added), not their text — fetch the bodies with list_ticket_comments (or get_ticket(include_comments=true) for a short thread). Purely system-generated notification events (trigger emails, collaborator/CC notifications, pushes) are filtered out — note this filters notification delivery, not CC-list edits, which are shown as changes — and an update carrying only such events produces no entry, so the timeline stays a readable narrative rather than a raw log. Use it to answer "what happened on this ticket?", "why was it reassigned?" or "when did it go to pending?", reading oldest-first so the founding context is not missed. Read-only, and cursor-paginated oldest-first: pass the returned cursor to page a long-lived ticket toward its most recent changes.

NameRequiredDescriptionDefault
cursorNoPagination cursor from a previous response; omit for the first page. The timeline is ordered oldest-first, so paging forward moves toward the most recent changes.
page_sizeNoAudits (ticket updates) per page (1-100, default 100). Each audit is one update to the ticket and may expand to several change lines; audits carrying only system events are dropped, so a page can render fewer entries than this.
ticket_idYesTicket ID — the numeric id of the ticket whose change history to read. Obtain it from search_tickets or list_tickets.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnlyHint/idempotentHint/destructiveHint), but the description adds substantial non-obvious behavior: system-generated notification events are filtered out (while CC-list edits are not), an update with only such events produces no entry, comments appear as presence markers not text, and pagination is oldest-first. This is rich behavioral context beyond structured fields.

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

Conciseness4/5

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

Dense and front-loaded, leading with what is returned before the filtering caveat and the usage guidance. It is long, but nearly every clause carries information; a small amount could be tightened without loss.

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?

No output schema exists, yet the description thoroughly specifies the return contents (actor name/id, channel, before→after field changes with ids resolved to names, comment presence markers) and the filtering semantics. An agent has everything needed to call and interpret this tool 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?

Schema coverage is 100%, so baseline is 3, but the description reinforces cursor direction ('pass the returned cursor to page ... toward its most recent changes') and explains that a page can render fewer entries than page_size due to event filtering. It adds meaning but largely parallels the already-detailed schema descriptions.

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?

States a specific verb+resource ('Read a ticket's change history — its audit trail') and precisely characterizes the output shape (chronological oldest-first timeline of who changed what and when). It explicitly distinguishes itself from siblings by naming list_ticket_comments and get_ticket(include_comments=true) as the way to get comment bodies.

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?

Gives concrete triggering questions ('what happened on this ticket?', 'why was it reassigned?', 'when did it go to pending?') and names the alternative tool for a related need (comment text). Also explains why to read oldest-first. This is explicit when-to-use plus alternatives.

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

get_ticket_metricsGet Ticket MetricsA
Read-onlyIdempotent

Read the elapsed-time metrics (reply, resolution, wait and on-hold times, reopens, replies) of up to 100 tickets in one call. Each ticket gets first reply, first and full resolution, agent wait, requester wait and on-hold times in calendar and business minutes, plus reopen, reply, assignee-station and group-station counts and the key timestamps (assigned, solved, latest comment). These are facts Zendesk records on every ticket, so they are available even on tickets no SLA policy covers; they say how long things took, not how long is left — for the live breach countdown use get_ticket, search_tickets or list_sla_alerts. A duration still running reads "not reached yet". Read-only; tickets the caller cannot see are reported as such rather than failing the call.

NameRequiredDescriptionDefault
ticket_idsYesTicket IDs to read metrics for, 1 to 100 numeric ids (duplicates are read once), as returned by search_tickets, list_tickets or get_view_tickets. The answer keeps this order.

TDQS

A4.6/5.0
Behavior5/5

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

Goes beyond the readOnly/idempotent annotations by disclosing the 'not reached yet' sentinel for in-flight durations and that tickets the caller cannot see are reported as such rather than failing the whole call. These are non-obvious response behaviors an agent cannot infer from annotations or the single-parameter schema.

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

Conciseness4/5

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

Three sentences, front-loaded with the core action and scope, then return contents, then routing and caveats. It is dense but slightly over-enumerated ('assignee-station and group-station counts') for a description whose schema and annotations already carry part of the load.

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?

No output schema exists, so the description must describe returns, and it does thoroughly: reply/resolution/wait/on-hold times in calendar and business minutes, reopen and reply counts, and key timestamps. Combined with the failure-mode and sentinel notes, an agent has everything needed to call and interpret it.

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 coverage is 100% and the single parameter already documents the 1-100 bound, duplicate handling, ordering and provenance. The description's 'up to 100 tickets in one call' merely restates the schema, so baseline 3 is appropriate.

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?

States a specific verb and resource ('Read the elapsed-time metrics ... of up to 100 tickets in one call') and enumerates the metric families returned. It explicitly separates itself from get_ticket, search_tickets and list_sla_alerts by framing this as elapsed-time facts versus live breach countdowns, so an agent can pick correctly without opening schemas.

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?

Names the alternatives and the condition that selects them: 'for the live breach countdown use get_ticket, search_tickets or list_sla_alerts.' It also clarifies applicability even where no SLA policy exists, which is a real selection question for an agent deciding between SLA tools.

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

get_userGet Zendesk UserA
Read-onlyIdempotent

Retrieve a single user by their numeric id. Returns the full user record (name, email, role, organization, tags). Use search_users when you only have a name or email, or get_current_user for the authenticated identity.

NameRequiredDescriptionDefault
user_idYesUser ID — the numeric id of the Zendesk user to fetch. Obtain it from search_users, or from the requester/assignee fields of a ticket.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds value by listing the returned fields, which matters since there is no output schema, but it does not address failure modes (e.g., not-found behavior) or permission requirements.

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 compact sentences: purpose first, then routing guidance. No redundant or filler content, and the lookup constraint is front-loaded.

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?

For a single-parameter getter with full schema coverage, the definition covers purpose, key, return shape, and sibling routing. Nothing an agent needs to invoke it correctly is missing.

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 100% and the single parameter already documents the numeric id plus where to obtain it (search_users, ticket requester/assignee). The description's mention of 'numeric id' merely reinforces the schema, so baseline 3 is appropriate.

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?

States a specific verb (retrieve) and resource (a single user) with the exact lookup key (numeric id), which distinguishes it from bulk/list siblings. It also enumerates the return payload (name, email, role, organization, tags).

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 routes the agent: use search_users when only a name or email is available, and get_current_user for the authenticated identity. Both alternatives are named with the condition that selects them.

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

get_view_ticketsGet Tickets In A ViewA
Read-onlyIdempotent

Read the tickets inside a Zendesk view, in the view's own configured sort order — the same order the agent sees in the Zendesk UI — which is the natural way to work a named queue like "Unassigned tickets" or "Breaching today". Accepts the view by title or by numeric id (discover both with list_views); a title is matched case-insensitively against the agent's active views, and on no match the available titles are returned so you can retry in one step. Tickets come back with the same fields as list_tickets and are cursor-paginated. Each ticket an SLA policy covers also shows its next SLA breach: only the one metric closest to breaching, read from the view itself at no extra cost (use get_ticket or search_tickets for every metric). sort_by/sort_order override the view's order when you want a different cut. Each ticket's description is cut to a 200-character excerpt; get_ticket returns it in full.

NameRequiredDescriptionDefault
viewYesThe view to read: its exact title as shown in Zendesk (e.g. "Unassigned tickets") or its numeric id from list_views. A title is matched case-insensitively against your active views; on no match the tool returns the available titles instead of erroring, so you can retry with a correct one.
cursorNoPagination cursor from a previous response; omit for the first page.
sort_byNoOptional column to sort by, overriding the view's own sort. Must be one of the view's columns (e.g. "status", "priority", "updated_at", or a custom field id); "subject" and "submitter" are not sortable. Omit to keep the view's configured order.
page_sizeNoTickets per page (1-100, default 25).
sort_orderNoSort direction applied to sort_by: "asc" (oldest/lowest first) or "desc" (newest/highest first). Only meaningful together with sort_by; omit to keep the view's configured direction.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, yet the description still adds real behavior: title matching is case-insensitive, a no-match returns available titles rather than erroring, results are cursor-paginated, descriptions are truncated to a 200-character excerpt, and only the closest SLA metric is included. What it doesn't state is result size/limits or what happens with an unknown numeric id — a small remaining gap.

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

Conciseness4/5

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

Front-loads purpose and sort-order semantics, then layers in matching behavior, pagination, SLA, and truncation — each sentence carries information. It is dense with em-dash parentheticals and slightly longer than needed, but no sentence is filler.

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?

With no output schema, the description still tells the agent what comes back (same fields as list_tickets, cursor pagination, next-SLA-breach field, 200-char description excerpt). Combined with the fully documented schema and safety annotations, an agent has everything needed to call this correctly on the first try.

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?

Schema coverage is 100%, so baseline is 3, but the description adds semantic framing the schema only implies: the view is addressed by title or numeric id with a recoverable no-match path, and sort_by/sort_order are positioned as overrides of the view's configured order rather than the default behavior. That override relationship is the key thing an agent must understand before passing those optional params.

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?

States a specific verb and resource ('Read the tickets inside a Zendesk view') plus the defining scope: the view's own configured sort order. It cleanly separates itself from siblings by naming list_views for discovery, list_tickets as the field-equivalent, and get_ticket/search_tickets for full data.

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?

Gives explicit when-to-use framing ('the natural way to work a named queue like "Unassigned tickets"'), names list_views as the prerequisite for discovering the view argument, and routes agents elsewhere for adjacent needs: get_ticket or search_tickets for every SLA metric, get_ticket for the full description.

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

list_article_attachmentsList Article AttachmentsA
Read-onlyIdempotent

List all attachments for an article. Returns attachment metadata only (id, file name, content type, size, URL), not the file bytes; both inline and block attachments are included. This is for Help Center articles — for attachments on support tickets use get_ticket_attachments instead. Upload new files with create_article_attachment.

NameRequiredDescriptionDefault
article_idYesID of the Help Center article whose attachments to list.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, so the safety profile is covered. The description adds genuinely useful detail beyond that: it returns metadata only (id, name, content type, size, URL) rather than file bytes, and clarifies both inline and block attachments are included — a non-obvious inclusion rule.

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?

Three tight sentences, front-loaded with the core action, then return shape, then sibling routing. Every sentence earns its place with no redundancy.

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?

For a single-parameter list tool with no output schema, the description covers purpose, return contents, scope boundary, and sibling alternatives. Nothing an agent needs to call it correctly is missing.

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 100% (article_id is fully documented), so the schema carries parameter semantics. The description adds no syntax, format, or filtering detail about article_id, so baseline 3 applies.

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?

States a specific verb and resource ("List all attachments for an article") and immediately scopes it to Help Center articles, distinguishing it from get_ticket_attachments and create_article_attachment. An agent can identify the correct tool without opening the schema.

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 names the alternative for a different context ("for attachments on support tickets use get_ticket_attachments instead") and routes file creation to create_article_attachment. Both the when-to-use and the when-not-to-use are stated, not implied.

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

list_articlesList Help Center ArticlesA
Read-onlyIdempotent

List articles (metadata only, no body). Use get_article for full content. Optionally filter by section ID and locale. Supports sort_by ("title", "created_at", "updated_at") and include_translations: true to show available translation locales per article. Note: include_translations must be re-sent on each paginated request.

NameRequiredDescriptionDefault
cursorNoPagination cursor from a previous response; omit for the first page.
localeNoRestrict to a single locale, e.g. "en-us" or "fr". Omit for the default locale.
sort_byNoField to sort by; "position" (the default) is the manual order set in Guide.position
page_sizeNoArticles per page (1-100, default 100).
section_idNoRestrict the listing to one section (numeric id from list_sections). Omit to list articles across all sections.
sort_orderNoSort direction: ascending or descending.asc
include_translationsNoInclude available translation locales per article (causes 1 extra API call per article)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare the read-only, idempotent, non-destructive profile. The description adds real behavioral value beyond that: metadata-only returns, and the important caveat that include_translations must be re-sent on each paginated request (plus its per-article API cost).

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?

Front-loads the core purpose in the first clause, then adds filtering, sorting, and the pagination caveat in tight, waste-free sentences. No redundancy that could mislead.

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?

For a read-only listing tool with no output schema and full schema coverage, the description supplies everything needed to call it correctly: scope, return granularity, optional filters, sorting, and the pagination re-send caveat.

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 coverage is 100%, so the schema already documents all seven parameters in detail. The description adds little, and its enumeration of sort_by values ("title", "created_at", "updated_at") is actually incomplete versus the schema, which also includes "position" as the default.

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?

States a specific verb+resource ("List articles") and immediately bounds the scope ("metadata only, no body"). It also names the sibling get_article as the tool for full content, so an agent can distinguish the two without opening either schema.

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?

Explicitly routes the agent to get_article when full content is needed, and describes the optional section/locale filtering context. It does not address when to prefer the sibling search_articles over this listing tool, so a routing gap remains.

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

list_article_translationsList Article TranslationsA
Read-onlyIdempotent

List all available translations for an article (metadata only, no body: locale, title, draft, updated_at). Use get_article with locale for full translated content.

NameRequiredDescriptionDefault
article_idYesArticle ID — the numeric id of the Help Center article. Obtain it from list_articles or search_articles.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and non-destructive, so the safety profile is covered. The description adds real behavioral value by disclosing that only metadata is returned and enumerating which fields, which prevents an agent from expecting body content.

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 short sentences, zero waste, with the payload constraint front-loaded before the routing advice. Every clause earns its place.

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?

With no output schema, the description compensates by naming the returned fields, and the single parameter is fully documented in the schema. Nothing needed to call this tool correctly is missing.

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?

There is one parameter and schema description coverage is 100% — the schema already explains article_id and where to obtain it. The description mentions 'locale' only as an argument to the sibling tool, adding nothing about this tool's own parameter, so baseline 3 applies.

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?

States a specific verb (list) and resource (translations for an article) and immediately scopes the payload: metadata only, no body, with the exact fields (locale, title, draft, updated_at). An agent can distinguish this from get_article or create_article_translation without opening a schema.

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?

It names the alternative (get_article with locale) and the condition that selects it (full translated content). The 'metadata only, no body' framing also implicitly states when not to use this tool, though there is no explicit exclusion or prerequisite beyond that.

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

list_categoriesList Help Center CategoriesA
Read-onlyIdempotent

List all Help Center categories. Categories are the top level of the Guide hierarchy (category → section → article); each entry includes its id, name and locale. Results are cursor-paginated. Pair a returned category id with list_sections to drill down, then list_articles to reach articles. Pass a locale to read category names in that translation.

NameRequiredDescriptionDefault
cursorNoPagination cursor from a previous response; omit for the first page.
localeNoLocale for category names (e.g., "en-us", "fr"). Defaults to the Help Center default locale.
page_sizeNoCategories per page (1-100, default 100).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile needs no repetition. The description adds genuinely new behavioral context: entries contain id/name/locale and results are cursor-paginated, which the annotations do not convey.

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

Conciseness4/5

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

Four short sentences, front-loaded with the purpose and followed by hierarchy, return shape, pagination, and parameters. Slightly dense with routing detail, but no sentence is wasted.

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?

For a zero-required-param list tool with a fully documented schema and annotation-covered safety profile, nothing material is missing; return fields, pagination, locale behavior, and follow-up tools are all covered without an output schema.

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?

Schema coverage is 100%, so the baseline is 3; the description earns above baseline by explaining that locale controls the translation used for category names. It also reinforces the pagination model behind the cursor parameter, adding meaning beyond the field labels.

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?

States a specific verb and resource (list Help Center categories) and immediately locates it in the Guide hierarchy, distinguishing it from list_sections and list_articles. An agent can tell exactly what this returns and where it sits.

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?

Gives an explicit drill-down path (category id → list_sections → list_articles) and a condition for using the locale parameter. It stops short of stating when NOT to use it (e.g., when you already have a category id), but the routing context is clear.

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

list_category_translationsList Category TranslationsA
Read-onlyIdempotent

List the translations of a Help Center category: for each locale, the localized name, whether a description is set, and whether the translation is published or still a draft. Reach for this when a category looks wrong in a locale, because list_categories with that locale cannot settle it: a category with no translation is omitted from it, while a category whose translation is an unpublished draft may still be listed there under the draft name — so appearing in that listing does not mean published, and the draft flag here is what decides. Fix either case with set_category_translation; to sweep every category and section at once, use find_translation_gaps.

NameRequiredDescriptionDefault
category_idYesCategory ID — the numeric id of the Help Center category. Obtain it from list_categories or the zendesk-hc://topology resource.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive). Beyond that, the description discloses meaningful behavioral nuance: untranslated categories are omitted from list_categories while unpublished drafts may still appear there, and the draft flag here is authoritative. It doesn't cover pagination or exact return shape, but adds real value.

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

Conciseness4/5

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

Front-loads the verb and resource, then adds only information that routes the agent correctly. It is on the longer side, but nearly every clause carries actionable distinction rather than filler.

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?

With no output schema, the description correctly describes the returned fields, and single-parameter input is fully covered by the schema. An agent has everything needed to select and invoke the tool correctly.

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 100% and the single category_id parameter is already fully documented in the schema (including where to obtain it). The description adds no parameter-level detail, so the baseline 3 applies.

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?

States a specific verb and resource ('List the translations of a Help Center category') and enumerates exactly what is returned per locale (localized name, description presence, published vs draft). It clearly distinguishes itself from siblings like list_categories and set_category_translation.

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 states when to reach for it ('when a category looks wrong in a locale') and why the obvious alternative fails (list_categories omits untranslated categories and lists drafts). It names the fix tool (set_category_translation) and the bulk alternative (find_translation_gaps).

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

list_content_tagsList Content TagsA
Read-onlyIdempotent

List Guide content tags, which are end-user-visible labels that help readers find related articles. Results are cursor-paginated (follow the returned cursor to enumerate the full list) and sorted by name by default. Pass name_prefix to look a tag up by the start of its name — do this before create_content_tag to reuse an existing tag rather than fragment the taxonomy. For internal, non-end-user search labels, see list_labels instead.

NameRequiredDescriptionDefault
cursorNoPagination cursor from a previous response; omit for the first page.
sort_byNoField to sort by; "name" (the default) lists tags alphabetically.name
page_sizeNoContent tags per page (1-30, default 30). The Guide content-tags endpoint caps each page at 30; follow the returned cursor to enumerate the full list.
sort_orderNoSort direction: ascending or descending.asc
name_prefixNoReturn only content tags whose name starts with this prefix (prefix match — not a substring or fuzzy search). Use the full name to check whether a specific tag already exists before creating it.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds non-obvious behavioral context beyond that: results are cursor-paginated and must be enumerated by following the returned cursor, and sorting defaults to name. It does not mention auth requirements or rate limits, but the pagination/ordering disclosure is genuinely additive.

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?

Three sentences, each load-bearing: identity/scope first, then pagination and ordering behavior, then the lookup workflow and the sibling alternative. No filler, no restatement of the title, and the most decision-relevant facts are front-loaded.

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?

For a read-only, paginated list tool, the description covers everything needed to call it correctly: what it returns, how to page through it, default ordering, the prefix-lookup workflow, and the boundary with list_labels. No output schema exists, but the description adequately characterizes the returned collection and its pagination contract.

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 100%, so all five parameters are already documented, including that name_prefix is a prefix match rather than a fuzzy/substring search and the page_size cap of 30. The description paraphrases these rather than adding format or unit detail, so the baseline of 3 applies; the only extra is the workflow intent behind name_prefix, which is more usage than parameter semantics.

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?

States a specific verb and resource ('List Guide content tags') and immediately defines the domain object as 'end-user-visible labels that help readers find related articles'. It explicitly separates itself from the sibling list_labels by scoping those as 'internal, non-end-user search labels', so an agent can route correctly without opening either schema.

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?

Gives explicit when-to-use guidance: pass name_prefix and 'do this before create_content_tag to reuse an existing tag rather than fragment the taxonomy'. It also names the alternative tool and the condition that selects it ('For internal, non-end-user search labels, see list_labels'). Both a positive workflow and an exclusion are provided.

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

list_labelsList Article LabelsA
Read-onlyIdempotent

List all article labels, with each label's id and name. Labels improve Help Center search ranking and are not visible to end users. Attach them to an article through the label_names parameter of create_article or update_article, reusing an existing label rather than coining a near-duplicate. Labels are not content tags: for the end-user-visible tags readers browse by, use list_content_tags.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, so the safety profile is covered. The description adds genuinely non-obvious behavior: labels are internal (invisible to end users) and improve Help Center search ranking, plus where labels are consumed by other tools. It does not discuss pagination or result limits, which keeps it below a 5.

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?

Four tight sentences: what it returns first, then the non-obvious semantics, then how to use the output, then the disambiguation. Nothing is repeated from annotations and no sentence is filler.

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?

A no-param, read-only list tool with no output schema, and the description supplies the return shape (id + name), the meaning of the resource, and the routing to the right sibling. Nothing an agent needs to invoke or interpret it is missing.

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?

Zero-parameter tool, so the baseline is 4. The description goes slightly further by pointing at label_names on create_article/update_article as the downstream consumer of the returned names, giving the values practical 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?

Specific verb+resource ('List all article labels') plus the return shape (each label's id and name), and it explicitly distinguishes itself from the similarly named list_content_tags. An agent can separate it from siblings without opening a schema.

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?

States the action to take after listing (attach via label_names on create_article/update_article), advises reusing existing labels over coining near-duplicates, and names the alternative tool with the condition that selects it ('for end-user-visible tags readers browse by, use list_content_tags').

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

list_macrosList Zendesk MacrosA
Read-onlyIdempotent

List the active macros available to the authenticated user. A macro bundles a canned reply and/or a set of field changes (status, priority, assignee, group, tags, custom fields) an agent applies to a ticket in one gesture; this returns each macro id, title, description, availability scope, and its ordered list of actions, offset-paginated. Results are scoped by per-user OAuth to what the current user can see, so no shared admin key is needed. Pass a macro id from here to preview_macro_diff to preview its effect on a specific ticket.

NameRequiredDescriptionDefault
pageNo1-based page number for offset pagination. Increment it while keeping `per_page` fixed to fetch subsequent pages; page 1 is the first page.
per_pageNoNumber of results per page for offset pagination (1-100). Pair with `page` to walk large result sets; the response header reports the total count and whether more pages remain.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is covered. The description adds real context beyond that: results are scoped by per-user OAuth to what the current user can see and no shared admin key is needed, plus the offset-paginated return shape.

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

Conciseness4/5

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

The purpose is front-loaded in the first sentence, followed by definition, return shape, scoping and routing. It is denser than strictly needed (the macro definition sentence is long), but each clause carries information and nothing is redundant.

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?

With no output schema, the description compensates by enumerating the returned fields, and it also covers pagination behavior, auth scoping, and the follow-up tool. An agent has everything needed to call and then chain this tool correctly.

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 100% and both parameters (page, per_page) are fully documented in the schema itself. The description only notes 'offset-paginated' generically without adding format or default details beyond what the schema already provides, so the baseline 3 applies.

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 gives a specific verb (List) and resource (active macros), then defines what a macro is and what is returned (id, title, description, availability scope, ordered actions). It clearly distinguishes this from siblings like list_labels and list_views by describing the resource and its scope.

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?

It explicitly routes the agent forward: 'Pass a macro id from here to preview_macro_diff to preview its effect on a specific ticket,' which is genuine when-to-use guidance for a sibling. It does not, however, state when this tool should NOT be used or contrast it against other listing tools beyond that single forward reference.

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

list_organizationsList Zendesk OrganizationsA
Read-onlyIdempotent

List all organizations with pagination. Returns the name and id of each organization plus basic fields; results are cursor-paginated. Use get_organization with an id for full details (tags, domains, notes), or search for query-based lookups by name. Organizations group end users and can be referenced when creating or filtering tickets.

NameRequiredDescriptionDefault
cursorNoPagination cursor from a previous response; omit for the first page.
page_sizeNoOrganizations per page (1-100, default 100).

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds value by disclosing the return shape (name/id plus basic fields) and that results are cursor-paginated, though it doesn't mention rate limits or page-size behavior 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.

Conciseness4/5

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

Three sentences, front-loaded with the core action and pagination, followed by alternatives and a brief domain note. Dense and mostly waste-free, though the closing sentence about organizations grouping end users is useful context rather than strictly essential.

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?

With no output schema, the description appropriately fills the gap by naming returned fields and pagination semantics. It is nearly complete for a simple list tool; only finer pagination termination details are absent, which the cursor parameter largely covers.

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 100% and both parameters (cursor, page_size) are fully documented in the schema. The description only restates 'with pagination' and adds no syntax or format detail beyond the structured fields, so baseline 3 applies.

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?

States a specific verb and resource ('List all organizations with pagination') and immediately names the returned fields, then explicitly distinguishes itself from get_organization and search. An agent can select this over its siblings without opening a schema.

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?

Gives explicit alternatives and the condition selecting each: use get_organization with an id for full details (tags, domains, notes), or search for query-based lookups by name. This is a clear when-to-use-this vs when-to-use-something-else routing.

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

list_permission_groupsList Permission GroupsA
Read-onlyIdempotent

List all Guide permission groups, which control who can edit and publish an article, with each group's id, name and whether it is built-in. Use this to find the permission_group_id required when creating articles with create_article, or to change it with update_article; to control who can view an article instead, use list_user_segments. Zendesk restricts this list to Guide admins and Help Center managers: without that role the call fails, and you can reuse the permission_group_id of an existing article read with get_article.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so the description correctly focuses on what annotations cannot express: a hard authorization prerequisite that makes the call fail without the Guide admin or Help Center manager role. It doesn't say anything about ordering, size limits, or whether the list is paginated, which is the remaining gap for an open-world list call.

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

Conciseness4/5

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

Front-loaded with purpose and return fields, then usage routing, then the auth caveat — a good information order. The single long sentence with chained semicolons is dense and would scan better split into two or three sentences, but no clause is filler.

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?

With no parameters and no output schema, the description carries the full explanatory burden and does so: it names the returned fields, the permission prerequisite, the downstream consumers (create_article/update_article), and the sibling that handles the complementary permission concern. Nothing an agent needs to call this correctly is absent.

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 tool takes zero parameters (additionalProperties: false, empty properties), so there is no parameter semantics to convey. Baseline for a parameterless tool applies; no useful parameter information is missing.

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?

States a specific verb and resource (list Guide permission groups) plus the semantic meaning ('control who can edit and publish an article') and the exact fields returned (id, name, built-in flag). It explicitly distinguishes itself from the sibling that handles the adjacent concern ('to control who can view an article instead, use list_user_segments').

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?

Gives concrete when-to-use cases: obtaining permission_group_id for create_article or changing it via update_article. It also names the alternative tool (list_user_segments) for the view-permission case and offers a shortcut (reuse the permission_group_id from get_article), covering both branches an agent would face.

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

list_promoted_articlesList Promoted Help Center ArticlesA
Read-onlyIdempotent

List the promoted ("featured") Help Center articles — the small, editorially-curated set surfaced at the top of their sections. Returns metadata only (no body); use get_article for full content. COST: the Help Center API has no server-side promoted filter, so this scans article pages (one Zendesk API request per page, up to ARTICLE_RESOURCES_SCAN_MAX_PAGES, default 20) and filters client-side — potentially costly on a large Help Center. Each call performs a fresh, uncached scan, so avoid calling it repeatedly. On a very large Help Center some promoted articles may be omitted, and both the omission and the number of pages scanned are flagged in the output. Lists the default locale. To promote or unpromote an article, use update_article with promoted (requires Help Center admin / Guide admin rights).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, yet the description adds substantial non-obvious behavior: no server-side promoted filter, client-side filtering over up to ARTICLE_RESOURCES_SCAN_MAX_PAGES (default 20) API requests, no caching, and possible omission of promoted articles on very large Help Centers that is flagged in the output.

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

Conciseness4/5

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

Front-loaded with the purpose and the get_article/update_article routing, then the cost model. It is dense and slightly long, but nearly every clause carries operational value; only minor tightening is possible.

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?

No output schema exists, and the description compensates by stating what is returned (metadata only, no body), that the default locale is used, and that truncation and page counts are surfaced in the output. Nothing an agent needs to decide whether to call it is missing.

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?

There are zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. It does usefully clarify the implicit scoping behavior — that it lists the default locale — which an agent could otherwise assume was configurable.

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?

States a specific verb and resource ('List the promoted ("featured") Help Center articles') and narrows the scope precisely ('the small, editorially-curated set surfaced at the top of their sections'). It explicitly differentiates from siblings: 'use get_article for full content' and 'use update_article with `promoted`' to mutate.

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?

Gives explicit when-to-use (reading the curated featured set), when-not-to-use (full content belongs to get_article), the mutation alternative (update_article, with the admin-rights prerequisite), and a strong operational caveat to avoid repeated calls. Nothing is left to inference.

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

list_request_formsList Request FormsA
Read-onlyIdempotent

List the kinds of request you can submit to this Zendesk — the forms a customer picks between on the Help Center, such as "Report a bug" or "Feature request". Returns each form's customer-facing name, its numeric id, and which one is the account default. Call this first when opening a request so the user chooses the right kind, then get_request_form to learn what that form asks for. Only forms that are active and visible to end users are listed; an account with a single form returns just that one. This is the end-user view: agents picking a form for someone else want list_ticket_fields and create_ticket instead.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds real context beyond them: only active end-user-visible forms are returned, and a single-form account yields just one result. It also pre-announces the returned fields (name, id, default flag), which the absent output schema would otherwise leave unknown. The only gap is that it does not discuss pagination or result-size behavior if the hint of multi-form accounts scales.

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?

Four sentences, front-loaded with the identity of the resource, then the sequencing rule, then the scoping caveat, then the sibling exclusion. No redundant restatement of the title and no wasted clauses.

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 zero-parameter read tool with no output schema, the description covers purpose, sequencing, filtering semantics, and return shape, which is enough to call it correctly. Only result-volume or pagination behavior is unstated, a minor omission for a typically small list.

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?

There are zero parameters and 100% schema coverage, so the schema carries the full burden and the description correctly stays silent on inputs. Baseline applies; nothing further is needed.

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?

States a specific verb and resource ("List the kinds of request you can submit") and immediately concretizes it with the Help Center form examples "Report a bug" / "Feature request". It also names the two siblings it is not (list_ticket_fields, create_ticket), so an agent can route without opening another schema.

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?

Gives an explicit ordering rule ("Call this first when opening a request ... then get_request_form") and an explicit exclusion with the alternative for the agent/assist use case. Both when-to-use and when-not-to-use are covered.

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

list_requestsList My RequestsA
Read-onlyIdempotent

List the requests the signed-in user submitted, newest activity first by default. Returns each request with its number, subject, status and whether the user can mark it solved; pass a query to search their own requests by free text instead of listing all of them. Scoped to the caller by Zendesk itself — it can never return anyone else's tickets — which is why an agent calling this sees only requests they raised, not their queue. Use get_request to read one with its full conversation. Agents wanting a queue want list_tickets, search_tickets or get_view_tickets instead.

NameRequiredDescriptionDefault
pageNo1-based page number for offset pagination. Increment it while keeping `per_page` fixed to fetch subsequent pages; page 1 is the first page.
queryNoFree text to match against the caller's own requests. When given, the search endpoint is used instead of the plain listing; omit it to list everything.
statusNoRestrict to these ticket states, e.g. ["open","pending"] for anything still being worked. Validated here because Zendesk silently returns every request when it does not recognise a status.
sort_byNoWhich timestamp orders the results: updated_at surfaces recent activity, created_at the newest submissions.updated_at
per_pageNoNumber of results per page for offset pagination (1-100). Pair with `page` to walk large result sets; the response header reports the total count and whether more pages remain.
sort_orderNoDirection of that ordering; desc puts the most recent first, which is what a user following their tickets wants.desc

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/non-destructive annotations, it discloses the crucial scoping rule that Zendesk enforces caller-scoping so the tool can never return another user's tickets, plus the default ordering and the fields returned per request (number, subject, status, solvability). The openWorldHint annotation is not contradicted — the scoping claim is about the API's authorization boundary, not reach.

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

Conciseness4/5

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

Four sentences, front-loaded with what the tool returns before moving to alternatives. Dense but nearly every clause carries information; the scoping explanation is slightly long-winded relative to the rest.

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?

No output schema exists, yet the description enumerates the returned fields and flags the per-item solvability check, and the pagination/total-count behaviour is documented in the parameter descriptions. For a six-parameter read-only list tool whose annotations already cover safety, nothing an agent needs is missing.

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?

Schema coverage is 100%, so the baseline is 3; the description earns an extra point by explaining that supplying `query` switches the tool to the search endpoint rather than filtering a listing, and by noting results are newest-activity-first by default. It stops short of covering pagination behaviour, which the schema already handles.

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 states a specific verb and resource ("List the requests the signed-in user submitted") and immediately contrasts it with get_request for single-request reads and with list_tickets / search_tickets / get_view_tickets for queue-style work. An agent can distinguish this from every relevant sibling without opening a schema.

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 gives explicit when-to-use guidance (own submissions, not a queue), a documented alternative path within the same tool ("pass a query to search their own requests ... instead of listing all of them"), and names the correct sibling tools for the queue case. Both the positive case and the exclusion are stated.

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

list_sectionsList Help Center SectionsA
Read-onlyIdempotent

List Help Center sections. Sections are the middle level of the Guide hierarchy (category → section → article) and group related articles; each entry includes its id, name, category_id and locale. Results are cursor-paginated. Pass category_id to list only one category's sections (ids come from list_categories), then use a section id with list_articles. Pass a locale to read section names in that translation.

NameRequiredDescriptionDefault
cursorNoPagination cursor from a previous response; omit for the first page.
localeNoLocale for section names (e.g., "en-us", "fr"). Defaults to the Help Center default locale.
page_sizeNoSections per page (1-100, default 100).
category_idNoRestrict to sections of this category (id from list_categories). Omit to list every section.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is low. The description adds real behavioral context the annotations lack: results are cursor-paginated and locale defaults to the Help Center default if omitted. It stops short of describing ordering or empty-page behavior.

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

Conciseness4/5

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

Front-loaded with purpose, then hierarchy, return fields, pagination and workflow in four tight sentences. Each sentence carries distinct information, though the hierarchy explanation is somewhat parenthetical to the call itself.

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?

No output schema exists, but the description compensates by listing the returned fields, the pagination mechanism, and the default locale behavior. Combined with full schema coverage, an agent has everything needed to call it correctly on the first try.

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 coverage is 100%, so the schema already documents cursor, locale, page_size and category_id with types, defaults and bounds. The description largely restates these ('ids come from list_categories', 'pass a locale'), adding only light sourcing context rather than new semantics. Baseline 3 applies.

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?

States a specific verb+resource ('List Help Center sections') and situates it precisely in the Guide hierarchy (category → section → article), which cleanly separates it from siblings list_categories and list_articles. It also enumerates the returned fields, so an agent knows exactly what it gets.

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 routes the agent: pass category_id (which comes from list_categories) to scope to one category, then use a returned section id with list_articles. This names the prerequisite call and the downstream call, covering both when and how to use it.

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

list_section_translationsList Section TranslationsA
Read-onlyIdempotent

List the translations of a Help Center section: for each locale, the localized name, whether a description is set, and whether the translation is published or still a draft. Reach for this when a section looks wrong in a locale, because list_sections with that locale cannot settle it: a section with no translation is omitted from it, while a section whose translation is an unpublished draft may still be listed there under the draft name — so appearing in that listing does not mean published, and the draft flag here is what decides. Fix either case with set_section_translation; to sweep every category and section at once, use find_translation_gaps.

NameRequiredDescriptionDefault
section_idYesSection ID — the numeric id of the Help Center section. Obtain it from list_sections or the zendesk-hc://topology resource.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantive behavioral context beyond them: untranslated sections are omitted from listings, and draft translations may appear under the draft name, so 'listed' does not imply 'published'. It also discloses the shape of the returned data without an output schema.

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

Conciseness4/5

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

Front-loaded with purpose and the returned fields, then the usage scenario and routing. The middle clause explaining the draft-listing nuance is dense but load-bearing rather than padding, so the length is justified even if the sentence is somewhat convoluted.

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?

With no output schema, the description compensates by describing the returned fields, and it supplies the parameter's origin, the disambiguating rules, and both follow-up routes. An agent has everything needed to call it correctly and interpret the result.

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 coverage is 100% and the single section_id parameter is already documented in the schema, including its source (list_sections or the topology resource). The description adds no further syntax or format detail, so the baseline 3 applies.

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?

States a specific verb and resource ('List the translations of a Help Center section') and enumerates the returned fields (localized name, description set, published/draft). It explicitly distinguishes itself from the sibling list_sections by naming the exact situation where the two differ.

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?

Gives an explicit trigger ('when a section looks wrong in a locale'), explains why the obvious alternative (list_sections) cannot answer the question, and names both the remediation tool (set_section_translation) and the bulk alternative (find_translation_gaps). Nothing about when-to-use vs alternatives is left to inference.

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

list_sla_alertsList SLA AlertsA
Read-onlyIdempotent

List the SLA metrics that are breached or about to breach across a set of tickets, most urgent first. Pick the set with exactly one of scope (mine, my_groups or all unsolved tickets), view (a Zendesk view by title or id) or query (any Zendesk ticket search). Each running metric that is breached, or closer to its breach than its CRITICAL or WARNING threshold, is one line under BREACHED, CRITICAL or WARNING, soonest breach first, with the ticket id, metric, time left or overdue, subject, status and priority; paused and achieved metrics never appear. Thresholds are per metric family (reply metrics vs every other metric), the caller's own when set with configure_sla_alerts, else the server's; warning and critical override them for this call only. When no set is given the client may be asked which one, otherwise it defaults to the caller's own tickets and says so; on a user's first call the thresholds are shown too (in that form, or in the reply), and thresholds edited there apply to this call only. Never changes Zendesk; its one side effect is remembering, in this connector's own per-user state, that the user has been shown the thresholds. Results are cached per user for about a minute, and a set larger than a few hundred tickets is read in part, with a notice. For one ticket's full SLA state use get_ticket; for elapsed times use get_ticket_metrics.

NameRequiredDescriptionDefault
viewNoA Zendesk view to check, by its exact title (matched case-insensitively) or numeric id, as listed by list_views. Use instead of scope or query.
queryNoA Zendesk ticket search query selecting the tickets to check, e.g. "status<solved priority:urgent" or "organization:acme status<solved"; "type:ticket" is added automatically. Use instead of scope or view.
scopeNoA named set of unsolved tickets: "mine" (assigned to you), "my_groups" (in any group you belong to) or "all" (the whole account, as far as your role sees it). Use instead of view or query.
withinNoOnly list alerts breaching within this time from now (breached ones aside, see include_breached). A readable duration: 30m, 4h, 2d, 1w, or a mix like 1d4h. Omit to list everything inside the thresholds.
warningNoOverride the WARNING threshold of every metric family for this call only: how much time left before a breach counts as a warning. Given alone, a family's critical threshold is lowered to it where longer. A readable duration: 30m, 4h, 2d, 1w, or a mix like 1d4h.
criticalNoOverride the CRITICAL threshold of every metric family for this call only. Given alone, a family's warning threshold is raised to it where shorter; given with warning, it must not exceed it. A readable duration: 30m, 4h, 2d, 1w, or a mix like 1d4h.
include_breachedNoWhether to list metrics already past their deadline (BREACHED). Defaults to true; set false to see only what can still be saved.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the readOnly/idempotent annotations: results are cached per user for about a minute, sets larger than a few hundred tickets are partially read with a notice, paused and achieved metrics never appear, and thresholds are resolved per metric family. It even discloses the one side effect (remembering in per-user state that thresholds were shown) rather than hiding it behind readOnlyHint.

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

Conciseness4/5

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

Dense but front-loaded, leading with purpose and the scope/view/query choice before the output-format and threshold detail. The single long semicolon-chained sentence carrying the display-format rules is harder to scan than it needs to be, but little of the content is filler for a seven-parameter 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?

For a read-only list tool with no output schema, the agent gets output shape (one line per metric under BREACHED/CRITICAL/WARNING with id, metric, time left, subject, status, priority), caching and truncation behavior, threshold resolution order, and where to go for adjacent needs. Nothing material is missing.

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?

Schema coverage is already 100%, but the description adds real meaning: the mutual exclusivity of scope/view/query, how a lone warning lowers critical and a lone critical raises warning, and that each running metric is only listed if closer to breach than its threshold. The within/include_breached interaction is described but only by pointing back at the 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?

States a specific verb and resource ("List the SLA metrics that are breached or about to breach across a set of tickets, most urgent first") including the ordering and the inclusion rule. It also explicitly distinguishes itself from get_ticket and get_ticket_metrics, which are the closest siblings.

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?

Gives an explicit selection rule — "exactly one of scope (...) view (...) or query" — and names the follow-up tools for the adjacent jobs (get_ticket for a single ticket's SLA state, get_ticket_metrics for elapsed times). It also documents the no-argument fallback: the client may be prompted, otherwise it defaults to the caller's own tickets and says so.

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

list_sla_policiesList SLA PoliciesA
Read-onlyIdempotent

List the configured SLA policies with their filter conditions and per-priority reply/resolution targets. Use this to explain why a given target applies to a ticket and to reconstruct deadlines deterministically instead of hard-coding the policy matrix. Requires an admin token (or a custom role granted the SLA-management permission); a standard agent token gets 403 here, though it can still read live per-ticket SLA via get_ticket / search_tickets.

NameRequiredDescriptionDefault
pageNo1-based page number for offset pagination. Increment it while keeping `per_page` fixed to fetch subsequent pages; page 1 is the first page.
per_pageNoNumber of results per page for offset pagination (1-100). Pair with `page` to walk large result sets; the response header reports the total count and whether more pages remain.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description correctly focuses on what annotations cannot convey: the admin-token requirement and the concrete 403 failure mode for standard agent tokens, plus the workaround. It stops short of describing pagination behavior or output shape details beyond the field list, but the auth disclosure is genuinely additive.

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

Conciseness4/5

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

Front-loaded with the resource and payload, then usage, then access constraints. Two sentences with no filler, though the second sentence is dense and could be split for readability.

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?

With no output schema, the description carries the return-value burden and does so at a summary level (filters + per-priority targets) while covering auth and pagination. Adequate for a read-only list tool, short only of exact field-level detail.

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 100% and both page/per_page descriptions already explain offset pagination, total-count headers and the 100 cap. The description adds nothing about the parameters, so the baseline 3 applies.

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?

Specific verb+resource ("List the configured SLA policies") plus a precise statement of what is returned: filter conditions and per-priority reply/resolution targets. An agent can distinguish it from get_ticket/search_tickets, which return per-ticket SLA state rather than the policy matrix.

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 states the use case (explain why a target applies, reconstruct deadlines instead of hard-coding the matrix) and names the alternative path for live per-ticket SLA via get_ticket / search_tickets. Both when-to-use and the fallback are given.

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

list_ticket_commentsList Zendesk Ticket CommentsA
Read-onlyIdempotent

Read a ticket's conversation — public replies and internal notes with their full bodies — one cursor-paginated page at a time, newest comment first. Each entry carries the comment id, the author resolved to a name, the timestamp, whether it is public or internal, and the ids of any attached files. Prefer this over get_ticket(include_comments=true) whenever a thread is long or you only need the latest exchange: get_ticket appends the thread as one unpaginated block and cuts it past the response character limit, which drops the most recent comments first. Keep sort_order "desc" (the default) to read the latest reply first and follow the returned cursor to walk further back in time, or pass "asc" to replay the conversation forward from the ticket's opening description. For who changed which field and when — without comment bodies — use get_ticket_history; to download the attached files themselves, pass the attachment ids shown here to get_ticket_attachments.

NameRequiredDescriptionDefault
cursorNoPagination cursor from a previous response; omit for the first page. Zendesk issues it for the ordering that response used, so after changing sort_order drop the cursor and start again from the first page.
page_sizeNoComments per page (1-100, default 20). The default is deliberately small because comment bodies are long and a bigger page risks being cut short by the response character limit; follow the returned cursor rather than raising it.
ticket_idYesTicket ID — the numeric id of the ticket whose conversation to read. Obtain it from search_tickets or list_tickets.
sort_orderNoChronological direction of the page. "desc" (the default) starts at the most recent comment and walks backward in time, which is what you want to see the latest reply; "asc" replays the conversation forward, starting from the ticket's opening description — that first comment therefore lands on the last page under "desc".desc

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), so this adds context instead: the truncation behavior of the alternative tool and which end it drops, cursor invalidation when sort_order changes, and the deliberately small default page size rationale. These are non-obvious operational traits an agent cannot infer from annotations or schema.

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

Conciseness4/5

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

Front-loaded with purpose and returns, followed by tool routing and parameter guidance — a sensible ordering. It is dense and the final sentence runs long, but each clause carries a distinct routing or behavioral fact rather than filler.

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?

With no output schema, the description enumerates the returned fields (comment id, resolved author name, timestamp, public/internal flag, attachment ids), and it covers pagination, ordering, and sibling alternatives. An agent has everything needed to invoke and use the result 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?

Schema coverage is 100%, so much of the parameter detail duplicates the schema (cursor semantics, page_size bounds, sort_order enum). The description still adds decision-level guidance — keep the default 'desc' for the latest reply, follow the cursor rather than raising page_size — which is meaning beyond the raw field definitions.

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?

States a specific verb and resource ('Read a ticket's conversation — public replies and internal notes with their full bodies') and immediately scopes the retrieval model (cursor-paginated, newest first). It explicitly distinguishes itself from get_ticket, get_ticket_history, and get_ticket_attachments by name.

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?

Gives an explicit routing rule: 'Prefer this over get_ticket(include_comments=true) whenever a thread is long or you only need the latest exchange,' and explains why (unpaginated block truncated past the character limit, dropping newest comments). It also routes field-change history to get_ticket_history and file downloads to get_ticket_attachments.

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

list_ticket_fieldsList Ticket FieldsA
Read-onlyIdempotent

List the ticket field definitions configured on this Zendesk (both system fields and custom fields), returning each field's id, type, whether it is active/required, and — for dropdown and multiselect fields — the valid option values. Use this to discover the numeric field ids and accepted option tags that create_ticket and update_ticket expect in their custom_fields argument, so a natural-language intent ("set severity to High") maps to the right id and a value Zendesk will accept instead of a blind guess. Read-only reference lookup; cursor-paginated in Zendesk's default field order.

NameRequiredDescriptionDefault
cursorNoPagination cursor from a previous response; omit for the first page.
page_sizeNoTicket field definitions per page (1-100, default 100).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/destructive, so the safety profile is known. The description adds real value beyond them: the exact returned attributes (id, type, active/required, dropdown option values) and pagination behavior ('cursor-paginated in Zendesk's default field order'). It stops short of richer detail like rate limits or total-count semantics, so 4 rather than 5.

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?

Front-loaded with what it returns, then why to call it, then behavioral notes. Three dense sentences with no filler; every clause earns its place.

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?

No output schema exists, so the description carries the burden of explaining return values, and it does so concretely (id, type, active/required, option values). Combined with the pagination note, an agent has everything needed to call and interpret this tool.

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 100%, so cursor and page_size are fully documented in the schema itself. The description only alludes to pagination generally and adds no syntax or format detail beyond the schema, making the baseline 3 correct.

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?

Specific verb (List) plus resource (ticket field definitions) with explicit scope: system fields and custom fields, plus the returned attributes. It is immediately distinguishable from siblings like list_labels, get_ticket, or create_ticket.

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 states when to use it: to discover numeric field ids and option tags that create_ticket and update_ticket expect in custom_fields, with a concrete example ('set severity to High'). This routes the agent to the correct tool and names the downstream alternatives.

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

list_ticketsList Zendesk TicketsA
Read-onlyIdempotent

List tickets with cursor-based pagination, in Zendesk's default order (ascending ticket id), not by recency. Page size is controlled by page_size (not per_page, which is the offset-based parameter used by search_tickets); paginate by passing the returned cursor. To find tickets by recency or any other criterion, use search_tickets with a query. Each ticket's description is cut to a 200-character excerpt; get_ticket returns it in full.

NameRequiredDescriptionDefault
cursorNoPagination cursor from a previous response; omit for the first page.
page_sizeNoTickets per page (1-100, default 25).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/openWorldHint, so safety is covered. Beyond that the description discloses two non-obvious traits: the non-recency default ordering and that each ticket's description is truncated to a 200-char excerpt (with get_ticket as the escape hatch). It does not describe the response envelope or page-limit exhaustion behavior, but the truncation and ordering caveats are exactly the kind of context annotations cannot carry.

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?

Four tight sentences, each carrying a distinct fact: ordering, page-size naming trap, pagination mechanics, and the search_tickets alternative plus truncation note. Front-loaded with the ordering caveat, which is the highest-risk assumption an agent would make.

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 two-parameter read tool with no output schema, the description covers pagination, ordering, and the data-fidelity caveat an agent needs to decide whether to follow up with get_ticket. Minor gap: it doesn't characterize the returned list shape or whether an empty cursor signals the last page, both of which matter for loop termination.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema cannot: it warns that page size is page_size, not per_page (the offset-based parameter on search_tickets), heading off a likely misuse, and clarifies that cursor values come from prior responses. That is genuine added semantics rather than restatement.

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?

States a specific verb and resource ('List tickets') and immediately pins down scope and ordering: cursor-based pagination, Zendesk default ascending ticket id order, not recency. It explicitly contrasts with search_tickets, so an agent can distinguish the two without inspecting either schema.

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?

Explicit routing: use this tool for straight ticket enumeration; use search_tickets with a query for recency or any other criterion. It also tells the agent to paginate by passing the returned cursor, covering the continuation path.

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

list_user_segmentsList User SegmentsA
Read-onlyIdempotent

List all Help Center user segments, which control article visibility (who can view an article), with each segment's id, name, user type and whether it is built-in. Use the id as user_segment_id when creating or updating articles with create_article or update_article; to control who can edit an article instead, use list_permission_groups. Zendesk restricts this list to Guide admins and Help Center managers: without that role the call fails, and you can reuse the user_segment_id of an existing article from get_article, or omit it on create_article to make the article visible to everyone.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description does add material context the annotations lack — Zendesk restricts the call to Guide admins and Help Center managers and it fails without that role — but it says nothing about ordering, pagination, or limits. That added auth/failure detail is real value, though not rich enough to warrant a top score.

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

Conciseness4/5

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

Information is front-loaded: what segments are, then the returned fields, then the id handoff, then the auth caveat. It is dense and largely earns its space, but it runs long with the trailing create_article default-behavior clause appended in the same breath, making it a heavy single block.

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?

For a zero-parameter read tool with no output schema, the description covers purpose, return fields, auth requirement, and downstream id usage. An agent has everything needed to decide to call it and to interpret the result.

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 tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The only semantics mentioned (user_segment_id) belong to other tools, not this one's inputs.

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?

Names a specific verb and resource ('List all Help Center user segments'), then explains what a segment actually is — it controls article visibility — and enumerates returned fields (id, name, user type, built-in). This is clearly distinguishable from list_permission_groups, which it explicitly names as the sibling for a different concern.

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?

Gives explicit routing: use this tool's id as user_segment_id in create_article/update_article, use list_permission_groups instead to control edit permissions, and reuse the segment id from get_article or omit it to default to everyone-visible. Both the when-to-use and the alternatives are spelled out.

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

list_viewsList Zendesk ViewsA
Read-onlyIdempotent

List the agent's active Zendesk views — the saved ticket queues ("Unassigned tickets", "My open tickets", "Breaching today") the agent sees in the Zendesk UI — each with its current ticket count so you can tell at a glance where the workload sits. Views are per-agent scoped, so per-user auth returns exactly the queues this agent can see, with no shared key. Counts come from Zendesk's cache and can lag by up to about an hour (shown as "(count updating)" while a fresh value is still being computed); pass a view's title or id to get_view_tickets to read the tickets inside it.

NameRequiredDescriptionDefault
cursorNoPagination cursor from a previous response; omit for the first page.
page_sizeNoViews per page (1-100, default 100).

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/non-destructive annotations, it discloses genuinely non-obvious behavior: per-agent scoping tied to per-user auth, counts served from Zendesk's cache with up to ~1 hour lag, and the '(count updating)' sentinel state. These are exactly the gotchas an agent needs and are not derivable from structured fields.

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

Conciseness4/5

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

Front-loads the core purpose and keeps to one dense paragraph where each clause (examples, counts, scoping, staleness, hand-off) carries information. Slightly long and clause-heavy, but no filler sentences.

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?

With no output schema, the description still conveys the return shape (views each with a ticket count) and the caveat about stale counts. Combined with the annotated safety profile and a fully covered 2-param schema, nothing needed to call it correctly is missing.

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 100%, so cursor and page_size are already fully documented in the schema. The description adds no parameter-level detail (no mention of pagination or page-size tradeoffs), so the baseline 3 applies.

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?

States a specific verb and resource (list Zendesk views) and immediately grounds it with concrete examples ('Unassigned tickets', 'My open tickets') and the payload (views with current ticket counts). It also names the sibling get_view_tickets as the follow-up tool, so an agent can distinguish it without opening either schema.

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?

Clearly signals the context of use ('tell at a glance where the workload sits') and hands off explicitly to get_view_tickets for drilling into tickets. It lacks an explicit when-not-to-use statement or a mention of list_tickets/search_tickets as alternatives, so it stops short of the top band.

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

manage_tagsManage Ticket TagsA
DestructiveIdempotent

Add or remove tags on a ticket. Performs an incremental read-modify-write: it fetches the ticket's current tags, adds those in add and deletes those in remove, then saves the merged set — tags you don't list are left untouched and duplicates are collapsed. Adding a tag already present, or removing one that is absent, is a no-op (idempotent). Returns the ticket's full tag set after the update. Use this for incremental tag edits; to overwrite the entire tag set at once, or to change tags alongside other fields, use update_ticket instead. Find the ticket id via search_tickets or list_tickets.

NameRequiredDescriptionDefault
addNoTags to add. Zendesk tags are single tokens: a value containing spaces is stored as separate tags rather than one tag, so join multi-word tags yourself with an underscore or dash (e.g. "urgent_request"). Adding a tag already on the ticket is a no-op. Omit to only remove.
removeNoTags to remove. Removing a tag that is not present is a no-op; tags not listed here stay in place. Omit to only add.
ticket_idYesTicket ID — the numeric id of the ticket whose tags to modify. Obtain it from search_tickets or list_tickets.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare idempotent/destructive/openWorld, but the description adds the mechanism the annotations cannot express: an incremental read-modify-write that merges rather than replaces, collapses duplicates, leaves unlisted tags untouched, and returns the full post-update tag set. This is exactly the kind of beyond-annotation context that prevents data loss.

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

Conciseness4/5

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

Front-loaded with the core action, then mechanics, then routing to alternatives. Dense and mostly waste-free, though the mechanics and idempotency points could be trimmed by a sentence without losing meaning.

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?

Though there is no output schema, the description states the return value ('full tag set after the update'), the mutation semantics, and the sibling routing. Nothing an agent needs to call this correctly and safely is missing.

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?

Schema coverage is 100% and already documents add/remove omission and no-op semantics, so the baseline is 3. The description goes slightly beyond the schema by stating the merge/duplicate-collapse behavior and that unlisted tags survive, which clarifies how the two arrays interact.

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?

States a specific verb pair and resource ('Add or remove tags on a ticket') and immediately names the sibling it is not for ('to overwrite the entire tag set at once ... use update_ticket instead'). An agent can distinguish it from update_ticket or create_content_tag without opening any schema.

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?

Explicit when-to-use ('incremental tag edits') plus an explicit when-not with the named alternative (update_ticket for overwrite or combined field changes). It even tells the agent how to obtain the required ticket_id via search_tickets or list_tickets.

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

mark_request_solvedMark My Request SolvedA
DestructiveIdempotent

Close one of the signed-in user's own requests, for when they consider it resolved. Returns the request's status read back from Zendesk, not merely an acknowledgement: this operation is refused unless the request is actually solvable by its requester, because Zendesk answers 200 and changes nothing when it is not, which would otherwise be reported as success. A request is only solvable once an agent has been assigned to it, so a brand-new or unassigned one cannot be closed this way — leave it, or reply with add_request_comment to say it is no longer needed. Marking an already-solved request solved again is a no-op. Agents closing a ticket want update_ticket with status solved.

NameRequiredDescriptionDefault
request_idYesNumber of the request to close. Check get_request first: its "can you mark it solved" line has to say yes.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already flag mutation, destructiveness, idempotency and open-world reach, but the description adds genuinely new behavior: it returns the status read back from Zendesk rather than an acknowledgement, and it self-refuses unless the request is solvable because Zendesk returns 200 while changing nothing. The no-op-on-already-solved note reinforces but largely restates idempotentHint=true, which keeps this just short of a 5.

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

Conciseness4/5

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

Front-loaded with the action, then failure modes, then alternatives; no sentence is filler. It is a single dense block with long subordinate clauses ('because Zendesk answers 200 and changes nothing when it is not, which would otherwise be reported as success'), which costs some scannability but not accuracy.

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?

There is no output schema, and the description compensates by describing the return value (status read back from Zendesk) and the misleading-success trap. Combined with the prerequisite, no-op behavior and fallback path, nothing needed to call this correctly or interpret its result is missing.

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?

Schema coverage is 100% and the single parameter is already documented, so the baseline is 3. The description adds constraint meaning the schema lacks: the request must belong to the signed-in user and must be solvable (agent assigned), which tells the agent which request_id values are even valid.

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?

States a specific verb and resource with explicit scope: 'Close one of the signed-in user's own requests, for when they consider it resolved.' It also distinguishes itself from the sibling that handles the agent-side equivalent ('Agents closing a ticket want update_ticket with status solved'), so the agent can route without opening either schema.

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?

Gives explicit when-to-use (requester considers it resolved), when-not (brand-new or unassigned requests cannot be closed this way) plus the fallback action (reply with add_request_comment), and names the sibling for the agent-side case (update_ticket). Every branch an agent could land in is covered.

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

preview_macro_diffPreview a Macro Diff on a TicketA
Idempotent

Preview the exact changes a macro would make to a specific ticket, as a before → after diff, WITHOUT saving anything. Orchestrates two reads — the ticket's current state and Zendesk's macro-apply preview (which returns the whole resulting ticket) — and returns only the fields the macro actually changes (status, priority, assignee, group, tags, custom fields) plus the canned reply with its public/internal flag; unchanged and identity fields are omitted. Nothing is committed: to apply it, follow up with update_ticket for the field changes and add_public_comment or add_private_note for the reply. This deliberate two-step keeps the mutation explicit and reviewable rather than hidden. Find macro ids via list_macros and the ticket id via search_tickets or list_tickets.

NameRequiredDescriptionDefault
macro_idYesMacro ID — the numeric id of the macro to preview. Obtain it from list_macros.
ticket_idYesTicket ID — the numeric id of the ticket to preview the macro against. Obtain it from search_tickets or list_tickets.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it explains the two underlying reads (current ticket + macro-apply preview), that unchanged/identity fields are omitted, the exact returned shape (status, priority, assignee, group, tags, custom fields + reply with public/internal flag), and that nothing is persisted. The idempotentHint=true is consistent with a stateless preview.

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

Conciseness4/5

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

Dense and front-loaded: the no-save guarantee and returned-fields summary come first, followed by the follow-up path and id sourcing. The rationale sentence about the 'deliberate two-step' is mildly editorial but still earns its keep by justifying the design.

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?

With no output schema, the description carries the burden of describing the return value, and it does so precisely (only changed fields, reply with its visibility flag, omissions noted). No annotation or schema gaps remain for an agent to call and interpret this tool correctly.

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 100%, so both integer parameters are already documented in the schema, including where to obtain them. The description repeats that sourcing guidance but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

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?

Specific verb (preview) + resource (macro diff on a ticket) with explicit scope: it returns only the fields the macro changes plus the canned reply, and commits nothing. This distinguishes it cleanly from update_ticket, which is named as the actual mutator.

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?

States exactly when to use it (to see a macro's effect before applying) and routes the agent to update_ticket, add_public_comment, and add_private_note for the follow-up write. It also names list_macros, search_tickets, and list_tickets for obtaining the required ids.

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

reorder_articleReorder Help Center ArticleA
DestructiveIdempotent

Reorder an article within its current section by moving it relative to its siblings (top, bottom, or before/after another article), and return whether the new order was applied. This is the reliable way to satisfy "put this article first/last" requests: it writes the minimal set of article positions needed to make the order deterministic, because Zendesk leaves newly created articles tied at position 0 where a plain position update is silently ambiguous. It does NOT move the article to a different section — use update_article with section_id for that. Zendesk exposes no way to read whether a section is manually or automatically sorted, so when the section is sorted automatically (by date or alphabetically) the position writes are ignored; this tool detects that after the fact and returns guidance to switch the section to manual ordering in Guide. A move may reposition several neighbouring articles; when that count exceeds a configurable safety threshold the call is refused unless confirm is set to true.

NameRequiredDescriptionDefault
targetYesWhere to move the article relative to its section siblings: "top" (becomes first), "bottom" (becomes last), or "before"/"after" a specific reference article. "before" and "after" require reference_article_id.
confirmNoSafety guard for large reorders. When the move would rewrite more article positions than the configured threshold (REORDER_CONFIRM_THRESHOLD, default 20), the tool refuses and reports the count until you pass true here. Has no effect on small reorders.
normalizeNoWhen true, also renumber every article in the section to contiguous positions (0, 1, 2, …) so the stored positions stay tidy. Defaults to false, which writes the fewest positions possible and lets gaps remain. Either way the confirmation threshold still applies.
article_idYesArticle ID — the numeric id of the article to move within its section. Obtain it from list_articles or search_articles.
reference_article_idNoThe sibling article to position next to when target is "before" or "after" (numeric id from list_articles). Must belong to the same section and differ from article_id; leave it unset for "top" or "bottom".

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint/readOnlyHint=false/idempotent, but the description goes well beyond them: it explains the position-0 tie ambiguity that motivates minimal writes, discloses that auto-sorted sections silently ignore writes and how that is detected after the fact, and describes the threshold-based refusal requiring confirm. These are non-obvious behavioral traits an agent cannot infer from structured fields.

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

Conciseness4/5

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

Front-loaded with the action and scope, then layered caveats, with zero filler sentences. It is dense and slightly long, but nearly every clause carries decision-relevant information.

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?

Covers the action, the exclusion, the failure mode (auto-sorted sections), the safety gate, and even the return value ("return whether the new order was applied") in the absence of an output schema. Nothing needed to call it correctly is missing.

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 100%, so every parameter including target, confirm, and normalize is already documented in the schema. The description restates the confirm/threshold behavior but adds nothing beyond the schema and never mentions normalize. Baseline 3 is appropriate when the schema does the heavy lifting.

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?

States a specific verb and resource (reorder an article within its current section) plus the precise mechanism (relative to siblings: top, bottom, before/after). It explicitly contrasts itself with the sibling update_article for cross-section moves, so an agent can distinguish it without opening a schema.

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 names the trigger scenario ("put this article first/last" requests) and the alternative (update_article with section_id) for the case this tool does not cover. It also states the automatic-sorting condition under which the tool will not work, which is exactly the kind of when-not guidance that prevents wasted calls.

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

search_articlesSearch Help Center ArticlesA
Read-onlyIdempotent

Full-text search across Help Center articles (metadata only, no body). Use get_article for full content. Supports locale filtering. Returns total count.

NameRequiredDescriptionDefault
pageNo1-based page number for offset pagination. Increment it while keeping `per_page` fixed to fetch subsequent pages; page 1 is the first page.
queryYesFull-text query matched against article titles and body. Plain keywords; combine with the locale filter to scope to one language.
localeNoFilter by locale (e.g., "en-us", "fr")
per_pageNoNumber of results per page for offset pagination (1-100). Pair with `page` to walk large result sets; the response header reports the total count and whether more pages remain.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds genuinely useful context not in the annotations: results are metadata only and exclude article bodies, and the response reports a total count. It does not disclose ranking behavior or empty-result handling, so it is solid but not rich.

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?

Three short sentences with zero filler; the scope constraint (metadata only) and the alternative tool are front-loaded before secondary details like locale and count.

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?

With no output schema, the description usefully states that a total count is returned, and annotations carry the safety profile. Pagination and query semantics live in the schema. What is missing is only marginal – ranking/relevance behavior and how results are ordered.

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 100% – each of the four parameters is documented in the schema, including pagination mechanics. The description only echoes locale filtering, which the schema already explains, so a baseline 3 is appropriate.

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?

States a specific verb and resource ('Full-text search across Help Center articles') with an explicit scope qualifier ('metadata only, no body'). It also names the sibling tool that serves the complementary need (get_article), so an agent can distinguish it without opening either schema.

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?

Explicitly routes the agent to get_article when full content is needed, and notes locale filtering is supported. However, it gives no guidance on when to prefer this over list_articles/list_sections or other sibling listing tools, so the exclusion set is partial.

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

search_ticketsSearch Zendesk TicketsA
Read-onlyIdempotent

Search tickets using Zendesk query syntax, returning each result with its live SLA state (per-metric stage and breach countdown) when an SLA policy applies. Examples: "status:open assignee:me", "priority:urgent ticket_type:incident". Returns total count, so queue triage like "breaching today" works without a per-ticket fetch. When the operator turned SLA push on, each SLA block also carries an Urgency line (BREACHED, CRITICAL or WARNING) against the caller's alert thresholds. Each ticket's description is cut to a 200-character excerpt; get_ticket returns it in full.

NameRequiredDescriptionDefault
pageNo1-based page number for offset pagination. Increment it while keeping `per_page` fixed to fetch subsequent pages; page 1 is the first page.
queryYesZendesk ticket search query — field filters like "status:open", "assignee:me", "priority:urgent ticket_type:incident", combined with free text. A "type:ticket" scope is added automatically, so filter the ticket kind with ticket_type: (e.g. ticket_type:incident), never type: (which the API rejects here). "me" is a value of the user keywords only (assignee:, requester:, submitter:); group:me is read as your group when you belong to exactly one, else the call fails naming your groups, so use group:<id>.
per_pageNoNumber of results per page for offset pagination (1-100). Pair with `page` to walk large result sets; the response header reports the total count and whether more pages remain.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds substantial behavioral context beyond them: SLA blocks appear only when a policy applies, an Urgency line appears only when the operator enabled SLA push, and ticket descriptions are truncated to 200 characters. Those conditional and lossy behaviors are exactly what an agent could otherwise misread.

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

Conciseness4/5

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

Front-loaded with the core action and output shape, and every sentence carries information (examples, count for triage, Urgency line, truncation). Slightly dense — the Urgency-line sentence is niche and could be tightened — but nothing is redundant.

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?

With no output schema, the description carries the return-value burden and does so: total count, per-metric SLA stage and breach countdown, optional Urgency classification, and the 200-character description excerpt with a pointer to get_ticket. Pagination is handled by the schema, so nothing an agent needs is missing.

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 100% and the schema already documents query syntax, the auto-added type:ticket scope, group:me handling, and pagination pairing. The description's example queries largely restate what the schema shows, adding no new parameter meaning beyond the schema. Baseline 3 is appropriate.

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?

States a specific verb and resource (search tickets) plus the query dialect (Zendesk query syntax) and the distinctive enrichment it returns (live SLA state per metric). This clearly separates it from list_tickets (unfiltered listing) and get_ticket (single full record), which the description names explicitly.

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?

Concrete example queries and the 'queue triage like breaching today' scenario tell the agent exactly when this tool shines, and the closing note routes full-description needs to get_ticket. It stops short of explicit exclusions (e.g. when to prefer list_tickets or list_views instead), so not quite a 5.

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

search_usersSearch Zendesk UsersA
Read-onlyIdempotent

Search for users by name, email, or other criteria using Zendesk search query syntax, returning each match's id, name, email, role, active flag and organization id, with the total count. Use it to turn a person into the numeric user id other tools take, such as the followers of update_ticket; a name can match several users, so confirm the right one. With an id already in hand, call get_user to read that one user, and for your own account get_current_user. Prefer it over search when you want users only: search mixes in tickets and organizations unless the query says type:user.

NameRequiredDescriptionDefault
pageNo1-based page number for offset pagination. Increment it while keeping `per_page` fixed to fetch subsequent pages; page 1 is the first page.
queryYesZendesk user search query — free text matched against name and email, and/or field filters like "email:jane@acme.com", "role:agent", "organization_id:123". A "type:user" scope is added automatically.
per_pageNoNumber of results per page for offset pagination (1-100). Pair with `page` to walk large result sets; the response header reports the total count and whether more pages remain.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description still adds real behavioral context: the result set is multi-valued and a name can match several users, so the agent must confirm identity, and it discloses the returned fields. It stops short of discussing pagination limits, though the schema covers those.

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

Conciseness4/5

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

Three sentences, front-loaded with the verb, resource and return shape, then routing guidance. Dense but each clause carries routing or behavioral value; the sibling enumeration is long but justified given how many near-neighbors exist.

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?

There is no output schema, yet the description enumerates the returned fields and the total count, warns about ambiguous name matches, and routes to the right sibling in every case. Nothing an agent needs in order to call this correctly is missing.

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 100%, so `query`, `page` and `per_page` are fully documented in structured data. The description's mention of "name, email, or other criteria using Zendesk search query syntax" largely restates the schema's query description rather than adding new semantics. Baseline 3 applies when the schema carries the weight.

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?

Names a specific verb and resource (search for users) and spells out exactly what each match returns: id, name, email, role, active flag, organization id, plus total count. It also positions itself against three named siblings (get_user, get_current_user, search), so an agent can pick it without opening a schema.

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?

Gives explicit when-to-use (turn a person into a numeric user id for tools like update_ticket), two explicit alternatives with conditions (get_user when you already have an id, get_current_user for your own account), and an explicit preference rule over `search` when only users are wanted.

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

set_category_translationCreate or Update a Category TranslationA
DestructiveIdempotent

Create or update the translation of a Help Center category in one locale, and return the resulting translation (locale, localized name, draft state). Creates the translation when the locale has none and updates it otherwise, so no listing call is needed first; only the fields you pass are written, which makes "publish this draft" a single draft: false. Use it to make a category reachable in a locale where its sections or articles are already translated — a gap find_translation_gaps reports and list_categories cannot explain.

NameRequiredDescriptionDefault
nameNoLocalized category name for this locale (sent as the API's translation `title`). Required when the locale has no translation yet; omit on an existing one to leave its name untouched, for instance when only publishing a draft.
draftNoPublication state: false publishes the translation, making the category visible to end users in this locale; true keeps (or puts) it back as a draft. Defaults to false when creating; omit on an existing translation to leave its state unchanged.
localeYesLocale to write, e.g. "fr" or "de". Must be an active locale of the Help Center (zendesk-hc://topology lists them); list_category_translations shows which ones the category already has.
category_idYesCategory ID — the numeric id of the category whose translation to write. Obtain it from list_categories, find_translation_gaps or the zendesk-hc://topology resource.
descriptionNoLocalized category description for this locale (sent as the API's translation `body`). Omit to leave an existing description untouched; pass an empty string to clear it.

TDQS

A4.6/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing upsert semantics (creates when absent, updates otherwise), partial-write semantics ('only the fields you pass are written'), and draft toggling as a one-call publish. It does not address permissions/auth or the destructiveHint in terms of what an unintended write could overwrite, but the partial-write and omit-to-preserve rules cover most of that risk.

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

Conciseness4/5

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

Three dense sentences, front-loaded with the upsert behavior and return shape before the routing hint. Every sentence carries information, though the third sentence is long and slightly overloaded with sibling references.

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?

No output schema exists, yet the description names the return payload (locale, localized name, draft state). Combined with the upsert, partial-update and draft rules, an agent has everything needed to call it correctly without a prior listing call.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter workflow meaning the schema does not: the draft:false single-call publish pattern, and the create-vs-update distinction that determines when name is required. That interpretation is genuinely useful rather than a restatement.

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?

States a precise verb+resource+scope: create or update the translation of a Help Center category in one locale. It explicitly distinguishes itself from the sibling translation tools by calling out the category-level, single-locale scope and by naming find_translation_gaps and list_categories as adjacent but insufficient.

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?

Gives explicit when-to-use ('make a category reachable in a locale where its sections or articles are already translated'), names the sibling tools that report or cannot resolve the problem (find_translation_gaps, list_categories), and preempts the common alternative of calling a listing call first.

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

set_section_translationCreate or Update a Section TranslationA
DestructiveIdempotent

Create or update the translation of a Help Center section in one locale, and return the resulting translation (locale, localized name, draft state). Creates the translation when the locale has none and updates it otherwise, so no listing call is needed first; only the fields you pass are written, which makes "publish this draft" a single draft: false. Use it to make a section reachable in a locale where its articles are already translated — a gap find_translation_gaps reports and list_sections cannot explain.

NameRequiredDescriptionDefault
nameNoLocalized section name for this locale (sent as the API's translation `title`). Required when the locale has no translation yet; omit on an existing one to leave its name untouched, for instance when only publishing a draft.
draftNoPublication state: false publishes the translation, making the section visible to end users in this locale; true keeps (or puts) it back as a draft. Defaults to false when creating; omit on an existing translation to leave its state unchanged.
localeYesLocale to write, e.g. "fr" or "de". Must be an active locale of the Help Center (zendesk-hc://topology lists them); list_section_translations shows which ones the section already has.
section_idYesSection ID — the numeric id of the section whose translation to write. Obtain it from list_sections, find_translation_gaps or the zendesk-hc://topology resource.
descriptionNoLocalized section description for this locale (sent as the API's translation `body`). Omit to leave an existing description untouched; pass an empty string to clear it.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations mark it destructive and idempotent, and the description adds real behavioral context beyond them: it creates vs updates depending on existing locale, writes only passed fields (partial update), and notes that 'publish this draft' is a single draft: false. That is exactly the mutation-safety and side-effect detail an agent needs.

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

Conciseness4/5

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

Two dense sentences, front-loaded with the core action and outcome, then usage. Every clause carries information (upsert, return value, partial write, publish shortcut, routing), though the second sentence packs several ideas tightly.

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?

No output schema exists, yet the description names the return fields (locale, localized name, draft state). Combined with 100% schema coverage for inputs and annotations covering the destructive/idempotent profile, nothing needed to call it correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema states only per-field: omitting name/description leaves them untouched, and draft:false publishes. The draft publishing interaction is the key operational detail and it is surfaced in prose.

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?

States a specific verb pair (create or update), the resource (Help Center section translation), and the scope (one locale), and it returns the resulting translation. The 'section' resource cleanly separates it from set_category_translation and create/update_article_translation without needing schema inspection.

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?

Gives a clear when-to-use ('make a section reachable in a locale where its articles are already translated') and ties it to the sibling find_translation_gaps. It implies the upsert removes the need for a prior listing call, but does not explicitly state when a different translation tool (category/article) is the right choice.

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

update_articleUpdate Help Center ArticleA
DestructiveIdempotent

Update article metadata only (draft, promoted, labels as label_names, content tags as content_tag_ids, visibility as permission_group_id / user_segment_id, section_id, sort position, author, etc.) and return the updated article; fields you omit keep their value. Does NOT update content (title, body) — use update_article_translation for that, or update_article_section to edit one section. To put an article first or last in its section, prefer reorder_article: a plain position write is ambiguous while articles share position 0. To remove an article from the Help Center, use archive_article (a Guide admin can restore it); draft: true only unpublishes it.

NameRequiredDescriptionDefault
draftNoSet true to unpublish the article (revert to draft) or false to publish it.
positionNoSort position within the section (manual ordering only; 0 = first/top). New articles default to position 0. To move an article to the END of its section, set this to one more than the highest current position: read the highest position P from list_articles with sort_by="position", sort_order="desc", then set position = P + 1.
promotedNoSet true to promote (feature) the article in its section, or false to unpromote it.
author_idNoUser id of the article author (from search_users).
article_idYesArticle ID — the numeric id of the article to update. Obtain it from list_articles or search_articles.
section_idNoMove the article to this section (numeric id from list_sections).
label_namesNoLabel names for search ranking (use list_labels to see existing labels).
content_tag_idsNoContent tag ids to attach (use list_content_tags to find them).
user_segment_idNoUser segment that controls who can see the article (id from list_user_segments; if that is forbidden because the token is not a Guide admin, reuse the user_segment_id of an existing article from get_article).
permission_group_idNoGuide permission group controlling who can edit (id from list_permission_groups; if that is forbidden because the token is not a Guide admin, reuse the permission_group_id of an existing article from get_article).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the bar is lower, and the description still adds real context: partial-update semantics ('fields you omit keep their value'), that removal is a separate restorable archive operation, and that draft:true only unpublishes rather than deletes. It stops short of discussing auth/permission requirements for mutating an article, which is the main remaining gap for a destructive write.

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

Conciseness4/5

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

Front-loaded with the core action and scope, then layered exclusions and edge cases, with no filler sentences. It is dense and slightly overloaded as one long parenthetical paragraph, but each clause carries routing or behavioral information that would otherwise be lost.

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?

For a 10-parameter destructive mutation with no output schema, the description covers the return value ('return the updated article'), partial-update behavior, the metadata-vs-content boundary, and routing to every relevant sibling. Nothing an agent needs to call this correctly is missing.

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?

Schema coverage is 100%, so baseline is 3, but the description earns extra credit by mapping business concepts to parameter names (labels as label_names, content tags as content_tag_ids, visibility as permission_group_id/user_segment_id) and by flagging that a raw position write is ambiguous when articles share position 0. The schema itself already carries the detailed per-field guidance (including the P+1 trick for moving to the end).

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?

States a specific verb and resource plus an explicit scope boundary: 'Update article metadata only ... and return the updated article', enumerating which fields count as metadata and which do not (title, body). It names the sibling tools it is not (update_article_translation, update_article_section, reorder_article, archive_article), so an agent can distinguish it without opening any schema.

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?

Gives explicit when-to-use and when-not-to-use rules with named alternatives and the condition that selects each: content edits go to update_article_translation or update_article_section, ordering goes to reorder_article, removal goes to archive_article. It also clarifies the subtle draft-vs-archive distinction, which is exactly the kind of disambiguation an agent needs.

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

update_article_sectionUpdate Article SectionA
DestructiveIdempotent

Replace the body of one article section, heading excluded (the heading is kept as is), in a given locale, leaving the rest of the article intact. The server fetches the current body, replaces the targeted section, and PUTs the full reconstructed body via the Translations API. A leading heading in content that repeats the section heading is removed; any other h1-h3 in content creates new sections and shifts the later indexes (the response warns). section_index 0 is the heading-less intro, which exists only when the body has text before its first heading. Default format="html" for fidelity. Use format="markdown" only when you control the input and know it does not rely on structures that round-trip poorly (code blocks with line breaks, tables with multi-paragraph cells).

NameRequiredDescriptionDefault
formatNoInput format. "html" (default) is the safe path. "markdown" is converted to HTML server-side but may introduce artifacts on complex content.html
localeYesLocale of the translation to update
contentYesNew content for the section (heading excluded: send neither the heading nor the "## [n] hN: ..." label line that get_article_section prints). HTML by default, Markdown if format="markdown".
article_idYesArticle ID — the numeric id of the Help Center article. Obtain it from list_articles or search_articles.
section_indexYes0-based index of the section to replace (see get_article_outline). 0 is the heading-less intro when the body has text before its first heading, otherwise the first heading.

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: server fetches current body, reconstructs and PUTs the full body via the Translations API, strips a duplicated leading heading, and warns that other h1-h3 in content spawn new sections and shift later indexes. That index-shifting side effect is exactly the non-obvious behavior an agent needs before writing.

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

Conciseness4/5

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

Front-loaded with the core replace semantics, then side-effect warnings, then the format guidance. Dense but every sentence carries operational information; slightly verbose but not padded.

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?

No output schema exists, yet the description pre-announces the response warning about index shifts, and covers the reconstruction/PUT mechanics, locale scoping, and content format expectations. For a destructive mutation tool this is complete.

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?

Schema coverage is 100%, so the baseline is 3, but the description genuinely enriches it: section_index 0 is defined as the heading-less intro, and content's heading/label-line exclusion and format trade-offs are explained beyond the schema text.

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?

States a specific verb and resource ('Replace the body of one article section') and scopes it precisely: heading excluded, one locale, rest of article intact. This cleanly separates it from update_article (whole article), update_article_translation, and set_section_translation.

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?

Gives explicit conditional guidance for format (default html for fidelity; markdown only when you control input) and explains when section_index 0 exists. It does not name sibling alternatives to route between (e.g. full-article vs per-section updates), so it stops short of a full when/when-not/alternative map.

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

update_article_translationUpdate Article TranslationA
DestructiveIdempotent

Update article content (title, body) in a specific locale. For targeted edits on one or a few sections, prefer update_article_section — this tool replaces the FULL body and re-sends the entire article on each write. Use the article's source_locale (from get_article) for the default language, or another locale for translations.

NameRequiredDescriptionDefault
bodyNoNew full body (HTML) for this locale. Replaces the entire body — for a single-section edit prefer update_article_section. Omit to leave the body unchanged.
draftNoWhen true, keeps this translation as a draft; when false, publishes it.
titleNoNew title for this locale. Omit to leave the current title unchanged.
localeYesLocale of the translation to update, e.g. "en-us" or "fr". Use the source_locale (from get_article) to edit the default language.
article_idYesArticle ID — the numeric id of the article whose translation to update. Obtain it from list_articles or search_articles.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true. The description adds real value beyond them by explaining WHY it is destructive: it 'replaces the FULL body and re-sends the entire article on each write.' It does not cover permission requirements or the omit-to-leave-unchanged semantics, but the core behavioral trait is disclosed.

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?

Three tight sentences with no filler; the destructive full-body replacement caveat and the sibling alternative are front-loaded before the locale guidance.

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 destructive write tool with no output schema, the description covers the replacement behavior, the sibling alternative, and locale semantics. Only minor gaps remain (e.g., no mention of permission/auth requirements), which annotations partially cover.

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 100%, so the schema already documents every parameter including the source_locale/locale relationship. The description's locale guidance largely restates what the locale schema entry says, so baseline 3 applies.

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?

States a specific verb+resource ('Update article content (title, body) in a specific locale') and distinguishes itself from the closely-named siblings update_article and update_article_section. An agent can tell what it does and how it differs from neighboring tools.

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 names the alternative ('prefer update_article_section' for targeted edits) with the exact condition that selects it. Also gives positive routing guidance for locale selection ('Use the article's source_locale from get_article... or another locale for translations').

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

update_ticketUpdate Zendesk TicketA
DestructiveIdempotent

Update an existing ticket (status, priority, type, assignee, group, subject, tags, custom fields, followers, email CCs). Only the fields you pass are changed, and the updated ticket is returned. Followers and email CCs are incremental instead of replacing: pass { add, remove } lists of user ids, and the response reports who is subscribed afterwards. Zendesk applies those two silently, so a requested change it did not apply comes back listed as unconfirmed rather than raised as an error. Setting tags here replaces the whole tag set — use manage_tags to add or remove individual tags without overwriting the rest. This tool does not post replies: use add_public_comment or add_private_note for that. Find the ticket id via search_tickets or list_tickets.

NameRequiredDescriptionDefault
tagsNoReplaces the full tag set on the ticket. Use manage_tags for incremental add/remove.
typeNoTicket type. One of problem, incident, question, task.
statusNoNew ticket status. One of new, open, pending, hold, solved, closed.
subjectNoNew subject line for the ticket; replaces the current subject when provided.
group_idNoId of the group to assign the ticket to.
priorityNoTicket priority. One of urgent, high, normal, low.
email_ccsNoEnd users or agents to add to or remove from the ticket's email CC list, as numeric user ids: { add: [123], remove: [456] }. CCs receive the ticket's public correspondence, subject to your account's triggers. Numeric ids only, no email addresses: resolve the person with search_users first and confirm the match, because a name query can return several users. Zendesk caps a ticket at 48 email CCs and this tool cannot know how many are already set, so going over shows up as an unconfirmed entry in the response rather than a validation error. An id listed in both add and remove is removed. Omit to leave CCs untouched.
followersNoAgents to add to or remove from the ticket's follower list, as numeric user ids: { add: [123], remove: [456] }. Followers are notified of ticket updates, internal notes included, so this controls who hears about the ticket. Numeric ids only, no email addresses: resolve the person with search_users first and confirm the match before writing, because a name query can return several users and removing the wrong id succeeds silently. Adding someone already following, or removing someone who is not, is a no-op. An id listed in both add and remove is removed. Omit to leave followers untouched.
ticket_idYesTicket ID — the numeric id of the ticket to update. Obtain it from search_tickets or list_tickets.
assignee_idNoUser id of the agent to assign the ticket to.
custom_fieldsNoCustom field values as { id, value } pairs (field ids come from your Zendesk admin settings). Call list_ticket_fields first to discover the numeric field ids and, for dropdown/multiselect fields, the exact option values Zendesk accepts.

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations, the description explains partial update semantics, that the updated ticket is returned, that followers and email CCs are incremental and may be silently unconfirmed, that tags replace the entire tag set, and that replies are out of scope. These are important behavioral details for a destructive, idempotent update tool.

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 dense but well structured, front-loading the core update behavior before handling special cases. Each sentence earns its place by covering a distinct operational risk or tool-routing decision.

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?

For an 11-parameter destructive update tool with no output schema, the description is complete enough: it covers change semantics, return behavior, special handling for followers/CCs, tag replacement, and reply limitations. An agent has what it needs to call this correctly without opening more documentation.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds meaning beyond the schema by explaining that only passed fields change, that followers and CCs use add/remove lists rather than replacement, and that tags replace the whole set. It also reinforces the unconfirmed-response behavior for incremental fields.

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 opens with a specific verb and resource: update an existing Zendesk ticket, and lists the editable field groups. It explicitly distinguishes this tool from siblings such as manage_tags, add_public_comment, add_private_note, search_tickets, and list_tickets.

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 gives explicit when-to-use guidance: use manage_tags for incremental tag changes; use add_public_comment or add_private_note for replies; use search_tickets or list_tickets to find the ticket id. These alternatives and exclusions leave little ambiguity about tool selection.

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. 10 tool updatesv3.9.1
    • Changedadd_private_note1 field changed
      • changedInput schema / properties / body / description
        Previous value: -"Note text (internal, agent-only). Plain text or HTML; not shown to the requester."New value: +"Note text (internal, agent-only); not shown to the requester. Markdown is rendered (**bold**, lists, links): wrap code, identifiers containing _ or * and <placeholders> in backticks so they show literally. HTML is not rendered (tags show as literal text), so do not send HTML."
    • Changedadd_public_comment1 field changed
      • changedInput schema / properties / body / description
        Previous value: -"Comment text sent to the requester. Plain text or HTML; visible in the ticket."New value: +"Comment text sent to the requester; visible in the ticket. Markdown is rendered (**bold**, lists, links): wrap code, identifiers containing _ or * and <placeholders> in backticks so they show literally. HTML is not rendered (tags show as literal text), so do not send HTML."
    • Addedadd_request_comment
    • Addedcreate_request
    • Changedcreate_ticket1 field changed
      • changedInput schema / properties / description / description
        Previous value: -"Ticket description — the body of the request. It becomes the ticket's first public comment (visible to the requester)."New value: +"Ticket description — the body of the request. It becomes the ticket's first public comment (visible to the requester). Markdown is rendered (**bold**, lists, links): wrap code, identifiers containing _ or * and <placeholders> in backticks so they show literally. HTML is not rendered (tags show as literal text), so do not send HTML."
    • Addedget_request
    • Addedget_request_form
    • Addedlist_request_forms
    • Addedlist_requests
    • Addedmark_request_solved
  2. 3 tool updatesv3.7.0
    • Changedcreate_ticket2 fields changed
      • addedInput schema / properties / custom_fields / items / properties / id / description
        Added value: +"Numeric id of the ticket field to set, as listed by list_ticket_fields."
      • addedInput schema / properties / custom_fields / items / properties / value / description
        Added value: +"Value typed after the field: the option tag (a string) for a dropdown, an array of option tags for a multiselect, true or false for a checkbox, text or a number for a text or numeric field. For any other type (a date, a lookup), follow the type list_ticket_fields reports; it also lists each dropdown's accepted tags."
    • Changedget_ticket_attachments1 field changed
      • changedInput schema / properties / attachment_ids / description
        Previous value: -"Attachment IDs to fetch directly (e.g. extracted from a previous list_ticket_comments or get_ticket(include_comments=true) call). When provided, skips the comments fetch entirely. When omitted, all attachments of the ticket are returned."New value: +"Attachment IDs to fetch directly (e.g. extracted from a previous list_ticket_comments or get_ticket(include_comments=true) call). When provided, skips the comments fetch entirely. When omitted, the attachments of the ticket's comments are returned, read up to a page cap: on a very long thread the scan stops there, and the response says so."
    • Changedupdate_ticket2 fields changed
      • addedInput schema / properties / custom_fields / items / properties / id / description
        Added value: +"Numeric id of the ticket field to set, as listed by list_ticket_fields."
      • addedInput schema / properties / custom_fields / items / properties / value / description
        Added value: +"Value typed after the field: the option tag (a string) for a dropdown, an array of option tags for a multiselect, true or false for a checkbox, text or a number for a text or numeric field. For any other type (a date, a lookup), follow the type list_ticket_fields reports; it also lists each dropdown's accepted tags."
  3. 2 tool updatesv3.6.0
    • Changedsearch1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Zendesk search query. Supports type/status/role filters (e.g. \"type:ticket status:open\", \"type:user role:agent\") and free text; omit a type filter to search tickets, users and organizations at once."New value: +"Zendesk search query. Supports type/status/role filters (e.g. \"type:ticket status:open\", \"type:user role:agent\") and free text; omit a type filter to search tickets, users and organizations at once. \"me\" is a value of the user keywords only (assignee:, requester:, submitter:); group:me is read as your group when you belong to exactly one, else the call fails naming your groups, so use group:<id>."
    • Changedsearch_tickets1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Zendesk ticket search query — field filters like \"status:open\", \"assignee:me\", \"priority:urgent ticket_type:incident\", combined with free text. A \"type:ticket\" scope is added automatically, so filter the ticket kind with ticket_type: (e.g. ticket_type:incident), never type: (which the API rejects here)."New value: +"Zendesk ticket search query — field filters like \"status:open\", \"assignee:me\", \"priority:urgent ticket_type:incident\", combined with free text. A \"type:ticket\" scope is added automatically, so filter the ticket kind with ticket_type: (e.g. ticket_type:incident), never type: (which the API rejects here). \"me\" is a value of the user keywords only (assignee:, requester:, submitter:); group:me is read as your group when you belong to exactly one, else the call fails naming your groups, so use group:<id>."
  4. 4 tool updatesv3.5.2
    • Changedget_view_tickets2 fields changed
      • changedInput schema / properties / page_size / default
        Previous value: -100New value: +25
      • changedInput schema / properties / page_size / description
        Previous value: -"Tickets per page (1-100, default 100)."New value: +"Tickets per page (1-100, default 25)."
    • Changedlist_tickets2 fields changed
      • changedInput schema / properties / page_size / default
        Previous value: -100New value: +25
      • changedInput schema / properties / page_size / description
        Previous value: -"Tickets per page (1-100, default 100)."New value: +"Tickets per page (1-100, default 25)."
    • Changedsearch1 field changed
      • changedInput schema / properties / per_page / default
        Previous value: -100New value: +25
    • Changedsearch_tickets1 field changed
      • changedInput schema / properties / per_page / default
        Previous value: -100New value: +25
  5. 3 tool updatesv3.5.0
    • Addedconfigure_sla_alerts
    • Addedget_ticket_metrics
    • Addedlist_sla_alerts
  6. 4 tool updatesv3.3.1
    • Changedadd_private_note1 field changed
      • addedInput schema / properties / attachments / items / additionalProperties
        Added value: +false
    • Changedadd_public_comment1 field changed
      • addedInput schema / properties / attachments / items / additionalProperties
        Added value: +false
    • Changedcreate_ticket1 field changed
      • addedInput schema / properties / custom_fields / items / additionalProperties
        Added value: +false
    • Changedupdate_ticket1 field changed
      • addedInput schema / properties / custom_fields / items / additionalProperties
        Added value: +false
  7. 1 tool updatev3.0.1
    • Changedupdate_article_section2 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"New content for the section (heading excluded). HTML by default, Markdown if format=\"markdown\"."New value: +"New content for the section (heading excluded: send neither the heading nor the \"## [n] hN: ...\" label line that get_article_section prints). HTML by default, Markdown if format=\"markdown\"."
      • changedInput schema / properties / section_index / description
        Previous value: -"0-based index of the section to replace (see get_article_outline)"New value: +"0-based index of the section to replace (see get_article_outline). 0 is the heading-less intro when the body has text before its first heading, otherwise the first heading."
  8. 53 tool updatesv2.24.0
    • Changedadd_private_note1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedadd_public_comment1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedarchive_article1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedcompare_translations1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedcreate_article1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedcreate_article_attachment1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedcreate_article_translation1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedcreate_content_tag1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedcreate_ticket1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedfind_translation_gaps1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_article1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_article_outline1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_article_section1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_current_user1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_linked_incidents1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_organization1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_ticket1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_ticket_attachments1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_ticket_history1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_user1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_view_tickets1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_article_attachments1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_article_translations1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_articles1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_categories1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_category_translations1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_content_tags1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_labels1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_macros1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_organizations1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_permission_groups1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_promoted_articles1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_section_translations1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_sections1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_sla_policies1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_ticket_comments1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_ticket_fields1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_tickets1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_user_segments1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist_views1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmanage_tags1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedpreview_macro_diff1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedreorder_article2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedInput schema / properties / confirm / description
        Previous value: -"Safety guard for large reorders. When the move would rewrite more article positions than the configured threshold (ZENDESK_REORDER_CONFIRM_THRESHOLD, default 20), the tool refuses and reports the count until you pass true here. Has no effect on small reorders."New value: +"Safety guard for large reorders. When the move would rewrite more article positions than the configured threshold (REORDER_CONFIRM_THRESHOLD, default 20), the tool refuses and reports the count until you pass true here. Has no effect on small reorders."
    • Changedsearch1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsearch_articles1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsearch_tickets1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsearch_users1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedset_category_translation1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedset_section_translation1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_article1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_article_section1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_article_translation1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate_ticket1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  9. 1 tool updatev2.23.0
    • Changedupdate_ticket2 fields changed
      • addedInput schema / properties / email_ccs
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "End users or agents to add to or remove from the ticket's email CC list, as numeric user ids: { add: [123], remove: [456] }. CCs receive the ticket's public correspondence, subject to your account's triggers. Numeric ids only, no email addresses: resolve the person with search_users first and confirm the match, because a name query can return several users. Zendesk caps a ticket at 48 email CCs and this tool cannot know how many are already set, so going over shows up as an unconfirmed entry in the response rather than a validation error. An id listed in both add and remove is removed. Omit to leave CCs untouched.",
        +  "properties": {
        +    "add": {
        +      "description": "User ids to CC on the ticket, at most 48. Omit to only remove.",
        +      "items": {
        +        "exclusiveMinimum": 0,
        +        "maximum": 9007199254740991,
        +        "type": "integer"
        +      },
        +      "maxItems": 48,
        +      "type": "array"
        +    },
        +    "remove": {
        +      "description": "User ids to drop from the CC list. Omit to only add.",
        +      "items": {
        +        "exclusiveMinimum": 0,
        +        "maximum": 9007199254740991,
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / followers
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Agents to add to or remove from the ticket's follower list, as numeric user ids: { add: [123], remove: [456] }. Followers are notified of ticket updates, internal notes included, so this controls who hears about the ticket. Numeric ids only, no email addresses: resolve the person with search_users first and confirm the match before writing, because a name query can return several users and removing the wrong id succeeds silently. Adding someone already following, or removing someone who is not, is a no-op. An id listed in both add and remove is removed. Omit to leave followers untouched.",
        +  "properties": {
        +    "add": {
        +      "description": "User ids to start following the ticket. Omit to only remove.",
        +      "items": {
        +        "exclusiveMinimum": 0,
        +        "maximum": 9007199254740991,
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    "remove": {
        +      "description": "User ids to stop following the ticket. Omit to only add.",
        +      "items": {
        +        "exclusiveMinimum": 0,
        +        "maximum": 9007199254740991,
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
  10. 2 tool updatesv2.22.0
    • Changedadd_private_note1 field changed
      • addedInput schema / properties / attachments / items / properties / file_base64 / contentEncoding
        Added value: +"base64"
    • Changedadd_public_comment1 field changed
      • addedInput schema / properties / attachments / items / properties / file_base64 / contentEncoding
        Added value: +"base64"
  11. 3 tool updatesv2.20.2
    • Changedadd_private_note2 fields changed
      • changedInput schema / properties / attachments / items / properties / file_base64 / description
        Previous value: -"File content encoded as base64."New value: +"File content encoded as base64. At most 10420224 characters (about 7.45 MB of file), and the attachments of one call must stay under that total; the HTTP transport additionally caps request bodies at 4 MB."
      • addedInput schema / properties / attachments / items / properties / file_base64 / maxLength
        Added value: +10420224
    • Changedadd_public_comment2 fields changed
      • changedInput schema / properties / attachments / items / properties / file_base64 / description
        Previous value: -"File content encoded as base64."New value: +"File content encoded as base64. At most 10420224 characters (about 7.45 MB of file), and the attachments of one call must stay under that total; the HTTP transport additionally caps request bodies at 4 MB."
      • addedInput schema / properties / attachments / items / properties / file_base64 / maxLength
        Added value: +10420224
    • Changedcreate_article_attachment2 fields changed
      • changedInput schema / properties / file_base64 / description
        Previous value: -"The file's raw bytes as a base64-encoded string; the server decodes them before upload."New value: +"The file's raw bytes as a base64-encoded string; the server decodes them before upload. At most 10420224 characters (about 7.45 MB of file); the HTTP transport additionally caps request bodies at 4 MB."
      • addedInput schema / properties / file_base64 / maxLength
        Added value: +10420224
  12. 3 tool updatesv2.20.0
    • Changedget_ticket1 field changed
      • changedInput schema / properties / include_comments / description
        Previous value: -"When true, appends the full public comment and internal note thread to the response. Defaults to false to keep the payload small; enable it when you need the conversation, not just the ticket fields."New value: +"When true, appends the full public comment and internal note thread to the response. Defaults to false to keep the payload small; enable it when you need the conversation, not just the ticket fields. On a long thread prefer list_ticket_comments — this flag appends one unpaginated block, so comments past Zendesk's first page are absent and the rest is cut at the response character limit."
    • Changedget_ticket_attachments1 field changed
      • changedInput schema / properties / attachment_ids / description
        Previous value: -"Attachment IDs to fetch directly (e.g. extracted from a previous get_ticket(include_comments=true) call). When provided, skips the comments fetch entirely. When omitted, all attachments of the ticket are returned."New value: +"Attachment IDs to fetch directly (e.g. extracted from a previous list_ticket_comments or get_ticket(include_comments=true) call). When provided, skips the comments fetch entirely. When omitted, all attachments of the ticket are returned."
    • Addedlist_ticket_comments

TDQS

A3.9/5.0

Scored across 63 tools

Disambiguation4/5

The tools are generally well differentiated, especially the deliberate ticket-vs-request split, comment/history/metrics separation, and article-vs-section-vs-translation distinctions. A few clusters still require careful selection, such as `search` versus `search_tickets`/`search_users`, or `update_article` versus its translation and section variants.

Naming Consistency4/5

Most names follow a predictable snake_case verb_noun pattern: `list_*`, `get_*`, `create_*`, `update_*`, `archive_*`, `set_*`. Minor deviations like bare `search`, `manage_tags`, and `preview_macro_diff` are still readable but keep it from perfect consistency.

Tool Count1/5

With 63 tools, the surface is far beyond a practical agent-facing MCP server and requires choosing among many related operations. The broad Zendesk plus Guide scope explains the size, but it still creates an extreme selection burden.

Completeness3/5

Core support workflows are well covered: ticket lifecycle, comments, requests, SLA, macros, and article/translation management. However, the Guide hierarchy lacks create/update/delete tools for categories and sections themselves, and user/organization mutation plus ticket merge/delete operations are absent.

Maintenance

ActivityActive
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A server implementation that provides Claude AI with the ability to interact with Zendesk ticketing systems through various functions including retrieving, searching, creating, and updating tickets.
    7
    315 npm
    16
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI-powered ticket analysis and comprehensive Zendesk API integration via the Model Context Protocol, supporting both API token (CLI) and OAuth 2.1 (web) authentication modes.
    55
    108 npm
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol server that enables AI assistants like Claude to interact with Zendesk Support through natural language for searching, creating, updating, and managing tickets.
    41
    315 npm
    3
    MIT