A Model Context Protocol server for Zendesk.
This server provides a comprehensive integration with Zendesk. It offers:
- Tools for retrieving and managing Zendesk tickets and comments
- Specialized prompts for ticket analysis and response drafting
- Full access to the Zendesk Help Center articles as knowledge base
- build:
uv venv && uv pip install -e .
oruv build
in short. - setup zendesk credentials in
.env
file, refer to .env.example. - configure in Claude desktop:
{
"mcpServers": {
"zendesk": {
"command": "uv",
"args": [
"--directory",
"/path/to/zendesk-mcp-server",
"run",
"zendesk"
]
}
}
}
You can containerize the server if you prefer an isolated runtime:
-
Copy
.env.example
to.env
and fill in your Zendesk credentials. Keep this file outside version control. -
Build the image:
docker build -t zendesk-mcp-server .
-
Run the server, providing the environment file:
docker run --rm --env-file /path/to/.env zendesk-mcp-server
Add
-i
when wiring the container to MCP clients over STDIN/STDOUT (Claude Code uses this mode). For daemonized runs, add-d --name zendesk-mcp
.
The image installs dependencies from requirements.lock
, drops privileges to a non-root user, and expects configuration exclusively via environment variables.
To use the Dockerized server from Claude Code/Desktop, add an entry to Claude Code's settings.json
similar to:
{
"mcpServers": {
"zendesk": {
"command": "/usr/local/bin/docker",
"args": [
"run",
"--rm",
"-i",
"--env-file",
"/path/to/zendesk-mcp-server/.env",
"zendesk-mcp-server"
]
}
}
}
Adjust the paths to match your environment. After saving the file, restart Claude for the new MCP server to be detected.
- zendesk://knowledge-base, get access to the whole help center articles.
Analyze a Zendesk ticket and provide a detailed analysis of the ticket.
Draft a response to a Zendesk ticket.
Fetch the latest tickets with pagination support
-
Input:
page
(integer, optional): Page number (defaults to 1)per_page
(integer, optional): Number of tickets per page, max 100 (defaults to 25)sort_by
(string, optional): Field to sort by - created_at, updated_at, priority, or status (defaults to created_at)sort_order
(string, optional): Sort order - asc or desc (defaults to desc)
-
Output: Returns a list of tickets with essential fields including id, subject, status, priority, description, timestamps, and assignee information, along with pagination metadata
Retrieve a Zendesk ticket by its ID
- Input:
ticket_id
(integer): The ID of the ticket to retrieve
Retrieve all comments for a Zendesk ticket by its ID
- Input:
ticket_id
(integer): The ID of the ticket to get comments for
Create a new comment on an existing Zendesk ticket
- Input:
ticket_id
(integer): The ID of the ticket to comment oncomment
(string): The comment text/content to addpublic
(boolean, optional): Whether the comment should be public (defaults to true)
Create a new Zendesk ticket
- Input:
subject
(string): Ticket subjectdescription
(string): Ticket descriptionrequester_id
(integer, optional)assignee_id
(integer, optional)priority
(string, optional): one oflow
,normal
,high
,urgent
type
(string, optional): one ofproblem
,incident
,question
,task
tags
(array[string], optional)custom_fields
(array[object], optional)
Update fields on an existing Zendesk ticket (e.g., status, priority, assignee)
- Input:
ticket_id
(integer): The ID of the ticket to updatesubject
(string, optional)status
(string, optional): one ofnew
,open
,pending
,on-hold
,solved
,closed
priority
(string, optional): one oflow
,normal
,high
,urgent
type
(string, optional)assignee_id
(integer, optional)requester_id
(integer, optional)tags
(array[string], optional)custom_fields
(array[object], optional)due_at
(string, optional): ISO8601 datetime