# Unthread MCP connector

The Unthread connector brings your Unthread conversations, customers, accounts and approval requests to Claude, ChatGPT, Cursor and other AI clients, so each person can read, update and create them inside their own Unthread access, with every action logged.

Source: https://elaichi.ai/connectors/unthread/

## Facts

| | |
| --- | --- |
| Application | Unthread |
| Category | Helpdesk |
| AI tools | 66 |
| Authentication | Connects with an API key |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 66 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Unthread is connected

- Summarize open Unthread conversations for the Acme account this week.
- Which Unthread approval requests are still waiting on someone?
- List Unthread accounts with more than five conversations today.

## Connect Unthread in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Unthread.
2. Optionally set Share with, then press Connect.
3. Paste an Unthread API key. One person generates a token in Unthread and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Unthread tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Unthread to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Unthread to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Unthread to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Unthread to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Unthread tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Unthread through Elaichi

### Catch a conversation up after a customer call

Support. Pull up the open Unthread conversation for a customer, add what was agreed on the call, and assign a collaborator to pick up the follow-up.

### Loop the right people into a ticket

Support. Add a product manager as a follower on a Unthread conversation so they see every reply, and remove them once the question is settled.

### Keep customer records current

Customer success. Create a customer when a new company starts writing in, update the record when their contact or plan changes, and list accounts before a renewal check-in.

### Review what is open across the queue

Support leadership. Ask for the Unthread conversations still open this week, grouped by customer, and spot the accounts that have been waiting longest.

### Raise an approval request from a conversation

Operations. When a refund or exception comes up in a Unthread conversation, create an approval request so the decision is recorded and routed rather than lost in a thread.

### Hand a bug off without leaving Unthread

Engineering. Create an external task from a Unthread conversation so the engineering team gets the report in their tracker while the customer thread stays linked to it.

## Frequently asked questions

### How do I connect Unthread to Claude?

Connect Unthread in Elaichi first, then open Claude, go to Customize, then Connectors, then Add, and paste in https://api.elaichi.ai/mcp. The Unthread step is pasting an API key from your Unthread settings into Elaichi, and that is the whole sign-in. There is no OAuth application to register and no client ID or secret to generate.

### Does Unthread work with ChatGPT and Cursor as well as Claude?

Yes. Once Unthread is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client and the Elaichi Agent. You connect Unthread once and every client uses it.

### What can an AI agent actually do with my Unthread data?

It can read and update Unthread conversations, add or remove followers, assign a collaborator, create an external task from a thread, and download a file attached to a conversation. It can also create and update customers and accounts, raise approval requests, and set up or activate automations. Because Unthread has many actions available, short concrete asks such as list open conversations for Acme work better than long sentences.

### Does connecting Unthread give the AI everything in my helpdesk?

No. Every call runs as the person who signed in, so the AI sees only the Unthread conversations, customers and accounts that person's own Unthread key already allows. Elaichi can narrow that further with restrictions per team, but it can never widen what Unthread itself grants.

### Can my team share one Unthread connection?

Yes. One person connects Unthread in Elaichi and shares it with a team, and nobody else ever handles the API key. Each teammate still signs in to Elaichi as themselves, so the audit log names the actual person behind every Unthread action, not the account owner.

### Can I stop an agent from deleting or changing things in Unthread?

Yes. Restrictions in Elaichi work per action, so you can allow reading Unthread conversations while blocking updates to customers or the deletion of accounts entirely. A blocked action is never advertised to Claude, ChatGPT or any other client, so no prompt, however worded, can reach it.

### What happens to a Unthread connection when someone leaves?

Offboarding that person in Elaichi ends their access to Unthread through every AI client at once. A shared Unthread connection keeps working for everyone else on the team. If you want the connector gone altogether, disconnecting Unthread once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client.

## All 66 Unthread tools

Every tool below is callable through https://api.elaichi.ai/mcp once Unthread is connected, subject to the toolbox it is in and the restrictions on the caller.

