Skip to main content
Glama
wlaubernds

zendesk-mcp-server

by wlaubernds
README.md
# Zendesk MCP Server

> Model Context Protocol server that connects AI assistants to Zendesk, enabling natural language queries over support tickets, help articles, and customer feedback.

Search your Zendesk data using AI in [Cursor](https://cursor.sh), [Claude Desktop](https://claude.ai/desktop), or any MCP-compatible tool.

[![npm version](https://badge.fury.io/js/zendesk-mcp-server.svg)](https://www.npmjs.com/package/zendesk-mcp-server)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## Features

- šŸ” **Search Support Tickets** - Query tickets with advanced filters (status, tags, dates, priority)
- šŸ“š **Search Knowledge Base** - Find relevant help articles and documentation
- šŸ“Š **Feature Feedback Analysis** - Get comprehensive feedback about specific features including bug reports, feature requests, and support questions
- šŸŽ« **Ticket Details** - Retrieve full ticket information including all comments
- šŸ“– **Article Content** - Access complete help center articles
- šŸ·ļø **Tag-based Search** - Find all tickets with specific tags

## Installation

### Option 1: Use via npx (Recommended)

No installation required! Just configure and use:

```json
{
  "mcpServers": {
    "zendesk": {
      "command": "npx",
      "args": ["-y", "zendesk-mcp-server"],
      "env": {
        "ZENDESK_SUBDOMAIN": "your-company",
        "ZENDESK_EMAIL": "your-email@company.com",
        "ZENDESK_API_TOKEN": "your-api-token-here"
      }
    }
  }
}
```

### Option 2: Install Globally

```bash
npm install -g zendesk-mcp-server
```

Then configure:

```json
{
  "mcpServers": {
    "zendesk": {
      "command": "zendesk-mcp-server",
      "env": {
        "ZENDESK_SUBDOMAIN": "your-company",
        "ZENDESK_EMAIL": "your-email@company.com",
        "ZENDESK_API_TOKEN": "your-api-token-here"
      }
    }
  }
}
```

### Option 3: Local Development

```bash
git clone https://github.com/wlaubernds/zendesk-mcp-server.git
cd zendesk-mcp-server
npm install
npm run build
```

Then use the local path in your config:

```json
{
  "mcpServers": {
    "zendesk": {
      "command": "node",
      "args": ["/path/to/zendesk-mcp-server/dist/index.js"],
      "env": {
        "ZENDESK_SUBDOMAIN": "your-company",
        "ZENDESK_EMAIL": "your-email@company.com",
        "ZENDESK_API_TOKEN": "your-api-token-here"
      }
    }
  }
}
```

## Getting Your Zendesk API Credentials

1. Log in to your Zendesk Admin Center
2. Navigate to **Apps and integrations** > **APIs** > **Zendesk API**
3. Click the **Settings** tab
4. Under **Token Access**, click **Add API token**
5. Give it a description (e.g., "MCP Server")
6. Copy the token (you'll only see it once!)
7. Your subdomain is the first part of your Zendesk URL: `https://YOUR-SUBDOMAIN.zendesk.com`

## Configuration

Add the configuration to your MCP settings file:

- **Cursor**: `~/.cursor/mcp.json`
- **Claude Desktop**: 
  - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
  - Windows: `%APPDATA%\Claude\claude_desktop_config.json`

See [examples/cursor-config.json](examples/cursor-config.json) for a complete example.

## Usage

Once configured, you can use natural language to query your Zendesk data:

### Example Queries

**Analyze feature feedback:**
```
"Show me all feedback about our mobile app from the last 3 months"
```

**Search tickets:**
```
"Find all high priority bug reports from this week"
"What are users saying about the new dashboard?"
```

**Weekend summaries:**
```
"Summarize all tickets from this weekend"
```

**Specific ticket details:**
```
"Get full details and comments for ticket #12345"
```

**Search help articles:**
```
"Find all help articles about password reset"
```

## Available Tools

The MCP server provides these tools that AI assistants can use:

| Tool | Description |
|------|-------------|
| `search_tickets` | Search tickets with advanced query syntax (status, priority, tags, dates) |
| `get_ticket` | Get full details of a specific ticket including all comments |
| `search_articles` | Search help center articles |
| `get_article` | Get full content of a specific article |
| `search_feature_feedback` | Comprehensive analysis of feedback for a specific feature |
| `get_tickets_by_tag` | Get all tickets with a specific tag |

## Zendesk Query Syntax

When searching tickets, you can use these filters:

- `status:` - new, open, pending, hold, solved, closed
- `priority:` - low, normal, high, urgent
- `tags:` - ticket tags
- `subject:` - search in subject line
- `created>` or `created<` - date filters (format: YYYY-MM-DD)
- `updated>` or `updated<` - last updated date
- Plain text for full-text search

### Query Examples:

```
status:open tags:bug priority:high
tags:mobile created>2024-01-01
subject:"cannot login" priority:urgent
password reset
```

## Permissions

šŸ”’ **This MCP server is READ-ONLY** - it has zero write permissions to Zendesk.

### āœ… What it CAN do:
- Search and read support tickets
- Retrieve ticket details and comments
- Search knowledge base articles
- Analyze feature feedback
- Query tickets by tags, status, priority, dates

### āŒ What it CANNOT do:
- Create tickets
- Update or modify tickets
- Add comments to tickets
- Change ticket status
- Modify tags, priority, or assignments
- Create or edit help articles
- Delete anything

This read-only design makes it safe to use with shared API tokens for analysis and reporting purposes.

## API Rate Limits

Zendesk enforces API rate limits:

- **Professional plans**: 700 requests per minute
- **Team plans**: 400 requests per minute

The server doesn't implement rate limiting internally, so be mindful when making large queries.

## Troubleshooting

### "Error: Missing required environment variables"

Make sure all three environment variables are set in your MCP config:
- `ZENDESK_SUBDOMAIN`
- `ZENDESK_EMAIL`
- `ZENDESK_API_TOKEN`

### "Zendesk API error (401)"

- Check that your email and API token are correct
- Verify the API token hasn't been revoked in Zendesk
- Ensure you're using the correct authentication format

### "Zendesk API error (404)"

- Verify your subdomain is correct
- Check that the ticket/article ID exists

### Server not appearing in Cursor

- Make sure you've restarted Cursor completely after adding the config
- Check that the path in `mcp.json` is correct (if using local installation)
- Verify the JSON syntax in your config file is valid

## Development

### Building

```bash
npm run build
```

### Watch Mode

```bash
npm run watch
```

### Running Locally

```bash
npm run dev
```

Make sure to set the environment variables:

```bash
export ZENDESK_SUBDOMAIN=your-company
export ZENDESK_EMAIL=your-email@company.com
export ZENDESK_API_TOKEN=your-api-token
npm run dev
```

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Security

āš ļø **Never commit your API tokens to version control!** 

Your MCP configuration file should remain local to your machine and not be shared or committed to git.

## Acknowledgments

Built with the [Model Context Protocol SDK](https://github.com/modelcontextprotocol/sdk) by Anthropic.

## Related Projects

- [Model Context Protocol](https://modelcontextprotocol.io/)
- [MCP Servers Repository](https://github.com/modelcontextprotocol/servers)

## Support

If you encounter any issues or have questions:

- šŸ› [Report a bug](https://github.com/wlaubernds/zendesk-mcp-server/issues)
- šŸ’” [Request a feature](https://github.com/wlaubernds/zendesk-mcp-server/issues)
- šŸ“– [Read the docs](https://github.com/wlaubernds/zendesk-mcp-server#readme)

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation4/5

Most tools have distinct purposes: search_tickets (query-based search), get_ticket (by ID), search_articles (KB search), get_article (by ID). However, search_feature_feedback and get_tickets_by_tag overlap with search_tickets, as they are essentially specialized searches. search_feature_feedback is broad and could be redundant, while get_tickets_by_tag could be achieved with search_tickets using a tag: query. Minor ambiguity exists but descriptions clarify usage.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: search_tickets, get_ticket, search_articles, get_article, search_feature_feedback, get_tickets_by_tag. The pattern is predictable and aids in understanding tool functionality.

Tool Count4/5

With 6 tools, the count is well within the typical range for a focused MCP server. Each tool addresses a specific need, though some (like search_feature_feedback and get_tickets_by_tag) could be seen as convenience wrappers that overlap with search_tickets, slightly inflating the count.

Completeness3/5

The server covers search and retrieval for tickets and articles, but lacks write operations such as creating, updating, or deleting tickets and articles. For a Zendesk support tool, common actions like adding comments or updating ticket status are missing, limiting agent workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues