关于 Paw Pulse
Paw Pulse 是用于自托管 LLM 服务的推送式心跳与性能监控服务,面向运行 Ollama、llama.cpp 或 vLLM 等服务的用户。它能发现服务中断、生成变慢及 Ollama 的 GPU 回退,并通过 Webhook 发送告警。
主要功能
- 01推送心跳并检查在线状态
- 02监控生成速度阈值
- 03检测 Ollama GPU 回退
- 04通过 Webhook 发送状态告警
- 05提供公开状态页与徽章
适用场景
- 01发现家用 LLM 主机离线
- 02排查 Ollama 生成速度下降
- 03监控 NAS、备份任务或定时任务
MCP 相关
远程 MCP 服务提供创建、配置、查询和删除监控器的工具。连接无需认证;更改监控器的工具需要提供 manage_token。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://pawpulse.dougalpaw.workers.dev/mcpclaude mcp add --transport http dev-workers-dougalpaw-pawpulse-pawpulse https://pawpulse.dougalpaw.workers.dev/mcp{"mcpServers":{"dev-workers-dougalpaw-pawpulse-pawpulse":{"type":"http","url":"https://pawpulse.dougalpaw.workers.dev/mcp"}}}在 Cursor 中打开{"servers":{"dev-workers-dougalpaw-pawpulse-pawpulse":{"type":"http","url":"https://pawpulse.dougalpaw.workers.dev/mcp"}}}在 VS Code 中打开{"mcpServers":{"dev-workers-dougalpaw-pawpulse-pawpulse":{"type":"http","url":"https://pawpulse.dougalpaw.workers.dev/mcp"}}}{"mcpServers":{"dev-workers-dougalpaw-pawpulse-pawpulse":{"serverUrl":"https://pawpulse.dougalpaw.workers.dev/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
6| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 否 | 显示名称,不会被视为身份识别信息。 |
| public | boolean | 否 | 是否公开 /v1/monitors/:id/status 和 /s/:id。 |
| webhook_url | string | 否 | 可选的 https:// 告警 Webhook。 |
| grace_seconds | number | 否 | 60-86400,默认值为 300。 |
| slow_tps_threshold | number | 否 | 可选的每秒令牌数下限。 |
详细介绍
Paw Pulse
面向可自托管大模型服务的推送式心跳与性能监控工具 (Ollama、llama.cpp、vLLM,以及任何兼容 OpenAI 的服务)。无需将服务暴露到互联网, 即可知道家中的 AI 设备何时宕机或运行变慢。
在线实例:https://pulse.dougalpaw.com
由 AI Agent Pup 构建、部署和运维,是 Dougal Paw 项目的一部分。没有账号、不会存储 IP,也不收集个人数据:监控项都是匿名的,仅通过随机 ID、接入令牌和管理令牌进行识别。
工作原理
一个小型客户端脚本(pawpulse.sh)在托管大模型服务的设备上运行,每隔几分钟向此服务发送一次心跳。如果在配置的宽限期内没有收到心跳,监控状态就会切换为 down。你的大模型服务永远不会接受入站连接。
设备上没有大模型?设置 LLM_KIND=none 即可发送普通心跳,这样同样的警报也适用于 NAS、备份任务或任何 cron 任务。
对于 Ollama,它还可以捕捉不易察觉的故障:设置 slow_tps_threshold,在生成速度变慢时收到提醒;设置 min_gpu_pct,在模型从 GPU 回退到 CPU 时收到提醒(客户端会从 /api/ps 读取 size_vram;需要 jq)。
指南:
技术栈
- Cloudflare Workers(免费套餐)+ D1 + Cron Triggers。
- TypeScript,使用 Hono 作为轻量路由器。
- 无其他运行时依赖。
项目结构
src/
index.ts Hono app: routes, pages, cron entrypoint
service.ts Business logic shared by REST and MCP
db.ts D1 queries
state.ts Pure state-machine logic (unit tested)
validation.ts Pure input validation (unit tested)
cron.ts Per-minute sweep: state transitions + alert dispatch
webhook.ts Outbound alert delivery (Discord-aware, generic JSON fallback)
mcp.ts Remote MCP server (Streamable HTTP, stateless)
openapi.ts OpenAPI 3.1 document served at /openapi.json
llms.ts /llms.txt content
templates.ts HTML pages (/, /privacy, /s/:id)
badge.ts Shields-style SVG badge renderer
static/ Served static assets (pawpulse.sh)
migrations/ D1 schema (0001_init.sql)
test/ node:test unit tests for state.ts and validation.ts
API
完整规范请参阅 /openapi.json,简要概述请参阅 /llms.txt。
POST /v1/monitors— 创建监控项。POST /v1/monitors/:id/beat— 发送心跳(Authorization: Bearer <ingest_token>)。GET /v1/monitors/:id/status— 查看当前状态;公开监控项无需认证。GET /v1/monitors/:id/heartbeats— 查看近期心跳。PATCH/DELETE/v1/monitors/:id— 管理或移除监控项(Authorization: Bearer <manage_token>)。GET /s/:id— 公开的 HTML 状态页。GET /badge/:id.svg— 状态徽章。GET /pawpulse.sh— 客户端脚本。POST /mcp— 远程 MCP 服务(见下文)。
MCP
https://pulse.dougalpaw.com/mcp 是一个远程 MCP 服务(Streamable
HTTP)。它是无状态的:每个 POST 请求都携带一条 JSON-RPC 消息,并获得一个 JSON
响应;没有会话,也没有 SSE 流,这符合规范要求。它支持协议版本 2025-06-18、2025-03-26 和 2024-11-05。
工具:create_monitor、setup_instructions、get_status、
list_heartbeats、update_monitor、delete_monitor。这些工具使用与 REST API 相同的服务层。连接时无需认证;会更改监控项的工具会将其 manage_token 作为参数。
{ "mcpServers": { "pawpulse": { "type": "http", "url": "https://pulse.dougalpaw.com/mcp" } } }
警报
设置监控项的 webhook_url 后,在监控项宕机、运行变慢或恢复时,你就会收到消息。消息格式根据 URL 自动选择:Discord、Slack、Microsoft Teams
(Workflows)、Telegram(https://api.telegram.org/bot<token>/sendMessage?chat_id=<id>)
和 Google Chat 会收到原生消息;其他任何 https URL 都会收到通用 JSON
(content、text、monitor_name、alert、state、timestamp)。
可自托管的用户可以在 wrangler.toml 中将 ALERTS_ENABLED = "false",关闭所有警报。
开发
pnpm install
npm test # unit tests (node:test, no network/D1 needed)
npm run typecheck
部署
npx wrangler d1 create pawpulse # once; copy the database_id into wrangler.toml
npx wrangler d1 migrations apply pawpulse --remote
npx wrangler deploy
Cron 每分钟运行一次(* * * * *),扫描监控项是否超过宽限期,以及是否达到慢速 TPS 阈值。每次状态变化最多触发一个 webhook,并限制每次运行的出站 webhook 请求数,以确保不超过 Workers 免费套餐的 50 次子请求限制。
隐私
请参阅 /privacy。任何地方都没有账号、Cookie、分析功能或 IP 日志。DELETE /v1/monitors/:id 会永久删除监控项及其所有心跳。
许可协议
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。