Skip to main content
Glama

create_verification

Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, or Telegram bot).

Agent usage: pass the asset type, the delivery channel, and the identifier (e.g. type "phone", channel "sms", identifier "+37060000000"; or type "email", channel "email", identifier "user@example.com"). The response carries a challenge object with the instruction for the chosen channel — except a telegram_bot verification made with a LIVE key, which the server completes on the spot and answers with status: verified plus a proof token and no challenge at all; with a pk_test_ key that same call stays pending and does carry a challenge. On the messenger channels it also carries challenge.deep_link — pass THAT to render_auth_link to give the user a clickable link and a QR code. This endpoint returns no qr_text at all. For OTP-based flows (sms/email), the user receives a code — poll get_verification or use wait_for_verification to track completion. For Telegram/WhatsApp, the user clicks the deep link to verify.

ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
typeYesAsset type being verified
channelYesVerification channel (must match the asset type, e.g. sms/whatsapp/telegram for phone)
bot_tokenNoTelegram bot token (required for channel "telegram_bot_token")
identifierYesThe asset identifier to verify (E.164 phone, email address, domain, handle, wallet address, ...)
dns_providerNoDNS provider credentials (required for channel "auto")
email_prefixNoMailbox prefix for domain email verification
client_metadataNoCustom key-value metadata
external_user_idNoYour application user ID for grouping verifications
proof_expiry_daysNoPer-request proof expiry override in days (1-365)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure and does so thoroughly. It details the response shape (challenge object, status, proof token), the critical LIVE vs pk_test_ telegram_bot difference, the presence of deep_link on messenger channels, the absence of qr_text, and the OTP vs deep-link interaction model. This is genuinely transparent about non-obvious behavior.

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?

The description is long but dense with necessary operational detail: required parameters, examples, response variations, downstream tool usage, and authentication prerequisites. Every sentence earns its place for a tool with this many branching behaviors, though it could be more scannable with bullet points.

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 complex 9-parameter tool with nested objects and no output schema, the description is unusually complete: it covers required inputs, key response fields, channel-specific flows, follow-up tools, and access requirements. It does not elaborate on less common optional parameters like dns_provider or email_prefix, but the schema descriptions cover those, so nothing critical is missing.

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?

The schema already covers all 9 parameters with descriptions, so the baseline is 3. The description adds meaningful value beyond the schema by giving concrete type/channel/identifier examples, explaining the relationship between type and channel, and clarifying response semantics per channel (challenge vs verified, deep_link vs OTP code). This goes beyond what the schema alone conveys.

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 opens with a specific verb and resource ('Create a new identity verification') and immediately explains it initiates a verification flow for an asset identifier, listing the asset types. It is clear about what the tool does, though it does not explicitly differentiate it from similarly named siblings like create_verification_request or create_multi_channel_verification.

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 'Agent usage' section gives explicit instructions on what to pass (type, channel, identifier) and includes concrete examples. It also gives clear context on follow-up behavior — polling get_verification, using wait_for_verification, and passing deep_link to render_auth_link — plus a when-not signal: start_login does NOT open this tool. It stops short of naming sibling alternatives for similar creation flows.

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.