Zendesk Mcp

io.github.michaelrice由 GitHub 帳號 michaelrice 發布v0.1.6更新於 Oct 24, 2026

Zendesk MCP server for Claude Code and other MCP clients

已驗證STDIO僅桌面效率與工作流商業與電商

概覽

AI 產生的概覽

Zendesk MCP 伺服器,讓助理搜尋、讀取、建立與更新工單,張貼回覆與內部備註,並套用檢視與巨集。

可以做什麼
  • 搜尋、分頁列出並取得工單、留言與附件,可將附件下載到本機快取
  • 建立與更新工單、設定狀態、指派客服,以及新增或移除標籤
  • 張貼公開回覆與內部備註,記錄或讀取工時項目
  • 瀏覽檢視與巨集,預覽巨集效果並套用到工單
  • 查詢使用者、群組、組織與自訂工單狀態
  • 把工單整理成 Markdown 問題草稿,並提供工單分析與回覆草擬兩個提示
適用情境
適合讓助理直接在 Zendesk 客服佇列中作業:分流與摘要工單、草擬或張貼客戶回覆、更新欄位與標籤,或把工單轉交到問題追蹤系統。
執行需求
以本機 Python 套件執行(需 Python 3.10 或更新版本),建議安裝在虛擬環境中。需要 Zendesk 子網域,以及由管理員建立的 Zendesk OAuth 用戶端(用戶端 ID 與密鑰,權限範圍 read 和 write);還需執行互動式 setup,透過瀏覽器完成授權並把權杖寫入設定檔。選用設定可啟用說明中心資源、Git-Zen 連結與額外的附件目錄。
安裝前請注意
寫入類工具會張貼公開回覆與內部備註、變更狀態、指派工單、建立與更新工單、套用巨集以及記錄工時;README 預設不將它們加入允許清單,因此每次呼叫都會要求確認。設定檔會保存存取權杖、更新權杖、用戶端 ID 與用戶端密鑰,應維持 0600 權限。可用唯讀模式或停用工具清單縮小可用範圍。附件下載僅限 Zendesk 主機與允許的目錄。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Zendesk Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

zendesk-mcp

A Model Context Protocol server that exposes Zendesk ticket read and write tools to Claude Code and other MCP clients.

What it does

  • Search, list (paginated), and fetch Zendesk tickets, comments, and attachments
  • Create new tickets and update existing ticket fields (including group, custom status, and tags)
  • Post public replies and internal notes
  • Set ticket status and assign tickets to agents
  • Browse and apply views and macros
  • Look up users, groups, organizations, and custom statuses
  • Read and write time-tracking entries
  • Format a ticket as a Markdown issue draft for handoff to a tracker (GitLab, GitHub, Jira)
  • Two MCP prompts (analyze-ticket, draft-ticket-response) for ticket analysis and response drafting
  • (Optional) Expose Zendesk Help Center articles as an MCP resource
  • (Optional) Read linked GitLab issues / MRs / commits via the Git-Zen Zendesk app

Prerequisites

  • Python 3.10 or newer
  • A Zendesk OAuth client. A Zendesk admin can create one at: https://<your-subdomain>.zendesk.com/admin/apps-integrations/apis/zendesk-api/oauth_clients Set the redirect URL to http://localhost:8787/callback and request scopes read write.

Install

Install into a project-local virtualenv. Using a venv keeps zendesk-mcp and its dependencies isolated from your system Python and from other projects, and is the recommended path for everything below.

From a clone of this repository:

bash
python3 -m venv .venv.venv/bin/pip install --upgrade pip.venv/bin/pip install -e .

For development (also installs pytest):

bash
.venv/bin/pip install -e ".[dev]"

Throughout this README, commands use the venv's binaries via .venv/bin/.... You can instead source .venv/bin/activate once per shell and drop the prefix — the result is the same.

OAuth setup

Run the interactive setup using the venv's Python:

bash
.venv/bin/python -m zendesk_mcp setup

You will be prompted for:

  1. Your Zendesk subdomain (e.g. acme for acme.zendesk.com)
  2. The OAuth client ID created by your admin
  3. The OAuth client secret
  4. (Optional) A Git-Zen integration field ID — see Optional: Git-Zen integration
  5. (Optional) Whether to enable the Help Center knowledge base resource — see Optional: Help Center knowledge base

The setup opens a browser for the OAuth authorization step, then writes a token to ~/.config/zendesk-mcp/config.json (mode 0600).

If you have no browser, the URL is printed to the terminal — open it on any device, click Allow, and paste the resulting redirect URL back into the prompt.

Token expiry and refresh

Zendesk access tokens expire. OAuth clients created on or after 2026-04-30 get a 30-minute default lifetime; older clients issue non-expiring tokens unless an expiry is requested. Setup requests a 24-hour access token and a 90-day refresh token so the behaviour is the same either way, and the server renews the access token automatically — before it expires, and again if Zendesk rejects a token mid-request.

