{
  "markdown": "# exit1-mcp\n\nMCP server for [Exit1](https://exit1.dev) uptime monitoring. Let your AI assistant set up monitoring for the project you just shipped — read your repo, create the checks, configure alerts, and send a real test alert to prove it works — then ask it about uptime in plain language afterwards.\n\n## Two ways to connect\n\n**Hosted (recommended).** No API key, no npm install, no plan requirement to get started. Run this in your terminal before starting a session: the login opens your browser, you sign in (or sign up) with Clerk, approve, and you're connected.\n\n```bash\nclaude mcp add --transport http exit1 https://app.exit1.dev/mcp/v1 && claude mcp login exit1\n```\n\nOne line on purpose: pasting the two commands as separate lines is unreliable in some terminals (cmd.exe drops the second line). In old Windows PowerShell (5.1), where `&&` doesn't parse, run the two halves one at a time. Connect before you start the session: MCP clients load servers at startup, so a server added mid-conversation isn't usable until a restart. On Claude Code versions without `claude mcp login`, start `claude` and authenticate via `/mcp` instead.\n\n**Local stdio.** This npm package. Uses a Public API key from your dashboard. Use it when your client doesn't support remote MCP servers with OAuth.\n\n```bash\nclaude mcp add exit1 -- npx -y exit1-mcp\nexport EXIT1_API_KEY=\"ek_live_your_key_here\"\n```\n\nBoth expose the same tools. The hosted server is easier; the stdio one has no browser step, which some CI-ish setups prefer.\n\n## Zero to monitored\n\nConnect the server (above), then paste this into Claude Code, Cursor, Codex or any MCP-capable assistant, from inside your project:\n\n```\nSet up uptime monitoring for this project with Exit1.\n\n1. Call get_account to see my plan limits. If the Exit1 tools aren't available\n   to you, don't try to connect from inside this session; tell me to add the\n   HTTP MCP server https://app.exit1.dev/mcp/v1 in my tool, restart it, and\n   paste this prompt again.\n2. Read this repo to find what should be monitored: deployed URLs in vercel.json /\n   next.config / wrangler.toml / .env.production / README, and any /health or\n   /api/status route handlers.\n3. Show me the checks you plan to create before creating them.\n4. Configure email alerts, then send a test alert so I can confirm delivery works.\n```\n\nOnce connected, the server also ships a `setup_monitoring` prompt containing the full playbook — in Claude Code, `/exit1:setup_monitoring`.\n\n## Requirements\n\n- **Hosted:** an Exit1 account. Sign-up happens inline during the OAuth flow.\n- **Local stdio:** Node.js 18+, and an API key from your [dashboard](https://app.exit1.dev/api-keys). Every plan can mint a key, Free included.\n\n## Supported clients\n\n| Client | Hosted (OAuth) | Local stdio |\n|---|---|---|\n| Claude Code | ✅ | ✅ |\n| Claude Desktop | ✅ | ✅ |\n| Cursor | ✅ | ✅ |\n| VS Code (Copilot) | ✅ | ✅ |\n| Windsurf | ⚠️ check version | ✅ |\n| Codex CLI | ⚠️ check version | ✅ |\n| Gemini CLI | ⚠️ check version | ✅ |\n| Goose | ⚠️ check version | ✅ |\n| ChatGPT | via connector | via `mcp-remote` bridge |\n\nRemote MCP with OAuth is still rolling out across clients. Where it isn't supported yet, the stdio path below works everywhere.\n\n## Local stdio setup\n\n### Claude Code\n\n```bash\nclaude mcp add exit1 -- npx -y exit1-mcp\n\nexport EXIT1_API_KEY=\"ek_live_your_key_here\"\nclaude\n```\n\n### Claude Desktop\n\nAdd to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows):\n\n```json\n{\n  \"mcpServers\": {\n    \"exit1\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"exit1-mcp\"],\n      \"env\": {\n        \"EXIT1_API_KEY\": \"ek_live_your_key_here\"\n      }\n    }\n  }\n}\n```\n\n### Cursor\n\nAdd to `.cursor/mcp.json` in your project (or `~/.cursor/mcp.json` globally). Same shape as Claude Desktop above.\n\n### VS Code with Copilot\n\nRun **MCP: Add Server** from the Command Palette, choose **Command (stdio)**, enter `npx -y exit1-mcp`. VS Code uses a `servers` key rather than `mcpServers`:\n\n```json\n{\n  \"servers\": {\n    \"exit1\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"exit1-mcp\"],\n      \"env\": {\n        \"EXIT1_API_KEY\": \"ek_live_your_key_here\"\n      }\n    }\n  }\n}\n```\n\n### Windsurf / Gemini CLI / Goose\n\nSame `mcpServers` block as Claude Desktop, in `mcp_config.json` (Windsurf settings › MCP), `~/.gemini/settings.json`, or via `goose mcp add exit1 -- npx -y exit1-mcp`. Restart the IDE or CLI afterwards.\n\n### Codex CLI\n\n```bash\ncodex mcp add exit1 -- npx -y exit1-mcp\nexport EXIT1_API_KEY=\"ek_live_your_key_here\"\ncodex\n```\n\n### ChatGPT\n\nBridge the stdio server with [`mcp-remote`](https://www.npmjs.com/package/mcp-remote), then add it under **Settings › Connectors**.\n\n## Tools\n\n| Tool | Scope | Description |\n|------|-------|-------------|\n| `get_account` | `checks:read` | Plan, limits and current usage. Call this first when setting things up. |\n| `list_checks` | `checks:read` | List checks with current status. |\n| `get_check` | `checks:read` | Detail for one check, including SSL state. |\n| `get_check_history` | `checks:read` | Individual results over time. |\n| `get_check_stats` | `checks:read` | Uptime % and response times across ranges. |\n| `get_status_page` | `checks:read` | Snapshot of a public status page. |\n| `create_check` | `checks:write` | Create a monitor (website, API, ping, TCP, DNS, domain, heartbeat). |\n| `update_check` | `checks:write` | Change an existing check's settings. |\n| `toggle_check` | `checks:write` | Pause or resume a check. |\n| `delete_check` | `checks:delete` | Permanently remove a check. |\n| `get_alert_settings` | `alerts:read` | See where alerts currently go. |\n| `set_email_alerts` | `alerts:write` | Set email recipients and events. |\n| `add_webhook_alert` | `alerts:write` | Connect Slack, Discord, Teams or a generic webhook. |\n| `send_test_alert` | `alerts:write` | Fire a real test alert. |\n\nThe hosted server requests `checks:read`, `checks:write`, `alerts:read` and `alerts:write` by default — not `checks:delete`, which has to be asked for explicitly. For the stdio path, tick the scopes you want when creating the API key.\n\n## Example prompts\n\n- \"Set up monitoring for this project.\"\n- \"Are any of my monitors down right now?\"\n- \"What's the uptime for my API check over the last 30 days?\"\n- \"Show me the last 10 failures for production.\"\n- \"Add a check on staging.example.com and send alerts to #ops in Slack.\"\n- \"Compare response times this week vs last week.\"\n\n## Configuration\n\n| Environment variable | Required | Description |\n|---------------------|----------|-------------|\n| `EXIT1_API_KEY` | stdio only | Your Exit1 API key (`ek_live_…`) |\n| `EXIT1_API_URL` | No | Override the API base URL (for development) |\n\n## Managing connections\n\nHosted connections are listed at [app.exit1.dev/mcp](https://app.exit1.dev/mcp) and can be revoked there at any time. Revoking kills every token issued to that client immediately.\n\n## Development\n\n```bash\nnpm install\nnpm run build          # tsc -> dist/\nnpm test               # build, then drive a real MCP handshake over stdio\nnpm run check:catalog  # compare the tool catalog against the hosted server\n```\n\n`npm test` spawns the built server and asserts the surface a client actually sees — the tool\ncount, `readOnlyHint` / `destructiveHint` annotations, the `setup_monitoring` prompt, and that an\nunknown tool returns `isError` rather than a protocol error. It needs no API key and makes no\nnetwork calls.\n\n### Why `check:catalog` exists\n\nThe tool catalog is deliberately duplicated between this package and the hosted OAuth server,\nwhich lives in [Mopra/exit1.dev](https://github.com/Mopra/exit1.dev) at\n`functions/src/mcp-tools.ts`. Two separate builds, no shared package, nothing at compile time\ntying them together. `npm run check:catalog` fails if they drift on tool names or input schemas,\nand warns on wording differences. CI runs it on every push and once a day.\n\nChange a tool here, change it there — and run the check before releasing.\n\nTo run it against a local checkout instead of GitHub:\n\n```bash\nCATALOG_REMOTE_PATH=../exit1.dev/functions/src/mcp-tools.ts npm run check:catalog\n```\n\n### Releasing\n\n```bash\nnpm version patch          # or minor\nnpm publish                # prepublishOnly runs the build + smoke test\ngit push --follow-tags\n```\n\nBump `version` in [server.json](server.json) to match, then re-publish the registry entry (see\nbelow). The `version` string in [src/index.ts](src/index.ts) is what clients see in\n`serverInfo` — keep it in step with `package.json`.\n\n### MCP registry\n\n`server.json` describes both distribution paths (the npm package and the hosted endpoint) for the\n[official MCP registry](https://registry.modelcontextprotocol.io). The registry name is\n`dev.exit1/exit1-mcp`, which requires proving control of `exit1.dev`:\n\n```bash\nmcp-publisher login dns --domain=exit1.dev --private-key=HEX_KEY\nmcp-publisher publish\n```\n\nnpm ownership is proven by the `mcpName` field in `package.json`, which must stay equal to `name`\nin `server.json`.\n\n## Quick Links\n\n| | | |\n|---|---|---|\n| **Website** | [exit1.dev](https://exit1.dev) — Learn about the platform | [Repo](https://github.com/Mopra/exit1.dev.website) |\n| **Monitor App** | [app.exit1.dev](https://app.exit1.dev) — Sign in and manage your checks | [Repo](https://github.com/Mopra/exit1.dev) |\n| **Documentation** | [docs.exit1.dev](https://docs.exit1.dev) — Guides, API reference, and setup instructions | [Repo](https://github.com/Mopra/exit1.dev.docs) |\n| **MCP Server** | [`exit1-mcp`](https://www.npmjs.com/package/exit1-mcp) — this repo | [Repo](https://github.com/Mopra/exit1.dev.mcp) |\n\nAlso listed on the [official MCP registry](https://registry.modelcontextprotocol.io) as `dev.exit1/exit1-mcp`.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n\nThe rest of exit1 is source-available rather than open source; this package is the exception, so it can be vendored and inspected freely by MCP clients.\n",
  "bytes": 9962,
  "sha": "6fe680c56e0a39dfd789b0c50ce7f4a67fb447b5bd92697fd28fd20832a7e97a",
  "repo_slug": "mopra/exit1.dev.mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_dev_exit1_exit1_mcp_8aa7d80e/readme"
}