Plain MCP server
23 operations0 webhooks
Customer support platform for managing customers, threads, customer groups, companies, tiers, and users, with a raw GraphQL query endpoint.
Try Plain with your agent
Connect Plain, then paste this into Claude, ChatGPT or Cursor. For ideas from other apps, see the use cases.
Using Corsair, show me what you can do in Plain on my account, then run one read-only example and show me the result.
Plain tools and triggers
Tools are what your agent can do in Plain through Corsair's MCP server. Triggers are the Plain events a routine can start from.
Threads
- CreateWrite
Create a thread for a customer.
threads.create
- Fetch IssuesRead-only
Fetch external thread links for a customer and flatten as issue records.
threads.fetchIssues
- Get By IdRead-only
Fetch a thread by Plain thread ID.
threads.getById
- List DeprecatedRead-only
Deprecated threads listing operation; use threads.query.
threads.listDeprecated
- QueryRead-only
List threads with filters, sort, and cursor pagination.
threads.query
- Send MessageWrite
Reply to a thread via Plain routing.
threads.sendMessage
- UpdateWrite
Update a thread title.
threads.update
Customers
- DeleteWrite
Delete a customer asynchronously.
customers.delete
- Get By EmailRead-only
Fetch a customer by email address.
customers.getByEmail
- Get By IdRead-only
Fetch a customer by Plain customer ID.
customers.getById
- ListRead-only
List customers with optional filters and cursor pagination (first/after or last/before).
customers.list
- UpsertWrite
Create or update a customer by identifier.
customers.upsert
Customer Groups
- Add CustomerWrite
Add a customer to one or more customer groups.
customerGroups.addCustomer
- CreateWrite
Create a customer group.
customerGroups.create
- ListRead-only
List customer groups with cursor pagination.
customerGroups.list
- Remove CustomerWrite
Remove a customer from one or more customer groups.
customerGroups.removeCustomer
Companies
- FetchRead-only
Fetch a company by ID.
companies.fetch
- UpdateWrite
Create or update a company by ID or domain.
companies.update
Tiers
- FetchRead-only
Fetch a tier by ID.
tiers.fetch
- ListRead-only
List tiers with cursor pagination.
tiers.list
Users
- DeleteWrite
Delete a workspace user.
users.delete
- Get By IdRead-only
Fetch a workspace user by ID.
users.getById
Graphql
- RunWrite
Run an arbitrary GraphQL query or mutation.
graphql.run
Connect Plain to Claude, ChatGPT or Cursor
- 1
Connect Plain in Corsair
Add your Plain API key once in Corsair. Corsair stores the credential encrypted and makes the Plain API calls for your agent, so it never goes into a prompt or a config file. Connect Plain
If your link lets the agent add apps, you can skip this: it gives you a sign-in link the first time it needs Plain. On a ChatGPT personal plan, connect Plain here first.
- 2
Add Corsair's MCP server to your agent
Every client uses the same address:
https://mcp.corsair.dev/mcpOpen Customize → Connectors → Add custom connector, paste the address, then select Connect.Add a custom MCP server with the address and choose OAuth. Personal plans get read tools only.Add to CursorOr add this to~/.cursor/mcp.json. Cursor opens Corsair to sign in the first time it connects.{ "mcpServers": { "corsair": { "url": "https://mcp.corsair.dev/mcp" } } }Run this, then run/mcpin Claude Code to sign in.claude mcp add --transport http corsair https://mcp.corsair.dev/mcpCodex, Gemini CLI, VS Code, Zed and other clients with OAuth sign-in work the same way. Clients without it, such as GitHub Copilot's coding agent, use a link's own address and an API key. Setup for every client
- 3
Sign in and choose what needs your approval
Your client opens Corsair to sign in. Pick a link: the apps your agent can use and a mode that decides what it may do without asking. None of Plain's operations are destructive, so in the default Cautious mode they all run right away. Strict mode asks before each of its 11 writes, and Read mode allows reads only.
FAQ
Install corsair and @corsair-dev/plain, add the Plain plugin, and connect with an API key. Then call methods like corsair.plain.api.companies.fetch() from your app. Corsair syncs data per tenant.
Yes. Plain requires an API key from your Plain account or developer dashboard. Create credentials with access that matches what you automate, then paste them into Corsair or connect through managed auth in Hub.
Yes. One Corsair client can hit Plain, GitHub, Notion, Stripe, and the rest. Trigger Plain from a webhook, push updates to Slack, or chain actions across plugins. Same tenant context across integrations, plain TypeScript.
Teams use Corsair for customer support platform for managing customers, threads, customer groups, companies, tiers, and users, with a raw graphql query endpoint. Common builds include sync jobs, admin tooling, and agents that call Plain APIs from your backend. Local DB entities let you query synced Plain records without hitting the API on every read.
The SDK is open source. Self-host and you pay Corsair nothing for the integration layer. Hub bills for hosted auth and execution, not per Plain API call. Hub has a generous free tier. For hobby projects you can probably run the whole thing on free. Paid plans start to matter with more tenants or heavier traffic.
We maintain @corsair-dev/plain in the open repo. When Plain ships API changes, upgrade the package. Your call sites stay typed. You should not need to rewrite the integration layer each time.
No. Corsair does not read your Plain data or hold individual access credentials. Credentials stay in your database. API calls run on your instance. We do not store Plain data on your behalf.
Yes. Add https://mcp.corsair.dev/mcp as a custom connector or MCP server in Claude, ChatGPT, Cursor, VS Code, Claude Code, Codex or any client that supports remote MCP servers with OAuth sign-in, then sign in to Corsair. On ChatGPT personal plans, custom servers currently get read tools only.
Yes. Put Plain on a link in Strict mode and every write waits for your approval, while destructive actions are refused. None of the Plain operations are destructive, so the default Cautious mode runs them all without asking. You can change a link's mode at hub.corsair.dev/me.