bark-mcp
Enables sending iOS push notifications through Bark, with support for Bark's full notification parameters, preset scenarios, and encrypted push payloads.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bark-mcpsend me an iOS notification that the build finished successfully"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
bark-mcp
把 Bark(iOS 推送)包成一个纯 Node 的单文件服务: 既能作为 stdio MCP 让大模型直接给你的手机发通知,也能在浏览器里当推送游乐场用。
npx -y <tgz 直链> mcp # stdio MCP,给 Claude Code / Codex / pi 用
npx -y <tgz 直链> # 游乐场 + HTTP MCP (http://127.0.0.1:8787)只需要 Node ≥ 20,不装依赖、不需要 Bun(MCP SDK 已打包进产物)。
特性
Bark 全参数:标题 / 副标题 / 正文 / Markdown / 分组 / 图标 / 大图 / 角标 / 级别 / 音量 / 铃声 / 循环响铃 / 自动复制 / 跳转 URL / action / 存档 / TTL / 进度更新 / 静默删除。
官方加密方案:AES-128/192/256 × CBC/ECB/GCM,与 Bark App「推送加密」互通;GCM 认证标签按 App 约定拼在密文尾部。
场景库:24 个预设(进度条、验证码、循环响铃、时效性…),Web 页面和 MCP 工具共用同一份数据,模型不用背参数也能发出复杂效果。
单文件产物:
dist/bark-mcp.js,701 KB,含页面与 MCP SDK,npx -y/node/chmod +x都能跑。两种传输:stdio(本地 agent 首选)与 Streamable HTTP(和游乐场同进程)。
Related MCP server: imessage-mcp
快速开始(只需 Node)
方式 A:npx 直接跑 tgz(推荐,零安装)
CI 会在打 tag 时把 tgz 传到 Release,地址形如:
https://github.com/Delay-n-days/bark-mcp/releases/download/v1.0.0/bark-mcp-1.0.0.tgzMCP 客户端配置:
{
"mcpServers": {
"bark": {
"command": "npx",
"args": [
"-y",
"https://github.com/Delay-n-days/bark-mcp/releases/download/v1.0.0/bark-mcp-1.0.0.tgz",
"mcp"
],
"env": {
"BARK_KEY": "你的-device-key",
"BARK_SERVER": "https://api.day.app"
}
}
}
}先手动自检一次(mcp 会等 stdin 上的 JSON-RPC,Ctrl+C 退出即可):
npx -y <tgz 直链> --version
npx -y <tgz 直链> scenarios方式 B:下载单文件
从 Release 附件里取出 tgz,解压出 package/dist/bark-mcp.js,或直接 clone 后本地构建。
(dist/ 不进 git,见 发布与 CI。)
curl -L -o bark.tgz https://github.com/Delay-n-days/bark-mcp/releases/download/v1.0.0/bark-mcp-1.0.0.tgz
tar -xzf bark.tgz package/dist/bark-mcp.js
node package/dist/bark-mcp.js mcp{
"mcpServers": {
"bark": {
"command": "node",
"args": ["C:\\Users\\you\\bark-mcp.js", "mcp"],
"env": { "BARK_KEY": "你的-device-key" }
}
}
}方式 C:从源码构建
npm install
npm run build # 生成 src/web/index-html.generated.ts + dist/bark-mcp.js
npm test # node:test,65 个用例
npm run typecheck配置
优先级:真实环境变量 > .env。.env 会从当前工作目录和产物所在目录依次查找。
变量 | 默认值 | 说明 |
| 空 | 必填。Bark 设备 key,同时作为 HTTP/MCP 的访问令牌 |
|
| Bark 服务器地址,可换成自建服务 |
|
| 监听地址;非回环地址会强制开启认证 |
|
| 监听端口 |
| 未设置 | 设为 |
| 空 | 想用别的字符串当令牌时设置它(不强依赖 |
|
| 设为 |
|
| 自定义密钥文件;文件里合法的密钥优先于内置默认值 |
.env 示例见 .env.example。
三种用法
1. 命令行发推送
node bark-mcp.js push --title "构建完成" --body "耗时 42s" --group ci
node bark-mcp.js push --scenario progress --json '{"body":"已完成 80%"}'
node bark-mcp.js push --title "机密" --body "只有手机能看到" --encrypt --algorithm aes-256 --mode gcm
node bark-mcp.js scenarios # 列出所有预设场景
node bark-mcp.js key --regen aes-128 # 换一把 AES-128 KEYpush 支持全部 Bark 参数(--device-keys k1,k2 批量推送),完整列表见 --help。
2. Web 游乐场
node bark-mcp.js # → http://127.0.0.1:8787点场景 → 点发送,右侧能看到 Bark 原始返回、实际请求参数、密文与 IV。
含密钥的接口需要 Authorization: Bearer <BARK_KEY>;只监听回环地址时默认放行,方便本地调试。
服务端要求令牌而页面没带时,右上角会出现「填 KEY」按钮,填一次存在 localStorage。
3. MCP 服务
stdio(命令行 agent 首选):见上面「快速开始」的 A / B 两种配置。
Streamable HTTP(和游乐场同进程):
node bark-mcp.js # MCP 端点在 http://127.0.0.1:8787/mcp{
"mcpServers": {
"bark": {
"type": "http",
"url": "http://127.0.0.1:8787/mcp",
"headers": { "Authorization": "Bearer your-device-key" }
}
}
}pi 用户可以直接:
pi mcp add bark --url http://127.0.0.1:8787/mcp --description "Bark iOS 推送"HTTP 模式是有状态的:一次 initialize 建立一个会话,服务端每小时回收闲置会话;未知名会话返回 404,客户端重新 initialize 即可。
MCP 工具
工具 | 作用 |
| 主入口,覆盖 Bark 全部参数,可 |
| 列出内置场景(可按分组过滤),模型不用记参数就能挑效果 |
| 发送内置场景,支持 |
| 只加密不发送,返回 ciphertext / iv,排查 App 解密失败 |
| 服务器地址、是否配了 BARK_KEY(脱敏)、Bark 服务器是否可达 |
| 读取当前密钥,或 |
bark_push 的 extra 对象可以透传任何 Bark 新字段,不用等工具更新。
设计取舍:
默认目标在服务端。
BARK_KEY是默认设备,模型不需要也不应该知道它;只有明确要多设备时才传device_key。场景即能力。「进度条」靠同一个
id反复更新,「验证码」靠copy + automaticallycopy,这些参数组合的知识直接做成工具,比让模型背文档更可靠。返回值给人类可读摘要 + 机器可读 JSON。摘要含成功/失败、目标(脱敏)、算法模式,后面附请求体与 Bark 原文。
加密
Bark App 首页 →「推送加密」里填算法、模式和 KEY;服务端 /api/config(或 bark_crypto_keys)给出同一份密钥即可互通。
node bark-mcp.js key # 查看当前密钥
node bark-mcp.js key --regen aes-256 # 生成新 key 并写入密钥文件默认密钥写死在 src/config.ts 的 DEFAULT_KEYS 里,所以单文件产物丢到任何机器上都能和 App 对上,不需要额外文件:
{
"aes-128": "YChh4ziPE1eeaFZU",
"aes-192": "0mLAQ5oJmqdVUWajtjVEAy4K",
"aes-256": "K9tq3DK7MbidKqRUoJeJdvcxpOKHeFDX"
}优先级:BARK_KEYS_FILE 指向的文件里的合法值 > 内置 DEFAULT_KEYS。
想换成自己的 key,改 DEFAULT_KEYS 重新 npm run build,或用 BARK_KEYS_FILE 指一个自己的密钥文件;
纯读默认值时不会落盘,只有 --regen 或文件里已有有效 key 才会写 crypto_keys.json。
实现要点:
明文先用紧凑 JSON(
JSON.stringify,保留中文、无空格)编码再加密;CBC 的 IV 是 16 位十六进制字符串,GCM 的 IV 是 12 位;
GCM 的认证标签附加在密文尾部,与 Bark App 解密扩展的约定一致;
加密模式下 Bark 只收到
device_key + ciphertext + iv,但id/delete会额外明文透传(静默删除不经过解密扩展);测试里固化了 Bark 官方文档的 AES-128-CBC 向量,改实现不会被悄悄改坏。
HTTP API
方法 | 路径 | 说明 |
|
| 游乐场页面(无需令牌) |
|
| 服务器、脱敏 key、算法/模式、场景列表 |
|
| 发送推送,body 即 Bark payload,另支持 |
|
|
|
|
| Streamable HTTP MCP |
curl -X POST http://127.0.0.1:8787/api/push \
-H "Authorization: Bearer $BARK_KEY" \
-H 'content-type: application/json' \
-d '{"title":"hi","body":"hello","encrypt":true}'发布与 CI
工作流 | 触发 | 做什么 |
| push / PR | typecheck → build → 用 |
| 打 | 同时用 Node 20 与 22 验证 → |
出 tgz:
git tag v1.0.0 && git push origin v1.0.0本地出包同理(prepack 会自动构建):
npm pack # → bark-mcp-1.0.0.tgztgz 里只有 4 个文件:package.json、dist/bark-mcp.js、README.md、LICENSE。
构建产物不进 git:dist/ 与 src/web/index-html.generated.ts 都由 CI 现场生成,
只存在于 Release 附件和 workflow artifact 里。仓库因此保持纯源码,改动可 diff。
npx 部署的注意事项
URL 后面必须紧跟
mcp参数,否则默认进serve模式(起 Web 服务),stdio 客户端会连不上。npm 会缓存 tgz,升级版本后建议换带版本号的新地址,或
npm cache clean --force。Release 直链天然带版本号,避开了这个问题。GitHub Release 的资产直链会 302 到
objects.githubusercontent.com,npx/npm 能正常跟随;仓库必须公开,私有仓库需要 token。公司网络拦 GitHub 时,可以把同一个 tgz 放到 jsDelivr 或对象存储,
npx -y只认 HTTP 可下载的 tar 包。
目录结构
src/
main.ts CLI 入口(serve / mcp / push / scenarios / key)
config.ts .env、环境变量、crypto_keys.json、默认密钥
crypto.ts AES 加密与自检向量
bark.ts Bark 客户端与推送编排
scenarios.ts 场景库(Web 与 MCP 共用)
http.ts 游乐场 + Streamable HTTP MCP
node-adapter.ts node:http ↔ Web Request/Response 桥接
mcp/server.ts MCP 工具定义与实现
mcp/stdio.ts stdio 入口
web/index.html 游乐场页面(真相源)
web/index-html.generated.ts 由 gen-web 生成,供 Node 直接 import
types.d.ts 生成模块的类型声明
test/
assert.ts 极简断言层(node:test 之上)
core.test.ts 加密向量、payload、Bark 响应判定、默认密钥
mcp.test.ts 六个工具的端到端行为
http.test.ts 认证、API、MCP 会话
scripts/
gen-web.ts HTML → TS 字符串模块
build.ts esbuild 打包单文件 + 双运行时冒烟
python-legacy/ 最初的 FastAPI 实现,仅作参考安全说明
单文件产物里不含
BARK_KEY(运行时从环境变量 /.env读取);加密密钥是写死的默认值,按设计不保密,BARK_KEY才是真正的凭证。.env与crypto_keys.json已加入.gitignore,别提交。监听非回环地址时必须配置令牌,否则进程直接拒绝启动。
任何拿到
BARK_KEY的人都能给你的手机发通知,泄漏后请在 Bark App 里重置设备 key。
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Push notifications for AI agents - send instant iPhone notifications from any MCP client.
AI agents and scripts reporting back to your iPhone with Push Notifications and Live Activities.
Phone, SMS and email for AI agents. One remote MCP endpoint, OAuth login, zero install.
Give your AI agent a memory and body on your iPhone: set alarms, ring your phone, over MCP.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server and CLI for iOS development — build, test, automate, and diagnose from any AI agent or terminal.2MIT
- AlicenseNot gradedqualityDmaintenanceEnables reading and sending iMessages on macOS through MCP, with tools for managing chats, messages, and attachments via AI agents.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for macOS native notifications with 67 AI brand icons and system sound support, enabling AI agents to send desktop notifications via one-line tool calls.MIT
- AlicenseAqualityDmaintenanceSends native macOS push notifications via a single MCP tool, using osascript for secure delivery.1MIT