SORNKan Publish
Server Details
Host a static website from a zip: $1 USDC/month via x402 on Base, or card/PromptPay link.
- Status
- Healthy
- Uptime
- 98.6% over 63 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 10 tools
Most tools target a clearly distinct pipeline stage (upload_url, scan, inspect, preview_status, claim, edit, renew). The main overlap is scan vs. inspect and preview_status vs. inspect, but the descriptions explicitly delimit these (free non-deploying check vs. deploy; read clock vs. redeploy). render_page stands apart as a generic URL renderer but is still unambiguous.
All names are lowercase snake_case and readable. The pattern splits between bare verbs (claim, edit, inspect, renew, scan) and verb_noun (connect_custom_hostname, publish_website, upload_url, render_page, preview_status), but each name still clearly signals its action+target, so the deviation is minor.
Ten tools is well within the healthy range and each corresponds to a real pipeline step. Only render_page feels tangential to the publishing workflow, slightly diluting the set rather than bloating it.
The full lifecycle is covered: plan, upload, scan, preview deploy, status, paid go-live, edit, renew, and custom hostname binding. Minor gaps exist—no delete/teardown or list-sites operation—but agents can largely work around these.
Available Tools
10 toolsclaimAInspect
Claim (activate) an inspected preview as a live site at {slug}.worldsite.workers.dev. This is the paid go-live step ($1 USDC first 30 days); publish_website only returns the plan and never goes live by itself. Call preview_status first — if claimable is false, do not pay. Ask which slug they want before paying. Live URL is {slug}.worldsite.workers.dev — not {slug}.workers.dev. Pretty names: CNAME their domain after claim. uploadId MUST be the UUID from inspect (not previewUrl). If you only have https://publish.sornkan.com/preview/, pass that UUID. If you have no wallet, get payment_url from the 402 response and show it to the human — they pay by card or Thai PromptPay in THB (no crypto needed); after they pay, poll preview_status/retry until live. If the last claim returned PRICE_COMPUTE_FAILED, retry this tool — no USDC was taken. If a signed payment failed settlement, tell the human contact@sornkan.com and do not retry payment.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Lowercase site name to claim; live URL is {slug}.worldsite.workers.dev (ask the human first) | |
| No | Receipt email for card/PromptPay payers (optional) | ||
| uploadId | Yes | UUID from inspect — the part after /preview/, never the full preview URL | |
| editToken | No | Edit token of a site paid by card/PromptPay (shown once at claim and emailed to the payer). Required to edit/renew/connect a domain on such a site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the generic read/write/idempotency profile; the description goes well beyond them by disclosing the $1 USDC cost, the 402/payment_url card-PromptPay fallback in THB, the PRICE_COMPUTE_FAILED retry rule with 'no USDC taken', and the do-not-retry escalation path for failed settlements. These are exactly the non-obvious behavioral facts an agent needs before triggering a paid, non-idempotent operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and price, then ordered by decision point (precheck → human → payment → failure branches). It is dense and long, and a few clauses (pretty-name CNAME) sit mid-stream, but essentially every sentence carries operational information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid, mutating tool with no output schema and only one required parameter, the description covers the full lifecycle: preconditions, cost, success URL shape, payment alternatives for wallet-less agents, polling after payment, and the two distinct failure recoveries. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 real semantics: it clarifies uploadId must be the UUID 'not previewUrl' and shows how to extract it from a full preview URL, and it warns the live URL is {slug}.worldsite.workers.dev rather than {slug}.workers.dev. Some of this overlaps the schema text, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (claim/activate) plus resource (inspected preview → live site), and immediately pins the resulting artifact: {slug}.worldsite.workers.dev. It also explicitly differentiates from the sibling publish_website, which 'only returns the plan and never goes live by itself.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite chain (inspect → preview_status → claim), an exclusion rule ('if claimable is false, do not pay'), a human-confirmation step ('ask which slug they want before paying'), and names the fallback siblings to poll (preview_status/retry). Nothing about when to invoke this vs. neighbors is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_custom_hostnameAInspect
Connect an existing hostname via CNAME to sites.sornkan.com (no registrar). One-time $1 USDC, same claiming wallet (or editToken for a card-paid site), while lease is live. If the bind is refused after a card payment, the payment stays as a credit: retry with HTTP POST https://publish.sornkan.com/custom-hostname {slug, hostname} plus header X-Edit-Token — no new payment. If the hostname is already on Cloudflare, keep the CNAME proxied. Not a monthly fee. If you have no wallet, get payment_url from the 402 response and show it to the human — they pay by card or Thai PromptPay in THB (no crypto needed); after they pay, poll preview_status/retry until live.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Live site slug to attach the hostname to | |
| hostname | Yes | Your own domain to point at the site (e.g. www.example.com); CNAME it to sites.sornkan.com | |
| editToken | No | Edit token of a site paid by card/PromptPay (shown once at claim and emailed to the payer). Required to edit/renew/connect a domain on such a site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the generic safety profile (write, open-world, not idempotent, non-destructive). The description adds substantial behavior: a one-time $1 USDC charge, credit retention if the bind is refused after card payment, the raw HTTP POST retry path with X-Edit-Token, Cloudflare proxying advice, and post-payment polling. None of this is inferable from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and then layers payment, retry, and fallback details efficiently in a few dense sentences. The inline HTTP POST fallback is arguably operational detail rather than tool-invocation guidance, but almost every clause carries needed context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent what happens after invocation: poll preview_status/retry until the hostname is live, and how to recover from a refused bind. Payment paths (crypto wallet vs. card/PromptPay) and the credit fallback are all covered, so an agent can complete the workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so slug, hostname, and editToken are already documented in the schema. The description reinforces when editToken matters (card-paid sites) and the CNAME target, but adds little semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: connect an existing hostname via CNAME to sites.sornkan.com. It explicitly scopes itself ('no registrar') and is clearly distinguishable from siblings like claim, renew, and edit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context: requires a live lease, the same claiming wallet or an editToken for card-paid sites, and routes wallet-less users to the 402 payment_url plus preview_status polling. It names a sibling (preview_status) but never states explicit exclusions versus other hostname-related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editAInspect
Check the zip for unsafe files, then redeploy the live Worker. Flat $0.50 per edit on every rail (x402 wallet or card/PromptPay payment_url). Does not extend lease days. Ownership: a site claimed with a wallet must be edited by paying from that same wallet; a site paid by card/PromptPay needs its editToken (shown once at claim and emailed to the payer). If you have no wallet, get payment_url from the 402 response and show it to the human — they pay by card or Thai PromptPay in THB (no crypto needed); after they pay, poll preview_status/retry until live.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Live site slug to redeploy | |
| tokens | No | Approximate token size of the change (optional, informational — edits are flat $0.50) | |
| uploadId | Yes | UUID of the new zip to deploy (call upload_url first) | |
| editToken | No | Edit token of a site paid by card/PromptPay (shown once at claim and emailed to the payer). Required to edit/renew/connect a domain on such a site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (non-read-only, non-idempotent, open-world, not destructive), so the description carries real weight: it discloses flat $0.50 pricing across both rails, wallet-to-site ownership binding, the one-time editToken requirement, and that the edit does not extend the lease. It stops short of describing the failure modes beyond the 402 flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then pricing, then ownership rules, then the no-wallet fallback — a sensible order. It is dense and packed into a single paragraph with several parentheticals, which slightly hurts scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent what to expect back (a 402 with payment_url) and how to confirm completion (poll preview_status/retry until live). Payment, ownership, and completion signals are all covered, so nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the per-parameter descriptions already define slug, uploadId, editToken, and tokens. The description adds genuine conditional meaning on top, clarifying when editToken is required (card/PromptPay sites) and confirming tokens is informational only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: scan the uploaded zip, then redeploy the live Worker for a slug. It also implicitly separates itself from siblings by noting it 'does not extend lease days' (vs. renew) and by pointing at upload_url/preview_status as adjacent steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit selection conditions: wallet-claimed sites must pay from the same wallet, card/PromptPay sites need an editToken, and agents with no wallet should surface the 402 payment_url to a human and then poll preview_status/retry. Both the happy path and the fallback path are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspectAInspect
Deploys a throwaway preview Worker at preview-*.worldsite.workers.dev (not publish.sornkan.com) after scanning the zip. This is the DEPLOY step — it counts against the free preview quota (first 3/day, then $0.10). The 4th+ can be paid two ways: sign the x402 retry with USDC on Base, or show the 402’s payment_url to the human (card / Thai PromptPay, same $0.10). Use scan (free, nothing deployed) while iterating on the zip; call inspect only when the human wants to see a preview. Do NOT inspect again just to read remaining time — use preview_status. If claimable is false, upload_url again; do not pay for that old id. Successful claim resets the free preview quota. After the human approves, ask which slug they want, then claim with the UUID and slug.
| Name | Required | Description | Default |
|---|---|---|---|
| uploadId | Yes | UUID of the uploaded zip to deploy as a preview, from upload_url |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic safety profile; the description adds substantial behavior: quota semantics (first 3/day free, then $0.10), the two payment paths (x402 retry with USDC on Base, or hand the 402's payment_url to the human), and the edge case for claimable=false (re-upload, do not pay for the old id). This is far beyond what readOnlyHint/destructiveHint convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in the first sentence, and the dense billing/retry detail is all actionable rather than filler. It runs long, and the pricing/retry mechanics could be tightened, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a side-effecting, quota-metered deploy tool with no output schema, the description covers the risk surface an agent needs: cost, quota reset, the 402 retry path, and the claimable=false fallback. Only the exact success/failure response shape is unstated, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is only one parameter, so the schema already documents uploadId fully. The description reinforces the source ('from upload_url') but adds no syntax or format detail beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Deploys a throwaway preview Worker at preview-*.worldsite.workers.dev') and explicitly frames it as the DEPLOY step, distinguishing it from scan (free, nothing deployed) and preview_status. An agent can tell exactly what this does and how it differs from every nearby sibling despite the misleading 'inspect' name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('call inspect only when the human wants to see a preview'), when-not-to-use ('Do NOT inspect again just to read remaining time — use preview_status'), and names the alternative for iteration (scan, free, nothing deployed). The post-approval workflow (ask slug, then claim with UUID and slug) is also spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_statusARead-onlyIdempotentInspect
Read remaining preview time. uploadId is the UUID (a preview URL is OK). Does not scan, does not reset the clock, never 402. If claimable is false, the preview was deleted — call upload_url, PUT a new zip, inspect, then claim. Do not inspect or claim the old id. Do not pay. Use this instead of inspect when you only need the clock.
| Name | Required | Description | Default |
|---|---|---|---|
| uploadId | Yes | Preview UUID to check — the part after /preview/ if you only have a preview URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely non-inferable behavior: it does not scan, does not reset the preview clock, never returns 402 (i.e. triggers no payment), and claimable=false means the preview was deleted and the id is dead. That is real disclosure beyond the annotation block.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then constraints, then the failure recovery path, then the alternative. Every sentence carries a distinct operator decision; nothing is filler, and the terse style ('never 402') is efficient for an agent audience.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry return semantics, and it does partly by naming the claimable flag and framing the result as remaining time. It does not describe the shape/units of that remaining time, which is a minor residual gap for a read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single uploadId parameter, and its schema description already covers the 'part after /preview/' URL case. The description's 'uploadId is the UUID (a preview URL is OK)' largely restates that, so baseline 3 applies with no compensating added syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Read remaining preview time' — and immediately distinguishes itself from siblings by negation ('Does not scan, does not reset the clock') and by substitution ('Use this instead of inspect when you only need the clock'). An agent can route between preview_status, inspect, and scan without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit use-cases and exclusions, plus a full recovery procedure for the deleted-preview case naming the sibling tools in order (upload_url → PUT zip → inspect → claim) and two hard prohibitions ('Do not inspect or claim the old id', 'Do not pay'). This is a rare case of complete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_websiteARead-onlyIdempotentInspect
START HERE: get the step-by-step website publishing plan. This tool only returns instructions — it never uploads, deploys, or goes live by itself; follow the plan with upload_url → scan → inspect → claim. ALWAYS ask the human first: go live for $1 USDC first 30 days? content legal? Then: upload_url → PUT putUrl (else give dropUrl) → inspect → show previewUrl → preview_status to read remaining time (never inspect again just for the clock) → ask which slug they want → claim with the UUID from inspect plus slug, never the preview URL. Live URL is {slug}.worldsite.workers.dev — not {slug}.workers.dev. Pretty names: CNAME their domain after claim. If claim returned PRICE_COMPUTE_FAILED, retry claim — no USDC was taken. Only if a signed payment failed settlement, tell the human contact@sornkan.com and do not retry payment. Never put the zip in chat.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/destructive=false, and the description reinforces that ('never uploads, deploys, or goes live') without contradicting it. Beyond that it discloses pricing ($1 USDC, first 30 days), the legal check, and failure semantics: PRICE_COMPUTE_FAILED means retry with no charge, whereas a failed signed settlement requires contacting support and no retry. That is substantial behavioural context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with 'START HERE' and the read-only caveat, and nearly every clause is an actionable instruction. However, the arrow-chained workflow is dense and mixes procedural steps with edge-case error handling and URL-format trivia, which makes it harder to scan than a cleanly segmented list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no input params and no output schema, the description must carry the full burden, and it does: entry condition, human-approval gate, sequence of sibling calls, slug/claim handling, URL format, and two distinct failure modes. An agent has everything needed to act correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate; baseline is 4. The description does not need to add parameter meaning, and it correctly stays focused on workflow rather than arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific deliverable — a step-by-step publishing plan — and explicitly negates what it is not ('never uploads, deploys, or goes live by itself'), which cleanly separates it from siblings like upload_url, scan, inspect, and claim. An agent can tell this is the read-only entry point without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'START HERE' and lays out the full ordered workflow (upload_url → PUT putUrl → inspect → previewUrl → preview_status → claim), names when to use an alternative ('preview_status to read remaining time, never inspect again just for the clock'), and mandates asking the human first. This is textbook when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_pageARead-onlyIdempotentInspect
Render any public URL in a real browser (Chromium). Returns markdown text, a screenshot URL, and a human-checkable evidence page URL. $0.005 per call. No signup, no API key. x402 wallet required. Pass fullPage:true for the entire scrollable page (same price).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public https URL to render | |
| fullPage | No | Capture entire scrollable page (same $0.005) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe-read profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the bar is lower. The description nonetheless adds genuinely non-obvious behavior: per-call cost, that payment requires an x402 wallet with no signup/API key, and that the output is markdown plus a screenshot URL and a human-checkable evidence page. It omits runtime traits like timeouts or JS-heavy page failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, front-loaded with the core capability and followed by returns, price, and payment mode. Every sentence carries information, though the pricing is stated twice (once as '$0.005 per call' and again as 'same price' for fullPage) which is mildly redundant given the schema repeats it too.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly enumerates the return artifacts (markdown, screenshot URL, evidence page URL) and covers the auth/payment path, which is the main thing an agent needs to call successfully. Missing only edge-case behavior such as blocked URLs, timeouts, or per-domain limits for a low-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both url and fullPage are already documented, making 3 the baseline. The description adds only the marginal note that fullPage captures the entire scrollable page at the same price, which duplicates the schema's own 'Capture entire scrollable page (same $0.005)' text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Render any public URL in a real browser (Chromium)') and even names the exact deliverables (markdown text, screenshot URL, evidence page URL). It is far from a tautology, but it never distinguishes itself from ambiguous siblings like scan, inspect, or preview_status, which an agent would plausibly confuse with page rendering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description front-loads practical constraints ('$0.005 per call', 'No signup, no API key', 'x402 wallet required'), which tells the agent whether it can call the tool at all. However, it gives no when-to-use / when-not-to-use guidance and never routes the agent to or away from the sibling tools (scan, inspect, preview_status).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renewAInspect
Renew hosting +30 days for $1 USDC. Same claiming wallet (or editToken for a card-paid site). Allowed only while the site is live and remaining < 90 days (stacked cap 90). After expiry renew is unavailable — claim again as a new site; last day without renew means the site is deleted and the slug is free. Support: contact@sornkan.com. If you have no wallet, get payment_url from the 402 response and show it to the human — they pay by card or Thai PromptPay in THB (no crypto needed); after they pay, poll preview_status/retry until live.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Live site slug to renew — the {slug} in {slug}.worldsite.workers.dev | |
| editToken | No | Edit token of a site paid by card/PromptPay (shown once at claim and emailed to the payer). Required to edit/renew/connect a domain on such a site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-read-only, non-idempotent and open-world, and the description adds real context beyond them: the $1 USDC cost, the wallet requirement and editToken fallback, the 90-day stacking cap, the consequence of lapse (site deleted, slug freed), and a card/PromptPay fallback via the 402 payment_url with a poll-preview_status recovery loop. It is consistent with, not contradictory to, the annotations (each call adds 30 days, so non-idempotent fits).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, price and credential are front-loaded in the first clause, and every following sentence adds a distinct rule (eligibility window, expiry consequence, payment fallback). It is dense and slightly long, with the support email and payment walkthrough adding some bulk, but nothing is truly filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid mutation tool with no output schema and no local-state annotations, this covers cost, credentials, eligibility, lapse consequences and the non-crypto payment path with recovery polling. The only remaining gap is what a successful renewal returns or how the added days are confirmed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both slug and editToken are already documented in the schema, and the description largely restates them ('Same claiming wallet (or editToken for a card-paid site)'). The baseline of 3 applies because the schema carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource with the exact effect and price: 'Renew hosting +30 days for $1 USDC'. It also names the credential options (same claiming wallet or editToken), which clearly separates it from the sibling claim tool that creates a site.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit preconditions are given ('only while the site is live and remaining < 90 days, stacked cap 90') and an explicit exclusion with the alternative named ('after expiry renew is unavailable — claim again as a new site'). An agent knows exactly when to call this versus claim.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scanARead-onlyIdempotentInspect
Check an uploaded zip for unsafe files WITHOUT deploying anything. Free, never 402, burns no preview quota — use this while iterating on the zip (scan → fix → upload_url again → scan). When the content is clean and the human wants to SEE it, call inspect to deploy a throwaway preview Worker. Verdict here is advisory: inspect re-checks before deploying.
| Name | Required | Description | Default |
|---|---|---|---|
| uploadId | Yes | UUID of the uploaded zip to check, from upload_url |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely new operational context: free, never 402, no preview quota consumed, and that the verdict is advisory because inspect re-checks. It does not describe the failure shape (what a dirty zip returns), which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with purpose before the quota/alternative rationale. Every clause carries actionable information (cost behavior, workflow loop, sibling routing, advisory semantics) with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one simple parameter, full schema coverage, and no output schema, the description supplies what the structured fields cannot: cost/quota behavior, the advisory nature of the verdict, and how it composes with inspect and upload_url. Nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is a single required parameter, so the schema already explains uploadId fully. The description reinforces the provenance ('the uploaded zip', 'upload_url again') but adds no syntax or format detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check an uploaded zip for unsafe files') and immediately bounds the scope with 'WITHOUT deploying anything'. This clearly separates it from inspect, which deploys a preview Worker, so an agent can discriminate among siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes the iteration loop (scan → fix → upload_url again → scan) and names the alternative ('call inspect to deploy a throwaway preview Worker') with the condition that selects it ('when the content is clean and the human wants to SEE it'). It also frames the verdict's role in that workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_urlCInspect
If you have the zip, PUT putUrl yourself (max 3MB). Do not put zip in chat. Only send dropUrl to the human if you have no file.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false. The description adds a concrete behavioral constraint beyond those — a 3MB size cap and a 'do not put zip in chat' policy — which is genuine extra value, but it never discloses what the tool returns or how putUrl/dropUrl come into existence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, but they are front-loaded with instructions rather than the tool's function, and the undeclared putUrl/dropUrl identifiers make the opening sentence hard to parse without prior context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must explain the return contract, and it only obliquely hints at putUrl/dropUrl without saying the tool produces them. An agent cannot tell from the definition what it will receive back or why it should call this tool at all.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so per the baseline the schema carries no burden and a 4 applies. The description references putUrl and dropUrl, which are outputs rather than inputs, so it does not clarify parameters — but there are none to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The name says upload_url and the text talks about PUT-ing to a putUrl and sending a dropUrl to a human, but it never states what the tool itself does (e.g. 'generate pre-signed upload/download URLs'). It reads as downstream instructions rather than a statement of purpose, and no sibling (claim, publish_website, render_page, etc.) is distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It does give conditional routing advice: 'If you have the zip, PUT putUrl yourself' versus 'Only send dropUrl to the human if you have no file.' That is useful flow guidance, but it addresses what to do with the results, not when to call this tool versus its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
- Changed
claim3 fields changed- added
Input schema / properties / email / descriptionAdded value: +"Receipt email for card/PromptPay payers (optional)" - added
Input schema / properties / slug / descriptionAdded value: +"Lowercase site name to claim; live URL is {slug}.worldsite.workers.dev (ask the human first)" - added
Input schema / properties / uploadId / descriptionAdded value: +"UUID from inspect — the part after /preview/, never the full preview URL"
- Changed
connect_custom_hostname2 fields changed- added
Input schema / properties / hostname / descriptionAdded value: +"Your own domain to point at the site (e.g. www.example.com); CNAME it to sites.sornkan.com" - added
Input schema / properties / slug / descriptionAdded value: +"Live site slug to attach the hostname to"
- Changed
edit3 fields changed- added
Input schema / properties / slug / descriptionAdded value: +"Live site slug to redeploy" - added
Input schema / properties / tokens / descriptionAdded value: +"Approximate token size of the change (optional, informational — edits are flat $0.50)" - added
Input schema / properties / uploadId / descriptionAdded value: +"UUID of the new zip to deploy (call upload_url first)"
- Changed
inspect1 field changed- added
Input schema / properties / uploadId / descriptionAdded value: +"UUID of the uploaded zip to deploy as a preview, from upload_url"
- Changed
preview_status1 field changed- added
Input schema / properties / uploadId / descriptionAdded value: +"Preview UUID to check — the part after /preview/ if you only have a preview URL"
- Changed
renew1 field changed- added
Input schema / properties / slug / descriptionAdded value: +"Live site slug to renew — the {slug} in {slug}.worldsite.workers.dev"
- Changed
scan1 field changed- added
Input schema / properties / uploadId / descriptionAdded value: +"UUID of the uploaded zip to check, from upload_url"
4 tool updates
- Changed
claim1 field changed- added
Input schema / properties / editTokenAdded value: +{ + "description": "Edit token of a site paid by card/PromptPay (shown once at claim and emailed to the payer). Required to edit/renew/connect a domain on such a site.", + "type": "string" +}
- Changed
connect_custom_hostname1 field changed- added
Input schema / properties / editTokenAdded value: +{ + "description": "Edit token of a site paid by card/PromptPay (shown once at claim and emailed to the payer). Required to edit/renew/connect a domain on such a site.", + "type": "string" +}
- Changed
edit2 fields changed- added
Input schema / properties / editTokenAdded value: +{ + "description": "Edit token of a site paid by card/PromptPay (shown once at claim and emailed to the payer). Required to edit/renew/connect a domain on such a site.", + "type": "string" +} - removed
Input schema / properties / ownerWalletRemoved value: -{ - "type": "string" -}
- Changed
renew1 field changed- added
Input schema / properties / editTokenAdded value: +{ + "description": "Edit token of a site paid by card/PromptPay (shown once at claim and emailed to the payer). Required to edit/renew/connect a domain on such a site.", + "type": "string" +}
1 tool update
- Changed
render_page1 field changed- changed
Input schema / properties / fullPage / descriptionPrevious value: -"Capture entire scrollable page ($0.04)"New value: +"Capture entire scrollable page (same $0.005)"
1 tool update
- Added
render_page
1 tool update
- Changed
edit1 field changed- added
Input schema / properties / ownerWalletAdded value: +{ + "type": "string" +}
1 tool update
- Added
scan
1 tool update
- Added
preview_status
1 tool update
- Changed
claim1 field changed- added
Input schema / properties / emailAdded value: +{ + "type": "string" +}
5 tool updates
- Changed
claim5 fields changed- removed
Input schema / properties / slug / descriptionRemoved value: -"Live site slug: lowercase letters, digits, and hyphens, max 40 chars. Becomes worldsite-site-{slug}.workers.dev." - removed
Input schema / properties / slug / patternRemoved value: -"^[a-z0-9-]{1,40}$" - removed
Input schema / properties / uploadId / descriptionRemoved value: -"UUID returned by upload_url that identifies the stored zip. Example: 00000000-0000-4000-8000-000000000001." - removed
Input schema / properties / uploadId / formatRemoved value: -"uuid" - removed
Input schema / properties / uploadId / patternRemoved value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
- Changed
connect_custom_hostname4 fields changed- removed
Input schema / properties / hostname / descriptionRemoved value: -"A hostname the human already owns (example: shop.example.com). This tool does not register domains." - removed
Input schema / properties / hostname / minLengthRemoved value: -1 - removed
Input schema / properties / slug / descriptionRemoved value: -"Live site slug: lowercase letters, digits, and hyphens, max 40 chars. Becomes worldsite-site-{slug}.workers.dev." - removed
Input schema / properties / slug / patternRemoved value: -"^[a-z0-9-]{1,40}$"
- Changed
edit7 fields changed- removed
Input schema / properties / slug / descriptionRemoved value: -"Live site slug: lowercase letters, digits, and hyphens, max 40 chars. Becomes worldsite-site-{slug}.workers.dev." - removed
Input schema / properties / slug / patternRemoved value: -"^[a-z0-9-]{1,40}$" - removed
Input schema / properties / tokens / descriptionRemoved value: -"Optional billed token count for JS review. Omit for static HTML. Floor charge is still $0.10 USDC." - removed
Input schema / properties / tokens / minimumRemoved value: -0 - removed
Input schema / properties / uploadId / descriptionRemoved value: -"UUID returned by upload_url that identifies the stored zip. Example: 00000000-0000-4000-8000-000000000001." - removed
Input schema / properties / uploadId / formatRemoved value: -"uuid" - removed
Input schema / properties / uploadId / patternRemoved value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
- Changed
inspect3 fields changed- removed
Input schema / properties / uploadId / descriptionRemoved value: -"UUID returned by upload_url that identifies the stored zip. Example: 00000000-0000-4000-8000-000000000001." - removed
Input schema / properties / uploadId / formatRemoved value: -"uuid" - removed
Input schema / properties / uploadId / patternRemoved value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
- Added
renew
4 tool updates
- Changed
claim5 fields changed- added
Input schema / properties / slug / descriptionAdded value: +"Live site slug: lowercase letters, digits, and hyphens, max 40 chars. Becomes worldsite-site-{slug}.workers.dev." - added
Input schema / properties / slug / patternAdded value: +"^[a-z0-9-]{1,40}$" - added
Input schema / properties / uploadId / descriptionAdded value: +"UUID returned by upload_url that identifies the stored zip. Example: 00000000-0000-4000-8000-000000000001." - added
Input schema / properties / uploadId / formatAdded value: +"uuid" - added
Input schema / properties / uploadId / patternAdded value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
- Changed
connect_custom_hostname4 fields changed- added
Input schema / properties / hostname / descriptionAdded value: +"A hostname the human already owns (example: shop.example.com). This tool does not register domains." - added
Input schema / properties / hostname / minLengthAdded value: +1 - added
Input schema / properties / slug / descriptionAdded value: +"Live site slug: lowercase letters, digits, and hyphens, max 40 chars. Becomes worldsite-site-{slug}.workers.dev." - added
Input schema / properties / slug / patternAdded value: +"^[a-z0-9-]{1,40}$"
- Changed
edit7 fields changed- added
Input schema / properties / slug / descriptionAdded value: +"Live site slug: lowercase letters, digits, and hyphens, max 40 chars. Becomes worldsite-site-{slug}.workers.dev." - added
Input schema / properties / slug / patternAdded value: +"^[a-z0-9-]{1,40}$" - added
Input schema / properties / tokens / descriptionAdded value: +"Optional billed token count for JS review. Omit for static HTML. Floor charge is still $0.10 USDC." - added
Input schema / properties / tokens / minimumAdded value: +0 - added
Input schema / properties / uploadId / descriptionAdded value: +"UUID returned by upload_url that identifies the stored zip. Example: 00000000-0000-4000-8000-000000000001." - added
Input schema / properties / uploadId / formatAdded value: +"uuid" - added
Input schema / properties / uploadId / patternAdded value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
- Changed
inspect3 fields changed- added
Input schema / properties / uploadId / descriptionAdded value: +"UUID returned by upload_url that identifies the stored zip. Example: 00000000-0000-4000-8000-000000000001." - added
Input schema / properties / uploadId / formatAdded value: +"uuid" - added
Input schema / properties / uploadId / patternAdded value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
6 tool updates
- First observed
claim - First observed
connect_custom_hostname - First observed
edit - First observed
inspect - First observed
publish_website - First observed
upload_url
Related MCP Connectors
Pay-per-call web extract, DNS/WHOIS/IP lookup, PDF/RSS/sitemap tools. x402 USDC on Base/Algorand.
72 x402 endpoints: trading, AI inference, blockchain, escrow. USDC on Base+Solana.
Before you pay an x402 URL, ping it live or dead. One cent, USDC on Base.
Pay-per-call web page to markdown, metadata and links for agents. x402 USDC on Base or Algorand.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceOne-call static page/site deploys for AI agents — POST HTML, a files map, or a zip and get back a live unguessable URL. Remote endpoint at https://ship.page/mcp, free tier needs no account or API key.MIT

402Signalofficial
AlicenseAqualityAmaintenanceChecks live x402 routes across Base, Solana, and Algorand before agents spend. $0.003 USDC settles only for a valid live eligible route; normal typed misses are not settled. Free preview and validate tools. Seller payment is separate; the agent keeps its wallet. Optional signed route-binding receipts support buyer-side checks.3MIT- AlicenseAqualityCmaintenanceMCP server for document intelligence via x402 micropayments. 6 tools: document analysis, invoice extraction, screenshot data, alt text, PII detection, sentiment analysis. Pay-per-use with USDC on Base — no API keys needed.61 npmMIT
- AlicenseAqualityFmaintenanceAgent-native hosting: your agent deploys any folder to a live URL in one command — no account, no dashboard, no CAPTCHA — and hands the human a link plus a plain-language summary. Full deploy lifecycle as MCP tools (deploy, verify, logs, inspect, rollback), production approval human-only; static sites and full Node.js apps, open source (Apache-2.0).13Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.