ox-mcp

io.github.Rheopyrin由 GitHub 帳號 Rheopyrin 發布v0.1.4更新於 Oct 24, 2026

MCP server for Open-Xchange: email (IMAP/SMTP), Sieve filters, CalDAV calendar, CardDAV contacts

已驗證STDIO僅桌面效率與工作流溝通與協作

概覽

AI 產生的概覽

適用於 Open-Xchange 與標準郵件主機的本機 MCP 伺服器,讓助理讀寫郵件、管理 Sieve 篩選器、行事曆事件與聯絡人。

可以做什麼
  • 跨資料夾讀取、搜尋與列出郵件,並寄送、回覆、存草稿、移動、標記、封存與刪除郵件
  • 建立、更新與刪除資料夾及伺服器端 Sieve 郵件篩選器
  • 列出行事曆與事件、查詢他人的空閒/忙碌狀態,並建立、更新或刪除事件
  • 接受、拒絕或暫定回覆會議邀請
  • 在伺服器端列出與搜尋聯絡人,並新增聯絡人
  • 列出已設定的帳戶,並在每次呼叫時指定某個帳戶
適用情境
適合讓助理處理 Open-Xchange 信箱或任何 IMAP/SMTP/CalDAV/CardDAV 帳戶:整理與搜尋郵件、撰寫回覆、管理篩選器、處理行事曆邀請與聯絡人,並可同時管理多個帳戶。
執行需求
透過 npx(Node.js)或 Docker 在本機執行。需為各區段設定主機與登入使用者,以及郵件、CalDAV、CardDAV 的應用程式專用密碼(OX_MCP_MAIL_APP_PASSWORD、OX_MCP_CALDAV_APP_PASSWORD、OX_MCP_CARDDAV_APP_PASSWORD),或 OAuth2/OIDC 參數。需能連線郵件與 DAV 主機;篩選器需 ManageSieve 4190 埠。設定檔位於 ~/.ox-mcp/config.json 或以 --config 指定。
安裝前請注意
會在設定或環境變數中保存應用程式專用密碼與 OAuth 用戶端密鑰;設定檔以 0600 權限建立。寫入類工具預設關閉,但一旦啟用即可寄送、刪除、移動與封存郵件、改寫邀請(並通知主辦人)以及新增聯絡人。使用 imap 傳輸時,ox-mcp 會啟用自己的 Sieve 腳本,使其他腳本的篩選器失效。空閒/忙碌僅顯示可用時段,不含事件細節。

安裝

在 SourceWeft 中

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

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

其他 MCP 客戶端

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

README

ox-mcp

[npm] [npm downloads] [license: MIT] [node]

[ox-mcp MCP server]

An MCP server for Open-Xchange and standards-based mail platforms — read & search email, send & reply, manage server-side filters, calendar events and invitations, contacts, and other people's availability (free/busy), across one or many accounts.

It speaks standard IMAP + SMTP + ManageSieve + CalDAV + CardDAV with RFC 6638 free/busy, so it works with any Open-Xchange deployment or standards-compliant host. Authenticate with your email + app password (the same credential DAVx5 uses) or OAuth2/OIDC.

No affiliation with Open-Xchange.

Install / run

bash
npx -y @rheopyrin/ox-mcp# or with a custom config location:npx -y @rheopyrin/ox-mcp --config /path/to/config.json

MCP client config (Claude Desktop / Claude Code):

jsonc
{  "mcpServers": {    "ox": {      "command": "npx",      "args": ["-y", "@rheopyrin/ox-mcp"],      "env": {        "OX_MCP_MAIL_SERVER": "mail.example.com",        "OX_MCP_MAIL_USER": "[email protected]",        "OX_MCP_MAIL_APP_PASSWORD": "xxxx-xxxx-xxxx-xxxx",        "OX_MCP_CALDAV_SERVER": "dav.example.com",        "OX_MCP_CALDAV_USER": "[email protected]",        "OX_MCP_CALDAV_APP_PASSWORD": "yyyy-yyyy-yyyy-yyyy"      }    }  }}

On first run (without --config) it creates ~/.ox-mcp/config.json (permissions 0600) with every feature flag listed — reads enabled, writes disabled — and empty hosts for you to fill in.

--config

--config <file> (or env OX_MCP_CONFIG; the flag wins) loads an explicit config file instead of ~/.ox-mcp/config.json. The file must exist — nothing is auto-created when the override is used.

Tools

Tools are grouped by protocol domain. A group's tools appear only when enabled, and the group's server host must be configured (see Validation).

