Popdot AI

Rent verified subdomains by the hour, day, or month. Free 24h trials, x402 USDC on Base.

사용해야 할까요

품질 및 안전성

A
설명 품질
97%
스키마 완전성
99%
이름 품질
89%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~4,606토큰 (도구 정의)
~6.6 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 3.60%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "popdot-mcp": {
      "command": "npx",
      "args": [
        "popdot-mcp"
      ]
    }
  }
}

실행 가능한 패키지

npmpopdot-mcp2.0.0stdio

원격 엔드포인트

https://popdot.ai/api/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (7)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
⚪try_domain(goal, target, preferredSubdomain, desiredEmotion, autoSelect, ...)

Launch a memorable public URL for something you built. Free for 24 hours, no signup and no wallet required. Tell it your goal and an https target to point the address at; it opens a trial, asks a short safety question or two, and on a clean pass returns a live subdomain plus a one-time claim token you can redeem for your own agent identity. Use it to demo a deployment with a real address before a paid rental. One trial per agent. Expires in 24 hours.

입력 스키마

{
  "type": "object",
  "properties": {
    "goal": {
      "type": "string",
      "description": "What you built and want to put online, in a sentence (used to name and describe the address)."
    },
    "target": {
      "type": "string",
      "description": "An https URL to point the address at. Content hosting is not yet available, so a live external target is required."
    },
    "preferredSubdomain": {
      "type": "string",
      "description": "The subdomain label you want (e.g. 'mydemo'). Omit and set autoSelect:true to have one picked for you."
    },
    "desiredEmotion": {
      "type": "string",
      "enum": [
        "comedy",
        "absurd",
        "playful",
        "edgy",
        "wholesome",
        "professional",
        "trustworthy"
      ],
      "description": "Preferred vibe of the parent domain: comedy, absurd, playful, edgy, wholesome, professional, trustworthy. Unknown values are ignored."
    },
    "autoSelect": {
      "type": "boolean",
      "description": "Let Popdot AI pick an available subdomain from your goal when you do not provide preferredSubdomain."
    },
    "analyticsConsent": {
      "type": "boolean",
      "description": "Record operator consent to trial analytics for this address."
    },
    "email": {
      "type": "string",
      "description": "Optional email to associate with the trial. Never returned."
    },
    "trialHandle": {
      "type": "string",
      "description": "(retry only) The trialHandle returned by the first call. Echo it back with your answers."
    },
    "inputResponses": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "(retry only) Your answers to the safety questions, one { id, response } per requested input."
    },
    "publicKey": {
      "type": "string",
      "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."
    }
  },
  "required": [
    "goal"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "trialHandle": {
      "type": "string"
    },
    "candidateId": {
      "type": "string"
    },
    "domain": {
      "type": "string"
    },
    "subdomain": {
      "type": "string"
    },
    "questions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "question_id": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          }
        },
        "required": [
          "question_id",
          "prompt"
        ]
      }
    },
    "next": {
      "type": "string"
    },
    "trialId": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "expiresAt": {
      "type": "string"
    },
    "claimToken": {
      "type": "string"
    },
    "claimTokenExpiresAt": {
      "type": "string"
    },
    "sigilId": {
      "type": "string"
    },
    "sigil": {
      "type": "object",
      "properties": {
        "sigilId": {
          "type": "string"
        },
        "publicKey": {
          "type": "string"
        },
        "mandateId": {
          "type": "string"
        },
        "agentName": {
          "type": "string"
        }
      },
      "required": [
        "sigilId",
        "publicKey",
        "mandateId"
      ]
    },
    "claimError": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        }
      }
    },
    "canaryVerdict": {
      "type": "string"
    },
    "scorerVersion": {
      "type": "string"
    },
    "shareMessage": {
      "type": "string"
    },
    "trustReceipt": {
      "type": "object",
      "properties": {
        "canaryVerified": {
          "type": "boolean"
        },
        "claimable": {
          "type": "boolean"
        }
      }
    },
    "upgrade": {
      "type": "object",
      "properties": {
        "preserveExactUrl": {
          "type": "boolean"
        },
        "availableDurations": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "agentPaymentAvailable": {
          "type": "boolean"
        }
      }
    },
    "sigilEligibility": {
      "type": "object",
      "description": "Identity standing: lifecycle status, canary screen result, and any hard gates.",
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "eligible",
            "awaiting_key_binding",
            "active",
            "review_required",
            "denied",
            "suspended",
            "revoked"
          ]
        },
        "canaryStatus": {
          "type": "string"
        },
        "hardGates": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "identityConfidence": {
      "type": "object",
      "description": "How firmly this identity is bound: unbound, bound to a key, or backed by a verified sponsor.",
      "properties": {
        "level": {
          "type": "string",
          "enum": [
            "unbound",
            "key_bound",
            "sponsor_verified"
          ]
        },
        "sponsorVerified": {
          "type": "boolean"
        }
      }
    },
    "tierProgression": {
      "type": "object",
      "description": "Current enforced trust tier and when it is next evaluated. Present only once an identity exists.",
      "properties": {
        "currentTier": {
          "type": "string",
          "enum": [
            "nascent",
            "fledgling",
            "established",
            "trusted",
            "sovereign"
          ]
        },
        "status": {
          "type": "string"
        },
        "reason": {
          "type": "string"
        },
        "evidenceConfidence": {
          "type": "number"
        },
        "nextEvaluationAt": {
          "type": "string"
        }
      }
    }
  }
}
⚪answer_trial_canary(trialHandle, answers, publicKey)

