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 buildin short. - setup zendesk credentials in
.envfile, 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.exampleto.envand 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
-iwhen 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,urgenttype(string, optional): one ofproblem,incident,question,tasktags(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,closedpriority(string, optional): one oflow,normal,high,urgenttype(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
