Deskpro MCP by usefulapi
Search tickets, people, organizations and KB articles in Deskpro, and create tickets and replies.
Should I use this
Quality & Safety
Findings (1)
- LOWin deskpro_list_organization_tickets
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": {
"deskpro": {
"url": "https://deskpro.usefulapi.io/mcp"
}
}
}Remote endpoints
https://deskpro.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (20)
🟢deskpro_get_me
Return who the API key acts as — the auth method, the bound person id and their profile. A cheap way to confirm the helpdesk URL and key are right. Deskpro: GET /api/v2/me.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_list_tickets(status, agent, person, organization, department, ...)
List tickets, filtered by status, assigned agent, requester, organization, department or labels, and sorted. Returns ticket objects (id, ref, subject, ticket_status, agent, person, department, urgency, labels, dates) plus pagination meta. Deskpro: GET /api/v2/tickets.
Input Schema
{
"type": "object",
"properties": {
"status": {
"description": "Only tickets in this status, e.g. awaiting_agent, awaiting_user, pending, resolved.",
"type": "string"
},
"agent": {
"description": "Only tickets assigned to this agent id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"person": {
"description": "Only tickets raised by this person id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"organization": {
"description": "Only tickets from this organization id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"department": {
"description": "Only tickets in this department id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"labels": {
"description": "Only tickets with these labels (comma-separated).",
"type": "string"
},
"ids": {
"description": "Fetch exactly these ticket ids (comma-separated).",
"type": "string",
"pattern": "^\\d+(,\\d+)*$"
},
"order_by": {
"description": "Sort field.",
"type": "string",
"enum": [
"id",
"urgency",
"date_created",
"date_status",
"date_last_agent_reply",
"date_last_user_reply",
"date_last_reply",
"date_user_waiting",
"total_user_waiting",
"subject",
"status"
]
},
"group_sort": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"include": {
"description": "Comma-separated related object types to side-load into the response's `linked` section, e.g. person,agent,department,organization.",
"type": "string"
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"count": {
"description": "Results per page, 1-200.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_get_ticket(ticket_id, include)
Fetch a single ticket by id, with its subject, status, assignment, requester, labels, custom fields, SLA state and timing. A merged ticket redirects to the ticket it was merged into. Deskpro: GET /api/v2/tickets/{id}.
Input Schema
{
"type": "object",
"properties": {
"ticket_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The ticket's numeric id."
},
"include": {
"description": "Comma-separated related object types to side-load into the response's `linked` section, e.g. person,agent,department,organization.",
"type": "string"
}
},
"required": [
"ticket_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_list_ticket_messages(ticket_id, include, page, count)
List the conversation on one ticket — every reply and agent note, with its author, date, is_agent_note flag and HTML body. Deskpro: GET /api/v2/tickets/{id}/messages.
Input Schema
{
"type": "object",
"properties": {
"ticket_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The ticket's numeric id."
},
"include": {
"description": "Comma-separated related object types to side-load into the response's `linked` section, e.g. person,agent,department,organization.",
"type": "string"
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"count": {
"description": "Results per page, 1-200.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"ticket_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_list_people(search, primary_email, organization, is_agent, order_by, ...)
List people (end users and agents), searchable by name and filterable by email, organization or agent flag. Deskpro: GET /api/v2/people.
Input Schema
{
"type": "object",
"properties": {
"search": {
"description": "Search on name.",
"type": "string"
},
"primary_email": {
"description": "Only the person with this primary email.",
"type": "string"
},
"organization": {
"description": "Only members of these organization ids (comma-separated).",
"type": "string",
"pattern": "^\\d+(,\\d+)*$"
},
"is_agent": {
"description": "true for agents only, false for end users only.",
"type": "boolean"
},
"order_by": {
"description": "Sort field.",
"type": "string",
"enum": [
"id",
"date_created",
"date_last_login",
"name",
"first_name",
"last_name",
"primary_email",
"timezone",
"organization"
]
},
"order_dir": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"include": {
"description": "Comma-separated related object types to side-load into the response's `linked` section, e.g. person,agent,department,organization.",
"type": "string"
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"count": {
"description": "Results per page, 1-200.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_get_person(person_id, include)
Fetch a single person by id — name, emails, phone numbers, organization, labels, custom fields and ticket count. Deskpro: GET /api/v2/people/{id}.
Input Schema
{
"type": "object",
"properties": {
"person_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The person's numeric id."
},
"include": {
"description": "Comma-separated related object types to side-load into the response's `linked` section, e.g. person,agent,department,organization.",
"type": "string"
}
},
"required": [
"person_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_list_person_tickets(person_id, page, count)
List the tickets raised by one person — their support history. Deskpro: GET /api/v2/people/{id}/tickets.
Input Schema
{
"type": "object",
"properties": {
"person_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The person's numeric id."
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"count": {
"description": "Results per page, 1-200.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"person_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_list_organizations(search, name, labels, include, page, ...)
List customer organizations, filterable by name or labels. Deskpro: GET /api/v2/organizations.
Input Schema
{
"type": "object",
"properties": {
"search": {
"description": "Search on name.",
"type": "string"
},
"name": {
"description": "Only the organization with this name.",
"type": "string"
},
"labels": {
"description": "Only organizations with these labels (comma-separated).",
"type": "string"
},
"include": {
"description": "Comma-separated related object types to side-load into the response's `linked` section, e.g. person,agent,department,organization.",
"type": "string"
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"count": {
"description": "Results per page, 1-200.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_get_organization(organization_id, include)
Fetch a single organization by id — name, summary, email domains, labels, custom fields and ticket count. Deskpro: GET /api/v2/organizations/{id}.
Input Schema
{
"type": "object",
"properties": {
"organization_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The organization's numeric id."
},
"include": {
"description": "Comma-separated related object types to side-load into the response's `linked` section, e.g. person,agent,department,organization.",
"type": "string"
}
},
"required": [
"organization_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_list_organization_tickets(organization_id, page, count)
List the tickets belonging to one organization. Deskpro: GET /api/v2/organizations/{id}/tickets.
Input Schema
{
"type": "object",
"properties": {
"organization_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The organization's numeric id."
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"count": {
"description": "Results per page, 1-200.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"organization_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_list_articles(category, status, author, order_by, page, ...)
List knowledgebase articles, filterable by category, status and author. Deskpro: GET /api/v2/articles.
Input Schema
{
"type": "object",
"properties": {
"category": {
"description": "Only articles in this category id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"status": {
"description": "Only articles in this status.",
"type": "string",
"enum": [
"published",
"archived",
"hidden"
]
},
"author": {
"description": "Only articles by this author id, or 'me' for the key's agent.",
"type": "string",
"pattern": "^(\\d+|me)$"
},
"order_by": {
"description": "Sort field.",
"type": "string",
"enum": [
"date_created",
"date_updated",
"person"
]
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"count": {
"description": "Results per page, 1-200.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_get_article(article_id)
Fetch a single knowledgebase article by id — title, content, status, categories and labels. Deskpro: GET /api/v2/articles/{id}.
Input Schema
{
"type": "object",
"properties": {
"article_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The article's numeric id."
}
},
"required": [
"article_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_list_departments(page, count)
List the ticket departments (id, title, parent, whether tickets/chat are enabled) — needed to route a new ticket. Deskpro: GET /api/v2/ticket_departments.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"count": {
"description": "Results per page, 1-200.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_list_agents(online, page, count)
List the helpdesk's agents (id, name, email, online state) — needed to assign a ticket. Deskpro: GET /api/v2/agents.
Input Schema
{
"type": "object",
"properties": {
"online": {
"description": "1 = online only, 0 = offline only, -1 = both.",
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": -1
}
]
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"count": {
"description": "Results per page, 1-200.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_list_ticket_statuses(status_type, page, count)
List the ticket statuses and custom sub-statuses (status_type, status_code, title) configured on the helpdesk. Deskpro: GET /api/v2/ticket_statuses.
Input Schema
{
"type": "object",
"properties": {
"status_type": {
"description": "Only statuses of this type.",
"type": "string",
"enum": [
"pending",
"awaiting_agent",
"awaiting_user",
"resolved"
]
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"count": {
"description": "Results per page, 1-200.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢deskpro_search(q, types)
Quick search across tickets, people, organizations, articles, news, downloads, community topics and chats; results are grouped by type. Deskpro: GET /api/v2/search.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"minLength": 1,
"description": "The search term."
},
"types": {
"description": "Comma-separated types to search, e.g. ticket,person,organization. Omit for all.",
"type": "string",
"pattern": "^(article|download|community|news|ticket|person|agent|organization|chat_conversation)(,(article|download|community|news|ticket|person|agent|organization|chat_conversation))*$"
}
},
"required": [
"q"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴deskpro_create_ticket(subject, message, message_format, person_id, person_email, ...)
Open a new ticket for a requester (by person id, or by email — Deskpro creates the person if the email is new) with a first message. Depending on the helpdesk's triggers this may email the requester. Returns the created ticket. Deskpro: POST /api/v2/tickets.
Input Schema
{
"type": "object",
"properties": {
"subject": {
"type": "string",
"minLength": 1,
"description": "The ticket subject."
},
"message": {
"type": "string",
"minLength": 1,
"description": "The first message body."
},
"message_format": {
"description": "Format of the message body. Default text.",
"type": "string",
"enum": [
"html",
"text"
]
},
"person_id": {
"description": "The requester's person id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"person_email": {
"description": "The requester's email (used when person_id is not given).",
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"person_name": {
"description": "The requester's name, for a new person.",
"type": "string"
},
"department": {
"description": "Department id (see deskpro_list_departments).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"agent_id": {
"description": "Assign to this agent id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"agent_team": {
"description": "Assign to this agent team id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"organization": {
"description": "Organization id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"status": {
"type": "string",
"pattern": "^(awaiting_agent|awaiting_user|pending|resolved)(\\.\\d+)?$",
"description": "Ticket status: awaiting_agent, awaiting_user, pending or resolved, optionally with a custom sub-status id suffix (e.g. pending.5 — see deskpro_list_ticket_statuses). The hidden (deleted/spam) status is not settable here."
},
"urgency": {
"description": "Urgency 1-10.",
"type": "integer",
"minimum": 1,
"maximum": 10
},
"labels": {
"description": "Labels to set.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"subject",
"message"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴deskpro_update_ticket(ticket_id, subject, status, agent_id, agent_team, ...)
Change a ticket's subject, status, assignment, department, organization, urgency, hold state or labels. Only the fields you pass are sent. Reversible by updating again. Cannot set the hidden (deleted/spam) status. Deskpro: PUT /api/v2/tickets/{id}.
Input Schema
{
"type": "object",
"properties": {
"ticket_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The ticket's numeric id."
},
"subject": {
"description": "New subject.",
"type": "string",
"minLength": 1
},
"status": {
"type": "string",
"pattern": "^(awaiting_agent|awaiting_user|pending|resolved)(\\.\\d+)?$",
"description": "Ticket status: awaiting_agent, awaiting_user, pending or resolved, optionally with a custom sub-status id suffix (e.g. pending.5 — see deskpro_list_ticket_statuses). The hidden (deleted/spam) status is not settable here."
},
"agent_id": {
"description": "Assign to this agent id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"agent_team": {
"description": "Assign to this agent team id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"department": {
"description": "Move to this department id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"organization": {
"description": "Set the organization id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"urgency": {
"description": "Urgency 1-10.",
"type": "integer",
"minimum": 1,
"maximum": 10
},
"is_hold": {
"description": "Put the ticket on hold (true) or take it off hold (false).",
"type": "boolean"
},
"labels": {
"description": "The ticket's labels.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"ticket_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴deskpro_add_ticket_message(ticket_id, message, format, is_note)
Add a message to a ticket as the key's agent. With is_note=true it is an internal agent note (not shown to the requester); with is_note=false it is a REPLY that the helpdesk emails to the requester — that cannot be unsent. Deskpro: POST /api/v2/tickets/{id}/messages.
Input Schema
{
"type": "object",
"properties": {
"ticket_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The ticket's numeric id."
},
"message": {
"type": "string",
"minLength": 1,
"description": "The message body."
},
"format": {
"description": "Format of the body. Default text.",
"type": "string",
"enum": [
"html",
"text"
]
},
"is_note": {
"type": "boolean",
"description": "true = internal agent note; false = public reply to the requester."
}
},
"required": [
"ticket_id",
"message",
"is_note"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴deskpro_create_organization(name, summary, email_domains, labels)
Create a customer organization. Email domains auto-associate people with matching addresses. Deskpro: POST /api/v2/organizations.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "The organization's name."
},
"summary": {
"description": "A short description.",
"type": "string"
},
"email_domains": {
"description": "Email domains belonging to the organization, e.g. example.com.",
"type": "array",
"items": {
"type": "string"
}
},
"labels": {
"description": "Labels to set.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence