Skip to main content
Glama
korb-sh

korb

Official

korb

Catch every webhook. Never drop one again.

korb is a receive-side webhook gateway: point Stripe, Shopify, GitHub, or any HTTP POST source at your korb URL, and korb verifies, stores, and fans events out to your destinations — with retries, logs, and replay.

Zero runtime dependencies. Node >= 18.

Setup

npm i -g @korb-sh/korb
korb login           # approve access in your browser

login opens a device-style handshake and saves a token to ~/.korb/credentials.json (0600). For CI, create an API token in the dashboard (Settings → API tokens) and export it:

export KORB_TOKEN=korb_...
export KORB_API_BASE=https://korb.sh   # override the default endpoint

Related MCP server: webhook-mcp

Commands

korb login / whoami / logout
korb forward <url> [--source id] [--interval ms]   live events -> localhost
korb sources / destinations / routes
korb events [--hours N] [--status s] [--source id]
korb events get <id>                               headers + body of one event
korb replay <id>                                   redeliver one event
korb presets                                       preset catalog (public)
korb test <source>                                 fire the preset's test event
korb delete <source|destination|route> <id-or-name>

MCP server

korb mcp runs a Model Context Protocol server over stdio — let your agent operate your webhooks: find failed deliveries, inspect payloads, replay, fire test events.

Tools: list_failed, get_payload, replay, send_test (replay + send_test need a read+write token; the server refuses politely on read-only tokens).

Claude Desktop / Cursor config:

{
  "mcpServers": {
    "korb": {
      "command": "korb",
      "args": ["mcp"],
      "env": { "KORB_TOKEN": "korb_..." }
    }
  }
}

Without KORB_TOKEN it uses the saved korb login credentials.

Typical agent flow: list_failed → what broke? → get_payload → what was sent? → replay after fixing the consumer → send_test to verify end-to-end.

Scoped tokens

API tokens are minted in the dashboard and are read-only or read+write. Write actions through a read-only token are refused locally (clear message) and re-enforced server-side. Billing and account deletion are always dashboard-session-only — a token can never touch them.

Available Tools

4 tools
get_payloadA
Read-only

Fetch one stored webhook event: headers and full body exactly as received. The id comes from list_failed (or the dashboard inbox).

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesevent id from list_failed / korb events

TDQS

A4.1/5.0
Behavior3/5

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

readOnlyHint=true already declares the safety profile, so the description isn't carrying that burden. It adds a useful fidelity guarantee ('exactly as received', implying no transformation or truncation), but says nothing about retention windows, missing-event behavior, or payload 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?

Two tight sentences; the core action and the returned content are front-loaded and the id source follows as a secondary note. No filler whatsoever.

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?

With no output schema present, the description compensates by naming exactly what is returned (headers and full body, unmodified). For a single-parameter read-only fetch with full schema coverage, an agent has everything needed to invoke 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% and the single parameter's description already says 'event id from list_failed / korb events'. The prose repeats that source rather than adding new meaning, so this is the baseline case where the schema does the work.

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 — 'Fetch one stored webhook event' — and defines the payload scope as 'headers and full body exactly as received'. The singular 'one' and 'stored' cleanly distinguish it from the list-oriented sibling list_failed.

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 provenance for the required id ('comes from list_failed (or the dashboard inbox)'), which tells the agent the prerequisite step. It does not, however, state when to use this versus replay or send_test, so no explicit exclusions.

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

list_failedA
Read-only

List webhook events whose deliveries failed or partially failed, newest first. Use this first when a webhook consumer is misbehaving; follow up with get_payload to inspect what was sent and replay to redeliver once fixed.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNolookback window in hours (default 24, max 720)
limitNomax rows (default 25, max 100)
sourceNosource id or name (default: all sources)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds genuine behavioral context beyond that: the result ordering (newest first) and the inclusion of partially-failed deliveries alongside fully-failed ones, which shapes how the agent interprets results. It stops short of discussing pagination or result volume.

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 tight sentences with no filler; the scope and ordering are front-loaded, and the second sentence carries the workflow guidance without padding.

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 three-parameter, read-only list tool with no output schema, the description covers purpose, ordering, and the triage workflow. It could say slightly more about what fields each event row carries or result-volume expectations, but nothing essential to correct invocation 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 description coverage is 100%, so the schema fully documents hours, limit, and source, including defaults and maxes. The description adds nothing about parameter syntax or behavior, so the baseline of 3 is correct.

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 (List), resource (webhook events), and filter scope (deliveries failed or partially failed) plus ordering (newest first). This clearly distinguishes it from siblings get_payload (inspect a payload), replay (redeliver), and send_test (synthetic send).

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?

