{"name":"com.dougalpaw/pawpulse","slug":"dougalpaw-pawpulse","title":"Paw Pulse","description":"Heartbeat and tokens/sec monitoring for self-hosted LLM servers (Ollama etc.), with down alerts.","url":"https://mcp.market/server/dougalpaw-pawpulse","rating":null,"grade":"B","score":81,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-10-26T10:02:04.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T06:55:53.115Z","last_ok_at":"2026-11-04T06:55:53.115Z","latency_ms":36},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/dougal-paw/pawpulse","website":"https://pulse.dougalpaw.com","version":"0.3.0","remotes":[{"type":"streamable-http","url":"https://pulse.dougalpaw.com/mcp"}],"packages":[],"tools":[{"name":"create_monitor","description":"Create a new anonymous Paw Pulse monitor. Returns ingest_token and manage_token exactly once — store them, they cannot be recovered.","write_action":true,"price_micros":0,"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."},"min_gpu_pct":{"type":"number","description":"Optional GPU offload floor (0-100]. Alerts 'slow' when Ollama runs a model mostly on CPU."},"webhook_url":{"type":"string","description":"Optional https:// webhook for alerts."},"public":{"type":"boolean","description":"Whether /v1/monitors/:id/status and /s/:id are public."}}}},{"name":"delete_monitor","description":"Permanently delete a monitor and all its heartbeats. Cannot be undone.","write_action":true,"price_micros":0,"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"]}},{"name":"get_status","description":"Get the current status of a monitor. Private monitors require manage_token.","write_action":false,"price_micros":0,"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"]}},{"name":"list_heartbeats","description":"List recent heartbeats for a monitor (newest first). Private monitors require manage_token.","write_action":false,"price_micros":0,"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"]}},{"name":"setup_instructions","description":"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.","write_action":false,"price_micros":0,"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"]}},{"name":"update_monitor","description":"Change a monitor's name, grace period, slow threshold, webhook or visibility. Only the fields you pass change.","write_action":true,"price_micros":0,"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."},"min_gpu_pct":{"type":["number","null"],"description":"GPU offload floor (0-100], or null to clear."},"webhook_url":{"type":["string","null"],"description":"https:// webhook, or null to clear."},"public":{"type":"boolean"}},"required":["id","manage_token"]}}],"scan":{"score":81,"grade":"B","scanned_at":"2026-10-27T05:16:44.684Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-27T05:16:44.636Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 320ms"]},"poisoning":{"score":15,"max":15,"notes":["6 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 3 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":8,"max":10,"notes":["endpoint served from the registry-verified namespace domain"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://pulse.dougalpaw.com/mcp","reachable":true,"authRequired":false,"latencyMs":320,"serverInfo":{"name":"pawpulse","version":"0.3.0"}}],"packages":[],"repo":{"found":true,"owner":"dougal-paw","repo":"pawpulse","archived":false,"pushedAt":"2026-10-26T10:02:04Z","stars":0,"forks":0,"openIssues":1,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/343072302?v=4","ownerCreatedAt":"2026-10-15T14:47:30Z","license":"MIT"},"icon":{"url":"https://pulse.dougalpaw.com/favicon.svg","source":"site"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-10-26T10:02:04.000Z","score":23}}}},"grade_history":[],"reviews":[]}