Skip to main content
Glama
larryfang

Zendesk MCP Server

by larryfang

Zendesk MCP Server (Model Context Protocol)

This project is a lightweight, AI-native MCP (Model Context Protocol) server that integrates with Zendesk's REST APIs. It allows GPT-based AI agents (e.g. OpenAI, LangChain) to fetch real-time customer and organization context dynamically.


Features

  • Accepts ticket_id, user_id, or organization_id

  • Fetches user, org, and ticket context from Zendesk

  • Returns:

    • summary: human-readable LLM-friendly summary

    • prompt_context: single-line LLM embedding string

    • context: structured blocks (text, list)

    • prompt_guidance: usage instructions and few-shot examples

  • Exposes:

    • /context: main context API

    • /meta: MCP schema metadata

    • /function-schema: OpenAI function-compatible definition

  • Fully Dockerized and deployable

  • Compatible with GPT-4 function calling


Related MCP server: Zendesk MCP Server

Getting Started

1. Clone and install dependencies

git clone https://github.com/your-repo/zendesk-mcp-server cd zendesk-mcp-server npm install

2. Set up .env

ZENDESK_DOMAIN=your-subdomain.zendesk.com ZENDESK_EMAIL=your-email@yourdomain.com ZENDESK_API_TOKEN=your_zendesk_api_token PORT=3000

3. Run Locally

node index.js

Visit:

  • http://localhost:3000/context

  • http://localhost:3000/meta

  • http://localhost:3000/function-schema


Docker Support

Build Image

docker build -t zendesk-mcp .

Run Container

docker run -p 3000:3000 \ -e ZENDESK_DOMAIN=your-subdomain.zendesk.com \ -e ZENDESK_EMAIL=your-email \ -e ZENDESK_API_TOKEN=your-token \ zendesk-mcp

Function Calling with OpenAI (Example)

See openai-client.js for an example where:

  • GPT-4 automatically detects and calls get_ticket_context

  • The function calls your local MCP server

  • GPT writes a natural reply using the returned context

Simulating a Full Chat Conversation

What you've tested so far is GPT-4 calling your MCP server using function calling, which works. Now you want to simulate a full conversation where:

A user asks something natural like:

“Can you give me context for ticket 12345?”

  • GPT-4 figures out it needs to call get_ticket_context

  • GPT-4 calls your MCP server automatically

  • GPT-4 uses the result to reply in a natural, chat-style response

Let’s build exactly that — your own OpenAI Agent Loop that mimics how GPT-4 with tools (functions) will behave in production.

✅ Step-by-Step: Full Chat-Based OpenAI Agent with Function Calling

✨ Final Output Looks Like:

User: Can you give me context for ticket 12345? GPT: Sure! Here's what I found: Alice Smith is a Premium customer under Acme Corp. She submitted 3 tickets recently. The latest ticket is titled "Login timeout" and is currently open.

What This Script Does:

  • Sends a natural user message to GPT-4

  • GPT-4 detects your function, calls it with a ticket_id

  • You send that to your MCP server

  • Feed the MCP server’s context result back to GPT

  • GPT-4 writes a human-style response using the result


Web Chat Interface + OpenAI Router API

To demonstrate end-to-end usage with real input/output, this project includes:

1. /chat API endpoint (openai-router.js)

A Node.js API that accepts natural language messages, detects intent using GPT-4 + function calling, and uses the MCP server to fetch data and compose replies.

🔧 .env additions:

OPENAI_API_KEY=your_openai_key MCP_SERVER_URL=http://localhost:3000 CHAT_PORT=4000

▶️ Run the API:

node openai-router.js

This starts a server at http://localhost:4000/chat

2. chat-ui.html

A simple HTML frontend to type user prompts and see AI-generated responses with Zendesk context.

🧪 Example Questions:

  • Who is the user for ticket 12345?

  • Tell me about organization 78901

  • How many tickets has user 112233 opened?

💬 Usage

  • Open chat-ui.html in a browser

  • Ensure the /chat endpoint is running with CORS enabled

  • Ask questions and see the result appear naturally

🔐 Note

Make sure you install and enable CORS in openai-router.js:

const cors = require('cors'); app.use(cors());

Future Enhancements

  • LangChain tool compatibility

  • Redis caching layer

  • Rate limiting

  • More context types: /orders, /billing, /subscriptions


License

MIT


Author

Your Name — @yourhandle

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/larryfang/mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server