Skip to content

Connectors · Service desk & support

Plain MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Plain and the rest of your systems. It gives your agent 523 Plain actions (202 reads, 234 writes and 87 that wait for a confirmation) and holds the Plain credential itself, so the agent never does. It paces Plain's limits and records every call.

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

claude mcp add --transport http actionlake https://connect.actionlake.com/mcp
the first call
do {  action: "plain.customer.list",  intent: "check which Plain account is connected"}# List Plain customers · read · 1 upstream call
  • 523actionsin one signed file
  • 202readlook, never change
  • 234writecreate and update
  • 87wait for a yesdestructive, confirmed first

Set up

Connect Plain in three steps.

  1. 01

    Add actionlake to Claude.

    Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.

    https://connect.actionlake.com/mcp
  2. 02

    Connect Plain.

    Bearer token. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.

    • api_keyPlain API key (plainApiKey_...)
    account { op: "connections.requirements", service: "plain" }
    # free: exactly what to paste, and what is found for you
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates the call and prices it, for free.

    do    { action: "plain.customer.list" }# list plain customers · read · 1 upstream callcheck { action: "plain.account.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

Plain at a glance

Sign-in
Bearer token. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.
You provide
api_key
Limits we pace to
600 calls a minute, per connection
API covered
Plain API graphql-v1core-api.uk.plain.com
Built from
Plain's documentation, read 23 October 2026plain.comcore-api.uk.plain.com
Service file
Version 1.0.0, signed (Ed25519)
Cached reads
200 of 202 reads, for up to an hour; a write clears what it affects
Shared entities
4, so ask can line Plain up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in Plain.

523 actions in 1 area. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 202readlook, never change
  • 234writecreate and update
  • 87destructivewait for a confirmation
  1. Support

    523

    202 read · 234 write · 87 destructive

    List Plain customers · List Plain accounts · List Plain users · Plain account: create

Top actions

The Plain API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 24 of Plain's 24 action names are shared with at least one other connector, so an agent learns them once.

ActionWhat it doesEffectSame name in
plain.customer.listList Plain customersFetch a paginated list of all customers in the workspacereadcrm.contact.list177 connectors
plain.account.listList Plain accountsReturns a paginated list of accounts in the workspacereadcrm.company.list162 connectors
plain.user.listList Plain usersList all human members of the workspace, with optional filters to narrow results by role assignabilityreadidentity.user.list474 connectors
plain.account.createPlain account: createCreates a new accountwritecrm.company.create142 connectors
plain.thread.listList Plain threadsList threads with optional filtering and sorting, returned as a paginated connectionreadservice.ticket.list56 connectors
plain.customer.getGet Plain customerFetch a single customer by their Plain customer IDreadcrm.contact.get176 connectors
plain.customer.deletePlain customer: deletePermanently deletes a customer and all associated data (threads, timeline entries, etc.)destructivecrm.contact.delete147 connectors
plain.thread.createPlain thread: createCreate a new thread for a customerwriteservice.ticket.create54 connectors
plain.user.getGet Plain userFetch a single workspace member by their IDreadidentity.user.get399 connectors
plain.task.createPlain task: createCreate a new taskwritework.task.create127 connectors
plain.chat.sendPlain chat: sendSend a chat message from a support agent (or machine user) to a customer on a CHAT-channel threadwritethis connector
plain.label.addPlain label: addAdd one or more labels to a threadwritethis connector

Try it

Prompts to paste into Claude.

Each one names the Plain actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

    Which Plain tickets have been open the longest? Show me the ten oldest with their status.

    callsplain.thread.list

  2. Writewrite

    Plain account: create in Plain. Show me exactly what you will send before you save it.

    callsplain.account.create

  3. Across systemsread

    For each customer, how many tickets are in Plain and how many invoices in ConnectWise PSA?

    callsplain.thread.listconnectwise_manage.invoices.list

Across your systems

Plain, joined to the rest of your business.

One ask fetches from Plain and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.

  • For each customer, how many tickets are in Plain and how many invoices in ConnectWise PSA?

    plain.thread.list + connectwise_manage.invoices.list, on crm.company · ConnectWise PSA

  • For each customer, how many tickets are in Plain and how many invoices in NetSuite?

    plain.thread.list + netsuite.views.invoices, on crm.company · NetSuite

Also mapped by other connectorsidentity.user 517crm.company 227crm.contact 192service.ticket 62
ask
ask {  intent: "for each customer, how many tickets are in Plain and how many invoices in ConnectWise PSA",  steps: [    { action: "plain.thread.list", as: "tix", input: {}, limit: 100, max_pages: 5 },    { action: "connectwise_manage.invoices.list", as: "inv", input: {}, limit: 100, max_pages: 5 },    { join: {        left: "tix",        right: "inv",        on: "crm.company",        group_by: "tix.company_name",        select: ["tix.company_name", "count(tix.id) as tickets", "count(inv.id) as invoices"]    } }  ]}
Example. Run it through check first: it validates the steps and prices them, and it is free.

Governance for Plain

Destructive actions wait for a yes.

87 Plain actions are destructive. The first 10:

  • Plain customer: deleteplain.customer.delete
  • Plain account: deleteplain.account.delete
  • Plain user: deleteplain.user.delete
  • Plain thread: deleteplain.thread.delete
  • Plain task: deleteplain.task.delete
  • Plain note: deleteplain.note.delete
  • Plain tier: deleteplain.tier.delete
  • Plain label: removeplain.label.remove
  • Plain tenant: deleteplain.tenant.delete
  • Plain api key: deleteplain.api_key.delete

