# Paw Pulse

Watches a home box running Ollama, llama.cpp or vLLM and fires an alert when it stops answering or slows down. Nothing has to be exposed to the internet.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI
- Author: dougal-paw
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/dougal-paw/pawpulse
- Updated: 2026-10-23
- HTML: https://affpapa.org/en/nevibecode/mcp/paw-pulse

## What it does

A small client script, `pawpulse.sh`, sits on the machine that hosts your LLM server and pushes a heartbeat out every few minutes. Once the signals stop for longer than the grace period you set, the monitor flips to `down` and a webhook goes out. The server itself never takes an inbound connection, so there is no port to open.

On Ollama it also catches the quiet problems. Set `slow_tps_threshold` and you hear about generation crawling; set `min_gpu_pct` and you hear when a model has dropped from GPU to CPU. That second check reads `size_vram` from `/api/ps`, so `jq` has to be present on the box. No LLM on the host? `LLM_KIND=none` sends a plain heartbeat, and the same alerts can watch a NAS or a cron job.

The MCP endpoint is remote and speaks Streamable HTTP. It keeps no sessions: one JSON-RPC message per POST, one JSON reply. Tools are `create_monitor`, `setup_instructions`, `get_status`, `list_heartbeats`, `update_monitor` and `delete_monitor`. Connecting needs no auth, but changing a monitor means passing its `manage_token` as an argument. Alerts reach Discord, Slack, Microsoft Teams, Telegram and Google Chat natively; any other https URL gets generic JSON.

## Requirements
- Remote server: `https://pulse.dougalpaw.com/mcp`

## Install

### Claude Code (native platform)

**Platform CLI: remote server**
```bash
claude mcp add --transport http pawpulse https://pulse.dougalpaw.com/mcp
```

### Codex

**Platform CLI: remote server**
```bash
codex mcp add paw-pulse --url https://pulse.dougalpaw.com/mcp
```

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "paw-pulse": {
            "url": "https://pulse.dougalpaw.com/mcp"
        }
    }
}
```

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "paw-pulse": {
            "type": "http",
            "url": "https://pulse.dougalpaw.com/mcp"
        }
    }
}
```

### Gemini CLI

**Platform CLI: remote server**
```bash
gemini mcp add -t http paw-pulse https://pulse.dougalpaw.com/mcp
```

## When to use it
- find out a home Ollama box died without exposing it publicly
- get a Discord alert when token generation slows to a crawl
- catch a model falling back from GPU to CPU
- watch a NAS or cron job with the same heartbeat setup
- share a public status page and badge for a monitor

## Example prompts
- Create a monitor for my home Ollama server and show me the setup instructions
- List the recent heartbeats for my monitor and tell me its current state
- Update the slow_tps_threshold on my monitor, here is the manage_token

## Similar
- [HomeLab Monitor](https://affpapa.org/en/nevibecode/mcp/homelab-monitor.md) — MCP server · ★ 227
- [huawei-cloud-monitoring-query](https://affpapa.org/en/nevibecode/skills/huawei-cloud-monitoring-query.md) — skill · 16900 installs
- [setting-up-cloudwatch-alarm-notifications](https://affpapa.org/en/nevibecode/skills/setting-up-cloudwatch-alarm-notifications.md) — skill · 6300 installs
- [cargo-observability](https://affpapa.org/en/nevibecode/skills/cargo-observability.md) — skill · 6300 installs
- [sentry-create-alert](https://affpapa.org/en/nevibecode/skills/sentry-create-alert.md) — skill · 4100 installs
- [cx-alerts](https://affpapa.org/en/nevibecode/skills/cx-alerts.md) — skill · 3600 installs

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
