Simple Support System Mcp

io.github.bitterdev由 GitHub 帳號 bitterdev 發布v1.0.3更新於 Oct 26, 2026

MCP server for the Simple Support System helpdesk API: read, answer and move tickets.

概覽

AI 產生的概覽

針對 Concrete CMS 上 Simple Support System 工單 API 的本機 MCP 伺服器,讓助理讀取、回覆、流轉並管理支援工單。

可以做什麼
  • 查找與閱讀工單:依專案、狀態、類型、優先順序、負責人、文字與變更日期篩選清單,並讀取單一工單及其留言和附件。
  • 回覆與流轉工單:張貼會觸發通知信的回覆、切換工作流程狀態、建立、修改與審核通過工單。
  • 管理留言:列出、改寫、審核通過或刪除工單留言。
  • 管理專案:列出、讀取、建立、修改與刪除支援專案,包括帶存取權杖的私人專案。
  • 處理附件:上傳本機檔案、將其連結到工單、解析下載網址並刪除。
  • 檢視設定:顯示 API 網址、是否已設定金鑰,以及可用的狀態、類型與優先順序。
適用情境
適用於支援佇列跑在 Concrete CMS 的 Simple Support System 外掛上,希望助理分流、回覆與流轉工單,或在不開啟後台介面的情況下維護專案與附件。
執行需求
透過 npm 套件以 stdio 在本機執行,需要 Node.js 啟動。必須設定 SIMPLE_SUPPORT_SYSTEM_BASE_URL 指向 Concrete CMS 網站;管理類呼叫需要 SIMPLE_SUPPORT_SYSTEM_API_KEY。選用:SIMPLE_SUPPORT_SYSTEM_API_PATH、SIMPLE_SUPPORT_SYSTEM_PROJECT_TOKEN、SIMPLE_SUPPORT_SYSTEM_PROJECT_ID 與 SIMPLE_SUPPORT_SYSTEM_TIMEOUT_MS。需要能連線到該網站的網路。
安裝前請注意
API 金鑰(SIMPLE_SUPPORT_SYSTEM_API_KEY)與專案權杖(SIMPLE_SUPPORT_SYSTEM_PROJECT_TOKEN)是存取工單系統的機密憑證。回覆與狀態變更會向相關人員寄送通知信。四個刪除工具無法復原,沒有資源回收筒或還原,且需要 confirm: true;刪除專案會一併刪除其中所有工單與留言。上傳附件會把本機檔案送到網站。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Simple Support System Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

simple-support-system-mcp

Local MCP server (stdio) for the REST API of the Simple Support System add-on for Concrete CMS. It lets an assistant work a support queue the way a human would: find the ticket, read it with its history, write a reply, move it to the next state. Projects, attachments and moderation are covered as well.

The server talks to any site that runs the package. Nothing is hardcoded, the site URL and the API key come from environment variables. It speaks stdio only and never opens a port.

Install

bash
npm installnpm run build

Register the server in Claude Code:

bash
claude mcp add simple-support-system \  -e SIMPLE_SUPPORT_SYSTEM_BASE_URL=https://support.example.com \  -e SIMPLE_SUPPORT_SYSTEM_API_KEY=your-api-key \  -- node "/absolute/path/to/simple-support-system-mcp/dist/src/index.js"

Or in ~/.claude.json / claude_desktop_config.json:

json
{  "mcpServers": {    "simple-support-system": {      "command": "node",      "args": ["/absolute/path/to/simple-support-system-mcp/dist/src/index.js"],      "env": {        "SIMPLE_SUPPORT_SYSTEM_BASE_URL": "https://support.example.com",        "SIMPLE_SUPPORT_SYSTEM_API_KEY": "your-api-key"      }    }  }}

Environment

VariablePurpose
SIMPLE_SUPPORT_SYSTEM_BASE_URLRequired. Base URL of the Concrete CMS site, for example https://support.example.com. The API path /index.php/api/v1 is appended automatically, a URL that already ends in /api/v1 is used as it is.
SIMPLE_SUPPORT_SYSTEM_API_KEYAPI key of the installation, sent as the X-Api-Key header. Without it only the public part of the API is reachable.
SIMPLE_SUPPORT_SYSTEM_API_PATHOptional. Overrides the default API path for sites that do not use the index.php dispatcher, for example /api/v1.
SIMPLE_SUPPORT_SYSTEM_PROJECT_TOKENOptional. Default access token for private projects, used when a tool call passes no token of its own.
SIMPLE_SUPPORT_SYSTEM_PROJECT_IDOptional. Limits the server to this one project, see Limiting the server to one project.
SIMPLE_SUPPORT_SYSTEM_TIMEOUT_MSOptional. Request timeout in milliseconds, default 30000.

The API key is generated when the package is installed and lives in the site config under simple_support_system.api_key. Calls without it run as an anonymous visitor: reading public projects and their approved tickets, creating tickets and writing comments still work, everything administrative (state changes, deleting, approving, projects) does not.

