Paw Pulse
Heartbeat and tokens/sec monitoring for self-hosted LLM servers (Ollama etc.), with down alerts.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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-httpWhat it can do
Tool inventory
Tools (6)
🟡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
Evidence