Desk365 MCP by usefulapi

Read Desk365 tickets, conversations, contacts, companies, time entries and knowledge articles.

Should I use this

Quality & Safety

A
Description quality
95%
Schema completeness
90%
Naming quality
78%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'desk365_get_ticket_conversations' name length outside 3-30 rangein desk365_get_ticket_conversations

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,518Tokens (tool definitions)
~2.1 KBTypical response size
Significant attention impact (2.75% of 128k context)

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-http

What it can do

Tool inventory

Tools (13)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded13 tools