- **Create a Unthread account** (Create). Create a new account in Unthread. Returns the created account including id, name, primarySupportAssigneeId, primarySupportAssigneeType, secondarySupportAssigneeId, secondarySupportAssigneeType, emailsAndDomains, slackChannelIds, slackTeamIds, customFields, supportSteps, imageUrl, externalCrmMetadata, createdAt, updatedAt, createdBy, updatedBy, slackChannels, slackTeams, and tags. Required: name.
- **Get single Unthread account by ID** (Get). Get a single Unthread account by id. Returns the account including id, name, emailsAndDomains, slackChannelIds, slackTeamIds, customFields, supportSteps, imageUrl, externalCrmMetadata, createdAt, updatedAt, createdBy, updatedBy, slackChannels, slackTeams, and tags. Required: id.
- **Update a Unthread account by ID** (Update). Update a Unthread account by id. All fields from the create request schema can be updated. Returns the updated account including id, name, emailsAndDomains, slackChannelIds, slackTeamIds, customFields, supportSteps, imageUrl, externalCrmMetadata, createdAt, updatedAt, createdBy, updatedBy, slackChannels, slackTeams, and tags. Required: id.
- **Delete a Unthread account by ID** (Delete). Delete a Unthread account by id. Returns an empty 204 response on success. Required: id.
- **List all Unthread accounts** (List). List Unthread accounts following the standard list conventions with select, order, where, and descending filters. Returns each account with id, name, emailsAndDomains, slackChannelIds, slackTeamIds, customFields, supportSteps, imageUrl, externalCrmMetadata, createdAt, updatedAt, createdBy, updatedBy, slackChannels, slackTeams, and tags. Max 100 per page.
- **Create a Unthread approval request** (Create). Create an approval request for a conversation in Unthread. Returns the newly created approval request including id, status, conversationId, tenantId, and createdAt. Required: conversation_id. Settable fields: title, assignedToUserId, assignedToGroupId.
- **List all Unthread approval requests** (List). List approval requests for a conversation in Unthread. Returns ApprovalRequest objects including status, id, tenantId, assignedToGroupId, assignedToUserId, statusChangedAt, conversationId, title, notes, createdAt, approverUser, and approverGroup. Required: conversation_id.
- **Create a Unthread automation** (Create). Create a new automation in Unthread. Returns the created automation object including its id, name, status, trigger, steps, and conditions. Required: name, trigger, steps. Automations are only available if custom actions are enabled for the tenant.
- **Unthread automations create function** (Create). Upload shared code library external functions for automations in Unthread. Returns an object with a version number for subsequent activation. Required: code. The projectId query parameter is optional; omit it for tenant-level automations.
- **Unthread automations activate function** (Activate). Activate a specific version of a shared code library function for automations in Unthread. Returns the activated function version number. Required: version. The projectId query parameter is optional; omit it for tenant-level automations. Activating a previous version can be used to roll back changes.
- **List all Unthread collaborator types** (List). List collaborator types in Unthread following the standard list conventions. Returns: id. Max 100 per page.
- **Create a Unthread conversation** (Create). Create a new conversation in Unthread. Behavior varies by type — Slack (channel/DM), triage (internal discussion), or email (email replies). Returns the created conversation including its id, title, initialMessage (ts, text), and tags. Required: type, markdown, status.
- **Get single Unthread conversation by ID** (Get). Get a single Unthread conversation by id. Returns the full conversation object including id, status, title, initialMessage, tags, customerId, createdAt, and updatedAt. Required: id.
- **Update a Unthread conversation by ID** (Update). Update an Unthread conversation by id. Supports updating status, priority, title, assignedToUserId, customerId, ticketTypeId, ticketTypeFields, metadata, and more. Returns the updated conversation including id, title, initialMessage, and tags. Required: id. Optional query params: mergeTicketTypeFields, useFullContent.
- **List all Unthread conversations** (List). List conversations in Unthread using the standard list conventions (select, order, where, descending). Returns an array of conversation records each including id, title, initialMessage (ts, text), and tags. Max 100 per page.
- **Unthread conversations download file** (Download). Download the full contents of a file attachment from an Unthread conversation. Returns the raw file content as binary data. Required: conversation_id, file_id.
- **Unthread conversations add follower** (Add). Add a follower to an Unthread conversation. Returns: entityId, userId, groupId, id, title, content, url, status, userGroupIds, createdAt, updatedAt. Required: conversation_id, entityId, entityType.
- **Unthread conversations remove follower** (Delete). Remove a follower from an Unthread conversation by entityId. Returns the updated conversation including its id, title, status, and tags. Required: conversation_id, entityId.
- **Unthread conversations assign collaborator** (Assign). Assign a collaborator with a given collaborator type to an Unthread conversation. Returns the updated conversation including id, title, status, collaborators, and tags. Required: conversation_id, collaborator_type_id. The request body requires entityId and entityType (either "user" or "group").
- **Unthread conversations create external task** (Create). Create an external task for a conversation in Unthread, sending it to a configured task manager integration such as Linear. Returns the created external task including id, title, description, integrationId, assigneeId, and providerConfig. Required: conversation_id, title, integrationId.
- **Create a Unthread customer** (Create). Create a new customer in Unthread. A Slack channel is created automatically if the createChannel flag is set to true. Returns the created customer object including id, name, slackChannelId, createdAt, updatedAt, tags, and projectId. Required: name.
- **Get single Unthread customer by ID** (Get). Get a single Unthread customer by id. Returns the full customer object including name, slackChannelId, primarySupportAssigneeId, botHandling, autoresponder, supportSteps, tags, slackChannel, createdAt, updatedAt, and projectId. Required: id.
- **Update a Unthread customer by ID** (Update). Update an existing Unthread customer by id. Returns the updated customer object including name, slackChannelId, botHandling, autoresponder, supportSteps, tags, slackChannel, createdAt, updatedAt, and projectId. Required: id.
- **Delete a Unthread customer by ID** (Delete). Delete an Unthread customer by id. Returns an empty 204 response on success. Required: id.
- **List all Unthread customers** (List). List Unthread customers following the standard list conventions with select, order, where, and descending filter parameters. Returns: id, name, primarySupportAssigneeId, primarySupportAssigneeType, secondarySupportAssigneeId, secondarySupportAssigneeType, replyTimeoutMinutes, defaultTriageChannelId, disableAutomatedTicketing, botHandling, autoresponder, supportSteps, slackTeamId,…
- **Unthread knowledge base query** (Search). Query the Unthread knowledge base for articles matching a search string, with optional context parameters to influence results. Returns: id, title, content, url, status, userGroupIds, createdAt, updatedAt. Required: query.
- **Create a Unthread outbound** (Create). Create an outbound message in Unthread. The outbound is sent immediately unless status is set to "draft". Returns: id, status, deliveryMethod, subject, blocks, recipients, sendAs, runAt, title, content, url, userGroupIds, createdAt, updatedAt.
- **Update a Unthread outbound by ID** (Update). Update an outbound message in Unthread by id. Drafts can be sent by updating the status to "scheduled". Returns: id, status, deliveryMethod, subject, blocks, recipients, sendAs, runAt, title, content, url, userGroupIds, createdAt, updatedAt. Required: id.
- **List all Unthread outbounds** (List). List all outbound messages in Unthread. Returns: id, status, deliveryMethod, subject, blocks, recipients, sendAs, runAt, title, content, url, userGroupIds, createdAt, updatedAt.
- **Get single Unthread outbound by ID** (Get). Get a single outbound message in Unthread by id. Returns: id, status, deliveryMethod, subject, blocks, recipients, sendAs, runAt, title, content, url, userGroupIds, createdAt, updatedAt. Required: id.
- **Unthread reporting time series** (Action). Get time-series conversation metrics from Unthread grouped by date and optional dimensions. Returns: data, dates, lookups, id, title, content, url, status, userGroupIds, createdAt, updatedAt. Required: startDate, endDate, metric. Timezone defaults to UTC; response and resolution times are in seconds.
- **List all Unthread surveys** (List). List surveys in Unthread following the standard list conventions. Returns: id, createdAt, updatedAt. Max 100 per page.
- **Unthread surveys list responses** (List). List responses for a specific survey in Unthread following the standard list conventions. Returns: id, createdAt, updatedAt. Required: survey_id. Max 100 per page.
- **Unthread surveys get analytics** (Get). Get CSAT analytics for a specific survey in Unthread. Returns: id, title, content, url, status, userGroupIds, createdAt, updatedAt. Required: survey_id.
- **Unthread slack bulk update** (Update). Update a Slack user group mapping in Unthread by providing the user's email and Slack handle. Returns: email, slackHandle, id, title, content, url, status, userGroupIds, createdAt, updatedAt. Required: email, slackHandle.
- **Create a Unthread tag** (Create). Create a new tag in Unthread. Returns the created tag object including id, name, description, autoTaggingEnabled, and projectId. Required: name.
- **Get single Unthread tag by ID** (Get). Get a single Unthread tag by id. Returns: id, name, description, autoTaggingEnabled, projectId, title, content, url, status, userGroupIds, createdAt, updatedAt. Required: id.
- **Update a Unthread tag by ID** (Update). Update an Unthread tag by id. Returns the updated tag including id, name, description, autoTaggingEnabled, and projectId. Required: id.
- **Delete a Unthread tag by ID** (Delete). Delete an Unthread tag by id. Returns an empty 204 response on success. Required: id.
- **List all Unthread tags** (List). List Unthread tags following the standard list conventions. Returns: id, name, description, autoTaggingEnabled, projectId. Max 100 per page.
- **Unthread tags link customers** (Action). Assign a tag to multiple Unthread customers by providing an array of customer IDs. Returns an empty 204 response on success. Required: tag_id, and a request body array of customer IDs.
- **Unthread tags link conversations** (Action). Assign a tag to multiple Unthread conversations by providing an array of conversation IDs. Returns an empty 204 response on success. Required: tag_id, and a request body array of conversation IDs.
- **Unthread tags unlink customers** (Action). Remove a tag from multiple Unthread customers by providing an array of customer IDs. Returns an empty 204 response on success. Required: tag_id, and a request body array of customer IDs.
- **Unthread tags unlink conversations** (Action). Remove a tag from multiple Unthread conversations by providing an array of conversation IDs. Returns an empty 204 response on success. Required: tag_id, and a request body array of conversation IDs.
- **Create a Unthread ticket type** (Create). Create a new ticket type in Unthread with custom fields and conditional visibility rules. Returns: id, name, projectId, description, createdAt, updatedAt, fields, title, content, url, status, userGroupIds. Required: name, description.
- **Update a Unthread ticket type by ID** (Update). Update a ticket type in Unthread by id, including its name, description, and field definitions. Returns: id, name, projectId, description, createdAt, updatedAt, fields, title, content, url, status, userGroupIds. Required: id.
- **Delete a Unthread ticket type by ID** (Delete). Delete a ticket type in Unthread by id. Returns an empty 204 response on success. Required: id.
- **List all Unthread ticket types** (List). List ticket types in Unthread using the standard list conventions with select, order, where, and descending parameters. Returns: id, name, projectId, description, createdAt, updatedAt, fields.
- **Get single Unthread ticket type by ID** (Get). Get a single ticket type in Unthread by id. Returns: id, name, projectId, description, createdAt, updatedAt, fields, title, content, url, status, userGroupIds. Required: id.
- **List all Unthread users** (List). List Unthread users synced from your Slack workspace. Returns: id. Pass includeExternalUsers as true to also return external users. Max 100 per page.
- **Get single Unthread user by ID** (Get). Get a single Unthread user by id. Returns: id, name, email, slackId, photo, customFields, title, content, url, status, userGroupIds, createdAt, updatedAt. Required: id.
- **Update a Unthread user by ID** (Update). Update an Unthread user by id. Returns the updated user with id, name, email, slackId, photo, and customFields. Required: id.
- **List all Unthread user groups** (List). List user groups in Unthread following the standard list conventions with support for select, order, where, and descending parameters. Returns: id. Max 100 per page.
- **Get single Unthread user group by ID** (Get). Get a single Unthread user group by id. Returns: id, description, isExternal, filters, projectId, title, content, url, status, userGroupIds, createdAt, updatedAt. Required: id.
- **Update a Unthread user group by ID** (Update). Update an Unthread user group by id. Returns the updated user group including id, description, isExternal, filters, and projectId. Required: id.
- **Create a Unthread webhook subscription** (Create). Create a webhook subscription in Unthread. Returns: id, url, enabled, title, content, status, userGroupIds, createdAt, updatedAt. Required: url.
- **Update a Unthread webhook subscription by ID** (Update). Update a webhook subscription in Unthread by id. Returns: id, url, enabled, title, content, status, userGroupIds, createdAt, updatedAt. Required: id.
- **Delete a Unthread webhook subscription by ID** (Delete). Delete a webhook subscription in Unthread by id. Returns an empty 204 response on success.
- **List all Unthread webhook subscriptions** (List). List webhook subscriptions in Unthread. Returns: id, url, enabled, title, content, status, userGroupIds, createdAt, updatedAt.
- **List all Unthread conversation messages** (List). List messages for a given Unthread conversation. Returns: ts, userId, userTeamId, botId, botName, text, subtype, conversationId, timestamp, threadTs, conversation, user, metadata. Required: conversation_id.
- **Create a Unthread conversation message** (Create). Create a new message in an Unthread conversation, posted into the Slack thread. Returns the created message including ts, text, userId, conversationId, timestamp, botName, and metadata. Required: conversation_id. Either body, blocks, or markdown must be provided.
- **Create a Unthread knowledge base article** (Create). Create a new knowledge base article in Unthread. Returns: id, title, content, url, status, userGroupIds, createdAt, updatedAt. Required: title, content.
- **Get single Unthread knowledge base article by ID** (Get). Get a single knowledge base article in Unthread by id. Returns: id, title, content, url, status, userGroupIds, createdAt, updatedAt. Required: id.
- **Update a Unthread knowledge base article by ID** (Update). Update an existing knowledge base article in Unthread by id. Returns: id, title, content, url, status, userGroupIds, createdAt, updatedAt. Required: id.
- **Delete a Unthread knowledge base article by ID** (Delete). Delete a knowledge base article in Unthread by id. Returns an empty 204 response on success. Required: id.
- **List all Unthread knowledge base articles** (List). List knowledge base articles in Unthread following standard list conventions with support for field selection, filtering, and sorting. Returns: id, title, content, url, status, userGroupIds, createdAt, updatedAt. Max 100 per page.
