Monitoring for developers
Pingwright checks your HTTP, GraphQL, gRPC, MCP and TCP endpoints from the internet and from inside your network, alerts the channels you already use, and keeps up with your code: when a pull request adds an endpoint, Claude Code adds its check.
- Down checkout-apihttps://api.acme.example/checkout/health HTTP 12 s ago
- Degraded search-graphqlhttps://api.acme.example/graphql GraphQL 31 s ago
- Up ledgerledger.internal:50051 gRPC 8 s ago
- Up docs-mcphttps://mcp.acme.example/mcp MCP 20 s ago
Alerts where your team already is
- Slack
- Microsoft Teams
- Discord
- PagerDuty
- Webhooks
Install the agent, and monitor what the internet can’t reach
Put the Pingwright agent on any machine inside your network, a VM, a server or a small box in the office, and it checks your internal services: databases, internal APIs, gRPC services, anything with a host and a port. Those checks show up next to your public ones, with the same alerts.
- It connects out to Pingwright over 443. You open no ports and expose nothing.
- Each machine gets its own token, and you can revoke it at any time.
- Run more than one: they share the work, and checks keep running if one goes away.
- If no agent is online, the console says “No data”, never “Up”.
Agent installers for Linux, Windows and Docker are coming soon.
- db.internal:5432
- ledger.internal:50051
- http://10.0.4.12/health
- grafana.office.lan:3000
Monitoring that ships with your code
New endpoints get monitored because they were merged, not because someone remembered.
- A pull request adds an endpoint
If its service has no health endpoint yet, Claude Code adds one to the pull request, for you to review like any other change.
- The pull request is merged
A GitHub Actions workflow runs Claude Code with a Pingwright API key that works in this organization only.
- The check exists
Claude Code finds what was added and creates the checks over Pingwright’s MCP server, with your alert channels already watching.
# .github/workflows/pingwright.yml
name: Monitor new endpoints
on:
pull_request:
types: [closed]
branches: [main]
jobs:
monitor:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Connect Pingwright
run: |
cat > /tmp/pingwright.json << 'EOF'
{"mcpServers": {"pingwright": {
"type": "http",
"url": "https://mcp.pingwright.app/mcp",
"headers": {"Authorization": "Bearer ${{ secrets.PINGWRIGHT_API_KEY }}"}
}}}
EOF
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
Pull request #${{ github.event.pull_request.number }} was merged.
Find the HTTP, GraphQL and gRPC endpoints it added that are
reachable in production. For each one Pingwright does not
check yet, create a check for its health endpoint.
claude_args: |
--mcp-config /tmp/pingwright.json
--allowedTools mcp__pingwright__list_checks,mcp__pingwright__create_check
Uses the Claude Code GitHub Action. Add PINGWRIGHT_API_KEY and ANTHROPIC_API_KEY as repository secrets.
From a URL to an alert you can act on
-
Add a check
A name and a URL are enough; the defaults do the rest. Add it in the console, or have your coding agent add it over MCP.
-
Pingwright checks it
On its interval, from every location you chose. A location counts as failing after the failures in a row you set, so one blip is not an outage.
-
You hear when it matters
A down check opens an incident and alerts your channels with the failing location and the server’s own error, verbatim. When it recovers, they hear that too.
Five kinds of check, each with what it needs
- HTTP
- Any method, headers, request body, expected status codes, and text the response must contain.
- GraphQL
- Runs your query with variables; a response with errors fails the check.
- gRPC
- Asks the standard gRPC health service, for the whole server or one service, with or without TLS.
- MCP
- Connects to an MCP server and checks the tools it must advertise.
- TCP
- Opens a connection to host:port, optionally completing a TLS handshake.
- Secrets
- Header and metadata values are encrypted at rest and never shown again after you save them.
Alerts that reach the right people, and only when it matters
- SlackA message in the channel you pick, with the failing location and the error.
- Microsoft TeamsThrough an incoming webhook or a Teams workflow.
- DiscordTo any channel through its webhook.
- PagerDutyOpens a PagerDuty incident when a check goes down and resolves it when it recovers.
- EmailTo members of your organization, threaded per incident.
- WebhooksA signed JSON request to any URL, so you can plug Pingwright into anything.
- Per channel: down, recovered, and “still down” reminders; all checks or chosen ones; and how long a check must stay down first.
- A check that keeps flapping sends one notice instead of a stream. Several checks failing together arrive as one message.
- Mute a check for a deploy or maintenance; it keeps being checked.
- Send a test to any channel, and see in the delivery history whether each alert went out, or why it was held back.
Pingwright does not send SMS or phone calls itself; PagerDuty can.
A public status page, without the private details
Publish chosen checks under names you pick (“API”, “Dashboard”), with 90 days of daily uptime and recent incidents. The checks’ real names and targets never appear. Pages are plain HTML, fast during an outage, with a badge for your README.
Or let your coding agent do it
Pingwright is also an MCP server. Claude Code, Cursor or any MCP client can add and change checks, read results and incidents, set up alert channels, mute a check during a deploy and publish status pages, with your role in each organization. It signs in through OAuth 2.1; CI uses an API key.
claude mcp add --transport http pingwright https://mcp.pingwright.app/mcp
llms.txt describes Pingwright for language models.
503 Service Unavailable upstream connect error or disconnect/reset before headers