To make that possible, the config file also stores refresh_token, expires_at, client_id, and client_secret alongside the access token. Keep the file at mode 0600; it is the same trust level as the access token itself. If your OAuth client returns no refresh token, setup says so and the token is used as-is.

Re-run .venv/bin/python -m zendesk_mcp setup when:

  • the refresh token expires (90 days with no use), or
  • you revoke the OAuth grant in Zendesk.

In either case the tools return Zendesk authorization failed: ... Re-run: zendesk-mcp setup rather than failing opaquely.

Register with Claude Code

Register the MCP server using the venv's Python by absolute path. Claude Code launches the server in a fresh shell that does not inherit your activated venv, so the absolute path is required — pointing at a bare python here will fail to import zendesk_mcp.

bash
ZENDESK_MCP_DIR="$(pwd)"   # run this from the repo root, after installclaude mcp add --scope user zendesk -- "$ZENDESK_MCP_DIR/.venv/bin/python" -m zendesk_mcp

Or just inline the absolute path you want:

bash
claude mcp add --scope user zendesk -- /absolute/path/to/zendesk-mcp/.venv/bin/python -m zendesk_mcp

Then add the read tools to permissions.allow in ~/.claude/settings.json to avoid per-call prompts:

json
{  "permissions": {    "allow": [      "mcp__zendesk__zendesk_get_ticket",      "mcp__zendesk__zendesk_get_tickets",      "mcp__zendesk__zendesk_get_comments",      "mcp__zendesk__zendesk_list_attachments",      "mcp__zendesk__zendesk_download_attachment",      "mcp__zendesk__zendesk_search_tickets",      "mcp__zendesk__zendesk_ticket_to_gitlab_context",      "mcp__zendesk__zendesk_list_views",      "mcp__zendesk__zendesk_get_view",      "mcp__zendesk__zendesk_get_view_tickets",      "mcp__zendesk__zendesk_list_macros",      "mcp__zendesk__zendesk_preview_macro",      "mcp__zendesk__zendesk_search_users",      "mcp__zendesk__zendesk_get_groups",      "mcp__zendesk__zendesk_get_group_users",      "mcp__zendesk__zendesk_get_organization",      "mcp__zendesk__zendesk_list_custom_statuses"    ]  }}

Write tools (zendesk_post_comment, zendesk_post_internal_note, zendesk_set_ticket_status, zendesk_assign_ticket, zendesk_create_ticket, zendesk_update_ticket, zendesk_log_time, zendesk_add_tag, zendesk_remove_tag, zendesk_apply_macro) are intentionally not in the default allow-list — Claude will prompt you per call.

Restricting tools

Every tool is enabled by default. To narrow what a deployment can do, for example where ticket text is written by customers and the agent should not be able to reply to them, set either of these in ~/.config/zendesk-mcp/config.json or in the server's environment. Values from both are combined.

Config keyEnvironment variableEffect
"read_only": trueZENDESK_MCP_READ_ONLY=trueRegisters no write tools (comments, notes, status, assignment, create/update, tags, macros, time logging)
"disabled_tools": ["zendesk_post_comment"]ZENDESK_MCP_DISABLED_TOOLS=zendesk_post_comment,zendesk_apply_macroDoes not register the named tools

A disabled tool is never registered, so the model cannot see or call it. Names that match no tool are reported on stderr.

Tools

Tickets

