> For the complete documentation index, see [llms.txt](https://docs.wrangle.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.wrangle.io/integrations/mcp.md).

# Wrangle MCP Server

Connect Claude, ChatGPT, and other AI tools to Wrangle to search, create, and update tickets and pull reports in natural language.

The Wrangle MCP Server lets AI tools like Claude and ChatGPT read, search, create, and update your tickets on your behalf. Use it to automate reporting, troubleshoot issues, and improve your workflows.

MCP ([Model Context Protocol](https://modelcontextprotocol.io)) is an open standard for connecting AI assistants to the apps you already use. Once you connect Wrangle, you can ask questions like *"How many critical IT tickets are still open?"* or *"Who were our top agents last month?"*, or ask it to *"File a ticket in the IT inbox: my laptop won't charge"*, and your AI tool will do it in Wrangle.

* [Setup](#setup)
  * [Quickstart: Claude](#quickstart-claude)
  * [Quickstart: ChatGPT](#quickstart-chatgpt)
  * [Quickstart: Slackbot](#quickstart-slackbot)
  * [Other MCP clients](#other-mcp-clients)
* [What you can do](#what-you-can-do)
* [Access controls](#access-controls)
* [Troubleshooting](#troubleshooting)
* [FAQ](#faq)

{% hint style="info" %}
The Wrangle MCP Server is part of the **Scale plan**. Workspaces on a trial have access for the duration of the trial. Contact us at <sales@wrangle.io>, or reach out over live chat [here](https://slack.wrangle.io/support), to add it to your account.
{% endhint %}

## Setup

Every MCP client connects to the same server URL:

```
https://slack.wrangle.io/mcp
```

You can also copy this URL from **API & Integrations > MCP** in the Wrangle web app.

<figure><img src="https://3500333410-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M8Mly5TzbK30rAk6_PN%2Fuploads%2FS9OJ4UwYMxiNUAazc0Nt%2Fimage-1793122756922.png?alt=media&amp;token=2f902a0c-ac9a-4b69-bccd-d75724d03dec" alt="Connecting to the Wrangle MCP Server"><figcaption></figcaption></figure>

Connecting always follows the same two steps:

1. **Add the Wrangle MCP Server.** In your MCP client, add a custom connector (sometimes called a remote MCP server) using the URL above.
2. **Authorize Wrangle.** Your client opens Wrangle in your browser. Review the access it's asking for, then click **Approve**.

<figure><img src="https://3500333410-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M8Mly5TzbK30rAk6_PN%2Fuploads%2FiZvbdkkF0Y8ag73YsSNN%2Fmcp-consent-screen.png?alt=media&amp;token=cab1683d-9e35-4710-be6a-e3863728f14b" alt="Wrangle MCP Oauth consent screen" width="375"><figcaption></figcaption></figure>

You don't need an API key. Wrangle MCP uses a secure sign-in (OAuth) so each connection belongs to you and only sees what you can see in Wrangle.

### Quickstart: Claude

These steps work in Claude on the web, Claude Desktop, and the Claude mobile apps. Connectors you add on the web sync to your other Claude apps.

1. In Claude, open **Settings > Connectors**.
2. Click **Add custom connector**.
3. Enter a name, such as `Wrangle`, and paste the server URL: `https://slack.wrangle.io/mcp`
4. Click **Add**, then click **Connect** next to the new Wrangle connector.
5. A browser window opens to Wrangle. Sign in if you're prompted, review the access, and click **Approve**.
6. You'll return to Claude. Start a new chat and ask something like *"Using Wrangle, show me my open tickets."*

{% hint style="info" %}
On Claude Team and Enterprise plans, an owner may need to add the Wrangle connector for your organization first (under **Organization settings > Connectors**). After that, each person clicks **Connect** to sign in with their own Wrangle account.
{% endhint %}

**Using Claude Code?** Run:

```bash
claude mcp add --transport http wrangle https://slack.wrangle.io/mcp
```

Then run `/mcp` inside Claude Code and choose **wrangle** to sign in. See Anthropic's [Claude Code MCP docs](https://code.claude.com/docs/en/mcp) for more options.

### Quickstart: ChatGPT

Custom MCP connectors in ChatGPT are available on paid plans. On Business and Enterprise plans, a workspace admin may need to allow custom connectors first.

1. In ChatGPT, open **Plugins** (or go to [chatgpt.com/plugins](https://chatgpt.com/plugins)).
2. Click **+**, then choose **Add custom MCP server**.
3. Enter a name, such as `Wrangle`. The description is optional.
4. Under **Connection**, choose **Server URL** and paste the server URL: `https://slack.wrangle.io/mcp`
5. Set **Authentication** to **OAuth**. You can leave **Advanced OAuth settings** as they are.
6. Check **I understand and want to continue**, then click **Create as a plugin**. A browser window opens to Wrangle. Sign in if you're prompted, review the access, and click **Approve**.
7. Install the Wrangle plugin. Then start a new chat, type **@**, select **Wrangle**, and ask something like *"How many tickets were created in the IT inbox last week?"*

{% hint style="info" %}
ChatGPT occasionally renames these menus. If you can't find them, see OpenAI's [Connect and test your plugin](https://developers.openai.com/plugins/deploy/connect-chatgpt) guide.
{% endhint %}

### Quickstart: Slackbot

Add Wrangle to Slackbot as a custom MCP server. A Slack admin approves it once, then everyone in your Slack org can connect with their own Wrangle account.

**Add the Wrangle MCP Server**

1. In Slack, open **Slackbot** and go to **Apps**.
2. Add a custom MCP server. Paste the server URL, `https://slack.wrangle.io/mcp`, and click **Continue**.
3. Enter an **App name**, such as `Wrangle`.
4. Set **Authentication** to **Dynamic Client Registration**. Leave **Identity URL** and **Account identifier** blank, then click **Continue**.
5. Under **Review tools for Wrangle**, click **Connect**. A browser window opens to Wrangle. Sign in if you're prompted, review the access, and click **Approve**.
6. When you see **Your account is connected**, close that window and go back to Slack. Click **Submit** to send Wrangle to your Slack admin for approval.

**Connect your account**

Once a Slack admin approves Wrangle, everyone else in your Slack org can connect:

1. In Slack, open **Slackbot** and go to **Apps**.
2. Find **Wrangle** and click **Connect**.
3. A browser window opens to Wrangle. Sign in if you're prompted, review the access, and click **Approve**.
4. Close the window when you see **Your account is connected**, then ask Slackbot something like *"Using Wrangle, show me my open tickets."*

{% hint style="info" %}
If you see errors in Slack Desktop that *Your browser blocked the sign-in window* even after you have allowed popups from Slack, **try connecting from Slack in a web browser**.
{% endhint %}

### Other MCP clients

Wrangle works with any MCP client that supports **remote MCP servers over Streamable HTTP** with **OAuth sign-in**. Add the server URL, then follow your client's prompt to sign in and approve access.

{% tabs %}
{% tab title="Cursor" %}
Add Wrangle to `~/.cursor/mcp.json` (all projects) or `.cursor/mcp.json` (one project):

```json
{
  "mcpServers": {
    "wrangle": {
      "url": "https://slack.wrangle.io/mcp"
    }
  }
}
```

Open **Cursor Settings > MCP**. Wrangle is listed there. Click **Connect** (or **Needs login**) to sign in.
{% endtab %}

{% tab title="VS Code" %}
Add Wrangle to `.vscode/mcp.json` in your workspace, or run **MCP: Add Server** from the Command Palette and choose **HTTP**:

```json
{
  "servers": {
    "wrangle": {
      "type": "http",
      "url": "https://slack.wrangle.io/mcp"
    }
  }
}
```

Start the server from the `mcp.json` file or the **MCP: List Servers** command. VS Code then prompts you to sign in.
{% endtab %}

{% tab title="Codex" %}
Run:

```bash
codex mcp add wrangle --url https://slack.wrangle.io/mcp
```

Or add it to `~/.codex/config.toml`:

```toml
[mcp_servers.wrangle]
url = "https://slack.wrangle.io/mcp"
```

To sign in again later, run `codex mcp login wrangle`.
{% endtab %}

{% tab title="Any other client" %}
Use these settings:

| Setting        | Value                          |
| -------------- | ------------------------------ |
| Server URL     | `https://slack.wrangle.io/mcp` |
| Transport      | Streamable HTTP                |
| Authentication | OAuth                          |
| Scope          | `tickets:read tickets:write`   |
| {% endtab %}   |                                |
| {% endtabs %}  |                                |

## What you can do

Once Wrangle is connected, ask your AI tool questions in plain language. It picks the right Wrangle tools and combines them to answer you. You don't need to name the tools yourself.

### Example questions

**Find and catch up on tickets**

* "Show me my open tickets, highest priority first."
* "What's going on with ticket #1234? Summarize the conversation."
* "Find tickets about VPN access from the last two weeks."
* "Has anyone discussed the Okta outage in ticket replies?"
* "Which critical tickets in the IT inbox are unassigned?"
* "What has Jane Smith requested this quarter?"

**Create and update tickets**

* "File a ticket in the IT inbox: the 3rd floor printer is jammed."
* "Open a high-priority HR ticket for Jane Smith about her benefits enrollment."
* "Assign ticket #1234 to Alex and move it to In Progress."
* "Close ticket #482 and tag it Hardware."
* "Move ticket #1290 to the Facilities inbox."

**Reporting**

* "How many tickets did the HR inbox get last month, and how many did we close?"
* "What was our average first response time in September?"
* "Who were our top 5 agents by tickets completed last quarter?"
* "What's Sam's CSAT this year?"
* "Compare resolution times for high and normal priority tickets over the last 90 days."

**Improve your workflows**

* "Look at last month's IT tickets and suggest canned replies for the most common requests."
* "Which tags are we using most in the Facilities inbox?"
* "Find tickets where the 'Department' form field is Finance and group them by topic."

### Tools

The Wrangle MCP Server provides five read-only tools and two tools that create and update tickets.

| Tool                 | What it does                                                                                       |
| -------------------- | -------------------------------------------------------------------------------------------------- |
| `get_inboxes`        | Lists the inboxes you can view, with their descriptions, tags, and intake form fields.             |
| `search_tickets`     | Searches tickets you can see by text, status, priority, people, tags, form fields, and dates.      |
| `get_ticket`         | Returns one ticket in full, and optionally its conversation.                                       |
| `get_ticket_metrics` | Ticket reporting over a date range: volume, response, assignment, and resolution times, and CSAT.  |
| `get_agent_metrics`  | Per-agent reporting over a date range: tickets completed, response and resolution times, and CSAT. |
| `create_ticket`      | Creates a ticket as you and posts it to the inbox's Slack channel.                                 |
| `update_ticket`      | Changes a ticket you can edit: status, priority, assignee, title, tags, and more.                  |

<details>

<summary><code>get_inboxes</code>: list inboxes</summary>

Lists the Wrangle inboxes you can view, with each inbox's description, tags, and intake form fields. Your AI tool uses this to work out which inbox a request belongs in and to find inbox IDs, tag names, and form fields for the other tools.

| Parameter | Description                                                                            |
| --------- | -------------------------------------------------------------------------------------- |
| `query`   | Only return inboxes whose name or description contains this text (not case-sensitive). |
| `status`  | `ACTIVE`, `ARCHIVED`, or both. Defaults to active inboxes only.                        |

**Try asking:** "What inboxes do I have access to?" or "Which inbox should I use for a laptop request?"

</details>

<details>

<summary><code>search_tickets</code>: search tickets</summary>

Searches the tickets you're allowed to see. Returns up to 25 ticket summaries per page plus a total count, so it can also answer "how many" questions.

| Parameter                       | Description                                                                                                                                          |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `query`                         | Text to match in the ticket name, description, or ticket number. It matches exact text anywhere (not case-sensitive), so short word stems work best. |
| `searchReplies`                 | Also search the conversation on each ticket, including private notes you can read. Matching tickets include a snippet of the matching reply.         |
| `status`                        | Status labels such as `New`, `In Progress`, or `On Hold`, including your workspace's custom statuses.                                                |
| `priority`                      | `CRITICAL`, `HIGH`, `NORMAL`, and/or `LOW`.                                                                                                          |
| `assignees`, `requesters`       | People, by name, Slack display name, email, or Slack user ID.                                                                                        |
| `unassigned`                    | Include tickets with no assignee.                                                                                                                    |
| `inboxIds`                      | Only search these inboxes.                                                                                                                           |
| `tagNames`                      | Only return tickets with these tags.                                                                                                                 |
| `formFields`                    | Filter on intake form field values (for example, equals, contains, greater than, or is empty).                                                       |
| `createdAfter`, `createdBefore` | Created date range (ISO dates such as `2026-03-01`, in UTC).                                                                                         |
| `updatedAfter`, `updatedBefore` | Last-updated date range.                                                                                                                             |
| `sort`, `sortOrder`             | Sort by `createdAt` (default), `updatedAt`, `priority`, or `status`, in `asc` or `desc` (default) order.                                             |
| `page`, `pageSize`              | Page through results, 1–25 tickets per page (default 10).                                                                                            |

**Try asking:** "Find open tickets mentioning 'password reset' assigned to Alex" or "How many tickets tagged Onboarding were created this month?"

</details>

<details>

<summary><code>get_ticket</code>: read a ticket</summary>

Returns one ticket in full, including its description, form field values, tags, assignees, and status. It can also include the conversation (the latest 20 replies).

| Parameter               | Description                                                |
| ----------------------- | ---------------------------------------------------------- |
| `workspaceTicketNumber` | The ticket number you use day to day, e.g. `123` for #123. |
| `ticketId`              | The ticket ID returned by `search_tickets`.                |
| `includeReplies`        | Include the latest 20 replies on the ticket.               |

**Try asking:** "Summarize ticket #482 and tell me what the next step is."

</details>

<details>

<summary><code>get_ticket_metrics</code>: ticket reporting</summary>

Reporting metrics over a date range, using the same calculations as [Ticket Reporting](/reporting/ticket-reporting.md) in Wrangle:

* Tickets created and tickets completed
* Average first response time and time to assignment, measured on tickets **created** in the range
* Average and median resolution time and CSAT, measured on tickets **completed** in the range

| Parameter    | Description                                                                               |
| ------------ | ----------------------------------------------------------------------------------------- |
| `from`, `to` | **Required.** First and last day of the range (UTC, whole days included). Up to 366 days. |
| `inboxIds`   | Only count these inboxes. Defaults to every inbox where you can see all tickets.          |
| `priority`   | Only count tickets with these priorities.                                                 |
| `requesters` | Only count tickets opened by these people.                                                |
| `tagNames`   | Only count tickets with at least one of these tags.                                       |
| `formFields` | Only count tickets whose intake form field values match.                                  |

**Try asking:** "How did the IT inbox do in Q3 compared to Q2?" or "What's our average resolution time for critical tickets this year?"

</details>

<details>

<summary><code>get_agent_metrics</code>: agent reporting</summary>

Per-agent metrics over a date range, using the same calculations as the agent reports in Wrangle: tickets completed, average and median resolution time, average first response time, time to assignment, and CSAT.

Completed tickets, resolution time, and CSAT are credited to the ticket's assignee (the first one, if there are several). First response time is credited to whoever sent the first reply, and time to assignment to each agent when they were assigned.

| Parameter                                                      | Description                                                                                                  |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `from`, `to`                                                   | **Required.** First and last day of the range (UTC). Up to 366 days.                                         |
| `agents`                                                       | Only return these agents.                                                                                    |
| `sortBy`                                                       | Rank by `ticketsCompleted` (default), `averageResolutionTime`, `averageFirstResponseTime`, or `averageCsat`. |
| `limit`                                                        | How many agents to return, 1–50 (default 10).                                                                |
| `inboxIds`, `priority`, `requesters`, `tagNames`, `formFields` | Same filters as `get_ticket_metrics`.                                                                        |

**Try asking:** "Who are my top 5 agents by CSAT this quarter?" or "How fast does each agent respond to tickets from the Sales team?"

</details>

<details>

<summary><code>create_ticket</code>: create a ticket</summary>

Creates a ticket as you, just as if you'd filed it in Wrangle, and posts it to the inbox's Slack channel. Your AI tool first uses `get_inboxes` to pick the inbox and see its tags and intake form fields. Tickets created this way skip ticket deflection and are always created.

| Parameter         | Description                                                                                   |
| ----------------- | --------------------------------------------------------------------------------------------- |
| `inboxId`         | **Required.** The inbox to file the ticket in.                                                |
| `name`            | **Required.** A short title for the ticket.                                                   |
| `description`     | The details of the request.                                                                   |
| `priority`        | `CRITICAL`, `HIGH`, `NORMAL`, or `LOW`.                                                       |
| `requester`       | Who the ticket is for, by name, Slack display name, email, or Slack user ID. Defaults to you. |
| `followers`       | People to follow the ticket.                                                                  |
| `tags`            | Tag names. A name that doesn't match one of the inbox's tags creates a new tag.               |
| `formFieldValues` | Values for the inbox's intake form fields. Every required field must be filled in.            |

**Try asking:** "Create a ticket in IT for Sam: new hire laptop needed by Monday."

</details>

<details>

<summary><code>update_ticket</code>: update a ticket</summary>

Changes a ticket as you. You need permission to edit the ticket in Wrangle. Only the fields your AI tool sends change, and the ticket's history shows the changes were made through MCP.

| Parameter               | Description                                                                          |
| ----------------------- | ------------------------------------------------------------------------------------ |
| `workspaceTicketNumber` | The ticket number you use day to day, e.g. `123` for #123.                           |
| `ticketId`              | The ticket ID returned by `search_tickets`.                                          |
| `name`, `description`   | Replace the title or description.                                                    |
| `status`                | `NEW`, `IN_PROGRESS`, `ON_HOLD`, `RESOLVED`, or `CLOSED`.                            |
| `priority`              | `CRITICAL`, `HIGH`, `NORMAL`, or `LOW`.                                              |
| `assignee`              | Who to assign the ticket to, by name, email, or Slack user ID. Can also unassign it. |
| `tags`                  | **Replaces** the ticket's tags with exactly this list.                               |
| `followers`             | **Replaces** the ticket's followers with exactly this list.                          |
| `formFieldValues`       | Intake form field values to change. Fields left out keep their values.               |
| `inboxId`               | Moves the ticket to another inbox. A move is made on its own, without other changes. |

To add a tag or follower, your AI tool reads the ticket first and sends the full list back. CSAT can't be changed through MCP.

**Try asking:** "Mark ticket #482 resolved and add the Hardware tag."

</details>

### Tips for better answers

* **Name the inbox** when you can, for example "in the IT inbox". It narrows the search and makes reports faster.
* **Give a date range** for reports, for example "last month" or "Q3 2026".
* **Use short keywords** for text searches. Search matches exact text, so "ignor" finds "ignore", "ignored", and "ignoring".
* **Ask about conversations** directly, for example "what did people say about…" or "was X mentioned in replies". This tells your AI tool to search ticket replies too.
* **Use emails for common names.** If a name matches more than one person, your AI tool will ask which one you mean.
* **Say who a new ticket is for** if it isn't you. Otherwise you're the requester.

## Access controls

### Who can use the MCP Server

The MCP Server is available to Slack workspaces on the **Scale plan** and to workspaces on a trial. Admins can turn it off for the whole workspace at any time (see below).

### What a connection can see

Each connection belongs to the person who approved it and uses **that person's Wrangle permissions**. Your AI tool can only see tickets, inboxes, and private notes that you can see in Wrangle.

* Searches only return tickets you have access to, so counts reflect your access.
* Reports (ticket and agent metrics) only include inboxes where you can see every ticket, meaning you are an observer or above. See [Roles & Permissions](/tickets/setting-up-your-inbox/roles-and-permissions.md).

### What a connection can change

When you approve a connection, the consent page lists what it can do. A connection that can create and update tickets makes every change as you, with your Wrangle permissions: it can only create tickets in inboxes where you can, and only update tickets you can edit. Changes appear in Slack and in the ticket's history like any other change you make.

Your AI tool may ask you to confirm before it creates or changes a ticket, depending on its settings.

{% hint style="info" %}
**Connected before ticket creation and updates were available?** Those connections stay read-only. To check, look at the list of Wrangle tools in your AI tool. If `create_ticket` and `update_ticket` aren't listed, go to **API & Integrations > MCP**, click **Revoke** next to that connection, then reconnect and approve access again.\
\
If you do not see `Create tickets, and update tickets...` included in the list of capabilities when reconnecting, you may need to uninstall and re-install your connector completely (via ChatGPT, Claude, etc).
{% endhint %}

### Managing your connections

To see and manage the apps you've connected, go to **API & Integrations > MCP** in the Wrangle web app. Each connection shows the application, when it was connected, and when it was last used.

To disconnect an app, click **Revoke**. The app loses access right away. To use it again, reconnect it and approve access.

<figure><img src="https://3500333410-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M8Mly5TzbK30rAk6_PN%2Fuploads%2Ft5QVfpTbaKhg1Hudfrz8%2Fimage-1793119389828.png?alt=media&amp;token=c459e7d8-bbe7-4b7c-811a-6752a7f202c3" alt="Managing your Wrangle MCP connections"><figcaption></figcaption></figure>

### Turning MCP on or off for your workspace (admins)

[Account Admins](/account-administration/account-admins.md) can control MCP access for everyone in the workspace:

1. Go to **Admin Settings > MCP Access**.
2. Use the **Allow MCP connections** toggle. It's on by default.

This page also lists which users have connected apps, how many connections each has, and when each was last used.

{% hint style="warning" %}
Turning off **Allow MCP connections** immediately disconnects every MCP connection in your workspace and blocks new ones. If you turn it back on, each person needs to reconnect their apps.
{% endhint %}

<figure><img src="https://3500333410-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M8Mly5TzbK30rAk6_PN%2Fuploads%2FpNISJFEYVuFc0RKoedva%2Fmcp-admin-turn-off.png?alt=media&#x26;token=6c9f2b1c-744f-4b48-b72e-daed162b9b51" alt="Admin access controls for MCP access" width="375"><figcaption></figcaption></figure>

## Troubleshooting

| Message                                                                  | What it means                                                                                                                            |
| ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| *This feature is not enabled for your account.*                          | Your workspace isn't on the Scale plan. Contact <sales@wrangle.io> to upgrade.                                                           |
| *Your account admins have turned off MCP access for this workspace.*     | An admin has turned off **Allow MCP connections**. Ask an [Account Admin](/account-administration/account-admins.md) to turn it back on. |
| *No one in this workspace matches…* / *More than one person matches…*    | Your AI tool couldn't identify a person. Try their full name or email.                                                                   |
| *No ticket matches that id or number, or it is not one you can view.*    | The ticket doesn't exist, or you can't see it in Wrangle.                                                                                |
| *You do not have permission to update this ticket.*                      | You can see the ticket, but your role in its inbox doesn't let you edit it.                                                              |
| *Moving a ticket to another inbox can't be combined with other changes.* | Your AI tool tried to move and change a ticket at once. It will usually retry as two steps.                                              |

## FAQ

**Can my AI tool change tickets?**

* Yes; only the tickets you are authorized to update. It can create tickets, and change a ticket's status, priority, assignee, title, description, tags, followers, form fields, and inbox. It cannot delete tickets.

**Can my AI tool see tickets I can't see?**

* No. Every connection uses the permissions of the person who connected it. Private tickets and inboxes you don't have access to are never returned.

**Do I need an API key?**

* No. The MCP Server uses OAuth sign-in instead. The [Wrangle API](/integrations/wrangle-api.md) token is separate and isn't used for MCP.

**Can I connect more than one app?**

* Yes. Each app you connect appears separately under **API & Integrations > MCP**, and you can revoke each one on its own.

**How do I disconnect an app?**

* Go to **API & Integrations > MCP** and click **Revoke** next to the app. You can also remove the connector in the app itself. Revoking in Wrangle makes sure the app loses access right away.