Explicitly routes the agent: "Use this first when a webhook consumer is misbehaving," then names the follow-up tools get_payload and replay and the condition for each (inspect what was sent; redeliver once fixed). This is a complete when-to-use and what-next sequence.

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

replayA

Redeliver one stored event to its routed destinations (same event id, korb-replay header set, receivers' own dedupe applies). Requires a read+write token.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesevent id to redeliver

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, so the description carries most of the burden and does it well: it discloses the auth requirement ('read+write token'), the korb-replay header side effect, preservation of the original event id, and that receiver-side dedupe applies. It stops short of saying what happens on failure or whether the redelivery is retried.

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?

One sentence, front-loaded with the action, with each parenthetical clause carrying distinct operational value (header, dedupe, auth). No 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?

For a single-parameter mutation with no output schema, the description covers the important operational context (auth, header, dedupe). It could be more complete by noting where to obtain a valid event_id (list_failed/get_payload) and the outcome of a failed redelivery.

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% and the single event_id parameter is documented in the schema. The description adds the meaningful nuance that the id is the stored event's id and is preserved on redelivery, but no format or lookup guidance, so 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?

Specific verb+resource: 'Redeliver one stored event to its routed destinations' precisely states the action and its scope. It does not name or contrast with siblings (list_failed, get_payload, send_test), so an agent must infer that this replays an already-stored event rather than sending a new one.

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 implied by 'one stored event' and the sibling set, but there is no explicit when-to-use/when-not or pointer to the alternative (e.g. send_test for new events, list_failed to find candidates). No prerequisites are stated beyond the token requirement.

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

send_testA

Fire a preset's test event through a source (e.g. a Stripe checkout.session.completed) — a REAL event in the REAL lane, useful to verify a fix end-to-end. Requires a read+write token.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYessource id or name (unique prefix works)

TDQS

A3.7/5.0
Behavior4/5

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

Adds meaningful context beyond the readOnlyHint=false annotation: it emphasizes the event is REAL and side-effecting in the REAL lane, and states the auth requirement (read+write token). That auth prerequisite is exactly the kind of information the annotation does not carry.

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?

Compact single sentence with the action front-loaded, followed by the effect warning and auth requirement. No filler, though the em-dash clauses make it slightly dense.

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 one-parameter mutation tool with no output schema, the description covers the key agent concerns: it mutates real state and requires a read+write token. Return format is unspecified but not critical here.

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 single 'source' parameter is fully documented in the schema, so baseline 3 applies. The description's Stripe example adds mild flavor but no syntax beyond what the schema provides.

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 and resource ('Fire a preset's test event through a source') with a concrete example event. The 'REAL event in the REAL lane' framing implicitly distinguishes it from the replay sibling, but no sibling is named explicitly.

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?

Gives a use case ('verify a fix end-to-end') but never states when not to use it or points to replay/list_failed as alternatives. Usage is implied rather than routed.

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. 4 tool updatesv0.1.0
    • First observedget_payload
    • First observedlist_failed
    • First observedreplay
    • First observedsend_test

TDQS

A4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool occupies a distinct stage of the webhook debugging workflow: list_failed discovers problems, get_payload inspects a specific event, replay redelivers one, and send_test generates a new test event. There is no overlap — an agent can unambiguously pick the right tool for each intent.

Naming Consistency4/5

All names use lowercase snake_case, and three follow a verb_noun pattern (list_failed, get_payload, send_test). 'replay' is a bare verb with no noun, a minor deviation, but the style remains readable and predictable overall.

Tool Count4/5

Four tools is reasonable for a focused webhook troubleshooting server, and each one clearly earns its place in the detect-inspect-fix-verify loop. It sits at the lean end of the ideal 3-15 range, but not awkwardly so.

Completeness4/5

The surface covers a full debugging lifecycle (list failures, inspect payload, replay, send a verification test), which is coherent and complete for the stated purpose. Minor gaps exist — no tool to list successful/all events or search/filter beyond failed deliveries — though the dashboard inbox mentioned in descriptions partly offsets this.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to create disposable webhook URLs, capture incoming HTTP requests, inspect headers and bodies, and replay them against local or remote endpoints, streamlining the webhook handler development loop.
    5
    9 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that sends webhook notifications to a configured URL, enabling AI assistants to notify users when long-running tasks complete.
    36 npm
    3
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    Webhook management and debugging. Validate signatures, log events, replay, and analyze webhook traffic.
    51 PyPI
    -