MCP Server

Drive Enori from Claude Desktop, Claude.ai custom connectors, or any client that speaks the Model Context Protocol. 45 tools — monitors, incidents, alerts, status pages, browser checks, and SLOs — all from natural language.

What you can do

Once connected, ask Claude things like:

  • "Which of my monitors had incidents in the last 24 hours?"
  • "Pause the API monitor for an hour while I deploy."
  • "Create a 99.9% availability SLO with a rolling 30-day window on monitor X."
  • "What's the current burn rate on my customer SLA?"
  • "Generate a status page for the public-facing services."

Claude routes the question through the relevant Enori MCP tools, fetches your data, and answers in plain language. No copy-pasting between dashboards.


Connecting

The MCP server lives at https://mcp.enori.io/mcp. There are two ways to authenticate:

OAuth gives the client full access to your account, just like a browser session. No scopes to manage, no API keys to rotate.

Claude Desktop / Claude Code CLI:

json
{
  "mcpServers": {
    "enori": {
      "url": "https://mcp.enori.io/mcp"
    }
  }
}

The first time Claude calls a tool, your browser opens to https://app.enori.io for sign-in. After approval, the client stores a refresh token (30-day TTL, rotated on each use) and the dance is invisible from then on.

Claude.ai custom connectors:

In Claude.ai, Settings → Custom Connectors → Add custom connector → URL = https://mcp.enori.io/mcp/sse. The legacy SSE transport is on the /mcp/sse path; modern HTTP-streaming clients use /mcp. Both paths talk to the same server.

API keys are scope-bound. The MCP server reuses the same scopes as the REST API:

ScopeTools
monitors:readList, get, stats, check results, traces, SLO status, SLO compliance, SLO breaches, browser monitors, browser check details
monitors:writeCreate, update, pause, resume, snooze, check-now, share, browser CRUD, SLO CRUD
incidents:readList, get, active, stats
incidents:writeAcknowledge, resolve, add update, register live activity
alerts:readList alerts, list channels
status_pages:readList, get
maintenance:writeCreate + start maintenance windows

Generate keys in Settings → API Keys in the dashboard. Each key can hold multiple scopes; pick the smallest set the use case needs.

Config:

json
{
  "mcpServers": {
    "enori": {
      "url": "https://mcp.enori.io/mcp",
      "headers": { "X-Api-Key": "YOUR_KEY" }
    }
  }
}

Rate limits

AuthLimit
API key60 tool calls / minute
OAuth100 tool calls / minute

Hitting the limit returns a 429 with a Retry-After header. Bursts well below this on natural conversational use; the limit is mostly there to catch runaway scripts.


Tool catalog

Tools are grouped by what you'd reach for them to do. Every read tool requires a read scope; every write tool requires the corresponding write scope. Browser-monitor and SLO tools share the regular monitors: scopes — there is no separate browser: or slos:* scope.

Monitors

ToolPurpose
list_monitorsEvery monitor on your account with status, type, URL, interval, response time.
get_monitorFull config + state + SSL + alert settings for one monitor.
get_monitor_statsUptime %, average response time, p95, total checks, failed checks, downtime minutes.
get_check_resultsRecent check results — status, response time, status code, error, timestamp.
get_health_summaryCross-monitor health roll-up sorted worst-first. Error rate, average response, p95 per monitor.
create_monitorCreate a Website / Ping / Port / DNS / Domain / Job monitor. Plan limits enforced.
update_monitorUpdate any field on an existing monitor. PATCH-style — only fields you pass change.
check_nowTrigger an immediate check. Bypasses the schedule queue.
pause_monitor / resume_monitorStop / start checks. Paused monitors don't burn SLO budget when excludePaused=true.
snooze_monitor / unsnooze_monitor / get_snooze_statusSuppress your alerts on a monitor for 30m–72h. Incident stays open, teammates still get notified.

Incidents

ToolPurpose
list_incidents / get_incident / get_active_incidentsBrowse + drill into incident records.
acknowledge_incidentMark an incident "I'm on it".
resolve_incidentClose an incident with a resolution note.
add_incident_updateAppend a status update to a running incident (visible on status pages).
register_live_activity_tokenWire iOS Live Activities — push tokens for incident timeline updates on the lock screen.

Alerts & status

ToolPurpose
list_alertsRecent alert deliveries — type, channel, monitor, timestamp.
list_alert_channelsConfigured email / Slack / Discord / Teams / Webhook channels.
list_status_pages / get_status_pagePublic status pages and their component health.
get_overviewAccount-wide summary — totals, plan, recent incidents, top failing monitors.

Maintenance windows

ToolPurpose
list_maintenance_windowsScheduled, active, and completed windows.
create_maintenance_windowSchedule a future window — checks continue, alerts suppressed.
start_maintenance_nowOpen a window immediately (e.g. for an unplanned deploy).

Browser monitors

Browser monitors run real Playwright sessions through the warm-pool executor. The MCP surface here mirrors the dashboard's browser tab.

ToolPurpose
get_browser_monitorsList browser monitors with status, interval, step count, healing status.
get_browser_monitor_statusQuick status — uptime %, LCP, CLS, healing status, step count.
get_browser_check_detailsOne check's full payload — step results, CWV, console errors, AI failure analysis.
create_browser_monitorCreate a browser monitor. Steps can be supplied explicitly or AI-generated from a URL + description. Free slot + Stripe billing handled automatically.
update_browser_stepsReplace the step sequence on an existing browser monitor (max 25 steps).
generate_browser_stepsAI-generate steps from a URL + plain-English description. Returns a preview without creating the monitor.
delete_browser_monitorPermanently delete a browser monitor. Cancels the Stripe item for paid monitors with prorated credit.

