AnyHook

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

我該用這個嗎

品質與安全性

A
說明品質
100%
結構描述完整度
90%
命名品質
80%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

根據工具定義與協定合規性的自動化分析。

上下文成本

~2,430Token(工具定義)
~1.5 KB典型回應大小
中等的注意力影響(128k 上下文的 1.90%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "anyhook": {
      "command": "npx",
      "args": [
        "anyhook-mcp"
      ]
    }
  }
}

可執行的套件

npmanyhook-mcp0.2.4stdio

遠端端點

https://anyhook.net/mcpstreamable-http

它能做什麼

工具清單

工具(12)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🔴anyhook_mock(provider, event, data, secret, targetUrl)

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.

輸入結構描述

{
  "type": "object",
  "properties": {
    "provider": {
      "type": "string",
      "enum": [
        "stripe",
        "github",
        "slack"
      ],
      "description": "Webhook provider to simulate."
    },
    "event": {
      "type": "string",
      "description": "Event name (e.g. 'payment_intent.succeeded' for Stripe)."
    },
    "data": {
      "type": "object",
      "additionalProperties": {},
      "description": "Optional fields to deep-merge into the fixture."
    },
    "secret": {
      "type": "string",
      "description": "Signing secret. Falls back to a deterministic default per provider."
    },
    "targetUrl": {
      "type": "string",
      "format": "uri",
      "description": "If set, POST the generated request to this URL and return the response."
    }
  },
  "required": [
    "provider",
    "event"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢anyhook_verify(provider, headers, body, secret, requestUrl)

Verify a webhook signature against a secret. Supports 20 providers including stripe, github, shopify, slack, line, discord, linear, vercel, paddle, hubspot, and paypal.

輸入結構描述

{
  "type": "object",
  "properties": {
    "provider": {
      "type": "string",
      "description": "Provider name (e.g. 'stripe', 'github', 'slack', 'generic')."
    },
    "headers": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "Request headers as a flat object."
    },
    "body": {
      "type": "string",
      "description": "Raw request body."
    },
    "secret": {
      "type": "string",
      "description": "Signing secret to verify against."
    },
    "requestUrl": {
      "type": "string",
      "format": "uri",
      "description": "Original request URL (required for Twilio/HubSpot). Defaults to a placeholder."
    }
  },
  "required": [
    "provider",
    "headers",
    "body",
    "secret"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢anyhook_providers

List webhook providers AnyHook can mock, along with the event types available for each.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢anyhook_apps_list(api_key)

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.

輸入結構描述

{
  "type": "object",
  "properties": {
    "api_key": {
      "type": "string",
      "description": "API key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢anyhook_inbox(api_key, app)

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.

輸入結構描述

{
  "type": "object",
  "properties": {
    "api_key": {
      "type": "string",
      "description": "API key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio."
    },
    "app": {
      "type": "string",
      "description": "App slug (from anyhook_apps_list). Defaults to your first app."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡anyhook_apps_create(api_key, name, source, destinations)

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": [...]}).

輸入結構描述

{
  "type": "object",
  "properties": {
    "api_key": {
      "type": "string",
      "description": "API key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio."
    },
    "name": {
      "type": "string",
      "description": "Human-readable app name."
    },
    "source": {
      "type": "string",
      "description": "Provider name (stripe, github, shopify, ...). Used for signature auto-detection."
    },
    "destinations": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      },
      "description": "Destination URLs that should receive forwarded events."
    }
  },
  "required": [
    "name",
    "source"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡anyhook_connect(api_key, provider_key, appSlug, target)

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.

輸入結構描述

{
  "type": "object",
  "properties": {
    "api_key": {
      "type": "string",
      "description": "API key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio."
    },
    "provider_key": {
      "type": "string",
      "description": "A Stripe secret or restricted key (sk_… / rk_…) or a GitHub token (github_pat_… / ghp_…). The provider is read from the key. Used once to register the webhook at the provider; AnyHook does not store it. Least privilege: a Stripe restricted key with Webhook Endpoints = Write, or a fine-grained GitHub token with Webhooks = Read and write."
    },
    "appSlug": {
      "type": "string",
      "description": "Connect this existing app. Omit to create a new app for the provider."
    },
    "target": {
      "type": "string",
      "description": "GitHub only: \"owner/repo\", or an organization name for an org-wide hook. Optional when the token administers exactly one repository."
    }
  },
  "required": [
    "provider_key"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴anyhook_replay(api_key, id)

Re-send a stored event to its destinations. Replays sit outside the monthly event quota but within a daily replay limit per plan, 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.

輸入結構描述

{
  "type": "object",
  "properties": {
    "api_key": {
      "type": "string",
      "description": "API key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio."
    },
    "id": {
      "type": "string",
      "description": "Event ID to replay. Replay does not consume event quota."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢anyhook_undelivered(api_key, appSlug, limit)

Show events for the given app that have not successfully reached any destination (failed or still retrying).

輸入結構描述

{
  "type": "object",
  "properties": {
    "api_key": {
      "type": "string",
      "description": "API key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio."
    },
    "appSlug": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "required": [
    "appSlug"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴anyhook_replay_failed(api_key, appSlug)

Re-send every failed event for the given app slug. Useful after fixing a downstream bug to recover queued work.

輸入結構描述

{
  "type": "object",
  "properties": {
    "api_key": {
      "type": "string",
      "description": "API key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio."
    },
    "appSlug": {
      "type": "string",
      "description": "Bulk-replay every failed event for this app."
    }
  },
  "required": [
    "appSlug"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢anyhook_events(api_key, appSlug, source, status, limit)

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.

輸入結構描述

{
  "type": "object",
  "properties": {
    "api_key": {
      "type": "string",
      "description": "API key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio."
    },
    "appSlug": {
      "type": "string",
      "description": "Filter to a specific app slug (account mode)."
    },
    "source": {
      "type": "string",
      "description": "Filter by provider source (local mode)."
    },
    "status": {
      "type": "string",
      "description": "Filter by status. Account mode: queued|success|retrying|failed. Local mode: received|forwarded|failed|retrying."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢anyhook_inspect(id, api_key)

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.

輸入結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Event ID returned by anyhook_events."
    },
    "api_key": {
      "type": "string",
      "description": "API key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本12 個工具
已驗證未記錄版本11 個工具
已驗證未記錄版本11 個工具