Paw Pulse
Heartbeat and tokens/sec monitoring for self-hosted LLM servers (Ollama etc.), with down alerts.
我該用這個嗎
品質與安全性
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"pawpulse": {
"url": "https://pulse.dougalpaw.com/mcp"
}
}
}遠端端點
https://pulse.dougalpaw.com/mcpstreamable-http它能做什麼
工具清單
工具(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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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.
輸入結構描述
{
"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"
]
}社群
證據