zendesk-mcp-server
Provides tools for searching and retrieving Zendesk support tickets, help center articles, and feature feedback. Enables querying tickets with filters (status, tags, dates, priority), retrieving ticket details and comments, searching knowledge base articles, analyzing feature feedback, and finding tickets by tags.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@zendesk-mcp-serverWhat are users saying about the new dashboard?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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, Claude Desktop, or any MCP-compatible tool.
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
Related MCP server: mcp-server-zendesk
Installation
Option 1: Use via npx (Recommended)
No installation required! Just configure and use:
{
"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
npm install -g zendesk-mcp-serverThen configure:
{
"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
git clone https://github.com/wlaubernds/zendesk-mcp-server.git
cd zendesk-mcp-server
npm install
npm run buildThen use the local path in your config:
{
"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
Log in to your Zendesk Admin Center
Navigate to Apps and integrations > APIs > Zendesk API
Click the Settings tab
Under Token Access, click Add API token
Give it a description (e.g., "MCP Server")
Copy the token (you'll only see it once!)
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.jsonClaude Desktop:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
See 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 with advanced query syntax (status, priority, tags, dates) |
| Get full details of a specific ticket including all comments |
| Search help center articles |
| Get full content of a specific article |
| Comprehensive analysis of feedback for a specific feature |
| Get all tickets with a specific tag |
Zendesk Query Syntax
When searching tickets, you can use these filters:
status:- new, open, pending, hold, solved, closedpriority:- low, normal, high, urgenttags:- ticket tagssubject:- search in subject linecreated>orcreated<- date filters (format: YYYY-MM-DD)updated>orupdated<- last updated datePlain 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 resetPermissions
π 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_SUBDOMAINZENDESK_EMAILZENDESK_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.jsonis correct (if using local installation)Verify the JSON syntax in your config file is valid
Development
Building
npm run buildWatch Mode
npm run watchRunning Locally
npm run devMake sure to set the environment variables:
export ZENDESK_SUBDOMAIN=your-company
export ZENDESK_EMAIL=your-email@company.com
export ZENDESK_API_TOKEN=your-api-token
npm run devContributing
Contributions are welcome! Please feel free to submit a Pull Request.
Fork the repository
Create your feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add some amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
License
This project is licensed under the MIT License - see the 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 by Anthropic.
Related Projects
Support
If you encounter any issues or have questions:
π Report a bug
π‘ Request a feature
π Read the docs
Available Tools
6 toolsget_articleB
Get full content of a specific Help Center article by ID
| Name | Required | Description | Default |
|---|---|---|---|
| article_id | Yes | The article ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Full content' hints that the response includes the complete article body rather than a snippet, but nothing is said about error behavior for invalid IDs, permissions, rate limits, or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence that front-loads the verb and resource with zero filler. Nothing could be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description is adequate but thin: it does not characterize the returned content shape beyond 'full content', nor does it cover failure modes. An agent can call it correctly, but with minimal supporting context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'article_id' parameter, so the schema already documents it. The description's 'by ID' matches that semantic but adds no further meaning such as expected format or where to obtain the ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('Help Center article') with a clear identifier qualifier ('by ID'), so the agent knows exactly what it retrieves. It does not explicitly contrast itself with the sibling 'search_articles', leaving the distinction (fetch-one-by-ID vs. query-many) to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID' implies this is the tool to call when an article ID is already known, in contrast to 'search_articles' which would be used for discovery. However, no explicit when-to-use or when-not-to-use guidance is given, and no sibling is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ticketA
Get full details of a specific ticket by ID, including all comments and metadata
| Name | Required | Description | Default |
|---|---|---|---|
| ticket_id | Yes | The Zendesk ticket ID | |
| include_comments | No | Whether to include all ticket comments (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the returned payload shape (comments and metadata), which is useful context beyond the schema. However, it says nothing about permission requirements, behavior for a nonexistent or inaccessible ticket, comment volume, or response format, so important behavioral traits remain undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the resource and the payload scope are both stated immediately. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full schema coverage, the definition covers the essentials: what it returns and the identifying input. The remaining gap is the absence of any output schema or stated failure behavior, which is a minor omission for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (ticket_id, include_comments) are already fully documented in the schema, and the description adds no format, ID-type, or default-behavior detail beyond it. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Get) and resource (a specific ticket by ID) plus the payload scope (all comments and metadata), which separates it from search_tickets without naming it. It is clear and unambiguous, but stops short of explicitly differentiating itself from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'by ID' signals a single-record fetch, which contrasts with the sibling search_* tools, but there is no explicit when-to-use guidance, no stated prerequisites, and no named alternative. An agent can infer the intent, but the definition does not help it choose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tickets_by_tagB
Get all tickets with a specific tag
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | Tag name to search for | |
| page | No | Page number (default: 1) | |
| per_page | No | Results per page (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get' implies a read-only operation, but it never states pagination behavior, result ordering, or any cap on results even though paging parameters exist. For a list tool with zero annotation coverage this is a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that front-loads the verb and the filter with no filler. Nothing is wasted and nothing important is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a complete schema but no output schema and no annotations, the description is minimally adequate. It omits pagination/return-shape context that would help an agent call it correctly, but the schema covers the inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the tag, page, and per_page parameters are already fully documented including defaults. The description adds nothing beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Get all tickets') and a filter ('with a specific tag'), so the operation is unambiguous. It does not, however, distinguish itself from the sibling search_tickets, leaving the agent to guess which of the two to prefer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of the obvious alternative search_tickets. The agent gets no basis for choosing this tag-scoped lookup over the broader search sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_articlesA
Search Zendesk Help Center articles (knowledge base).
Examples:
"collections feature" - Search for articles about collections
"route planning guide" - Find articles about route planning
"label:feature_name" - Search by label
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| query | Yes | Search query | |
| per_page | No | Results per page (default: 50, max: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it does not say this is a read-only operation, or describe pagination behavior, result caps, or what a result contains. It only restates the search action, leaving the agent to infer everything about side effects and output shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded before the bulleted examples, and every line earns its place. It is slightly padded by three examples that illustrate essentially the same plain-keyword pattern twice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should do more work on behavior and result shape, and it should route between this and get_article. It is adequate for a simple paged search but leaves those gaps unfilled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the examples genuinely add value by demonstrating query syntax including the 'label:feature_name' operator, which is not expressed anywhere in the schema. Page/per_page defaults are already documented in the schema, so the description need not repeat them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: searching Zendesk Help Center articles, and clarifies the resource is the knowledge base. This clearly separates it from search_tickets, get_article, and get_tickets_by_tag, so an agent can pick it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The examples imply how to phrase queries and even show a label: filter, which is useful, but there is no explicit when-to-use/when-not-to-use guidance. Nothing tells the agent when to prefer this over get_article for a known article, or how it relates to search_feature_feedback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_feature_feedbackB
Search for all tickets and articles related to a specific feature. This is a convenience tool that searches for feature-related content including: - Bug reports - Feature requests - User feedback - Support questions
Example: "collections" will find all tickets and articles mentioning collections
| Name | Required | Description | Default |
|---|---|---|---|
| days_back | No | Number of days to look back (default: 90) | |
| feature_name | Yes | Name of the feature to search for (e.g., "collections", "route planning") | |
| include_solved | No | Include solved/closed tickets (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, and it mostly does not. It discloses that results span bug reports, feature requests, feedback, and support questions, but says nothing about result limits, pagination, sorting, or whether include_solved behaves differently for articles vs tickets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, followed by a scannable bullet list of content types and a single concrete example. Slightly list-heavy but every line earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All three parameters are documented in the schema and the description conveys scope and matching semantics. For a search tool with no annotations and no output schema, though, the absence of any return-volume, pagination, or ordering information leaves the agent under-informed about what to expect from a call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the worked example ('collections' will find all tickets and articles mentioning collections) adds genuine semantic meaning: it clarifies that feature_name is a keyword mention match, not an exact taxonomy lookup.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (tickets and articles related to a feature), and frames itself as a convenience aggregate. It is distinguishable from siblings like search_tickets and search_articles because it spans both content types, though it never names those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The framing as a 'convenience tool' and the enumeration of content types implies when it is appropriate (broad feature-oriented sweep rather than a targeted ticket/article lookup). However, it never states when to prefer search_tickets or search_articles instead, so routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ticketsB
Search Zendesk support tickets with advanced query syntax.
Examples:
"status:open tags:collections" - Find open tickets tagged with "collections"
"subject:bug priority:high" - Find high priority bug tickets
"tags:feature_request created>2024-01-01" - Find feature requests created after Jan 1, 2024
"collections route" - Full-text search for "collections route"
Query syntax supports:
status: (new, open, pending, hold, solved, closed)
priority: (low, normal, high, urgent)
tags: (tag names)
created: (date comparisons like >2024-01-01, <2024-12-31)
subject: (search in subject)
Full text search without prefix
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| query | Yes | Search query using Zendesk query syntax | |
| per_page | No | Results per page (default: 50, max: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about result limits, ordering, rate limits, or what a returned ticket contains. The only behavioral crumbs (page defaults, per_page max 100) live in the schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded and the syntax reference is organized as scannable examples plus a bullet list. It is a bit long, but each example demonstrates a distinct clause form rather than repeating.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The query grammar is fully covered, which is the hard part, but with no output schema the description should say something about what comes back (fields, ordering, or result shape). Pagination exists in the schema but is never connected to result behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description substantially enriches the most important parameter by enumerating the supported query prefixes and comparator syntax with worked examples. It does not touch page/per_page, which the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search Zendesk support tickets') and adds the differentiating detail 'advanced query syntax'. It implicitly separates itself from article/feedback siblings by naming 'tickets', but never explicitly names an alternative, so it stops short of full sibling routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the query examples (filter by status, tag, priority, date, subject), but there is no explicit when-to-use or when-not-to-use guidance. Nothing tells the agent when to prefer get_ticket, get_tickets_by_tag, or search_feature_feedback over this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v1.0.0- First observed
get_article - First observed
get_ticket - First observed
get_tickets_by_tag - First observed
search_articles - First observed
search_feature_feedback - First observed
search_tickets
TDQS
Scored across 6 tools
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.
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.
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.
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
Related MCP Connectors
Connect your team's living knowledge base β docs, data, issues, CRM β to Claude and ChatGPT.
Connect Claude, Cursor, or ChatGPT to your business data. Ask questions, get answers.
Connect AI tools to Weav customer service. Search conversations, reply, and manage knowledge.
Connect your AI to all your data - 200+ sources, intelligently filtered, compliance-ready.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with Zendesk ticket data for customer support analysis and insights. It supports searching tickets by tags or keywords, retrieving ticket details, and analyzing agent performance and service trends.-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search tickets, manage tags, create tickets, inspect automations, and more in Zendesk.MIT
- AlicenseAqualityDmaintenanceConnects AI assistants to your Zendesk account with 14 curated tools for managing tickets, users, organizations, and help center articles, running locally with no third-party services.14MIT
- FlicenseNot gradedqualityDmaintenanceEnables Claude Desktop to query a local Zendesk Help Center knowledge graph for semantic search, article retrieval, content gap analysis, and editorial intelligence tasks.3-