# Set up StatusTick

For AI coding agents. The user asked you to connect StatusTick and add monitoring to their app. Do the steps in order. Stop for the user only where a step says so.

StatusTick checks websites, APIs and cron jobs from several regions and alerts when they fail. Its MCP server is `https://mcp.statustick.com` (Streamable HTTP, OAuth sign-in or an API key). It cannot delete anything.

## 1. Add the MCP server

Find the client you run in and add the server yourself where you can run commands or edit files. If it is already added, go to step 2.

| Client | Add the server |
| --- | --- |
| Claude Code | `claude mcp add --transport http --scope user statustick https://mcp.statustick.com` |
| Cursor | In `~/.cursor/mcp.json`: `{"mcpServers": {"statustick": {"url": "https://mcp.statustick.com"}}}` |
| VS Code (Copilot) | In `.vscode/mcp.json`: `{"servers": {"statustick": {"type": "http", "url": "https://mcp.statustick.com"}}}` |
| Codex CLI | `codex mcp add statustick --url https://mcp.statustick.com` |
| Windsurf | In `~/.codeium/windsurf/mcp_config.json`: `{"mcpServers": {"statustick": {"serverUrl": "https://mcp.statustick.com"}}}` |
| Gemini CLI | `gemini mcp add --transport http --scope user statustick https://mcp.statustick.com` |
| Claude Desktop or claude.ai | You cannot add it. Ask the user to open Settings → Connectors → Add custom connector, and enter the URL. |

Merge into an existing config file; never replace the other servers in it.

## 2. Ask the user to sign in

Tell the user the one action for their client, then wait until they say it is done:

| Client | Sign in |
| --- | --- |
| Claude Code | Run `/mcp`, pick `statustick`, choose Authenticate. |
| Cursor | Cursor Settings → MCP → `statustick` → Login. |
| VS Code | Start the server in `mcp.json` (or the MCP view) and allow the sign-in. |
| Codex CLI | Run `codex mcp login statustick` in a terminal. |
| Windsurf | Open the MCP panel in Cascade and sign in to `statustick`. |
| Gemini CLI | Run `/mcp auth statustick`. |
| Claude Desktop or claude.ai | Click Connect on the connector. |

Tell them what they will see: the StatusTick sign-in page opens in the browser. Sign in with GitHub or Google, pick the organization and choose **read and write**, which lets you create monitors. Only owners and admins can give write access. Without an account, **Continue with your email** creates one.

If the client cannot sign in through a browser, ask the user for an organization API key (dashboard: Settings → API keys, read and write). Send it as the header `Authorization: Bearer <key>`, read from the environment variable `STATUSTICK_API_KEY` where the client allows it. Never write the key into a file that is committed.

Some clients load new servers only after a restart. If the StatusTick tools do not appear, ask the user to restart the client or reload its MCP servers.

## 3. Check the connection

Call `list_monitors`. If it answers, you are connected; tell the user how many monitors the organization has. If `create_monitor` is not in your tools, the sign-in is read only: ask the user to sign in again with read and write.

## 4. Plan the monitors

Read the repository and find:

1. The production URL: README, environment files and deploy config (`vercel.json`, `fly.toml`, `netlify.toml`, Kubernetes manifests, `Procfile`). Ask the user if you cannot find it.
2. A health route: `/health`, `/healthz`, `/up` (Rails), `app/api/health/route.ts` (Next.js). If there is none, propose one that answers 200 when the app and its database work, and add it only after the user agrees.
3. The routes users cannot do without, at most five: sign-in, checkout, the main API. Use only routes that answer a plain GET without signing in.
4. Every scheduled job: crons in `vercel.json`, scheduled GitHub Actions workflows, Kubernetes CronJobs, crontab files, systemd timers, `node-cron`, Celery beat, Sidekiq or Solid Queue recurring jobs, Laravel's scheduler, `@Scheduled` in Spring.
5. Other services the app depends on that StatusTick can check: an MCP server (MCP), gRPC (GRPC), mail servers (SMTP, IMAP), other TCP ports (TCP).

Skip anything that already has a monitor in `list_monitors`. Show the user a table of the monitors you plan to create (name, type, target, interval) and wait for their OK:

- HTTP for the home page, every 60 seconds
- HTTP for the health route and each route from point 3, every 60 seconds
- HEARTBEAT for each scheduled job, with an interval that matches its schedule
- one monitor for each service from point 5, every 60 seconds

## 5. Create them

After the user agrees, create each monitor with `create_monitor`. Each HEARTBEAT answer has a ping URL. For each job, add code that calls its ping URL when the job ends successfully, read from an environment variable such as `STATUSTICK_PING_URL_NIGHTLY_REPORT`. Never write a ping URL into the code.

## 6. Alerts and status page

Call `list_alert_policies`. New monitors use the Default policy; tell the user in one sentence who its steps alert (owners, destinations, on-call schedules). If another policy fits better (for example one with an on-call schedule), offer it and put the monitors on it with `set_alert_policy` after the user agrees.

Call `list_status_pages`. If the organization has a status page, offer to show the new monitors on its components (for example the home page on "Website", the API routes on "API"), and do it with `show_monitor_on_status_page` after the user agrees.

## 7. Report

List the monitors you created, the alert policy they use, the status page components they show on, and the environment variables the user must set, with their values. Then tell them what is left in the StatusTick dashboard: alert channels such as Slack or PagerDuty, a status page if they have none, and monitors that need credentials or a script (databases, browser checks).

More: https://statustick.com/docs/set-up-with-an-ai-agent.md · All docs: https://statustick.com/llms-full.txt
