Skip to main content
Glama

Import from Zendesk

import_from_zendesk
Idempotent

Import a Zendesk Support account's tickets, with their public replies as the conversation, and each requester as a contact (matched to existing contacts by email). Status new/open becomes open, pending/on-hold pending, solved/closed resolved; priority, subject and dates are kept. Nobody is emailed. Needs the subdomain (acme for acme.zendesk.com), and an agent's or admin's email with an API token from Zendesk Admin Center > Apps and integrations > APIs > API tokens. Called without its token, it answers at once with a link for the owner, who types the token on a Conecto page, so it never passes through the chat (from_a_terminal does the same from a terminal); account.credential_added says when the import started, with its call_id. With an admin's email every ticket comes over, archived ones included; with an agent's, Zendesk leaves out archived tickets. Wrong credentials are refused before anything is reserved or charged; the token is kept only encrypted while the import runs, then erased. A ticket and its requester count as records; replies come with their ticket. Runs in the background for up to 15 minutes and imports up to max_records records; when more remain, the result has next_cursor: call again with the same arguments plus next_cursor to continue. Running it again never duplicates anything: changed records are updated, unchanged ones skipped. Unchanged records are free, and 1,000 imported records cost $1. max_records x $0.001 is reserved while it runs and only what was imported is charged; lower max_records if your balance is smaller. Costs $0.001 per record imported (created or updated); nothing if none are found. Runs in the background: the reply has a call_id; poll it with the account_get_call tool or GET /v1/calls/.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "subdomain": "<subdomain>",
      "email": "<email>"
    },
    "name": "import_from_zendesk"
  }
}

Input Schema

NameRequiredDescriptionDefault
emailYesThe email of the agent or admin the API token is used as.
api_tokenNoA Zendesk API token. Leave it out to get the link instead.
subdomainYesThe "acme" in acme.zendesk.com.
max_recordsNoThe most records this run may create or update (and reserve $0.001 each for).
next_cursorNoThe next_cursor a previous run of this import returned, to continue where it stopped.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / api_token / description
      Previous value: -"A Zendesk API token."New value: +"A Zendesk API token. Leave it out to get the link instead."
    • changedInput schema / required
      Previous value: -[
      -  "subdomain",
      -  "email",
      -  "api_token"
      -]New value: +[
      +  "subdomain",
      +  "email"
      +]
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses that nobody is emailed, that wrong credentials are rejected before any reservation or charge, that the token is stored encrypted only during the run then erased, that admin vs agent email determines whether archived tickets are included, and the 15-minute background limit with polling via account_get_call. Annotations cover safety profile; the description adds substantial operational context.

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

Conciseness3/5

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

It is dense and front-loaded with credentials and mapping rules first, which is good, but the pricing is restated three separate times ('1,000 imported records cost $1', 'max_records x $0.001 is reserved', 'Costs $0.001 per record imported') and the background/call_id polling is repeated at the opening and the close. Trimming that redundancy would lose nothing.

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 billed, background, cursor-paginated multi-tenant import with no output schema, the description supplies everything an agent needs: auth path, cost mechanics, pagination continuation, idempotency, and result retrieval. No meaningful gap remains.

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?

Schema coverage is already 100%, but the description adds real meaning: 'acme' for subdomain, email determines admin-vs-agent import scope, api_token omission triggers the link flow, and max_records ties to reservation cost. These are semantic consequences the schema alone does not convey.

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 ('Import a Zendesk Support account's tickets') and immediately defines the mapping semantics — replies become a conversation, requesters become contacts matched by email. It is clearly distinct from siblings like import_csv or import_from_hubspot by naming the source system explicitly.

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 covers when to call it, what credentials are needed, and what to do without a token (call without api_token to receive a link; from_a_terminal is named as the equivalent path). It also instructs on continuation (call again with next_cursor) and safe re-running.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources