---
title: "Connect Desk365 to Claude: Sync Support Tickets, Companies & Articles"
slug: connect-desk365-to-claude-sync-support-tickets-companies-articles
date: 2026-06-08
author: Uday Gajavalli
categories: ["AI & Agents"]
excerpt: "Learn how to connect Desk365 to Claude using Truto's MCP server. Sync tickets, contacts, and knowledge base articles directly into Claude's context window."
tldr: "A step-by-step engineering guide to exposing the Desk365 API to Claude via Model Context Protocol (MCP). We cover authentication, strict pagination quirks, ticket workflows, and tool calling."
canonical: https://truto.one/blog/connect-desk365-to-claude-sync-support-tickets-companies-articles/
---

# Connect Desk365 to Claude: Sync Support Tickets, Companies & Articles


Support operations run on tickets, but modern engineering teams want to triage issues, pull company history, and draft knowledge base articles directly from their AI chat interfaces. Building the API plumbing to do this reliably requires dealing with rigid pagination schemes and unusual attachment payloads.

This guide shows you how to connect Desk365 to Claude using Truto's dynamic [MCP (Model Context Protocol)](https://truto.one/what-is-mcp-model-context-protocol-the-2026-guide-for-saas-pms) server generation. If your team uses ChatGPT instead, check out our guide on [connecting Desk365 to ChatGPT](https://truto.one/connect-desk365-to-chatgpt-manage-tickets-contacts-knowledge/), or if you are building autonomous workflows, see [connecting Desk365 to AI Agents](https://truto.one/connect-desk365-to-ai-agents-automate-tickets-content-time-logs/).

## The Engineering Reality of the Desk365 API

When exposing Desk365 to Claude via MCP, we need to account for a few API-specific quirks that go beyond standard REST mechanics. Truto normalizes the transport layer, but the LLM still needs to format inputs correctly for the integration's native schema.

