Skip to main content
Glama

create_endpoint

Create a temporary webhook capture endpoint in the agent sandbox without an account to receive and inspect test webhook requests; the first call registers the sandbox and takes a few seconds.

Instructions

Create a temporary webhook capture endpoint in the agent sandbox (no account needed): up to 3 endpoints at a time, 25 captured requests each and 100 in all, deleted 24 hours after the sandbox was created. The first call registers the sandbox, which takes a few seconds of proof of work. Mock responses, notifications and signature verification need an account: see connect_account.

Input Schema

NameRequiredDescriptionDefault
nameNoDisplay name for the endpoint
siteNoWhich site's dashboard lists the endpoint: webhooks (webhooks.cc), mailhooks (mailhooks.cc) or both (the default when creating). Only the listing: its HTTP URL and email address work either way. Owner only to change.
ephemeralNoCreate a temporary endpoint that auto-expires
expiresInNoAuto-expire after this duration, for example "12h"
mockResponseNoOptional mock response to return when the endpoint receives a request
responseRulesNoConditional response rules. Each rule has conditions and a response. First matching rule wins.
signingHeaderNoCustom signature header name. Only used with generic-hmac provider.
signingSecretNoSigning secret (encrypted server-side, never returned). Required when signingProvider is set.
notificationUrlNoURL to POST a JSON summary to after each captured request (e.g. Slack/Discord webhook)
signingProviderNoSigning provider for automatic signature verification (e.g. stripe, github, shopify)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.8.0
    • addedInput schema / properties / site
      Added value: +{
      +  "description": "Which site's dashboard lists the endpoint: webhooks (webhooks.cc), mailhooks (mailhooks.cc) or both (the default when creating). Only the listing: its HTTP URL and email address work either way. Owner only to change.",
      +  "enum": [
      +    "webhooks",
      +    "mailhooks",
      +    "both"
      +  ],
      +  "type": "string"
      +}
  2. Changed11 schema fields changedv1.5.0
    • changedInput schema / properties / mockResponse / properties / body / description
      Previous value: -"Response body string (default: empty)"New value: +"Response body (default: empty). {{ placeholders }} are filled in from the request: {{ json.id }} (a JSON or form body field), {{ body }}, {{ headers.user-agent }}, {{ query.page }}, {{ method }}, {{ path }}, {{ id }}, {{ uuid }}, {{ now }}; filters: | default: \"x\", | json, | lower, | upper, | truncate: 80"
    • changedInput schema / properties / mockResponse / properties / headers / description
      Previous value: -"Response headers (default: none)"New value: +"Response headers (default: none); values may use {{ placeholders }} too"
    • changedInput schema / properties / responseRules / items / properties / conditions / items / properties / field / description
      Previous value: -"Request field to match against"New value: +"What to read: method, path, header (name), query (name), body (text), body_path (path into a JSON or form body), content_type, size"
    • changedInput schema / properties / responseRules / items / properties / conditions / items / properties / field / enum
      Previous value: -[
      -  "method",
      -  "path",
      -  "header",
      -  "body_contains",
      -  "body_path",
      -  "query"
      -]New value: +[
      +  "method",
      +  "path",
      +  "header",
      +  "query",
      +  "body",
      +  "body_contains",
      +  "body_path",
      +  "content_type",
      +  "size"
      +]
    • changedInput schema / properties / responseRules / items / properties / conditions / items / properties / name / description
      Previous value: -"Header name or query param name (required for header/query, max 256 chars)"New value: +"Header or query parameter name; the email part; spf, dkim or dmarc"
    • changedInput schema / properties / responseRules / items / properties / conditions / items / properties / op / description
      Previous value: -"Comparison operator"New value: +"eq, neq, contains, not_contains, starts_with, ends_with, matches (glob: * one path segment, ** any, ? one character), regex (RE2, searched anywhere; (?i) ignores case), exists, not_exists, gt, gte, lt, lte (numbers)"
    • changedInput schema / properties / responseRules / items / properties / conditions / items / properties / op / enum
      Previous value: -[
      -  "eq",
      -  "contains",
      -  "starts_with",
      -  "matches",
      -  "exists"
      -]New value: +[
      +  "eq",
      +  "neq",
      +  "contains",
      +  "not_contains",
      +  "starts_with",
      +  "ends_with",
      +  "matches",
      +  "regex",
      +  "exists",
      +  "not_exists",
      +  "gt",
      +  "gte",
      +  "lt",
      +  "lte"
      +]
    • changedInput schema / properties / responseRules / items / properties / conditions / items / properties / path / description
      Previous value: -"JSON dot-notation path (required for body_path, max 256 chars)"New value: +"Dot path for body_path, e.g. data.object.status or items.0.sku or a[\"odd.key\"]"
    • changedInput schema / properties / responseRules / items / properties / conditions / items / properties / value / description
      Previous value: -"Value to compare against (required unless op is \"exists\", max 4096 chars)"New value: +"What to compare with (not for exists and not_exists)"
    • changedInput schema / properties / responseRules / items / properties / response / properties / body / description
      Previous value: -"Response body string (default: empty)"New value: +"Response body (default: empty). {{ placeholders }} are filled in from the request: {{ json.id }} (a JSON or form body field), {{ body }}, {{ headers.user-agent }}, {{ query.page }}, {{ method }}, {{ path }}, {{ id }}, {{ uuid }}, {{ now }}; filters: | default: \"x\", | json, | lower, | upper, | truncate: 80"
    • changedInput schema / properties / responseRules / items / properties / response / properties / headers / description
      Previous value: -"Response headers (default: none)"New value: +"Response headers (default: none); values may use {{ placeholders }} too"
  3. First observedv0.1.0

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses hard quotas (3 endpoints, 25 requests each, 100 total), the 24-hour deletion policy, and a one-time proof-of-work delay on the first call. What it omits is what a successful call returns (the endpoint URL/id is never mentioned) and whether deletion is recoverable.

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?

Three dense sentences with the core action and the sandbox constraints front-loaded; every clause carries information. The quota enumeration borders on duplicating what about_sandbox likely covers, but it is placed where the agent needs it at call time.

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 10-parameter tool with nested objects and no output schema, the description should tell the agent what it gets back — the endpoint URL and email address are never mentioned, yet they are the whole point of creating the endpoint. It also does not reconcile the 'temporary' framing with the optional ephemeral/expiresIn controls, leaving an ambiguity the agent must resolve from the schema alone.

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 already explains every parameter, including the nested mockResponse and responseRules structures — the baseline is 3. The description does add one genuinely useful cross-parameter fact, that mockResponse, notificationUrl, and signing* require an account, but it adds nothing about expiresIn, ephemeral, or site.

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 — 'Create a temporary webhook capture endpoint in the agent sandbox' — and immediately scopes it with 'no account needed', which separates it from the account-dependent siblings. An agent can tell this apart from list_endpoints, get_endpoint, and connect_account 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 Guidelines4/5

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

Gives an explicit routing condition for an alternative: 'Mock responses, notifications and signature verification need an account: see connect_account.' It also clarifies the no-account path. It stops short of saying when not to create an endpoint (e.g. when one already exists and list_endpoints should be checked first), so it is clear context rather than a full when/when-not matrix.

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