Agent install
MCP server
stillrunning-mcp is a local MCP stdio server that gives Claude Code or Codex a guided flow for installing monitoring: plan, create, wire, and verify. It is the convenience layer over the API-only flow. The curl playbook works without it. Your agent still does the discovery with its own tools; the server never reads or edits your filesystem.
Setup
Create an installer key at stillrunning.ai/app/settings, then add the server to your agent. For Claude Code:
{
"mcpServers": {
"stillrunning": {
"command": "npx",
"args": ["-y", "stillrunning-mcp"],
"env": { "STILLRUNNING_API_KEY": "sr_live_xxxxxxxxxxxxxxxxxxxxxxxx" }
}
}
}STILLRUNNING_API_URL is optional and defaults to https://stillrunning.ai.
Tools
list_monitors, list your monitors (never returns ping URLs). generate_install_plan, dry-run reconcile that previews what would be created/updated/unchanged/rejected/missing without writing. create_monitors_from_plan, apply the confirmed plan (re-send the same monitors; idempotent, never duplicates). get_wiring_snippet, the exact wiring per runtime with a fail-path that can't break your job. send_test_ping, connectivity-test a monitor by id (verifies the endpoint, never makes it healthy). get_alert_destinations, show where alerts go (owner email + channels, masked). add_alert_channel, attach a Slack/Discord destination (needs a key with the "manage alert channels" option; generic webhooks are added from the dashboard).
Scheduled vs on-demand
Every monitor you pass to generate_install_plan and create_monitors_from_plan takes an optional mode. scheduled is the default: the job has an expected cadence, so a missed run alerts, and it needs a schedule (cron, @daily, 6h/30m, or raw seconds) or an intervalSec. on_demand is for a job that runs only when something external triggers it, a chatbot, a RAG bot, a webhook or API-triggered agent. Send no schedule at all and silence never alerts, because an agent nobody triggered is not a broken agent.
Everything else is unchanged on an on-demand monitor. Every run still records duration, tokens, cost, and model, failures still alert, and cost anomalies, duration anomalies, and monthly budgets all still fire. Pick on_demandonly when there is genuinely no expected cadence. Reaching for it because a job's schedule could not be determined silently discards the absence detection you installed StillRunning to get.
The flow
Your agent scans your jobs → generate_install_plan→ shows you the exact changes → you confirm → create_monitors_from_plan → get_wiring_snippet → send_test_ping→ report. Nothing in your crontab, launchd, systemd, CI, or scripts is edited before you say yes.
For a Claude or agent job, ask get_wiring_snippet for the claude-code-wrapper runtime: it returns the wrap.mjs wrapper that auto-captures tokens, cost, model, and tool calls from a claude -p run, no code changes, rather than a bare liveness heartbeat.
Trust contract
Ping URLs are secrets, returned only when a monitor is first created; an installer key can't reveal an existing monitor's URL, so get_wiring_snippet emits a placeholder for those rather than leaking it. A test ping verifies the endpoint but never makes a monitor healthy. Re-running reconciles instead of duplicating. send_test_ping takes a monitor id only, so the server can never be turned into a generic fetch tool.
No MCP? No problem.
The same flow works as a pure paste-prompt against the API. See the agent-install guide.