GroupRead (enabled by default)Write (disabled by default)
email_* (IMAP/SMTP/Sieve — mail section)email_list_folders, email_list, email_read, email_search, email_filter_listemail_send, email_save_draft, email_reply, email_reply_all, email_delete, email_move, email_flag, email_mark_read, email_mark_unread, email_mark_spam, email_archive, email_create_folder, email_delete_folder, email_filter_create, email_filter_update
calendar_* (CalDAV — calDav section)calendar_list, calendar_list_events, calendar_free_busycalendar_create_event, calendar_update_event, calendar_delete_event, calendar_accept_event, calendar_decline_event, calendar_tentative_event
contact_* (CardDAV — cardDav section)contact_list, contact_findcontact_create
metalist_servers (always on)—
  • Every tool (except list_servers) accepts an optional server argument to target a specific account. A tool is hidden from the tool list unless its flag is enabled for at least one account.
  • email_search searches all folders by default; pass folder to narrow it. On the ox-api transport, body/text match only the subject and addresses of recent messages — use transport: "imap" for true full-text search.
  • email_mark_spam / email_archive find the Junk/Archive folder via IMAP special-use attributes, with name-based fallbacks.
  • email_reply / email_reply_all preserve threading (In-Reply-To/References) and exclude your own address from reply-all recipients.
  • The three RSVP tools (calendar_accept_event / calendar_decline_event / calendar_tentative_event) share one feature flag: respondEvent (calDav section). They rewrite your PARTSTAT on the invitation; the server notifies the organizer.
  • contact_find searches contacts server-side (CardDAV addressbook-query, RFC 6352) with automatic fallback to client-side filtering; fields narrows the match to name/email/phone/org (default name + email). Handy for resolving a name to an email before calendar_free_busy. contact_list is plain enumeration.

Mail filters

email_filter_create / email_filter_update manage server-side sieve filters over ManageSieve (port 4190, STARTTLS; requires basic/app-password auth). Rules support conditions on from/to/subject/any header (AND or OR) and actions fileinto (move to folder), discard, markRead, redirect.

Backend depends on mail.transport: with ox-api (default), filters go through the OX mailfilter/v2 module and operate on the account's real webmail rules (rules with tests/actions beyond this model are listed read-only as other). With imap, ox-mcp manages its own sieve script over ManageSieve (port 4190) and activates it — filters from other scripts become inactive while it is active.

Configuration: per-protocol sections

Each account is made of up to three self-contained sections — mail, calDav, cardDav — each with its own server, auth (incl. its own login user), and features. This matches servers (like Open-Xchange) that scope app passwords per protocol: your Mail password, CalDAV password, and CardDAV password can all differ.

