---
title: "Connect Desk365 to ChatGPT: Manage Tickets, Contacts & Knowledge"
slug: connect-desk365-to-chatgpt-manage-tickets-contacts-knowledge
date: 2026-06-08
author: Uday Gajavalli
categories: ["AI & Agents"]
excerpt: "Connect Desk365 to ChatGPT using Truto's MCP server. Learn how to configure secure access to tickets, contacts, and knowledge base articles for AI agents."
tldr: "A senior-engineer guide to connecting Desk365 to ChatGPT. We cover Desk365 API quirks, configuring MCP servers via UI and API, handling rate limits, and real-world tool calling workflows."
canonical: https://truto.one/blog/connect-desk365-to-chatgpt-manage-tickets-contacts-knowledge/
---

# Connect Desk365 to ChatGPT: Manage Tickets, Contacts & Knowledge


If your team uses Claude, check out our guide on [connecting Desk365 to Claude](https://truto.one/connect-desk365-to-claude-sync-support-tickets-companies-articles/). If you are building headless workflows, read our tutorial on [connecting Desk365 to AI Agents](https://truto.one/connect-desk365-to-ai-agents-automate-tickets-content-time-logs/). 

In this guide, we will focus on connecting Desk365 to ChatGPT. By exposing Desk365's underlying APIs as an [MCP (Model Context Protocol)](https://truto.one/what-is-mcp-model-context-protocol-the-2026-guide-for-saas-pms/) server, you can give ChatGPT direct, secure access to your helpdesk. Instead of manually copying and pasting context between your CRM and conversational AI, ChatGPT can retrieve tickets, analyze conversation histories, generate replies, and publish knowledge base articles on demand.

Here is how to architect the integration using Truto's SuperAI MCP server, including the quirks of the Desk365 API, security controls, and real-world workflows.

## Engineering Reality: The Desk365 API

When exposing an API to a Large Language Model, the LLM is only as effective as the underlying API architecture. The Desk365 API has several distinct patterns that engineers must account for when [building tool-calling workflows](https://truto.one/the-hands-on-guide-to-building-mcp-servers-for-ai-agents-2026/):

1. **Unconventional Resource IDs**: Unlike many REST APIs that default to UUIDs, Desk365 relies on highly specific, human-readable identifiers for different resources. To get a ticket, you pass the `ticket_number`. To get a contact, you pass their `primary_email`. To retrieve a company or knowledge base category, you pass the string name directly in the path. Your LLM must be instructed to extract these exact fields from previous responses rather than looking for a generic `id`.
2. **Multipart Attachment Quirks**: Creating records with attachments in Desk365 uses a highly specific payload structure. You must send the file inside a `multipart/form-data` body, while simultaneously stringifying the JSON object representing the ticket (or reply/note) and passing it as a query parameter (e.g., `ticket_object`). Truto handles the schema mapping, but the tool definitions explicitly instruct the LLM on how to map these arguments.
3. **Restricted Endpoints**: Certain APIs, such as the `contracts` endpoints, are documented as special access only. To use these tools in your MCP server, you must first contact Desk365 support to enable them for your tenant.

## Creating the Desk365 MCP Server

Truto automatically translates your authenticated Desk365 integration into a JSON-RPC 2.0 MCP server. You can provision this server via the Truto UI or programmatically via the API.

### Method 1: Via the Truto UI

1. Navigate to the Integrated Accounts section in your Truto dashboard.
2. Select your connected Desk365 account.
3. Click the **MCP Servers** tab and click **Create MCP Server**.
4. Configure your allowed methods (e.g., limit to read-only) and set an optional expiration date.
5. Save and copy the generated MCP URL.

### Method 2: Via the API

You can dynamically generate MCP servers for your internal teams or end-users by making an authenticated `POST` request to the Truto API.

```bash
curl -X POST https://api.truto.one/integrated-account/{integrated_account_id}/mcp \
  -H "Authorization: Bearer YOUR_TRUTO_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ChatGPT Desk365 Assistant",
    "config": {
      "methods": ["read", "write"]
    }
  }'
```

The response will return a secure, hashed URL (`https://api.truto.one/mcp/<token>`) that acts as the entry point for ChatGPT.

## Connecting to ChatGPT

Once you have your MCP URL, you need to register it with your ChatGPT environment. You can do this through the ChatGPT UI or via a standard MCP configuration file if you are running a local OpenAI-compatible agent wrapper.

### Method 1: The ChatGPT UI Flow

1. Open ChatGPT and navigate to **Settings -> Apps -> Advanced settings**.
2. Ensure **Developer mode** is toggled on (this unlocks MCP support for Pro, Plus, Enterprise, and Education tiers).
3. Under **MCP servers / Custom connectors**, click to add a new server.
4. **Name**: "Desk365 (Truto)"
5. **Server URL**: Paste the URL generated in the previous step.
6. Save the configuration. ChatGPT will immediately perform a handshake and pull the available Desk365 tools.

### Method 2: Manual Config File Approach

If you are using a local agent or an enterprise deployment wrapper that interfaces with OpenAI models via MCP, you can register the server in your standard MCP configuration JSON file:

```json
{
  "mcpServers": {
    "desk365-truto": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-http",
        "--url",
        "https://api.truto.one/mcp/<your_token>"
      ]
    }
  }
}
```

## Security and Access Control

Exposing your [helpdesk](https://truto.one/what-are-helpdesk-integrations-2026-architecture-saas-guide/) to an LLM requires strict governance. Truto MCP servers support multiple layers of access control:

* **Method Filtering**: Pass `"methods": ["read"]` during server creation to prevent ChatGPT from modifying tickets or deleting KB articles. 
* **Tag Filtering**: Restrict the LLM's context by specifying tags. For example, `"tags": ["knowledge_base"]` ensures the server only exposes documentation endpoints and hides sensitive customer contact APIs.
* **Time-to-Live (TTL)**: Use the `expires_at` field to generate ephemeral MCP servers. This is ideal for granting a contractor temporary access to generate reports for a specific week.
* **Secondary Authentication**: Enable `require_api_token_auth: true` to enforce that the caller must pass a valid Truto API token in the `Authorization` header. This prevents unauthorized access even if the MCP URL is leaked.

## Desk365 MCP Tool Inventory

Truto automatically generates precise schemas for Desk365's endpoints. Here is the two-tier breakdown of the available tools.

### Hero Tools

These are the core tools most commonly used for agentic helpdesk operations.

#### `list_all_desk_365_tickets`
Retrieves a paginated list of tickets. It accepts documented query parameters like `ticket_count` (30, 50, or 100) and various include filters.
> "Pull the 30 most recent unresolved tickets and summarize the main issues."

#### `get_single_desk_365_ticket_by_id`
Fetches full details for a specific ticket. The resource ID must be the exact `ticket_number`.
> "Get the full details and current status for ticket #4052."

#### `list_all_desk_365_ticket_conversations`
Retrieves the complete reply and note history for a specific ticket. Requires the `ticket_number` as a query parameter.
> "Read the entire conversation history for ticket #4052 to understand what the customer tried so far."

#### `create_a_desk_365_ticket_reply`
Posts a response back to the customer on a given ticket. Requires `ticket_number` in the query.
> "Draft a polite reply to ticket #4052 explaining that the engineering team has deployed a hotfix, and ask them to verify."

#### `get_single_desk_365_contact_by_id`
Retrieves contact information. The identifier here is the contact's `primary_email`, not a numeric ID.
> "Look up the contact details for jane.doe@example.com to see her associated company."

#### `list_all_desk_365_kb_articles`
Fetches titles and metadata for live knowledge base articles.
> "List all live KB articles to check if we already have documentation on SSO configuration."

#### `desk_365_tickets_create_with_attachment`
Creates a ticket with a file. Exposes the complex multipart structure where the file goes in the body and the `ticket_object` is stringified in the query.
> "Create a new internal IT ticket for a broken monitor and attach this photo of the screen."

### Full Inventory

Here is the complete inventory of additional Desk365 tools available. For full schema details, visit the [Desk365 integration page](https://truto.one/integrations/detail/desk365).

* `list_all_desk_365_ping`: Check Desk365 API server status.
* `create_a_desk_365_ticket`: Create a ticket.
* `update_a_desk_365_ticket_by_id`: Update a ticket.
* `desk_365_ticket_replies_create_with_attachment`: Add a reply with attachment.
* `create_a_desk_365_ticket_note`: Add an internal note to a ticket.
* `desk_365_ticket_notes_create_with_attachment`: Add a note with attachment.
* `list_all_desk_365_contacts`: List contacts.
* `create_a_desk_365_contact`: Create a contact.
* `desk_365_contacts_create_with_attachment`: Create a contact with attachment.
* `update_a_desk_365_contact_by_id`: Update a contact.
* `list_all_desk_365_companies`: List companies.
* `get_single_desk_365_company_by_id`: Get company details.
* `create_a_desk_365_company`: Create a company.
* `desk_365_companies_create_with_attachment`: Create a company with attachment.
* `update_a_desk_365_company_by_id`: Update a company.
* `list_all_desk_365_time_entries`: List time entries.
* `get_single_desk_365_time_entry_by_id`: Get time entry details.
* `create_a_desk_365_time_entry`: Add a time entry.
* `list_all_desk_365_surveys`: List all surveys.
* `get_single_desk_365_survey_by_id`: Get survey details.
* `list_all_desk_365_survey_ratings`: List all survey ratings.
* `list_all_desk_365_contracts`: List contracts.
* `get_single_desk_365_contract_by_id`: Get contract details.
* `create_a_desk_365_contract`: Create a contract.
* `update_a_desk_365_contract_by_id`: Update a contract.
* `get_single_desk_365_kb_category_by_id`: Get KB category details.
* `create_a_desk_365_kb_category`: Create a KB category.
* `update_a_desk_365_kb_category_by_id`: Update a KB category.
* `delete_a_desk_365_kb_category_by_id`: Delete a KB category.
* `get_single_desk_365_kb_folder_by_id`: Get KB folder details.
* `create_a_desk_365_kb_folder`: Create a KB folder.
* `update_a_desk_365_kb_folder_by_id`: Update a KB folder.
* `delete_a_desk_365_kb_folder_by_id`: Delete a KB folder.
* `get_single_desk_365_kb_article_by_id`: Get KB article details.
* `create_a_desk_365_kb_article`: Create a KB article.
* `update_a_desk_365_kb_article_by_id`: Update a KB article.
* `delete_a_desk_365_kb_article_by_id`: Delete a KB article.

## Workflows in Action

When given the proper toolsets, ChatGPT can orchestrate complex, multi-step helpdesk operations. Here are two concrete examples of how an AI engineer might utilize this setup.

### 1. VIP Customer Ticket Triage

> "A VIP customer just escalated ticket #8992. Review the ticket details, read the conversation history to see what support has already suggested, and draft a final reply apologizing for the delay with an updated status."

**Agent Execution Steps:**
1. Calls `get_single_desk_365_ticket_by_id` with `ticket_number: "8992"` to check priority, status, and the customer's email.
2. Calls `get_single_desk_365_contact_by_id` passing the customer's email to verify their VIP tier in the CRM metadata.
3. Calls `list_all_desk_365_ticket_conversations` with `ticket_number: "8992"` to read the back-and-forth thread.
4. Calls `create_a_desk_365_ticket_reply` with `ticket_number: "8992"` to submit the customized, empathetic response.

**Outcome**: The LLM successfully analyzes a stale ticket without hallucinating past context and interacts directly with the customer - saving a human agent 15 minutes of reading.

### 2. Automated Knowledge Base Updates

> "We just resolved a major outage affecting our VPN. Check if we have an existing KB article for 'VPN Connectivity Issues'. If not, create a new article in the 'Network Troubleshooting' category explaining the resolution."

**Agent Execution Steps:**
1. Calls `list_all_desk_365_kb_articles` to scan live titles for "VPN Connectivity".
2. If missing, it calls `get_single_desk_365_kb_category_by_id` with `category_name: "Network Troubleshooting"" to fetch the necessary category ID.
3. Calls `create_a_desk_365_kb_article` utilizing the retrieved category ID to publish the post-mortem documentation.

**Outcome**: Your internal documentation stays automatically synchronized with incident response efforts.

## Handling Rate Limits

A critical factor in AI API execution is handling rate limits. Because LLMs can fire off multiple tool calls rapidly, you will inevitably encounter 429 Too Many Requests errors.

Truto explicitly does not retry, throttle, or apply automatic backoff on your behalf when encountering upstream rate limits. If the Desk365 API returns an HTTP 429, Truto passes that exact error down to the MCP caller. 

However, Truto normalizes the upstream rate limit information into standardized headers per the IETF specification. Every response includes:
* `ratelimit-limit`
* `ratelimit-remaining`
* `ratelimit-reset`

The caller (your application or the MCP client framework) is strictly responsible for inspecting these headers, pausing execution, and applying exponential backoff before the LLM re-attempts the tool call. For more details, consult the [Truto Rate Limits documentation](https://truto.one/docs/api-reference/overview/rate-limits).

> Stop handwriting Desk365 API wrappers. Give your AI agents direct, structured access to helpdesk data using Truto's dynamic MCP servers.
>
> [Talk to us](https://cal.com/truto/partner-with-truto)
