@mnicole-dev/updown-mcp-server
# @mnicole-dev/updown-mcp-server
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for the [Updown.io](https://updown.io) website monitoring API. Manage checks, view downtimes and metrics, configure alert recipients, and control status pages from any MCP-compatible client.
## Features
**15 tools** covering the full Updown.io API:
### Checks (5 tools)
| Tool | Description |
|------|-------------|
| `list-checks` | List all monitoring checks with status, uptime, and apdex |
| `get-check` | Get details for a single check, optionally including metrics |
| `create-check` | Create a new URL monitoring check |
| `update-check` | Update check settings (URL, period, threshold, headers, etc.) |
| `delete-check` | Delete a monitoring check |
### Downtimes & Metrics (2 tools)
| Tool | Description |
|------|-------------|
| `get-check-downtimes` | Get downtime history for a check (paginated) |
| `get-check-metrics` | Get performance metrics (apdex, uptime, timings) for a time range |
### Nodes (1 tool)
| Tool | Description |
|------|-------------|
| `list-nodes` | List all global probe locations used by Updown.io |
### Recipients (3 tools)
| Tool | Description |
|------|-------------|
| `list-recipients` | List all alert recipients (email, Slack, webhooks, SMS) |
| `create-recipient` | Create a new alert recipient |
| `delete-recipient` | Delete a recipient |
### Status Pages (4 tools)
| Tool | Description |
|------|-------------|
| `list-status-pages` | List all status pages |
| `create-status-page` | Create a new public or private status page |
| `update-status-page` | Update a status page |
| `delete-status-page` | Delete a status page |
## Requirements
- Node.js 18+
- An Updown.io account with an API key ([get it here](https://updown.io/settings/edit))
## Installation
```bash
npm install -g @mnicole-dev/updown-mcp-server
```
Or run directly with `npx`:
```bash
npx @mnicole-dev/updown-mcp-server
```
## Configuration
Set the following environment variable:
```bash
export UPDOWN_API_KEY=your-api-key
```
### Claude Code
Add to your `~/.claude.json`:
```json
{
"mcpServers": {
"updown": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@mnicole-dev/updown-mcp-server"],
"env": {
"UPDOWN_API_KEY": "your-api-key"
}
}
}
}
```
### Claude Desktop
Add to your config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
```json
{
"mcpServers": {
"updown": {
"command": "npx",
"args": ["-y", "@mnicole-dev/updown-mcp-server"],
"env": {
"UPDOWN_API_KEY": "your-api-key"
}
}
}
}
```
## Examples
### Check status of all your monitors
```
> Show me all my monitoring checks and their current status
```
### Investigate downtime
```
> Show me the downtime history for check abc123
```
### Get performance metrics
```
> Get metrics for check abc123 between 2024-01-01 and 2024-01-31, grouped by time
```
### Create a new monitor
```
> Create a check for https://myapp.com every 30 seconds with alias "My App" and apdex threshold 0.5
```
### Manage recipients
```
> List all my alert recipients and create a new email recipient for alerts@myteam.com
```
### Create a status page
```
> Create a public status page with checks abc123 and def456, named "My Services Status"
```
## How it works
1. The MCP client sends a tool call to the server via stdio
2. The server authenticates with Updown.io using the `X-API-KEY` header
3. Requests are sent to `https://api.updown.io`
4. Responses are formatted as human-readable markdown text and returned
## Development
```bash
git clone https://github.com/mnicole-dev/updown-mcp-server.git
cd updown-mcp-server
pnpm install
pnpm dev # Run with tsx (requires UPDOWN_API_KEY)
pnpm build # Build to dist/
```
## License
MIT
TDQS
Scored across 15 tools
Each tool clearly targets a distinct resource and action: checks, nodes, recipients, and status pages each have their own list/get/create/update/delete where applicable, with no overlapping purposes. The specialized check metrics and downtimes tools are unambiguous subsets of check data.
All tool names follow a consistent kebab-case verb-noun pattern (e.g., list-checks, create-status-page). The pattern is predictable across all resources, with compound names like get-check-downtimes extending the same convention.
15 tools is within the well-scoped 3-15 range for a domain-specific server. Each tool maps to a real operation on the Updown.io API, and the count feels right for covering the main resources without unnecessary bloat.
Checks and status pages have full CRUD coverage, plus additional check-specific operations. Recipients lack an update operation, but since recipients are likely simple contact addresses, create/delete/list may be sufficient. Overall the surface covers the core domain well with only minor gaps.