Tools that return ticket records include channel, the channel the ticket arrived on (Zendesk's via.channel: web, email, api, ...), or null when Zendesk does not say. zendesk_get_ticket also returns custom_fields as a list of {id, value} pairs; a field that is not set on the ticket has a null value.

ToolWhat it does
zendesk_search_ticketsSearch tickets by status, priority, type, assignee, requester, tags, or keyword. Each result includes channel
zendesk_get_ticketsList tickets with pagination and sorting (page, per_page, sort_by, sort_order). Each ticket includes channel
zendesk_get_ticketGet one ticket's metadata, including channel and custom_fields
zendesk_create_ticketCreate a new ticket (subject, description, optional priority/type/assignee_id/requester_id/tags/custom_fields)
zendesk_update_ticketUpdate one or more fields on an existing ticket (status, priority, subject, type, assignee_id, requester_id, group_id, custom_status_id, tags, custom_fields, due_at)
zendesk_get_commentsGet the conversation thread on a ticket
zendesk_list_attachmentsList attachments on a ticket
zendesk_download_attachmentDownload an attachment to a local cache directory. The URL must be on your Zendesk host, and dest_dir must be inside the cache or a directory listed in attachment_allowed_dest_dirs in the config
zendesk_ticket_to_gitlab_contextFormat a ticket and its conversation as a Markdown issue draft
zendesk_post_commentPost a public reply on a ticket
zendesk_post_internal_notePost an agent-only internal note on a ticket
zendesk_set_ticket_statusSet ticket status (new, open, pending, hold, solved, closed)
zendesk_assign_ticketAssign a ticket to an agent by email or me

Tags

ToolWhat it does
zendesk_add_tagAdd a tag to a ticket (idempotent)
zendesk_remove_tagRemove a tag from a ticket (idempotent)

Views & Macros

ToolWhat it does
zendesk_list_viewsList all active views
zendesk_get_viewGet a view's filter conditions and execution settings
zendesk_get_view_ticketsFetch tickets currently matching a view. Each ticket includes channel
zendesk_list_macrosList active macros with their actions
zendesk_preview_macroPreview what changes a macro would make
zendesk_apply_macroApply a macro to a ticket (applies field changes and posts any comment)

Users, Groups & Organizations

ToolWhat it does
zendesk_search_usersFind users by name or email
zendesk_get_groupsList all active groups
zendesk_get_group_usersList the members of a group
zendesk_get_organizationFetch an organization including custom fields
zendesk_list_custom_statusesList all custom ticket statuses and their IDs

Time tracking

ToolWhat it does
zendesk_get_time_trackingRead time-tracking entries for a ticket
zendesk_log_timeLog a time entry against a ticket

Git-Zen integration

ToolWhat it does
zendesk_get_git_zen_links(Git-Zen only) Get linked GitLab issues / MRs / commits for a ticket

Prompts

The server exposes two MCP prompts that some clients (e.g. Claude Desktop) surface as slash commands:

PromptArgumentWhat it does
analyze-ticketticket_idAsks the model to fetch the ticket and produce a summary, status/timeline, and key interaction points
draft-ticket-responseticket_idAsks the model to fetch the ticket and draft a customer-facing response (with a confirmation step before posting)

Optional: Git-Zen integration

If your Zendesk instance uses the Git-Zen app, the zendesk_get_git_zen_links tool can read its custom-field payload. Find your instance's Git-Zen custom field ID under Admin → Tickets → Fields (it is a numeric ID), then either set it during .venv/bin/python -m zendesk_mcp setup or edit ~/.config/zendesk-mcp/config.json to add:

json
{  "git_zen_field_id": 12345678901234}

Without this configured, zendesk_get_git_zen_links returns a "not configured" message.

Optional: Help Center knowledge base

If your Zendesk instance has a published Help Center, you can expose its sections and articles as the zendesk://knowledge-base MCP resource. The resource returns a single JSON document covering all sections and articles, cached for one hour.

This is opt-in. Enable it by either answering "y" to the prompt during .venv/bin/python -m zendesk_mcp setup, or by adding the following to ~/.config/zendesk-mcp/config.json:

json
{  "knowledge_base_enabled": true}

When the flag is absent or false, the resource is not registered, keeping the server's resource list empty for instances without a Help Center.

Optional: downloading attachments outside the cache

zendesk_download_attachment writes files to ~/.cache/zendesk-mcp/attachments/<ticket_id>/ by default (configurable via attachment_cache_dir). The dest_dir argument can redirect a download elsewhere, but because attachment contents are controlled by whoever wrote the ticket, the tool only accepts a dest_dir inside the cache or inside a directory you have explicitly allowed. Add the directories you want to permit to ~/.config/zendesk-mcp/config.json:

json
{  "attachment_allowed_dest_dirs": ["/home/me/work/support_bundles"]}

Paths are resolved before the check, so .. segments and symlinks cannot escape an allowed directory. Any dest_dir outside the allowed set is refused before the download starts.

The download URL itself must be an https URL on <subdomain>.zendesk.com for your configured subdomain; the tool refuses anything else so the OAuth token is never sent to another host. Archives are limited to 10,000 entries and 256 MiB unpacked, and tar members that are not regular files or directories are skipped.

Development

bash
python3 -m venv .venv.venv/bin/pip install -e ".[dev]".venv/bin/pytest

Tests run on Python 3.10, 3.11, and 3.12 in CI (see .github/workflows/test.yml).

Releasing

Bump the version in pyproject.toml, mcpb/pyproject.toml (both the version and the zendesk-mcp== pin), mcpb/manifest.json, and server.json (both fields), then push a v* tag. That triggers .github/workflows/release.yml, which publishes to PyPI, packs the MCPB bundle, publishes server.json to the MCP Registry, and cuts the GitHub release.

Check the versions agree before tagging — the release fails fast otherwise:

bash
python3 .github/scripts/check_versions.py 0.1.5

License

Apache-2.0

來源:README.md,提交 3606125

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

3
  1. v0.1.6最新Oct 9, 2026
  2. v0.1.5Oct 7, 2026
  3. v0.1.1Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分