Skip to main content
Glama

Verify a registered destination

verify_destination

Verification is one request from us to the exact URL you registered: POST, headers X-402cron-Challenge: and X-402cron-Event: verify, JSON body {"challenge":""}. Reply within 5 seconds, without a redirect, with a body that is the bare value or {"challenge":""}; we read the first 512 bytes and do not check the HTTP status (2xx is fine). Then call POST /api/destinations/{id}/verify within 15 minutes of registering. A fixed-response webhook cannot pass: you need an endpoint you can program. Registering a URL that is still pending issues a new challenge and a new signing secret every time — the old secret immediately stops verifying deliveries; a verified URL is left untouched unless you add ?rotate=1. The daily verification allowance (10 per destination, 40 per client, UTC day) does not reset on re-registration. Until this passes, no task may point at the destination.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "id": "<id>"
    },
    "name": "verify_destination"
  }
}

Input Schema

NameRequiredDescriptionDefault
idYesDestination id, as returned by register_destination.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4/5.0
Behavior5/5

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

Far beyond the annotations, it discloses the 5-second response window, no-redirect requirement, 512-byte read cap, that HTTP status is not checked, the rate limits (10 per destination, 40 per client, UTC day, not reset by re-registration), and the secret-rotation side effect of re-registering a pending URL including the ?rotate=1 escape hatch. These are exactly the non-obvious behaviors an agent cannot get from readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, and they are consistent with the non-idempotent annotation.

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?

Every fact is relevant, but it is a dense single block of ~170 words that opens with low-level protocol mechanics instead of the tool's action, and several sentences bundle multiple independent facts (timeout, redirect policy, body shapes, status handling) with no structure. It is informative rather than wasteful, but not front-loaded.

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, it covers a lot of the surrounding contract (what the remote endpoint must return, what is inspected, rate limits). It stops short of saying what this tool returns to the caller on success versus failure or what auth it needs, which matters for a non-read-only, open-world tool.

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 id parameter is already documented as 'Destination id, as returned by register_destination.' The description only restates it via the /api/destinations/{id}/verify path and adds no format, range, or lookup guidance, so the baseline 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 concretely describes the verification exchange (POST with X-402cron-Challenge/X-402cron-Event headers, JSON body, 5-second reply) and ties it to the destination resource and the register_destination sibling. It is slightly self-referential: it narrates the whole verification protocol and says 'Then call POST /api/destinations/{id}/verify', so an agent has to infer that calling this tool is what triggers that challenge request rather than documenting a step it performs itself.

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?

It gives explicit preconditions and timing: call within 15 minutes of registering, and 'Until this passes, no task may point at the destination.' It also rules out a class of callers ('A fixed-response webhook cannot pass: you need an endpoint you can program'), which is genuine when-not guidance, though it never names a sibling tool alternative.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.