mattermost-mcp
Provides tools for interacting with a Mattermost server via its REST API v4 using a validated Mattermost session token. Supports authentication status checks, retrieving the current user, listing teams and channels, searching posts, inspecting channels, posts, and threads, and creating posts or replying to threads with enforced TL;DR limits.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mattermost-mcpSearch the engineering team for recent messages about the deployment"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mattermost-mcp
通用的 Mattermost MCP server。使用者在瀏覽器完成站台既有的登入流程後,以 Mattermost 核發的 Session Token 呼叫 REST API v4。
不綁定身份提供者,不需要額外註冊 OAuth Application,也不需要把帳密或 Token 貼給模型。 原生登入與 SSO 的導向由 Mattermost 站台處理;MCP 只接受通過 GET /api/v4/users/me 驗證的 Mattermost Token。
本文件的 registry
npx範例需等mattermost-mcp@0.1.0實際發布到 npm 後才能使用。原始碼開發與 tarball 驗證不需要先發布。
快速開始:npx 設定 MCP
需求:Node.js 22 或更新版本,以及支援 stdio 的 MCP Client。
{
"mcpServers": {
"mattermost": {
"command": "npx",
"args": ["--yes", "mattermost-mcp@0.1.0"],
"env": {
"MATTERMOST_URL": "https://mattermost.example.com"
}
}
}
}MATTERMOST_URL必填,沒有預設站台。使用站台原始網址,不附加
/api/v4、其他路徑、帳密或查詢參數。正式站台必須使用 HTTPS;僅 loopback 本機測試允許 HTTP。
MCP 不需要 checkout repository、執行 TypeScript build 或安裝圖形桌面。
使用固定版本方便重現;升級時同步更新 MCP 與登入小幫手。
完整設定範例位於
examples/mcp.json。
Pi
把設定放在使用者的 ~/.pi/agent/mcp.json,或受信任專案的 .pi/mcp.json。也可以執行:
pi mcp add mattermost \
--env MATTERMOST_URL=https://mattermost.example.com \
-- npx --yes mattermost-mcp@0.1.0專案限定設定使用 pi mcp add -l。設定完成後執行 /reload 或重新啟動 Pi。
其他 MCP Client
使用相同的 command、args 與 env。設定檔路徑與重新載入方式依 Client 而定。Windows Client 若無法直接找到 npx,可依該 Client 的程序啟動方式改用 npx.cmd。
Related MCP server: BlogWarp MCP
初始化登入
先在有桌面的電腦安裝瀏覽器
只需要在操作瀏覽器的電腦執行,不需要在無桌面的遠端 MCP server 執行:
npx --yes mattermost-mcp@0.1.0 install-browser這會安裝套件所使用的 Playwright Chromium,不會在一般 npx 啟動 MCP 時自動下載瀏覽器。Linux 若缺少 Chromium 所需的系統函式庫,請依 Playwright 提示由管理員安裝。
MCP 與瀏覽器在同一台電腦
在 MCP Client 呼叫
mattermost_login({})。它會回傳一次性
npxcommand。在同一台電腦的終端機執行 command,例如:
npx --yes mattermost-mcp@0.1.0 login --ticket PAIRING_CODE完成瀏覽器登入後,執行 mattermost_auth_status 驗證。同機模式不需要 SSH。
MCP 在遠端 server,瀏覽器在本機電腦
遠端 MCP 不需要圖形桌面。先在 MCP Client 呼叫:
mattermost_login({"sshTarget":"my-server"})my-server 是本機可使用的 SSH alias,也可以填 user@example.com。SSH port forwarding 必須連到執行 MCP 的同一台主機、相同網路命名空間;容器內的 loopback 不一定等於 SSH 主機的 loopback。
工具會回傳有效期 5 分鐘的 command,例如:
npx --yes mattermost-mcp@0.1.0 login \
--ssh my-server \
--ticket PAIRING_CODE請在有桌面瀏覽器的本機電腦執行,不是在遠端 SSH shell 執行。小幫手會:
以 SSH
-L建立本機到遠端 callback 的加密通道。驗證 callback 與配對資料相符。
開啟配對中的 Mattermost 網址,由站台處理登入與導向。
讀取 Mattermost response 的
Tokenheader 或MMSIDCookie。以
Authorization: Bearer <token>呼叫/api/v4/users/me驗證。透過通道交接;遠端再次驗證成功後才保存 Token。
callback 僅綁定 127.0.0.1,不需要開公開 HTTP port。配對碼包含短期 nonce,不是 Session Token,但仍應保密;一次憑證交接嘗試後失效。逾時、MCP 重啟或重新載入後,請重新呼叫 mattermost_login。
完成後呼叫 mattermost_auth_status,確認 authenticated: true。之後 API 不需要保持瀏覽器或 SSH 通道開啟。
CLI
npx --yes mattermost-mcp@0.1.0 --help
npx --yes mattermost-mcp@0.1.0 --version
npx --yes mattermost-mcp@0.1.0 install-browser
npx --yes mattermost-mcp@0.1.0 login --ticket PAIRING_CODEmattermost-mcp 不帶參數或使用 serve 都會啟動 stdio MCP server;站台由 MATTERMOST_URL 指定。套件也提供 mattermost-mcp-login 執行檔作為登入指令的別名。
Tools
Tool | 用途 | 主要參數 |
| 建立一次性配對並回傳登入指令 |
|
| 驗證保存的 Session,不回傳 Token | 無 |
| 取得目前使用者 | 無 |
| 列出所屬團隊 | 無 |
| 列出加入的頻道,可能包含私訊 |
|
| 搜尋有權限查看的訊息 |
|
| 查詢頻道及封存狀態 |
|
| 取得單則訊息 |
|
| 取得討論串 |
|
| 實際發送訊息 |
|
| 實際回覆討論串 |
|
發送與回覆:TL;DR 限制
兩個寫入 tools 都強制驗證:
每則最多 5 行,每行最多 50 個 Unicode code points。
空白、標點、Markdown、網址都計入字數;組合 emoji 可能包含多個 code points。
空白行、結尾換行計入行數;支援 LF、CRLF、CR。
超限或全空白內容直接拒絕,不呼叫 API,不截斷,也不自動拆成多則。
Tool 描述會要求以 TL;DR 點出結論與重點;語意摘要由呼叫端負責。
讀取歷史訊息不受這些發送限制影響。
工具會檢查封存頻道、討論串歸屬與已刪除訊息。postId 可指向根訊息或回覆,工具會解析真正的 root_id。
寫入需先取得使用者授權;MCP annotations 是提示,不是額外的權限攔截機制。若寫入連線中斷,訊息可能已送出;工具不自動重試,請先查詢確認。
設定與安全性
環境變數 | 說明 |
| 必填,Mattermost 站台原始網址 |
| 選填,覆寫憑證保存根目錄 |
預設憑證位置:
~/.config/mattermost-mcp/<server-hash>/session.json不同站台分開保存;MCP 重啟後可沿用,直到 Session 過期或被撤銷。所有 API 權限等同登入者,MCP 不會提升權限。
POSIX 站台目錄權限
0700,憑證檔案0600;Windows 請另行確認 ACL。Token 是明文檔案搭配權限保護,不是加密儲存。
一般 tool 輸出不含 Token;小幫手不保存身份提供者 Cookie 或 OAuth 授權碼。
同一 OS 使用者、系統管理員,以及具備相同檔案讀取權限的 AI tools 仍可能讀取憑證。
不要讓不同使用者共用同一個 MCP OS 帳號,不要把憑證提交 Git 或分享備份。
刪除本機憑證只會移除本機副本;若需撤銷,請在 Mattermost 的 Session/安全性設定操作。
相容性與限制
使用 Mattermost REST API v4,已在 Mattermost 10.12.4 驗證登入及主要 tools。其他站台必須提供相容的 API、Session 與權限;不宣稱已測試所有版本或身份提供者。
目前支援站台部署於原始網址根目錄;不支援子路徑部署。若站台無法提供可作 Bearer Token 使用的 Session,本版本會拒絕保存,不會自行改用未驗證的 Cookie 認證。搜尋目前未提供分頁參數,大量結果請縮小時間範圍。
原始碼開發與發布
npm ci
npm run check
npm run test:package
npm run check:release開發時可使用 node dist/cli.js 啟動 MCP,並在 Client 的 env 明確設定 MATTERMOST_URL。examples/mcp.json 是可公開的設定範例;個人 .pi/mcp.json 不納入版本控制。
npm 只打包 dist/、examples/、README、LICENSE 等明確允許的檔案。prepack 會建置,prepublishOnly 會檢查必須在 main、執行測試;使用者安裝 registry 套件時不需要 TypeScript 開發依賴。
GitHub Trusted Publishing + npm Staged Publishing
正式發布固定從 main 進行。GitHub Actions workflow 位於:
.github/workflows/publish.yml它只接受從 main 手動觸發,並使用 npm Trusted Publishing 的 OIDC,不保存長效 npm token。workflow 會執行測試後使用:
npm stage publish這是「送進 npm 待審區」,不是直接上架;維護者必須在 npm 介面或 CLI 檢查並以 2FA 核准。
一次性設定順序
確認 GitHub repository 是
vanisoul/mattermost-mcp。確認
main已包含.github/workflows/publish.yml。若
mattermost-mcp尚未存在於 npm,先以 npm 帳號手動完成第一次 bootstrap 發布,因為 npm Trusted Publisher 設定需要已存在的 package。第一次發布只需做一次;後續版本改用此 workflow。在 npm package:
Package → Settings → Trusted publishing → Add trusted publisher → GitHub Actions填入:
Organization or user:
vanisoulRepository:
mattermost-mcpWorkflow filename:
publish.ymlEnvironment name:留空(本 workflow 未使用 GitHub Environment)
Allowed action:允許
npm stage publish;若要直接發布才另外允許npm publish
GitHub repository 的 Actions 設定確認允許 workflow 執行。
從
main手動執行 Publish npm package。到 npm 的 Staged Packages 檢查內容。
確認無誤後按 Approve,並完成 npm 2FA,才會正式上架。
npm Trusted Publishing 官方要求 npm CLI 至少 11.5.1、Node 至少 22.14.0;本 workflow 使用 Node 24 與 npm ^11.15.0。GitHub Actions 必須有 id-token: write,且要使用 GitHub-hosted runner。Trusted Publishing 成功時 npm 會使用短期 OIDC 憑證,公開 repository/公開 package 也可產生 provenance。
若想跳過待審流程,必須在 npm Trusted Publisher 設定中額外允許直接 npm publish,但本專案 workflow 刻意只使用 staged publishing,讓每次正式上架都有人工核准。
本機驗證發布內容
git switch main
npm ci
npm run check
npm run test:package
npm run check:release
npm pack --dry-run不要在 feature branch 或未確認的工作樹執行正式發布。若套件改名,請同步調整 README、package.json、GitHub trusted publisher 設定;登入指令會自動使用 package.json 的名稱與版本。
授權
MIT,詳見 LICENSE。
Available Tools
11 toolsmattermost_auth_statusA
驗證已保存的 Mattermost Session Token;不回傳 Token 本身。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two useful traits: it operates on an already-stored token (hence zero arguments) and it deliberately does not return the token itself. It does not say what 'validating' yields (a boolean, user identity, an error on expiry) or whether it refreshes the session, which are the details an agent most needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the action and scoped by a clarifying clause. Nothing is wasted, though the extreme brevity means little structure beyond one clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, output-schema-less tool, the description is minimally adequate: it establishes inputs (none, stored token) and one output constraint (no token returned). The actual return shape on success and failure remains undefined, which is a real gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description correctly signals that no credentials need to be passed because the token is stored.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb (驗證/validate) with a specific resource (the saved Mattermost session token), and '已保存' implicitly separates it from mattermost_login, which presumably acquires a token. It is clear without naming a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use statement, but 'validates the saved token' implies the natural pre-flight use case before calling other Mattermost tools. The agent must infer this rather than being told, and no alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mattermost_create_postA
以目前登入者身分發送訊息。內容必須是 TL;DR:最多 5 行、每行最多 50 字;非唯讀,須有使用者授權;逾時不得直接重送。
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | 請以 TL;DR 點出結論與重點。最多 5 行,每行最多 50 個 Unicode 字元;空白、標點、Markdown 與網址皆計數,空白行及結尾換行也計入行數。 | |
| channelId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the description is not on the hook for the safety profile. It still adds real value beyond them: the requirement for user authorization and the instruction not to blindly resend on timeout — concrete guidance that complements the non-idempotent hint. No mention of what a successful post returns or whether edits/deletes are possible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single compact sentence with the action front-loaded and the constraints appended, so no reading time is wasted. Slight redundancy with the schema's message description is the only inefficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter write tool whose annotations cover the safety profile, the description supplies the missing operational context (auth requirement, retry caution, content constraints). The remaining gap is target resolution — nothing explains the channelId or the boundary against reply_to_thread — but this is a minor omission rather than a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: the 'message' field is already thoroughly documented in the schema, and the description's TL;DR/5-line/50-character rules largely restate it. The 'channelId' parameter carries only a regex pattern with no explanation anywhere, and the description does not clarify that it identifies the target channel or how to obtain it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('發送訊息' / send a message) and identifies the acting identity ('以目前登入者身分'), which the tool name alone does not. It stops short of distinguishing this tool from its closest sibling, mattermost_reply_to_thread, so an agent must infer that this creates a top-level post rather than a threaded reply.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when the tool applies by describing prerequisites ('須有使用者授權') and a retry rule ('逾時不得直接重送'), and the formatting mandate narrows acceptable input. However, there is no explicit statement of when to prefer mattermost_reply_to_thread or mattermost_get_channel/channel-lookup first, leaving the main selection decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mattermost_get_channelBRead-onlyIdempotent
以頻道 ID 查詢頻道名稱、類型及封存狀態。唯讀操作。
| Name | Required | Description | Default |
|---|---|---|---|
| channelId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the added '唯讀操作' sentence is largely redundant. What does add value is the statement of which fields come back (name, type, archived status), but nothing is said about behavior on an unknown or malformed channel ID.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the lookup and the returned fields, with zero filler. Nothing could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool whose annotations cover the safety profile, disclosing the returned fields makes it nearly self-sufficient. Minor gaps remain around invalid-ID behavior and whether any team context is included.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 0% schema description coverage; the only format constraint lives in the pattern field of the schema. The description merely repeats that the input is a channel ID, adding no meaning about expected format or failure modes beyond what the parameter name already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (查詢) and resource (頻道) and even enumerates what is returned (名稱、類型、封存狀態), which distinguishes it from the list-style siblings such as mattermost_list_channels. It does not name a sibling alternative explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no exclusions, and no pointer to alternatives like mattermost_list_channels for discovery. Only the 'lookup by ID' framing implies usage; the agent must infer the rest.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mattermost_get_current_userB
取得目前登入的 Mattermost 使用者。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not state that this is a read-only operation, that it requires an authenticated session, or what happens when no user is logged in, leaving the failure and safety profile undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It states the resource and scope immediately and nothing in it is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter identity lookup, the description is minimally sufficient, but with no output schema it never indicates what user attributes come back, and it omits the authentication prerequisite that matters for a session-scoped call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. No parameter meaning is missing or contradicted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: retrieving the currently logged-in Mattermost user. It is unambiguous on its own but does not distinguish itself from the close sibling mattermost_auth_status or mattermost_login, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus auth_status or login, and no stated prerequisite such as an active session. The agent must infer usage purely from the name and the word 'current'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mattermost_get_postBRead-onlyIdempotent
取得單則訊息,包含 channel_id 及討論串 root_id。唯讀操作。
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The '唯讀操作' (read-only) clause simply restates what readOnlyHint=true and destructiveHint=false already declare, so it earns little credit. What it does add is that the response payload includes channel_id and root_id, which is useful given there is no output schema. It says nothing about error behavior for invalid or unknown post IDs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the core purpose is front-loaded. It is arguably too terse given the undocumented parameter, but nothing written is wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter lookup with no output schema, the description covers purpose and partially covers the return shape. It is still incomplete on the postId format and on authentication expectations, which matter for an openWorld tool that requires a logged-in session.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter postId, and the description never explains or even mentions it. The only guidance on format is the 26-character lowercase pattern buried in the JSON schema, so the description fails to compensate for the documentation gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('取得單則訊息' — retrieve a single post) and clarifies it returns channel_id and thread root_id. This distinguishes it from sibling tools like mattermost_get_thread and mattermost_search_posts, though those alternatives are never named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is for fetching one known post rather than browsing a thread or searching. There is no explicit statement of when to use it versus mattermost_get_thread or mattermost_search_posts, and no mention of prerequisites such as being logged in.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mattermost_get_threadCRead-onlyIdempotent
取得指定訊息所屬的討論串及回覆。唯讀操作。
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the sentence '唯讀操作' (read-only operation) merely restates the structured data and earns no credit. Nothing is added about reply ordering, pagination or limits on the number of replies returned, or what happens when the post has no replies. For a thread-fetch tool, that behavioral detail matters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the retrieval scope stated first and the safety note second. There is no filler. The only weakness is that brevity here comes at the cost of the usage and parameter detail noted above.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description is minimally adequate: an agent can tell it returns a thread of replies. It omits what the returned thread contains, how replies are ordered, and how to choose this tool over mattermost_get_post, which leaves a real gap for correct tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the single parameter, yet it only says '指定訊息' (the specified message), which barely clarifies that postId is a post identifier. The 26-character lowercase alphanumeric format and the fact that the ID must be a post ID rather than a channel or user ID are left to the schema pattern and the agent's inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: fetch the thread and its replies that belong to a given message ('取得指定訊息所屬的討論串及回覆'). This clearly separates it from mattermost_get_post, which returns a single post, and from mattermost_reply_to_thread, which writes. It does not explicitly name those siblings, so the description falls short of the sibling differentiation required for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool rather than mattermost_get_post (a single message), mattermost_search_posts, or mattermost_get_channel. The intended use, retrieving a whole thread when you hold a post ID, can only be inferred. Neither prerequisites nor exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mattermost_list_channelsC
列出指定 team 的 Mattermost channels。
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | Yes | Mattermost team ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it says nothing about auth requirements (the presence of mattermost_login/mattermost_auth_status suggests sessions matter), whether private/archived channels are included, or whether results are paginated or filtered. Only the read-only nature is implied by the verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the scope stated up front and no filler. It is efficient, though so terse that nothing beyond the minimum is conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a listing tool with no annotations, no output schema, and no pagination or auth disclosure, the definition leaves out nearly everything an agent needs beyond the call signature. It does not describe what a returned channel contains or how large the result set may be.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so teamId is already fully documented as 'Mattermost team ID'. The phrase '指定 team' merely restates that the parameter exists and adds no format, source, or edge-case meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource ('列出 … channels') scoped to a single team, which an agent can distinguish from mattermost_get_channel (single channel) and mattermost_list_teams (teams). It stops short of naming any sibling, so differentiation is only inferable from the singular/plural distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, no mention of a prerequisite team ID obtained from mattermost_list_teams, and no pointer to mattermost_get_channel for single-channel lookup. The agent must infer route selection entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mattermost_list_teamsB
列出目前使用者可存取的 Mattermost teams。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Because no annotations are provided, the description must carry the full burden. The phrase 'currently accessible to the user' hints that results are permission-scoped, which is genuinely useful behavioral context. It does not mention pagination, result ordering, failure modes when the user is unauthenticated, or the shape of each returned team.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is one short sentence with no wasted wording, and the scope qualifier comes before the noun it modifies. The sentence is minimal, but it is not padded; this is a case of appropriate brevity rather than vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple zero-parameter listing tool with no output schema, so the bar is lower. Still, an agent cannot tell from the description whether the result is paginated, whether an empty list means no membership, or which identifier it should reuse in later calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool takes zero parameters, so the baseline score is 4. The description correctly implies that no input is required and that the scope is derived from the authenticated session, indicating there are no filters to apply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (list teams) and scopes it to teams the current user can access. Because it is clearly a list tool, it is distinguishable from siblings such as mattermost_list_channels or mattermost_search_posts. However, it does not state that it is distinct from those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to call this tool instead of other tools, or what to do afterward. It does not say that the returned team identifiers are needed by channel-related tools, and it gives no prerequisites and no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mattermost_loginB
建立一次性登入配對並回傳 npx 登入指令。MCP 在遠端時指定 sshTarget,讓本機 Login Helper 透過 SSH 交接 Session Token;同機則可省略。登入提供者由 Mattermost 站台設定決定。
| Name | Required | Description | Default |
|---|---|---|---|
| sshTarget | No | 本機可使用的 SSH alias 或 user@example.com;MCP 與瀏覽器同機時省略 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description must carry the full behavioral burden. It does disclose meaningful behavior: a one-time pairing, a session token handed off over SSH to a local Login Helper, and that the provider is decided by the Mattermost site config. It does not say whether the call mutates account/session state, how long the pairing or token lives, or what happens if pairing fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and its return value, then the conditional parameter rule, then the provider note. Dense and purposeful, with no filler, though the provider sentence sits last and reads as an afterthought.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description does at least say a value is returned (an npx command), which is helpful. But for a login tool with zero annotations, missing side-effect disclosure, token lifetime, and post-login verification steps leaves the agent guessing about what to do once the command is returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the sshTarget property already documents 'SSH alias or user@example.com; omit when MCP and browser are on the same machine'. The description's explanation is essentially the same rule restated, adding no new syntax, format, or failure semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and outcome: 'establish a one-time login pairing and return an npx login command'. This is clearly a different action from the sibling mattermost_auth_status, though the description never names that sibling to make the distinction explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The remote-vs-local condition ('specify sshTarget when MCP is remote, omit when on the same machine') is stated clearly, which is a real usage rule. However, there is no guidance on when to call this at all versus checking mattermost_auth_status first, and no mention of prerequisites or follow-up steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mattermost_reply_to_threadA
以 TL;DR 回覆討論串:最多 5 行、每行最多 50 字。postId 可為根訊息或既有回覆,會自動找出 root_id 並檢查頻道歸屬;非唯讀,須有使用者授權。
| Name | Required | Description | Default |
|---|---|---|---|
| postId | Yes | ||
| message | Yes | 請以 TL;DR 點出結論與重點。最多 5 行,每行最多 50 個 Unicode 字元;空白、標點、Markdown 與網址皆計數,空白行及結尾換行也計入行數。 | |
| channelId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the sentence '非唯讀' earns no credit. Beyond them the description adds real behavior: the server auto-resolves root_id from either a root or a reply post, verifies channel membership, and requires user authorization — all non-obvious and useful. It stops short of saying what happens when the 5x50 limits are exceeded or what the call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight, semicolon-joined clauses with no filler, and the output-format constraint is front-loaded where the agent will see it first. Slightly dense phrasing but nothing wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent write tool with no output schema, the definition covers format limits, ID resolution behavior, channel validation, and the authorization prerequisite — enough to call it correctly. The only real gap is failure behavior (limit violations, mismatched channel) and the shape of the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, with postId and channelId having no schema descriptions. The description compensates well for postId (accepts root or reply, root_id auto-resolved) and implicitly explains channelId's role via the 頻道歸屬 check. message constraints are fully covered by the schema already, so no further gain there.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (回覆) and resource (討論串) plus the output format (TL;DR, 5 lines / 50 chars). An agent can distinguish it from mattermost_create_post by the thread-reply framing, but the description never names that sibling explicitly, so disambiguation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful preconditions — user authorization is required and postId may be either a root message or an existing reply — which tells the agent when this call is valid. However, there is no explicit when-not guidance and no named alternative (e.g. use create_post for a new top-level message), so routing between siblings is left implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mattermost_search_postsC
搜尋目前使用者有權限看到的 Mattermost posts。
| Name | Required | Description | Default |
|---|---|---|---|
| terms | Yes | 搜尋文字 | |
| teamId | Yes | Mattermost team ID | |
| isOrSearch | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does disclose one meaningful behavioral trait — results are permission-scoped to the current user — but says nothing about result ordering, limits, pagination, or whether an empty result means no match versus no access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, and the permission scope is front-loaded. It is efficiently written but under-specified for a three-parameter search operation, so brevity comes partly at the cost of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and an undocumented boolean, the description should clarify search behavior and result shape; it does neither. An agent can guess how to call it but not what it will get back or how to chain it with mattermost_list_teams for a teamId.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 67%, and the undocumented parameter is the semantically significant one: isOrSearch controls whether terms are OR- or AND-combined, yet neither schema nor description explains it. The description adds no meaning beyond the terms/teamId field hints already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb ("搜尋") with a specific resource ("Mattermost posts") and adds scope: only posts the current user is permitted to see. This distinguishes it from retrieval siblings such as mattermost_get_post and mattermost_get_thread, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use search rather than fetching a post or thread directly, no mention that a teamId must be supplied, and no hint about how "terms" is matched. The agent must infer all usage context from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.1.0- First observed
mattermost_auth_status - First observed
mattermost_create_post - First observed
mattermost_get_channel - First observed
mattermost_get_current_user - First observed
mattermost_get_post - First observed
mattermost_get_thread - First observed
mattermost_list_channels - First observed
mattermost_list_teams - First observed
mattermost_login - First observed
mattermost_reply_to_thread - First observed
mattermost_search_posts
TDQS
Scored across 11 tools
Each tool targets a distinct resource or action: login/status, current user, teams, channels, and posts are cleanly separated. get_post, get_thread, and search_posts are differentiated by scope, and create_post vs reply_to_thread is clear.
All tools share the mattermost_ prefix and snake_case, and most follow a verb_noun pattern such as get_channel, list_teams, and create_post. mattermost_login and mattermost_auth_status deviate slightly from strict verb_noun but remain readable and consistent with the set.
Eleven tools is well-scoped for a Mattermost integration, covering authentication, discovery, reading, and posting without obvious bloat. Each tool appears to earn its place.
Core read paths and posting/reply operations exist, but there is no channel history or recent-posts listing beyond search, and no update/delete post or channel management operations. These are notable gaps for common chat workflows.
Maintenance
Related MCP Connectors
Managed MCP gateway with OAuth, per-agent permissions, shared accounts and activity logs.
Discover MCP servers and A2A agents; verify, message, post, follow, react, and receive webhooks.
Appreciate teammates, celebrate milestones, and run workspace ops from MCP clients via OAuth.
Query, browse, and automate OmegaAI workspaces from any MCP client. Streamable HTTP with OAuth 2.0.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables agents to discover rooms, read conversations, register, create rooms, post messages, and reply through MCP or HTTP with bearer-token authentication.MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP-compatible clients to securely interact with the BlogWarp REST API via Streamable HTTP, providing read-only access to posts, notifications, timeline, conversations, and following, plus mutating operations such as drafting, publishing, replying, following, and marking notifications read with explicit confirmation.MIT
- AlicenseCqualityBmaintenanceEnables any MCP client to triage cloud agents, projects, conversations, transcripts, pull requests, and files, including listing agents, reading transcripts, following runs, and sending follow-ups, using an API key or browser sign-in.29MIT
- AlicenseAqualityCmaintenanceEnables MCP clients to publish, edit, delete, comment on, and reshare posts; upload images, videos, and documents; and access optional reaction, engagement, and company-Page tools when authorized.10MIT