
Mjucius Cozi Mcp
ai.smithery由 smithery.ai 發布官方發布者v1.14.0更新於 Oct 24, 2026
Manage your family's calendars and lists in Cozi. View, create, and update appointments; organize…
發布方自己的服務:222wcnm Bilistalkermcp
概覽
讓助理透過非官方 MCP 伺服器讀取與修改 Cozi 家庭組織帳號中的共享清單和行事曆。
- 可以做什麼
- 把 Cozi 家庭資料包裝成工具:family_members 取得參與者 ID,get_lists 與 get_list_items 讀取購物與待辦清單,get_calendar 讀取某月行程。寫入類工具可新增、修改、刪除清單與項目,以及建立、更新或刪除含參與者、時間與地點的行程。唯讀模式會隱藏所有建立、更新與刪除工具。
- 適用情境
- 適合家庭已把共享購物清單、家事和行事曆放在 Cozi,並希望助理不必打開應用程式就能查詢或修改這些內容的情況。唯讀模式適合只回答家庭行程問題的助理。
- 執行需求
- 需要 Cozi 帳號的使用者名稱與密碼,透過 COZI_USERNAME 與 COZI_PASSWORD 環境變數提供,或在 Claude Desktop 鑰匙圈提示中輸入。npx 方式需要 Node 20+,MCPB 安裝包不需要執行環境。需要連線至 Cozi REST 端點的網路。遠端 Smithery 端點宣告了 Authorization 權杖標頭。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Mjucius Cozi Mcp,將其新增到工作區。
- 連接 Authorization token 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
- 為需要使用其工具的對話啟用該服務。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
交給代理程式安裝
把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。
閱讀 https://sourceweft.com/mcp/ai.smithery%2Fmjucius-cozi_mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。其他 MCP 客戶端
把它新增到你客戶端的 mcpServers 設定中。
{
"mcpServers": {
"mjucius-cozi": {
"type": "http",
"url": "https://server.smithery.ai/@mjucius/cozi_mcp/mcp",
"headers": {
"Authorization": "Bearer <YOUR_TOKEN>"
}
}
}
}README
Cozi MCP Server
An unofficial Model Context Protocol server that lets AI assistants like Claude read and update your Cozi Family Organizer lists and calendar.
Each user runs their own instance against their own Cozi account. Your credentials are stored in your MCP client's secure config (Claude Desktop's OS keychain or your local environment) and never leave your machine — the author of this server has no access to your data.
Install
1. MCPB (recommended for Claude Desktop)
Download the latest .mcpb from the Releases page and double-click to install in Claude Desktop. You'll be prompted for your Cozi username and password — they're stored securely in your OS keychain.
This path requires no Node, npm, or Python install on your machine.
2. npx (any other MCP client)
Add this to your Claude Desktop claude_desktop_config.json (or any other MCP client config file):
Requires Node 20+. The package will be downloaded on first run.
Set COZI_READ_ONLY=true to expose only read operations. In read-only mode, the server registers
family_members, get_lists, get_list_items, get_calendar, search_calendar, and today; tools that create, update, or
delete Cozi data are hidden from MCP clients. Omit the variable, or set it to any value other than
1, true, yes, or on, for the default read-write tool surface.
Troubleshooting
Tools fail with "Authentication failed" even after I corrected my password
COZI_USERNAME and COZI_PASSWORD are read once, when the server process
starts. Editing them in your MCP client's settings updates the stored config but
does not reach a server that is already running — it keeps presenting the old
credentials until it is respawned.
Fully quit and relaunch your MCP client (on macOS, Cmd-Q rather than closing the window). Reloading, reconnecting, or toggling the extension off and on is usually not enough.
How do I tell which version is actually running?
The running server advertises its version in the MCP handshake; your client
displays it (Claude Desktop: Settings > Extensions). That is independent of what
is in your working tree — installing an MCPB installs whatever is inside the
.mcpb file, which is only as current as the last npm run bundle:mcpb. Build
the bundle immediately before installing it, or install from a GitHub release.
Repeated failures start returning "Too many failed login attempts"
Five consecutive failed authentications for a username trigger an exponential backoff, capped at 15 minutes; the message states the remaining wait. The counter lives in process memory, so restarting the client clears it.
Trust and Security
Cozi has no OAuth — username/password authentication is the only way the API supports. This server handles that fact honestly:
- Per-user, by architecture. Each user runs their own instance against their own Cozi account. There is no shared backend, no proxy, no multi-tenant database. The author of this server never sees anyone's credentials or data.
- Credentials live only in your MCP client's secure config. Claude Desktop stores them in your OS keychain. The npx path reads them from environment variables you set yourself. Nothing is logged, written to disk by this server, or sent anywhere except
https://rest.cozi.com. - API surface is constrained. This server only contacts
rest.cozi.comfor the same endpoints the Cozi web app uses (auth, lists, calendar, family members). The full request/response code lives insrc/cozi/— about 500 lines of TypeScript you can audit yourself. - Open source, MIT licensed. Pin a specific version (
@mjucius/[email protected]) if you want a stable target, or fork the repo and run your own build if you want zero supply-chain trust.
Security & trust model
This is a single-user server by design. The Cozi credential holder is the principal — there is no separate per-caller authentication gate, because each user runs their own instance against their own Cozi account. Concretely:
- stdio (npx / MCPB) trusts the local user. Whoever can launch the process and read the configured
COZI_USERNAME/COZI_PASSWORD(or the OS keychain entry) is treated as the account owner. The trust boundary is your machine and its user account. - No multi-tenancy. Each user configures their own instance with their own Cozi account. There is no shared backend, no tenant isolation to breach, and no per-caller authentication beyond possession of valid Cozi credentials — which is the same access model as the Cozi web app itself.
Two defensive measures narrow the blast radius of that model:
- Time-bounded credential cache. Authenticated clients are cached only for a bounded lifetime, so a rotated or revoked Cozi password stops working rather than being honored indefinitely from a stale cached session.
- Failed-login rate limiting. Repeated failed authentication attempts are rate-limited to blunt credential-guessing against the Cozi endpoint.
Tools
The server exposes 15 tools by default, or 6 read-only tools when COZI_READ_ONLY=true (or
the MCPB read-only setting) is enabled. Returns are slim dicts with null/empty fields omitted.
Family
family_members()→[{id, name, color?}]— call this first to get attendee IDs for appointments.
Lists
get_lists(list_type?)→[{id, title, type, item_count, completed_count}]—list_typeis optional,'shopping'or'todo'.get_list_items(list_id, include_completed=false)→[{id, text, status, position?, header?}]—header: truemarks a section heading (e.g. "PRODUCE"), not an item.create_list(name, list_type)→{id, title, type}.rename_list(list_id, title)→{id, title, type}— the items stay as they are.delete_list(list_id)→boolean.
create_list, rename_list and delete_list are hidden in read-only mode.
Items
add_item(list_id, text, position=0)→{id, text}.update_item(list_id, item_id, text?, completed?)→{id, text, status}— pass either or both. Non-atomic when both are passed: the text is updated first, then the status.remove_items(list_id, item_ids)→boolean.
All item tools are hidden in read-only mode.
Calendar
today()→{date, weekday, time, timezone}— the current local time on your machine. Every tool result also ends with this as a separate line, so the assistant resolves "tomorrow" against your clock rather than its own (often UTC). Set the standardTZenv var (e.g.TZ=America/New_York) if the server runs somewhere other than your own computer.get_calendar(year, month)→[{id, subject, day, all_day, start?, end?, end_day?, attendees?, location?, notes?, reminders?, kind?, read_only?, source?, recurring?, recurrence?, series_start?, series_end?, skipped_days?}].dayis the day the entry happens;end_dayappears only on multi-day events, which Cozi lists in every month they overlap (sodaymay fall outside the month you asked for). A recurring series is listed once per occurrence in the month, on the days Cozi itself expands it to: each entry has the seriesid, its ownday(andend_daywhen the occurrence spans days),series_start, andrecurrence(Cozi's wording of the rule). Occurrences deleted in the Cozi app are left out and named inskipped_days; a series with no occurrence left in a month is not listed for that month.kindmarks non-appointments such as birthdays;read_onlyitems (holidays, subscribed calendars, named bysource) cannot be changed.remindersare minutes before the start.search_calendar(query)→{appointments: [...same fields, last_day?, next_days?], more?}— Cozi's own search across months. A recurring series reports its latest past occurrence and the next ten. Cozi searches from a few years back onward, and a brand-new appointment can take a few seconds to show up.create_appointment(subject, start, end, attendees?, all_day=false, notes='', location?, repeat?, reminders?, notify?)—startandendare ISO datetimes (e.g.'2026-06-15T10:00:00'). For all-day events (all_day=true) a bare date (e.g.'2026-06-15') is also accepted andendmay equalstart; a bare date on a timed event is an error. Putendon a later date for a multi-day event; the result reports the span asend_day. Anendbeforestartis an error.repeatmakes it a series:{frequency: 'daily'|'weekly'|'monthly'|'yearly', interval?, weekdays?, monthly_by?: 'day_of_month'|'weekday', until?}(nountilrepeats forever).remindersare minutes before the start, e.g.[30, 1440].update_appointment(appointment_id, year, month, ...)— partial update via fetch-then-merge: pass(appointment_id, year, month)plus any fields to change. Omitted fields are preserved. To switch a timed appointment to all-day passall_day=true; to switch to timed pass newstart/end. Passingendre-spans the event against its (possibly newly set) start day, so anendon a later date makes it multi-day and one on the start day collapses it back; passingstartalone moves the event and keeps its length. A bare date is accepted forstart/endwhen the event is, or is being made, all-day; on a timed event it is an error. A recurring series needsscope:'this'changes only the occurrence onoccurrence_day(Cozi stores the changed copy as its own appointment, which is returned),'this_and_following'changes it and every later one (Cozi splits the series),'series'changes every occurrence.repeatreplaces a series' rule or turns a one-off into a series;remindersreplace the existing ones ([]clears them).delete_appointment(appointment_id, year, month, scope?, occurrence_day?, notify?)→boolean. Errors if the id is not on the(year, month)page. A recurring series needsscope:'this'removes the occurrence onoccurrence_day,'this_and_following'ends the series before it,'series'removes every occurrence. Single-occurrence deletes are read back to confirm Cozi applied them.
Holidays, subscribed calendars and birthdays are refused by update_appointment and delete_appointment. notify=true on any calendar write sends Cozi's change notification to the attendees who have notifications on (like the Cozi app's "notify" option); it is off by default.
create_appointment, update_appointment, and delete_appointment are hidden in read-only mode.
Workflow tip
When creating or updating appointments with specific attendees, call family_members() first and use those id values in the attendees arg. Calendar tools are scoped to a (year, month) page — pass the same year/month back when updating or deleting an appointment from that page.
Migration from v1 (Python)
v2.0 is a Node/TypeScript rewrite of the previous Python implementation, distributed as MCPB and npx. The runtime changed AND the tool surface was consolidated — if you have prompts written against v1, update them as follows:
The legacy v1 Python source is preserved at git tag v1.0.0 for reference.
Development
Requires Node 20+ (see .nvmrc).
The repo layout:
The Cozi HTTP client is inlined under src/cozi/ rather than published as a separate npm package — it's small, only useful for this MCP server, and avoids the supply-chain surface area of a separate dependency. If you'd prefer the Python equivalent for your own projects, see py-cozi-client.
Acknowledgments
- The
?apikey=coziwc|v…_productionrequirement on the Cozi auth endpoint was reverse-engineered from the livemy.cozi.comweb bundle by Wetzel402/py-cozi PR #3. Without that discovery, every login attempt from a server environment fails with a misleading 401 regardless of credential validity. - Built on the Model Context Protocol and its TypeScript SDK by Anthropic.
Trademark and affiliation
Cozi and the Cozi logo are trademarks of Cozi Group Inc. This project is unofficial and not affiliated with, endorsed by, or sponsored by Cozi Group Inc. Use of the Cozi API is at your own risk and subject to Cozi's Terms of Service.
License
MIT — see LICENSE.
Contributing
PRs welcome. Please run npm test and npm run typecheck before submitting.
來源:README.md,提交 2ebdd5d
工具
0版本歷史
1- v1.14.0最新Sep 16, 2026
評分
已滿足適用檢查項的 85%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通必需25 分
- 已宣告認證方式必需10 分
- 已列出工具必需15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
其他 Smithery 整合

222wcnm Bilistalkermcp
ai.smithery官方發布者
Bilibili 創作者分析伺服器,讓助理查詢指定使用者的個人資料、影片、動態、專欄、字幕、追蹤清單與留言。

Zwldarren Akshare One Mcp
ai.smithery官方發布者
遠端 MCP 伺服器,讓助理以唯讀方式取得中國股市資料:歷史與即時行情、新聞和財務報表。

Zhaoganghao Hellomcp
ai.smithery官方發布者
一個小型遠端 MCP 伺服器,讓助理依名字向人問候,並介紹「Hello, World」的由來。

Zeta Chain Cli
ai.smithery官方發布者
一個遠端 MCP 伺服器,讓助理為任意姓名或受眾產生友善、可自訂的問候語。

Yuna0x0 Hackmd Mcp
ai.smithery官方發布者
一個連接 HackMD API 的 MCP 伺服器,讓助理讀取、建立、更新和刪除 HackMD 筆記並管理團隊。