How to integrate Plain MCP with Atomic Agent

Connect Atomic Agent to Plain MCP. Summarize unresolved plain support threads, find customers with overdue support replies, and more using natural language, with authentication handled for you.

Plain MCP logoPlain MCP
Dcr Oauth

Plain MCP is Plain's hosted support platform for threads, customers, tenants, and help-center content. It gives teams a secure, centralized way to manage customer support operations.

80 Tools

Introduction

Atomic Agent is an open-source AI agent that runs on your machine and supports local models through llama.cpp. Connect it to 1,500+ apps through Composio, including Plain.

This guide uses Atomic Agent's built-in Composio integration. You need Atomic Agent v0.5.6 or later, your own Composio API key, and a Plain account. See the Atomic Agent documentation for installation instructions.

Also integrate Plain MCP with

How Atomic Agent connects to Plain

Atomic Agent connects to Composio's Tool Router over Streamable HTTP MCP. It discovers the tools needed for your request, and Composio handles account authentication.

Execution and account-connection tools follow Atomic Agent's configured approval policy. Review any approval prompt before allowing an action on your connected account.

Connect Plain to Atomic Agent

  1. Sign up or sign in to the Composio dashboard. Copy your API key.
  2. In Atomic Agent, open the Integrations tab and select Composio. Select API key, press e, paste the key, and press Enter. The tools become available immediately, without a restart.
  3. Ask Atomic Agent to do something in Plain. It searches Composio for the right tool.
  4. On first use, open the sign-in link returned in the chat. Connect your Plain account, then return to Atomic Agent to continue.

Headless setup

Add the following line to ~/.atomic-agent/.env, replacing YOUR_COMPOSIO_API_KEY with your key. Start Atomic Agent after saving the file.

bash
COMPOSIO_API_KEY=YOUR_COMPOSIO_API_KEY

What is the Plain MCP server, and what's possible with it?

The Plain MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Plain account. It provides structured and secure access to Plain support threads, customers, broadcasts, help-center content, Sidekick sessions, and workspace details, so your agent can read and update support work, manage customer conversations, publish and inspect broadcasts, and retrieve help-center content on your behalf.

  • Support thread management: Have your agent create threads, assign them, change priority, add labels and internal notes, suggest replies, update custom fields, and link them to external records.
  • Customer conversation lookup: Let the agent list customers, fetch customer details, and review the threads connected to each customer.
  • Broadcast coordination: Direct your agent to create and manage broadcasts for Slack channels, organize reusable audiences, review send history and delivery results, or remove outdated broadcasts.
  • Help-center content access: Instruct your agent to find help centers, article groups, and articles, then retrieve specific articles by their ID or slug.
  • Workspace and Sidekick assistance: Have your agent check workspace and user details, read snippets and labels, and poll Sidekick sessions for their status, latest messages, or pending approvals.

Use Plain from Atomic Agent

With your account connected, ask Atomic Agent to work with Plain in natural language. You can connect more apps through the same Composio integration as you need them.

Visit the Atomic Agent website or inspect the Atomic Agent source code.

Troubleshooting

Why is my API key rejected?

Copy the key directly from the Composio dashboard. Atomic Agent requires ASCII characters because it sends the key in an HTTP header. Remove any extra characters introduced when copying.

Why are Composio tools unavailable after saving a key?

Check that you use Atomic Agent v0.5.6 or later and that Composio is enabled in your configuration. A "composio": { "enabled": false } setting disables the integration while keeping the saved key on disk.

Does Composio have a free plan?

The Hobby plan includes 100,000 tool calls per month. Composio-managed OAuth apps have a lower included allowance. See Composio pricing for the current limits that apply to your connection.

TOOLS

Supported Tools

Every Plain MCP action and event your agent gets out of the box.

Addgeneratedreply

Add an AI-generated reply suggestion to a thread.

Addlabels

Add labels to a thread by label type IDs.

Archivelabeltype

Archive a label type to hide it from the active label list.

Assignthread

Assign a thread to a user or machine user.

Bulkupsertthreadfields

Bulk upsert (create or update) multiple thread field values in a single operation.

Changethreadpriority

Change the priority of a thread.

Createbroadcast

Create a new broadcast: a message authored once and posted to many Slack channels at once.

Createbroadcastaudience

Create a reusable broadcast audience: a named set of broadcast recipients, resolved to concrete Slack channels at send time rather than when saved.

Createlabeltype

Create a new label type for organizing threads.

Createnote

Create an internal note on a thread.

Createsnippet

Create a new snippet (reusable reply template) in the workspace.

Createthread

Create a new thread for a customer.

Createthreadfieldschema

Create a new thread field schema to capture structured data on threads.

Createthreadlink