Traces (Website monitors)

ToolPurpose
get_monitor_tracesList recent OTLP traces for a Website monitor — trace id, root service / operation, duration, span count, error flag.
get_trace_detailFull trace — every span with parent ids, timing, status, attributes, events. Use for root-cause investigation on a failed check.

Job monitors

ToolPurpose
get_monitor_pingsHeartbeat history. Returns runId for pings that share a batched/sharded logical run.
get_monitor_custom_metricsPer-run custom metrics emitted via the metrics field on the ping payload. Omit key to list distinct keys; pass key to get a (t, v, runId?) time-series. Window max 90 days.
get_monitor_run_seriesRun-grouped view. Per-run summary (start, completion, ping count, success / failure) plus the flat ping list, max 5000.

SLOs

See the Service Level Objectives guide for the concepts behind these tools — windows, burn rate, the three SLI types, exclusions, and the SLA-report flow.

ToolPurpose
list_slosEvery SLO on a monitor with computed burn status. Empty list when no SLOs are configured.
get_slo_statusFull computed status for one SLO — target, burn, achieved %, multiplier, exhaustion ETA, status (green / amber / red), exclusion totals.
create_sloCreate an SLO. SLI types: availability, latency (requires latencyThresholdMs 1–60000), content_match. Window types: rolling (requires windowLengthDays from {7, 28, 30, 90, 365}) or calendar (requires calendarCycle from {weekly, monthly, quarterly, yearly}). Target % between 90.000 and 99.999.
update_sloReplace every field on an existing SLO. PUT-style — fetch with get_slo_status first, then change what you need. Same validation as create_slo.
delete_sloPermanently delete an SLO. Removes its slo_burn_daily history; the monitor itself is untouched.

Examples

Smoke-check uptime over coffee

You: Anything degraded right now? Claude: Calling get_health_summary… two monitors are burning. The API monitor is at 34 % error rate over the last hour (last successful check 12 minutes ago, response time spiking from 180 ms to 4.2 s); the staging environment is showing intermittent SSL errors (3 of the last 10 checks failed handshake). Other 18 monitors green. Want me to acknowledge an incident on the API one or check its recent traces?

Set up a customer-grade SLA from scratch

You: Set up a 99.5 % monthly availability SLA on the production API monitor with a customer-friendly description. Claude: Calling list_monitors to find the production API monitor… found it (mon_abc123). Calling create_slo with availability SLI, calendar-monthly window, target 99.5, description "MSA §4.2 — monthly uptime commitment for paying customers", maintenance + paused exclusions on, balanced burn-rate alerts (fast + slow). Created slo_def456. The first monthly window starts 2026-05-01 00:00 UTC and the achieved % so far is 100 % (no incidents yet this month).

Investigate a slow check

You: Why was check chk_xyz on monitor X slow? Claude: Calling get_check_results to find that check (response time 8.3 s vs typical 220 ms)… it has trace data. Calling get_trace_detail. The check spent 7.6 s in a single Postgres query (SELECT … FROM users WHERE …) inside the /api/users endpoint — that's where the budget went. Database span has db.statement truncated to 200 chars; it's a query against a 50M-row table without an index hint. Want me to open an incident with this evidence pre-filled?


Errors

The MCP server returns errors as a normal JSON tool result with an error field rather than HTTP 5xx — this is what most MCP clients render correctly. Common shapes:

ErrorMeaning
Monitor not foundThe monitor ID doesn't exist on your account, or it was deleted.
SLO not foundThe SLO ID doesn't belong to the monitor in the same call.
Insufficient scopeThe API key has fewer scopes than the tool requires. OAuth users get full scope automatically.
Rate limit exceededMore tool calls in the rolling minute than your auth tier allows. The response includes a hint for when to retry.
Plan limit reachedCreating a monitor / status page / maintenance window past your plan cap. Upgrade or delete an existing one.

For OAuth, refresh tokens rotate on every use. If you let a token sit unused for 30 days the next call returns Refresh token expired — the client will re-prompt you to sign in.


Self-host the internal flavor (advanced)

The public server at mcp.enori.io is the recommended path. There's also an internal stdio version (tools/enori-mcp-server in the repo) with extra debugging and admin tools. It's intended for developers building against Enori — not for production agents — and runs locally over stdio rather than HTTP. Set ENORI_API_KEY (and optionally ENORI_ADMIN_KEY for admin tools) in your shell env, then add it to .claude/mcp.json:

json
{
  "mcpServers": {
    "enori-internal": {
      "command": "node",
      "args": ["./tools/enori-mcp-server/dist/index.js"],
      "env": {
        "ENORI_API_KEY": "YOUR_KEY",
        "ENORI_API_URL": "https://api.enori.io"
      }
    }
  }
}

The internal server adds manage_* consolidated CRUD tools, admin observability, and direct DB validation helpers. See the repo for full surface details.


Status

The public MCP server has been live at mcp.enori.io since 2026-04. Tool count grows when the dashboard surface grows — recently added: SLO management (May 2026), browser monitor variables (April 2026), Job-monitor custom metrics (April 2026). The contract is additive; we don't break existing tools.

Spotted a missing tool, hit a confusing error, or want a workflow that needs a new tool? Email support@enori.io.