Skip to content

AnyHook

by anyhook.net · remote · local (npm) · no sign-in to list tools · v0.4.0 · published by net.anyhook

A webhook inbox for agents: one call returns a live URL. Mock, verify, inspect and replay.

Deletes · 5Changes · 5

16 tools: 5 can delete or cancel things, 5 change things and 6 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http anyhook https://anyhook.net/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

16 tools

Deletes or cancels 5Claude Code: deny
  • anyhook_code_deploySave a handler that runs on every event this app receives, in an isolated sandbox, with AnyHook's retries and replay around it: no server of your own.No findings

    Why it is in this group

    • The name "anyhook_code_deploy" says "deploy": a word for a change.
    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Save a handler that runs on every event this app receives, in an isolated sandbox, with AnyHook's retries and replay around it: no server of your own. Each run's console output and return value are stored as that delivery's response (anyhook_inspect shows them). It can also run on a cron schedule. Pro and Scale; runs are capped per month with no overage, retries, test runs and schedule firings each count, and each run and package install is charged to the monthly compute allowance (anyhook_usage shows both). Test it with anyhook_code_test before real events arrive.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: true
  • anyhook_code_testRun the saved handler now and return its logs, return value and duration: on a stored event (the latest when event_id is omitted) or on a body you give.No findings

    Why it is in this group

    • The description's first verb is "run": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Run the saved handler now and return its logs, return value and duration: on a stored event (the latest when event_id is omitted) or on a body you give. Counts as a run. Nothing is delivered, but whatever the code itself sends does happen.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: true
  • anyhook_mockGenerate a webhook request with a valid signature for Stripe, GitHub, or Slack.No findings

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Generate a webhook request with a valid signature for Stripe, GitHub, or Slack. If targetUrl is provided, the request is POSTed there and the response is returned.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: true
  • anyhook_replayRe-send a stored event to its destinations.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Re-send a stored event to its destinations. Replays sit outside the monthly event quota but within a daily replay limit per plan and the monthly compute allowance (anyhook_usage), and replaying an event that was held for quota bills it as a new event. The destination does run its handler again: a receiver that is not idempotent will process the event twice while debugging.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: true
  • anyhook_replay_failedRe-send every failed event for the given app slug.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Re-send every failed event for the given app slug. Useful after fixing a downstream bug to recover queued work.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: true