Answer the short safety questions for a trial opened by try_domain, then go live. Pass the trialHandle and your answers; on a clean pass this provisions a live 24-hour subdomain and returns a one-time claim token you can redeem for your own agent identity.

입력 스키마

{
  "type": "object",
  "properties": {
    "trialHandle": {
      "type": "string",
      "description": "The trialHandle returned by try_domain."
    },
    "answers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "question_id": {
            "type": "string"
          },
          "response": {
            "type": "string"
          }
        },
        "required": [
          "question_id",
          "response"
        ]
      },
      "description": "Your answers to the safety questions, one { question_id, response } per question."
    },
    "publicKey": {
      "type": "string",
      "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."
    }
  },
  "required": [
    "trialHandle",
    "answers"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "trialId": {
      "type": "string"
    },
    "candidateId": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "expiresAt": {
      "type": "string"
    },
    "claimToken": {
      "type": "string"
    },
    "claimTokenExpiresAt": {
      "type": "string"
    },
    "sigilId": {
      "type": "string"
    },
    "sigil": {
      "type": "object",
      "properties": {
        "sigilId": {
          "type": "string"
        },
        "publicKey": {
          "type": "string"
        },
        "mandateId": {
          "type": "string"
        },
        "agentName": {
          "type": "string"
        }
      },
      "required": [
        "sigilId",
        "publicKey",
        "mandateId"
      ]
    },
    "claimError": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "message": {
          "type": "string"
        }
      }
    },
    "canaryVerdict": {
      "type": "string"
    },
    "scorerVersion": {
      "type": "string"
    },
    "shareMessage": {
      "type": "string"
    },
    "trustReceipt": {
      "type": "object",
      "properties": {
        "canaryVerified": {
          "type": "boolean"
        },
        "claimable": {
          "type": "boolean"
        }
      }
    },
    "upgrade": {
      "type": "object",
      "properties": {
        "preserveExactUrl": {
          "type": "boolean"
        },
        "availableDurations": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "agentPaymentAvailable": {
          "type": "boolean"
        }
      }
    },
    "status": {
      "type": "string"
    },
    "retryable": {
      "type": "boolean"
    },
    "reason": {
      "type": "string"
    }
  }
}
🟢search_domains(query, emotion, minPrice, maxPrice, limit)

Search domains available for rent on Popdot AI. Use this when an agent needs a web address: a verifiable web identity, a temporary deployment address, or a persistent web presence. Returns domains with pricing, tier, and availability. No auth required.

입력 스키마

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search query to match against domain names, tags, and categories"
    },
    "emotion": {
      "type": "string",
      "enum": [
        "comedy",
        "absurd",
        "playful",
        "edgy",
        "wholesome",
        "professional",
        "trustworthy"
      ],
      "description": "Filter by the reaction the domain is built to elicit: comedy, absurd, playful, edgy, wholesome, professional, trustworthy. Unknown values are ignored."
    },
    "minPrice": {
      "type": "number",
      "description": "Minimum daily price in USD"
    },
    "maxPrice": {
      "type": "number",
      "description": "Maximum daily price in USD"
    },
    "limit": {
      "type": "number",
      "description": "Maximum number of results to return (default: 20, max: 50)"
    }
  }
}

출력 스키마

