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:

.mcp.json
{
  "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_snippetsend_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.

stillrunning

Heartbeat monitoring for AI workflows and agent scripts.

Product

Company

Legal

© 2026 StillRunning. All rights reserved.
hello@stillrunning.ai