Desk365 MCP by usefulapi
Read Desk365 tickets, conversations, contacts, companies, time entries and knowledge articles.
Should I use this
Quality & Safety
Findings (1)
- LOWin desk365_get_ticket_conversations
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"desk365": {
"url": "https://desk365.usefulapi.io/mcp"
}
}
}Remote endpoints
https://desk365.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (13)
🟢desk365_list_tickets(status, priority, type, group, assigned_to, ...)
List helpdesk tickets, newest first by default, with subject, status, priority (1 Low, 5 Medium, 10 High, 20 Urgent), source, assignee, group, category, contact, company, SLA and dates. Filter by status, priority, type, group, assignee, category, contact, company or source. Use "--" in a list to match unassigned/empty. Descriptions are left out unless include_description is set. GET /v3/tickets.
Input Schema
{
"type": "object",
"properties": {
"status": {
"description": "Statuses, e.g. [\"Open\", \"Pending\"].",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"priority": {
"description": "Priorities to include.",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"low",
"medium",
"high",
"urgent"
]
}
},
"type": {
"description": "Ticket types.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"group": {
"description": "Agent group names.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"assigned_to": {
"description": "Agent emails; \"--\" for unassigned tickets.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 254
}
},
"category": {
"description": "Categories.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"subcategory": {
"description": "Sub-categories.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"source": {
"description": "Ticket sources: 1 Email, 5 Microsoft Teams, 6 Support Portal, 7 Phone/Other, 12 Web Form, 13 Web Widget, 15 API.",
"maxItems": 10,
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 30
}
},
"contact": {
"description": "Contact (requester) emails.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 254
}
},
"company_name": {
"description": "Company names.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 300
}
},
"exclude_merged": {
"description": "Leave out merged tickets (default: included).",
"type": "boolean"
},
"updated_since": {
"description": "Only tickets with any activity after this time, yyyy-mm-dd hh:mm:ss.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}( \\d{2}:\\d{2}(:\\d{2})?)?$"
},
"order_by": {
"description": "Sort field (default created_time).",
"type": "string",
"enum": [
"created_time",
"updated_time"
]
},
"order_type": {
"description": "Sort direction (default desc).",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"include_description": {
"description": "Include each ticket's description (default false).",
"type": "boolean"
},
"include_custom_fields": {
"description": "Include custom fields (default false).",
"type": "boolean"
},
"include_survey_details": {
"description": "Include the latest survey rating (default false).",
"type": "boolean"
},
"ticket_count": {
"description": "Results per call: 30 (default), 50 or 100.",
"anyOf": [
{
"type": "number",
"const": 30
},
{
"type": "number",
"const": 50
},
{
"type": "number",
"const": 100
}
]
},
"offset": {
"description": "Offset into the result list (default 0). Desk365 returns the next page of results from this offset.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desk365_search_tickets(query, search_in, order_by, exclude_merged, include_description, ...)
Full-text search over tickets, most relevant first. Searches subject and ticket number by default; widen it with search_in (description, replies and notes, attachment names, custom fields, contacts and companies, archived tickets). Double quotes around a phrase match it exactly; *text* matches inside words. GET /v3/tickets/search.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "The text to look for, e.g. \"printer not working\"."
},
"search_in": {
"description": "Where to look (default: all supported fields).",
"maxItems": 7,
"type": "array",
"items": {
"type": "string",
"enum": [
"subject_and_number",
"description",
"replies_and_notes",
"attachment_names",
"custom_fields",
"contacts_and_companies",
"archived_tickets"
]
}
},
"order_by": {
"description": "Sort (default relevance).",
"type": "string",
"enum": [
"relevance",
"created_time",
"updated_time"
]
},
"exclude_merged": {
"description": "Leave out merged tickets (default: included).",
"type": "boolean"
},
"include_description": {
"description": "Include each ticket's description (default false).",
"type": "boolean"
},
"ticket_count": {
"description": "Results per call: 30 (default), 50 or 100.",
"anyOf": [
{
"type": "number",
"const": 30
},
{
"type": "number",
"const": 50
},
{
"type": "number",
"const": 100
}
]
},
"offset": {
"description": "Offset into the result list (default 0). Desk365 returns the next page of results from this offset.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"required": [
"query"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desk365_get_ticket(ticket_number)
Everything on one ticket by its number: subject, description, status, priority, source, assignee, group, category, contact, company, SLA, due date, response/resolution durations (minutes), custom fields, watchers. GET /v3/tickets/details.
Input Schema
{
"type": "object",
"properties": {
"ticket_number": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Desk365 ticket number."
}
},
"required": [
"ticket_number"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desk365_get_ticket_conversations(ticket_number, newest_first, include_contact_replies, include_agent_replies, include_private_notes, ...)
The conversation on a ticket: customer replies, agent replies, private and public notes and forwarded messages, each with sender, recipients, HTML and plain-text body, attachment details and time. The original description is not included (it is on desk365_get_ticket). GET /v3/tickets/conversations.
Input Schema
{
"type": "object",
"properties": {
"ticket_number": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Desk365 ticket number."
},
"newest_first": {
"description": "Newest message on top (default: earliest first).",
"type": "boolean"
},
"include_contact_replies": {
"description": "Include customer replies (default true).",
"type": "boolean"
},
"include_agent_replies": {
"description": "Include agent replies (default true).",
"type": "boolean"
},
"include_private_notes": {
"description": "Include private notes (default true).",
"type": "boolean"
},
"include_public_notes": {
"description": "Include public notes (default true).",
"type": "boolean"
},
"include_forward_messages": {
"description": "Include forwarded messages (default true).",
"type": "boolean"
}
},
"required": [
"ticket_number"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desk365_list_contacts(company, order_by, order_type, include_custom_fields, offset)
List contacts (customers/requesters), 30 per call, sorted by name by default, optionally only those of one company. GET /v3/contacts.
Input Schema
{
"type": "object",
"properties": {
"company": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Only the contacts of this company (company name)."
},
"order_by": {
"description": "Sort field (default name).",
"type": "string",
"enum": [
"name",
"title",
"company",
"email"
]
},
"order_type": {
"description": "Sort direction (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"include_custom_fields": {
"description": "Include custom contact fields (default false).",
"type": "boolean"
},
"offset": {
"description": "Offset into the result list (default 0). Desk365 returns the next page of results from this offset.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desk365_get_contact(primary_email, secondary_email)
One contact by primary email (or, if the primary is not known, a secondary email): name, title, phones, company, departments, custom fields. GET /v3/contacts/details.
Input Schema
{
"type": "object",
"properties": {
"primary_email": {
"description": "The contact's primary email.",
"type": "string",
"minLength": 3,
"maxLength": 254,
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$"
},
"secondary_email": {
"description": "The contact's secondary email (used only when no primary email is given).",
"type": "string",
"minLength": 3,
"maxLength": 254,
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desk365_list_companies(include_custom_fields, offset)
List companies (customer organisations), 30 per call, sorted by name. GET /v3/companies.
Input Schema
{
"type": "object",
"properties": {
"include_custom_fields": {
"description": "Include custom company fields (default false).",
"type": "boolean"
},
"offset": {
"description": "Offset into the result list (default 0). Desk365 returns the next page of results from this offset.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desk365_get_company(name)
One company by exact name: description, phone, address, SLA, domains, departments, custom fields. GET /v3/companies/details.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Exact company name."
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desk365_list_time_entries(ticket_number, agent_email, company_name, billable, timer_running, ...)
List logged time entries (ticket, agent, minutes, billable, note), filtered by ticket, agent, company, billable flag, running timers or date ranges. GET /v3/time_entries.
Input Schema
{
"type": "object",
"properties": {
"ticket_number": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Desk365 ticket number."
},
"agent_email": {
"description": "Only this agent's entries.",
"type": "string",
"minLength": 3,
"maxLength": 254,
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$"
},
"company_name": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Only entries of this company."
},
"billable": {
"description": "true = billable only, false = non-billable only.",
"type": "boolean"
},
"timer_running": {
"description": "true = only timers still running.",
"type": "boolean"
},
"started_after": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}( \\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd hh:mm:ss (or just yyyy-mm-dd), in the helpdesk's timezone."
},
"started_before": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}( \\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd hh:mm:ss (or just yyyy-mm-dd), in the helpdesk's timezone."
},
"created_after": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}( \\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd hh:mm:ss (or just yyyy-mm-dd), in the helpdesk's timezone."
},
"updated_after": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}( \\d{2}:\\d{2}(:\\d{2})?)?$",
"description": "yyyy-mm-dd hh:mm:ss (or just yyyy-mm-dd), in the helpdesk's timezone."
},
"time_entries_count": {
"description": "Results per call: 30 (default), 50 or 100.",
"anyOf": [
{
"type": "number",
"const": 30
},
{
"type": "number",
"const": 50
},
{
"type": "number",
"const": 100
}
]
},
"offset": {
"description": "Offset into the result list (default 0). Desk365 returns the next page of results from this offset.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desk365_get_time_entry(id)
One time entry by id. GET /v3/time_entries/details.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Time entry id (from desk365_list_time_entries)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desk365_list_survey_ratings(offset)
Customer satisfaction survey ratings (type 1 CSAT, 2 five-star, 3 NPS), oldest reply first, 30 per call. GET /v3/surveys/ratings.
Input Schema
{
"type": "object",
"properties": {
"offset": {
"description": "Offset into the result list (default 0). Desk365 returns the next page of results from this offset.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desk365_list_kb_articles
The titles of all live knowledge base articles. Open one with desk365_get_kb_article. GET /v3/kb/article/.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desk365_get_kb_article(article_name)
A live knowledge base article by its exact title: HTML and plain-text content, category, folder, author, views, likes and status (0 unpublished, 1 published). GET /v3/kb/article/details.
Input Schema
{
"type": "object",
"properties": {
"article_name": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Exact article title (from desk365_list_kb_articles)."
}
},
"required": [
"article_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence