Skip to main content
Glama

HALOWERK: Verify a signed webhook from GitHub, Stripe, Shopify, Slack, Svix or a plain HMA

webhook_signature
Read-only

Verify webhook signatures for GitHub, Stripe, Shopify, Slack, Svix, and HMAC. Handles provider-specific signing formats and timestamp checks, with debug output for mismatches.

Instructions

Verify a signed webhook from GitHub, Stripe, Shopify, Slack, Svix or a plain HMAC scheme, with the timestamp window checked where the provider signs one.

Kostenpflichtig: 0.002 USDC je Aufruf. Bezahlt per x402 auf Base, ohne Konto. Hoechstens 0.002 USDC je Aufruf.

Providers each build their signing string differently — some sign only the body, others prepend a timestamp, an id, or a version marker in a fixed order — and getting that order wrong produces a mismatch that looks exactly like an attack. This checks the signature the way the named provider actually specifies, with constant-time comparison, and returns the string that was signed so a mismatch can be debugged instead of guessed at. Where the provider signs a timestamp, it is checked against a tolerance window, because a signature valid forever lets any captured delivery be replayed. The body must be passed exactly as received, byte for byte: a re-serialised JSON payload has different bytes and will never match, which is the single most common cause of a failed check and is called out when the body looks reformatted. Preis 0.002 USDC je Aufruf, Abrechnung über x402.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bodyYesThe raw request body exactly as received, not re-serialised.
secretYesThe signing secret.
headersNoAll request headers; the right one is picked by provider.
providerYesWhich provider signed the request.
signatureNoThe signature header value. Required unless headers is given.
timestampNoTimestamp, if the provider signs one and it is not in the headers.
message_idNoMessage id for schemes that sign one, e.g. Svix.
tolerance_secondsNoHow old a signed timestamp may be.
Behavior5/5

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

The description goes well beyond the annotations (readOnlyHint, openWorldHint, destructiveHint) by disclosing security and behavioral details: constant-time comparison, timestamp tolerance window, returning the exact signed string for debugging, and the requirement for byte-for-byte body preservation. It also explains the consequences of re-serialization, which is critical for correct use. The annotations are consistent with the described read-only verification behavior.

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

Conciseness3/5

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

The description is front-loaded with the core purpose, but it repeats pricing information three times (Kostenpflichtig, Hoechstens, and Preis at the end) in a way that feels redundant. The technical explanation is valuable but could be trimmed to a more concise format. The structure is reasonably organized but not every sentence earns its place, so it is not a model of conciseness.

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 tool has 8 parameters, no output schema, and supports multiple providers. The description covers major pitfalls (body serialization, timestamp tolerance, signing string order) but does not fully describe the return value beyond 'returns the string that was signed'. It also does not address error handling or what happens when verification fails, which is important for an agent to know given the absence of an output schema. Thus it is adequate but has clear gaps for this complexity.

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?

With 100% schema coverage, the baseline is 3, but the description adds valuable semantics beyond the schema. It explains that providers build signing strings differently (body-only vs. prepending timestamp, id, or version), which directly maps to parameters like timestamp, message_id, and signature. It also clarifies why the body must be exact, enriching understanding of the 'body' parameter. However, it does not detail each parameter individually, so it falls short of a 5.

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 action: 'Verify a signed webhook' and enumerates specific providers (GitHub, Stripe, Shopify, Slack, Svix) as well as plain HMAC. This is a specific verb+resource that distinguishes it from sibling tools like jwt_verify, which handles JWT tokens rather than webhook signatures.

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 provides clear context for when to use the tool: any time a signed webhook from the listed providers needs verification. It does not explicitly mention when not to use it or name alternatives, but the provider list and the distinctive description of signature construction give sufficient situational guidance. The note about passing the body exactly as received is also a usage hint.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/halowerk/halowerk-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server