Skip to main content
Glama

Server Details

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

Ownership verified
Status
Healthy
Uptime
62.9% over 65 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
gba3124/anyhook-mcp
GitHub Stars
0
Server Listing
anyhook-mcp

TDQS

A3.8/5.0

Scored across 16 tools

Disambiguation4/5

Most tools have clear, distinct purposes. The event-focused tools (anyhook_events, anyhook_inspect, anyhook_undelivered) overlap somewhat, as do anyhook_apps_create and anyhook_connect, but the descriptions provide enough distinction to guide selection.

Naming Consistency4/5

All tools use a consistent anyhook_ prefix and snake_case, which is highly readable. The internal pattern varies between resource-first names (apps_create, code_deploy) and bare actions (connect, replay), a minor inconsistency that does not impede understanding.

Tool Count4/5

The 16 tools are slightly above the typical 3-15 range, but each appears to cover a distinct operation in the webhook lifecycle, diagnostics, or provider integration. There is little obvious redundancy, so the set feels reasonably scoped.

Completeness3/5

The surface covers creation, listing, inspection, replay, code handlers, usage, and provider wiring, but update and delete operations for apps are missing. Critically, destination management (adding/removing destinations via PATCH) is mentioned in descriptions but not exposed as a tool, limiting the ability to complete delivery setup after app creation.

Available Tools

