mcp-plain
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PLAIN_API_KEY | Yes | API key for the Plain customer support platform |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_threadsA | List support threads from Plain with optional filters. Returns thread summaries including id, title, status, priority, customer info, labels, and timestamps. |
| get_threadA | Get full details of a specific thread including basic info, customer, labels, custom fields, and timeline entries. Timeline entries that carry files (notes, chats, emails, Slack/Teams/Discord messages, custom entries) include an |
| get_thread_by_refA | Get full details of a thread by its reference number (e.g., T-510). Returns the same details as get_thread. |
| get_thread_fieldsA | Get just the custom field values for a thread. Returns fields like impactLevel, posthogSession, sentrySession, tenant, etc. |
| get_attachment_download_urlA | Get a temporary download URL for an attachment. Use this to download attachment content when needed. The URL expires after a short time. |
| get_attachment_contentA | Fetch the content of an attachment. Returns the content as text for text-based files (text/*, JSON, XML, etc.) or as base64-encoded string for binary files (images, PDFs, etc.). The response includes the encoding type ('text' or 'base64') and MIME type. |
| reply_to_threadA | Send a reply to a customer thread. The reply is sent through the original channel (email, Slack, chat). Provide textContent (required) and optionally markdownContent for rich formatting. |
| mark_thread_as_doneA | Mark a thread as done/resolved. Use this after replying to a thread when the issue has been resolved. |
| upsert_thread_fieldB | Set or update a custom field value on a thread. Use this to write investigation results back to the ticket (e.g., impact_level, app, stage). Field keys use Plain's snake_case format. |
| add_internal_noteA | Post an internal note on a thread. Internal notes are visible to the support team only and are NOT sent to the customer. Use this to post investigation summaries, findings, and recommendations. |
| add_labelsA | Add category labels to a thread. Use get_label_types first to discover available label type IDs for bug, support, feature-request, sales categories. (Prefer update_thread_labels for combined add/remove.) |
| update_thread_labelsA | Add and/or remove category labels on a thread in one call. Both 'add' and 'remove' take label TYPE IDs (from get_label_types); removal resolves each type to the applied label automatically. Type IDs not currently on the thread are ignored. |
| update_thread_priorityA | Set a thread's priority. Plain priority is an integer: 0 = Urgent, 1 = High, 2 = Normal, 3 = Low. |
| update_thread_fieldsA | Set or update multiple custom fields on a thread in one call. Each field key must be an allowlisted snake_case key (e.g. impact_level, agent_readiness, request_feature, app, stage, tenant_id, notion_ticket, github_pr, posthog_session, sentry_session, reported_from); unknown keys are rejected. Field type (BOOL/ENUM/STRING) is auto-detected per key. |
| get_label_typesA | List available label types in the Plain workspace. Returns label type IDs and names. Call this once to discover the IDs for category labels (bug, support, feature-request, sales) before using add_labels. |
| create_threadA | Create a new support thread for a customer. Provide exactly one customer identifier (email, ID, or external ID) and markdown content for the initial message. When using customerEmail, the customer is automatically created in Plain if they don't exist. Optionally set title, description, priority, labels, custom fields, and external ID. |
| list_help_centersA | List all help centers in the Plain workspace. Returns help center IDs, names, descriptions, and types. Use this to discover help center IDs before using other help center tools. |
| get_help_centerA | Get a help center by ID with an overview of its article groups and articles (titles, slugs, statuses). Use this to browse the structure of a help center. |
| list_help_center_articlesA | List articles in a help center with full content (contentHtml). Use this to read all articles at once for review or analysis. |
| get_help_center_articleA | Get a single help center article by ID including its full HTML content, metadata, and group assignment. |
| get_help_center_article_by_slugA | Get a single help center article by its URL slug. Useful when you know the slug from a URL but not the article ID. |
| upsert_help_center_articleA | Create or update a help center article. Articles are always saved as DRAFT status. To update an existing article, provide helpCenterArticleId. Content must be HTML (not markdown). Returns the article data and a link to edit it in the Plain UI. IMPORTANT: When updating an existing article, you MUST preserve the original HTML formatting exactly. Copy the existing contentHtml verbatim and only modify the specific parts that need changing. Do NOT reformat, re-indent, restructure tags, collapse whitespace, change tag styles, or rewrite any HTML that isn't part of your intended edit. Treat the HTML as a surgical edit, not a rewrite. |
| create_help_center_article_groupB | Create a new article group (category/folder) in a help center. Groups organize articles and can be nested. |
| delete_help_center_article_groupA | Delete an article group from a help center. The group must be empty (no articles or child groups). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/orbit-logistics/mcp-plain'
If you have feedback or need assistance with the MCP directory API, please join our Discord server