Changes things 5Claude Code: ask
  • anyhook_apps_createCreate a new app with a name, provider source, and (optionally) destinations.No findings

    Why it is in this group

    • The name "anyhook_apps_create" says "create": a word for a change.
    Description, as the server wrote it
    Create a new app with a name, provider source, and (optionally) destinations. Returns the inbound URL. The app is active immediately. Created WITHOUT destinations it still receives and LOGS every event (inspect-only), it just delivers nowhere until a destination is added (PATCH /api/v1/apps/{slug} with {"destinations": [...]}).

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
  • anyhook_connectWire a provider to AnyHook in one call: give a Stripe or GitHub key and AnyHook registers the app's inbound URL as a webhook at the provider, saves the signing secret it yields, an…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Wire a provider to AnyHook in one call: give a Stripe or GitHub key and AnyHook registers the app's inbound URL as a webhook at the provider, saves the signing secret it yields, and turns on signature verification at the edge. The provider is read from the key; the key is used once and not stored. Without appSlug a new app is created (and removed again if the provider refuses the key). Re-running replaces the registration instead of duplicating it. GitHub sends a signed ping immediately, so the first event appears within seconds. Add a destination afterwards (PATCH /api/v1/apps/{slug}) to forward events; until then they are received and logged.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: true
  • anyhook_inboxEvery AnyHook app is also an email inbox: mail sent to {user}.{app}@anyhook.net becomes an event (type email.received) you can read with anyhook_events.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Every AnyHook app is also an email inbox: mail sent to {user}.{app}@anyhook.net becomes an event (type email.received) you can read with anyhook_events. Returns the address and webhook URL for one of your apps.

    Annotations the server declares

    • readOnlyHint: true
  • anyhook_usageWhat the plan allows and what this account has used of each: events this month (per delivery, large events count per 64 KB), overage, the compute allowance and what used it (retrie…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    What the plan allows and what this account has used of each: events this month (per delivery, large events count per 64 KB), overage, the compute allowance and what used it (retries, replays, waiting on slow destinations, code runs, builds, schedules), API calls today (each tool call that reads or changes the account counts one), code runs and package snapshots, with when each resets. Call it when something answers with a limit, before bulk work such as replay_failed, or when the user asks what they are using.

    Annotations the server declares

    • readOnlyHint: true
  • anyhook_verifyVerify a webhook signature against a secret, for every source the AnyHook edge verifies, including stripe, github, shopify, slack, line, discord, linear, vercel, paddle, hubspot, p…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Verify a webhook signature against a secret, for every source the AnyHook edge verifies, including stripe, github, shopify, slack, line, discord, linear, vercel, paddle, hubspot, paypal and xero.

    Annotations the server declares

    • readOnlyHint: true
Only reads 6Claude Code: allow
  • anyhook_apps_listList apps in your AnyHook account with inbound URLs, sources, and destination URLs.No findings

    Why it is in this group

    • The name "anyhook_apps_list" says "list": a word for reading.
    Description, as the server wrote it
    List apps in your AnyHook account with inbound URLs, sources, and destination URLs. Check isActive: an inactive app's inbound URL answers setup handshakes but acknowledges and discards event POSTs (202, reason app_inactive) instead of relaying them. Destination signing secrets are redacted to has_signing_secret plus a 4-char hint; a new secret in plaintext comes only from rotating it. An app whose slug was changed lists its former URLs under legacyInboundUrls; those still route to it.

    Annotations the server declares

    • readOnlyHint: true
  • anyhook_code_getThe code that runs on this app's events: its source, the names of its secrets (never the values), whether events are reaching it, and runs used this month against the plan's limit.No findings

    Why it is in this group

    • The name "anyhook_code_get" says "get": a word for reading.
    Description, as the server wrote it
    The code that runs on this app's events: its source, the names of its secrets (never the values), whether events are reaching it, and runs used this month against the plan's limit.

    Annotations the server declares

    • readOnlyHint: true
  • anyhook_eventsList webhook events, most recent first: id, app, type, status, attempt, destination status code, latency, timestamp.No findings

    Why it is in this group

    • The description's first verb is "list": a word for reading.
    Description, as the server wrote it
    List webhook events, most recent first: id, app, type, status, attempt, destination status code, latency, timestamp. Summaries only, no request headers or body — call anyhook_inspect with an id from here to read one event's payload. Uses your AnyHook account when connected, otherwise the local in-memory store.

    Annotations the server declares

    • readOnlyHint: true
  • anyhook_inspectFull detail for one event by id, including the inbound headers and body that anyhook_events omits, plus the destination's response.No findings

    Why it is in this group

    • The name "anyhook_inspect" says "inspect": a word for reading.
    Description, as the server wrote it
    Full detail for one event by id, including the inbound headers and body that anyhook_events omits, plus the destination's response. Payloads can be large and often contain personal data, so fetch one at a time, only when the body is needed. Account or local store.

    Annotations the server declares

    • readOnlyHint: true
  • anyhook_providersList webhook providers AnyHook can mock, along with the event types available for each.No findings

    Why it is in this group

    • The description's first verb is "list": a word for reading.
    Description, as the server wrote it
    List webhook providers AnyHook can mock, along with the event types available for each.

    Annotations the server declares

    • readOnlyHint: true
  • anyhook_undeliveredShow events for the given app that have not successfully reached any destination (failed or still retrying).No findings

    Why it is in this group

    • The description's first verb is "show": a word for reading.
    Description, as the server wrote it
    Show events for the given app that have not successfully reached any destination (failed or still retrying).

    Annotations the server declares

    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.4.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http anyhook https://anyhook.net/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__anyhook__anyhook_providers",
      "mcp__anyhook__anyhook_apps_list",
      "mcp__anyhook__anyhook_undelivered",
      "mcp__anyhook__anyhook_code_get",
      "mcp__anyhook__anyhook_events",
      "mcp__anyhook__anyhook_inspect"
    ],
    "ask": [
      "mcp__anyhook__anyhook_verify",
      "mcp__anyhook__anyhook_inbox",
      "mcp__anyhook__anyhook_apps_create",
      "mcp__anyhook__anyhook_connect",
      "mcp__anyhook__anyhook_usage"
    ],
    "deny": [
      "mcp__anyhook__anyhook_mock",
      "mcp__anyhook__anyhook_replay",
      "mcp__anyhook__anyhook_replay_failed",
      "mcp__anyhook__anyhook_code_deploy",
      "mcp__anyhook__anyhook_code_test"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as anyhook. Review it before you use it.