16 tools
anyhook_apps_createCreate a new AnyHook appAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable app name.
sourceYesProvider name (stripe, github, shopify, ...). Used for signature auto-detection.
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.
destinationsNoDestination URLs that should receive forwarded events.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations indicate the tool is not read-only and not destructive. The description adds valuable behavioral context by stating that apps without destinations still log events (inspect-only) and that the app is active immediately. This goes beyond the annotations and provides crucial state changes (immediate activation, logging behavior). The only minor gap is not detailing the exact response structure beyond the inbound URL, but the key behavioral outcomes are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the core purpose. The first sentence states the primary action and essential inputs. The second sentence adds important behavioral nuance. However, some details like the PATCH example could be seen as slightly verbose, but it conveys a key usage pattern. Overall, it is efficient and structured well.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description mentions the return value (inbound URL) which is critical for the agent. It also handles the optional parameter behavior and active-immediately status. Sibling tools exist that might serve similar purposes, but the creation context is distinct enough. The description is sufficiently complete for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage, so parameters are already well-documented (e.g., 'api_key' says it's ignored over stdio, 'source' explains signature auto-detection). The description adds important semantics by clarifying the 'destinations' parameter's optionality and its consequence (logging-only mode). This goes beyond the schema's basic field descriptions, so the description adds meaningful value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a new app') and specifies the key resources (name, provider source, destinations). It also highlights the unique behavior of creating an app without destinations (inspect-only logging), which distinguishes it from any other tool. This makes the purpose highly unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly explains when to use this tool: to create an app that can receive events and optionally deliver them. It mentions the alternative of PATCHing the app later to add destinations, but does not explicitly name sibling tools or state when NOT to use it. Still, the context is clear enough for an agent to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_apps_listList your AnyHook appsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses meaningful behaviors: inactive apps return 202 with reason app_inactive instead of relaying events, signing secrets are redacted to a boolean plus hint, and legacyInboundUrls still route after a slug change. This is exactly the behavioral context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences with no filler. The core purpose is front-loaded, and every subsequent sentence adds decision-relevant detail about response interpretation or edge cases. Nothing is redundant with the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the burden of explaining the return fields and unusual behaviors. It covers active/inactive handling, secret redaction, and legacy URLs—enough for an agent to correctly interpret results without additional assumptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the only parameter (api_key) is already fully documented in the schema, including when it is needed and when it is ignored. The description adds no parameter-level information, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List apps in your AnyHook account'. It further specifies the returned fields (inbound URLs, sources, destination URLs), which distinguishes it clearly from sibling tools like anyhook_apps_create or anyhook_events.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for enumerating apps and checking their active state, but it does not explicitly say when to use it versus alternatives or when not to use it. No sibling tool is named, so routing between tools is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_code_deployDeploy code that runs on an app's eventsA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesAn ES module, run in a sandboxed Node.js on every event this app receives. Either `export default async function (event, { env }) {}` (event: { method, headers, body, raw_body, delivery_id, attempt }; method is always POST, and the query string, path and caller IP are not kept) or a Pipedream Node.js code step: `export default defineComponent({ async run({ steps, $ }) {} })`, where steps.trigger.event is that same event (a step reading query, path, url or client_ip needs changing) and $.export and $.flow.exit work. npm packages it imports are installed on deploy (pin as "pkg@1.2.3", like Pipedream; a new package list usually takes seconds, a large one a few minutes). @pipedream/platform is a stand-in. State between events: the app's store (store.get/set/has/delete/keys, set takes { ttl }); every data_store prop is that one store, an app prop's this.<prop>.$auth.<field> reads the secret <APP>_<FIELD>, any other prop the secret named after it (channelId → CHANNEL_ID). Throwing fails the delivery, which AnyHook retries. Templates for common actions (Slack, email, Google Sheets, Notion, Claude and more): https://anyhook.net/code-templates.md
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.
appSlugYesThe app whose events the code runs on.
enabledNoWhether events run the code. false saves it switched off, so it runs only through anyhook_code_test. Omit: a first deploy goes live and later deploys keep the current state. Deploy off while another system still handles the same events, or both will act on each one.
secretsNoEnvironment variables for the code, read as env.NAME or process.env.NAME. Merged into the saved ones; null removes a name.
scheduleNoAlso run on a cron schedule: five fields, UTC unless prefixed CRON_TZ=Area/City, e.g. "*/15 * * * *". Each firing arrives as an anyhook.schedule event and counts as a run. null removes it; omit to keep it. Only on an app that does not verify a sender's signature.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare write (readOnlyHint=false) and destructiveHint=true, and the description confirms and enriches this: retries and replay wrap each run, throwing fails the delivery, null removes secrets and schedules, omitted fields preserve state, and Pro/Scale plans cap runs per month with each install charged to compute allowance. This goes well beyond what the annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded and every sentence contributes (sandbox, plan limits, schedule, test-before-live). It is dense with long parenthetical clauses, which slightly hurts scannability, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description covers the return path by explaining that console output and return values are stored as the delivery's response and surfaced through anyhook_inspect. Combined with plan limits, scheduling, state, and secret semantics, an agent has everything needed to deploy correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already carries detailed semantics for code, appSlug, enabled, secrets, and schedule including cron syntax and removal-by-null. The description reiterates some of this (cron, plan/run counting) but adds little parameter syntax the schema lacks, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a concrete verb and resource: 'Save a handler that runs on every event this app receives, in an isolated sandbox.' It is immediately distinguishable from siblings like anyhook_code_get, anyhook_code_test, and anyhook_events without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Routes the agent explicitly: test with anyhook_code_test before real events arrive, view output via anyhook_inspect, check limits via anyhook_usage. It also gives a when-not: deploy off while another system still handles the same events, or both will act on each one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_code_getRead an app's code handlerA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.
appSlugYesThe app whose code handler to read.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give readOnlyHint=true, so the description carries the rest of the burden and does so well: it discloses that secret names are returned but never values (an important safety boundary), that event delivery status is included, and that run counts are measured against the plan's limit. That quota/limit framing is real behavioral context beyond the annotation. It does not describe pagination or response shape, but for a read-only tool this is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the resource ('the code that runs on this app's events') before enumerating returns. Every clause conveys distinct information — source, secret names, delivery, quota — with no padding, though the colon-list structure is close to overloaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must carry the return-value burden, and it does by enumerating the four returned facets. For a simple read-only tool with two well-documented parameters and a readOnlyHint annotation, this is close to complete; only pagination/response-format details are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (api_key, appSlug) are documented in the schema itself, including the HTTP-vs-stdio caveat for api_key. The description adds no parameter-level detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource (the code handler for an app's events) and enumerates exactly what is returned — source, secret names, delivery status, and monthly run usage. Combined with the title 'Read an app's code handler', an agent can distinguish it from the write-side sibling anyhook_code_deploy. It stops short of explicitly naming the sibling it is not, so it is clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives such as anyhook_code_test, anyhook_inspect, or anyhook_code_deploy. Usage is only inferable from the list of returned fields. No prerequisites, no exclusions, no routing guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_code_testRun an app's code on a stored eventA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRun on this body instead of a stored event.
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.
appSlugYes
event_idNoRun on this stored event. Omit for the app's latest event.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag a mutating, open-world operation (readOnlyHint=false, destructiveHint=true, openWorldHint=true), and the description sharpens that profile: it consumes a run/quota, delivers nothing downstream, yet the handler's own outbound effects still execute. That nuance is exactly the kind of side-effect disclosure annotations cannot provide, and it also previews the response contents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tightly-packed sentence plus a colon-delimited clause list, front-loaded with the action. Every clause carries distinct information (inputs, modes, cost, side effects); nothing is redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully names the return payload, and it covers quota cost and side effects for a mutating, open-world call. It stops short of describing failure behavior (e.g., unknown event_id or handler crash) or rate limits, which an agent invoking this repeatedly would want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the schema partly documents itself, but the description supplies the semantics that matter: omitting event_id selects the app's latest event, and providing body runs against given data instead of a stored event. The precedence between body and event_id is implied rather than stated outright, leaving a small ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Run the saved handler now') plus what comes back ('logs, return value and duration'). The delivery clause ('Nothing is delivered, but whatever the code itself sends does happen') semantically separates it from delivery-oriented siblings such as anyhook_replay and anyhook_replay_failed without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear selection logic between the two run modes ('on a stored event (the latest when event_id is omitted) or on a body you give') and warns that a run is consumed ('Counts as a run'). It does not explicitly exclude the adjacent alternatives (anyhook_mock, anyhook_replay, anyhook_inspect), so the agent must infer which tool fits when it wants a real delivery or a canned response.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_connectConnect Stripe or GitHub with one keyAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoGitHub only: "owner/repo", or an organization name for an org-wide hook. Optional when the token administers exactly one repository.
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.
appSlugNoConnect this existing app. Omit to create a new app for the provider.
provider_keyYesA 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.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations (readOnlyHint: false, destructiveHint: false, openWorldHint: true) telling the agent it's a non-destructive, open-world operation, the description goes far beyond: it explains the key is used once and not stored, that without appSlug a new app is created and removed if the provider refuses the key, that re-running replaces the registration, and that GitHub sends a signed ping immediately. This is exactly the kind of behavioral context the annotations do not provide, and there is no contradiction with them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured paragraph that front-loads the main action and then adds important behavioral details in a logical order. It is dense but not wasteful; every sentence carries actionable information. A slightly tighter grouping could improve readability, but it's highly effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a non-read-only, open-world tool with no output schema and fully documented parameters, the description covers everything an agent needs: the exact effect, side effects, idempotency, failure handling, provider-specific behavior (GitHub ping), and the follow-up step for forwarding. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all parameters (provider_key, appSlug, target, api_key) are documented in the schema. The description reinforces appSlug behavior and provider_key usage ('the provider is read from the key'), but adds no new syntax or format details beyond what the schema already states. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'Wire a provider to AnyHook in one call', and enumerates the exact effects (register webhook, save signing secret, enable signature verification). It clearly distinguishes itself from sibling tools like anyhook_apps_create by describing the end-to-end provider-side registration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when this is used (to wire a provider), what happens with or without appSlug, and what happens on re-run. It hints that events are logged until a destination is added, but it doesn't explicitly say when to use this tool vs. anyhook_apps_create or anyhook_providers. Still, the 'afterwards' note implicitly guides the agent to a separate step for forwarding.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_eventsList recent webhook eventsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sourceNoFilter by provider source (local mode).
statusNoFilter by status. Account mode: queued|success|retrying|failed. Local mode: received|forwarded|failed|retrying.
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.
appSlugNoFilter to a specific app slug (account mode).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description adds useful behavioral context: summaries only, no request headers or body, most-recent-first ordering, and the account/local store distinction. This goes beyond the annotation without contradicting it, though it does not describe pagination or default limit behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler. Key facts are front-loaded (list, ordering, fields), followed by the payload-routing instruction and mode behavior, all in a compact and scannable format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description covers the essential return fields, the ordering, the summary-only limitation, how to access full payloads, and the two runtime modes. The parameter schema fills in the remaining filter details, making the tool adequately complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so the schema already documents most parameters. The description adds context about account vs. local mode that clarifies mode-dependent filters, but it does not explain individual parameters beyond what the schema provides. This meets the baseline for schema-driven parameter clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List webhook events'), specifies ordering ('most recent first') and enumerates the returned summary fields (id, app, type, status, attempt, destination status code, latency, timestamp). It explicitly distinguishes itself from anyhook_inspect by noting that only summaries are returned and payloads require a follow-up call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear routing guidance: 'Summaries only... call anyhook_inspect with an id from here to read one event's payload.' It also explains the account vs. local in-memory mode, helping agents understand when filters like source and status apply. It does not explicitly contrast with other sibling list tools such as anyhook_inbox or anyhook_undelivered, so it stops short of full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_inboxGet this app's email inbox addressA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
appNoApp slug (from anyhook_apps_list). Defaults to your first app.
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals a safe read operation. The description adds useful behavioral context: it explains that mail sent to the returned address generates events of type email.received, which goes beyond the annotation. It does not disclose potential errors or side effects, but given the annotation and the simplicity, it adds meaningful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core concept (every app is an email inbox), and delivers the return value without excess. No wasted words; every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with two optional parameters and no output schema, the description covers the essential purpose, the return value (address and webhook URL), and the relationship to events. It does not detail exact response format, but that is likely not critical. The tool is adequately described for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for both parameters (app and api_key), so the schema already documents them well. The description adds the email pattern ({user}.{app}@anyhook.net) which helps understand the app parameter's role, but it does not significantly expand on the schema descriptions. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Returns the address and webhook URL for one of your apps.' It also explains the email inbox concept and how incoming mail becomes events, which distinguishes it from siblings like anyhook_events (which reads events) and anyhook_apps_list (which lists apps). The verb 'returns' is specific and the resource is well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: you need this address to send email that becomes events, and it points to anyhook_events for reading them. However, it does not explicitly state when to use this tool versus alternatives, nor does it give exclusions or a direct 'use this when...' condition. The context is there but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_inspectInspect a specific eventA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEvent ID returned by anyhook_events.
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds valuable behavioral context: payloads can be large and often contain personal data, which warns the agent about the operation's nature. It also mentions 'Account or local store' as a location qualifier. This goes beyond the annotation, though it doesn't describe error handling or response size limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loading the core purpose and immediately adding the key usage constraint. Every sentence earns its place, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one required parameter, the description is nearly complete. It covers purpose, the source of id, and important caveats about payload size and privacy. The lack of output schema is acceptable because the description implies the return contains full event detail. Minor gaps like error handling are not critical for this simple operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: both id and api_key have detailed descriptions. The description adds no new parameter semantics beyond what the schema already provides, so the baseline of 3 applies. The mention that id comes from anyhook_events is already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides full detail for one event by id, specifically including the inbound headers and body that anyhook_events omits, plus the destination's response. This is a specific verb and resource, and it explicitly differentiates from the sibling anyhook_events by noting what it adds.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage guidance: 'fetch one at a time, only when the body is needed' and warns about large payloads and personal data. It implies this tool is for when the full body is required, contrasting with anyhook_events which omits these details. However, it doesn't explicitly state alternatives for other use cases, so it's not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_mockMock a webhookA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoOptional fields to deep-merge into the fixture.
eventYesEvent name (e.g. 'payment_intent.succeeded' for Stripe).
secretNoSigning secret. Falls back to a deterministic default per provider.
providerYesWebhook provider to simulate.
targetUrlNoIf set, POST the generated request to this URL and return the response.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations by explaining that the request is POSTed only if targetUrl is provided, and that the response is returned. This clarifies the conditional side effect. It does not, however, disclose what happens when targetUrl is omitted (likely returns the generated request) or the return format, but the annotations already carry the destructive hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, followed by a concise conditional. No redundant words, every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the core function and the targetUrl conditional, but it does not specify the return value when targetUrl is not provided, nor the overall response format. With no output schema, this is a notable gap for an agent to know what to expect. The tool is moderately simple, but the missing non-posting behavior prevents a higher score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so all parameters are already documented. The description repeats the targetUrl behavior that the schema already states ('If set, POST the generated request to this URL and return the response') and adds no new meaning about other parameters like data or secret. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool generates a webhook request with a valid signature for Stripe, GitHub, or Slack, and optionally posts it to a target URL. This is a specific verb+resource that distinguishes it from sibling tools like verify or replay, but it does not explicitly name a sibling or provide a contrast, so it misses the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for generating test webhooks, and the conditional targetUrl behavior is clear. However, it does not explicitly state when to use this tool versus alternatives like anyhook_verify or anyhook_replay, nor does it provide exclusions or prerequisites. The guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_providersList supported providers and event typesA
Read-only
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals a safe read operation, and the description correctly aligns by saying 'List.' The description adds minimal behavioral context beyond that—no mention of response size, authentication needs, or pagination. With annotations present, this is acceptable but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, tight sentence that front-loads the verb and scope. No wasted words or redundant phrasing. It earns its place completely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless list tool, the description sufficiently conveys what will be returned: providers and their event types. There is no output schema, so the description helps somewhat, though it doesn't specify the exact response format (e.g., array vs object). Given the simplicity, this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing for the description to clarify. The input schema is empty and the description itself doesn't promise any arguments. This is the baseline for a no-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('List') and resource ('webhook providers... event types'). It is distinct from mutation tools like anyhook_mock or anyhook_apps_create, but it does not explicitly differentiate from anyhook_events, which might also list event types. Still, the scope is concrete enough for an agent to understand what it returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives. It doesn't say 'use this to discover providers before mocking' or mention anyhook_events. The agent is left to infer that a listing tool is for discovery, which is weak.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_replayReplay an eventA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEvent ID to replay. Replay does not consume event quota; it is charged to the compute allowance.
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring destructiveHint=true and readOnlyHint=false, the description adds substantial context: replays sit outside the monthly event quota but inside a daily replay limit and the compute allowance, held-for-quota events bill as new events, and non-idempotent receivers will process the event twice. That is exactly the kind of downstream consequence an agent cannot get from annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action, then layers billing and idempotency caveats in three dense sentences with little waste. Slightly long on parenthetical tool references, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutating tool with no output schema, it covers the important behavior: quota treatment, billing consequences, and duplicate-processing risk. It stops short of error/failure conditions or what a replay returns, but the essentials are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented; the billing note in the description largely restates the schema's own wording on 'id'. Baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: re-send a stored event to its destinations. Clear and concrete. It does not explicitly differentiate from the close sibling anyhook_replay_failed, which also replays, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied ("while debugging"), and no alternative is named. It never says when to pick this over anyhook_replay_failed or anyhook_undelivered, which given that sibling set is a real gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_replay_failedBulk-replay all failed events for an appA
Destructive
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.
appSlugYesBulk-replay every failed event for this app.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows it mutates state. The description adds purpose context but no additional behavioral details beyond what annotations provide; no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The action and use case are stated directly and efficiently, front-loading the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description explains what it does and when to use it, but it does not mention potential side effects (e.g., duplicate events, rate limits) or what happens after replay. Given the tool's simplicity, this is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters described (appSlug and api_key). The tool description adds no extra meaning to the parameters beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear action (re-send) on a specific resource (failed events) scoped to an app slug. It is unambiguous but does not explicitly differentiate from siblings like anyhook_replay or anyhook_undelivered, which might also handle events.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete use case ('after fixing a downstream bug to recover queued work') but does not mention alternatives or when not to use this tool. The context is helpful but lacks explicit exclusions or comparisons to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_undeliveredList undelivered events for an appA
Read-only
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.
appSlugYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the read-only nature, and the description adds valuable context about the status filter (failed or still retrying). However, it does not disclose other behaviors such as pagination, ordering, or error conditions, so it meets but does not exceed the bar given the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, 18 words, with no filler. The action and filter are front-loaded, and the sentence is easy to parse. Every word contributes to the meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple filtered-list tool with a readOnly annotation and one required parameter, the description provides enough to understand the core purpose but lacks guidance on parameter usage (especially limit and appSlug format) and alternatives. The missing usage guidelines and parameter semantics prevent full completeness for an agent to call it without extra schema inspection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (only api_key has a description), and the tool description adds minimal parameter meaning beyond echoing 'given app' for appSlug. It does not explain limit semantics or the role of appSlug further, failing to compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Show') and a resource ('events for the given app') with a clear filter ('not successfully reached any destination'). It distinguishes this from sibling list tools like anyhook_events or anyhook_inbox by explicitly scoping to undelivered events, so an agent can identify the tool's niche.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (retrieve undelivered events) but does not explicitly compare with alternatives or state when not to use it. It lacks explicit exclusions or references to sibling tools, leaving the agent to infer the appropriate scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_usageShow plan limits and usageA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoAPI key (ahk_live_...) from anyhook_quickstart. Only needed over HTTP when no Authorization header is set; ignored over stdio.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnlyHint, it discloses the accounting semantics that shape agent behavior: events count per delivery with large events billed per 64 KB, and each tool call that reads or changes the account counts as one API call — meaning the agent's own calls consume quota. It also states that each metric's reset time is included, which the annotations do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool reports, followed by usage guidance, so the agent gets purpose before triggers. The enumeration is long but every clause names a distinct meter or counting rule, so little is wasted; it is dense rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description effectively previews the return payload (each meter plus its reset time), so an agent knows what it will get back. For a read-only, zero-required-param usage tool, nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the single api_key parameter is already fully documented in the schema, including the HTTP-vs-stdio nuance. The description adds nothing about parameters; per the rubric, a fully documented single parameter lands at the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise purpose — showing plan limits and consumption — and then enumerates exactly which counters are reported (events, overage, compute allowance and its consumers, API calls, code runs, snapshots, reset times). No sibling tool covers usage/limits, so an agent can identify it immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives three explicit invocation triggers: when something answers with a limit, before bulk work such as replay_failed, and when the user asks about usage. It even names the sibling (replay_failed) that should be preceded by this call, which is exactly the routing information an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anyhook_verifyVerify a webhook signatureA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesRaw request body.
secretYesSigning secret to verify against.
headersYesRequest headers as a flat object.
providerYesProvider name (e.g. 'stripe', 'github', 'slack', 'generic').
requestUrlNoOriginal request URL (required for Twilio/HubSpot). Defaults to a placeholder.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true is consistent with a pure cryptographic verification, and the description usefully discloses the breadth of supported sources. However, it does not say what happens on a failed verification (returned false vs. thrown error), whether it performs any network call, or anything about the aggregate/edge behavior it references.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the core action and scope. The long provider enumeration is informative but stretches the sentence; it could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining the result — and it does not say whether success/failure is expressed as a boolean, a thrown error, or a structured result. For a tool whose entire purpose is a valid/invalid determination, that is a meaningful gap for a 5-parameter call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds marginal value by confirming the concrete provider names the 'provider' param accepts (beyond the schema's 'stripe'/'github'/'slack'/'generic' examples), but it says nothing about required vs optional parameters such as requestUrl for Twilio/HubSpot.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('verify a webhook signature against a secret') and enumerates the concrete provider coverage (stripe, github, shopify, ...). This is unmistakably distinct from siblings like anyhook_replay, anyhook_mock, or anyhook_inspect, so an agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The provider list implies the situations where this tool applies, but there is no explicit when-to-use or when-not-to-use guidance, nor any statement about prerequisites (e.g. that you already have a raw body and headers from an inbound request). Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedanyhook_replay1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Event ID to replay. Replay does not consume event quota."New value: +"Event ID to replay. Replay does not consume event quota; it is charged to the compute allowance."
    • Addedanyhook_usage
  2. 1 tool update
    • Changedanyhook_code_deploy1 field changed
      • changedInput schema / properties / code / description
        Previous value: -"An ES module, run in a sandboxed Node.js on every event this app receives. Either `export default async function (event, { env }) {}` (event: { method, headers, body, raw_body, delivery_id, attempt }) or a Pipedream code step as written: `export default defineComponent({ async run({ steps, $ }) {} })` with steps.trigger.event, $.export and $.flow.exit. npm packages it imports are installed on deploy (pin as \"pkg@1.2.3\", like Pipedream; a new package list takes up to a minute). @pipedream/platform is a stand-in. State between events: the app's store (store.get/set/has/delete/keys, set takes { ttl }); a step's data_store prop is the same store, an app prop's this.<prop>.$auth.<field> reads the secret <APP>_<FIELD>, any other prop the secret named after it (channelId → CHANNEL_ID). Throwing fails the delivery, which AnyHook retries. Templates for common actions (Slack, email, Google Sheets, Notion, Claude and more): https://anyhook.net/code-templates.md"New value: +"An ES module, run in a sandboxed Node.js on every event this app receives. Either `export default async function (event, { env }) {}` (event: { method, headers, body, raw_body, delivery_id, attempt }; method is always POST, and the query string, path and caller IP are not kept) or a Pipedream Node.js code step: `export default defineComponent({ async run({ steps, $ }) {} })`, where steps.trigger.event is that same event (a step reading query, path, url or client_ip needs changing) and $.export and $.flow.exit work. npm packages it imports are installed on deploy (pin as \"pkg@1.2.3\", like Pipedream; a new package list usually takes seconds, a large one a few minutes). @pipedream/platform is a stand-in. State between events: the app's store (store.get/set/has/delete/keys, set takes { ttl }); every data_store prop is that one store, an app prop's this.<prop>.$auth.<field> reads the secret <APP>_<FIELD>, any other prop the secret named after it (channelId → CHANNEL_ID). Throwing fails the delivery, which AnyHook retries. Templates for common actions (Slack, email, Google Sheets, Notion, Claude and more): https://anyhook.net/code-templates.md"
  3. 1 tool update
    • Changedanyhook_code_deploy1 field changed
      • changedInput schema / properties / code / description
        Previous value: -"An ES module, run in a sandboxed Node.js on every event this app receives. Either `export default async function (event, { env }) {}` (event: { method, headers, body, raw_body, delivery_id, attempt }) or a Pipedream code step as written: `export default defineComponent({ async run({ steps, $ }) {} })` with steps.trigger.event, $.export and $.flow.exit. npm packages it imports are installed on deploy (pin as \"pkg@1.2.3\", like Pipedream; a new package list takes up to a minute). @pipedream/platform is a stand-in. State between events: the app's store (store.get/set/has/delete/keys, set takes { ttl }); a step's data_store prop is the same store, an app prop's this.<prop>.$auth.<field> reads the secret <APP>_<FIELD>, any other prop the secret named after it (channelId → CHANNEL_ID). Throwing fails the delivery, which AnyHook retries."New value: +"An ES module, run in a sandboxed Node.js on every event this app receives. Either `export default async function (event, { env }) {}` (event: { method, headers, body, raw_body, delivery_id, attempt }) or a Pipedream code step as written: `export default defineComponent({ async run({ steps, $ }) {} })` with steps.trigger.event, $.export and $.flow.exit. npm packages it imports are installed on deploy (pin as \"pkg@1.2.3\", like Pipedream; a new package list takes up to a minute). @pipedream/platform is a stand-in. State between events: the app's store (store.get/set/has/delete/keys, set takes { ttl }); a step's data_store prop is the same store, an app prop's this.<prop>.$auth.<field> reads the secret <APP>_<FIELD>, any other prop the secret named after it (channelId → CHANNEL_ID). Throwing fails the delivery, which AnyHook retries. Templates for common actions (Slack, email, Google Sheets, Notion, Claude and more): https://anyhook.net/code-templates.md"
  4. 1 tool update
    • Changedanyhook_code_deploy1 field changed
      • changedInput schema / properties / code / description
        Previous value: -"An ES module, run in a sandboxed Node.js on every event this app receives. Either `export default async function (event, { env }) {}` (event: { method, headers, body, raw_body, delivery_id, attempt }) or a Pipedream code step as written: `export default defineComponent({ async run({ steps, $ }) {} })` with steps.trigger.event, $.export and $.flow.exit. npm packages it imports are installed on deploy (pin as \"pkg@1.2.3\", like Pipedream; a new package list takes up to a minute). @pipedream/platform is a stand-in. Throwing fails the delivery, which AnyHook retries."New value: +"An ES module, run in a sandboxed Node.js on every event this app receives. Either `export default async function (event, { env }) {}` (event: { method, headers, body, raw_body, delivery_id, attempt }) or a Pipedream code step as written: `export default defineComponent({ async run({ steps, $ }) {} })` with steps.trigger.event, $.export and $.flow.exit. npm packages it imports are installed on deploy (pin as \"pkg@1.2.3\", like Pipedream; a new package list takes up to a minute). @pipedream/platform is a stand-in. State between events: the app's store (store.get/set/has/delete/keys, set takes { ttl }); a step's data_store prop is the same store, an app prop's this.<prop>.$auth.<field> reads the secret <APP>_<FIELD>, any other prop the secret named after it (channelId → CHANNEL_ID). Throwing fails the delivery, which AnyHook retries."
  5. 1 tool update
    • Changedanyhook_code_deploy1 field changed
      • changedInput schema / properties / code / description
        Previous value: -"An ES module, run in a sandboxed Node.js on every event this app receives. Either `export default async function (event, { env }) {}` (event: { method, headers, body, raw_body, delivery_id, attempt }) or a Pipedream code step as written: `export default defineComponent({ async run({ steps, $ }) {} })` with steps.trigger.event, $.export and $.flow.exit. fetch is global; `axios` and `@pipedream/platform` are fetch-based stand-ins; no other package is installed. Throwing fails the delivery, which AnyHook retries."New value: +"An ES module, run in a sandboxed Node.js on every event this app receives. Either `export default async function (event, { env }) {}` (event: { method, headers, body, raw_body, delivery_id, attempt }) or a Pipedream code step as written: `export default defineComponent({ async run({ steps, $ }) {} })` with steps.trigger.event, $.export and $.flow.exit. npm packages it imports are installed on deploy (pin as \"pkg@1.2.3\", like Pipedream; a new package list takes up to a minute). @pipedream/platform is a stand-in. Throwing fails the delivery, which AnyHook retries."
  6. 1 tool update
    • Changedanyhook_code_deploy1 field changed
      • addedInput schema / properties / enabled
        Added value: +{
        +  "description": "Whether events run the code. false saves it switched off, so it runs only through anyhook_code_test. Omit: a first deploy goes live and later deploys keep the current state. Deploy off while another system still handles the same events, or both will act on each one.",
        +  "type": "boolean"
        +}
  7. 3 tool updates
    • Addedanyhook_code_deploy
    • Addedanyhook_code_get
    • Addedanyhook_code_test
  8. 1 tool update
    • Addedanyhook_connect
  9. 1 tool update
    • Removedanyhook_quickstart
  10. 1 tool update
    • Addedanyhook_inbox
  11. 11 tool updates
    • First observedanyhook_apps_create
    • First observedanyhook_apps_list
    • First observedanyhook_events
    • First observedanyhook_inspect
    • First observedanyhook_mock
    • First observedanyhook_providers
    • First observedanyhook_quickstart
    • First observedanyhook_replay
    • First observedanyhook_replay_failed
    • First observedanyhook_undelivered
    • First observedanyhook_verify

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.