Debug webhooks with your AI agent
Pipehero ships an MCP server so an agent (Claude Code, Cursor, Claude Desktop) can read and replay your webhooks. Connect it one of two ways:
Remote (no install, recommended)
Add the hosted server by URL. Your client opens the browser to sign in and approve — no token to paste (OAuth).
claude mcp add --transport http pipehero https://mcp.pipehero.app/mcp
For CI/headless, skip OAuth and pass a token from Settings instead:
claude mcp add --transport http pipehero https://mcp.pipehero.app/mcp \ --header "Authorization: Bearer <token>"
Local (via the CLI)
Runs on your machine, reusing pipehero login:
claude mcp add pipehero -- pipehero mcp
Or add it to any MCP client config:
{ "mcpServers": { "pipehero": { "command": "pipehero", "args": ["mcp"] } } }Tools
list_tunnelsYour tunnels and whether each is online.list_requests(subdomain)Recent captured webhooks for a tunnel.get_request(subdomain, id)Full request + response (headers + body).replay_request(subdomain, id)Replay a webhook to your localhost.send_test_webhook(subdomain, …)Fire a test webhook at your tunnel. (Pro)Keep your API docs up to date
Both the remote server and the local pipehero mcp (version 0.1.14 and later) also expose your saved API collections, so an agent can document routes as it writes them, check them against the real response, and import an OpenAPI file. It finds an endpoint by method + path (as written in your code, so /users/:id and /users/{id} are the same route) and never overwrites a teammate's edit: send the endpoint's version and a stale one is rejected.
list_api_collectionsYour saved API collections.get_api_collection(collection_id)Folders, endpoints and environments of one collection.get_api_endpoint(collection_id, method + path)One endpoint in full: docs, parameters, examples and its version.upsert_api_endpoint(collection_id, method, path, …)Create or update an endpoint by route. Send only what changed.add_api_example(collection_id, method + path, name, status, …)Save a response example, replacing one with the same name.delete_api_endpoint(collection_id, method + path)Remove an endpoint whose route is gone.import_api_spec(format, content, …)Import OpenAPI, a Postman collection or a curl command.export_api_collection(collection_id, format?)The whole API as OpenAPI 3.1 or Postman.run_api_endpoint(collection_id, method + path, environment, …)Send it and read the real response. Writes to prod need confirm_write_to_prod.list_api_runs(collection_id, method + path)What the last runs sent and returned.save_captured_request(collection_id, tunnel, request_id)Document a real request from list_requests: an endpoint made from it, or one more example on the endpoint that already covers its route.check_api_drift(collection_id, tunnel)Compare the docs with a tunnel's real traffic (Pro/Team). Each finding names the request that shows it.list_api_monitors(collection_id)Which endpoints are monitored (Pro/Team) and which are failing, with the last error. Read-only.list_api_proposals()On workspaces that review AI changes: what happened to the changes you proposed.create_api_collection(name)Start an empty collection.- ›I just added a refund route. Document it in the Payments API collection, with the 409 it returns for an already-refunded charge.
- ›Compare the Payments API docs with the routes in this repo and fix whatever drifted.
- ›Run Create a charge against my local environment and tell me if the response matches the docs.
- ›Import ./openapi.json as a new collection called Partner API.
- ›Document the last Stripe webhook that hit myapp in the Payments API collection.
- ›Check the Payments API docs against what myapp really received, and fix whatever drifted.
Credentials are never imported (they become variables), run history stores them as «redacted», and cloud runs (staging, prod) need a Pro or Team plan.
Example prompts
- ›The last webhook to myapp returned 500 — read the payload and my handler and tell me why it failed.
- ›Fix the handler, then replay the webhook to confirm it works.
- ›Compare what Stripe sent to what my code expects and flag any mismatch.
- ›Show me every failed (non-2xx) webhook and what they had in common.
- ›List my tunnels and which are online.