Paw Pulse

Heartbeat and tokens/sec monitoring for self-hosted LLM servers (Ollama etc.), with down alerts.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
98%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~852Tokens (tool definitions)
~1.1 KBTypical response size
Moderate attention impact (0.67% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "pawpulse": {
      "url": "https://pawpulse.dougalpaw.workers.dev/mcp"
    }
  }
}

Remote endpoints

https://pawpulse.dougalpaw.workers.dev/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡create_monitor(name, grace_seconds, slow_tps_threshold, webhook_url, public)

Create a new anonymous Paw Pulse monitor. Returns ingest_token and manage_token exactly once — store them, they cannot be recovered.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Display name, not treated as identifying."
    },
    "grace_seconds": {
      "type": "number",
      "description": "60-86400, default 300."
    },
    "slow_tps_threshold": {
      "type": "number",
      "description": "Optional tokens/sec floor."
    },
    "webhook_url": {
      "type": "string",
      "description": "Optional https:// webhook for alerts."
    },
    "public": {
      "type": "boolean",
      "description": "Whether /v1/monitors/:id/status and /s/:id are public."
    }
  }
}
🟢get_status(id, manage_token)

Get the current status of a monitor. Private monitors require manage_token.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Monitor id, as returned by create_monitor."
    },
    "manage_token": {
      "type": "string",
      "description": "The monitor's manage_token (returned once by create_monitor)."
    }
  },
  "required": [
    "id"
  ]
}
🟢list_heartbeats(id, manage_token, limit)

List recent heartbeats for a monitor (newest first). Private monitors require manage_token.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Monitor id, as returned by create_monitor."
    },
    "manage_token": {
      "type": "string",
      "description": "The monitor's manage_token (returned once by create_monitor)."
    },
    "limit": {
      "type": "number",
      "description": "1-500, default 50."
    }
  },
  "required": [
    "id"
  ]
}
🟡update_monitor(id, manage_token, name, grace_seconds, slow_tps_threshold, ...)

Change a monitor's name, grace period, slow threshold, webhook or visibility. Only the fields you pass change.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Monitor id, as returned by create_monitor."
    },
    "manage_token": {
      "type": "string",
      "description": "The monitor's manage_token (returned once by create_monitor)."
    },
    "name": {
      "type": "string",
      "description": "New display name."
    },
    "grace_seconds": {
      "type": "number",
      "description": "60-86400."
    },
    "slow_tps_threshold": {
      "type": [
        "number",
        "null"
      ],
      "description": "Tokens/sec floor, or null to clear."
    },
    "webhook_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "https:// webhook, or null to clear."
    },
    "public": {
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "manage_token"
  ]
}
🔴delete_monitor(id, manage_token)

Permanently delete a monitor and all its heartbeats. Cannot be undone.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Monitor id, as returned by create_monitor."
    },
    "manage_token": {
      "type": "string",
      "description": "The monitor's manage_token (returned once by create_monitor)."
    }
  },
  "required": [
    "id",
    "manage_token"
  ]
}
🟢setup_instructions(id, ingest_token, llm_kind)

Shell commands to install the heartbeat script on the box being monitored and run it from cron. Pass the id and ingest_token from create_monitor.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Monitor id, as returned by create_monitor."
    },
    "ingest_token": {
      "type": "string",
      "description": "The monitor's ingest_token (returned once by create_monitor)."
    },
    "llm_kind": {
      "type": "string",
      "enum": [
        "ollama",
        "openai",
        "none"
      ],
      "description": "none = plain heartbeat, no LLM probe. Default ollama."
    }
  },
  "required": [
    "id",
    "ingest_token"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools