Simplisafe Mcp

io.github.chrischall由 GitHub 帳號 chrischall 發布v1.4.0更新於 Nov 5, 2026

Check SimpliSafe system state and sensors, review events, arm/disarm, and control smart locks

已驗證STDIO僅桌面位置與生活安全與監控

概覽

AI 產生的概覽

非官方 SimpliSafe 伺服器,讓助理查看警報狀態、感測器、門鎖與事件,並在確認後布防、撤防或開鎖。

可以做什麼
  • 列出帳戶下的系統,讀取單一系統的警報狀態、連線狀況與基地台訊息
  • 列出已配對的感測器與智慧鎖,含電量、離線、觸發及上鎖/解鎖/卡住狀態
  • 讀取基地台近期事件,例如布防、撤防、感測器開啟與警報
  • 讀取基地台設定、進出延遲與健康狀態,並讀取使用者警報 PIN 碼
  • 布防在家、布防外出或撤防,以及上鎖或解鎖,皆需先確認
  • 檢查驗證與 API 連線狀態
適用情境
適合想透過對話查詢居家安全狀態、查看近期事件或感測器電量,或在聊天用戶端中布防、撤防與開關門鎖的情境。只有在你接受助理具備撤防與開鎖能力時才應安裝。
執行需求
以 npm 套件形式在桌面用戶端本機執行(npx simplisafe-mcp)。需要 SimpliSafe 帳戶,以及透過一次性瀏覽器登入腳本取得的 OAuth2 更新權杖,以 SIMPLISAFE_REFRESH_TOKEN 提供。另有選用變數控制權杖快取檔案與確認行為。僅支援 SimpliSafe 3 系統。
安裝前請注意
此伺服器可撤防居家警報並解開門鎖,讀取 PIN 碼會把即時警報密碼以明文帶入對話。更新權杖等同家門鑰匙,且不會輪換,需在 SimpliSafe 應用程式登出所有裝置來撤銷。寫入與讀取 PIN 會要求確認,但 MCP_CONFIRM_MODE=auto 允許模型自行檢視預覽後繼續。它使用 SimpliSafe 私有行動 API,屬非官方專案。

安裝

在 SourceWeft 中

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

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

其他 MCP 客戶端

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

README

simplisafe-mcp

MCP server for SimpliSafe home security. Check whether the system is armed, review sensors and events, arm/disarm, and control smart locks — from Claude.

This server can disarm a home alarm and unlock doors. Every tool that changes physical state, plus the tool that reads alarm PINs, asks you to confirm first — nothing is sent until you do, and you see a preview of exactly what would happen (see Confirmations). Install it only where you'd be comfortable with that capability.

Developed and maintained by AI (Claude Code).

What you get

Tool
simplisafe_list_systemsSystems on the account with current alarm state
simplisafe_get_systemOne system's state, connectivity, base-station messages
simplisafe_list_sensorsSensors with battery / offline / triggered status, filterable
simplisafe_list_locksSmart locks with locked / unlocked / jammed state
simplisafe_get_eventsRecent base-station events (arm, disarm, opens, alarms); view: "brief" gives one line per event
simplisafe_get_settingsEntry/exit delays, volumes, base-station health
simplisafe_get_pinsAlarm PINs — cleartext, asks you to confirm first
simplisafe_set_alarm_stateArm home / arm away / disarm — asks you to confirm first
simplisafe_set_lock_stateLock / unlock a door — asks you to confirm first
simplisafe_healthcheckAuth + API reachability

Supports SimpliSafe 3 systems. Legacy SS2 systems are rejected with an explanation rather than an opaque upstream 404.

Install

bash
npm install -g simplisafe-mcp

Or add to .mcp.json:

json
{  "mcpServers": {    "simplisafe": {      "command": "npx",      "args": ["-y", "simplisafe-mcp"],      "env": { "SIMPLISAFE_REFRESH_TOKEN": "${SIMPLISAFE_REFRESH_TOKEN}" }    }  }}

Authentication — one browser login, once

SimpliSafe issues no API keys. The credential is an OAuth2 refresh token, minted by a browser login you perform one time:

bash
git clone https://github.com/chrischall/simplisafe-mcp && cd simplisafe-mcpnode scripts/bootstrap-auth.mjs             # prints an authorize URL# sign in (MFA included), then copy the com.simplisafe.mobile:// URLnode scripts/bootstrap-auth.mjs "<that URL>"

The token is written to .env (mode 0600) after being verified against the live API. SimpliSafe does not rotate refresh tokens, so it stays valid until you sign out of all devices in the SimpliSafe app — which is how you revoke it.

Capturing the code: open DevTools → Network and tick Preserve log before signing in; afterwards the browser fails to open a com.simplisafe.mobile://… link, and that failed entry's link address is what you paste. The code is single-use and expires in about two minutes.

Treat the resulting token like a house key: it grants full control of the alarm.

Confirmations

Arming, disarming, locking, unlocking and reading the PINs all ask you to confirm first. On a client that can show a confirmation prompt (Claude Code) you get the prompt, with the details below (unless MCP_CONFIRM_ELICITATION=off). On one that cannot (claude.ai, Claude Desktop) the first call sends nothing and returns a preview plus a confirmToken; only a repeat call with that token acts, once. The preview includes a plain statement of the physical consequence:

json
{  "status": "confirmation-required",  "confirmed": false,  "dispatched": false,  "action": "alarm.set_state",  "preview": {    "action": "set alarm state to away",    "method": "POST",    "path": "/ss3/subscriptions/7858153/state/away",    "sid": 7858153,    "locationName": "Home",    "currentState": "OFF",    "requestedState": "AWAY",    "warning": "Arms ALL sensors including interior motion. Starts an exit delay; anyone still moving inside when it expires can trigger the siren and a monitoring-center dispatch."  },  "confirmToken": "…",  "expiresAt": "…",  "ttlSeconds": 600,  "instruction": "Show this preview to the user verbatim and proceed only after they explicitly approve in chat. Then call again with confirmToken."}