Link a thread to an external entity (e.

Createworkspaceslackintegrationfromauth

Connect workspace Slack notifications using a Slack connection the workspace already has.

Deletebroadcast

Soft-delete a broadcast.

Deletebroadcastaudience

Soft-delete a broadcast audience.

Deletethreadfieldschema

Delete a thread field schema from the workspace.

Deletethreadlink

Remove a link between a thread and an external entity.

Getattachmentdownloadurl

Generate a short-lived download URL for an attachment on a thread.

Getbroadcastaudiencedetails

Fetch a single broadcast audience by its ID, or null if no audience with that ID exists.

Getbroadcastaudiences

Fetch a paginated list of the workspace's broadcast audiences, newest first.

Getbroadcastdetails

Fetch a single broadcast by its ID, including its authored content and who it is targeted at.

Getbroadcasts

Fetch a paginated list of the workspace's broadcasts, newest first.

Getbroadcastsenddeliveries

Fetch the individual recipients of one broadcast send — which channel got the message, which did not, and why.

Getbroadcastsends

Fetch the send history of one broadcast, newest first.

Getcustomerdetails

Fetch detailed information about a specific customer by their ID.

Getcustomers

Fetch a paginated list of customers from Plain.

Getcustomerthreads

Fetch first 10 threads for a specific customer.

Gethelpcenterarticle

Fetch detailed information for a specific help-center article by ID.

Gethelpcenterarticlebyslug

Fetch detailed information for a specific help-center article by slug.

Gethelpcenterarticlegroups

Fetch a paginated list of article groups for a specific help center.

Gethelpcenterarticles

Fetch a paginated list of articles for a specific help center.

Gethelpcenters

Fetch a paginated list of help centers.

Getlabels

Fetch a paginated list of label types from Plain.

Getmyassignedthreads

Fetch first 10 threads assigned to a specific user in Plain.

Getmyuser

Get the currently authenticated user's details.

Getmyworkspace

Get the currently authenticated user's workspace details.

Getsidekicksession

Poll a Sidekick session: read its status, its newest messages, and any approval it is blocked on.

Getsnippet

Fetch a single snippet by ID, including soft-deleted snippets (where `isDeleted` is true).

Getsnippets

Fetch a paginated list of snippets from the workspace.

Gettenantdetails

Fetch detailed information about a specific tenant by their ID.

Gettenants

Fetch a paginated list of tenants from Plain.

Getthreaddetails

Fetch complete details for a specific thread including first 50 timeline entries.

Getthreadfieldschemas

Fetch a paginated list of thread field schemas from Plain.

Getthreadknowledgesourcecitations

Fetch the knowledge sources cited by AI agent replies on a thread.

Getthreads

Fetch threads with flexible filtering options.

Getuserbyemail

Look up a Plain user by their email address.

Listsidekicksessions

List Sidekick sessions in the workspace, most recent activity first.

Markcustomerasspam

Flag a customer as spam.

Markthreadasdone

Mark a thread as done (resolved).

Markthreadastodo

Mark a thread as todo (reopen or set as active).

Mergethread

Merge one Plain thread into another (a `MERGED_INTO` native thread link).

Movelabeltype

Move a label type to a different position in the label hierarchy.

Removelabels

Remove labels from a thread by label IDs.

Reorderthreadfieldschemas

Reorder multiple thread field schemas in a single operation.

Replytothread

Reply to the last message in a thread.

Resolvesidekickapproval

Approve or deny a Sidekick tool-call approval request.

Searchbroadcasts

Search broadcasts by name.

Searchcustomers

Search for customers by name, email, short name, or external ID.

Searchtenants

Search for tenants by name or external ID.

Searchthreadlinkcandidates

Search a connected issue tracker for external entities that can be linked to a thread via `createThreadLink`.

Searchthreads

Search threads by text content in title, description, or messages.

Sendsidekickmessage

Send a follow-up message into an existing Sidekick session.

Sendtestbroadcast

Send a test copy of a broadcast to Slack channels you name, so you can see what recipients will get before the real audience does.

Snoozethread

Snooze a thread for a specified duration.

Startsidekicksession

Start a new Sidekick session and return the handle used by every other Sidekick tool.

Unarchivelabeltype

Unarchive a previously archived label type to make it available again.

Unassignthread

Unassign a thread, removing the current assignee.

Unmarkcustomerasspam

Clear the spam flag from a customer, restoring their threads to the inbox and metrics.

Updatebroadcast

Update one or more fields of an existing broadcast.

Updatebroadcastaudience

Update a broadcast audience's name, filters, or both.

Updatelabeltype

Update an existing label type's properties.

Updatethreadfieldschema

Update an existing thread field schema's properties.

Updatethreadtitle

Update the title (subject line) of an existing thread.

Upsertcustomer

Create or update a customer.

Upserthelpcenterarticle

Create or update a help-center article.

Upserttenant

Create or update a tenant.

Upserttenantfield

Create or update a tenant field.

Upsertthreadfield

Upsert (create or update) a thread field value on a thread.

FAQ

Frequently asked questions

With a standalone Plain MCP server, the agents and LLMs can only access a fixed set of Plain tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Plain and many other apps based on the task at hand, all through a single MCP endpoint.

Yes, you can. Atomic Agent fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Plain tools.

Yes, absolutely. You can configure which Plain scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Plain data and credentials are handled as safely as possible.

Start with Plain MCP.It takes 30 seconds.

Managed auth, hosted MCP servers, and every Plain MCP tool your agent needs.Free to start.

Start building