A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

doplain.customer.deleteconfirm_policy: human

Plain customer: delete?

intent: the user asked me to plain customer: delete

run suspended · waiting for a named person · key plain-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
account {  op: "keys.create", name: "plain-agent",  allowed_actions: ["plain.*"], cap_calls: 2000,  confirm_policy: "human_for_writes",  approval_rules: [    { match: "plain.customer.delete", approver: "[email protected]" },    { match: "plain.account.delete", approver: "[email protected]" },    { match: "plain.user.delete", approver: "[email protected]" }  ]}
Illustrative. Scoped to Plain only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

What Plain costs on actionlake.

Every Plain action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Plain refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

  • 1upstream call per actionall 523 Plain actions
  • 72actions pageeach page of a long list is one call
  • 200reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every Plain action.

523 actions by area: the id your agent calls, what it does, and its effect.

Support523
  • plain.account.createPlain account: createwrite
  • plain.account.deletePlain account: deletedestructive
  • plain.account.getGet Plain accountread
  • plain.account.importPlain account: importwrite
  • plain.account.listList Plain accountsread
  • plain.account.searchSearch Plain accountsread
  • plain.account.update_tierPlain account: update tierwrite
  • plain.account.upsertPlain account: upsertwrite
  • plain.account_field.deletePlain account field: deletedestructive
  • plain.account_field.upsertPlain account field: upsertwrite
  • plain.account_field_schema.deletePlain account field schema: deletedestructive
  • plain.account_field_schema.importPlain account field schema: importwrite
  • plain.account_field_schema.import_from_servicePlain account field schema: import from servicewrite
  • plain.account_field_schema.listList Plain account field schemasread
  • plain.account_field_schema.remove_mappingPlain account field schema: remove mappingdestructive
  • plain.account_field_schema.setup_mappingPlain account field schema: setup mappingwrite
  • plain.account_field_schema.upsertPlain account field schema: upsertwrite
  • plain.agent_approval.resolvePlain agent approval: resolvewrite
  • plain.agent_sandbox_tool_policy.listList Plain agent sandbox tool policysread
  • plain.agent_sandbox_tool_policy.updatePlain agent sandbox tool policy: updatewrite
  • plain.agent_session.stop_turnPlain agent session: stop turndestructive
  • plain.agent_session_message.delete_queuedPlain agent session message: delete queueddestructive
  • plain.agent_session_message.edit_queuedPlain agent session message: edit queuedwrite
  • plain.ai_feedback.createPlain ai feedback: createwrite
  • plain.ai_feedback.create_for_featurePlain ai feedback: create for featurewrite
  • plain.ai_feedback.listList Plain ai feedbacksread
  • plain.ai_tone_rule.createPlain ai tone rule: createwrite
  • plain.ai_tone_rule.deletePlain ai tone rule: deletedestructive
  • plain.ai_tone_rule.enabled_textPlain ai tone rule: enabled textread
  • plain.ai_tone_rule.generate_from_descriptionPlain ai tone rule: generate from descriptionwrite
  • plain.ai_tone_rule.listList Plain ai tone rulesread
  • plain.ai_tone_rule.updatePlain ai tone rule: updatewrite
  • plain.api_key.createPlain api key: createwrite
  • plain.api_key.deletePlain api key: deletedestructive
  • plain.api_key.updatePlain api key: updatewrite
  • plain.attachment.create_download_urlPlain attachment: create download urlwrite
  • plain.attachment.create_upload_urlPlain attachment: create upload urlwrite
  • plain.autoresponder.createPlain autoresponder: createwrite
  • plain.autoresponder.deletePlain autoresponder: deletedestructive
  • plain.autoresponder.getGet Plain autoresponderread
  • plain.autoresponder.listList Plain autorespondersread
  • plain.autoresponder.reorderPlain autoresponder: reorderwrite
  • plain.autoresponder.updatePlain autoresponder: updatewrite
  • plain.billing.plansPlain billing: plansread
  • plain.billing.rotaPlain billing: rotaread
  • plain.billing.subscriptionPlain billing: subscriptionread
  • plain.broadcast.createPlain broadcast: createwrite
  • plain.broadcast.deletePlain broadcast: deletedestructive
  • plain.broadcast.duplicatePlain broadcast: duplicatewrite
  • plain.broadcast.getGet Plain broadcastread
  • plain.broadcast.listList Plain broadcastsread
  • plain.broadcast.schedulePlain broadcast: schedulewrite
  • plain.broadcast.searchSearch Plain broadcastsread
  • plain.broadcast.send_testPlain broadcast: send testwrite
  • plain.broadcast.target_recipientsPlain broadcast: target recipientsread
  • plain.broadcast.updatePlain broadcast: updatewrite
  • plain.broadcast_audience.createPlain broadcast audience: createwrite
  • plain.broadcast_audience.deletePlain broadcast audience: deletedestructive
  • plain.broadcast_audience.getGet Plain broadcast audienceread
  • plain.broadcast_audience.import_channelsPlain broadcast audience: import channelswrite
  • plain.broadcast_audience.listList Plain broadcast audiencesread
  • plain.broadcast_audience.updatePlain broadcast audience: updatewrite
  • plain.broadcast_recipient.resubscribePlain broadcast recipient: resubscribewrite
  • plain.broadcast_recipient.unsubscribePlain broadcast recipient: unsubscribedestructive
  • plain.broadcast_recipient_unsubscribe.importPlain broadcast recipient unsubscribe: importwrite
  • plain.broadcast_recipient_unsubscribe.listList Plain broadcast recipient unsubscribesread
  • plain.business_hours.deletePlain business hours: deletedestructive
  • plain.business_hours.getGet Plain business hoursread
  • plain.business_hours.slotsPlain business hours: slotsread
  • plain.business_hours.sync_slotsPlain business hours: sync slotswrite
  • plain.business_hours.upsertPlain business hours: upsertwrite
  • plain.business_hours_override.createPlain business hours override: createwrite
  • plain.business_hours_override.deletePlain business hours override: deletedestructive
  • plain.business_hours_override.getGet Plain business hours overrideread
  • plain.business_hours_override.updatePlain business hours override: updatewrite
  • plain.business_hours_schedule.createPlain business hours schedule: createwrite
  • plain.business_hours_schedule.deletePlain business hours schedule: deletedestructive
  • plain.business_hours_schedule.getGet Plain business hours scheduleread
  • plain.business_hours_schedule.listList Plain business hours schedulesread
  • plain.business_hours_schedule.updatePlain business hours schedule: updatewrite
  • plain.channel.testPlain channel: testread
  • plain.chat.sendPlain chat: sendwrite
  • plain.chat.send_as_customerPlain chat: send as customerwrite
  • plain.chat_app.createPlain chat app: createwrite
  • plain.chat_app.deletePlain chat app: deletedestructive
  • plain.chat_app.getGet Plain chat appread
  • plain.chat_app.listList Plain chat appsread
  • plain.chat_app.updatePlain chat app: updatewrite
  • plain.chat_app_secret.createPlain chat app secret: createwrite
  • plain.chat_app_secret.deletePlain chat app secret: deletedestructive
  • plain.chat_app_secret.getGet Plain chat app secretread
  • plain.company.deletePlain company: deletedestructive
  • plain.company.getGet Plain companyread
  • plain.company.listList Plain companysread
  • plain.company.searchSearch Plain companysread
  • plain.company.update_tierPlain company: update tierwrite
  • plain.company.upsertPlain company: upsertwrite
  • plain.connected_discord_channel.listList Plain connected discord channelsread
  • plain.connected_discord_channel.refreshPlain connected discord channel: refreshwrite
  • plain.connected_discord_channel.updatePlain connected discord channel: updatewrite
  • plain.connected_ms_teams_channel.listList Plain connected ms teams channelsread
  • plain.connected_slack_channel.bulk_updatePlain connected slack channel: bulk updatewrite
  • plain.connected_slack_channel.getGet Plain connected slack channelread
  • plain.connected_slack_channel.listList Plain connected slack channelsread
  • plain.connected_slack_channel.updatePlain connected slack channel: updatewrite
  • plain.credit.balancePlain credit: balanceread
  • plain.credit.spendPlain credit: spendread
  • plain.credit.usage_by_dayPlain credit: usage by dayread
  • plain.cursor_repository.listList Plain cursor repositorysread
  • plain.custom_role.createPlain custom role: createwrite
  • plain.custom_role.deletePlain custom role: deletedestructive
  • plain.custom_role.getGet Plain custom roleread
  • plain.custom_role.listList Plain custom rolesread
  • plain.custom_role.updatePlain custom role: updatewrite
  • plain.customer.add_to_accountsPlain customer: add to accountswrite
  • plain.customer.add_to_customer_groupsPlain customer: add to customer groupswrite
  • plain.customer.add_to_tenantsPlain customer: add to tenantswrite
  • plain.customer.deletePlain customer: deletedestructive
  • plain.customer.getGet Plain customerread
  • plain.customer.get_by_emailPlain customer: get by emailread
  • plain.customer.get_by_external_idPlain customer: get by external idread
  • plain.customer.importPlain customer: importwrite
  • plain.customer.listList Plain customersread
  • plain.customer.mark_as_spamPlain customer: mark as spamwrite
  • plain.customer.remove_from_accountsPlain customer: remove from accountsdestructive
  • plain.customer.remove_from_customer_groupsPlain customer: remove from customer groupsdestructive
  • plain.customer.remove_from_tenantsPlain customer: remove from tenantsdestructive
  • plain.customer.resolve_for_ms_teams_channelPlain customer: resolve for ms teams channelwrite
  • plain.customer.resolve_for_slack_channelPlain customer: resolve for slack channelwrite
  • plain.customer.searchSearch Plain customersread
  • plain.customer.set_accountsPlain customer: set accountswrite
  • plain.customer.set_tenantsPlain customer: set tenantswrite
  • plain.customer.unmark_as_spamPlain customer: unmark as spamwrite
  • plain.customer.update_companyPlain customer: update companywrite
  • plain.customer.upsertPlain customer: upsertwrite
  • plain.customer_card_config.createPlain customer card config: createwrite
  • plain.customer_card_config.deletePlain customer card config: deletedestructive
  • plain.customer_card_config.getGet Plain customer card configread
  • plain.customer_card_config.listList Plain customer card configsread
  • plain.customer_card_config.reorderPlain customer card config: reorderwrite
  • plain.customer_card_config.updatePlain customer card config: updatewrite
  • plain.customer_card_instance.listList Plain customer card instancesread
  • plain.customer_card_instance.reloadPlain customer card instance: reloadwrite
  • plain.customer_event.createPlain customer event: createwrite
  • plain.customer_group.createPlain customer group: createwrite
  • plain.customer_group.deletePlain customer group: deletedestructive
  • plain.customer_group.getGet Plain customer groupread
  • plain.customer_group.listList Plain customer groupsread
  • plain.customer_group.updatePlain customer group: updatewrite
  • plain.customer_group.upsertPlain customer group: upsertwrite
  • plain.customer_survey.createPlain customer survey: createwrite
  • plain.customer_survey.deletePlain customer survey: deletedestructive
  • plain.customer_survey.getGet Plain customer surveyread
  • plain.customer_survey.listList Plain customer surveysread
  • plain.customer_survey.reorderPlain customer survey: reorderwrite
  • plain.customer_survey.updatePlain customer survey: updatewrite
  • plain.discord_message.sendPlain discord message: sendwrite
  • plain.discussion.createPlain discussion: createwrite
  • plain.discussion.getGet Plain discussionread
  • plain.discussion.listList Plain discussionsread
  • plain.discussion.send_messagePlain discussion: send messagewrite
  • plain.discussion.stop_turnPlain discussion: stop turndestructive
  • plain.discussion.update_agent_statusPlain discussion: update agent statuswrite
  • plain.discussion_approval.resolvePlain discussion approval: resolvewrite
  • plain.discussion_tool_call.request_approvalPlain discussion tool call: request approvalwrite
  • plain.discussion_tool_call.upsertPlain discussion tool call: upsertwrite
  • plain.email.create_preview_urlPlain email: create preview urlwrite
  • plain.email.replyPlain email: replywrite
  • plain.email.send_bulkPlain email: send bulkwrite
  • plain.email.send_newPlain email: send newwrite
  • plain.email_suppression.deletePlain email suppression: deletedestructive
  • plain.email_suppression.getGet Plain email suppressionread
  • plain.embed_token.mintPlain embed token: mintwrite
  • plain.escalation_path.createPlain escalation path: createwrite
  • plain.escalation_path.deletePlain escalation path: deletedestructive
  • plain.escalation_path.getGet Plain escalation pathread
  • plain.escalation_path.listList Plain escalation pathsread
  • plain.escalation_path.updatePlain escalation path: updatewrite
  • plain.generated_reply.addPlain generated reply: addwrite
  • plain.generated_reply.listList Plain generated replysread
  • plain.generated_reply.updatePlain generated reply: updatewrite
  • plain.heatmap_metric.getGet Plain heatmap metricread
  • plain.help_center.createPlain help center: createwrite
  • plain.help_center.deletePlain help center: deletedestructive
  • plain.help_center.getGet Plain help centerread
  • plain.help_center.listList Plain help centersread
  • plain.help_center.updatePlain help center: updatewrite
  • plain.help_center.update_custom_domainPlain help center: update custom domainwrite
  • plain.help_center.verify_custom_domainPlain help center: verify custom domainwrite
  • plain.help_center_ai_conversation.getGet Plain help center ai conversationread
  • plain.help_center_ai_conversation.listList Plain help center ai conversationsread
  • plain.help_center_article.deletePlain help center article: deletedestructive
  • plain.help_center_article.generatePlain help center article: generatewrite
  • plain.help_center_article.getGet Plain help center articleread
  • plain.help_center_article.get_by_slugPlain help center article: get by slugread
  • plain.help_center_article.upsertPlain help center article: upsertwrite
  • plain.help_center_article_group.createPlain help center article group: createwrite
  • plain.help_center_article_group.deletePlain help center article group: deletedestructive
  • plain.help_center_article_group.getGet Plain help center article groupread
  • plain.help_center_article_group.get_by_slugPlain help center article group: get by slugread
  • plain.help_center_article_group.updatePlain help center article group: updatewrite
  • plain.help_center_index.getGet Plain help center indexread
  • plain.help_center_index.updatePlain help center index: updatewrite
  • plain.import_job.listList Plain import jobsread
  • plain.import_job_definition.getGet Plain import job definitionread
  • plain.import_job_definition.updatePlain import job definition: updatewrite
  • plain.import_sync.createPlain import sync: createwrite
  • plain.importer.account_listsPlain importer: account listsread
  • plain.importer.tenant_listsPlain importer: tenant listsread
  • plain.indexed_document.createPlain indexed document: createwrite
  • plain.indexed_document.listList Plain indexed documentsread
  • plain.interpolation_variable.listList Plain interpolation variablesread
  • plain.issue_tracker_field.listList Plain issue tracker fieldsread
  • plain.issue_tracker_issue.createPlain issue tracker issue: createwrite
  • plain.knowledge_gap.getGet Plain knowledge gapread
  • plain.knowledge_gap.listList Plain knowledge gapsread
  • plain.knowledge_source.createPlain knowledge source: createwrite
  • plain.knowledge_source.deletePlain knowledge source: deletedestructive
  • plain.knowledge_source.getGet Plain knowledge sourceread
  • plain.knowledge_source.listList Plain knowledge sourcesread
  • plain.knowledge_source.reindexPlain knowledge source: reindexwrite
  • plain.knowledge_source.searchSearch Plain knowledge sourcesread
  • plain.knowledge_source_citation.list_by_threadPlain knowledge source citation: list by threadread
  • plain.label.addPlain label: addwrite
  • plain.label.removePlain label: removedestructive
  • plain.label_type.accept_suggestedPlain label type: accept suggestedwrite
  • plain.label_type.archivePlain label type: archivewrite
  • plain.label_type.createPlain label type: createwrite
  • plain.label_type.dismiss_suggestedPlain label type: dismiss suggesteddestructive
  • plain.label_type.getGet Plain label typeread
  • plain.label_type.get_by_external_idPlain label type: get by external idread
  • plain.label_type.listList Plain label typesread
  • plain.label_type.list_suggestedPlain label type: list suggestedread
  • plain.label_type.movePlain label type: movewrite
  • plain.label_type.unarchivePlain label type: unarchivewrite
  • plain.label_type.updatePlain label type: updatewrite
  • plain.linear_app_integration.deletePlain linear app integration: deletedestructive
  • plain.linear_app_integration.getGet Plain linear app integrationread
  • plain.machine_user.createPlain machine user: createwrite
  • plain.machine_user.deletePlain machine user: deletedestructive
  • plain.machine_user.getGet Plain machine userread
  • plain.machine_user.listList Plain machine usersread
  • plain.machine_user.updatePlain machine user: updatewrite
  • plain.me.machine_userPlain me: machine userread
  • plain.me.permissionsPlain me: permissionsread
  • plain.me.workspacePlain me: workspaceread
  • plain.ms_teams_channel.list_membersPlain ms teams channel: list membersread
  • plain.ms_teams_message.sendPlain ms teams message: sendwrite
  • plain.note.createPlain note: createwrite
  • plain.note.deletePlain note: deletedestructive
  • plain.note.updatePlain note: updatewrite
  • plain.oauth_app.createPlain oauth app: createwrite
  • plain.oauth_app.deletePlain oauth app: deletedestructive
  • plain.oauth_app.disablePlain oauth app: disabledestructive
  • plain.oauth_app.enablePlain oauth app: enablewrite
  • plain.oauth_app.getGet Plain oauth appread
  • plain.oauth_app.listList Plain oauth appsread
  • plain.oauth_app.updatePlain oauth app: updatewrite
  • plain.permissions.getGet Plain permissionsread
  • plain.plain_help_center.searchSearch Plain plain help centersread
  • plain.role.listList Plain rolesread
  • plain.role.upsert_scopesPlain role: upsert scopeswrite
  • plain.saved_threads_view.createPlain saved threads view: createwrite
  • plain.saved_threads_view.deletePlain saved threads view: deletedestructive
  • plain.saved_threads_view.getGet Plain saved threads viewread
  • plain.saved_threads_view.listList Plain saved threads viewsread
  • plain.saved_threads_view.updatePlain saved threads view: updatewrite
  • plain.service_authorization.deletePlain service authorization: deletedestructive
  • plain.service_authorization.getGet Plain service authorizationread
  • plain.service_authorization.listList Plain service authorizationsread
  • plain.service_level_agreement.createPlain service level agreement: createwrite
  • plain.service_level_agreement.deletePlain service level agreement: deletedestructive
  • plain.service_level_agreement.updatePlain service level agreement: updatewrite
  • plain.service_level_agreement_policy.createPlain service level agreement policy: createwrite
  • plain.service_level_agreement_policy.deletePlain service level agreement policy: deletedestructive
  • plain.service_level_agreement_policy.getGet Plain service level agreement policyread
  • plain.service_level_agreement_policy.listList Plain service level agreement policysread
  • plain.service_level_agreement_policy.updatePlain service level agreement policy: updatewrite
  • plain.setting.deletePlain setting: deletedestructive
  • plain.setting.getGet Plain settingread
  • plain.setting.updatePlain setting: updatewrite
  • plain.sidekick_custom_skill.createPlain sidekick custom skill: createwrite
  • plain.sidekick_custom_skill.deletePlain sidekick custom skill: deletedestructive
  • plain.sidekick_custom_skill.getGet Plain sidekick custom skillread
  • plain.sidekick_custom_skill.updatePlain sidekick custom skill: updatewrite
  • plain.sidekick_github.accessible_reposPlain sidekick github: accessible reposread
  • plain.sidekick_github_config.getGet Plain sidekick github configread
  • plain.sidekick_github_config.updatePlain sidekick github config: updatewrite
  • plain.sidekick_mcp_server.createPlain sidekick mcp server: createwrite
  • plain.sidekick_mcp_server.deletePlain sidekick mcp server: deletedestructive
  • plain.sidekick_mcp_server.getGet Plain sidekick mcp serverread
  • plain.sidekick_mcp_server.listList Plain sidekick mcp serversread
  • plain.sidekick_mcp_server.refresh_toolsPlain sidekick mcp server: refresh toolswrite
  • plain.sidekick_mcp_server.updatePlain sidekick mcp server: updatewrite
  • plain.sidekick_posthog_config.getGet Plain sidekick posthog configread
  • plain.sidekick_posthog_config.updatePlain sidekick posthog config: updatewrite
  • plain.sidekick_question.answerPlain sidekick question: answerwrite
  • plain.sidekick_question.dismissPlain sidekick question: dismissdestructive
  • plain.sidekick_service_config.getGet Plain sidekick service configread
  • plain.sidekick_service_config.updatePlain sidekick service config: updatewrite
  • plain.sidekick_settings.getGet Plain sidekick settingsread
  • plain.sidekick_settings.updatePlain sidekick settings: updatewrite
  • plain.sidekick_skill.listList Plain sidekick skillsread
  • plain.sidekick_slack_config.updatePlain sidekick slack config: updatewrite
  • plain.sidekick_tool.arg_optionsPlain sidekick tool: arg optionsread
  • plain.sidekick_tool.list_availablePlain sidekick tool: list availableread
  • plain.single_value_metric.getGet Plain single value metricread
  • plain.slack_auto_join_rule.listList Plain slack auto join rulesread
  • plain.slack_auto_join_rule.setPlain slack auto join rule: setwrite
  • plain.slack_channel.bulk_joinPlain slack channel: bulk joinwrite
  • plain.slack_channel_settings.bulk_updatePlain slack channel settings: bulk updatewrite
  • plain.slack_message.sendPlain slack message: sendwrite
  • plain.slack_message_reaction.togglePlain slack message reaction: togglewrite
  • plain.slack_teammate.list_suggestedPlain slack teammate: list suggestedread
  • plain.slack_user.getGet Plain slack userread
  • plain.slack_user.searchSearch Plain slack usersread
  • plain.snippet.createPlain snippet: createwrite
  • plain.snippet.deletePlain snippet: deletedestructive
  • plain.snippet.getGet Plain snippetread
  • plain.snippet.listList Plain snippetsread
  • plain.snippet.updatePlain snippet: updatewrite
  • plain.task.createPlain task: createwrite
  • plain.task.deletePlain task: deletedestructive
  • plain.task.getGet Plain taskread
  • plain.task.get_by_refPlain task: get by refread
  • plain.task.listList Plain tasksread
  • plain.task.updatePlain task: updatewrite
  • plain.team_settings.getGet Plain team settingsread
  • plain.team_settings.upsertPlain team settings: upsertwrite
  • plain.tenant.createPlain tenant: createwrite
  • plain.tenant.deletePlain tenant: deletedestructive
  • plain.tenant.getGet Plain tenantread
  • plain.tenant.importPlain tenant: importwrite
  • plain.tenant.listList Plain tenantsread
  • plain.tenant.searchSearch Plain tenantsread
  • plain.tenant.update_tierPlain tenant: update tierwrite
  • plain.tenant.upsertPlain tenant: upsertwrite
  • plain.tenant_field.deletePlain tenant field: deletedestructive
  • plain.tenant_field.upsertPlain tenant field: upsertwrite
  • plain.tenant_field_schema.deletePlain tenant field schema: deletedestructive
  • plain.tenant_field_schema.importPlain tenant field schema: importwrite
  • plain.tenant_field_schema.import_from_servicePlain tenant field schema: import from servicewrite
  • plain.tenant_field_schema.listList Plain tenant field schemasread
  • plain.tenant_field_schema.remove_mappingPlain tenant field schema: remove mappingdestructive
  • plain.tenant_field_schema.setup_mappingPlain tenant field schema: setup mappingwrite
  • plain.tenant_field_schema.upsertPlain tenant field schema: upsertwrite
  • plain.test_thread.createPlain test thread: createwrite
  • plain.test_thread.create_allPlain test thread: create allwrite
  • plain.test_thread.deletePlain test thread: deletedestructive
  • plain.test_thread.delete_allPlain test thread: delete alldestructive
  • plain.test_thread.listList Plain test threadsread
  • plain.thread.add_additional_assigneesPlain thread: add additional assigneeswrite
  • plain.thread.assignPlain thread: assignwrite
  • plain.thread.change_customerPlain thread: change customerwrite
  • plain.thread.change_priorityPlain thread: change prioritywrite
  • plain.thread.createPlain thread: createwrite
  • plain.thread.create_from_slack_messagePlain thread: create from slack messagewrite
  • plain.thread.deletePlain thread: deletedestructive
  • plain.thread.escalatePlain thread: escalatewrite
  • plain.thread.forkPlain thread: forkwrite
  • plain.thread.getGet Plain threadread
  • plain.thread.get_by_external_idPlain thread: get by external idread
  • plain.thread.get_by_refPlain thread: get by refread
  • plain.thread.get_by_slack_messagePlain thread: get by slack messageread
  • plain.thread.get_by_slack_permalinkPlain thread: get by slack permalinkread
  • plain.thread.importPlain thread: importwrite
  • plain.thread.import_messagesPlain thread: import messageswrite
  • plain.thread.listList Plain threadsread
  • plain.thread.list_by_external_idPlain thread: list by external idread
  • plain.thread.list_deletedPlain thread: list deletedread
  • plain.thread.list_relatedPlain thread: list relatedread
  • plain.thread.lockPlain thread: lockwrite
  • plain.thread.mark_as_donePlain thread: mark as donewrite
  • plain.thread.mark_as_todoPlain thread: mark as todowrite
  • plain.thread.remove_additional_assigneesPlain thread: remove additional assigneesdestructive
  • plain.thread.replyPlain thread: replywrite
  • plain.thread.searchSearch Plain threadsread
  • plain.thread.share_to_user_in_slackPlain thread: share to user in slackwrite
  • plain.thread.snoozePlain thread: snoozewrite
  • plain.thread.unassignPlain thread: unassigndestructive
  • plain.thread.update_accountPlain thread: update accountwrite
  • plain.thread.update_agent_statusPlain thread: update agent statuswrite
  • plain.thread.update_escalation_pathPlain thread: update escalation pathwrite
  • plain.thread.update_external_idPlain thread: update external idwrite
  • plain.thread.update_sla_policyPlain thread: update sla policywrite
  • plain.thread.update_suggested_action_statusPlain thread: update suggested action statuswrite
  • plain.thread.update_tenantPlain thread: update tenantwrite
  • plain.thread.update_tierPlain thread: update tierwrite
  • plain.thread.update_titlePlain thread: update titlewrite
  • plain.thread_channel_association.createPlain thread channel association: createwrite
  • plain.thread_channel_association.deletePlain thread channel association: deletedestructive
  • plain.thread_channel_association.update_account_membership_policyPlain thread channel association: update account membership policywrite
  • plain.thread_channel_association.update_tenant_membership_policyPlain thread channel association: update tenant membership policywrite
  • plain.thread_cluster.getGet Plain thread clusterread
  • plain.thread_cluster.get_activePlain thread cluster: get activeread
  • plain.thread_cluster.listList Plain thread clustersread
  • plain.thread_cluster.list_paginatedPlain thread cluster: list paginatedread
  • plain.thread_discussion.change_statusPlain thread discussion: change statuswrite
  • plain.thread_discussion.createPlain thread discussion: createwrite
  • plain.thread_discussion.deletePlain thread discussion: deletedestructive
  • plain.thread_discussion.getGet Plain thread discussionread
  • plain.thread_discussion.importPlain thread discussion: importwrite
  • plain.thread_discussion.mark_readPlain thread discussion: mark readwrite
  • plain.thread_discussion.send_messagePlain thread discussion: send messagewrite
  • plain.thread_event.createPlain thread event: createwrite
  • plain.thread_field.bulk_upsertPlain thread field: bulk upsertwrite
  • plain.thread_field.deletePlain thread field: deletedestructive
  • plain.thread_field.upsertPlain thread field: upsertwrite
  • plain.thread_field_schema.createPlain thread field schema: createwrite
  • plain.thread_field_schema.deletePlain thread field schema: deletedestructive
  • plain.thread_field_schema.getGet Plain thread field schemaread
  • plain.thread_field_schema.listList Plain thread field schemasread
  • plain.thread_field_schema.reorderPlain thread field schema: reorderwrite
  • plain.thread_field_schema.updatePlain thread field schema: updatewrite
  • plain.thread_heatmap_metric.getGet Plain thread heatmap metricread
  • plain.thread_link.bulk_createPlain thread link: bulk createwrite
  • plain.thread_link.bulk_deletePlain thread link: bulk deletedestructive
  • plain.thread_link.createPlain thread link: createwrite
  • plain.thread_link.deletePlain thread link: deletedestructive
  • plain.thread_link_candidate.searchSearch Plain thread link candidatesread
  • plain.thread_link_group.listList Plain thread link groupsread
  • plain.thread_single_value_metric.getGet Plain thread single value metricread
  • plain.thread_slack_user.getGet Plain thread slack userread
  • plain.thread_slack_user.searchSearch Plain thread slack usersread
  • plain.thread_time_series_metric.getGet Plain thread time series metricread
  • plain.tier.add_membersPlain tier: add memberswrite
  • plain.tier.createPlain tier: createwrite
  • plain.tier.deletePlain tier: deletedestructive
  • plain.tier.getGet Plain tierread
  • plain.tier.listList Plain tiersread
  • plain.tier.remove_membersPlain tier: remove membersdestructive
  • plain.tier.updatePlain tier: updatewrite
  • plain.time_series_metric.getGet Plain time series metricread
  • plain.timeline_entry.getGet Plain timeline entryread
  • plain.timeline_entry.get_for_threadPlain timeline entry: get for threadread
  • plain.timeline_entry.listList Plain timeline entrysread
  • plain.user.add_labelsPlain user: add labelswrite
  • plain.user.assign_rolesPlain user: assign rolesdestructive
  • plain.user.change_statusPlain user: change statuswrite
  • plain.user.deletePlain user: deletedestructive
  • plain.user.getGet Plain userread
  • plain.user.get_by_emailPlain user: get by emailread
  • plain.user.invite_to_workspacePlain user: invite to workspacewrite
  • plain.user.listList Plain usersread
  • plain.user.remove_labelsPlain user: remove labelsdestructive
  • plain.user.slack_channel_membershipsPlain user: slack channel membershipsread
  • plain.user.sync_working_hoursPlain user: sync working hourswrite
  • plain.webhook_delivery_attempt.listList Plain webhook delivery attemptsread
  • plain.webhook_event.sample_bodyPlain webhook event: sample bodyread
  • plain.webhook_event_type.listList Plain webhook event typesread
  • plain.webhook_target.createPlain webhook target: createwrite
  • plain.webhook_target.deletePlain webhook target: deletedestructive
  • plain.webhook_target.getGet Plain webhook targetread
  • plain.webhook_target.listList Plain webhook targetsread
  • plain.webhook_target.updatePlain webhook target: updatewrite
  • plain.webhook_version.listList Plain webhook versionsread
  • plain.workflow.capabilitiesPlain workflow: capabilitiesread
  • plain.workflow.createPlain workflow: createwrite
  • plain.workflow.deletePlain workflow: deletedestructive
  • plain.workflow.export_templatePlain workflow: export templatewrite
  • plain.workflow.getGet Plain workflowread
  • plain.workflow.listList Plain workflowsread
  • plain.workflow.movePlain workflow: movewrite
  • plain.workflow.triggerPlain workflow: triggerdestructive
  • plain.workflow.updatePlain workflow: updatewrite
  • plain.workflow_execution.getGet Plain workflow executionread
  • plain.workflow_execution.listList Plain workflow executionsread
  • plain.workflow_execution.list_by_entityPlain workflow execution: list by entityread
  • plain.workflow_execution.list_for_workspacePlain workflow execution: list for workspaceread
  • plain.workflow_rule.createPlain workflow rule: createwrite
  • plain.workflow_rule.deletePlain workflow rule: deletedestructive
  • plain.workflow_rule.getGet Plain workflow ruleread
  • plain.workflow_rule.listList Plain workflow rulesread
  • plain.workflow_rule.toggle_publishedPlain workflow rule: toggle publishedwrite
  • plain.workflow_rule.triggerPlain workflow rule: triggerdestructive
  • plain.workflow_rule.updatePlain workflow rule: updatewrite
  • plain.workflow_share_link.createPlain workflow share link: createwrite
  • plain.workflow_share_link.getGet Plain workflow share linkread
  • plain.workflow_step.bulk_upsertPlain workflow step: bulk upsertwrite
  • plain.workflow_step.createPlain workflow step: createwrite
  • plain.workflow_step.deletePlain workflow step: deletedestructive
  • plain.workflow_step.updatePlain workflow step: updatewrite
  • plain.workflow_template.getGet Plain workflow templateread
  • plain.workflow_template.listList Plain workflow templatesread
  • plain.workspace.getGet Plain workspaceread
  • plain.workspace.updatePlain workspace: updatewrite
  • plain.workspace_chat_settings.getGet Plain workspace chat settingsread
  • plain.workspace_cursor_integration.deletePlain workspace cursor integration: deletedestructive
  • plain.workspace_cursor_integration.getGet Plain workspace cursor integrationread
  • plain.workspace_discord_channel_integration.deletePlain workspace discord channel integration: deletedestructive
  • plain.workspace_discord_channel_integration.getGet Plain workspace discord channel integrationread
  • plain.workspace_discord_channel_integration.listList Plain workspace discord channel integrationsread
  • plain.workspace_discord_integration.deletePlain workspace discord integration: deletedestructive
  • plain.workspace_discord_integration.getGet Plain workspace discord integrationread
  • plain.workspace_discord_integration.listList Plain workspace discord integrationsread
  • plain.workspace_email_domain_settings.createPlain workspace email domain settings: createwrite
  • plain.workspace_email_domain_settings.deletePlain workspace email domain settings: deletedestructive
  • plain.workspace_email_settings.add_alternate_support_addressPlain workspace email settings: add alternate support addresswrite
  • plain.workspace_email_settings.getGet Plain workspace email settingsread
  • plain.workspace_email_settings.remove_alternate_support_addressPlain workspace email settings: remove alternate support addressdestructive
  • plain.workspace_email_settings.updatePlain workspace email settings: updatewrite
  • plain.workspace_email_settings.verify_dnsPlain workspace email settings: verify dnswrite
  • plain.workspace_email_settings.verify_forwardingPlain workspace email settings: verify forwardingwrite
  • plain.workspace_file.create_download_urlPlain workspace file: create download urlwrite
  • plain.workspace_file.create_upload_urlPlain workspace file: create upload urlwrite
  • plain.workspace_file.deletePlain workspace file: deletedestructive
  • plain.workspace_hmac.getGet Plain workspace hmacread
  • plain.workspace_hmac.regeneratePlain workspace hmac: regeneratewrite
  • plain.workspace_invite.deletePlain workspace invite: deletedestructive
  • plain.workspace_invite.listList Plain workspace invitesread
  • plain.workspace_ms_teams_integration.deletePlain workspace ms teams integration: deletedestructive
  • plain.workspace_ms_teams_integration.getGet Plain workspace ms teams integrationread
  • plain.workspace_setup.getGet Plain workspace setupread
  • plain.workspace_slack_channel_integration.deletePlain workspace slack channel integration: deletedestructive
  • plain.workspace_slack_channel_integration.getGet Plain workspace slack channel integrationread
  • plain.workspace_slack_channel_integration.listList Plain workspace slack channel integrationsread
  • plain.workspace_slack_channel_integration.refreshPlain workspace slack channel integration: refreshwrite
  • plain.workspace_slack_integration.deletePlain workspace slack integration: deletedestructive
  • plain.workspace_slack_integration.getGet Plain workspace slack integrationread
  • plain.workspace_slack_integration.listList Plain workspace slack integrationsread
  • plain.workspace_slack_sidekick_integration.deletePlain workspace slack sidekick integration: deletedestructive
  • plain.workspace_slack_sidekick_integration.getGet Plain workspace slack sidekick integrationread
  • plain.workspace_slack_sidekick_integration.refreshPlain workspace slack sidekick integration: refreshwrite