Tools

The three everyday tools are list_tickets, get_ticket and reply_to_ticket, plus set_ticket_state to move a ticket along.

ToolPurpose
list_ticketsLists tickets with filters for project, state, type, priority, assignee, text search and change date, sorted and paged. Compact summaries by default.
get_ticketReads one ticket with its attachments and, unless switched off, all of its comments.
reply_to_ticketPosts a reply as a comment on a ticket and triggers the notification mails.
set_ticket_stateMoves a ticket to another workflow state and notifies everyone involved.
create_ticketCreates a ticket in a project, by project id or project handle, optionally with uploaded files.
update_ticketChanges title, content, type, priority or assignee. Only the given fields are touched.
approve_ticketApproves a moderated ticket.
delete_ticketDeletes a ticket with all comments and attachment links. Irreversible, needs confirm: true.
list_ticket_commentsLists the comments of a ticket.
update_commentReplaces the text of a comment.
approve_commentApproves a moderated comment.
delete_commentDeletes a comment. Irreversible, needs confirm: true.
list_projectsLists the support projects, with access tokens when an API key is configured.
get_projectReads one project by id.
create_projectCreates a project, private projects get a generated access token.
update_projectChanges name, handle or visibility of a project.
delete_projectDeletes a project with every ticket and comment inside it. Irreversible, needs confirm: true.
list_ticket_attachmentsLists the files attached to a ticket.
upload_attachmentUploads a local file into the file manager and returns its file id.
add_ticket_attachmentsLinks uploaded file ids to a ticket.
download_attachmentResolves the download URL of an attachment and can save it to a local path.
delete_attachmentRemoves a file from a ticket. Irreversible, needs confirm: true.
get_server_infoShows the configured API URL, whether a key is present and the accepted states, types and priorities. The key itself is never returned.

Reading tools are annotated as read only, the four delete_ tools as destructive. All of them additionally require confirm: true, so a delete cannot happen as a side effect of a vague instruction. There is no trash and no restore on the API side, a deleted ticket, comment or project is gone.

Working a ticket

text
list_tickets   { "state": "open", "sortBy": "updatedAt" }get_ticket     { "ticketId": 42 }reply_to_ticket{ "ticketId": 42, "comment": "Thanks for the report, we are on it." }set_ticket_state { "ticketId": 42, "state": "in_progress" }

list_tickets also takes projectHandle instead of projectId and resolves it through the project list first.

Values the API accepts

  • States: new, open, in_progress, on_hold, resolved, duplicate, invalid, wont_fix, closed. set_ticket_state accepts all of them except new, which is only set when a ticket is created.
  • Types: bug, enhancement, proposal, task
  • Priorities: trivial, minor, major, critical, blocker
  • Tickets in the state closed or invalid are locked: the API refuses edits of the ticket, its comments and its attachments until the state changes.

Attachments

text
upload_attachment      { "filePath": "/tmp/screenshot.png" }      -> fileIdadd_ticket_attachments { "ticketId": 42, "fileIds": [123] }

upload_attachment puts the file into the file manager of the site without linking it anywhere, the second call attaches it. create_ticket takes the same ids in attachmentFileIds.

Private projects

A private project is only reachable with its access token. Pass it per call as token, or set SIMPLE_SUPPORT_SYSTEM_PROJECT_TOKEN as the default. With an API key the token is not needed, the key already grants full access.

Limiting the server to one project

Set SIMPLE_SUPPORT_SYSTEM_PROJECT_ID to hand the server to someone who should only work in one project, typically together with that project's access token and without an API key. list_tickets and create_ticket then use this project when none is given, list_projects shows only this project, and every tool that takes a ticket id first checks that the ticket belongs to it. A different project id or handle is rejected. Without an API key the site itself already keeps other private projects closed, the setting additionally keeps the public projects of the installation out of view.

Notes on the API

The package answers in several shapes, the server normalises all of them so tools return the bare resource:

  • Collections come back as a plain array, single tickets and comments inside a ticket or comment key, attachments inside data.
  • Failures arrive either as {"errors": [...]} or as a Concrete EditResponse with an error flag. The second one can come with status 200, so a 200 alone is not treated as success. Every error becomes a tool error with the message the API sent.
  • create_ticket answers with a status envelope and not with the new record, so the id of a freshly created ticket has to be looked up with list_tickets.
  • download_attachment follows the redirect the API returns and reports the resolved URL.

Verification

bash
npm run buildnpm test

The tests run against a stubbed HTTP layer, they never touch a live site and need no credentials. They cover the URL and form encoding the PHP controllers expect (including PHP boolean and array notation), the response envelopes, the error mapping, the filtering and sorting of list_tickets, and the guard rails of the destructive tools.

License

MIT, see LICENSE.

來源:README.md,提交 0b7762e

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v1.0.3最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分