Skip to content

Tool Reference

Complete reference for all 48 MCP tools available to AI coding agents, plus the sandbox tools for agents without an account. Parameters, return types, and usage examples for endpoint, request, email, forwarding, and webhook operations.

Updated Nov 2026

Endpoint management

create_endpoint

Create a new webhook endpoint. Returns the endpoint slug and full URL.

ParameterTypeRequiredDescription
namestringnoDisplay name for the endpoint
ephemeralbooleannoAuto-delete after 12 hours
expiresInstringnoCustom expiry duration (e.g., "2h", "7d")
mockResponseobjectnoMock response config (see fields below)
responseRulesarraynoConditional response rules (method/path/header/body conditions + responses)
notificationUrlstringnoAdds a Notifications destination: a chat message, at most one a second
signingProviderstringnoProvider for automatic signature verification (e.g., stripe, github)
signingSecretstringnoSigning secret (encrypted server-side). Required when signingProvider is set
signingHeaderstringnoCustom header name (only for generic-hmac provider)
sitestringnoWhich site's dashboard lists it: webhooks, mailhooks or both (default)

mockResponse fields:

FieldTypeRequiredDescription
statusnumberyesHTTP status code (100-599)
bodystringnoResponse body
headersRecord<string, string>noResponse headers
delaynumbernoResponse delay in ms (0-30000)

create_endpoints

Create 1--20 endpoints in a single call. Returns an array of created endpoints.

ParameterTypeRequiredDescription
countnumberyesNumber of endpoints to create (1--20)
namePrefixstringnoPrefix for auto-generated names
ephemeralbooleannoAuto-delete after 12 hours
expiresInstringnoCustom expiry duration

list_endpoints

List the endpoints you own (each with sharedWith) and those shared with you through a subscribed team (each with fromTeam, the oldest share, and fromTeams, every one of your teams it is shared with). Each carries favorite, whether you marked it as a favourite.

ParameterTypeRequiredDescription
teamstringnoTeam id or unique name; keeps only endpoints tied to that team via fromTeams, fromTeam, or sharedWith. Ambiguous names are an error

get_endpoint

Get details for an endpoint by slug, including favorite, whether you marked it as a favourite.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug

favorite_endpoint

Mark an endpoint as one of your favourites, or unmark it. A favourite is your own choice, never the endpoint's, so endpoints shared with you through a team can be marked too. Idempotent; returns { slug, favorite }.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
favoritebooleannotrue marks it (the default), false unmarks it

update_endpoint

Update an endpoint's name, mock response, notification webhook, signing configuration, or whether codes and links are picked out of its emails. Forwarding has its own tools.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
namestringnoNew display name
mockResponseobjectnoMock response config (see fields above), or null to clear
responseRulesarraynoConditional response rules, or null to clear
notificationUrlstringnoSets the Notifications destination, or null removes it
signingProviderstringnoSigning provider (e.g., stripe), or null to disable
signingSecretstringnoNew signing secret (encrypted server-side), or null to clear
signingHeaderstringnoCustom header name (only for generic-hmac), or null to clear
showEmailExtractsbooleannoPick codes and links out of emails (dashboard and forwarded JSON); owner only
sitestringnoWhich site's dashboard lists it: webhooks, mailhooks or both; owner only
emailFieldsarraynoNamed fields to pick out of every email, { name, from, header?, pattern } (RE2), at most 20; replaces the list, null or [] removes them; owner only. See Fields you pick out
layoutsarraynoHow the endpoint reads each sender's emails: { id, name, enabled?, match?, fields?, lineItems?, parseAttachments? }, the first whose match holds applies; replaces the list, null or [] removes them; owner only. See Layouts

preview_layouts

A dry run of the endpoint's layouts on a captured email: which layout matches, the fields and line items it finds, and what earlier parses of its attachments held. Nothing is saved and no pages are used. Pass layouts to try them before saving them with update_endpoint.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
requestIdstringnoA captured email on the endpoint (default: the newest)
layoutsarraynoLayouts to try instead of the saved ones

Returns any problems with the layouts tried, the plan's layoutsCap, the request it ran on and parsed: the status (matched or no_layout), the layout, fields, lineItems with lineItemColumns, attachments and pages. Long results keep the first 20 line items and leave out sheet rows and attachment text.

preview_response

A dry run of the endpoint's responses: which response rule answers a captured request, and the response with its {{ placeholders }} filled in, exactly as the receiver would send it. Nothing is sent. Pass mockResponse or responseRules to try settings before saving them with update_endpoint.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
requestIdstringnoA captured request on the endpoint (default: the newest HTTP request)
mockResponseobjectnoA default response to try instead of the saved one, or null for none
responseRulesarraynoRules to try instead of the saved ones, or null for none

Returns the rule that answered (rule.index, from 0, or null for the default response), the response (status, headers, body, delay; null means the plain 200 OK), any unknownPlaceholders, and the request it ran against.

delete_endpoint

Delete an endpoint and all its captured requests.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug

delete_endpoints

Delete 1--100 endpoints in a single call.

ParameterTypeRequiredDescription
slugsstring[]yesArray of endpoint slugs to delete (1--100)

Sending and testing

send_webhook

Send a test webhook to a hosted webhooks.cc endpoint. Supports manual payloads and provider templates, including signed templates for providers that support shared-secret or token-style signing.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
methodstringnoHTTP method (default: "POST")
headersobjectnoHTTP headers to include
bodyanynoRequest body
providerstringnoProvider template (stripe, github, shopify, twilio, slack, paddle, linear, sendgrid, clerk, discord, vercel, gitlab, typeform, standard-webhooks, meta, lemonsqueezy, coinbase-commerce, razorpay, cal, intercom, telegram, square, hubspot, mailgun, calendly, mux, sentry, bitbucket, docusign, adyen, paypal, plaid, resend, workos)
templatestringnoTemplate name (e.g., checkout.session.completed or form_response)
eventstringnoEvent type override
secretstringyes (for signed providers)Template signing input. Required for signed provider templates; sendgrid, discord, and plaid templates are unsigned and need no secret.

Example provider-template call:

{
  "slug": "abc123",
  "provider": "typeform",
  "template": "form_response",
  "secret": "typeform_test_secret"
}

send_to

Send a webhook directly to any URL -- localhost, staging, production. Same signing support as send_webhook.

ParameterTypeRequiredDescription
urlstringyesTarget URL (http or https)
methodstringnoHTTP method (default: "POST")
headersobjectnoHTTP headers to include
bodyanynoRequest body
providerstringnoProvider for signing
templatestringnoTemplate name
eventstringnoEvent type override
secretstringyes (for signed providers)Signing secret (not needed for sendgrid, discord, plaid)

preview_webhook

Build a webhook request without sending it. Returns the computed URL, method, headers, and body so you can inspect signatures before delivery.

ParameterTypeRequiredDescription
urlstringyesTarget URL
methodstringnoHTTP method
headersobjectnoHTTP headers
bodyanynoRequest body
providerstringnoProvider for signing
templatestringnoTemplate name
eventstringnoEvent type override
secretstringyes (for signed providers)Signing secret (not needed for sendgrid, discord, plaid)

test_webhook_flow

Run a full end-to-end test: create endpoint, set mock response, send webhook, wait for capture, verify signature, replay to target, clean up.

ParameterTypeRequiredDescription
providerstringnoProvider template to use
eventstringnoEvent type
secretstringnoSigning secret
mockStatusnumbernoHTTP status for mock response
targetUrlstringnoURL to replay the captured request to
verifySignaturebooleannoVerify the webhook signature after capture
cleanupbooleannoDelete the endpoint after the test (default: true)

Request management

list_requests

List captured requests for an endpoint, newest first. Emails come back with kind: "email" and the parsed message in email, without the raw message or the HTML part (email.htmlSize gives its length; size is the message size in bytes), and with the text cut at 8,000 characters. An email that is still too big loses its headers (headersOmitted), then sender, address and attachment entries past the first 5, then text, and as a last resort everything but its subject, first sender (fromTotal), tag, date and text (trimmed), so each email fits on its own. The other request tools and the MCP resources return emails the same way; use get_email for the HTML.

ParameterTypeRequiredDescription
endpointSlugstringyesEndpoint slug
limitnumbernoMax results to return
sincenumbernoOnly return requests after this timestamp in ms
kindstringnohttp for HTTP requests only, email for emails only

get_request

Get full details of a captured request, including headers and body.

ParameterTypeRequiredDescription
requestIdstringyesRequest ID

wait_for_request

Poll until a request arrives at an endpoint, then return it.

ParameterTypeRequiredDescription
endpointSlugstringyesEndpoint slug
timeoutnumbernoMax wait time in milliseconds
pollIntervalnumbernoInterval between polls in milliseconds

wait_for_requests

Poll until a specified number of requests arrive at an endpoint.

