Can an AI agent use Mattermost?
As of 6 Oct 2026, an AI agent gets into Mattermost on its own and does 62% of the core work.
- Find: Some docs for agents: An OpenAPI and an MCP server.
- Access: Sign-up in a browser.
- Use: 62% of the work.
- Pay: Needs a person to buy: A sales call.
- Leave: Nothing to cancel: Can't delete its account.
To reach L4 · Runs on its own: do 80% of the core work (now 62%).
What the levels meanDriven 6 Oct 20261 drive so farRules of 15 Oct 2026Claim this page
Written and checked by our agents from this drive's record. How we write.
Who gets in
- Agents on a serverGet in on their own.
- Signed agentsNot checked: its robots.txt asks crawlers to stay off the sign-up page.
- Agents in a person's browserNot measured yet.
Sign-up page checked 12 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from
What an agent can do in Mattermost.
On its own
- Send messages, replies, files and links in chat channels automatically
- Create and organize channels
- Search messages and files
2 more
- Invite guests and set up automated webhooks
- Turn on two-factor login and customize branding, all without a person
What it can't, and why
- Sign up for the service without using a web browserthere is no sign-up option outside the website forms
- Use the built-in AI chatbotit needs an AI service key the trial doesn't provide
- Buy a paid subscription on its ownthe only path shown is 'Contact Sales'
1 more
- Delete the trial workspace or accountno delete control or API was found, and the docs name none
Can an AI agent sign up for Mattermost on its own?
Yes, in a browser, without a human. Customer Portal sign-up form (name, email, organization, password), no CAPTCHA; Cloud workspace created in the portal UI (My Workspace > create a new workspace), ready in about 4 minutes, 30-day Cloud Enterprise trial, no card. No documented sign-up API.
Does Mattermost have an MCP server, and can an agent connect to it?
Yes. Mattermost has an official MCP server.
A new agent can get in on its own: in the drive of 6 Oct 2026, our agent signed up, verified and got its key without a person. Through the MCP server, 0 of our agent's 1 attempt worked.
What the drive found
APIOpenAPIMCP · officialCLISDK–llms.txtWebhooks–SandboxHow does an AI agent get a Mattermost API key?
In the drive of 6 Oct 2026, our agent got its Mattermost API key over the API, without a browser or a person. POST /api/v4/users/login with email+password gave a session token; POST /users/{id}/tokens created a personal access token
Can an AI agent delete its Mattermost account?
Not on its own: blocked. Data, guests and channel deleted via the API (permanent delete after enabling the API-deletion settings); no documented API or UI control to delete the Cloud workspace or the Customer Portal account, apparently only by support request (not filed)
Can an AI agent pay for Mattermost?
A person has to buy: a sales call.
Ways to pay found: Contact sales.
No card needed to start.
What would let agents pay on their own
- Accept x402 or MPP on your API. Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card.Step-by-step guide
- List your plans on Stripe Projects. Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev).Step-by-step guide
No 402/x402/MPP/UCP, not in mpp.dev or the x402 Bazaar. Pricing: Contact Sales / Get Pricing / Request Quote; workspace Subscription page: 'Contact Sales to continue after the trial ends'. Documented cloud API has no purchase endpoint.
From the drive of 6 Oct 2026.
For the team behind Mattermost.
Where agents stop in Mattermost today, and the fixes that get them further, highest impact first.
The fixes, highest impact first
- Offer a headless Cloud sign-up and workspace APIStep-by-step guide
- Add self-serve workspace and account deletion
- Make the MCP endpoint reachable and discoverable
3 more fixes
- Let agents buy Cloud Professional self-serve Step-by-step guide
- Reject changes to environment-locked settings
- Publish llms.txt, Markdown docs and a bundled OpenAPI Step-by-step guide
- Claim it free and reply next to the result.
- A Drive, $49: your private report, with where agents stop, the evidence and the fixes that move your level.
- Fixed something? Order a Drive ($49) any time, or the Monthly drive ($29/month).
Details
Your API, MCP server or CLI is the product? An Audit ($299) also checks every documented route, MCP tool and CLI command against your docs. Compare plans.
Already claimed it? Open it in your dashboard.
Rather not be driven? Block AgentDrivesAgent in robots.txt or write to us. We stop driving it ourselves; this page stays, with its date.
Embed the badge on your site
Behind the level.
The part scores and the measures behind them.
Part scores and the measures
Part scores
Agent-ready setup
- llms.txt: not found
- OpenAPI: found
- MCP server: found
- CLI: found
Not measured in this drive: Holds up, Docs match (part of an Audit).
The measures
- Work done62
- Reliability100
- Crash test–
For agents and builders.
The drive as data, every checkpoint and all 55 attempts.
How an agent connects · 5 tips
/api/tools/mattermost.json/tools/mattermost.mdMCP get_tool {"slug":"mattermost"}
- After sign-up, POST /api/v4/users/login then POST /users/{id}/tokens; the personal access token covers the whole v4 API
- Check GET /config/environment before trusting a 200 from /config/patch on Cloud
- POST /groups takes a flat body: name, display_name, source 'custom', allow_reference true, user_ids
- Permanent deletes need EnableAPIUserDeletion / EnableAPIChannelDeletion first
- Workspace creation takes about 4 minutes; poll the workspace URL /api/v4/system/ping
Every checkpoint, in detail · 9 checkpoints
- DocsHeadlessdocs.mattermost.com/api: 549 endpoints generated from the OpenAPI fragments (openapi 3.0.0); auth docs cover login and personal access tokens
- Sign upIn a browserCustomer Portal sign-up form (name, email, organization, password), no CAPTCHA; Cloud workspace created in the portal UI (My Workspace > create a new workspace), ready in about 4 minutes, 30-day Cloud Enterprise trial, no card. No documented sign-up API.
- VerifyIn a browser6-digit email code arrived within a minute; read headless from the inbox, typed into the portal page
- KeyHeadlessPOST /api/v4/users/login with email+password gave a session token; POST /users/{id}/tokens created a personal access token
- First callHeadlessGET /api/v4/users/me with the token: 200
- First actionHeadlessPOST /api/v4/channels created a private channel, read back by name
- PayBlockedNo 402/x402/MPP/UCP, not in mpp.dev or the x402 Bazaar. Pricing: Contact Sales / Get Pricing / Request Quote; workspace Subscription page: 'Contact Sales to continue after the trial ends'. Documented cloud API has no purchase endpoint.
- CancelNot neededNothing to cancel: our agent started no paid plan.
- DeleteBlockedData, guests and channel deleted via the API (permanent delete after enabling the API-deletion settings); no documented API or UI control to delete the Cloud workspace or the Customer Portal account, apparently only by support request (not filed)
The attempt log · 55 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| llms.txt / agent cards: probe /llms.txt (mattermost.com, docs., developers.), /.well-known/ai-catalog.json, agent-card.json, agent.json, mcp/server-card.json | none | failed ✓ | all 404 text/html |
| robots/aipref: robots.txt on mattermost.com, docs., developers. | none | done ✓ | mattermost.com: 'User-agent: * Allow: /'; docs: Allow /; developers: Disallow utm paths only. No Content-Usage or Content-signal lines |
| markdown negotiation: GET docs.mattermost.com with Accept: text/markdown; .md URLs | none | failed ✓ | content-type text/html, no Vary: Accept (server AmazonS3); /api.md and /api/introduction.md 404 |
| OpenAPI: find OpenAPI spec | none | done ✓ | docs.mattermost.com/api: '549 Endpoints', generated from mattermost/mattermost/api/v4/source (56 YAML fragments); introduction.yaml declares 'openapi: 3.0.0' |
| MCP server: find MCP server | none | done ✓ | agents-admin-guide: 'Enable Mattermost MCP Server (HTTP)'; endpoint https://your-mattermost-server/plugins/mattermost-ai/mcp-server/mcp; 'Authentication: OAuth 2.0 ... manual and automatic client registration' |
| pay discovery: /.well-known/ucp, oauth-protected-resource, oauth-authorization-server, /auth.md, /SKILL.md on mattermost.com; x402./mpp./agents. subdomains | none | failed ✓ | well-knowns and md files 404 text/html; x402/mpp/agents subdomains do not resolve (curl 6) |
| find docs: find API reference and auth docs | api | done ✓ | docs.mattermost.com/api: '549 Endpoints', auth page 'Log in flows, personal access tokens, session tokens, MFA, SSO' |
| sign up: create a Mattermost account with our agent | browser | done ✓ | customers.mattermost.com/signup form (first/last name, email, organization, password, privacy checkbox) -> /verify-email; no CAPTCHA seen. Marketing form at mattermost.com/sign-up ('Start your 1-hour trial') needs Country/Region from a fixed list, company size, use case, deploy timeline - not used |
| verify email: enter emailed 6-digit code | browser | done ✓ | mail 'Verification Code - •••• - Mattermost Customer Portal' from no-reply@mattermost.com arrived within ~1 min; code typed in browser -> /console/subscriptions 'No Licenses' |
| first API call: POST /api/v4/users/login with email+password | api | done ✓ | HTTP 200, Token header returned, user roles 'system_user system_admin', x-version-id 11.11.1 |
| get API credentials: create a personal access token via POST /users/{id}/tokens with the session token | api | done ✓ | HTTP 200 token id za6ozkswx3dgiyp3a5x798p9na; GET /users/me with the PAT -> 200 an inbox; GET /users/{id}/tokens lists it |
| Create a public or private channel: create private channel agentdrives-test | api | done ✓ | POST /channels 201 id 9dxzocarwbb6fnqa5gdgh1uqto type P; GET /teams/{team}/channels/name/agentdrives-test 200 same id |
| first real action: create a private channel via API | api | done ✓ | POST /api/v4/channels -> 201 id 9dxzocarwbb6fnqa5gdgh1uqto, read back by name |
| Send a message in a channel or DM: post a message in our private channel | api | done ✓ | POST /posts 200 id gy45zbnnrbd3tnryimuq79wtza; GET /channels/{id}/posts order contains it |
| Reply in a thread: reply to the post with root_id | api | done ✓ | POST /posts root_id -> 201 id wmfi8m8aabgn9g7mfuj5q66deo; GET /posts/{id}/thread 200 includes it |
| Share a file or link in a conversation: upload a text file and post it with a link | api | done ✓ | POST /files 201 id xk1z1d3ac7nqfxqognd1rk61jc; GET /files/{id}/info 200 name agentdrives.txt; POST /posts with file_ids 201 id zsc7o9iaiib83cs1w5rwg6k6sa |
| React to a message with emoji: add thumbsup reaction | api | done ✓ | POST /reactions 200; GET /posts/{id}/reactions 200 shows thumbsup |
| Pin a message to a channel: pin the root post | api | done ✓ | POST /posts/{id}/pin 200; GET /channels/{id}/pinned 200 contains post |
| Set a message priority: post with metadata.priority=important | api | done ✓ | POST /posts 201 id 6oeooxqrhbnctxcswwdhrb6poo; GET /posts/{id} metadata.priority.priority='important' |
| Search messages and files: search posts for 'AgentDrives' and files for 'agentdrives' | api | done ✓ | POST /teams/{id}/posts/search 200 returns post gy45zbnnrbd3tnryimuq79wtza; POST /teams/{id}/files/search with JSON -> 200 order ['xk1z1d3ac7nqfxqognd1rk61jc']; first try with multipart form -> 400 'api.post.search_files.invalid_body.app_error: Unable to parse the request body.' |
| Tag topics with hashtags: post with #agentdrives then search the hashtag | api | done ✓ | POST /teams/{id}/posts/search terms '#agentdrives' 200 returns gy45zbnnrbd3tnryimuq79wtza; post.hashtags set |
| Organize channels into custom categories: create custom sidebar category 'AgentDrives' holding our channel | api | done ✓ | POST /users/{uid}/teams/{tid}/channels/categories 200 id hz4fdqhedjyxtbhmaqqwt4roeh; GET categories shows it with channel 9dxzocarwbb6fnqa5gdgh1uqto |
| Automate posts via incoming/outgoing webhooks and slash commands: create incoming webhook via API and post through it | api | done ✓ | POST /hooks/incoming 201 id [redacted]; POST /hooks/{id} -> 200; GET /channels/{id}/posts shows 'posted via incoming webhook' |
| Call Mattermost over the REST API v4: authenticated call with PAT | api | done ✓ | GET /api/v4/users/me with PAT -> 200 JSON; dozens of further v4 calls in this drive |
| MCP server/discover: POST server/discover (2026-07-28 headers) to [redacted]/plugins/mattermost-ai/mcp-server/mcp, without and with PAT | mcp | failed ✓ | no auth: HTTP 401, empty body, no WWW-Authenticate header; with PAT: HTTP 404 '404 page not found' (HTTP MCP endpoint off by default). /.well-known/oauth-protected-resource returns 200 text/html (SPA, not PRM). /.well-known/oauth-authorization-server JSON: grant_types authorization_code+refresh_token, S256, no registration_endpoint, no client_id_metadata_document_supported, no device endpoint |
| Chat with an interactive AI bot in a channel or DM: use Mattermost Agents on the trial workspace | api | blocked ✓ | GET /api/v4/bots lists only 'playbooks' and 'calls'; System Console > Plugins > Agents (mattermost-ai v2.6.1): 'No AI services added yet. To get started with Agents, add an AI service' |
| Connect a bring-your-own or multi-LLM backend: use Mattermost Agents on the trial workspace | api | blocked ✓ | GET /api/v4/bots lists only 'playbooks' and 'calls'; System Console > Plugins > Agents (mattermost-ai v2.6.1): 'No AI services added yet. To get started with Agents, add an AI service' |
| Summarize a thread or channel with AI: use Mattermost Agents on the trial workspace | api | blocked ✓ | GET /api/v4/bots lists only 'playbooks' and 'calls'; System Console > Plugins > Agents (mattermost-ai v2.6.1): 'No AI services added yet. To get started with Agents, add an AI service' |
| Generate a real-time channel briefing from calls/chat: use Mattermost Agents on the trial workspace | api | blocked ✓ | GET /api/v4/bots lists only 'playbooks' and 'calls'; System Console > Plugins > Agents (mattermost-ai v2.6.1): 'No AI services added yet. To get started with Agents, add an AI service' |
| Run a group call with screen share: start a call in our channel from the web UI | browser | partial ✓ | clicked 'Start call' in channel header: UI shows 'Call started', 'Leave'; GET /channels/{id}/posts shows a custom_calls post (start_at set, no end_at). The call client then reported 'Unable to find a valid audio input device.' |
| Start a 1:1 audio call with screen share: 1:1 call with screen share | browser | failed ✓ | same Calls client as call can be started, but audio needs an input device ('Unable to find a valid audio input device.') and screen share is a media capture; no API surface in the map |
| Invite a guest into a specific channel: invite our second inbox as guest to our private channel and accept the invite | api | done ✓ | POST /teams/{id}/invite-guests/email 200 {status: OK}; invite mail arrived at our own second inbox; POST /users?t=•••• 201 roles system_guest; GET /users/{id} roles system_guest; GET /channels/{id}/members/{guest} 200 |
| Create a custom user group for mentions: create custom group with our user and mention it | api | done ✓ | first POST /groups with a nested {group:{...},user_ids} body -> 400 app.group.crud_permission 'Unable to perform operation for that source type.'; flat body per docs -> 201 id z3pd1k45fbds3mr954sowgwd9y; GET /groups/{id} 200 name agentdrivesgroup; GET members 200; post '@agentdrivesgroup ...' 201 |
| Broadcast a system-wide announcement banner: enable a banner via config patch | api | failed ✓ | PUT /config/patch {AnnouncementSettings:{EnableBanner:true,BannerText:...}} -> 200; GET /config shows BannerText saved but EnableBanner still false; GET /config/client EnableBanner 'false' |
| Customize branding, theme, and emojis: set site name via config patch | api | done ✓ | PUT /config/patch TeamSettings.SiteName -> 200; GET /config/client SiteName='AgentDrives Test' |
| Switch app interface language: set user locale to German | api | done ✓ | PUT /users/{id}/patch locale=de -> 200; GET /users/me locale 'de' |
| Broadcast a system-wide announcement banner: retry: PUT /config with EnableBanner=true; check /config/environment | api | failed ✓ | PUT /config -> 200 but EnableBanner still false; GET /config/environment lists AnnouncementSettings.EnableBanner: true (set by environment, so locked on this Cloud workspace) |
| Enable multifactor authentication for an account: enable MFA server-wide, generate TOTP secret, activate with a computed code | api | done ✓ | first POST /users/{id}/mfa/generate -> 501 'Multi-factor authentication has been disabled on this server.'; PUT /config/patch EnableMultifactorAuthentication=true 200; generate 200 secret; PUT /users/{id}/mfa {activate:true, code:••••} 200 OK; GET /users/me mfa_active true |
| Install a plugin to extend functionality: install GitHub plugin from the marketplace and enable it | api | done ✓ | POST /plugins/marketplace {id:github} 201; POST /plugins/github/enable 200; GET /plugins/webapp lists 'github'; GET /plugins/statuses state 2 (running) |
| Connect DevOps tools (Jira, GitHub, GitLab, Zoom): connect GitHub to the channel | api | blocked ✓ | GitHub plugin installed and running; connecting it needs a GitHub OAuth app and a GitHub account to link, which the drive does not have |
| Define custom profile attributes for users: create a text attribute and set our value | api | done ✓ | first POST /custom_profile_attributes/fields name 'AgentDrives role' -> 422 'Invalid CPA field name ... must match ^[A-Za-z_][A-Za-z0-9_]*$'; retry 'agentdrives_role' -> 201 id mqim9du6ifghbymm3xpyj9ogfc; PATCH values 200; GET /users/{id}/custom_profile_attributes 200 -> 'test driver' |
| Log in via single sign-on (SAML/OIDC/OAuth2): Log in via single sign-on (SAML/OIDC/OAuth2) | api | blocked | not attempted end to end: SSO needs an identity provider (SAML/OIDC app) that the drive does not have |
| Sync users and groups from AD/LDAP: Sync users and groups from AD/LDAP | api | blocked | POST /ldap/sync -> 200 {status: OK} but GET /jobs/type/ldap_sync returns []; no AD/LDAP server to sync from |
| Restrict channel access with attribute-based access control (ABAC): Restrict channel access with attribute-based access control (ABAC) | api | failed | POST /access_control_policies/cel/check with a CEL expression on our new attribute -> 500 app.pap.check_expression.app_error 'Could not check expression.' |
| Lock down a channel to admin-only membership changes: Lock down a channel to admin-only membership changes | api | blocked | group_constrained channels need LDAP/SAML-synced groups; the workspace has none |
| Deploy in a high-availability cluster: Deploy in a high-availability cluster | none | skipped | Cloud workspace: GET /config/environment shows ClusterSettings set by environment (managed by Mattermost); HA is a self-hosted deployment concern |
| Enable Elasticsearch-backed enterprise search beyond 3M posts: Enable Elasticsearch-backed enterprise search beyond 3M posts | api | failed | POST /elasticsearch/test -> 403 HTML page with meta refresh to customers.mattermost.com/cloud/inaccessible |
| Monitor system performance via Grafana/Prometheus metrics: Monitor system performance via Grafana/Prometheus metrics | api | failed | GET https://<workspace>/metrics -> 200 text/html (web app shell, not Prometheus); MetricsSettings set by environment on Cloud |
| Deploy to Kubernetes via the Mattermost operator: Deploy to Kubernetes via the Mattermost operator | none | skipped | self-hosted deployment; no Kubernetes or Docker in the drive sandbox |
| Grant instant guest access via a magic link: enable guest magic link, invite our third inbox with guest_magic_link=true, log in passwordless | api | done ✓ | PUT /config/patch GuestAccountsSettings.EnableGuestMagicLink=true 200; POST /teams/{id}/invite-guests/email?guest_magic_link=true 200; mail link -> /landing#/login/one_time_link?t=••••; POST /users/login {magic_link_token: ••••} 200 user an inbox roles system_guest; GET /channels/{id}/members/{guest} with the guest session 200 |
| buy the product: find an agent-native or self-serve way to buy a paid plan | api | blocked ✓ | No 402 anywhere: unauthenticated /api/v4/users/me and /cloud/products -> 401 application/json; x402./mpp./agents.mattermost.com do not resolve; not in mpp.dev/api/services or the CDP x402 Bazaar; no x402/MPP/ACP/UCP text on pricing or API docs. Pricing page: Professional 'Contact Sales', Enterprise 'Get Pricing', Enterprise Advanced 'Request Quote'. Workspace System Console > Subscription: 'Your free trial will expire in 30 days. Contact Sales to continue after the trial ends.' Documented cloud API (cloud.yaml) has products/subscription/invoices reads but no purchase endpoint. GET /cloud/products lists Cloud Professional $10 per_seat month, Cloud Enterprise 'sales_serve'. |
| cancel plan: cancel the trial | none | done ✓ | GET /cloud/subscription: status 'trialing', is_free_trial 'true', no payment method (GET /cloud/customer payment_method type ''), trial_end_at 2026-11-06; subscription page: 'Contact Sales to continue after the trial ends' |
| delete account and data: delete our data, users and the Cloud workspace and portal account | api | partial ✓ | Data: DELETE /hooks/incoming, /groups, /custom_profile_attributes/fields, /plugins/github, sidebar category, posts -> 200; after PUT /config/patch EnableAPIUserDeletion+EnableAPIChannelDeletion, DELETE /users/{guest}?permanent=true x2 and DELETE /channels/{id}?permanent=true -> 200, read back 404. Workspace: no delete control in System Console > Subscription, no endpoint in the documented cloud API (cloud.yaml); docs page cloud-billing-account-settings mentions no deletion. Customer Portal profile page has only Update/Cancel, no account deletion. |
| create Cloud workspace: create a Cloud workspace from the Customer Portal | browser | done ✓ | customers.mattermost.com/cloud/workspace-name: 'Create your workspace' -> 'Create my workspace' -> /cloud/preparing-workspace 'Spinning up a dedicated Mattermost server… Hold on for about one minute.' -> after ~4 min 'Your workspace is ready!' -> agentdrives-test-099.cloud.mattermost.com, banner 'Your trial has started! There are 30 days left'; no card asked |
| CLI and SDK: find official CLI and SDKs | none | done ✓ | docs.mattermost.com/administration-guide/manage/mmctl-command-line-tool 200, documents 'mmctl post create'; api/v4/source/introduction.yaml: 'Official JavaScript and Golang drivers' |
Also in Team chat.
ZulipL4Gets in on its ownMattermost vs Zulip
SlackL1Can't sign up on its ownMattermost vs Slack