{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_82334dzr7hm6","handle":"proof-holdings","url":"https://wellknown.network/agents/proof-holdings","links":{"self":"https://wellknown.network/agents/proof-holdings/record.json","html":"https://wellknown.network/agents/proof-holdings","markdown":"https://wellknown.network/agents/proof-holdings/record.md","api":"https://wellknown.network/api/v1/agents/proof-holdings","status":"https://wellknown.network/api/v1/agents/proof-holdings/status","claim":"https://wellknown.network/agents/proof-holdings/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/proof-holdings/claim.json","badge":"https://wellknown.network/agents/proof-holdings/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/proof-holdings/history","tools":"https://wellknown.network/api/v1/agents/proof-holdings/tools"},"ard":{"identifier":"urn:air:api.proof.holdings:server:proof-holdings","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Proof Holdings","summary":"One API, all things verified — control, delegation, human approval, anti-impersonation.","description":"One API, all things verified — control, delegation, human approval, anti-impersonation.","publisher":{"name":"holdings.proof","url":null},"homepage":"https://proof.holdings","repository":"https://github.com/ProofHoldings/mcp-server","version":"1.4.0","license":"MIT","protocols":["mcp"],"tags":["mcp","model-context-protocol","proof-holdings","identity-verification","ai-tools","claude","llm"],"pricing":null,"endpoints":[{"url":"https://api.proof.holdings/mcp","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"npm:@proof-holdings/mcp-server","type":"package_npm","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-09T08:27:32.499479Z","npmKeywords":["mcp","model-context-protocol","proof-holdings","identity-verification","ai-tools","claude","llm"],"publishedAt":"2026-10-09T08:27:32.499479Z","registryName":"holdings.proof/mcp-server"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","license":"npm","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"communication.sms-voice","name":"SMS & Voice","confidence":1,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":1,"provenance":"derived"},{"slug":"automation.workflows","name":"Workflow Automation","confidence":0.977,"provenance":"derived"},{"slug":"code.documentation","name":"Code Documentation","confidence":0.583,"provenance":"derived"},{"slug":"security.secrets","name":"Secrets Management","confidence":0.569,"provenance":"derived"},{"slug":"infra.cloud","name":"Cloud Platforms","confidence":0.554,"provenance":"derived"},{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":0.54,"provenance":"derived"},{"slug":"dev.terminal","name":"Terminal & Shell","confidence":0.525,"provenance":"derived"}],"categories":["automation","code","communication","dev","infra","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 2h ago.","lastOkAt":"2026-10-11T15:23:55.142Z","lastProbedAt":"2026-10-11T15:23:55.142Z","statusComputedAt":"2026-10-11T15:24:47.913Z","reliability30d":{"probes":65,"successRate":0.9538,"p50Ms":127,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":64,"ok":62,"authBoundaryOk":0,"serviceOk":62,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-11T15:23:55.142Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":124,"error":null,"detail":{"tools":[{"name":"create_verification","description":"Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, "},{"name":"get_verification","description":"Get a verification by ID. Returns the full verification object including status, channel, and proof token if verified.\n\nBefore calling this for a challenge you "},{"name":"list_verifications","description":"List verifications with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate)"},{"name":"trigger_verification","description":"Trigger a DNS/HTTP verification check for a pending domain verification.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"submit_verification_code","description":"Submit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type \"email\", and ty"},{"name":"resend_verification","description":"Resend a verification message (email channel only). Generates and sends a new code.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp "},{"name":"test_verify","description":"Auto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery.\n\nACCESS: needs a Proof account. Authent"},{"name":"list_verified_users","description":"List verified users grouped by external_user_id. Shows all verifications per user.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →"},{"name":"get_verified_user","description":"Get a single verified user and their verifications by external user ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentica"},{"name":"start_domain_verification","description":"Start a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete.\n\nACCESS: needs a Proof account. A"},{"name":"check_domain_verification","description":"Check the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status.\n\nACCESS: needs a Proof account. Authenticate this c"},{"name":"wait_for_verification","description":"Poll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) w"},{"name":"create_multi_channel_verification","description":"Create a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes win"},{"name":"get_multi_channel_verification_status","description":"Get the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one comp"},{"name":"create_verification_request","description":"Create a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow.\n\nACC"},{"name":"get_verification_request","description":"Get a verification request by ID. Returns the request with all its asset verification statuses.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"get_request_proofs","description":"Get proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification.\n\nACCESS: needs a Proof account. "},{"name":"list_verification_requests","description":"List verification requests with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authe"},{"name":"get_request_by_reference","description":"Get a verification request by its reference ID (your unique identifier).\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"cancel_verification_request","description":"Cancel a pending verification request. Only pending requests can be cancelled.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Aut"},{"name":"wait_for_request","description":"Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitt"},{"name":"validate_proof","description":"Validate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the identifi"},{"name":"get_proof_status","description":"Get the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked —"},{"name":"revoke_proof","description":"Revoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer valid"},{"name":"list_revoked_proofs","description":"Get the revocation list for offline proof validation. Returns a signed list of all revoked proof IDs. Reuse a fetched list for up to 5 minutes (its cache lifeti"},{"name":"create_session","description":"Create a new phone verification session. Returns deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Sessions provide a hosted ve"},{"name":"get_session","description":"Get a session by ID. Returns the session status, verification details, and proof token if verified.\n\nACCESS: needs a Proof account. Authenticate this client (Cl"},{"name":"wait_for_session","description":"Poll a session until it reaches a terminal state (verified, failed, or expired). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nBefore calli"},{"name":"list_assets","description":"List all verified assets for the authenticated user. Assets are verified identities (phones, emails, domains).\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"get_asset","description":"Get a single verified asset by ID. Returns details including type, value, status, and verification timestamps.\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"revoke_asset","description":"Revoke a verified asset by ID. The asset will be marked as revoked and associated proofs will no longer validate.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_current_user","description":"Get the signed-in user's account details, plan and settings. Needs a login session: call start_login, then wait_for_login until it reports success. An API key a"},{"name":"list_auth_sessions","description":"List all active authentication sessions for the current user. Shows session details including channel, user agent, and expiry. When called via API key, no sessi"},{"name":"revoke_auth_session","description":"Revoke a specific authentication session by ID. When called via JWT, cannot revoke the current session. When called via API key, any session can be revoked.\n\nAC"},{"name":"get_usage","description":"Get usage metrics for the authenticated account. Shows verification counts, API calls, and quota usage.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"get_platform_summary","description":"Get a one-call account snapshot: quota with end-of-month projection, request health (pending/completed/expired counts + success rate), per-channel completion ra"},{"name":"get_settings","description":"Get account settings: branding (business name, logo, colors, support email, email theme), the outbound webhook endpoint with its event subscriptions, and the de"},{"name":"update_settings","description":"Update account settings: branding, the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. Setting the first webhook endpoin"},{"name":"export_data","description":"Export all account data (GDPR Article 20 - Right to Data Portability). Rate limited to 1 export per 24 hours.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"search","description":"Prefix-anchored global account search across six resource buckets (verification_requests, verifications, hitl, confirmations, authorizations, api_keys). Case-se"},{"name":"get_self_api_key","description":"Get the calling API key's own redacted metadata (id, name, key_prefix, environment, scopes, last_used_at, revoked_at, created_at) for agent self-inspection. Nev"},{"name":"get_api_key_usage","description":"Get per-API-key usage for a given key id: verification counts by type/channel/status, plus verification-request/confirmation/authorization totals, and attributi"},{"name":"list_templates","description":"List all custom message templates for the authenticated account. Returns templates organized by channel and message type.\n\nACCESS: needs a Proof account. Authen"},{"name":"get_default_templates","description":"Get all default message templates. These are the built-in templates used when no custom template is set.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"get_template","description":"Get a specific template by channel and message type. Returns the custom template if set, otherwise the default.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"update_template","description":"Create or update a custom template for a specific channel and message type. Replaces the default template.\n\nACCESS: needs a Proof account. Authenticate this cli"},{"name":"delete_template","description":"Delete a custom template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"preview_template","description":"Preview a template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account. Authent"},{"name":"render_template","description":"Render a template with provided variables. Returns the fully rendered message content.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /m"},{"name":"get_webhook_stats","description":"Get webhook delivery statistics including total deliveries, success/failure counts, and recent activity.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"list_webhook_deliveries","description":"List webhook delivery attempts with pagination and filtering. Shows delivery status, response codes, and timestamps.\n\nACCESS: needs a Proof account. Authenticat"},{"name":"get_webhook_delivery","description":"Get details of a single webhook delivery attempt including request/response payloads and retry history.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"retry_webhook_delivery","description":"Retry a failed webhook delivery. Creates a new delivery attempt with the same payload to the configured endpoint.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_subscription","description":"Get the current subscription details including plan, status, billing period, and usage limits.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"list_profiles","description":"List all profiles for the authenticated account. Returns all profiles including primary and secondary.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"create_profile","description":"Create a new profile with optional display name, bio, avatar, business info, and theme settings.\n\nACCESS: needs a Proof account. Authenticate this client (Claud"},{"name":"get_profile","description":"Get a specific profile by ID. Returns full profile details including theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Aut"},{"name":"update_profile","description":"Update a profile by ID. Supports changing display info, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"delete_profile","description":"Delete a profile by ID. Cannot delete the primary profile if it is the only one.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → A"},{"name":"set_primary_profile","description":"Set a profile as the primary profile. The previous primary profile becomes secondary.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"list_profile_templates","description":"List all templates for a profile. Returns templates organized by channel and message type, merged with defaults.\n\nACCESS: needs a Proof account. Authenticate th"},{"name":"update_profile_template","description":"Create or update a custom template for a specific profile, channel, and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"delete_profile_template","description":"Delete a custom profile template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"preview_profile_template","description":"Preview a profile template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account."},{"name":"update_profile_proofs","description":"Update which verified assets (proofs) are displayed on a specific profile. Controls visibility, privacy masking, ordering, and labels.\n\nACCESS: needs a Proof ac"},{"name":"get_my_profile","description":"Get the current user's primary profile. Returns profile details, theme, custom links, and public proof display settings.\n\nACCESS: needs a Proof account. Authent"},{"name":"update_my_profile","description":"Update the current user's primary profile. Supports display name, bio, avatar, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof ac"},{"name":"get_profile_assets","description":"Get available verified assets that can be displayed on the user's profile. Returns assets eligible for public proof display.\n\nACCESS: needs a Proof account. Aut"},{"name":"list_emails","description":"List all email addresses associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate),"},{"name":"remove_email","description":"Remove an email address from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"set_primary_email","description":"Set an email address as the primary email for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign "},{"name":"start_add_email","description":"Start adding a new email address. Sends an OTP code to the email. Returns a session ID to verify with.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_add_email_status","description":"Check the status of an in-progress email addition by session ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or"},{"name":"verify_email_otp","description":"Submit the OTP code to verify an email addition. Completes the add-email flow if the code is correct.\n\nACCESS: needs a Proof account. Authenticate this client ("},{"name":"resend_email_otp","description":"Resend the OTP code for an in-progress email addition.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in w"},{"name":"list_phones","description":"List all phone numbers associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), o"},{"name":"remove_phone","description":"Remove a phone number from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client (C"},{"name":"set_primary_phone","description":"Set a phone number as the primary phone for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"start_add_phone","description":"Start adding a new phone number by reverse OTP: the user starts the exchange themselves and nothing is sent before they do; the response's `instructions` field "},{"name":"get_add_phone_status","description":"Check the status of an in-progress phone addition by session ID. Poll until terminal state.\n\nBefore calling this for a challenge you created, make sure your rep"},{"name":"list_api_keys","description":"List all API keys for the authenticated account. Returns key metadata (not the secret key values).\n\nACCESS: needs a Proof account. Authenticate this client (Cla"},{"name":"create_api_key","description":"Create a new API key. The secret key value is returned ONLY in this response — store it securely. Note: the secret will be visible in the AI conversation contex"},{"name":"revoke_api_key","description":"Revoke an API key by ID. The key will immediately stop working. This action cannot be undone.\n\nAgent usage: This operation requires 2FA. Before calling, complet"},{"name":"regenerate_api_key","description":"Regenerate an API key: issues a new key (a new id and secret) with the same name, environment, scopes and project. The old key stops working immediately; use th"},{"name":"start_2fa","description":"Start a two-factor authentication challenge for a sensitive operation. Sends a verification code via the chosen channel. Returns a session ID, and for messaging"},{"name":"get_2fa_status","description":"Check the status of a 2FA session by session ID. Returns whether the challenge has been completed, is pending, or has expired.\n\nAgent usage: Poll this after cal"},{"name":"verify_2fa","description":"Submit a verification code to complete a 2FA challenge. Rate limited to 10 attempts per minute.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"verify_2fa_magic_link","description":"Complete a 2FA challenge using a magic link token (received via email). No code submission needed — the token itself is the proof.\n\nACCESS: needs a Proof accoun"},{"name":"wait_for_2fa","description":"Poll a 2FA session until the user completes the challenge. Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nAgent usage: Call this after start"},{"name":"list_domains","description":"List all domains for the authenticated account. Returns domain metadata including verification status.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"add_domain","description":"Add a new domain to verify ownership. Optionally specify email sending intent and verification method.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_domain","description":"Get details of a specific domain by ID, including verification status, DNS records, and provider connections.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"delete_domain","description":"Remove a domain from the account. This cannot be undone.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"verify_domain","description":"Trigger domain verification. Checks DNS records or other verification method to confirm domain ownership.\n\nACCESS: needs a Proof account. Authenticate this clie"},{"name":"connect_cloudflare","description":"Connect a Cloudflare API token to a domain for automated DNS record management. Note: the API token will be visible in the AI conversation context.\n\nACCESS: nee"},{"name":"connect_godaddy","description":"Connect GoDaddy API credentials to a domain for automated DNS record management. Note: the API key and secret will be visible in the AI conversation context.\n\nA"},{"name":"connect_dns_provider","description":"Connect a generic DNS provider to a domain using provider-specific credentials. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs"},{"name":"add_verification_provider","description":"Add an additional DNS provider for verification to an already-verified domain. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs "},{"name":"get_dns_providers","description":"Get metadata for all supported DNS providers, including required credential fields and documentation links.\n\nACCESS: needs a Proof account. Authenticate this cl"},{"name":"verify_domain_with_credentials","description":"Verify a pending domain using previously stored DNS credentials. Use when credentials are already connected.\n\nACCESS: needs a Proof account. Authenticate this c"}],"toolCount":171,"toolsHash":"92247bc63c3ba845f5de066ee3996ab134de1e00c8db306c01c5dcd2e5ad18e8","serverName":"proof-holdings","capabilities":["tools"],"serverVersion":"1.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-11T09:27:05.049Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":116,"error":null,"detail":{"tools":[{"name":"create_verification","description":"Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, "},{"name":"get_verification","description":"Get a verification by ID. Returns the full verification object including status, channel, and proof token if verified.\n\nBefore calling this for a challenge you "},{"name":"list_verifications","description":"List verifications with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate)"},{"name":"trigger_verification","description":"Trigger a DNS/HTTP verification check for a pending domain verification.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"submit_verification_code","description":"Submit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type \"email\", and ty"},{"name":"resend_verification","description":"Resend a verification message (email channel only). Generates and sends a new code.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp "},{"name":"test_verify","description":"Auto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery.\n\nACCESS: needs a Proof account. Authent"},{"name":"list_verified_users","description":"List verified users grouped by external_user_id. Shows all verifications per user.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →"},{"name":"get_verified_user","description":"Get a single verified user and their verifications by external user ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentica"},{"name":"start_domain_verification","description":"Start a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete.\n\nACCESS: needs a Proof account. A"},{"name":"check_domain_verification","description":"Check the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status.\n\nACCESS: needs a Proof account. Authenticate this c"},{"name":"wait_for_verification","description":"Poll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) w"},{"name":"create_multi_channel_verification","description":"Create a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes win"},{"name":"get_multi_channel_verification_status","description":"Get the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one comp"},{"name":"create_verification_request","description":"Create a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow.\n\nACC"},{"name":"get_verification_request","description":"Get a verification request by ID. Returns the request with all its asset verification statuses.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"get_request_proofs","description":"Get proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification.\n\nACCESS: needs a Proof account. "},{"name":"list_verification_requests","description":"List verification requests with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authe"},{"name":"get_request_by_reference","description":"Get a verification request by its reference ID (your unique identifier).\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"cancel_verification_request","description":"Cancel a pending verification request. Only pending requests can be cancelled.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Aut"},{"name":"wait_for_request","description":"Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitt"},{"name":"validate_proof","description":"Validate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the identifi"},{"name":"get_proof_status","description":"Get the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked —"},{"name":"revoke_proof","description":"Revoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer valid"},{"name":"list_revoked_proofs","description":"Get the revocation list for offline proof validation. Returns a signed list of all revoked proof IDs. Reuse a fetched list for up to 5 minutes (its cache lifeti"},{"name":"create_session","description":"Create a new phone verification session. Returns deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Sessions provide a hosted ve"},{"name":"get_session","description":"Get a session by ID. Returns the session status, verification details, and proof token if verified.\n\nACCESS: needs a Proof account. Authenticate this client (Cl"},{"name":"wait_for_session","description":"Poll a session until it reaches a terminal state (verified, failed, or expired). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nBefore calli"},{"name":"list_assets","description":"List all verified assets for the authenticated user. Assets are verified identities (phones, emails, domains).\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"get_asset","description":"Get a single verified asset by ID. Returns details including type, value, status, and verification timestamps.\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"revoke_asset","description":"Revoke a verified asset by ID. The asset will be marked as revoked and associated proofs will no longer validate.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_current_user","description":"Get the signed-in user's account details, plan and settings. Needs a login session: call start_login, then wait_for_login until it reports success. An API key a"},{"name":"list_auth_sessions","description":"List all active authentication sessions for the current user. Shows session details including channel, user agent, and expiry. When called via API key, no sessi"},{"name":"revoke_auth_session","description":"Revoke a specific authentication session by ID. When called via JWT, cannot revoke the current session. When called via API key, any session can be revoked.\n\nAC"},{"name":"get_usage","description":"Get usage metrics for the authenticated account. Shows verification counts, API calls, and quota usage.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"get_platform_summary","description":"Get a one-call account snapshot: quota with end-of-month projection, request health (pending/completed/expired counts + success rate), per-channel completion ra"},{"name":"get_settings","description":"Get account settings: branding (business name, logo, colors, support email, email theme), the outbound webhook endpoint with its event subscriptions, and the de"},{"name":"update_settings","description":"Update account settings: branding, the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. Setting the first webhook endpoin"},{"name":"export_data","description":"Export all account data (GDPR Article 20 - Right to Data Portability). Rate limited to 1 export per 24 hours.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"search","description":"Prefix-anchored global account search across six resource buckets (verification_requests, verifications, hitl, confirmations, authorizations, api_keys). Case-se"},{"name":"get_self_api_key","description":"Get the calling API key's own redacted metadata (id, name, key_prefix, environment, scopes, last_used_at, revoked_at, created_at) for agent self-inspection. Nev"},{"name":"get_api_key_usage","description":"Get per-API-key usage for a given key id: verification counts by type/channel/status, plus verification-request/confirmation/authorization totals, and attributi"},{"name":"list_templates","description":"List all custom message templates for the authenticated account. Returns templates organized by channel and message type.\n\nACCESS: needs a Proof account. Authen"},{"name":"get_default_templates","description":"Get all default message templates. These are the built-in templates used when no custom template is set.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"get_template","description":"Get a specific template by channel and message type. Returns the custom template if set, otherwise the default.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"update_template","description":"Create or update a custom template for a specific channel and message type. Replaces the default template.\n\nACCESS: needs a Proof account. Authenticate this cli"},{"name":"delete_template","description":"Delete a custom template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"preview_template","description":"Preview a template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account. Authent"},{"name":"render_template","description":"Render a template with provided variables. Returns the fully rendered message content.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /m"},{"name":"get_webhook_stats","description":"Get webhook delivery statistics including total deliveries, success/failure counts, and recent activity.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"list_webhook_deliveries","description":"List webhook delivery attempts with pagination and filtering. Shows delivery status, response codes, and timestamps.\n\nACCESS: needs a Proof account. Authenticat"},{"name":"get_webhook_delivery","description":"Get details of a single webhook delivery attempt including request/response payloads and retry history.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"retry_webhook_delivery","description":"Retry a failed webhook delivery. Creates a new delivery attempt with the same payload to the configured endpoint.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_subscription","description":"Get the current subscription details including plan, status, billing period, and usage limits.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"list_profiles","description":"List all profiles for the authenticated account. Returns all profiles including primary and secondary.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"create_profile","description":"Create a new profile with optional display name, bio, avatar, business info, and theme settings.\n\nACCESS: needs a Proof account. Authenticate this client (Claud"},{"name":"get_profile","description":"Get a specific profile by ID. Returns full profile details including theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Aut"},{"name":"update_profile","description":"Update a profile by ID. Supports changing display info, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"delete_profile","description":"Delete a profile by ID. Cannot delete the primary profile if it is the only one.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → A"},{"name":"set_primary_profile","description":"Set a profile as the primary profile. The previous primary profile becomes secondary.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"list_profile_templates","description":"List all templates for a profile. Returns templates organized by channel and message type, merged with defaults.\n\nACCESS: needs a Proof account. Authenticate th"},{"name":"update_profile_template","description":"Create or update a custom template for a specific profile, channel, and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"delete_profile_template","description":"Delete a custom profile template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"preview_profile_template","description":"Preview a profile template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account."},{"name":"update_profile_proofs","description":"Update which verified assets (proofs) are displayed on a specific profile. Controls visibility, privacy masking, ordering, and labels.\n\nACCESS: needs a Proof ac"},{"name":"get_my_profile","description":"Get the current user's primary profile. Returns profile details, theme, custom links, and public proof display settings.\n\nACCESS: needs a Proof account. Authent"},{"name":"update_my_profile","description":"Update the current user's primary profile. Supports display name, bio, avatar, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof ac"},{"name":"get_profile_assets","description":"Get available verified assets that can be displayed on the user's profile. Returns assets eligible for public proof display.\n\nACCESS: needs a Proof account. Aut"},{"name":"list_emails","description":"List all email addresses associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate),"},{"name":"remove_email","description":"Remove an email address from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"set_primary_email","description":"Set an email address as the primary email for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign "},{"name":"start_add_email","description":"Start adding a new email address. Sends an OTP code to the email. Returns a session ID to verify with.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_add_email_status","description":"Check the status of an in-progress email addition by session ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or"},{"name":"verify_email_otp","description":"Submit the OTP code to verify an email addition. Completes the add-email flow if the code is correct.\n\nACCESS: needs a Proof account. Authenticate this client ("},{"name":"resend_email_otp","description":"Resend the OTP code for an in-progress email addition.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in w"},{"name":"list_phones","description":"List all phone numbers associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), o"},{"name":"remove_phone","description":"Remove a phone number from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client (C"},{"name":"set_primary_phone","description":"Set a phone number as the primary phone for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"start_add_phone","description":"Start adding a new phone number by reverse OTP: the user starts the exchange themselves and nothing is sent before they do; the response's `instructions` field "},{"name":"get_add_phone_status","description":"Check the status of an in-progress phone addition by session ID. Poll until terminal state.\n\nBefore calling this for a challenge you created, make sure your rep"},{"name":"list_api_keys","description":"List all API keys for the authenticated account. Returns key metadata (not the secret key values).\n\nACCESS: needs a Proof account. Authenticate this client (Cla"},{"name":"create_api_key","description":"Create a new API key. The secret key value is returned ONLY in this response — store it securely. Note: the secret will be visible in the AI conversation contex"},{"name":"revoke_api_key","description":"Revoke an API key by ID. The key will immediately stop working. This action cannot be undone.\n\nAgent usage: This operation requires 2FA. Before calling, complet"},{"name":"regenerate_api_key","description":"Regenerate an API key: issues a new key (a new id and secret) with the same name, environment, scopes and project. The old key stops working immediately; use th"},{"name":"start_2fa","description":"Start a two-factor authentication challenge for a sensitive operation. Sends a verification code via the chosen channel. Returns a session ID, and for messaging"},{"name":"get_2fa_status","description":"Check the status of a 2FA session by session ID. Returns whether the challenge has been completed, is pending, or has expired.\n\nAgent usage: Poll this after cal"},{"name":"verify_2fa","description":"Submit a verification code to complete a 2FA challenge. Rate limited to 10 attempts per minute.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"verify_2fa_magic_link","description":"Complete a 2FA challenge using a magic link token (received via email). No code submission needed — the token itself is the proof.\n\nACCESS: needs a Proof accoun"},{"name":"wait_for_2fa","description":"Poll a 2FA session until the user completes the challenge. Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nAgent usage: Call this after start"},{"name":"list_domains","description":"List all domains for the authenticated account. Returns domain metadata including verification status.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"add_domain","description":"Add a new domain to verify ownership. Optionally specify email sending intent and verification method.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_domain","description":"Get details of a specific domain by ID, including verification status, DNS records, and provider connections.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"delete_domain","description":"Remove a domain from the account. This cannot be undone.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"verify_domain","description":"Trigger domain verification. Checks DNS records or other verification method to confirm domain ownership.\n\nACCESS: needs a Proof account. Authenticate this clie"},{"name":"connect_cloudflare","description":"Connect a Cloudflare API token to a domain for automated DNS record management. Note: the API token will be visible in the AI conversation context.\n\nACCESS: nee"},{"name":"connect_godaddy","description":"Connect GoDaddy API credentials to a domain for automated DNS record management. Note: the API key and secret will be visible in the AI conversation context.\n\nA"},{"name":"connect_dns_provider","description":"Connect a generic DNS provider to a domain using provider-specific credentials. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs"},{"name":"add_verification_provider","description":"Add an additional DNS provider for verification to an already-verified domain. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs "},{"name":"get_dns_providers","description":"Get metadata for all supported DNS providers, including required credential fields and documentation links.\n\nACCESS: needs a Proof account. Authenticate this cl"},{"name":"verify_domain_with_credentials","description":"Verify a pending domain using previously stored DNS credentials. Use when credentials are already connected.\n\nACCESS: needs a Proof account. Authenticate this c"}],"toolCount":171,"toolsHash":"92247bc63c3ba845f5de066ee3996ab134de1e00c8db306c01c5dcd2e5ad18e8","serverName":"proof-holdings","capabilities":["tools"],"serverVersion":"1.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-11T03:20:19.252Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":117,"error":null,"detail":{"tools":[{"name":"create_verification","description":"Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, "},{"name":"get_verification","description":"Get a verification by ID. Returns the full verification object including status, channel, and proof token if verified.\n\nBefore calling this for a challenge you "},{"name":"list_verifications","description":"List verifications with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate)"},{"name":"trigger_verification","description":"Trigger a DNS/HTTP verification check for a pending domain verification.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"submit_verification_code","description":"Submit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type \"email\", and ty"},{"name":"resend_verification","description":"Resend a verification message (email channel only). Generates and sends a new code.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp "},{"name":"test_verify","description":"Auto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery.\n\nACCESS: needs a Proof account. Authent"},{"name":"list_verified_users","description":"List verified users grouped by external_user_id. Shows all verifications per user.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →"},{"name":"get_verified_user","description":"Get a single verified user and their verifications by external user ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentica"},{"name":"start_domain_verification","description":"Start a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete.\n\nACCESS: needs a Proof account. A"},{"name":"check_domain_verification","description":"Check the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status.\n\nACCESS: needs a Proof account. Authenticate this c"},{"name":"wait_for_verification","description":"Poll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) w"},{"name":"create_multi_channel_verification","description":"Create a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes win"},{"name":"get_multi_channel_verification_status","description":"Get the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one comp"},{"name":"create_verification_request","description":"Create a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow.\n\nACC"},{"name":"get_verification_request","description":"Get a verification request by ID. Returns the request with all its asset verification statuses.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"get_request_proofs","description":"Get proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification.\n\nACCESS: needs a Proof account. "},{"name":"list_verification_requests","description":"List verification requests with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authe"},{"name":"get_request_by_reference","description":"Get a verification request by its reference ID (your unique identifier).\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"cancel_verification_request","description":"Cancel a pending verification request. Only pending requests can be cancelled.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Aut"},{"name":"wait_for_request","description":"Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitt"},{"name":"validate_proof","description":"Validate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the identifi"},{"name":"get_proof_status","description":"Get the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked —"},{"name":"revoke_proof","description":"Revoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer valid"},{"name":"list_revoked_proofs","description":"Get the revocation list for offline proof validation. Returns a signed list of all revoked proof IDs. Reuse a fetched list for up to 5 minutes (its cache lifeti"},{"name":"create_session","description":"Create a new phone verification session. Returns deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Sessions provide a hosted ve"},{"name":"get_session","description":"Get a session by ID. Returns the session status, verification details, and proof token if verified.\n\nACCESS: needs a Proof account. Authenticate this client (Cl"},{"name":"wait_for_session","description":"Poll a session until it reaches a terminal state (verified, failed, or expired). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nBefore calli"},{"name":"list_assets","description":"List all verified assets for the authenticated user. Assets are verified identities (phones, emails, domains).\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"get_asset","description":"Get a single verified asset by ID. Returns details including type, value, status, and verification timestamps.\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"revoke_asset","description":"Revoke a verified asset by ID. The asset will be marked as revoked and associated proofs will no longer validate.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_current_user","description":"Get the signed-in user's account details, plan and settings. Needs a login session: call start_login, then wait_for_login until it reports success. An API key a"},{"name":"list_auth_sessions","description":"List all active authentication sessions for the current user. Shows session details including channel, user agent, and expiry. When called via API key, no sessi"},{"name":"revoke_auth_session","description":"Revoke a specific authentication session by ID. When called via JWT, cannot revoke the current session. When called via API key, any session can be revoked.\n\nAC"},{"name":"get_usage","description":"Get usage metrics for the authenticated account. Shows verification counts, API calls, and quota usage.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"get_platform_summary","description":"Get a one-call account snapshot: quota with end-of-month projection, request health (pending/completed/expired counts + success rate), per-channel completion ra"},{"name":"get_settings","description":"Get account settings: branding (business name, logo, colors, support email, email theme), the outbound webhook endpoint with its event subscriptions, and the de"},{"name":"update_settings","description":"Update account settings: branding, the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. Setting the first webhook endpoin"},{"name":"export_data","description":"Export all account data (GDPR Article 20 - Right to Data Portability). Rate limited to 1 export per 24 hours.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"search","description":"Prefix-anchored global account search across six resource buckets (verification_requests, verifications, hitl, confirmations, authorizations, api_keys). Case-se"},{"name":"get_self_api_key","description":"Get the calling API key's own redacted metadata (id, name, key_prefix, environment, scopes, last_used_at, revoked_at, created_at) for agent self-inspection. Nev"},{"name":"get_api_key_usage","description":"Get per-API-key usage for a given key id: verification counts by type/channel/status, plus verification-request/confirmation/authorization totals, and attributi"},{"name":"list_templates","description":"List all custom message templates for the authenticated account. Returns templates organized by channel and message type.\n\nACCESS: needs a Proof account. Authen"},{"name":"get_default_templates","description":"Get all default message templates. These are the built-in templates used when no custom template is set.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"get_template","description":"Get a specific template by channel and message type. Returns the custom template if set, otherwise the default.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"update_template","description":"Create or update a custom template for a specific channel and message type. Replaces the default template.\n\nACCESS: needs a Proof account. Authenticate this cli"},{"name":"delete_template","description":"Delete a custom template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"preview_template","description":"Preview a template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account. Authent"},{"name":"render_template","description":"Render a template with provided variables. Returns the fully rendered message content.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /m"},{"name":"get_webhook_stats","description":"Get webhook delivery statistics including total deliveries, success/failure counts, and recent activity.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"list_webhook_deliveries","description":"List webhook delivery attempts with pagination and filtering. Shows delivery status, response codes, and timestamps.\n\nACCESS: needs a Proof account. Authenticat"},{"name":"get_webhook_delivery","description":"Get details of a single webhook delivery attempt including request/response payloads and retry history.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"retry_webhook_delivery","description":"Retry a failed webhook delivery. Creates a new delivery attempt with the same payload to the configured endpoint.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_subscription","description":"Get the current subscription details including plan, status, billing period, and usage limits.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"list_profiles","description":"List all profiles for the authenticated account. Returns all profiles including primary and secondary.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"create_profile","description":"Create a new profile with optional display name, bio, avatar, business info, and theme settings.\n\nACCESS: needs a Proof account. Authenticate this client (Claud"},{"name":"get_profile","description":"Get a specific profile by ID. Returns full profile details including theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Aut"},{"name":"update_profile","description":"Update a profile by ID. Supports changing display info, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"delete_profile","description":"Delete a profile by ID. Cannot delete the primary profile if it is the only one.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → A"},{"name":"set_primary_profile","description":"Set a profile as the primary profile. The previous primary profile becomes secondary.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"list_profile_templates","description":"List all templates for a profile. Returns templates organized by channel and message type, merged with defaults.\n\nACCESS: needs a Proof account. Authenticate th"},{"name":"update_profile_template","description":"Create or update a custom template for a specific profile, channel, and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"delete_profile_template","description":"Delete a custom profile template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"preview_profile_template","description":"Preview a profile template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account."},{"name":"update_profile_proofs","description":"Update which verified assets (proofs) are displayed on a specific profile. Controls visibility, privacy masking, ordering, and labels.\n\nACCESS: needs a Proof ac"},{"name":"get_my_profile","description":"Get the current user's primary profile. Returns profile details, theme, custom links, and public proof display settings.\n\nACCESS: needs a Proof account. Authent"},{"name":"update_my_profile","description":"Update the current user's primary profile. Supports display name, bio, avatar, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof ac"},{"name":"get_profile_assets","description":"Get available verified assets that can be displayed on the user's profile. Returns assets eligible for public proof display.\n\nACCESS: needs a Proof account. Aut"},{"name":"list_emails","description":"List all email addresses associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate),"},{"name":"remove_email","description":"Remove an email address from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"set_primary_email","description":"Set an email address as the primary email for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign "},{"name":"start_add_email","description":"Start adding a new email address. Sends an OTP code to the email. Returns a session ID to verify with.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_add_email_status","description":"Check the status of an in-progress email addition by session ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or"},{"name":"verify_email_otp","description":"Submit the OTP code to verify an email addition. Completes the add-email flow if the code is correct.\n\nACCESS: needs a Proof account. Authenticate this client ("},{"name":"resend_email_otp","description":"Resend the OTP code for an in-progress email addition.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in w"},{"name":"list_phones","description":"List all phone numbers associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), o"},{"name":"remove_phone","description":"Remove a phone number from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client (C"},{"name":"set_primary_phone","description":"Set a phone number as the primary phone for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"start_add_phone","description":"Start adding a new phone number by reverse OTP: the user starts the exchange themselves and nothing is sent before they do; the response's `instructions` field "},{"name":"get_add_phone_status","description":"Check the status of an in-progress phone addition by session ID. Poll until terminal state.\n\nBefore calling this for a challenge you created, make sure your rep"},{"name":"list_api_keys","description":"List all API keys for the authenticated account. Returns key metadata (not the secret key values).\n\nACCESS: needs a Proof account. Authenticate this client (Cla"},{"name":"create_api_key","description":"Create a new API key. The secret key value is returned ONLY in this response — store it securely. Note: the secret will be visible in the AI conversation contex"},{"name":"revoke_api_key","description":"Revoke an API key by ID. The key will immediately stop working. This action cannot be undone.\n\nAgent usage: This operation requires 2FA. Before calling, complet"},{"name":"regenerate_api_key","description":"Regenerate an API key: issues a new key (a new id and secret) with the same name, environment, scopes and project. The old key stops working immediately; use th"},{"name":"start_2fa","description":"Start a two-factor authentication challenge for a sensitive operation. Sends a verification code via the chosen channel. Returns a session ID, and for messaging"},{"name":"get_2fa_status","description":"Check the status of a 2FA session by session ID. Returns whether the challenge has been completed, is pending, or has expired.\n\nAgent usage: Poll this after cal"},{"name":"verify_2fa","description":"Submit a verification code to complete a 2FA challenge. Rate limited to 10 attempts per minute.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"verify_2fa_magic_link","description":"Complete a 2FA challenge using a magic link token (received via email). No code submission needed — the token itself is the proof.\n\nACCESS: needs a Proof accoun"},{"name":"wait_for_2fa","description":"Poll a 2FA session until the user completes the challenge. Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nAgent usage: Call this after start"},{"name":"list_domains","description":"List all domains for the authenticated account. Returns domain metadata including verification status.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"add_domain","description":"Add a new domain to verify ownership. Optionally specify email sending intent and verification method.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_domain","description":"Get details of a specific domain by ID, including verification status, DNS records, and provider connections.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"delete_domain","description":"Remove a domain from the account. This cannot be undone.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"verify_domain","description":"Trigger domain verification. Checks DNS records or other verification method to confirm domain ownership.\n\nACCESS: needs a Proof account. Authenticate this clie"},{"name":"connect_cloudflare","description":"Connect a Cloudflare API token to a domain for automated DNS record management. Note: the API token will be visible in the AI conversation context.\n\nACCESS: nee"},{"name":"connect_godaddy","description":"Connect GoDaddy API credentials to a domain for automated DNS record management. Note: the API key and secret will be visible in the AI conversation context.\n\nA"},{"name":"connect_dns_provider","description":"Connect a generic DNS provider to a domain using provider-specific credentials. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs"},{"name":"add_verification_provider","description":"Add an additional DNS provider for verification to an already-verified domain. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs "},{"name":"get_dns_providers","description":"Get metadata for all supported DNS providers, including required credential fields and documentation links.\n\nACCESS: needs a Proof account. Authenticate this cl"},{"name":"verify_domain_with_credentials","description":"Verify a pending domain using previously stored DNS credentials. Use when credentials are already connected.\n\nACCESS: needs a Proof account. Authenticate this c"}],"toolCount":171,"toolsHash":"92247bc63c3ba845f5de066ee3996ab134de1e00c8db306c01c5dcd2e5ad18e8","serverName":"proof-holdings","capabilities":["tools"],"serverVersion":"1.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T20:27:13.168Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":117,"error":null,"detail":{"tools":[{"name":"create_verification","description":"Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, "},{"name":"get_verification","description":"Get a verification by ID. Returns the full verification object including status, channel, and proof token if verified.\n\nBefore calling this for a challenge you "},{"name":"list_verifications","description":"List verifications with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate)"},{"name":"trigger_verification","description":"Trigger a DNS/HTTP verification check for a pending domain verification.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"submit_verification_code","description":"Submit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type \"email\", and ty"},{"name":"resend_verification","description":"Resend a verification message (email channel only). Generates and sends a new code.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp "},{"name":"test_verify","description":"Auto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery.\n\nACCESS: needs a Proof account. Authent"},{"name":"list_verified_users","description":"List verified users grouped by external_user_id. Shows all verifications per user.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →"},{"name":"get_verified_user","description":"Get a single verified user and their verifications by external user ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentica"},{"name":"start_domain_verification","description":"Start a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete.\n\nACCESS: needs a Proof account. A"},{"name":"check_domain_verification","description":"Check the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status.\n\nACCESS: needs a Proof account. Authenticate this c"},{"name":"wait_for_verification","description":"Poll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) w"},{"name":"create_multi_channel_verification","description":"Create a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes win"},{"name":"get_multi_channel_verification_status","description":"Get the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one comp"},{"name":"create_verification_request","description":"Create a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow.\n\nACC"},{"name":"get_verification_request","description":"Get a verification request by ID. Returns the request with all its asset verification statuses.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"get_request_proofs","description":"Get proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification.\n\nACCESS: needs a Proof account. "},{"name":"list_verification_requests","description":"List verification requests with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authe"},{"name":"get_request_by_reference","description":"Get a verification request by its reference ID (your unique identifier).\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"cancel_verification_request","description":"Cancel a pending verification request. Only pending requests can be cancelled.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Aut"},{"name":"wait_for_request","description":"Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitt"},{"name":"validate_proof","description":"Validate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the identifi"},{"name":"get_proof_status","description":"Get the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked —"},{"name":"revoke_proof","description":"Revoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer valid"},{"name":"list_revoked_proofs","description":"Get the revocation list for offline proof validation. Returns a signed list of all revoked proof IDs. Reuse a fetched list for up to 5 minutes (its cache lifeti"},{"name":"create_session","description":"Create a new phone verification session. Returns deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Sessions provide a hosted ve"},{"name":"get_session","description":"Get a session by ID. Returns the session status, verification details, and proof token if verified.\n\nACCESS: needs a Proof account. Authenticate this client (Cl"},{"name":"wait_for_session","description":"Poll a session until it reaches a terminal state (verified, failed, or expired). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nBefore calli"},{"name":"list_assets","description":"List all verified assets for the authenticated user. Assets are verified identities (phones, emails, domains).\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"get_asset","description":"Get a single verified asset by ID. Returns details including type, value, status, and verification timestamps.\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"revoke_asset","description":"Revoke a verified asset by ID. The asset will be marked as revoked and associated proofs will no longer validate.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_current_user","description":"Get the signed-in user's account details, plan and settings. Needs a login session: call start_login, then wait_for_login until it reports success. An API key a"},{"name":"list_auth_sessions","description":"List all active authentication sessions for the current user. Shows session details including channel, user agent, and expiry. When called via API key, no sessi"},{"name":"revoke_auth_session","description":"Revoke a specific authentication session by ID. When called via JWT, cannot revoke the current session. When called via API key, any session can be revoked.\n\nAC"},{"name":"get_usage","description":"Get usage metrics for the authenticated account. Shows verification counts, API calls, and quota usage.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"get_platform_summary","description":"Get a one-call account snapshot: quota with end-of-month projection, request health (pending/completed/expired counts + success rate), per-channel completion ra"},{"name":"get_settings","description":"Get account settings: branding (business name, logo, colors, support email, email theme), the outbound webhook endpoint with its event subscriptions, and the de"},{"name":"update_settings","description":"Update account settings: branding, the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. Setting the first webhook endpoin"},{"name":"export_data","description":"Export all account data (GDPR Article 20 - Right to Data Portability). Rate limited to 1 export per 24 hours.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"search","description":"Prefix-anchored global account search across six resource buckets (verification_requests, verifications, hitl, confirmations, authorizations, api_keys). Case-se"},{"name":"get_self_api_key","description":"Get the calling API key's own redacted metadata (id, name, key_prefix, environment, scopes, last_used_at, revoked_at, created_at) for agent self-inspection. Nev"},{"name":"get_api_key_usage","description":"Get per-API-key usage for a given key id: verification counts by type/channel/status, plus verification-request/confirmation/authorization totals, and attributi"},{"name":"list_templates","description":"List all custom message templates for the authenticated account. Returns templates organized by channel and message type.\n\nACCESS: needs a Proof account. Authen"},{"name":"get_default_templates","description":"Get all default message templates. These are the built-in templates used when no custom template is set.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"get_template","description":"Get a specific template by channel and message type. Returns the custom template if set, otherwise the default.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"update_template","description":"Create or update a custom template for a specific channel and message type. Replaces the default template.\n\nACCESS: needs a Proof account. Authenticate this cli"},{"name":"delete_template","description":"Delete a custom template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"preview_template","description":"Preview a template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account. Authent"},{"name":"render_template","description":"Render a template with provided variables. Returns the fully rendered message content.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /m"},{"name":"get_webhook_stats","description":"Get webhook delivery statistics including total deliveries, success/failure counts, and recent activity.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"list_webhook_deliveries","description":"List webhook delivery attempts with pagination and filtering. Shows delivery status, response codes, and timestamps.\n\nACCESS: needs a Proof account. Authenticat"},{"name":"get_webhook_delivery","description":"Get details of a single webhook delivery attempt including request/response payloads and retry history.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"retry_webhook_delivery","description":"Retry a failed webhook delivery. Creates a new delivery attempt with the same payload to the configured endpoint.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_subscription","description":"Get the current subscription details including plan, status, billing period, and usage limits.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"list_profiles","description":"List all profiles for the authenticated account. Returns all profiles including primary and secondary.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"create_profile","description":"Create a new profile with optional display name, bio, avatar, business info, and theme settings.\n\nACCESS: needs a Proof account. Authenticate this client (Claud"},{"name":"get_profile","description":"Get a specific profile by ID. Returns full profile details including theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Aut"},{"name":"update_profile","description":"Update a profile by ID. Supports changing display info, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"delete_profile","description":"Delete a profile by ID. Cannot delete the primary profile if it is the only one.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → A"},{"name":"set_primary_profile","description":"Set a profile as the primary profile. The previous primary profile becomes secondary.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"list_profile_templates","description":"List all templates for a profile. Returns templates organized by channel and message type, merged with defaults.\n\nACCESS: needs a Proof account. Authenticate th"},{"name":"update_profile_template","description":"Create or update a custom template for a specific profile, channel, and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"delete_profile_template","description":"Delete a custom profile template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"preview_profile_template","description":"Preview a profile template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account."},{"name":"update_profile_proofs","description":"Update which verified assets (proofs) are displayed on a specific profile. Controls visibility, privacy masking, ordering, and labels.\n\nACCESS: needs a Proof ac"},{"name":"get_my_profile","description":"Get the current user's primary profile. Returns profile details, theme, custom links, and public proof display settings.\n\nACCESS: needs a Proof account. Authent"},{"name":"update_my_profile","description":"Update the current user's primary profile. Supports display name, bio, avatar, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof ac"},{"name":"get_profile_assets","description":"Get available verified assets that can be displayed on the user's profile. Returns assets eligible for public proof display.\n\nACCESS: needs a Proof account. Aut"},{"name":"list_emails","description":"List all email addresses associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate),"},{"name":"remove_email","description":"Remove an email address from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"set_primary_email","description":"Set an email address as the primary email for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign "},{"name":"start_add_email","description":"Start adding a new email address. Sends an OTP code to the email. Returns a session ID to verify with.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_add_email_status","description":"Check the status of an in-progress email addition by session ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or"},{"name":"verify_email_otp","description":"Submit the OTP code to verify an email addition. Completes the add-email flow if the code is correct.\n\nACCESS: needs a Proof account. Authenticate this client ("},{"name":"resend_email_otp","description":"Resend the OTP code for an in-progress email addition.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in w"},{"name":"list_phones","description":"List all phone numbers associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), o"},{"name":"remove_phone","description":"Remove a phone number from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client (C"},{"name":"set_primary_phone","description":"Set a phone number as the primary phone for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"start_add_phone","description":"Start adding a new phone number by reverse OTP: the user starts the exchange themselves and nothing is sent before they do; the response's `instructions` field "},{"name":"get_add_phone_status","description":"Check the status of an in-progress phone addition by session ID. Poll until terminal state.\n\nBefore calling this for a challenge you created, make sure your rep"},{"name":"list_api_keys","description":"List all API keys for the authenticated account. Returns key metadata (not the secret key values).\n\nACCESS: needs a Proof account. Authenticate this client (Cla"},{"name":"create_api_key","description":"Create a new API key. The secret key value is returned ONLY in this response — store it securely. Note: the secret will be visible in the AI conversation contex"},{"name":"revoke_api_key","description":"Revoke an API key by ID. The key will immediately stop working. This action cannot be undone.\n\nAgent usage: This operation requires 2FA. Before calling, complet"},{"name":"regenerate_api_key","description":"Regenerate an API key: issues a new key (a new id and secret) with the same name, environment, scopes and project. The old key stops working immediately; use th"},{"name":"start_2fa","description":"Start a two-factor authentication challenge for a sensitive operation. Sends a verification code via the chosen channel. Returns a session ID, and for messaging"},{"name":"get_2fa_status","description":"Check the status of a 2FA session by session ID. Returns whether the challenge has been completed, is pending, or has expired.\n\nAgent usage: Poll this after cal"},{"name":"verify_2fa","description":"Submit a verification code to complete a 2FA challenge. Rate limited to 10 attempts per minute.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"verify_2fa_magic_link","description":"Complete a 2FA challenge using a magic link token (received via email). No code submission needed — the token itself is the proof.\n\nACCESS: needs a Proof accoun"},{"name":"wait_for_2fa","description":"Poll a 2FA session until the user completes the challenge. Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nAgent usage: Call this after start"},{"name":"list_domains","description":"List all domains for the authenticated account. Returns domain metadata including verification status.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"add_domain","description":"Add a new domain to verify ownership. Optionally specify email sending intent and verification method.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_domain","description":"Get details of a specific domain by ID, including verification status, DNS records, and provider connections.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"delete_domain","description":"Remove a domain from the account. This cannot be undone.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"verify_domain","description":"Trigger domain verification. Checks DNS records or other verification method to confirm domain ownership.\n\nACCESS: needs a Proof account. Authenticate this clie"},{"name":"connect_cloudflare","description":"Connect a Cloudflare API token to a domain for automated DNS record management. Note: the API token will be visible in the AI conversation context.\n\nACCESS: nee"},{"name":"connect_godaddy","description":"Connect GoDaddy API credentials to a domain for automated DNS record management. Note: the API key and secret will be visible in the AI conversation context.\n\nA"},{"name":"connect_dns_provider","description":"Connect a generic DNS provider to a domain using provider-specific credentials. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs"},{"name":"add_verification_provider","description":"Add an additional DNS provider for verification to an already-verified domain. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs "},{"name":"get_dns_providers","description":"Get metadata for all supported DNS providers, including required credential fields and documentation links.\n\nACCESS: needs a Proof account. Authenticate this cl"},{"name":"verify_domain_with_credentials","description":"Verify a pending domain using previously stored DNS credentials. Use when credentials are already connected.\n\nACCESS: needs a Proof account. Authenticate this c"}],"toolCount":171,"toolsHash":"92247bc63c3ba845f5de066ee3996ab134de1e00c8db306c01c5dcd2e5ad18e8","serverName":"proof-holdings","capabilities":["tools"],"serverVersion":"1.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T13:25:02.484Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":132,"error":null,"detail":{"tools":[{"name":"create_verification","description":"Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, "},{"name":"get_verification","description":"Get a verification by ID. Returns the full verification object including status, channel, and proof token if verified.\n\nBefore calling this for a challenge you "},{"name":"list_verifications","description":"List verifications with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate)"},{"name":"trigger_verification","description":"Trigger a DNS/HTTP verification check for a pending domain verification.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"submit_verification_code","description":"Submit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type \"email\", and ty"},{"name":"resend_verification","description":"Resend a verification message (email channel only). Generates and sends a new code.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp "},{"name":"test_verify","description":"Auto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery.\n\nACCESS: needs a Proof account. Authent"},{"name":"list_verified_users","description":"List verified users grouped by external_user_id. Shows all verifications per user.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →"},{"name":"get_verified_user","description":"Get a single verified user and their verifications by external user ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentica"},{"name":"start_domain_verification","description":"Start a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete.\n\nACCESS: needs a Proof account. A"},{"name":"check_domain_verification","description":"Check the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status.\n\nACCESS: needs a Proof account. Authenticate this c"},{"name":"wait_for_verification","description":"Poll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) w"},{"name":"create_multi_channel_verification","description":"Create a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes win"},{"name":"get_multi_channel_verification_status","description":"Get the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one comp"},{"name":"create_verification_request","description":"Create a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow.\n\nACC"},{"name":"get_verification_request","description":"Get a verification request by ID. Returns the request with all its asset verification statuses.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"get_request_proofs","description":"Get proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification.\n\nACCESS: needs a Proof account. "},{"name":"list_verification_requests","description":"List verification requests with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authe"},{"name":"get_request_by_reference","description":"Get a verification request by its reference ID (your unique identifier).\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"cancel_verification_request","description":"Cancel a pending verification request. Only pending requests can be cancelled.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Aut"},{"name":"wait_for_request","description":"Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitt"},{"name":"validate_proof","description":"Validate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the identifi"},{"name":"get_proof_status","description":"Get the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked —"},{"name":"revoke_proof","description":"Revoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer valid"},{"name":"list_revoked_proofs","description":"Get the revocation list for offline proof validation. Returns a signed list of all revoked proof IDs. Reuse a fetched list for up to 5 minutes (its cache lifeti"},{"name":"create_session","description":"Create a new phone verification session. Returns deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Sessions provide a hosted ve"},{"name":"get_session","description":"Get a session by ID. Returns the session status, verification details, and proof token if verified.\n\nACCESS: needs a Proof account. Authenticate this client (Cl"},{"name":"wait_for_session","description":"Poll a session until it reaches a terminal state (verified, failed, or expired). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nBefore calli"},{"name":"list_assets","description":"List all verified assets for the authenticated user. Assets are verified identities (phones, emails, domains).\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"get_asset","description":"Get a single verified asset by ID. Returns details including type, value, status, and verification timestamps.\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"revoke_asset","description":"Revoke a verified asset by ID. The asset will be marked as revoked and associated proofs will no longer validate.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_current_user","description":"Get the signed-in user's account details, plan and settings. Needs a login session: call start_login, then wait_for_login until it reports success. An API key a"},{"name":"list_auth_sessions","description":"List all active authentication sessions for the current user. Shows session details including channel, user agent, and expiry. When called via API key, no sessi"},{"name":"revoke_auth_session","description":"Revoke a specific authentication session by ID. When called via JWT, cannot revoke the current session. When called via API key, any session can be revoked.\n\nAC"},{"name":"get_usage","description":"Get usage metrics for the authenticated account. Shows verification counts, API calls, and quota usage.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"get_platform_summary","description":"Get a one-call account snapshot: quota with end-of-month projection, request health (pending/completed/expired counts + success rate), per-channel completion ra"},{"name":"get_settings","description":"Get account settings: branding (business name, logo, colors, support email, email theme), the outbound webhook endpoint with its event subscriptions, and the de"},{"name":"update_settings","description":"Update account settings: branding, the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. Setting the first webhook endpoin"},{"name":"export_data","description":"Export all account data (GDPR Article 20 - Right to Data Portability). Rate limited to 1 export per 24 hours.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"search","description":"Prefix-anchored global account search across six resource buckets (verification_requests, verifications, hitl, confirmations, authorizations, api_keys). Case-se"},{"name":"get_self_api_key","description":"Get the calling API key's own redacted metadata (id, name, key_prefix, environment, scopes, last_used_at, revoked_at, created_at) for agent self-inspection. Nev"},{"name":"get_api_key_usage","description":"Get per-API-key usage for a given key id: verification counts by type/channel/status, plus verification-request/confirmation/authorization totals, and attributi"},{"name":"list_templates","description":"List all custom message templates for the authenticated account. Returns templates organized by channel and message type.\n\nACCESS: needs a Proof account. Authen"},{"name":"get_default_templates","description":"Get all default message templates. These are the built-in templates used when no custom template is set.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"get_template","description":"Get a specific template by channel and message type. Returns the custom template if set, otherwise the default.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"update_template","description":"Create or update a custom template for a specific channel and message type. Replaces the default template.\n\nACCESS: needs a Proof account. Authenticate this cli"},{"name":"delete_template","description":"Delete a custom template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"preview_template","description":"Preview a template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account. Authent"},{"name":"render_template","description":"Render a template with provided variables. Returns the fully rendered message content.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /m"},{"name":"get_webhook_stats","description":"Get webhook delivery statistics including total deliveries, success/failure counts, and recent activity.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"list_webhook_deliveries","description":"List webhook delivery attempts with pagination and filtering. Shows delivery status, response codes, and timestamps.\n\nACCESS: needs a Proof account. Authenticat"},{"name":"get_webhook_delivery","description":"Get details of a single webhook delivery attempt including request/response payloads and retry history.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"retry_webhook_delivery","description":"Retry a failed webhook delivery. Creates a new delivery attempt with the same payload to the configured endpoint.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_subscription","description":"Get the current subscription details including plan, status, billing period, and usage limits.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"list_profiles","description":"List all profiles for the authenticated account. Returns all profiles including primary and secondary.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"create_profile","description":"Create a new profile with optional display name, bio, avatar, business info, and theme settings.\n\nACCESS: needs a Proof account. Authenticate this client (Claud"},{"name":"get_profile","description":"Get a specific profile by ID. Returns full profile details including theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Aut"},{"name":"update_profile","description":"Update a profile by ID. Supports changing display info, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"delete_profile","description":"Delete a profile by ID. Cannot delete the primary profile if it is the only one.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → A"},{"name":"set_primary_profile","description":"Set a profile as the primary profile. The previous primary profile becomes secondary.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"list_profile_templates","description":"List all templates for a profile. Returns templates organized by channel and message type, merged with defaults.\n\nACCESS: needs a Proof account. Authenticate th"},{"name":"update_profile_template","description":"Create or update a custom template for a specific profile, channel, and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"delete_profile_template","description":"Delete a custom profile template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"preview_profile_template","description":"Preview a profile template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account."},{"name":"update_profile_proofs","description":"Update which verified assets (proofs) are displayed on a specific profile. Controls visibility, privacy masking, ordering, and labels.\n\nACCESS: needs a Proof ac"},{"name":"get_my_profile","description":"Get the current user's primary profile. Returns profile details, theme, custom links, and public proof display settings.\n\nACCESS: needs a Proof account. Authent"},{"name":"update_my_profile","description":"Update the current user's primary profile. Supports display name, bio, avatar, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof ac"},{"name":"get_profile_assets","description":"Get available verified assets that can be displayed on the user's profile. Returns assets eligible for public proof display.\n\nACCESS: needs a Proof account. Aut"},{"name":"list_emails","description":"List all email addresses associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate),"},{"name":"remove_email","description":"Remove an email address from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"set_primary_email","description":"Set an email address as the primary email for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign "},{"name":"start_add_email","description":"Start adding a new email address. Sends an OTP code to the email. Returns a session ID to verify with.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_add_email_status","description":"Check the status of an in-progress email addition by session ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or"},{"name":"verify_email_otp","description":"Submit the OTP code to verify an email addition. Completes the add-email flow if the code is correct.\n\nACCESS: needs a Proof account. Authenticate this client ("},{"name":"resend_email_otp","description":"Resend the OTP code for an in-progress email addition.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in w"},{"name":"list_phones","description":"List all phone numbers associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), o"},{"name":"remove_phone","description":"Remove a phone number from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client (C"},{"name":"set_primary_phone","description":"Set a phone number as the primary phone for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"start_add_phone","description":"Start adding a new phone number by reverse OTP: the user starts the exchange themselves and nothing is sent before they do; the response's `instructions` field "},{"name":"get_add_phone_status","description":"Check the status of an in-progress phone addition by session ID. Poll until terminal state.\n\nBefore calling this for a challenge you created, make sure your rep"},{"name":"list_api_keys","description":"List all API keys for the authenticated account. Returns key metadata (not the secret key values).\n\nACCESS: needs a Proof account. Authenticate this client (Cla"},{"name":"create_api_key","description":"Create a new API key. The secret key value is returned ONLY in this response — store it securely. Note: the secret will be visible in the AI conversation contex"},{"name":"revoke_api_key","description":"Revoke an API key by ID. The key will immediately stop working. This action cannot be undone.\n\nAgent usage: This operation requires 2FA. Before calling, complet"},{"name":"regenerate_api_key","description":"Regenerate an API key: issues a new key (a new id and secret) with the same name, environment, scopes and project. The old key stops working immediately; use th"},{"name":"start_2fa","description":"Start a two-factor authentication challenge for a sensitive operation. Sends a verification code via the chosen channel. Returns a session ID, and for messaging"},{"name":"get_2fa_status","description":"Check the status of a 2FA session by session ID. Returns whether the challenge has been completed, is pending, or has expired.\n\nAgent usage: Poll this after cal"},{"name":"verify_2fa","description":"Submit a verification code to complete a 2FA challenge. Rate limited to 10 attempts per minute.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"verify_2fa_magic_link","description":"Complete a 2FA challenge using a magic link token (received via email). No code submission needed — the token itself is the proof.\n\nACCESS: needs a Proof accoun"},{"name":"wait_for_2fa","description":"Poll a 2FA session until the user completes the challenge. Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nAgent usage: Call this after start"},{"name":"list_domains","description":"List all domains for the authenticated account. Returns domain metadata including verification status.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"add_domain","description":"Add a new domain to verify ownership. Optionally specify email sending intent and verification method.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_domain","description":"Get details of a specific domain by ID, including verification status, DNS records, and provider connections.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"delete_domain","description":"Remove a domain from the account. This cannot be undone.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"verify_domain","description":"Trigger domain verification. Checks DNS records or other verification method to confirm domain ownership.\n\nACCESS: needs a Proof account. Authenticate this clie"},{"name":"connect_cloudflare","description":"Connect a Cloudflare API token to a domain for automated DNS record management. Note: the API token will be visible in the AI conversation context.\n\nACCESS: nee"},{"name":"connect_godaddy","description":"Connect GoDaddy API credentials to a domain for automated DNS record management. Note: the API key and secret will be visible in the AI conversation context.\n\nA"},{"name":"connect_dns_provider","description":"Connect a generic DNS provider to a domain using provider-specific credentials. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs"},{"name":"add_verification_provider","description":"Add an additional DNS provider for verification to an already-verified domain. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs "},{"name":"get_dns_providers","description":"Get metadata for all supported DNS providers, including required credential fields and documentation links.\n\nACCESS: needs a Proof account. Authenticate this cl"},{"name":"verify_domain_with_credentials","description":"Verify a pending domain using previously stored DNS credentials. Use when credentials are already connected.\n\nACCESS: needs a Proof account. Authenticate this c"}],"toolCount":171,"toolsHash":"92247bc63c3ba845f5de066ee3996ab134de1e00c8db306c01c5dcd2e5ad18e8","serverName":"proof-holdings","capabilities":["tools"],"serverVersion":"1.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T07:25:27.599Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":109,"error":null,"detail":{"tools":[{"name":"create_verification","description":"Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, "},{"name":"get_verification","description":"Get a verification by ID. Returns the full verification object including status, channel, and proof token if verified.\n\nBefore calling this for a challenge you "},{"name":"list_verifications","description":"List verifications with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate)"},{"name":"trigger_verification","description":"Trigger a DNS/HTTP verification check for a pending domain verification.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"submit_verification_code","description":"Submit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type \"email\", and ty"},{"name":"resend_verification","description":"Resend a verification message (email channel only). Generates and sends a new code.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp "},{"name":"test_verify","description":"Auto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery.\n\nACCESS: needs a Proof account. Authent"},{"name":"list_verified_users","description":"List verified users grouped by external_user_id. Shows all verifications per user.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →"},{"name":"get_verified_user","description":"Get a single verified user and their verifications by external user ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentica"},{"name":"start_domain_verification","description":"Start a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete.\n\nACCESS: needs a Proof account. A"},{"name":"check_domain_verification","description":"Check the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status.\n\nACCESS: needs a Proof account. Authenticate this c"},{"name":"wait_for_verification","description":"Poll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) w"},{"name":"create_multi_channel_verification","description":"Create a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes win"},{"name":"get_multi_channel_verification_status","description":"Get the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one comp"},{"name":"create_verification_request","description":"Create a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow.\n\nACC"},{"name":"get_verification_request","description":"Get a verification request by ID. Returns the request with all its asset verification statuses.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"get_request_proofs","description":"Get proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification.\n\nACCESS: needs a Proof account. "},{"name":"list_verification_requests","description":"List verification requests with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authe"},{"name":"get_request_by_reference","description":"Get a verification request by its reference ID (your unique identifier).\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"cancel_verification_request","description":"Cancel a pending verification request. Only pending requests can be cancelled.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Aut"},{"name":"wait_for_request","description":"Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitt"},{"name":"validate_proof","description":"Validate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the identifi"},{"name":"get_proof_status","description":"Get the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked —"},{"name":"revoke_proof","description":"Revoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer valid"},{"name":"list_revoked_proofs","description":"Get the revocation list for offline proof validation. Returns a signed list of all revoked proof IDs. Reuse a fetched list for up to 5 minutes (its cache lifeti"},{"name":"create_session","description":"Create a new phone verification session. Returns deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Sessions provide a hosted ve"},{"name":"get_session","description":"Get a session by ID. Returns the session status, verification details, and proof token if verified.\n\nACCESS: needs a Proof account. Authenticate this client (Cl"},{"name":"wait_for_session","description":"Poll a session until it reaches a terminal state (verified, failed, or expired). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nBefore calli"},{"name":"list_assets","description":"List all verified assets for the authenticated user. Assets are verified identities (phones, emails, domains).\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"get_asset","description":"Get a single verified asset by ID. Returns details including type, value, status, and verification timestamps.\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"revoke_asset","description":"Revoke a verified asset by ID. The asset will be marked as revoked and associated proofs will no longer validate.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_current_user","description":"Get the signed-in user's account details, plan and settings. Needs a login session: call start_login, then wait_for_login until it reports success. An API key a"},{"name":"list_auth_sessions","description":"List all active authentication sessions for the current user. Shows session details including channel, user agent, and expiry. When called via API key, no sessi"},{"name":"revoke_auth_session","description":"Revoke a specific authentication session by ID. When called via JWT, cannot revoke the current session. When called via API key, any session can be revoked.\n\nAC"},{"name":"get_usage","description":"Get usage metrics for the authenticated account. Shows verification counts, API calls, and quota usage.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"get_platform_summary","description":"Get a one-call account snapshot: quota with end-of-month projection, request health (pending/completed/expired counts + success rate), per-channel completion ra"},{"name":"get_settings","description":"Get account settings: branding (business name, logo, colors, support email, email theme), the outbound webhook endpoint with its event subscriptions, and the de"},{"name":"update_settings","description":"Update account settings: branding, the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. Setting the first webhook endpoin"},{"name":"export_data","description":"Export all account data (GDPR Article 20 - Right to Data Portability). Rate limited to 1 export per 24 hours.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"search","description":"Prefix-anchored global account search across six resource buckets (verification_requests, verifications, hitl, confirmations, authorizations, api_keys). Case-se"},{"name":"get_self_api_key","description":"Get the calling API key's own redacted metadata (id, name, key_prefix, environment, scopes, last_used_at, revoked_at, created_at) for agent self-inspection. Nev"},{"name":"get_api_key_usage","description":"Get per-API-key usage for a given key id: verification counts by type/channel/status, plus verification-request/confirmation/authorization totals, and attributi"},{"name":"list_templates","description":"List all custom message templates for the authenticated account. Returns templates organized by channel and message type.\n\nACCESS: needs a Proof account. Authen"},{"name":"get_default_templates","description":"Get all default message templates. These are the built-in templates used when no custom template is set.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"get_template","description":"Get a specific template by channel and message type. Returns the custom template if set, otherwise the default.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"update_template","description":"Create or update a custom template for a specific channel and message type. Replaces the default template.\n\nACCESS: needs a Proof account. Authenticate this cli"},{"name":"delete_template","description":"Delete a custom template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"preview_template","description":"Preview a template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account. Authent"},{"name":"render_template","description":"Render a template with provided variables. Returns the fully rendered message content.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /m"},{"name":"get_webhook_stats","description":"Get webhook delivery statistics including total deliveries, success/failure counts, and recent activity.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"list_webhook_deliveries","description":"List webhook delivery attempts with pagination and filtering. Shows delivery status, response codes, and timestamps.\n\nACCESS: needs a Proof account. Authenticat"},{"name":"get_webhook_delivery","description":"Get details of a single webhook delivery attempt including request/response payloads and retry history.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"retry_webhook_delivery","description":"Retry a failed webhook delivery. Creates a new delivery attempt with the same payload to the configured endpoint.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_subscription","description":"Get the current subscription details including plan, status, billing period, and usage limits.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"list_profiles","description":"List all profiles for the authenticated account. Returns all profiles including primary and secondary.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"create_profile","description":"Create a new profile with optional display name, bio, avatar, business info, and theme settings.\n\nACCESS: needs a Proof account. Authenticate this client (Claud"},{"name":"get_profile","description":"Get a specific profile by ID. Returns full profile details including theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Aut"},{"name":"update_profile","description":"Update a profile by ID. Supports changing display info, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"delete_profile","description":"Delete a profile by ID. Cannot delete the primary profile if it is the only one.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → A"},{"name":"set_primary_profile","description":"Set a profile as the primary profile. The previous primary profile becomes secondary.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"list_profile_templates","description":"List all templates for a profile. Returns templates organized by channel and message type, merged with defaults.\n\nACCESS: needs a Proof account. Authenticate th"},{"name":"update_profile_template","description":"Create or update a custom template for a specific profile, channel, and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"delete_profile_template","description":"Delete a custom profile template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"preview_profile_template","description":"Preview a profile template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account."},{"name":"update_profile_proofs","description":"Update which verified assets (proofs) are displayed on a specific profile. Controls visibility, privacy masking, ordering, and labels.\n\nACCESS: needs a Proof ac"},{"name":"get_my_profile","description":"Get the current user's primary profile. Returns profile details, theme, custom links, and public proof display settings.\n\nACCESS: needs a Proof account. Authent"},{"name":"update_my_profile","description":"Update the current user's primary profile. Supports display name, bio, avatar, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof ac"},{"name":"get_profile_assets","description":"Get available verified assets that can be displayed on the user's profile. Returns assets eligible for public proof display.\n\nACCESS: needs a Proof account. Aut"},{"name":"list_emails","description":"List all email addresses associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate),"},{"name":"remove_email","description":"Remove an email address from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"set_primary_email","description":"Set an email address as the primary email for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign "},{"name":"start_add_email","description":"Start adding a new email address. Sends an OTP code to the email. Returns a session ID to verify with.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_add_email_status","description":"Check the status of an in-progress email addition by session ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or"},{"name":"verify_email_otp","description":"Submit the OTP code to verify an email addition. Completes the add-email flow if the code is correct.\n\nACCESS: needs a Proof account. Authenticate this client ("},{"name":"resend_email_otp","description":"Resend the OTP code for an in-progress email addition.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in w"},{"name":"list_phones","description":"List all phone numbers associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), o"},{"name":"remove_phone","description":"Remove a phone number from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client (C"},{"name":"set_primary_phone","description":"Set a phone number as the primary phone for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"start_add_phone","description":"Start adding a new phone number by reverse OTP: the user starts the exchange themselves and nothing is sent before they do; the response's `instructions` field "},{"name":"get_add_phone_status","description":"Check the status of an in-progress phone addition by session ID. Poll until terminal state.\n\nBefore calling this for a challenge you created, make sure your rep"},{"name":"list_api_keys","description":"List all API keys for the authenticated account. Returns key metadata (not the secret key values).\n\nACCESS: needs a Proof account. Authenticate this client (Cla"},{"name":"create_api_key","description":"Create a new API key. The secret key value is returned ONLY in this response — store it securely. Note: the secret will be visible in the AI conversation contex"},{"name":"revoke_api_key","description":"Revoke an API key by ID. The key will immediately stop working. This action cannot be undone.\n\nAgent usage: This operation requires 2FA. Before calling, complet"},{"name":"regenerate_api_key","description":"Regenerate an API key: issues a new key (a new id and secret) with the same name, environment, scopes and project. The old key stops working immediately; use th"},{"name":"start_2fa","description":"Start a two-factor authentication challenge for a sensitive operation. Sends a verification code via the chosen channel. Returns a session ID, and for messaging"},{"name":"get_2fa_status","description":"Check the status of a 2FA session by session ID. Returns whether the challenge has been completed, is pending, or has expired.\n\nAgent usage: Poll this after cal"},{"name":"verify_2fa","description":"Submit a verification code to complete a 2FA challenge. Rate limited to 10 attempts per minute.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"verify_2fa_magic_link","description":"Complete a 2FA challenge using a magic link token (received via email). No code submission needed — the token itself is the proof.\n\nACCESS: needs a Proof accoun"},{"name":"wait_for_2fa","description":"Poll a 2FA session until the user completes the challenge. Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nAgent usage: Call this after start"},{"name":"list_domains","description":"List all domains for the authenticated account. Returns domain metadata including verification status.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"add_domain","description":"Add a new domain to verify ownership. Optionally specify email sending intent and verification method.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_domain","description":"Get details of a specific domain by ID, including verification status, DNS records, and provider connections.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"delete_domain","description":"Remove a domain from the account. This cannot be undone.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"verify_domain","description":"Trigger domain verification. Checks DNS records or other verification method to confirm domain ownership.\n\nACCESS: needs a Proof account. Authenticate this clie"},{"name":"connect_cloudflare","description":"Connect a Cloudflare API token to a domain for automated DNS record management. Note: the API token will be visible in the AI conversation context.\n\nACCESS: nee"},{"name":"connect_godaddy","description":"Connect GoDaddy API credentials to a domain for automated DNS record management. Note: the API key and secret will be visible in the AI conversation context.\n\nA"},{"name":"connect_dns_provider","description":"Connect a generic DNS provider to a domain using provider-specific credentials. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs"},{"name":"add_verification_provider","description":"Add an additional DNS provider for verification to an already-verified domain. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs "},{"name":"get_dns_providers","description":"Get metadata for all supported DNS providers, including required credential fields and documentation links.\n\nACCESS: needs a Proof account. Authenticate this cl"},{"name":"verify_domain_with_credentials","description":"Verify a pending domain using previously stored DNS credentials. Use when credentials are already connected.\n\nACCESS: needs a Proof account. Authenticate this c"}],"toolCount":171,"toolsHash":"92247bc63c3ba845f5de066ee3996ab134de1e00c8db306c01c5dcd2e5ad18e8","serverName":"proof-holdings","capabilities":["tools"],"serverVersion":"1.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T01:25:02.478Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":110,"error":null,"detail":{"tools":[{"name":"create_verification","description":"Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, "},{"name":"get_verification","description":"Get a verification by ID. Returns the full verification object including status, channel, and proof token if verified.\n\nBefore calling this for a challenge you "},{"name":"list_verifications","description":"List verifications with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate)"},{"name":"trigger_verification","description":"Trigger a DNS/HTTP verification check for a pending domain verification.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"submit_verification_code","description":"Submit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type \"email\", and ty"},{"name":"resend_verification","description":"Resend a verification message (email channel only). Generates and sends a new code.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp "},{"name":"test_verify","description":"Auto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery.\n\nACCESS: needs a Proof account. Authent"},{"name":"list_verified_users","description":"List verified users grouped by external_user_id. Shows all verifications per user.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →"},{"name":"get_verified_user","description":"Get a single verified user and their verifications by external user ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentica"},{"name":"start_domain_verification","description":"Start a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete.\n\nACCESS: needs a Proof account. A"},{"name":"check_domain_verification","description":"Check the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status.\n\nACCESS: needs a Proof account. Authenticate this c"},{"name":"wait_for_verification","description":"Poll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) w"},{"name":"create_multi_channel_verification","description":"Create a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes win"},{"name":"get_multi_channel_verification_status","description":"Get the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one comp"},{"name":"create_verification_request","description":"Create a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow.\n\nACC"},{"name":"get_verification_request","description":"Get a verification request by ID. Returns the request with all its asset verification statuses.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"get_request_proofs","description":"Get proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification.\n\nACCESS: needs a Proof account. "},{"name":"list_verification_requests","description":"List verification requests with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authe"},{"name":"get_request_by_reference","description":"Get a verification request by its reference ID (your unique identifier).\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"cancel_verification_request","description":"Cancel a pending verification request. Only pending requests can be cancelled.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Aut"},{"name":"wait_for_request","description":"Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitt"},{"name":"validate_proof","description":"Validate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the identifi"},{"name":"get_proof_status","description":"Get the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked —"},{"name":"revoke_proof","description":"Revoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer valid"},{"name":"list_revoked_proofs","description":"Get the revocation list for offline proof validation. Returns a signed list of all revoked proof IDs. Reuse a fetched list for up to 5 minutes (its cache lifeti"},{"name":"create_session","description":"Create a new phone verification session. Returns deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Sessions provide a hosted ve"},{"name":"get_session","description":"Get a session by ID. Returns the session status, verification details, and proof token if verified.\n\nACCESS: needs a Proof account. Authenticate this client (Cl"},{"name":"wait_for_session","description":"Poll a session until it reaches a terminal state (verified, failed, or expired). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nBefore calli"},{"name":"list_assets","description":"List all verified assets for the authenticated user. Assets are verified identities (phones, emails, domains).\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"get_asset","description":"Get a single verified asset by ID. Returns details including type, value, status, and verification timestamps.\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"revoke_asset","description":"Revoke a verified asset by ID. The asset will be marked as revoked and associated proofs will no longer validate.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_current_user","description":"Get the signed-in user's account details, plan and settings. Needs a login session: call start_login, then wait_for_login until it reports success. An API key a"},{"name":"list_auth_sessions","description":"List all active authentication sessions for the current user. Shows session details including channel, user agent, and expiry. When called via API key, no sessi"},{"name":"revoke_auth_session","description":"Revoke a specific authentication session by ID. When called via JWT, cannot revoke the current session. When called via API key, any session can be revoked.\n\nAC"},{"name":"get_usage","description":"Get usage metrics for the authenticated account. Shows verification counts, API calls, and quota usage.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"get_platform_summary","description":"Get a one-call account snapshot: quota with end-of-month projection, request health (pending/completed/expired counts + success rate), per-channel completion ra"},{"name":"get_settings","description":"Get account settings: branding (business name, logo, colors, support email, email theme), the outbound webhook endpoint with its event subscriptions, and the de"},{"name":"update_settings","description":"Update account settings: branding, the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. Setting the first webhook endpoin"},{"name":"export_data","description":"Export all account data (GDPR Article 20 - Right to Data Portability). Rate limited to 1 export per 24 hours.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"search","description":"Prefix-anchored global account search across six resource buckets (verification_requests, verifications, hitl, confirmations, authorizations, api_keys). Case-se"},{"name":"get_self_api_key","description":"Get the calling API key's own redacted metadata (id, name, key_prefix, environment, scopes, last_used_at, revoked_at, created_at) for agent self-inspection. Nev"},{"name":"get_api_key_usage","description":"Get per-API-key usage for a given key id: verification counts by type/channel/status, plus verification-request/confirmation/authorization totals, and attributi"},{"name":"list_templates","description":"List all custom message templates for the authenticated account. Returns templates organized by channel and message type.\n\nACCESS: needs a Proof account. Authen"},{"name":"get_default_templates","description":"Get all default message templates. These are the built-in templates used when no custom template is set.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"get_template","description":"Get a specific template by channel and message type. Returns the custom template if set, otherwise the default.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"update_template","description":"Create or update a custom template for a specific channel and message type. Replaces the default template.\n\nACCESS: needs a Proof account. Authenticate this cli"},{"name":"delete_template","description":"Delete a custom template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"preview_template","description":"Preview a template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account. Authent"},{"name":"render_template","description":"Render a template with provided variables. Returns the fully rendered message content.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /m"},{"name":"get_webhook_stats","description":"Get webhook delivery statistics including total deliveries, success/failure counts, and recent activity.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"list_webhook_deliveries","description":"List webhook delivery attempts with pagination and filtering. Shows delivery status, response codes, and timestamps.\n\nACCESS: needs a Proof account. Authenticat"},{"name":"get_webhook_delivery","description":"Get details of a single webhook delivery attempt including request/response payloads and retry history.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"retry_webhook_delivery","description":"Retry a failed webhook delivery. Creates a new delivery attempt with the same payload to the configured endpoint.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_subscription","description":"Get the current subscription details including plan, status, billing period, and usage limits.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"list_profiles","description":"List all profiles for the authenticated account. Returns all profiles including primary and secondary.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"create_profile","description":"Create a new profile with optional display name, bio, avatar, business info, and theme settings.\n\nACCESS: needs a Proof account. Authenticate this client (Claud"},{"name":"get_profile","description":"Get a specific profile by ID. Returns full profile details including theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Aut"},{"name":"update_profile","description":"Update a profile by ID. Supports changing display info, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"delete_profile","description":"Delete a profile by ID. Cannot delete the primary profile if it is the only one.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → A"},{"name":"set_primary_profile","description":"Set a profile as the primary profile. The previous primary profile becomes secondary.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"list_profile_templates","description":"List all templates for a profile. Returns templates organized by channel and message type, merged with defaults.\n\nACCESS: needs a Proof account. Authenticate th"},{"name":"update_profile_template","description":"Create or update a custom template for a specific profile, channel, and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"delete_profile_template","description":"Delete a custom profile template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"preview_profile_template","description":"Preview a profile template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account."},{"name":"update_profile_proofs","description":"Update which verified assets (proofs) are displayed on a specific profile. Controls visibility, privacy masking, ordering, and labels.\n\nACCESS: needs a Proof ac"},{"name":"get_my_profile","description":"Get the current user's primary profile. Returns profile details, theme, custom links, and public proof display settings.\n\nACCESS: needs a Proof account. Authent"},{"name":"update_my_profile","description":"Update the current user's primary profile. Supports display name, bio, avatar, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof ac"},{"name":"get_profile_assets","description":"Get available verified assets that can be displayed on the user's profile. Returns assets eligible for public proof display.\n\nACCESS: needs a Proof account. Aut"},{"name":"list_emails","description":"List all email addresses associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate),"},{"name":"remove_email","description":"Remove an email address from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"set_primary_email","description":"Set an email address as the primary email for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign "},{"name":"start_add_email","description":"Start adding a new email address. Sends an OTP code to the email. Returns a session ID to verify with.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_add_email_status","description":"Check the status of an in-progress email addition by session ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or"},{"name":"verify_email_otp","description":"Submit the OTP code to verify an email addition. Completes the add-email flow if the code is correct.\n\nACCESS: needs a Proof account. Authenticate this client ("},{"name":"resend_email_otp","description":"Resend the OTP code for an in-progress email addition.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in w"},{"name":"list_phones","description":"List all phone numbers associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), o"},{"name":"remove_phone","description":"Remove a phone number from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client (C"},{"name":"set_primary_phone","description":"Set a phone number as the primary phone for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"start_add_phone","description":"Start adding a new phone number by reverse OTP: the user starts the exchange themselves and nothing is sent before they do; the response's `instructions` field "},{"name":"get_add_phone_status","description":"Check the status of an in-progress phone addition by session ID. Poll until terminal state.\n\nBefore calling this for a challenge you created, make sure your rep"},{"name":"list_api_keys","description":"List all API keys for the authenticated account. Returns key metadata (not the secret key values).\n\nACCESS: needs a Proof account. Authenticate this client (Cla"},{"name":"create_api_key","description":"Create a new API key. The secret key value is returned ONLY in this response — store it securely. Note: the secret will be visible in the AI conversation contex"},{"name":"revoke_api_key","description":"Revoke an API key by ID. The key will immediately stop working. This action cannot be undone.\n\nAgent usage: This operation requires 2FA. Before calling, complet"},{"name":"regenerate_api_key","description":"Regenerate an API key: issues a new key (a new id and secret) with the same name, environment, scopes and project. The old key stops working immediately; use th"},{"name":"start_2fa","description":"Start a two-factor authentication challenge for a sensitive operation. Sends a verification code via the chosen channel. Returns a session ID, and for messaging"},{"name":"get_2fa_status","description":"Check the status of a 2FA session by session ID. Returns whether the challenge has been completed, is pending, or has expired.\n\nAgent usage: Poll this after cal"},{"name":"verify_2fa","description":"Submit a verification code to complete a 2FA challenge. Rate limited to 10 attempts per minute.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"verify_2fa_magic_link","description":"Complete a 2FA challenge using a magic link token (received via email). No code submission needed — the token itself is the proof.\n\nACCESS: needs a Proof accoun"},{"name":"wait_for_2fa","description":"Poll a 2FA session until the user completes the challenge. Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nAgent usage: Call this after start"},{"name":"list_domains","description":"List all domains for the authenticated account. Returns domain metadata including verification status.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"add_domain","description":"Add a new domain to verify ownership. Optionally specify email sending intent and verification method.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_domain","description":"Get details of a specific domain by ID, including verification status, DNS records, and provider connections.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"delete_domain","description":"Remove a domain from the account. This cannot be undone.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"verify_domain","description":"Trigger domain verification. Checks DNS records or other verification method to confirm domain ownership.\n\nACCESS: needs a Proof account. Authenticate this clie"},{"name":"connect_cloudflare","description":"Connect a Cloudflare API token to a domain for automated DNS record management. Note: the API token will be visible in the AI conversation context.\n\nACCESS: nee"},{"name":"connect_godaddy","description":"Connect GoDaddy API credentials to a domain for automated DNS record management. Note: the API key and secret will be visible in the AI conversation context.\n\nA"},{"name":"connect_dns_provider","description":"Connect a generic DNS provider to a domain using provider-specific credentials. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs"},{"name":"add_verification_provider","description":"Add an additional DNS provider for verification to an already-verified domain. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs "},{"name":"get_dns_providers","description":"Get metadata for all supported DNS providers, including required credential fields and documentation links.\n\nACCESS: needs a Proof account. Authenticate this cl"},{"name":"verify_domain_with_credentials","description":"Verify a pending domain using previously stored DNS credentials. Use when credentials are already connected.\n\nACCESS: needs a Proof account. Authenticate this c"}],"toolCount":171,"toolsHash":"92247bc63c3ba845f5de066ee3996ab134de1e00c8db306c01c5dcd2e5ad18e8","serverName":"proof-holdings","capabilities":["tools"],"serverVersion":"1.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T19:26:18.430Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":126,"error":null,"detail":{"tools":[{"name":"create_verification","description":"Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, "},{"name":"get_verification","description":"Get a verification by ID. Returns the full verification object including status, channel, and proof token if verified.\n\nBefore calling this for a challenge you "},{"name":"list_verifications","description":"List verifications with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate)"},{"name":"trigger_verification","description":"Trigger a DNS/HTTP verification check for a pending domain verification.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"submit_verification_code","description":"Submit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type \"email\", and ty"},{"name":"resend_verification","description":"Resend a verification message (email channel only). Generates and sends a new code.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp "},{"name":"test_verify","description":"Auto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery.\n\nACCESS: needs a Proof account. Authent"},{"name":"list_verified_users","description":"List verified users grouped by external_user_id. Shows all verifications per user.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →"},{"name":"get_verified_user","description":"Get a single verified user and their verifications by external user ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentica"},{"name":"start_domain_verification","description":"Start a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete.\n\nACCESS: needs a Proof account. A"},{"name":"check_domain_verification","description":"Check the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status.\n\nACCESS: needs a Proof account. Authenticate this c"},{"name":"wait_for_verification","description":"Poll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) w"},{"name":"create_multi_channel_verification","description":"Create a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes win"},{"name":"get_multi_channel_verification_status","description":"Get the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one comp"},{"name":"create_verification_request","description":"Create a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow.\n\nACC"},{"name":"get_verification_request","description":"Get a verification request by ID. Returns the request with all its asset verification statuses.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"get_request_proofs","description":"Get proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification.\n\nACCESS: needs a Proof account. "},{"name":"list_verification_requests","description":"List verification requests with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authe"},{"name":"get_request_by_reference","description":"Get a verification request by its reference ID (your unique identifier).\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"cancel_verification_request","description":"Cancel a pending verification request. Only pending requests can be cancelled.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Aut"},{"name":"wait_for_request","description":"Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitt"},{"name":"validate_proof","description":"Validate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the identifi"},{"name":"get_proof_status","description":"Get the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked —"},{"name":"revoke_proof","description":"Revoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer valid"},{"name":"list_revoked_proofs","description":"Get the revocation list for offline proof validation. Returns a signed list of all revoked proof IDs. Reuse a fetched list for up to 5 minutes (its cache lifeti"},{"name":"create_session","description":"Create a new phone verification session. Returns deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Sessions provide a hosted ve"},{"name":"get_session","description":"Get a session by ID. Returns the session status, verification details, and proof token if verified.\n\nACCESS: needs a Proof account. Authenticate this client (Cl"},{"name":"wait_for_session","description":"Poll a session until it reaches a terminal state (verified, failed, or expired). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nBefore calli"},{"name":"list_assets","description":"List all verified assets for the authenticated user. Assets are verified identities (phones, emails, domains).\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"get_asset","description":"Get a single verified asset by ID. Returns details including type, value, status, and verification timestamps.\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"revoke_asset","description":"Revoke a verified asset by ID. The asset will be marked as revoked and associated proofs will no longer validate.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_current_user","description":"Get the signed-in user's account details, plan and settings. Needs a login session: call start_login, then wait_for_login until it reports success. An API key a"},{"name":"list_auth_sessions","description":"List all active authentication sessions for the current user. Shows session details including channel, user agent, and expiry. When called via API key, no sessi"},{"name":"revoke_auth_session","description":"Revoke a specific authentication session by ID. When called via JWT, cannot revoke the current session. When called via API key, any session can be revoked.\n\nAC"},{"name":"get_usage","description":"Get usage metrics for the authenticated account. Shows verification counts, API calls, and quota usage.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"get_platform_summary","description":"Get a one-call account snapshot: quota with end-of-month projection, request health (pending/completed/expired counts + success rate), per-channel completion ra"},{"name":"get_settings","description":"Get account settings: branding (business name, logo, colors, support email, email theme), the outbound webhook endpoint with its event subscriptions, and the de"},{"name":"update_settings","description":"Update account settings: branding, the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. Setting the first webhook endpoin"},{"name":"export_data","description":"Export all account data (GDPR Article 20 - Right to Data Portability). Rate limited to 1 export per 24 hours.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"search","description":"Prefix-anchored global account search across six resource buckets (verification_requests, verifications, hitl, confirmations, authorizations, api_keys). Case-se"},{"name":"get_self_api_key","description":"Get the calling API key's own redacted metadata (id, name, key_prefix, environment, scopes, last_used_at, revoked_at, created_at) for agent self-inspection. Nev"},{"name":"get_api_key_usage","description":"Get per-API-key usage for a given key id: verification counts by type/channel/status, plus verification-request/confirmation/authorization totals, and attributi"},{"name":"list_templates","description":"List all custom message templates for the authenticated account. Returns templates organized by channel and message type.\n\nACCESS: needs a Proof account. Authen"},{"name":"get_default_templates","description":"Get all default message templates. These are the built-in templates used when no custom template is set.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"get_template","description":"Get a specific template by channel and message type. Returns the custom template if set, otherwise the default.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"update_template","description":"Create or update a custom template for a specific channel and message type. Replaces the default template.\n\nACCESS: needs a Proof account. Authenticate this cli"},{"name":"delete_template","description":"Delete a custom template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"preview_template","description":"Preview a template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account. Authent"},{"name":"render_template","description":"Render a template with provided variables. Returns the fully rendered message content.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /m"},{"name":"get_webhook_stats","description":"Get webhook delivery statistics including total deliveries, success/failure counts, and recent activity.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"list_webhook_deliveries","description":"List webhook delivery attempts with pagination and filtering. Shows delivery status, response codes, and timestamps.\n\nACCESS: needs a Proof account. Authenticat"},{"name":"get_webhook_delivery","description":"Get details of a single webhook delivery attempt including request/response payloads and retry history.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"retry_webhook_delivery","description":"Retry a failed webhook delivery. Creates a new delivery attempt with the same payload to the configured endpoint.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_subscription","description":"Get the current subscription details including plan, status, billing period, and usage limits.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"list_profiles","description":"List all profiles for the authenticated account. Returns all profiles including primary and secondary.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"create_profile","description":"Create a new profile with optional display name, bio, avatar, business info, and theme settings.\n\nACCESS: needs a Proof account. Authenticate this client (Claud"},{"name":"get_profile","description":"Get a specific profile by ID. Returns full profile details including theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Aut"},{"name":"update_profile","description":"Update a profile by ID. Supports changing display info, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"delete_profile","description":"Delete a profile by ID. Cannot delete the primary profile if it is the only one.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → A"},{"name":"set_primary_profile","description":"Set a profile as the primary profile. The previous primary profile becomes secondary.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"list_profile_templates","description":"List all templates for a profile. Returns templates organized by channel and message type, merged with defaults.\n\nACCESS: needs a Proof account. Authenticate th"},{"name":"update_profile_template","description":"Create or update a custom template for a specific profile, channel, and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"delete_profile_template","description":"Delete a custom profile template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"preview_profile_template","description":"Preview a profile template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account."},{"name":"update_profile_proofs","description":"Update which verified assets (proofs) are displayed on a specific profile. Controls visibility, privacy masking, ordering, and labels.\n\nACCESS: needs a Proof ac"},{"name":"get_my_profile","description":"Get the current user's primary profile. Returns profile details, theme, custom links, and public proof display settings.\n\nACCESS: needs a Proof account. Authent"},{"name":"update_my_profile","description":"Update the current user's primary profile. Supports display name, bio, avatar, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof ac"},{"name":"get_profile_assets","description":"Get available verified assets that can be displayed on the user's profile. Returns assets eligible for public proof display.\n\nACCESS: needs a Proof account. Aut"},{"name":"list_emails","description":"List all email addresses associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate),"},{"name":"remove_email","description":"Remove an email address from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"set_primary_email","description":"Set an email address as the primary email for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign "},{"name":"start_add_email","description":"Start adding a new email address. Sends an OTP code to the email. Returns a session ID to verify with.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_add_email_status","description":"Check the status of an in-progress email addition by session ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or"},{"name":"verify_email_otp","description":"Submit the OTP code to verify an email addition. Completes the add-email flow if the code is correct.\n\nACCESS: needs a Proof account. Authenticate this client ("},{"name":"resend_email_otp","description":"Resend the OTP code for an in-progress email addition.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in w"},{"name":"list_phones","description":"List all phone numbers associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), o"},{"name":"remove_phone","description":"Remove a phone number from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client (C"},{"name":"set_primary_phone","description":"Set a phone number as the primary phone for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"start_add_phone","description":"Start adding a new phone number by reverse OTP: the user starts the exchange themselves and nothing is sent before they do; the response's `instructions` field "},{"name":"get_add_phone_status","description":"Check the status of an in-progress phone addition by session ID. Poll until terminal state.\n\nBefore calling this for a challenge you created, make sure your rep"},{"name":"list_api_keys","description":"List all API keys for the authenticated account. Returns key metadata (not the secret key values).\n\nACCESS: needs a Proof account. Authenticate this client (Cla"},{"name":"create_api_key","description":"Create a new API key. The secret key value is returned ONLY in this response — store it securely. Note: the secret will be visible in the AI conversation contex"},{"name":"revoke_api_key","description":"Revoke an API key by ID. The key will immediately stop working. This action cannot be undone.\n\nAgent usage: This operation requires 2FA. Before calling, complet"},{"name":"regenerate_api_key","description":"Regenerate an API key: issues a new key (a new id and secret) with the same name, environment, scopes and project. The old key stops working immediately; use th"},{"name":"start_2fa","description":"Start a two-factor authentication challenge for a sensitive operation. Sends a verification code via the chosen channel. Returns a session ID, and for messaging"},{"name":"get_2fa_status","description":"Check the status of a 2FA session by session ID. Returns whether the challenge has been completed, is pending, or has expired.\n\nAgent usage: Poll this after cal"},{"name":"verify_2fa","description":"Submit a verification code to complete a 2FA challenge. Rate limited to 10 attempts per minute.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"verify_2fa_magic_link","description":"Complete a 2FA challenge using a magic link token (received via email). No code submission needed — the token itself is the proof.\n\nACCESS: needs a Proof accoun"},{"name":"wait_for_2fa","description":"Poll a 2FA session until the user completes the challenge. Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nAgent usage: Call this after start"},{"name":"list_domains","description":"List all domains for the authenticated account. Returns domain metadata including verification status.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"add_domain","description":"Add a new domain to verify ownership. Optionally specify email sending intent and verification method.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_domain","description":"Get details of a specific domain by ID, including verification status, DNS records, and provider connections.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"delete_domain","description":"Remove a domain from the account. This cannot be undone.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"verify_domain","description":"Trigger domain verification. Checks DNS records or other verification method to confirm domain ownership.\n\nACCESS: needs a Proof account. Authenticate this clie"},{"name":"connect_cloudflare","description":"Connect a Cloudflare API token to a domain for automated DNS record management. Note: the API token will be visible in the AI conversation context.\n\nACCESS: nee"},{"name":"connect_godaddy","description":"Connect GoDaddy API credentials to a domain for automated DNS record management. Note: the API key and secret will be visible in the AI conversation context.\n\nA"},{"name":"connect_dns_provider","description":"Connect a generic DNS provider to a domain using provider-specific credentials. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs"},{"name":"add_verification_provider","description":"Add an additional DNS provider for verification to an already-verified domain. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs "},{"name":"get_dns_providers","description":"Get metadata for all supported DNS providers, including required credential fields and documentation links.\n\nACCESS: needs a Proof account. Authenticate this cl"},{"name":"verify_domain_with_credentials","description":"Verify a pending domain using previously stored DNS credentials. Use when credentials are already connected.\n\nACCESS: needs a Proof account. Authenticate this c"}],"toolCount":171,"toolsHash":"92247bc63c3ba845f5de066ee3996ab134de1e00c8db306c01c5dcd2e5ad18e8","serverName":"proof-holdings","capabilities":["tools"],"serverVersion":"1.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T12:29:38.270Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":122,"error":null,"detail":{"tools":[{"name":"create_verification","description":"Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, "},{"name":"get_verification","description":"Get a verification by ID. Returns the full verification object including status, channel, and proof token if verified.\n\nBefore calling this for a challenge you "},{"name":"list_verifications","description":"List verifications with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate)"},{"name":"trigger_verification","description":"Trigger a DNS/HTTP verification check for a pending domain verification.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"submit_verification_code","description":"Submit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type \"email\", and ty"},{"name":"resend_verification","description":"Resend a verification message (email channel only). Generates and sends a new code.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp "},{"name":"test_verify","description":"Auto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery.\n\nACCESS: needs a Proof account. Authent"},{"name":"list_verified_users","description":"List verified users grouped by external_user_id. Shows all verifications per user.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →"},{"name":"get_verified_user","description":"Get a single verified user and their verifications by external user ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentica"},{"name":"start_domain_verification","description":"Start a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete.\n\nACCESS: needs a Proof account. A"},{"name":"check_domain_verification","description":"Check the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status.\n\nACCESS: needs a Proof account. Authenticate this c"},{"name":"wait_for_verification","description":"Poll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) w"},{"name":"create_multi_channel_verification","description":"Create a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes win"},{"name":"get_multi_channel_verification_status","description":"Get the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one comp"},{"name":"create_verification_request","description":"Create a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow.\n\nACC"},{"name":"get_verification_request","description":"Get a verification request by ID. Returns the request with all its asset verification statuses.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"get_request_proofs","description":"Get proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification.\n\nACCESS: needs a Proof account. "},{"name":"list_verification_requests","description":"List verification requests with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authe"},{"name":"get_request_by_reference","description":"Get a verification request by its reference ID (your unique identifier).\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"cancel_verification_request","description":"Cancel a pending verification request. Only pending requests can be cancelled.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Aut"},{"name":"wait_for_request","description":"Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitt"},{"name":"validate_proof","description":"Validate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the identifi"},{"name":"get_proof_status","description":"Get the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked —"},{"name":"revoke_proof","description":"Revoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer valid"},{"name":"list_revoked_proofs","description":"Get the revocation list for offline proof validation. Returns a signed list of all revoked proof IDs. Reuse a fetched list for up to 5 minutes (its cache lifeti"},{"name":"create_session","description":"Create a new phone verification session. Returns deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Sessions provide a hosted ve"},{"name":"get_session","description":"Get a session by ID. Returns the session status, verification details, and proof token if verified.\n\nACCESS: needs a Proof account. Authenticate this client (Cl"},{"name":"wait_for_session","description":"Poll a session until it reaches a terminal state (verified, failed, or expired). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nBefore calli"},{"name":"list_assets","description":"List all verified assets for the authenticated user. Assets are verified identities (phones, emails, domains).\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"get_asset","description":"Get a single verified asset by ID. Returns details including type, value, status, and verification timestamps.\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"revoke_asset","description":"Revoke a verified asset by ID. The asset will be marked as revoked and associated proofs will no longer validate.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_current_user","description":"Get the signed-in user's account details, plan and settings. Needs a login session: call start_login, then wait_for_login until it reports success. An API key a"},{"name":"list_auth_sessions","description":"List all active authentication sessions for the current user. Shows session details including channel, user agent, and expiry. When called via API key, no sessi"},{"name":"revoke_auth_session","description":"Revoke a specific authentication session by ID. When called via JWT, cannot revoke the current session. When called via API key, any session can be revoked.\n\nAC"},{"name":"get_usage","description":"Get usage metrics for the authenticated account. Shows verification counts, API calls, and quota usage.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"get_platform_summary","description":"Get a one-call account snapshot: quota with end-of-month projection, request health (pending/completed/expired counts + success rate), per-channel completion ra"},{"name":"get_settings","description":"Get account settings: branding (business name, logo, colors, support email, email theme), the outbound webhook endpoint with its event subscriptions, and the de"},{"name":"update_settings","description":"Update account settings: branding, the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. Setting the first webhook endpoin"},{"name":"export_data","description":"Export all account data (GDPR Article 20 - Right to Data Portability). Rate limited to 1 export per 24 hours.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"search","description":"Prefix-anchored global account search across six resource buckets (verification_requests, verifications, hitl, confirmations, authorizations, api_keys). Case-se"},{"name":"get_self_api_key","description":"Get the calling API key's own redacted metadata (id, name, key_prefix, environment, scopes, last_used_at, revoked_at, created_at) for agent self-inspection. Nev"},{"name":"get_api_key_usage","description":"Get per-API-key usage for a given key id: verification counts by type/channel/status, plus verification-request/confirmation/authorization totals, and attributi"},{"name":"list_templates","description":"List all custom message templates for the authenticated account. Returns templates organized by channel and message type.\n\nACCESS: needs a Proof account. Authen"},{"name":"get_default_templates","description":"Get all default message templates. These are the built-in templates used when no custom template is set.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"get_template","description":"Get a specific template by channel and message type. Returns the custom template if set, otherwise the default.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"update_template","description":"Create or update a custom template for a specific channel and message type. Replaces the default template.\n\nACCESS: needs a Proof account. Authenticate this cli"},{"name":"delete_template","description":"Delete a custom template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"preview_template","description":"Preview a template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account. Authent"},{"name":"render_template","description":"Render a template with provided variables. Returns the fully rendered message content.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /m"},{"name":"get_webhook_stats","description":"Get webhook delivery statistics including total deliveries, success/failure counts, and recent activity.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"list_webhook_deliveries","description":"List webhook delivery attempts with pagination and filtering. Shows delivery status, response codes, and timestamps.\n\nACCESS: needs a Proof account. Authenticat"},{"name":"get_webhook_delivery","description":"Get details of a single webhook delivery attempt including request/response payloads and retry history.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"retry_webhook_delivery","description":"Retry a failed webhook delivery. Creates a new delivery attempt with the same payload to the configured endpoint.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_subscription","description":"Get the current subscription details including plan, status, billing period, and usage limits.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"list_profiles","description":"List all profiles for the authenticated account. Returns all profiles including primary and secondary.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"create_profile","description":"Create a new profile with optional display name, bio, avatar, business info, and theme settings.\n\nACCESS: needs a Proof account. Authenticate this client (Claud"},{"name":"get_profile","description":"Get a specific profile by ID. Returns full profile details including theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Aut"},{"name":"update_profile","description":"Update a profile by ID. Supports changing display info, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"delete_profile","description":"Delete a profile by ID. Cannot delete the primary profile if it is the only one.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → A"},{"name":"set_primary_profile","description":"Set a profile as the primary profile. The previous primary profile becomes secondary.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"list_profile_templates","description":"List all templates for a profile. Returns templates organized by channel and message type, merged with defaults.\n\nACCESS: needs a Proof account. Authenticate th"},{"name":"update_profile_template","description":"Create or update a custom template for a specific profile, channel, and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"delete_profile_template","description":"Delete a custom profile template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"preview_profile_template","description":"Preview a profile template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account."},{"name":"update_profile_proofs","description":"Update which verified assets (proofs) are displayed on a specific profile. Controls visibility, privacy masking, ordering, and labels.\n\nACCESS: needs a Proof ac"},{"name":"get_my_profile","description":"Get the current user's primary profile. Returns profile details, theme, custom links, and public proof display settings.\n\nACCESS: needs a Proof account. Authent"},{"name":"update_my_profile","description":"Update the current user's primary profile. Supports display name, bio, avatar, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof ac"},{"name":"get_profile_assets","description":"Get available verified assets that can be displayed on the user's profile. Returns assets eligible for public proof display.\n\nACCESS: needs a Proof account. Aut"},{"name":"list_emails","description":"List all email addresses associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate),"},{"name":"remove_email","description":"Remove an email address from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"set_primary_email","description":"Set an email address as the primary email for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign "},{"name":"start_add_email","description":"Start adding a new email address. Sends an OTP code to the email. Returns a session ID to verify with.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_add_email_status","description":"Check the status of an in-progress email addition by session ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or"},{"name":"verify_email_otp","description":"Submit the OTP code to verify an email addition. Completes the add-email flow if the code is correct.\n\nACCESS: needs a Proof account. Authenticate this client ("},{"name":"resend_email_otp","description":"Resend the OTP code for an in-progress email addition.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in w"},{"name":"list_phones","description":"List all phone numbers associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), o"},{"name":"remove_phone","description":"Remove a phone number from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client (C"},{"name":"set_primary_phone","description":"Set a phone number as the primary phone for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"start_add_phone","description":"Start adding a new phone number by reverse OTP: the user starts the exchange themselves and nothing is sent before they do; the response's `instructions` field "},{"name":"get_add_phone_status","description":"Check the status of an in-progress phone addition by session ID. Poll until terminal state.\n\nBefore calling this for a challenge you created, make sure your rep"},{"name":"list_api_keys","description":"List all API keys for the authenticated account. Returns key metadata (not the secret key values).\n\nACCESS: needs a Proof account. Authenticate this client (Cla"},{"name":"create_api_key","description":"Create a new API key. The secret key value is returned ONLY in this response — store it securely. Note: the secret will be visible in the AI conversation contex"},{"name":"revoke_api_key","description":"Revoke an API key by ID. The key will immediately stop working. This action cannot be undone.\n\nAgent usage: This operation requires 2FA. Before calling, complet"},{"name":"regenerate_api_key","description":"Regenerate an API key: issues a new key (a new id and secret) with the same name, environment, scopes and project. The old key stops working immediately; use th"},{"name":"start_2fa","description":"Start a two-factor authentication challenge for a sensitive operation. Sends a verification code via the chosen channel. Returns a session ID, and for messaging"},{"name":"get_2fa_status","description":"Check the status of a 2FA session by session ID. Returns whether the challenge has been completed, is pending, or has expired.\n\nAgent usage: Poll this after cal"},{"name":"verify_2fa","description":"Submit a verification code to complete a 2FA challenge. Rate limited to 10 attempts per minute.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"verify_2fa_magic_link","description":"Complete a 2FA challenge using a magic link token (received via email). No code submission needed — the token itself is the proof.\n\nACCESS: needs a Proof accoun"},{"name":"wait_for_2fa","description":"Poll a 2FA session until the user completes the challenge. Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nAgent usage: Call this after start"},{"name":"list_domains","description":"List all domains for the authenticated account. Returns domain metadata including verification status.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"add_domain","description":"Add a new domain to verify ownership. Optionally specify email sending intent and verification method.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_domain","description":"Get details of a specific domain by ID, including verification status, DNS records, and provider connections.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"delete_domain","description":"Remove a domain from the account. This cannot be undone.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"verify_domain","description":"Trigger domain verification. Checks DNS records or other verification method to confirm domain ownership.\n\nACCESS: needs a Proof account. Authenticate this clie"},{"name":"connect_cloudflare","description":"Connect a Cloudflare API token to a domain for automated DNS record management. Note: the API token will be visible in the AI conversation context.\n\nACCESS: nee"},{"name":"connect_godaddy","description":"Connect GoDaddy API credentials to a domain for automated DNS record management. Note: the API key and secret will be visible in the AI conversation context.\n\nA"},{"name":"connect_dns_provider","description":"Connect a generic DNS provider to a domain using provider-specific credentials. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs"},{"name":"add_verification_provider","description":"Add an additional DNS provider for verification to an already-verified domain. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs "},{"name":"get_dns_providers","description":"Get metadata for all supported DNS providers, including required credential fields and documentation links.\n\nACCESS: needs a Proof account. Authenticate this cl"},{"name":"verify_domain_with_credentials","description":"Verify a pending domain using previously stored DNS credentials. Use when credentials are already connected.\n\nACCESS: needs a Proof account. Authenticate this c"}],"toolCount":171,"toolsHash":"92247bc63c3ba845f5de066ee3996ab134de1e00c8db306c01c5dcd2e5ad18e8","serverName":"proof-holdings","capabilities":["tools"],"serverVersion":"1.3.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T06:21:48.216Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":128,"error":null,"detail":{"tools":[{"name":"create_verification","description":"Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, "},{"name":"get_verification","description":"Get a verification by ID. Returns the full verification object including status, channel, and proof token if verified.\n\nBefore calling this for a challenge you "},{"name":"list_verifications","description":"List verifications with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate)"},{"name":"trigger_verification","description":"Trigger a DNS/HTTP verification check for a pending domain verification.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"submit_verification_code","description":"Submit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type \"email\", and ty"},{"name":"resend_verification","description":"Resend a verification message (email channel only). Generates and sends a new code.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp "},{"name":"test_verify","description":"Auto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery.\n\nACCESS: needs a Proof account. Authent"},{"name":"list_verified_users","description":"List verified users grouped by external_user_id. Shows all verifications per user.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →"},{"name":"get_verified_user","description":"Get a single verified user and their verifications by external user ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentica"},{"name":"start_domain_verification","description":"Start a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete.\n\nACCESS: needs a Proof account. A"},{"name":"check_domain_verification","description":"Check the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status.\n\nACCESS: needs a Proof account. Authenticate this c"},{"name":"wait_for_verification","description":"Poll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) w"},{"name":"create_multi_channel_verification","description":"Create a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes win"},{"name":"get_multi_channel_verification_status","description":"Get the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one comp"},{"name":"create_verification_request","description":"Create a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow.\n\nACC"},{"name":"get_verification_request","description":"Get a verification request by ID. Returns the request with all its asset verification statuses.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"get_request_proofs","description":"Get proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification.\n\nACCESS: needs a Proof account. "},{"name":"list_verification_requests","description":"List verification requests with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authe"},{"name":"get_request_by_reference","description":"Get a verification request by its reference ID (your unique identifier).\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"cancel_verification_request","description":"Cancel a pending verification request. Only pending requests can be cancelled.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Aut"},{"name":"wait_for_request","description":"Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitt"},{"name":"validate_proof","description":"Validate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the identifi"},{"name":"get_proof_status","description":"Get the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked —"},{"name":"revoke_proof","description":"Revoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer valid"},{"name":"list_revoked_proofs","description":"Get the revocation list for offline proof validation. Returns a signed list of all revoked proof IDs. Reuse a fetched list for up to 5 minutes (its cache lifeti"},{"name":"create_session","description":"Create a new phone verification session. Returns deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Sessions provide a hosted ve"},{"name":"get_session","description":"Get a session by ID. Returns the session status, verification details, and proof token if verified.\n\nACCESS: needs a Proof account. Authenticate this client (Cl"},{"name":"wait_for_session","description":"Poll a session until it reaches a terminal state (verified, failed, or expired). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nBefore calli"},{"name":"list_assets","description":"List all verified assets for the authenticated user. Assets are verified identities (phones, emails, domains).\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"get_asset","description":"Get a single verified asset by ID. Returns details including type, value, status, and verification timestamps.\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"revoke_asset","description":"Revoke a verified asset by ID. The asset will be marked as revoked and associated proofs will no longer validate.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_current_user","description":"Get the signed-in user's account details, plan and settings. Needs a login session: call start_login, then wait_for_login until it reports success. An API key a"},{"name":"list_auth_sessions","description":"List all active authentication sessions for the current user. Shows session details including channel, user agent, and expiry. When called via API key, no sessi"},{"name":"revoke_auth_session","description":"Revoke a specific authentication session by ID. When called via JWT, cannot revoke the current session. When called via API key, any session can be revoked.\n\nAC"},{"name":"get_usage","description":"Get usage metrics for the authenticated account. Shows verification counts, API calls, and quota usage.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"get_platform_summary","description":"Get a one-call account snapshot: quota with end-of-month projection, request health (pending/completed/expired counts + success rate), per-channel completion ra"},{"name":"get_settings","description":"Get account settings: branding (business name, logo, colors, support email, email theme), the outbound webhook endpoint with its event subscriptions, and the de"},{"name":"update_settings","description":"Update account settings: branding, the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. Setting the first webhook endpoin"},{"name":"export_data","description":"Export all account data (GDPR Article 20 - Right to Data Portability). Rate limited to 1 export per 24 hours.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"search","description":"Prefix-anchored global account search across six resource buckets (verification_requests, verifications, hitl, confirmations, authorizations, api_keys). Case-se"},{"name":"get_self_api_key","description":"Get the calling API key's own redacted metadata (id, name, key_prefix, environment, scopes, last_used_at, revoked_at, created_at) for agent self-inspection. Nev"},{"name":"get_api_key_usage","description":"Get per-API-key usage for a given key id: verification counts by type/channel/status, plus verification-request/confirmation/authorization totals, and attributi"},{"name":"list_templates","description":"List all custom message templates for the authenticated account. Returns templates organized by channel and message type.\n\nACCESS: needs a Proof account. Authen"},{"name":"get_default_templates","description":"Get all default message templates. These are the built-in templates used when no custom template is set.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"get_template","description":"Get a specific template by channel and message type. Returns the custom template if set, otherwise the default.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"update_template","description":"Create or update a custom template for a specific channel and message type. Replaces the default template.\n\nACCESS: needs a Proof account. Authenticate this cli"},{"name":"delete_template","description":"Delete a custom template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"preview_template","description":"Preview a template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account. Authent"},{"name":"render_template","description":"Render a template with provided variables. Returns the fully rendered message content.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /m"},{"name":"get_webhook_stats","description":"Get webhook delivery statistics including total deliveries, success/failure counts, and recent activity.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"list_webhook_deliveries","description":"List webhook delivery attempts with pagination and filtering. Shows delivery status, response codes, and timestamps.\n\nACCESS: needs a Proof account. Authenticat"},{"name":"get_webhook_delivery","description":"Get details of a single webhook delivery attempt including request/response payloads and retry history.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"retry_webhook_delivery","description":"Retry a failed webhook delivery. Creates a new delivery attempt with the same payload to the configured endpoint.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_subscription","description":"Get the current subscription details including plan, status, billing period, and usage limits.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"list_profiles","description":"List all profiles for the authenticated account. Returns all profiles including primary and secondary.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"create_profile","description":"Create a new profile with optional display name, bio, avatar, business info, and theme settings.\n\nACCESS: needs a Proof account. Authenticate this client (Claud"},{"name":"get_profile","description":"Get a specific profile by ID. Returns full profile details including theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Aut"},{"name":"update_profile","description":"Update a profile by ID. Supports changing display info, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"delete_profile","description":"Delete a profile by ID. Cannot delete the primary profile if it is the only one.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → A"},{"name":"set_primary_profile","description":"Set a profile as the primary profile. The previous primary profile becomes secondary.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"list_profile_templates","description":"List all templates for a profile. Returns templates organized by channel and message type, merged with defaults.\n\nACCESS: needs a Proof account. Authenticate th"},{"name":"update_profile_template","description":"Create or update a custom template for a specific profile, channel, and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"delete_profile_template","description":"Delete a custom profile template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"preview_profile_template","description":"Preview a profile template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account."},{"name":"update_profile_proofs","description":"Update which verified assets (proofs) are displayed on a specific profile. Controls visibility, privacy masking, ordering, and labels.\n\nACCESS: needs a Proof ac"},{"name":"get_my_profile","description":"Get the current user's primary profile. Returns profile details, theme, custom links, and public proof display settings.\n\nACCESS: needs a Proof account. Authent"},{"name":"update_my_profile","description":"Update the current user's primary profile. Supports display name, bio, avatar, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof ac"},{"name":"get_profile_assets","description":"Get available verified assets that can be displayed on the user's profile. Returns assets eligible for public proof display.\n\nACCESS: needs a Proof account. Aut"},{"name":"list_emails","description":"List all email addresses associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate),"},{"name":"remove_email","description":"Remove an email address from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"set_primary_email","description":"Set an email address as the primary email for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign "},{"name":"start_add_email","description":"Start adding a new email address. Sends an OTP code to the email. Returns a session ID to verify with.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_add_email_status","description":"Check the status of an in-progress email addition by session ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or"},{"name":"verify_email_otp","description":"Submit the OTP code to verify an email addition. Completes the add-email flow if the code is correct.\n\nACCESS: needs a Proof account. Authenticate this client ("},{"name":"resend_email_otp","description":"Resend the OTP code for an in-progress email addition.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in w"},{"name":"list_phones","description":"List all phone numbers associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), o"},{"name":"remove_phone","description":"Remove a phone number from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client (C"},{"name":"set_primary_phone","description":"Set a phone number as the primary phone for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"start_add_phone","description":"Start adding a new phone number by reverse OTP: the user starts the exchange themselves and nothing is sent before they do; the response's `instructions` field "},{"name":"get_add_phone_status","description":"Check the status of an in-progress phone addition by session ID. Poll until terminal state.\n\nBefore calling this for a challenge you created, make sure your rep"},{"name":"list_api_keys","description":"List all API keys for the authenticated account. Returns key metadata (not the secret key values).\n\nACCESS: needs a Proof account. Authenticate this client (Cla"},{"name":"create_api_key","description":"Create a new API key. The secret key value is returned ONLY in this response — store it securely. Note: the secret will be visible in the AI conversation contex"},{"name":"revoke_api_key","description":"Revoke an API key by ID. The key will immediately stop working. This action cannot be undone.\n\nAgent usage: This operation requires 2FA. Before calling, complet"},{"name":"regenerate_api_key","description":"Regenerate an API key: issues a new key (a new id and secret) with the same name, environment, scopes and project. The old key stops working immediately; use th"},{"name":"start_2fa","description":"Start a two-factor authentication challenge for a sensitive operation. Sends a verification code via the chosen channel. Returns a session ID, and for messaging"},{"name":"get_2fa_status","description":"Check the status of a 2FA session by session ID. Returns whether the challenge has been completed, is pending, or has expired.\n\nAgent usage: Poll this after cal"},{"name":"verify_2fa","description":"Submit a verification code to complete a 2FA challenge. Rate limited to 10 attempts per minute.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"verify_2fa_magic_link","description":"Complete a 2FA challenge using a magic link token (received via email). No code submission needed — the token itself is the proof.\n\nACCESS: needs a Proof accoun"},{"name":"wait_for_2fa","description":"Poll a 2FA session until the user completes the challenge. Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nAgent usage: Call this after start"},{"name":"list_domains","description":"List all domains for the authenticated account. Returns domain metadata including verification status.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"add_domain","description":"Add a new domain to verify ownership. Optionally specify email sending intent and verification method.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_domain","description":"Get details of a specific domain by ID, including verification status, DNS records, and provider connections.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"delete_domain","description":"Remove a domain from the account. This cannot be undone.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"verify_domain","description":"Trigger domain verification. Checks DNS records or other verification method to confirm domain ownership.\n\nACCESS: needs a Proof account. Authenticate this clie"},{"name":"connect_cloudflare","description":"Connect a Cloudflare API token to a domain for automated DNS record management. Note: the API token will be visible in the AI conversation context.\n\nACCESS: nee"},{"name":"connect_godaddy","description":"Connect GoDaddy API credentials to a domain for automated DNS record management. Note: the API key and secret will be visible in the AI conversation context.\n\nA"},{"name":"connect_dns_provider","description":"Connect a generic DNS provider to a domain using provider-specific credentials. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs"},{"name":"add_verification_provider","description":"Add an additional DNS provider for verification to an already-verified domain. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs "},{"name":"get_dns_providers","description":"Get metadata for all supported DNS providers, including required credential fields and documentation links.\n\nACCESS: needs a Proof account. Authenticate this cl"},{"name":"verify_domain_with_credentials","description":"Verify a pending domain using previously stored DNS credentials. Use when credentials are already connected.\n\nACCESS: needs a Proof account. Authenticate this c"}],"toolCount":171,"toolsHash":"92247bc63c3ba845f5de066ee3996ab134de1e00c8db306c01c5dcd2e5ad18e8","serverName":"proof-holdings","capabilities":["tools"],"serverVersion":"1.3.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"create_verification","description":"Create a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, "},{"name":"get_verification","description":"Get a verification by ID. Returns the full verification object including status, channel, and proof token if verified.\n\nBefore calling this for a challenge you "},{"name":"list_verifications","description":"List verifications with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate)"},{"name":"trigger_verification","description":"Trigger a DNS/HTTP verification check for a pending domain verification.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"submit_verification_code","description":"Submit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type \"email\", and ty"},{"name":"resend_verification","description":"Resend a verification message (email channel only). Generates and sends a new code.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp "},{"name":"test_verify","description":"Auto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery.\n\nACCESS: needs a Proof account. Authent"},{"name":"list_verified_users","description":"List verified users grouped by external_user_id. Shows all verifications per user.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp →"},{"name":"get_verified_user","description":"Get a single verified user and their verifications by external user ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentica"},{"name":"start_domain_verification","description":"Start a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete.\n\nACCESS: needs a Proof account. A"},{"name":"check_domain_verification","description":"Check the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status.\n\nACCESS: needs a Proof account. Authenticate this c"},{"name":"wait_for_verification","description":"Poll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) w"},{"name":"create_multi_channel_verification","description":"Create a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes win"},{"name":"get_multi_channel_verification_status","description":"Get the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one comp"},{"name":"create_verification_request","description":"Create a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow.\n\nACC"},{"name":"get_verification_request","description":"Get a verification request by ID. Returns the request with all its asset verification statuses.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"get_request_proofs","description":"Get proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification.\n\nACCESS: needs a Proof account. "},{"name":"list_verification_requests","description":"List verification requests with optional filters. Returns paginated results.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authe"},{"name":"get_request_by_reference","description":"Get a verification request by its reference ID (your unique identifier).\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authentic"},{"name":"cancel_verification_request","description":"Cancel a pending verification request. Only pending requests can be cancelled.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Aut"},{"name":"wait_for_request","description":"Poll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitt"},{"name":"validate_proof","description":"Validate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the identifi"},{"name":"get_proof_status","description":"Get the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked —"},{"name":"revoke_proof","description":"Revoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer valid"},{"name":"list_revoked_proofs","description":"Get the revocation list for offline proof validation. Returns a signed list of all revoked proof IDs. Reuse a fetched list for up to 5 minutes (its cache lifeti"},{"name":"create_session","description":"Create a new phone verification session. Returns deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Sessions provide a hosted ve"},{"name":"get_session","description":"Get a session by ID. Returns the session status, verification details, and proof token if verified.\n\nACCESS: needs a Proof account. Authenticate this client (Cl"},{"name":"wait_for_session","description":"Poll a session until it reaches a terminal state (verified, failed, or expired). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nBefore calli"},{"name":"list_assets","description":"List all verified assets for the authenticated user. Assets are verified identities (phones, emails, domains).\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"get_asset","description":"Get a single verified asset by ID. Returns details including type, value, status, and verification timestamps.\n\nACCESS: needs a Proof account. Authenticate this"},{"name":"revoke_asset","description":"Revoke a verified asset by ID. The asset will be marked as revoked and associated proofs will no longer validate.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_current_user","description":"Get the signed-in user's account details, plan and settings. Needs a login session: call start_login, then wait_for_login until it reports success. An API key a"},{"name":"list_auth_sessions","description":"List all active authentication sessions for the current user. Shows session details including channel, user agent, and expiry. When called via API key, no sessi"},{"name":"revoke_auth_session","description":"Revoke a specific authentication session by ID. When called via JWT, cannot revoke the current session. When called via API key, any session can be revoked.\n\nAC"},{"name":"get_usage","description":"Get usage metrics for the authenticated account. Shows verification counts, API calls, and quota usage.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"get_platform_summary","description":"Get a one-call account snapshot: quota with end-of-month projection, request health (pending/completed/expired counts + success rate), per-channel completion ra"},{"name":"get_settings","description":"Get account settings: branding (business name, logo, colors, support email, email theme), the outbound webhook endpoint with its event subscriptions, and the de"},{"name":"update_settings","description":"Update account settings: branding, the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. Setting the first webhook endpoin"},{"name":"export_data","description":"Export all account data (GDPR Article 20 - Right to Data Portability). Rate limited to 1 export per 24 hours.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"search","description":"Prefix-anchored global account search across six resource buckets (verification_requests, verifications, hitl, confirmations, authorizations, api_keys). Case-se"},{"name":"get_self_api_key","description":"Get the calling API key's own redacted metadata (id, name, key_prefix, environment, scopes, last_used_at, revoked_at, created_at) for agent self-inspection. Nev"},{"name":"get_api_key_usage","description":"Get per-API-key usage for a given key id: verification counts by type/channel/status, plus verification-request/confirmation/authorization totals, and attributi"},{"name":"list_templates","description":"List all custom message templates for the authenticated account. Returns templates organized by channel and message type.\n\nACCESS: needs a Proof account. Authen"},{"name":"get_default_templates","description":"Get all default message templates. These are the built-in templates used when no custom template is set.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"get_template","description":"Get a specific template by channel and message type. Returns the custom template if set, otherwise the default.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"update_template","description":"Create or update a custom template for a specific channel and message type. Replaces the default template.\n\nACCESS: needs a Proof account. Authenticate this cli"},{"name":"delete_template","description":"Delete a custom template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"preview_template","description":"Preview a template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account. Authent"},{"name":"render_template","description":"Render a template with provided variables. Returns the fully rendered message content.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /m"},{"name":"get_webhook_stats","description":"Get webhook delivery statistics including total deliveries, success/failure counts, and recent activity.\n\nACCESS: needs a Proof account. Authenticate this clien"},{"name":"list_webhook_deliveries","description":"List webhook delivery attempts with pagination and filtering. Shows delivery status, response codes, and timestamps.\n\nACCESS: needs a Proof account. Authenticat"},{"name":"get_webhook_delivery","description":"Get details of a single webhook delivery attempt including request/response payloads and retry history.\n\nACCESS: needs a Proof account. Authenticate this client"},{"name":"retry_webhook_delivery","description":"Retry a failed webhook delivery. Creates a new delivery attempt with the same payload to the configured endpoint.\n\nACCESS: needs a Proof account. Authenticate t"},{"name":"get_subscription","description":"Get the current subscription details including plan, status, billing period, and usage limits.\n\nACCESS: needs a Proof account. Authenticate this client (Claude "},{"name":"list_profiles","description":"List all profiles for the authenticated account. Returns all profiles including primary and secondary.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"create_profile","description":"Create a new profile with optional display name, bio, avatar, business info, and theme settings.\n\nACCESS: needs a Proof account. Authenticate this client (Claud"},{"name":"get_profile","description":"Get a specific profile by ID. Returns full profile details including theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Aut"},{"name":"update_profile","description":"Update a profile by ID. Supports changing display info, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof account. Authenticate thi"},{"name":"delete_profile","description":"Delete a profile by ID. Cannot delete the primary profile if it is the only one.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → A"},{"name":"set_primary_profile","description":"Set a profile as the primary profile. The previous primary profile becomes secondary.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"list_profile_templates","description":"List all templates for a profile. Returns templates organized by channel and message type, merged with defaults.\n\nACCESS: needs a Proof account. Authenticate th"},{"name":"update_profile_template","description":"Create or update a custom template for a specific profile, channel, and message type.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mc"},{"name":"delete_profile_template","description":"Delete a custom profile template, reverting to the default template for that channel and message type.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"preview_profile_template","description":"Preview a profile template with sample data before saving. Shows how the message will look with placeholder variables filled in.\n\nACCESS: needs a Proof account."},{"name":"update_profile_proofs","description":"Update which verified assets (proofs) are displayed on a specific profile. Controls visibility, privacy masking, ordering, and labels.\n\nACCESS: needs a Proof ac"},{"name":"get_my_profile","description":"Get the current user's primary profile. Returns profile details, theme, custom links, and public proof display settings.\n\nACCESS: needs a Proof account. Authent"},{"name":"update_my_profile","description":"Update the current user's primary profile. Supports display name, bio, avatar, theme, custom links, and verification display settings.\n\nACCESS: needs a Proof ac"},{"name":"get_profile_assets","description":"Get available verified assets that can be displayed on the user's profile. Returns assets eligible for public proof display.\n\nACCESS: needs a Proof account. Aut"},{"name":"list_emails","description":"List all email addresses associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate),"},{"name":"remove_email","description":"Remove an email address from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"set_primary_email","description":"Set an email address as the primary email for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign "},{"name":"start_add_email","description":"Start adding a new email address. Sends an OTP code to the email. Returns a session ID to verify with.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_add_email_status","description":"Check the status of an in-progress email addition by session ID.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or"},{"name":"verify_email_otp","description":"Submit the OTP code to verify an email addition. Completes the add-email flow if the code is correct.\n\nACCESS: needs a Proof account. Authenticate this client ("},{"name":"resend_email_otp","description":"Resend the OTP code for an in-progress email addition.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in w"},{"name":"list_phones","description":"List all phone numbers associated with the authenticated account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), o"},{"name":"remove_phone","description":"Remove a phone number from the account by ID. May require 2FA verification for sensitive operations.\n\nACCESS: needs a Proof account. Authenticate this client (C"},{"name":"set_primary_phone","description":"Set a phone number as the primary phone for the account.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"start_add_phone","description":"Start adding a new phone number by reverse OTP: the user starts the exchange themselves and nothing is sent before they do; the response's `instructions` field "},{"name":"get_add_phone_status","description":"Check the status of an in-progress phone addition by session ID. Poll until terminal state.\n\nBefore calling this for a challenge you created, make sure your rep"},{"name":"list_api_keys","description":"List all API keys for the authenticated account. Returns key metadata (not the secret key values).\n\nACCESS: needs a Proof account. Authenticate this client (Cla"},{"name":"create_api_key","description":"Create a new API key. The secret key value is returned ONLY in this response — store it securely. Note: the secret will be visible in the AI conversation contex"},{"name":"revoke_api_key","description":"Revoke an API key by ID. The key will immediately stop working. This action cannot be undone.\n\nAgent usage: This operation requires 2FA. Before calling, complet"},{"name":"regenerate_api_key","description":"Regenerate an API key: issues a new key (a new id and secret) with the same name, environment, scopes and project. The old key stops working immediately; use th"},{"name":"start_2fa","description":"Start a two-factor authentication challenge for a sensitive operation. Sends a verification code via the chosen channel. Returns a session ID, and for messaging"},{"name":"get_2fa_status","description":"Check the status of a 2FA session by session ID. Returns whether the challenge has been completed, is pending, or has expired.\n\nAgent usage: Poll this after cal"},{"name":"verify_2fa","description":"Submit a verification code to complete a 2FA challenge. Rate limited to 10 attempts per minute.\n\nACCESS: needs a Proof account. Authenticate this client (Claude"},{"name":"verify_2fa_magic_link","description":"Complete a 2FA challenge using a magic link token (received via email). No code submission needed — the token itself is the proof.\n\nACCESS: needs a Proof accoun"},{"name":"wait_for_2fa","description":"Poll a 2FA session until the user completes the challenge. Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter.\n\nAgent usage: Call this after start"},{"name":"list_domains","description":"List all domains for the authenticated account. Returns domain metadata including verification status.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"add_domain","description":"Add a new domain to verify ownership. Optionally specify email sending intent and verification method.\n\nACCESS: needs a Proof account. Authenticate this client "},{"name":"get_domain","description":"Get details of a specific domain by ID, including verification status, DNS records, and provider connections.\n\nACCESS: needs a Proof account. Authenticate this "},{"name":"delete_domain","description":"Remove a domain from the account. This cannot be undone.\n\nACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in"},{"name":"verify_domain","description":"Trigger domain verification. Checks DNS records or other verification method to confirm domain ownership.\n\nACCESS: needs a Proof account. Authenticate this clie"},{"name":"connect_cloudflare","description":"Connect a Cloudflare API token to a domain for automated DNS record management. Note: the API token will be visible in the AI conversation context.\n\nACCESS: nee"},{"name":"connect_godaddy","description":"Connect GoDaddy API credentials to a domain for automated DNS record management. Note: the API key and secret will be visible in the AI conversation context.\n\nA"},{"name":"connect_dns_provider","description":"Connect a generic DNS provider to a domain using provider-specific credentials. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs"},{"name":"add_verification_provider","description":"Add an additional DNS provider for verification to an already-verified domain. Note: credentials will be visible in the AI conversation context.\n\nACCESS: needs "},{"name":"get_dns_providers","description":"Get metadata for all supported DNS providers, including required credential fields and documentation links.\n\nACCESS: needs a Proof account. Authenticate this cl"},{"name":"verify_domain_with_credentials","description":"Verify a pending domain using previously stored DNS credentials. Use when credentials are already connected.\n\nACCESS: needs a Proof account. Authenticate this c"}],"package":{"name":"@proof-holdings/mcp-server","registry":"npm","observedAt":"2026-10-11T15:25:56.837Z","publishedAt":"2026-10-09T08:12:02.902Z","latestVersion":"1.4.0","weeklyDownloads":228},"toolSurface":{"id":"ts_tjk7tw3qufsq","endpointId":"ep_6hzjets6e245","hash":"92247bc63c3ba845f5de066ee3996ab134de1e00c8db306c01c5dcd2e5ad18e8","toolCount":171,"serverName":"proof-holdings","serverVersion":"1.3.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-08T16:28:42.559Z","lastSeenAt":"2026-10-11T15:23:55.150Z","observations":12,"toolNames":["create_verification","get_verification","list_verifications","trigger_verification","submit_verification_code","resend_verification","test_verify","list_verified_users","get_verified_user","start_domain_verification","check_domain_verification","wait_for_verification","create_multi_channel_verification","get_multi_channel_verification_status","create_verification_request","get_verification_request","get_request_proofs","list_verification_requests","get_request_by_reference","cancel_verification_request","wait_for_request","validate_proof","get_proof_status","revoke_proof","list_revoked_proofs","create_session","get_session","wait_for_session","list_assets","get_asset","revoke_asset","get_current_user","list_auth_sessions","revoke_auth_session","get_usage","get_platform_summary","get_settings","update_settings","export_data","search","get_self_api_key","get_api_key_usage","list_templates","get_default_templates","get_template","update_template","delete_template","preview_template","render_template","get_webhook_stats","list_webhook_deliveries","get_webhook_delivery","retry_webhook_delivery","get_subscription","list_profiles","create_profile","get_profile","update_profile","delete_profile","set_primary_profile","list_profile_templates","update_profile_template","delete_profile_template","preview_profile_template","update_profile_proofs","get_my_profile","update_my_profile","get_profile_assets","list_emails","remove_email","set_primary_email","start_add_email","get_add_email_status","verify_email_otp","resend_email_otp","list_phones","remove_phone","set_primary_phone","start_add_phone","get_add_phone_status","list_api_keys","create_api_key","revoke_api_key","regenerate_api_key","start_2fa","get_2fa_status","verify_2fa","verify_2fa_magic_link","wait_for_2fa","list_domains","add_domain","get_domain","delete_domain","verify_domain","connect_cloudflare","connect_godaddy","connect_dns_provider","add_verification_provider","get_dns_providers","verify_domain_with_credentials","check_domain_credentials","start_domain_email_verification","confirm_domain_email_code","resend_domain_email","setup_domain_email","check_domain_email_status","list_dns_credentials","create_dns_credential","delete_dns_credential","list_my_requests","list_incoming_requests","create_user_request","claim_request_assets","cancel_user_request","extend_request","share_request_email","start_user_domain_verification","get_user_domain_verification_status","check_user_domain_verification","claim_username","update_public_proofs","create_authorization","get_authorization","list_authorizations","revoke_authorization","export_authorizations","create_confirmation","get_confirmation","list_confirmations","get_confirmation_approval_link","wait_for_confirmation","create_hitl","get_hitl","list_hitls","update_hitl","delete_hitl","request_hitl_authorization","create_chat_id_discovery","poll_chat_id_discovery","wait_for_chat_id_discovery","get_hitl_keys","upload_hitl_keys","delete_hitl_keys","create_identity_challenge","get_identity_challenge","create_circle","list_circles","get_circle","update_circle","delete_circle","add_circle_member","list_circle_members","invite_circle_member","create_circle_member_drill","remove_circle_member","add_circle_member_channel","list_circle_member_channels","remove_circle_member_channel","create_delegation","list_delegations","get_delegation","revoke_delegation","verify_delegation","verify_delegations","start_login","wait_for_login","create_account","send_account_email","wait_for_account_creation","start_2fa_for_action","render_auth_link"],"distinctSurfaces":5},"endpointFacts":[{"id":"ep_6hzjets6e245","url":"https://api.proof.holdings/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-10T20:27:13.180Z","auth":{"observedAt":"2026-10-10T20:27:13.397Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://api.proof.holdings/.well-known/oauth-protected-resource/mcp","resource":"https://api.proof.holdings/mcp","authorizationServers":["https://api.proof.holdings"],"scopesSupported":["verifications:read","verifications:write","verifications:create","verifications:*","proofs:read","proofs:*","delegations:read","delegations:write","delegations:create","delegations:*","lookalike-watch:read","lookalike-watch:write","lookalike-watch:*","templates:read","templates:write","templates:*","authorizations:read","authorizations:write","authorizations:create","authorizations:*","hitl:read","hitl:write","hitl:create","hitl:*","confirmations:read","confirmations:write","confirmations:create","confirmations:*","circles:read","circles:write","circles:create","circles:*"]},"authorizationServer":{"url":"https://api.proof.holdings/.well-known/oauth-authorization-server","issuer":"https://api.proof.holdings","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["none"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":null},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":false,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-10-10T20:27:13.410Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"proof.holdings","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-09-04T14:06:16.000Z","validTo":"2026-12-03T15:06:11.000Z","daysToExpiry":52,"sanCount":2,"fingerprint256":"2D:67:C0:DA:DB:42:84:2D:3A:81:2E:40:EF:20:7A:88:96:E0:22:C2:02:E8:88:B0:BD:42:0A:A7:4A:09:27:BB"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"npm","key":"@proof-holdings/mcp-server","url":"https://www.npmjs.com/package/@proof-holdings/mcp-server","firstSeenAt":"2026-10-09T08:20:12.091Z","fetchedAt":"2026-10-11T09:20:06.206Z","normalizedAt":"2026-10-11T09:20:06.206Z"},{"source":"mcp_registry","key":"holdings.proof/mcp-server","url":"https://registry.modelcontextprotocol.io/v0/servers/holdings.proof%2Fmcp-server","firstSeenAt":"2026-09-09T22:20:13.089Z","fetchedAt":"2026-10-09T15:20:27.313Z","normalizedAt":"2026-10-09T15:20:27.313Z"}]},"firstSeenAt":"2026-09-09T22:20:13.089Z","updatedAt":"2026-10-11T15:25:56.837Z"}