ParameterTypeRequiredDescription
endpointSlugstringyesEndpoint slug
countnumberyesNumber of requests to wait for
timeoutnumbernoMax wait time in milliseconds
pollIntervalnumbernoInterval between polls in milliseconds
methodstringnoFilter by HTTP method

search_requests

Full-text search across captured requests. Supports time ranges, method filters, and pagination.

ParameterTypeRequiredDescription
slugstringnoFilter by endpoint slug
methodstringnoFilter by HTTP method
kindstringnohttp for HTTP requests only, email for emails only
qstringnoSearch query (searches headers and body)
fromstringnoStart time -- relative duration like "1h" or ISO timestamp
tostringnoEnd time -- relative duration or ISO timestamp
limitnumbernoMax results
offsetnumbernoPagination offset
orderstringno"asc" or "desc"

count_requests

Count requests matching the given filters. Takes the filters of search_requests, without its paging and order.

ParameterTypeRequiredDescription
slugstringnoFilter by endpoint slug
methodstringnoFilter by HTTP method
kindstringnohttp or email
qstringnoSearch query
fromstringnoStart time
tostringnoEnd time

clear_requests

Delete captured requests for an endpoint without deleting the endpoint itself.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
beforestringnoDelete only requests before this timestamp

Emails

Every endpoint on an account receives email at {slug}@mailhooks.cc, and at {slug}+{tag}@mailhooks.cc for any tag, which lands on the same endpoint. Use a fresh tag for each test run so an agent finds its own email. Each email counts as one request. The one-time code and main link come from the same finder as the dashboard; they are left out when the endpoint's owner turned off "Show codes and links found in emails".

list_emails

List the emails an endpoint received, newest first, one line each: id, receivedAt, address, tag, subject, from, code, link, and the number of attachments. A main link over 8,000 characters is left out (linkOmitted).

ParameterTypeRequiredDescription
endpointSlugstringyesEndpoint slug
limitnumbernoMax emails to return (1 to 100, default 25). With tag, subject or from, the newest 100 emails are searched
sincenumbernoOnly emails received after this timestamp in ms
tagstringnoOnly emails sent to this +tag (case-sensitive)
subjectstringnoOnly emails whose subject contains this text
fromstringnoOnly emails from this address (case-insensitive)

get_email

Get one email: by requestId, or the newest at endpointSlug (optionally with a tag). Pass exactly one of the two. Returns the parsed message in the shape of forwarded JSON (subject, from, to, text, attachments, auth, headers, ...) with code and link first. The text is cut at 8,000 characters (textTruncated: true), and the HTML is left out (htmlSize gives its length) unless includeHtml is set. Tool output is capped at 32 KB, so a large email is trimmed to fit and stays valid JSON: first its headers are left out (headersOmitted), then codes and links past the first 10 (codesTruncated, linksTruncated), then address and attachment entries past the first 5 (toTotal, attachmentsTotal, ...); then the HTML and the text are cut (htmlTruncated, textTruncated), and as a last resort only the essentials stay (trimmed), without a main link too long to use (linkOmitted).

ParameterTypeRequiredDescription
requestIdstringnoThe email's request ID
endpointSlugstringnoGet the newest email at this endpoint instead
tagstringnoWith endpointSlug: only this +tag
includeHtmlbooleannoInclude the HTML part (default false)

wait_for_email

Wait for an email to arrive, for example after the agent submitted a signup form, then return it like get_email. Looks back five minutes unless since is given.

ParameterTypeRequiredDescription
endpointSlugstringyesEndpoint slug
tagstringnoOnly emails sent to this +tag
subjectstringnoOnly emails whose subject contains this text
fromstringnoOnly emails from this address
timeoutstring | numbernoHow long to wait (default "30s"). Keep it under your MCP client's request timeout, often 60 seconds
sincenumbernoOnly emails received after this timestamp in ms
includeHtmlbooleannoInclude the HTML part (default false)

send_test_email

Deliver a sample email with a 6-digit code and a link, to try the email tools before wiring up a real sender. It counts as one request and skips SMTP, so no sender checks run on it. Returns status, requestId and the address it went to.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
tagstringnoDeliver to {slug}+{tag}@mailhooks.cc

render_email

