Zendesk MCP Server
# Zendesk MCP Server
A Zendesk MCP (Model Context Protocol) server for Kojo. Gives Claude access to support tickets and Help Center articles for trend analysis, knowledge base management, and customer insight research.
## Example usage
- "Fetch all tickets from the past week and provide an analysis of any trends you find"
- "Pull last month's solved tickets and identify the top 5 feature gaps driving support volume"
- "Search our help center for articles about approvals — are there any gaps we should fill?"
- "Draft a new help center article explaining how to set up invoice matching"
## Tools
| Tool | Description |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `fetch_tickets` | Search tickets by date range and status. Returns full conversation transcripts. Supports natural language dates ("past month", "past 7 days"). |
| `read_articles` | Search, list, or get Help Center articles. Includes section discovery for browsing the knowledge base structure. |
| `create_article` | Create new Help Center articles (drafts by default). |
| `update_article` | Update article title, body, or draft status. |
## Setup
### 1. Get a Zendesk API token
1. Log into Zendesk as an admin
2. Go to **Admin Center > Apps and integrations > Zendesk API**
3. Enable **Token Access** if not already enabled
4. Click **Add API token**, give it a name, and copy the token
### 2. Install and build
```bash
git clone <repo-url>
cd zendesk-mcp
npm install
npm run build
```
### 3. Configure Claude Code
Add to your `.mcp.json`:
```json
{
"mcpServers": {
"zendesk": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/zendesk-mcp/build/index.js"],
"env": {
"ZENDESK_SUBDOMAIN": "your-subdomain",
"ZENDESK_EMAIL": "your-email@example.com",
"ZENDESK_API_TOKEN": "your-api-token"
}
}
}
}
```
Replace the `env` values with your own. The subdomain is the part before `.zendesk.com` in your Zendesk URL.
### Optional environment variables
| Variable | Description |
| ------------------------------------- | ------------------------------------------------------------------------------------- |
| `ZENDESK_DEFAULT_PERMISSION_GROUP_ID` | Default permission group for new articles. If unset, Zendesk assigns its own default. |
## Requirements
- Node.js 18+
- A Zendesk account with API token access
- Claude Code with MCP support
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: fetch_tickets is exclusively for support tickets, while read_articles, create_article, and update_article handle help center articles without overlap. Even though read_articles supports multiple modes, it does not conflict with the write tools.
All tool names follow a consistent verb_noun snake_case pattern (fetch_tickets, read_articles, create_article, update_article). The verbs are action-oriented and clearly indicate the operation, making the naming predictable and easy to navigate.
With only 4 tools, the set is compact but well-scoped for the two main domains (ticket analysis and article management). Each tool serves a necessary function without redundancy or bloat.
The article workflow is nearly complete, with read, create, and update operations, but it lacks delete functionality. Ticket handling only supports fetching, which aligns with the stated trend-analysis purpose but may be limiting for other use cases. Overall, the coverage is solid with minor gaps.