{
  "type": "object",
  "properties": {
    "domains": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "fullDomain": {
            "type": "string"
          },
          "tld": {
            "type": "string"
          },
          "tier": {
            "type": "string"
          },
          "tierScore": {
            "type": "number"
          },
          "emotionTags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "pricing": {
            "type": "object",
            "properties": {
              "hourly": {
                "type": "number"
              },
              "daily": {
                "type": "number"
              },
              "weekly": {
                "type": "number"
              },
              "monthly": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "pagination": {
      "type": "object",
      "properties": {
        "page": {
          "type": "number"
        },
        "limit": {
          "type": "number"
        },
        "total": {
          "type": "number"
        },
        "totalPages": {
          "type": "number"
        }
      }
    }
  },
  "required": [
    "domains"
  ]
}
🟢get_price_quote(domainId, duration)

Get a price quote for renting a specific domain for a given duration. Returns the computed rental cost, tier info, and pricing breakdown.

입력 스키마

{
  "type": "object",
  "properties": {
    "domainId": {
      "type": "string",
      "description": "The domain to price: its id from search_domains, or its name (for example addedtocart.shop)"
    },
    "duration": {
      "type": "string",
      "enum": [
        "PT1H",
        "PT4H",
        "P1D",
        "P7D",
        "P30D"
      ],
      "description": "ISO 8601 duration: PT1H (1 hour), PT4H (4 hours), P1D (1 day), P7D (1 week), P30D (30 days)"
    }
  },
  "required": [
    "domainId",
    "duration"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "domainId": {
      "type": "string"
    },
    "fullDomain": {
      "type": "string"
    },
    "duration": {
      "type": "string"
    },
    "durationLabel": {
      "type": "string"
    },
    "hours": {
      "type": "number"
    },
    "totalCost": {
      "type": "number"
    },
    "rentalPrice": {
      "type": "number"
    },
    "serviceFee": {
      "type": "number"
    },
    "ownerPayout": {
      "type": "number"
    },
    "ownerCommission": {
      "type": "number"
    },
    "ownerCommissionPercent": {
      "type": "number"
    },
    "feeNote": {
      "type": "string"
    },
    "currency": {
      "type": "string"
    },
    "priceSource": {
      "type": "string",
      "enum": [
        "owner",
        "algorithm"
      ]
    },
    "tier": {
      "type": "string"
    },
    "tierScore": {
      "type": "number"
    },
    "available": {
      "type": "boolean"
    },
    "priceBreakdown": {
      "type": "object",
      "properties": {
        "hourly": {
          "type": "number"
        },
        "daily": {
          "type": "number"
        },
        "weekly": {
          "type": "number"
        },
        "monthly": {
          "type": "number"
        }
      }
    }
  },
  "required": [
    "domainId",
    "totalCost",
    "currency"
  ]
}
🟢check_availability(domainId, subdomain)

Check whether a specific subdomain is available on a given domain. Returns true if the subdomain can be rented. Tip: the subdomain and domain read as one phrase, so pick a single lowercase label that is funny or fits the domain's theme (for example iamyour.slopmommy.com or analien.lostmyluggage.com). A delightful combination is the point of a Popdot AI address.

입력 스키마

{
  "type": "object",
  "properties": {
    "domainId": {
      "type": "string",
      "description": "The parent domain: its id from search_domains, or its name (for example addedtocart.shop)"
    },
    "subdomain": {
      "type": "string",
      "description": "The subdomain label to check (e.g., 'myproject' for myproject.example.com)"
    }
  },
  "required": [
    "domainId",
    "subdomain"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "domainId": {
      "type": "string"
    },
    "fullDomain": {
      "type": "string"
    },
    "subdomain": {
      "type": "string"
    },
    "fullUrl": {
      "type": "string"
    },
    "available": {
      "type": "boolean"
    },
    "reason": {
      "type": "string"
    }
  },
  "required": [
    "domainId",
    "subdomain",
    "available"
  ]
}
🟢rent_domain(intentMandateId, domainId, subdomain, duration, payerAddress, ...)

Rent a subdomain, paying per-transaction with USDC on Base (x402). No funded account or stored balance: each rental is a single on-chain payment. Requires agent authentication. Two phases: call once with intentMandateId, domainId, subdomain, duration, and the payerAddress + payerProof for the wallet you will pay from, to get the exact x402 payment challenge; pay it on Base; then call again with paymentId, txHash, and fromAddress to settle and receive the live rental plus a Web Identity Credential. Request an x402 payment challenge to rent a subdomain. Durations PT1H, PT4H, P1D, P7D, P30D. Returns the exact USDC amount and recipient on Base.

입력 스키마

{
  "type": "object",
  "properties": {
    "intentMandateId": {
      "type": "string",
      "description": "The ID of the active Intent Mandate authorizing this purchase"
    },
    "domainId": {
      "type": "string",
      "description": "The unique ID of the domain to rent on"
    },
    "subdomain": {
      "type": "string",
      "description": "The subdomain label to rent (e.g., 'myproject' for myproject.example.com)"
    },
    "duration": {
      "type": "string",
      "enum": [
        "PT1H",
        "PT4H",
        "P1D",
        "P7D",
        "P30D"
      ],
      "description": "ISO 8601 duration: PT1H (1 hour), PT4H (4 hours), P1D (1 day), P7D (1 week), P30D (30 days)"
    },
    "payerAddress": {
      "type": "string",
      "description": "(phase 1) The 0x wallet you will pay from. Required on every challenge; a wallet registered on your Sigil does not substitute for it."
    },
    "payerProof": {
      "type": "string",
      "description": "(phase 1) EIP-191 personal_sign signature proving control of payerAddress. Always required with payerAddress."
    },
    "payerProofIssuedAt": {
      "type": "string",
      "description": "(phase 1, optional) ISO 8601 timestamp of the payerProof, within 5 minutes of the request."
    },
    "paymentId": {
      "type": "string",
      "description": "(phase 2) The paymentId returned by the phase-1 challenge."
    },
    "txHash": {
      "type": "string",
      "description": "(phase 2) The on-chain transaction hash of your USDC payment on Base."
    },
    "fromAddress": {
      "type": "string",
      "description": "(phase 2) The wallet you paid from (must match the challenge's bound payer)."
    }
  },
  "required": [
    "intentMandateId",
    "domainId",
    "subdomain",
    "duration"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string"
    },
    "payment": {
      "type": "object",
      "properties": {
        "protocol": {
          "type": "string"
        },
        "paymentId": {
          "type": "string"
        },
        "chainId": {
          "type": "number"
        },
        "tokenAddress": {
          "type": "string"
        },
        "recipient": {
          "type": "string"
        },
        "amountInSmallestUnit": {
          "type": "string"
        },
        "memo": {
          "type": "string"
        },
        "expiresAt": {
          "type": "string"
        },
        "settleUrl": {
          "type": "string"
        },
        "txHash": {
          "type": "string"
        },
        "status": {
          "type": "string"
        }
      }
    },
    "rental": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "subdomain": {
          "type": "string"
        },
        "fullUrl": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "startTime": {
          "type": "string"
        },
        "endTime": {
          "type": "string"
        }
      }
    },
    "credential": {
      "type": "string"
    },
    "provisioning": {
      "type": "object",
      "properties": {
        "statusUrl": {
          "type": "string"
        },
        "pollIntervalSeconds": {
          "type": "number"
        },
        "timeoutSeconds": {
          "type": "number"
        },
        "message": {
          "type": "string"
        }
      }
    },
    "rentalId": {
      "type": "string"
    },
    "reason": {
      "type": "string"
    },
    "next": {
      "type": "string"
    },
    "settleUrl": {
      "type": "string"
    },
    "sigilEligibility": {
      "type": "object",
      "description": "Identity standing: lifecycle status, canary screen result, and any hard gates.",
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "eligible",
            "awaiting_key_binding",
            "active",
            "review_required",
            "denied",
            "suspended",
            "revoked"
          ]
        },
        "canaryStatus": {
          "type": "string"
        },
        "hardGates": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "identityConfidence": {
      "type": "object",
      "description": "How firmly this identity is bound: unbound, bound to a key, or backed by a verified sponsor.",
      "properties": {
        "level": {
          "type": "string",
          "enum": [
            "unbound",
            "key_bound",
            "sponsor_verified"
          ]
        },
        "sponsorVerified": {
          "type": "boolean"
        }
      }
    },
    "tierProgression": {
      "type": "object",
      "description": "Current enforced trust tier and when it is next evaluated. Present only once an identity exists.",
      "properties": {
        "currentTier": {
          "type": "string",
          "enum": [
            "nascent",
            "fledgling",
            "established",
            "trusted",
            "sovereign"
          ]
        },
        "status": {
          "type": "string"
        },
        "reason": {
          "type": "string"
        },
        "evidenceConfidence": {
          "type": "number"
        },
        "nextEvaluationAt": {
          "type": "string"
        }
      }
    }
  }
}
🟡upgrade_trial(claimToken, sigilId, publicKey, timestamp, signature, ...)