A captured email in the shape an inbound mail service posts it, to test the handler you wrote for that service against real mail (In a mail provider's shape). Returns { format, method, headers, body }; with targetUrl (your local handler), posts it there and returns the status and the start of the answer.

ParameterTypeRequiredDescription
requestIdstringyesThe captured email
format"postmark" | "sendgrid" | "mailgun" | "cloudmailin" | "json"yesWhose shape; json is webhooks.cc's own email.received
mailgunSigningKeystringnoFor mailgun: the key your handler verifies with
targetUrlstringnoPost it here, for example http://localhost:3000/inbound

Forwarding

Forwarding sends what an endpoint captures to up to 10 destinations (servers, Slack or Discord channels, tools such as Zapier or n8n), each with its own kinds, conditions, format, timing and signing secret, queued, retried and logged. Only the endpoint's owner can manage it.

A typical agent session: add_destination, preview_destination to see the exact request it would send, test_forwarding with the destination's id to send one, then list_deliveries to watch it.

list_destinations

List the endpoint's destinations with every setting (header values masked) and, by default, each one's last 24 hours.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
summarybooleannoAdd each destination's last 24 hours (default true)

add_destination

Add a destination; it is on at once unless enabled: false, and gets a signing secret of its own. Returns the destination with its id.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
urlstringyeshttps URL on a public host name, or a Slack or Discord webhook
namestring | nullnoA name for the list and the log
enabledbooleannoSend to it (default true)
http, emailbooleannoWhich kinds it takes (default both)
filter{ logic?, conditions } | nullnoSend only matching captures; see Send only some captures
formatstringnoauto (chat for Slack and Discord URLs), as_received, json, template, chat, or for emails a mail provider's shape: postmark, sendgrid, mailgun, cloudmailin
mailgunSigningKeystring | nullnoWith mailgun: your Mailgun signing key, so signature verifies; write-only
bodyTemplateJSONnoWith template: the body, its strings holding {{ placeholders }} (Your own JSON)
messageTemplatestring | nullnoWith chat: your own message text; null sends the standard message
headers{ name, value | null }[]noYour own headers (at most 10, not for chat)
appendPathbooleannoAdd the captured path to the URL for relayed requests (default true)
retrySeconds0 | 3600 | 86400noHow long failed deliveries are retried (default a day)
keepOrderbooleannoOne delivery at a time, in capture order
sentFieldstring | nullnoJSON body field with the sender's timestamp, for timing
throttleSecondsnumbernoAt most one delivery every so many seconds, 0 to 3,600; 1 makes a heads-up channel
delaySecondsnumbernoWait this long after the capture before sending, 0 to 3,600

A filter condition takes field, op and value like a response rule condition, plus kind, email (name: subject, from, to, text or tag), email_field (name: one of the endpoint's named fields), spam_score, email_auth (name: spf, dkim or dmarc) and signature (verified, failed or missing).

update_destination

Change a destination; only the fields passed change. Takes slug, destinationId and any field of add_destination, url included. Switching it off or taking a kind away fails the deliveries still waiting for it.

remove_destination

Remove a destination. Deliveries still waiting for it are marked failed; its log stays.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
destinationIdstringyesThe destination's id

preview_destination

A dry run: whether the destination's filter lets a captured request through (filterPasses), and the exact request it would send (delivery: method, URL, headers, body, with placeholders filled in and unknownPlaceholders listed). Nothing is sent. Pass destinationId, destination (unsaved fields, on top of the saved ones or with a url on their own), or both.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
destinationIdstringnoA saved destination
destinationobjectnoFields of add_destination to try
requestIdstringnoA captured request (default: the newest of a kind it takes, or a sample)

configure_forwarding

Change the endpoint's primary destination, the one its forwardUrl stands for; only the arguments passed change. Saving the first URL creates it with its signing secret, so the agent can send a test delivery before turning it on. Returns the primary destination's settings, with header values masked. For filters, templates, throttling, delays or more than one destination, use add_destination and update_destination.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
urlstring | nullnohttps URL on a public host name, or null to remove it (when off)
enabledbooleannoTurn it on (needs a URL) or off
httpbooleannoForward HTTP requests
emailbooleannoForward emails
format"auto" | "as_received" | "json" | "chat"noHow deliveries go out; auto picks chat for Slack and Discord URLs
headers{ name, value | null }[]noYour own headers (at most 10); replaces the list, null keeps a stored value
appendPathbooleannoAdd the path after the slug to the URL for relayed requests (default true)
retrySeconds0 | 3600 | 86400noHow long failed deliveries are retried (default a day)
keepOrderbooleannoOne delivery at a time, in capture order
sentFieldstring | nullnoJSON body field with the sender's timestamp, such as publishedAt, for timing

get_forwarding_secret

Read the whsec_ secret a destination signs its deliveries with, or replace it with rotate: true. The value is a credential and ends up in the agent's context: have the agent put it in the handler's environment, not in code.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
destinationIdstringnoA destination (default: the primary destination)
rotatebooleannoReplace the secret (default false)

test_forwarding

Send the newest captured request of a kind (or a sample, if none has arrived, or requestId) to a destination once, exactly as a delivery would go out, and report the status, durationMs, the start of the answer (excerpt), error, delivered, the format and target used, and the sender's own timestamp when the request had one. Works whether the destination is on or off and whatever its filter says; nothing is retried or logged.

ParameterTypeRequiredDescription
slugstringyesEndpoint slug
destinationIdstringnoA destination (default: the primary destination)
kind"http" | "email"noWhich kind (default: HTTP when the destination takes it)
requestIdstringnoWith destinationId: a captured request to send

list_deliveries

With endpointSlug, return the endpoint's delivery log with its counts: { summary, deliveries, nextCursor }. Each row names its destination, and carries senderAt when the request had the sender's own timestamp, so receivedAt - senderAt is the time to reach webhooks.cc. With requestId, return every delivery and try of one request or email. Pass exactly one.

ParameterTypeRequiredDescription
endpointSlugstringnoThe endpoint's delivery log
requestIdstringnoEvery delivery of this request, with each try
limitnumbernoWith endpointSlug: 1 to 100 (default 20)
status"all" | "pending" | "failed" | "skipped"noWith endpointSlug: filter (default all); skipped is filtered out
destinationIdstringnoWith endpointSlug: only this destination
beforestringnoWith endpointSlug: nextCursor, for older rows

redeliver

Forward again with the current settings: one request or email (requestId, to every destination that takes it, or with destinationId to that one whatever its filter says), or every request whose latest delivery failed (endpointSlug, optionally only destinationId, oldest first, up to 1,000 at a time per destination). Pass exactly one of requestId and endpointSlug.

ParameterTypeRequiredDescription
requestIdstringnoThe request or email to send again
endpointSlugstringnoSend every failed delivery of this endpoint
destinationIdstringnoOnly this destination

Request analysis

replay_request

Replay a captured request to a target URL. Sends the original method, headers, and body.

ParameterTypeRequiredDescription
requestIdstringyesID of the captured request
targetUrlstringyesURL to send the replayed request to

compare_requests

Diff two captured requests. Returns structured differences in method, headers, and body.

ParameterTypeRequiredDescription
leftRequestIdstringyesFirst request ID
rightRequestIdstringyesSecond request ID
ignoreHeadersstring[]noHeader names to exclude from comparison

generate_payload_schema

Generate TypeScript interfaces, Zod schemas, Pydantic models, or JSON Schema from the bodies of captured requests. It reads the latest requests (or exactly the ones you name), keeps those that match the filters, and learns one schema from all of their JSON or form bodies: a field missing from some samples is optional, a field that is sometimes null is nullable, and identical nested objects become one type. Filter to one event for the tightest types; the result warns when the samples mix events.

ParameterTypeRequiredDescription
endpointSlugstringyesEndpoint slug
formatstringnotypescript (default), zod, pydantic, or json-schema
namestringnoRoot type name (default: from the detected event, such as InvoicePaidEvent, else WebhookPayload)
eventstringnoOnly requests whose detected provider event matches, such as invoice.paid or push
methodstringnoOnly requests with this HTTP method
pathstringnoOnly requests with this path
requestIdsstring[]noUse exactly these requests (1 to 50) instead of the latest ones
limitnumbernoHow many of the latest requests to read before filtering, 1 to 100 (default 20)

Returns format, name, samples (requests used), skipped (emails and bodies that are neither JSON nor form data), the detected events, and code. The same generator is generateRequestSchema() in @webhooks-cc/sdk, and the dashboard shows it as the Schema view of a request body.

extract_from_request

Extract specific JSON fields from a captured request body using dot-notation paths.

ParameterTypeRequiredDescription
requestIdstringyesRequest ID
jsonPathsstring[]yesDot-notation paths to extract (e.g., ["data.object.id", "type"])

verify_signature

Verify the webhook signature on a captured request. Supports two modes:

  1. Stored result (no provider/secret): returns the pre-computed server-side verification result when signing is configured on the endpoint
  2. Client-side (with provider + secret for HMAC providers, or provider + publicKey for Discord): performs verification on demand
ParameterTypeRequiredDescription
requestIdstringyesRequest ID
providerstringnoProvider name (stripe, github, shopify, twilio, slack, paddle, linear, discord, clerk, vercel, gitlab, typeform, standard-webhooks, meta, lemonsqueezy, coinbase-commerce, razorpay, cal, intercom, telegram, square, hubspot, mailgun, calendly, mux, sentry, bitbucket, docusign, adyen, paypal). Omit to return stored result
secretstringnoSigning secret (required for client-side HMAC-based verification)
publicKeystringnoPublic key (required for Discord Ed25519 verification)
urlstringnoRequest URL (required for Twilio, Square, and HubSpot signature verification)
methodstringnoHTTP method used when the signature was generated (used by HubSpot v3; the SDK assumes POST when omitted)

Teams

An API key carries the team access of the account it belongs to. Shared endpoints already appear in list_endpoints and work with every request tool by slug except clear_requests, which only the owner may call; these tools manage the teams. Invites are not exposed: accepting one claims a paid seat and inviting sends email, so those stay with people (dashboard, whk teams, or the SDK).

list_teams

List the teams you own or belong to: role, seats, requestsUsed and requestLimit of the pooled quota, periodEnd, and whether the team is suspended. No parameters.

list_team_members

List a team's members and pending invites.

ParameterTypeRequiredDescription
teamIdstringyesTeam id from list_teams

share_endpoint

Share an endpoint you own with a team. The team needs an active subscription; the endpoint's requests then draw from the team's pooled quota.

ParameterTypeRequiredDescription
slugstringyesSlug of an endpoint you own
teamIdstringyesTeam id from list_teams

unshare_endpoint

Stop sharing an endpoint you own with a team. Same parameters as share_endpoint.

Utilities

get_usage

Your plan's request usage, remaining quota, and period end, plus a teams array with the pooled quota of every subscribed team you belong to. No parameters.

list_provider_templates

List supported webhook providers, available templates, and signing metadata. Use this before send_webhook when an agent needs to pick a realistic provider payload.

ParameterTypeRequiredDescription
providerstringnoFilter to a single provider

Example:

{
  "provider": "typeform"
}

describe

Self-documenting schema of all available operations and their parameters. No parameters.

Without an API key: the agent sandbox

A server started without WHK_API_KEY, and without a saved connection to a human's account (see the agent credential file), registers these eleven tools instead of the ones above. The eight endpoint and request tools have the same names and arguments as the full tools, but run in the agent sandbox (auth.md): up to 3 endpoints at a time, 25 captured requests each and 100 in all, deleted 24 hours after the sandbox was created. Captures are readable only by this agent.

ToolIn the sandbox
create_endpointCreates a capture endpoint. The first call registers the sandbox (a few seconds of proof of work). mockResponse, responseRules, notificationUrl and the signing options are refused; name and expiresIn are ignored.
list_endpointsThis agent's sandbox endpoints; empty before the first create_endpoint. team is refused.
get_endpointOne sandbox endpoint, with its limits and usage
delete_endpointFrees a slot; the 100-request budget is not refunded
list_requestsCaptured requests, newest first (HTTP only)
get_requestOne captured request
wait_for_requestWaits for a capture
generate_payload_schemaTypes from the sandbox's captured requests, as above

connect_account

Connect the agent to a human's account. Returns verificationUri, a 6-digit userCode and a tellTheHuman line to show them: they sign in or sign up with that email and enter the code. With a sandbox made in this session, its endpoints move into the account with what they captured; with one from an earlier session, or none, the agent registers for that human directly (endpoints in the answer says which). Calling it again gives a new code.

ParameterTypeRequiredDescription
emailstringyesThe human's email address; only someone signed in as it can connect

wait_for_connection

Wait for the human to enter the code. On success the full tools for their account replace the sandbox tools (the server sends notifications/tools/list_changed). Otherwise it returns status waiting (call it again), expired (call connect_account for a new code) or declined. The connection is saved in the agent credential file, so later sessions start with the full tools; when the human disconnects the agent under Account, Connected agents, the sandbox tools come back.

ParameterTypeRequiredDescription
timeoutSecondsnumbernoHow long to wait, 1 to 600 seconds (default 45)

about_sandbox

The sandbox limits, what needs an account, and how to connect one. No parameters and no network call.

For provider templates in send_webhook and send_to, secret is required for every signed provider. Only sendgrid, discord, and plaid templates are unsigned and need no secret. The MCP server does not inject a default secret.

MCP Overview

Installation, setup, and getting started with the MCP server.

Agent Workflows

Multi-turn conversation examples for common webhook tasks.