Questions

The Plain MCP server, answered.

Is there a Plain MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 523 Plain actions, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Plain.

What do I need to connect Plain?

Plain API key (plainApiKey_...). The free call account { op: "connections.requirements", service: "plain" } lists exactly what to paste.

Can an AI agent delete or change things in Plain?

Only if its key allows it, and only with an explicit confirmation. 87 Plain actions are destructive, including plain customer: delete, plain account: delete and plain user: delete. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

Will an AI agent use up my Plain API limit?

actionlake paces every call to the limits in the Plain service file: 600 calls a minute per connection. Repeated reads are answered from cache (200 Plain actions can be), which never reaches Plain.

What does a Plain action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (72 Plain actions page). Cache hits, searches, dry runs and calls Plain refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

Which Plain API does it cover?

The Plain API graphql-v1 at core-api.uk.plain.com. It is built from Plain's documentation as read on 23 October 2026. 523 actions in 1 area, each one in the signed service file (version 1.0.0).

Can I combine Plain with my other systems?

Yes. ask joins Plain to ConnectWise PSA or NetSuite on the same customer and returns the answer rather than every row. Plain maps crm.company, which 227 other connectors also map.

Does actionlake keep my Plain data, and where?

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Plain credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

Which AI clients can use it?

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

Give your agent Plain today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.