Turn a free trial into your own paid, persistent address in one call, no human required. Claim the agent identity your trial created (a Nascent Sigil, its sigilId came back when the trial went live) by proving you hold your Ed25519 key: send the one-time claimToken, the sigilId, your publicKey, a Unix timestamp and a signature by your key over popdot-claim/1\n{timestamp}\n{sigilId}\n{sha256 hex of claimToken}\n{publicKey}. The claim token works until 30 days after the trial ends. If you supply a wallet, this also returns the exact USDC-on-Base (x402) challenge to keep the trial's exact URL live on a paid rental. No wallet yet? You still get your identity; fund a USDC wallet on Base later and pay it yourself.

입력 스키마

{
  "type": "object",
  "properties": {
    "claimToken": {
      "type": "string",
      "description": "The one-time claim token returned by try_domain / answer_trial_canary."
    },
    "sigilId": {
      "type": "string",
      "description": "The sigilId returned with the claim token. It must match the identity the token belongs to."
    },
    "publicKey": {
      "type": "string",
      "description": "Your Ed25519 public key as standard padded base64 of the raw 32 bytes (44 characters). You keep the private key."
    },
    "timestamp": {
      "type": "string",
      "description": "Integer Unix seconds, no leading zeros, within 300 seconds of now. Part of the signed message."
    },
    "signature": {
      "type": "string",
      "description": "Standard padded base64 of the 64-byte Ed25519 signature over the popdot-claim/1 message."
    },
    "duration": {
      "type": "string",
      "description": "Optional rental length: an ISO 8601 duration (PT1H, PT4H, P1D, P7D, P30D) or hourly/daily/weekly/monthly. Defaults to PT1H (1 hour)."
    },
    "payerAddress": {
      "type": "string",
      "description": "Optional 0x wallet you will pay from. Provide it (with payerProof) to receive a self-pay x402 challenge."
    },
    "payerProof": {
      "type": "string",
      "description": "Optional EIP-191 personal_sign signature proving control of payerAddress."
    },
    "payerProofIssuedAt": {
      "type": "string",
      "description": "Optional ISO 8601 timestamp of the payerProof, within 5 minutes."
    }
  },
  "required": [
    "claimToken",
    "sigilId",
    "publicKey",
    "timestamp",
    "signature"
  ]
}