1. **Multipart Bodies + Query String JSON for Attachments:** Desk365 handles attachments in a highly specific way. You cannot send a simple JSON payload to create a ticket with an attachment. The API expects the file in a multipart form body, and the actual ticket metadata must be sent as a stringified JSON object inside the query parameters (e.g., passing the stringified `ticket_object` or `reply_object` in the query). Truto passes these schemas directly to the LLM.
2. **Rigid Pagination Constraints:** Most APIs accept an arbitrary `limit` parameter (like 1 to 100). Desk365 is unforgiving. For endpoints like `list_all_desk_365_tickets` or `list_all_desk_365_time_entries`, the count parameters (`ticket_count`, `time_entries_count`) strict-match against exactly 30, 50, or 100. If an LLM attempts to request 10 records, the API will fail. For strategies on managing this, see our guide on [feeding paginated API results to AI agents](https://truto.one/how-to-feed-paginated-saas-api-results-to-ai-agents-without-blowing-up-context).
3. **Gatekept Contract Endpoints:** The Desk365 API documentation notes that Contract APIs are restricted access. Endpoints like `list_all_desk_365_contracts` will fail unless the specific Desk365 tenant has been granted access by contacting `help@desk365.io`.

### A Critical Note on Rate Limits

Truto does not retry, throttle, or apply backoff on rate limit errors. When the upstream Desk365 API returns an HTTP 429, Truto passes that error directly to the caller. Truto normalizes upstream rate limit info into standardized headers (`ratelimit-limit`, `ratelimit-remaining`, `ratelimit-reset`) per the IETF spec. Your MCP client or agent framework is entirely responsible for detecting these 429s and executing retry/backoff logic.

## Step 1: Creating the Desk365 MCP Server

Truto generates MCP tools dynamically based on the documented endpoints of the integrated account. You can create an MCP server either visually or programmatically.

### Option A: Via the Truto UI

1. Navigate to your connected Desk365 instance in the **Integrated Accounts** view.
2. Click the **MCP Servers** tab.
3. Click **Create MCP Server**.
4. Define a name (e.g., "Desk365 Support Triage").
5. Select allowed methods (e.g., `read` for a read-only instance, or `write` if the agent should create tickets) and apply any necessary tags.
6. Click Save and copy the generated MCP server URL.

### Option B: Via the API

For platform engineers building scalable integrations, you can generate MCP servers programmatically. This endpoint creates a secure token backed by distributed edge storage.

```bash
curl -X POST https://api.truto.one/integrated-account/YOUR_DESK365_ACCOUNT_ID/mcp \
  -H "Authorization: Bearer YOUR_TRUTO_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Claude - Desk365 Integration",
    "config": {
      "methods": ["read", "write"],
      "tags": ["support", "knowledge_base"]
    },
    "expires_at": null
  }'
```

The response returns an MCP URL:

```json
{
  "id": "mcp_abc123",
  "url": "https://api.truto.one/mcp/xyz789..."
}
```

## Step 2: Connecting to Claude

Once you have your Truto MCP URL, you can plug it directly into Claude.

### Using Claude Web or Desktop UI

This is the fastest method for end users.

1. In Claude, navigate to **Settings -> Connectors -> Add custom connector**.
2. Paste the Truto MCP Server URL.
3. Click **Add**.
Claude will immediately call the `initialize` and `tools/list` JSON-RPC methods, populating your chat context with Desk365 capabilities.

### Using the Claude Desktop Config File

If you prefer manual configuration (for instance, to manage configurations in version control), update your `claude_desktop_config.json` file. Because Truto provides a remote HTTP endpoint, you use an SSE client wrapper (or point it directly if your setup supports remote URLs natively).

```json
{
  "mcpServers": {
    "desk365_truto": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/client-sse",
        "https://api.truto.one/mcp/xyz789..."
      ]
    }
  }
}
```

```mermaid
sequenceDiagram
    participant C as Claude
    participant T as Truto MCP Router
    participant D as Desk365 API
    
    C->>T: POST /mcp/:token (tools/call: get_single_desk_365_ticket_by_id)
    T->>T: Validate Token & Flatten Query/Body Args
    T->>D: GET /api/v2/tickets/1042
    D-->>T: 200 OK { ticket data }
    T-->>C: JSON-RPC Result
```

## Desk365 Tool Inventory

Truto automatically maps the Desk365 REST API into structured JSON-RPC tools for LLMs. Here is a breakdown of the available capabilities. For full schema details, visit the [Desk365 integration page](https://truto.one/integrations/detail/desk365).

### Hero Tools

These are the high-impact tools that drive the majority of Desk365 AI workflows.

#### `list_all_desk_365_tickets`
Retrieves a paginated list of support tickets. Supports documented filters and `include_*` query parameters. Remember that `ticket_count` must be exactly 30, 50, or 100.
> "List all open Desk365 tickets assigned to the billing department. Retrieve 30 records and include customer details."

#### `get_single_desk_365_ticket_by_id`
Fetches all metadata for a specific ticket. The resource ID is the `ticket_number`.
> "Pull the full details for Desk365 ticket #8092, including its current status and priority level."

#### `update_a_desk_365_ticket_by_id`
Modifies an existing ticket. Excellent for having Claude automatically close tickets, update priorities, or reassign them based on context.
> "Update Desk365 ticket #8092 - set the priority to high and change the status to 'Waiting on Customer'."

#### `list_all_desk_365_ticket_conversations`
Retrieves the entire thread history of a ticket. Required for context-gathering before drafting replies.
> "Read the entire conversation history for ticket #4112 so I can understand what the customer has already tried."

#### `create_a_desk_365_ticket_reply`
Posts a response back to the customer on a specific ticket. The `ticket_number` is required as a query parameter.
> "Draft a polite reply to ticket #4112 explaining that the deployment issue has been patched, and send it."

#### `list_all_desk_365_kb_articles`
Queries the live knowledge base. Critical for agents trying to find existing documentation before escalating an issue.
> "Search the Desk365 knowledge base articles to see if we have an existing guide on configuring SAML SSO."

### Full Inventory of Additional Tools

Here is the complete inventory of additional Desk365 tools available. 

*   `list_all_desk_365_ping`: Check Desk365 API server status.
*   `create_a_desk_365_ticket`: Create a ticket.
*   `desk_365_tickets_create_with_attachment`: Create a ticket with attachment. Send file in multipart body, stringified `ticket_object` in query params.
*   `desk_365_ticket_replies_create_with_attachment`: Add a reply with attachment. Send file in multipart body, stringified `reply_object` and `ticket_number` in query params.
*   `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. Send file in multipart body, stringified `note_object` and `ticket_number` in query params.
*   `list_all_desk_365_contacts`: List contacts using documented query parameters.
*   `get_single_desk_365_contact_by_id`: Get contact details. Pass the primary_email as the resource ID.
*   `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 by primary_email.
*   `list_all_desk_365_companies`: List companies using documented query parameters.
*   `get_single_desk_365_company_by_id`: Get company details by company name.
*   `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 by company name.
*   `list_all_desk_365_time_entries`: List time entries. `time_entries_count` accepts 30, 50, or 100.
*   `get_single_desk_365_time_entry_by_id`: Get time entry details by ID.
*   `create_a_desk_365_time_entry`: Add a time entry to a ticket.
*   `list_all_desk_365_surveys`: List all surveys.
*   `get_single_desk_365_survey_by_id`: Get survey details by survey_name.
*   `list_all_desk_365_survey_ratings`: List all survey ratings.
*   `list_all_desk_365_contracts`: List contracts. (Requires special access).
*   `get_single_desk_365_contract_by_id`: Get contract details by reference_number.
*   `create_a_desk_365_contract`: Create a contract.
*   `update_a_desk_365_contract_by_id`: Update a contract by reference_number.
*   `get_single_desk_365_kb_category_by_id`: Get KB category details by category_name.
*   `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 by article_name.
*   `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

Exposing these tools to Claude enables specific operational workflows. Here is how a user interacts with the configured agent.

### Workflow 1: Support Escalation & Triage

When a tier 1 agent needs a summary before kicking a ticket to tier 2.

> "Check Desk365 ticket #904. Read its conversation history, and add an internal note summarizing the debugging steps we've already taken, tagging the tier 2 team."

**Execution Steps:**
1. `get_single_desk_365_ticket_by_id` -> Claude fetches the ticket details to verify state.
2. `list_all_desk_365_ticket_conversations` -> Claude pulls the entire thread history to identify the debugging steps.
3. `create_a_desk_365_ticket_note` -> Claude generates a concise summary and posts it as an internal note to the ticket, leaving the thread clean for the customer.

### Workflow 2: Automated KB Generation

Closing the loop between support volume and documentation gaps.

> "Find tickets from this week regarding 'database timeout' issues. If you identify a common resolution, draft a new Knowledge Base article titled 'Fixing DB Timeouts' and publish it to the platform."

**Execution Steps:**
1. `list_all_desk_365_tickets` -> Claude queries recent tickets with the relevant search filter, requesting 30 items.
2. `list_all_desk_365_ticket_conversations` -> Claude iterates through the relevant tickets to find the confirmed resolution from the support engineers.
3. `create_a_desk_365_kb_article` -> Claude synthesizes the steps and pushes a formatted HTML or Markdown payload to create a new live KB article.

## Security and Access Control

Exposing SaaS APIs to AI models requires strict boundary control. Following [MCP server security](https://truto.one/understanding-mcp-server-security) best practices, Truto provides database-level governance over what the MCP server can execute.

*   **Method Filtering (`config.methods`):** Restrict an MCP server to read-only capabilities by passing `["read"]` during creation. This ensures Claude can only call `get` or `list` operations, physically preventing it from creating or updating Desk365 tickets.
*   **Tag Filtering (`config.tags`):** Group tools by domain. You can create a server that only exposes `["knowledge_base"]` tagged tools, hiding customer PII and ticket threads entirely.
*   **Secondary Authentication (`require_api_token_auth`):** Enable this flag to require clients to pass a valid Truto API token in their headers, rather than relying solely on the security of the unguessable URL token. 
*   **Automatic Expiration (`expires_at`):** Truto utilizes stateful alarms to automatically purge the database record and distributed edge storage keys for short-lived MCP servers, preventing stale credentials from lingering in vendor chat history.

:::cta{buttonText="Talk to us" buttonUrl="https://cal.com/truto/partner-with-truto"} 
Ready to bring Desk365 tools to your AI framework? Schedule a technical deep-dive with the Truto engineering team.
:::
