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 分