Skip to main content
Glama

try_domain

Start here. Get a memorable public URL for something you built, free for 24 hours, with no signup, key or wallet. Give a one sentence goal and set autoSelect: true (or pass preferredSubdomain); it picks the domain for you, so you do not need search_domains first. Add an https target if you have one. With no target yet the address shows a holding page, and you point it later by calling try_domain again with your trialHandle and target. It may ask a short safety question or two (answer with answer_trial_canary); on a clean pass it returns a live subdomain plus a one-time claim token you can redeem with upgrade_trial for your own agent identity. One trial per agent. Expires in 24 hours.

Input Schema

NameRequiredDescriptionDefault
goalYesWhat you built and want to put online, in a sentence (used to name and describe the address).
emailNoOptional email to associate with the trial. Never returned.
targetNoOptional. An https URL to point the address at. Omit it to go live on a holding page now; to point it later, call try_domain again with the same goal, your trialHandle and this target (no answers). A trial can be pointed once.
publicKeyNoOptional, on the call that goes live. Your Ed25519 public key (standard padded base64 of the raw 32 bytes) to claim your agent identity in the same call. Requires headers X-Popdot-Timestamp (Unix seconds) and X-Popdot-Signature: an Ed25519 signature by this key over {timestamp}\nPOST\n/api/mcp\n{sha256 hex of the raw request body}. Omit it to receive a claim token for upgrade_trial instead.
autoSelectNoLet Popdot AI pick an available subdomain from your goal when you do not provide preferredSubdomain.
trialHandleNo(retry only) The trialHandle returned by the first call. Echo it back with your answers, or with a target to point a live holding-page trial.
desiredEmotionNoPreferred vibe of the parent domain: comedy, absurd, playful, edgy, wholesome, professional, trustworthy. Unknown values are ignored.
inputResponsesNo(retry only) Your answers to the safety questions, one { id, response } per requested input.
analyticsConsentNoRecord operator consent to trial analytics for this address.
preferredSubdomainNoThe subdomain label you want (e.g. 'mydemo'). Omit and set autoSelect:true to have one picked for you.

Output Schema

