Skip to content
pingwright

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
  • Email
  • Webhooks
Inside your network

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.

Your network
pingwright-agentmonitoring-vm-1
  • db.internal:5432
  • ledger.internal:50051
  • http://10.0.4.12/health
  • grafana.office.lan:3000
Pingwrightalerts, incidents, status pages
In your workflow

Monitoring that ships with your code

New endpoints get monitored because they were merged, not because someone remembered.

  1. 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.

  2. The pull request is merged

    A GitHub Actions workflow runs Claude Code with a Pingwright API key that works in this organization only.

  3. 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 Actions
# .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.

How it works

From a URL to an alert you can act on

  1. 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.

  2. 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.

  3. 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.

What it checks

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.
Integrations

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.

Status pages

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.

MCP

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 Code
claude mcp add --transport http pingwright https://mcp.pingwright.app/mcp

llms.txt describes Pingwright for language models.

Claude Code~/code/acme-shop
/mcp
Authentication successful. Connected to pingwright.
Checkout is slow and support says orders fail. What does Pingwright see?
I’ll check what Pingwright is seeing for checkout right now.
pingwright - list_checks (MCP)(status: "down")
checkout-api · DOWN · failing from 1 of 1 location since 14:02 UTC
pingwright - list_check_results (MCP)(check: "checkout-api", failures_only: true)
… +31 lines (ctrl+o to expand)
Found it. checkout-api has been down since 14:02 UTC, 4 minutes after the deploy. Every run from Europe (West) gets the same answer:
503 Service Unavailable
upstream connect error or disconnect/reset before headers
Read(deploy/checkout.yaml)
Read 48 lines (ctrl+o to expand)
The new release points the upstream at port 8081; the service listens on 8080. Want me to fix it and mute checkout-api’s alerts while it rolls out?
Pinging… (esc to interrupt)
Checkout is slow and support says orders fail. What does Pingwright see?
>> accept edits on (shift+tab to cycle)