Deskpro MCP by usefulapi

Search tickets, people, organizations and KB articles in Deskpro, and create tickets and replies.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
93%
Naming quality
79%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

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

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,697Tokens (tool definitions)
~2.0 KBTypical response size
Significant attention impact (3.67% 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": {
    "deskpro": {
      "url": "https://deskpro.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://deskpro.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (20)

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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded20 tools
verifiedversion not recorded20 tools