The token is bound to that tool, target and preview. The system is re-read on the second call, and if what would happen no longer matches what you approved — different arguments, or the alarm or lock state moved in between — it is refused (DRAFT_CHANGED) with a fresh preview. A token that was already used is refused too (TOKEN_REUSED).

variabledefault
MCP_CONFIRM_MODEask-userWhat a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). ask-user: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. auto: the same two steps, but the model may use the token after reviewing the preview itself. refuse: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless MCP_CONFIRM_ELICITATION=off. An unrecognised value is treated as refuse.
MCP_CONFIRM_ELICITATIONonoff never shows a confirmation prompt, so every client gets the MCP_CONFIRM_MODE behaviour. Set it for a client that says it can show prompts but never does (the write hangs — opencode 2.0.x). Any other value is treated as on, with a warning on stderr.
MCP_CONFIRM_TTL_SECONDS600How long a token stays valid.
MCP_CONFIRM_SECRETrandom per processSigning key; set it only if tokens must survive a server restart.

Writes are verified

Once confirmed, a write executes and then re-reads the system to check what actually happened, reporting confirmed, in_progress (the exit delay is counting down), or unconfirmed. A 2xx is never treated as proof.

Shell access without the server

For quick one-off queries there's a curl-based skill in skills/simplisafe-api/ — same API, no MCP process, sharing the same refresh token.

Development

bash
npm installnpm run buildnpm test

Verified endpoint shapes live in docs/SIMPLISAFE-API.md, including several things that are easy to get backwards:

  • lock state is encoded 1 = locked, 2 = unlocked;
  • system version for routing is at location.system.version, not the top-level systemVersion;
  • events and doorlock control are not under the ss3/ prefix;
  • numEvents has an undocumented hard ceiling of 50;
  • settings.pins returns alarm codes in cleartext alongside harmless settings.

Disclaimer

Unofficial. Not affiliated with or endorsed by SimpliSafe. It uses the same private API the SimpliSafe mobile app uses, with your own account credentials. Use at your own discretion.

License

MIT

來源:README.md,提交 247b144

工具

10

simplisafe_list_systems

List the SimpliSafe systems on this account with their current alarm state (off/home/away), alarming status, connectivity and power status. Start here to get the `sid` other tools take.

無需輸入參數。

simplisafe_get_system

Get the current state of one SimpliSafe system: alarm state, whether it is alarming, base-station connectivity, power/battery status and any pending base-station messages.

輸入參數sid

simplisafe_get_settings

Get base-station settings for a system: entry/exit delays, alarm volume and duration, door chime, voice prompts, plus base-station health (wifi/cellular signal, wall power, backup battery, RF jamming). Does not include PINs — use simplisafe_get_pins for those.

輸入參數sid

simplisafe_get_pins

Read the system's user PINs (master, duress and named users). These are the live alarm codes and are returned in cleartext, so calling this puts them into the conversation. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a warning preview and a confirmToken and fetches nothing, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

輸入參數sidconfirmToken

simplisafe_list_sensors

List the sensors and devices paired to a system — entry sensors, motion, glass break, smoke/CO, keypads, sirens and locks — with battery, offline and triggered status. Filter by type with `type_name` (e.g. "entry", "motion_v2", "lock").

輸入參數sidtype_nameforce_updateproblems_only

simplisafe_list_locks

List the smart locks on a system with their current state (locked / unlocked / jammed), lock and keypad battery status, and keypad connectivity. Returns the `serial` that simplisafe_set_lock_state takes. Polls the base station fresh by default, because a stale answer to "is my door locked?" is worse than a slow one.

輸入參數sidforce_update

simplisafe_get_events

Get recent events recorded by the base station — arm/disarm, sensor opens, lock and unlock, alarms, errors — newest first. Each event carries an ISO timestamp alongside the raw epoch seconds.

輸入參數sidviewevent_typenum_eventsfrom_timestamp

simplisafe_set_alarm_state

Arm or disarm the alarm system: "off" (disarm), "home" (perimeter only) or "away" (all sensors). Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). This physically changes a security system: disarming leaves the house unmonitored, and arming can trigger a siren and a monitoring-center dispatch. After executing, the new state is verified by re-reading the system.

輸入參數sidstate必填confirmToken

simplisafe_set_lock_state

Lock or unlock a SimpliSafe smart lock. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). Unlocking physically opens a door lock, so it is gated even though it is technically reversible. After executing, the result is verified by re-reading the lock state.

輸入參數sidstate必填serial必填confirmToken

simplisafe_healthcheck

Check that the server can authenticate to SimpliSafe and reach the API. Reports whether the refresh token is configured and working, the resolved user id, and how many active systems the account has. Start here when other tools fail.

無需輸入參數。

版本歷史

15
  1. v1.4.0最新Nov 4, 2026
  2. v1.3.2Oct 16, 2026
  3. v1.3.1Oct 10, 2026
  4. v1.3.0Oct 7, 2026
  5. v1.2.4Oct 5, 2026
  6. v1.2.3Oct 3, 2026
  7. v1.2.2Sep 30, 2026
  8. v1.2.1Sep 25, 2026
  9. v1.2.0Sep 24, 2026
  10. v1.1.3Sep 23, 2026
  11. v1.1.2Sep 23, 2026
  12. v1.1.1Sep 21, 2026
  13. v1.1.0Sep 20, 2026
  14. v1.0.0Sep 19, 2026
  15. v0.2.2Sep 16, 2026

評分

已滿足適用檢查項的 90%

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

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

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

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分