Uptimer v2.0.0-preview documentation — it describes the release candidate, and v1.8.0 remains the current release. Commands here pull the preview image :2.0.0-rc1. The Python SDK for this preview is a local wheel, not a PyPI release. Go to the current release (v1.8.0) →
Reference › MCP (installed binary)

MCP (installed binary)

Let an AI client read your Uptimer, and act on it if you allow it, with one scoped API key.

uptimer mcp lets an AI client (Claude Desktop, Claude Code, Cursor, MCP Inspector, …) read your Resources and Incidents, and act on them if you allow it. The client starts the installed uptimer binary and talks to it over stdin and stdout. Nothing else to install.

The tools call API v3 with one API key. They have no database access and no permissions of their own: the key decides.

1. Make a key

In the UI: API keys → New key.

A full key also works, but it acts as you in every Workspace.

2. Add it to your client

{
  "mcpServers": {
    "uptimer": {
      "command": "/usr/local/bin/uptimer",
      "args": ["--mcp"],
      "env": {
        "UPTIMER_MCP_API_KEY": "<the token>",
        "UPTIMER_MCP_URL": "https://uptimer.example.com"
      }
    }
  }
}

Claude Code:

claude mcp add uptimer \
  -e UPTIMER_MCP_API_KEY=<the token> \
  -e UPTIMER_MCP_URL=https://uptimer.example.com \
  -- /usr/local/bin/uptimer mcp

uptimer --mcp and uptimer mcp are the same. --token and --url exist, but a token on the command line shows in ps, so use the environment. UPTIMER_MCP_URL is where the UI is served (default http://localhost:8080); the API port works too.

With Docker, run the image instead of a local binary:

"command": "docker",
"args": ["run", "-i", "--rm", "-e", "UPTIMER_MCP_API_KEY", "-e", "UPTIMER_MCP_URL",
         "ghcr.io/myuptime-info/uptimer:2.0.0-rc1", "mcp"]

The key is checked on start. A refused key stops uptimer mcp with a message on stderr; logs never go to stdout.

Tools

ToolNeedsWhat it does
list_workspacesreadWorkspaces the key reaches, with your role
list_resourcesreadResources with their open Incident (at most 50)
get_resourcereadSignals, Rules with their result and explanation, maintenance
list_observationsreadnewest Observations of a Resource (1–50)
list_incidentsreadIncidents, newest first; filters and a cursor (1–50)
get_incidentreadone Incident and its recorded history
list_incident_deliveriesreadwhat was sent about an Incident: delivered, failed or held, with a reason code
acknowledge_incidentacknowledgetake an open Incident on
start_maintenance, end_maintenancemaintenancehold or release a Resource’s notifications
send_test_observationobservesend one Observation, labelled source: mcp-test

A write tool is listed only when the key has its action, and API v3 checks it again on every call. With a key for one Workspace, the workspace argument can be left out.

Results carry API v3’s answer as result (and next_cursor for a page). Errors carry API v3’s error as it came: code, error_type, message, details. Ids are the same public ids as the API and the UI. Tokens, destination URLs, delivery payloads and what a destination answered never appear: a failed delivery says only unreachable, http_NNN or not_sent.

A read flow

Ask the client, for example: “Which Incidents are open in Uptimer, and why?” It calls list_incidents with lifecycle: open, then get_incident for the history and list_incident_deliveries for who was told.

Audit

Recorded in server_api_audit for every key: each write, refused ones too, and each read of recorded evidence (get_incident, list_incident_deliveries, list_observations). Each row names the key, the person, the Workspace, the path, the status and uptimer-mcp/<version> as the agent. Lists (list_workspaces, list_resources, list_incidents) and get_resource are not recorded.