출력 스키마

{
  "type": "object",
  "properties": {
    "sigil": {
      "type": "object",
      "properties": {
        "sigilId": {
          "type": "string"
        },
        "publicKey": {
          "type": "string"
        },
        "mandateId": {
          "type": "string"
        },
        "agentName": {
          "type": "string"
        }
      },
      "required": [
        "sigilId",
        "publicKey",
        "mandateId"
      ]
    },
    "upgrade": {
      "type": "object",
      "properties": {
        "preserveExactUrl": {
          "type": "boolean"
        },
        "fqdn": {
          "type": "string"
        },
        "duration": {
          "type": "string"
        },
        "payment": {
          "type": "object",
          "properties": {
            "protocol": {
              "type": "string"
            },
            "paymentId": {
              "type": "string"
            },
            "chainId": {
              "type": "number"
            },
            "tokenAddress": {
              "type": "string"
            },
            "recipient": {
              "type": "string"
            },
            "amountInSmallestUnit": {
              "type": "string"
            },
            "memo": {
              "type": "string"
            },
            "expiresAt": {
              "type": "string"
            },
            "settleUrl": {
              "type": "string"
            },
            "txHash": {
              "type": "string"
            },
            "status": {
              "type": "string"
            }
          }
        },
        "note": {
          "type": "string"
        }
      }
    },
    "walletGuidance": {
      "type": "string"
    },
    "sigilEligibility": {
      "type": "object",
      "description": "Identity standing: lifecycle status, canary screen result, and any hard gates.",
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "eligible",
            "awaiting_key_binding",
            "active",
            "review_required",
            "denied",
            "suspended",
            "revoked"
          ]
        },
        "canaryStatus": {
          "type": "string"
        },
        "hardGates": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "identityConfidence": {
      "type": "object",
      "description": "How firmly this identity is bound: unbound, bound to a key, or backed by a verified sponsor.",
      "properties": {
        "level": {
          "type": "string",
          "enum": [
            "unbound",
            "key_bound",
            "sponsor_verified"
          ]
        },
        "sponsorVerified": {
          "type": "boolean"
        }
      }
    },
    "tierProgression": {
      "type": "object",
      "description": "Current enforced trust tier and when it is next evaluated. Present only once an identity exists.",
      "properties": {
        "currentTier": {
          "type": "string",
          "enum": [
            "nascent",
            "fledgling",
            "established",
            "trusted",
            "sovereign"
          ]
        },
        "status": {
          "type": "string"
        },
        "reason": {
          "type": "string"
        },
        "evidenceConfidence": {
          "type": "number"
        },
        "nextEvaluationAt": {
          "type": "string"
        }
      }
    }
  },
  "required": [
    "sigil",
    "upgrade"
  ]
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 7개
검증됨버전이 기록되지 않음도구 7개
검증됨버전이 기록되지 않음도구 7개