NameRequiredDescriptionDefault
urlNo
nextNo
sigilNo
domainNo
targetNo
pointedNo
sigilIdNo
trialIdNo
upgradeNo
expiresAtNo
questionsNo
subdomainNo
claimErrorNo
claimTokenNo
candidateIdNo
holdingPageNo
trialHandleNo
shareMessageNo
trustReceiptNo
canaryVerdictNo
scorerVersionNo
tierProgressionNoCurrent enforced trust tier and when it is next evaluated. Present only once an identity exists.
sigilEligibilityNoIdentity standing: lifecycle status, canary screen result, and any hard gates.
identityConfidenceNoHow firmly this identity is bound: unbound, bound to a key, or backed by a verified sponsor.
claimTokenExpiresAtNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / target / description
      Previous value: -"An https URL to point the address at. Content hosting is not yet available, so a live external target is required."New value: +"Optional. An https URL to point the address at. Omit it to go live on a holding page now; to point it later, call try_domain again with the same goal, your trialHandle and this target (no answers). A trial can be pointed once."
    • changedInput schema / properties / trialHandle / description
      Previous value: -"(retry only) The trialHandle returned by the first call. Echo it back with your answers."New value: +"(retry only) The trialHandle returned by the first call. Echo it back with your answers, or with a target to point a live holding-page trial."
    • addedOutput schema / properties / holdingPage
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / pointed
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / target
      Added value: +{
      +  "type": "string"
      +}
  2. Changed4 schema fields changed
    • addedInput schema / properties / publicKey
      Added value: +{
      +  "description": "Optional, on the call that goes live. Your Ed25519 public key (standard padded base64 of the raw 32 bytes) to claim your agent identity in the same call. Requires headers X-Popdot-Timestamp (Unix seconds) and X-Popdot-Signature: an Ed25519 signature by this key over {timestamp}\\nPOST\\n/api/mcp\\n{sha256 hex of the raw request body}. Omit it to receive a claim token for upgrade_trial instead.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / claimError
      Added value: +{
      +  "properties": {
      +    "code": {
      +      "type": "string"
      +    },
      +    "message": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / sigil
      Added value: +{
      +  "properties": {
      +    "agentName": {
      +      "type": "string"
      +    },
      +    "mandateId": {
      +      "type": "string"
      +    },
      +    "publicKey": {
      +      "type": "string"
      +    },
      +    "sigilId": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "sigilId",
      +    "publicKey",
      +    "mandateId"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / sigilId
      Added value: +{
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • addedOutput schema / properties / tierProgression / properties / reason
      Added value: +{
      +  "type": "string"
      +}
  4. Changed3 schema fields changed
    • changedOutput schema / properties / identityConfidence / description
      Previous value: -"Reserved for a future scoring release. Not returned today."New value: +"How firmly this identity is bound: unbound, bound to a key, or backed by a verified sponsor."
    • changedOutput schema / properties / sigilEligibility / description
      Previous value: -"Reserved for a future scoring release. Not returned today."New value: +"Identity standing: lifecycle status, canary screen result, and any hard gates."
    • changedOutput schema / properties / tierProgression / description
      Previous value: -"Reserved for a future scoring release. Not returned today."New value: +"Current enforced trust tier and when it is next evaluated. Present only once an identity exists."
  5. Changed9 schema fields changed
    • addedOutput schema / properties / canaryVerdict
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / identityConfidence
      Added value: +{
      +  "description": "Reserved for a future scoring release. Not returned today.",
      +  "properties": {
      +    "level": {
      +      "enum": [
      +        "unbound",
      +        "key_bound",
      +        "sponsor_verified"
      +      ],
      +      "type": "string"
      +    },
      +    "sponsorVerified": {
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / questions / items / properties
      Added value: +{
      +  "prompt": {
      +    "type": "string"
      +  },
      +  "question_id": {
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / questions / items / required
      Added value: +[
      +  "question_id",
      +  "prompt"
      +]
    • addedOutput schema / properties / scorerVersion
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / sigilEligibility
      Added value: +{
      +  "description": "Reserved for a future scoring release. Not returned today.",
      +  "properties": {
      +    "canaryStatus": {
      +      "type": "string"
      +    },
      +    "hardGates": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "status": {
      +      "enum": [
      +        "eligible",
      +        "awaiting_key_binding",
      +        "active",
      +        "review_required",
      +        "denied",
      +        "suspended",
      +        "revoked"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / tierProgression
      Added value: +{
      +  "description": "Reserved for a future scoring release. Not returned today.",
      +  "properties": {
      +    "currentTier": {
      +      "enum": [
      +        "nascent",
      +        "fledgling",
      +        "established",
      +        "trusted",
      +        "sovereign"
      +      ],
      +      "type": "string"
      +    },
      +    "evidenceConfidence": {
      +      "type": "number"
      +    },
      +    "nextEvaluationAt": {
      +      "type": "string"
      +    },
      +    "status": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / trustReceipt / properties
      Added value: +{
      +  "canaryVerified": {
      +    "type": "boolean"
      +  },
      +  "claimable": {
      +    "type": "boolean"
      +  }
      +}
    • addedOutput schema / properties / upgrade / properties
      Added value: +{
      +  "agentPaymentAvailable": {
      +    "type": "boolean"
      +  },
      +  "availableDurations": {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "preserveExactUrl": {
      +    "type": "boolean"
      +  }
      +}
  6. Changed30 schema fields changed
    • addedInput schema / properties / analyticsConsent
      Added value: +{
      +  "description": "Record operator consent to trial analytics for this address.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / autoSelect
      Added value: +{
      +  "description": "Let Popdot AI pick an available subdomain from your goal when you do not provide preferredSubdomain.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / desiredEmotion
      Added value: +{
      +  "description": "Preferred vibe of the parent domain: comedy, absurd, playful, edgy, wholesome, professional, trustworthy. Unknown values are ignored.",
      +  "enum": [
      +    "comedy",
      +    "absurd",
      +    "playful",
      +    "edgy",
      +    "wholesome",
      +    "professional",
      +    "trustworthy"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / email / description
      Previous value: -"An email to associate with your trial API key. Used to issue the key in step 1. If you don't have one, your operator's email works."New value: +"Optional email to associate with the trial. Never returned."
    • addedInput schema / properties / goal
      Added value: +{
      +  "description": "What you built and want to put online, in a sentence (used to name and describe the address).",
      +  "type": "string"
      +}
    • addedInput schema / properties / inputResponses
      Added value: +{
      +  "description": "(retry only) Your answers to the safety questions, one { id, response } per requested input.",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / preferredSubdomain
      Added value: +{
      +  "description": "The subdomain label you want (e.g. 'mydemo'). Omit and set autoSelect:true to have one picked for you.",
      +  "type": "string"
      +}
    • addedInput schema / properties / target
      Added value: +{
      +  "description": "An https URL to point the address at. Content hosting is not yet available, so a live external target is required.",
      +  "type": "string"
      +}
    • addedInput schema / properties / trialHandle
      Added value: +{
      +  "description": "(retry only) The trialHandle returned by the first call. Echo it back with your answers.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[]New value: +[
      +  "goal"
      +]
    • removedOutput schema / properties / auth
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / candidateId
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / claimToken
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / claimTokenExpiresAt
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / documentation
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / domain
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / expiresAt
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / message
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / next
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / questions
      Added value: +{
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / shareMessage
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / status
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / steps
      Removed value: -{
      -  "items": {
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / subdomain
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / trialHandle
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / trialId
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / trustReceipt
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / upgrade
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / url
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "status",
      -  "steps"
      -]
  7. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "auth": {
      +      "type": "string"
      +    },
      +    "documentation": {
      +      "type": "string"
      +    },
      +    "message": {
      +      "type": "string"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "steps": {
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "status",
      +    "steps"
      +  ],
      +  "type": "object"
      +}
  8. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false and openWorldHint=true; the description adds substantial context beyond that: the 24-hour expiry, one-trial-per-agent limit, no-signup/no-wallet auth model, the safety-canary Q&A flow, a one-time claim token redeemable via upgrade_trial, and a single-pointing limit. That is exactly the behavioral disclosure a mutation tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with 'Start here.' and mostly every sentence carries new information about flow, limits, or returns. It is somewhat dense and run-on toward the end (safety question and claim-token clauses), which keeps it just below ideal crispness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Ten parameters but only one required, and an output schema exists, so the description need not explain return values. It nonetheless covers the full lifecycle (create, answer canary, point later, claim identity), which is complete for an open-world mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds workflow meaning beyond the schema: goal is a 'one sentence goal', autoSelect vs preferredSubdomain as alternatives, target omitted means a holding page, and trialHandle/inputResponses are retry-only. These tie parameters to the multi-step flow rather than just restating types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Get a memorable public URL for something you built') with scope qualifiers (free 24 hours, no signup). It explicitly distinguishes itself from search_domains ('you do not need search_domains first') and references upgrade_trial, so an agent can place it among its siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

It says when to use it ('Start here'), what to pass ('set autoSelect: true (or pass preferredSubdomain)'), the retry path ('point it later by calling try_domain again with your trialHandle and target'), and the constraint ('One trial per agent. Expires in 24 hours'). Exclusions and alternatives are named explicitly.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.