Docs · Model Context Protocol
Your agent, plugged in.
Quietbeat ships a first-party MCP server — read and write. Ask your agent what's down, or let it wire a dead-man switch for the cron job it just wrote. Two minutes to connect.
Mint a token
Account → API — mint a token named after the machine ("laptop", "ci"). It's shown once; treat it like a password. Revoking it cuts the agent off instantly.
Pick your agent
Claude Code · terminal · anthropic
claude mcp add --transport http quietbeat https://quietbeat.dev/mcp --header "Authorization: Bearer qb_YOUR_TOKEN"
verify with `claude mcp list` · remove with `claude mcp remove quietbeat`
{
"mcpServers": {
"quietbeat": {
"type": "http",
"url": "https://quietbeat.dev/mcp",
"headers": { "Authorization": "Bearer ${QUIETBEAT_TOKEN}" }
}
}
}
OpenAI Codex · terminal · openai
[mcp_servers.quietbeat]
url = "https://quietbeat.dev/mcp"
bearer_token_env_var = "QUIETBEAT_TOKEN"
export QUIETBEAT_TOKEN=qb_YOUR_TOKEN in your shell profile — the token never lands in the config file
codex mcp add quietbeat -- npx -y mcp-remote https://quietbeat.dev/mcp --header "Authorization: Bearer qb_YOUR_TOKEN"
Gemini CLI · terminal · google
gemini mcp add --transport http quietbeat https://quietbeat.dev/mcp --header "Authorization: Bearer qb_YOUR_TOKEN"
{
"mcpServers": {
"quietbeat": {
"httpUrl": "https://quietbeat.dev/mcp",
"headers": { "Authorization": "Bearer qb_YOUR_TOKEN" }
}
}
}
httpUrl (not url) selects streamable HTTP transport
Cursor · ide
{
"mcpServers": {
"quietbeat": {
"url": "https://quietbeat.dev/mcp",
"headers": { "Authorization": "Bearer qb_YOUR_TOKEN" }
}
}
}
VS Code · copilot agent mode
{
"inputs": [
{
"type": "promptString",
"id": "quietbeat-token",
"description": "Quietbeat API token",
"password": true
}
],
"servers": {
"quietbeat": {
"type": "http",
"url": "https://quietbeat.dev/mcp",
"headers": { "Authorization": "Bearer ${input:quietbeat-token}" }
}
}
}
Windsurf · ide · codeium
{
"mcpServers": {
"quietbeat": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://quietbeat.dev/mcp",
"--header", "Authorization: Bearer qb_YOUR_TOKEN"
]
}
}
}
Anything else · any mcp client
npx mcp-remote https://quietbeat.dev/mcp --header "Authorization: Bearer qb_YOUR_TOKEN"
Say things like
- "Is anything flat right now?"
- "You just wrote that backup script — create a heartbeat monitor for it (hourly) and append the ping to the crontab line."
- "Which monitors had incidents this week, and how long were they down?"
- "Pause the staging monitors while I deploy."
The toolbox
| Tool | What it does |
|---|---|
| get_status_summary | One glance at the workspace: monitor counts by status, what is down right now, and a plain-language summary. |
| list_monitors | List monitors. Compact rows by default (id, name, kind, status, group, url) — on a large account start here with a status filter instead of asking for everything. Pass full: true only when you need whole configs. |
| get_monitor | Full detail for one monitor: config, status, uptime (honest observed span), response-time stats (24h), recent incidents, and for heartbeats the masked ping address (ping_url_masked) — the full ping URL is shown once, by create_monitor. |
| get_incident_evidence | The black box for one incident: forensics captured at the moment of failure (response snapshot, DNS, TLS, response-time trend — or last beats and payload for heartbeats), plus the monitor's runbook. Start here when investigating. |
| list_incidents | Recent incidents across all monitors (last 14 days, ongoing first). Filter by state or monitor to keep the result small. |
| get_diagnosis | The saved AI investigation for an incident — verdict class, hypothesis, confidence, suspect ref, and what to check next. Read-only; a missing diagnosis is stated, not invented. |
| trigger_check | Run one probe right now instead of waiting for the next scheduled slot — use inside an investigation to confirm a fix landed. Not for heartbeat, paused, or relay-checked monitors. |
| ack_incident | Acknowledge an ongoing incident — "I'm on it". Stops the escalation ladder from climbing; the first ack wins and is idempotent. |
| post_incident_update | Post a human-readable note on an incident's timeline. CAUTION: the note is public on every status page the monitor is on, or is later added to, and while it is on one the note is emailed to confirmed subscribers — confirm the wording with the user before posting. status "resolved" on an open incident resolves it, even while the check is still failing. Owners and admins only. |
| create_monitor | Create a monitor. kind=heartbeat: your cron job pings us — the response includes the ping URL and a crontab example; append `&& curl -fsS <ping_url>` to the job. kind=http: we check the URL (optional keyword must appear in the body). kind=tcp: we connect to host:port (put host:port in url). Arguments outside this schema are refused. Certificate monitors are not created here — they need a source, a validation profile and often pasted material, and one configuration system is the web dashboard; list_monitors can filter kind=certificate to read them. Browser monitors are refused while browser execution is unavailable. |
| pause_monitor | Pause a monitor (no checks, no alerts). |
| resume_monitor | Resume a paused monitor. |
| delete_monitor | Delete a monitor and its whole history. Requires confirm: true. |
Write-capable from day one — most monitoring MCPs are read-only.
Everything is scoped to your account; deletes require confirm: true;
240 requests/min per token. The same data is available as a REST API
under /api/v1.