jsonc
{  "defaultServer": "default",  "timeoutSeconds": 300,                                     // optional; request timeout, default 300  "servers": {    "default": {      "mail": {        "server": "webmail.example.com",                    // OX HTTP API host (default transport)        "transport": "ox-api",                              // optional; "imap" for direct IMAP/SMTP        "imap": { "host": "imap.example.com", "port": 993 }, // optional overrides        "smtp": { "host": "smtp.example.com", "port": 587, "secure": false }, // secure optional; 993/465 = TLS, else STARTTLS        "auth": { "type": "basic", "user": "[email protected]", "appPassword": "mail-scoped-pw" },        "features": { "search": true, "send": false /* per-tool flags */ }      },      "calDav": {        "server": "dav.example.com",        "auth": { "type": "basic", "user": "[email protected]", "appPassword": "caldav-scoped-pw" },        "features": { "respondEvent": false /* … */ }      },      "cardDav": {        "server": "dav.example.com",        "auth": { "type": "basic", "user": "[email protected]", "appPassword": "carddav-scoped-pw" }      }    }  }}
  • A section you don't configure = its tools are disabled. A calDav-only config is perfectly valid.
  • mail.transport is optional and defaults to "ox-api" — the Open-Xchange HTTP API (the webmail backend, https://<server>/appsuite/api). OX deployments validate app passwords at this middleware, so it works even where raw IMAP rejects them; server is the webmail host. Filter tools use the OX mailfilter/v2 module — they list and edit the account's actual webmail rules. Caveat: search matches subject/addresses (not full bodies).
  • Set transport: "imap" for direct IMAP/SMTP against generic (non-OX) mail hosts — then server is the mail host, with optional split imap/smtp endpoints.
  • enabled: false on a section is a config master switch for all its tools.
  • There is no global features block — flags live only inside sections (env vars remain global).

Feature flags

Resolution precedence — env always beats config, first defined wins:

  1. per-account env, tool — OX_MCP_<ID>_ENABLE_EMAIL_SEND
  2. per-account env, group — OX_MCP_<ID>_ENABLE_MAIL
  3. global env, tool — OX_MCP_ENABLE_EMAIL_SEND
  4. global env, group — OX_MCP_ENABLE_MAIL / _CALDAV / _CARDDAV
  5. section config, tool — servers.<id>.mail.features.send
  6. section config, master — servers.<id>.mail.enabled
  7. default — true for reads, false for writes
bash
# enable sending on all accountsOX_MCP_ENABLE_EMAIL_SEND=true# turn off the whole calendar sectionOX_MCP_ENABLE_CALDAV=false# enable event creation only on the "work" accountOX_MCP_WORK_ENABLE_CALENDAR_CREATE_EVENT=true# enable all three RSVP tools at onceOX_MCP_ENABLE_CALENDAR_RESPOND_EVENT=true

Booleans accept true/1/yes/on and false/0/no/off.

Connection & credentials (env)

Every section field is settable via env: OX_MCP_[ID_]<SECTION>_<FIELD> with SECTION ∈ MAIL | CALDAV | CARDDAV. The default account uses the non-indexed form.

Env varMeaning
OX_MCP_MAIL_SERVER / OX_MCP_CALDAV_SERVER / OX_MCP_CARDDAV_SERVERsection host
OX_MCP_MAIL_USER / OX_MCP_CALDAV_USER / OX_MCP_CARDDAV_USERsection login user
OX_MCP_MAIL_APP_PASSWORD / OX_MCP_CALDAV_APP_PASSWORD / …section app password (basic auth)
OX_MCP_MAIL_IMAP_HOST / _IMAP_PORT / _SMTP_HOST / _SMTP_PORTmail transport overrides (Gmail-style split hosts)
OX_MCP_MAIL_IMAP_SECURE / _SMTP_SECUREforce TLS (true) or STARTTLS (false) on a non-standard port
OX_MCP_MAIL_AUTH_TYPE, _CLIENT_ID, _REFRESH_TOKEN, …per-section OAuth/OIDC fields
OX_MCP_TIMEOUT_SECONDSrequest timeout for all HTTP/IMAP/SMTP operations (default 300)

Default ports: IMAP 993, SMTP 465, DAV 443, ManageSieve 4190. TLS mode derives from the port (993/465 implicit TLS; 143/587 STARTTLS) unless secure is set explicitly.

Validation

Configuration is validated strictly at startup: every present section with enabled tools must have a server (or split imap/smtp hosts for mail) and a login user, or the server exits with an error naming the exact field. Accounts with zero sections error too. Absent sections are simply disabled — no error.

Authentication types

basic (app password) is the default. Other Open-Xchange-aligned mechanisms are supported per section via auth.type / OX_MCP_[ID_]<SECTION>_AUTH_TYPE:

TypeExtra fields (env: OX_MCP_[ID_]<SECTION>_…)
basicAPP_PASSWORD
xoauth2ACCESS_TOKEN
oauth2-refreshCLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN, TOKEN_URL, SCOPE
oauth2-passwordCLIENT_ID, CLIENT_SECRET, PASSWORD, TOKEN_URL, SCOPE
oidcISSUER, CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN or PASSWORD, SCOPE

Tokens are cached and refreshed automatically. Note: mail filters (ManageSieve) require basic auth.

Multiple accounts

bash
OX_MCP_ACCOUNTS=work,personalOX_MCP_WORK_MAIL_SERVER=mail.work.com[email protected]OX_MCP_WORK_MAIL_APP_PASSWORD=...OX_MCP_PERSONAL_CALDAV_SERVER=dav.personal.com[email protected]OX_MCP_PERSONAL_CALDAV_APP_PASSWORD=...OX_MCP_DEFAULT_SERVER=work

Or define them in ~/.ox-mcp/config.json under servers (keyed by id). list_servers shows what's configured (never secrets); env values override config field-by-field. Feature flags can differ per account (e.g. sending enabled only on work).

Free/busy caveat

calendar_free_busy returns availability windows only (busy/free), via the CalDAV scheduling outbox — no calendar sharing needed. It does not reveal event details, and requires the server to advertise a schedule-outbox-URL. To read a colleague's full calendar, they must share it with your account; shared calendars then appear in calendar_list / calendar_list_events.

Docker

bash
docker build -t ox-mcp .docker run -i --rm \  -e OX_MCP_MAIL_SERVER=mail.example.com \  -e [email protected] \  -e OX_MCP_MAIL_APP_PASSWORD=xxxx \  ox-mcp

Development

bash
npm installnpm run dev          # run from sourcenpm test             # vitestnpm run test:coveragenpm run build        # bundle to dist/ (tsup)

License

MIT

來源:README.md,提交 43ebee1

工具

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

版本歷史

3
  1. v0.1.4最新Oct 12, 2026
  2. v0.1.3Oct 11, 2026
  3. v0.1.2Sep 16, 2026

評分

已滿足適用檢查項的 50%

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

  • 近 30 天內可連通25 分

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

  • 已宣告認證方式10 分

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

  • 已列出工具15 分

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

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