ship.page
Server Details
Deploy HTML from any agent: POST markup, get a live URL. Static hosting API with MCP tools.
- Status
- Healthy
- Uptime
- 100.0% over 42 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 11 tools
Most tools have distinct resource+action purposes, and deploy_html vs deploy_files vs append_files are clearly delineated by descriptions (single doc vs multi-file site vs adding to an existing drop). The only mild overlap is get_account vs get_limits, since get_limits also surfaces account/plan status when an API key is present.
Every tool follows a clean snake_case verb_noun pattern (deploy_html, delete_drop, list_drops, set_drop_password), with the subject consistently being 'drop' or the target resource.
11 tools is well within the ideal range and each earns its place, covering deployment, lifecycle, password management, and account introspection for a drop-hosting service.
The surface covers deploy, append, claim, list, delete, restore, and password set/remove — a strong lifecycle. Minor gap: no single-drop lookup (e.g. get_drop by slug) or rename/update metadata, though list_drops partially compensates.
Available Tools
11 toolsappend_filesAppend files to an existing dropADestructiveInspect
Add files to a drop owned by the authenticated account (requires an sp_ API key and an active subscription): up to 900 files per call, 10,000 per drop total, and existing paths are overwritten. The drop keeps its current expiry and password protection.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The drop slug (the subdomain part of its ${domain} URL). | |
| files | Yes | Map of relative paths (e.g. 'index.html', 'css/app.css') to either a string, or { encoding: 'base64', content } for binary files. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| plan | No | |
| slug | Yes | |
| files | Yes | Paths added by this call |
| expires_at | Yes | ISO timestamp, or null when the drop never expires |
| total_files | Yes | Total files on the drop after the append |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already mark this as destructive, the description adds crucial specifics: existing paths are overwritten, limits of 900 files per call and 10,000 per drop, and the drop retains its expiry and password protection. This is exactly the kind of behavioral context that goes beyond the annotations.
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?
One dense, well-structured sentence that front-loads the purpose and then packs in the most important constraints. Every clause adds value, with no filler or repetition of schema details.
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 annotations, a rich input schema, and an output schema present, the description provides all critical operational context: authentication, subscription requirement, file count limits, overwrite behavior, and preservation of expiry/password. Nothing essential is missing for an agent to call this tool 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?
Schema coverage is 100%, so the schema already documents both parameters. The description adds meaningful parameter-level constraints: up to 900 files per call and 10,000 per drop total, plus overwrite semantics for existing paths. This goes beyond the baseline schema documentation.
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 description states a specific verb and resource ('Add files to a drop') and clarifies ownership and authentication. It does not explicitly distinguish itself from sibling tools like deploy_files, but the title's 'append to an existing drop' plus the description's focus on adding to an owned drop make the purpose clear.
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 gives clear context: the drop must be owned by the authenticated account, and an sp_ API key with an active subscription is required. It does not explicitly name alternatives or exclusions, but the ownership and authentication context is strong enough to guide appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
claim_dropClaim an anonymous dropADestructiveInspect
Attach an anonymously deployed drop to the authenticated account using its one-time claim token (spc_..., returned once by deploy_html/deploy_files). Claiming extends the drop to the free-account lifetime (90 days) and can revive an offline drop during its 30-day private recovery window. Claimed drops become listable, deletable, and — on paid plans — redeployable via named drops. Requires an sp_ API key.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The drop slug (the subdomain part of its ${domain} URL). | |
| claim_token | Yes | The one-time spc_... token returned at deploy time. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| slug | Yes | |
| claimed | Yes | |
| restored | No | True when the drop had already expired and was revived by the claim |
| expires_at | No | ISO timestamp after the claim's lifetime extension, or null |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a mutating, non-idempotent, destructive operation, and the description adds meaningful context: the token is one-time, claiming extends the drop lifetime, can revive an offline drop during its recovery window, and grants new capabilities. It also notes the sp_ API key requirement, which is beyond what annotations provide. No contradiction with annotations.
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 sentences pack the core action, lifecycle consequences, and auth requirement without wasted words. The key action and token mechanism are front-loaded, and the later sentences add useful context without bloating the description.
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 two-parameter tool with an output schema and annotations, the description covers the purpose, the token source, the effects of claiming, and the required API key. It does not detail error cases or explicitly warn about irreversibility, but the one-time token wording and the lifecycle information make the tool's behavior sufficiently clear for correct invocation.
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 both slug and claim_token are clearly described in the schema. The description reiterates the spc_... token format but adds no meaning beyond the schema, so the baseline of 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?
The description states a specific verb ('Attach') and a specific resource ('anonymously deployed drop') with a precise mechanism (one-time claim token), making the tool's purpose immediately clear. It also distinguishes itself from siblings by referencing deploy_html/deploy_files as the source of the token and noting claimed drops become listable/deletable/redeployable, which separates it from delete_drop and restore_drop.
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 gives clear context for when to use this tool: when claiming an anonymously deployed drop with its one-time token, including lifecycle effects like extending lifetime to 90 days and reviving offline drops. It does not explicitly state when not to use it or name alternatives, but the unique claim-token mechanism makes the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dropDelete a dropADestructiveInspect
Permanently delete a drop owned by the authenticated account (requires an sp_ API key). The URL stops serving immediately and cannot be recovered.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The drop slug (the subdomain part of its ${domain} URL). |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | Slug of the deleted drop |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint as true, but the description adds meaningful behavioral specifics: deletion is permanent, the URL stops serving immediately, and recovery is impossible. It also discloses the credential requirement. No contradiction with annotations.
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. The core destructive action is front-loaded, followed by the key consequences and auth requirement. Every sentence earns its place.
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 single-parameter destructive tool with a complete input schema and an output schema present, the description covers the action, ownership requirement, auth requirement, and immediate irreversible effects. Nothing essential 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 the schema already explains slug as the subdomain part of the drop's URL. The tool description adds no parameter-specific detail, so the baseline of 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 action ('Permanently delete') on a specific resource ('a drop owned by the authenticated account') and emphasizes irreversibility. This clearly distinguishes it from non-destructive siblings such as remove_drop_password or restore_drop.
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?
Provides clear context: the drop must be owned by the authenticated account and an sp_ API key is required. It does not explicitly name alternatives or give a when-not-to-use condition, but the permanent and unrecoverable nature strongly implies when this tool should be avoided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_filesDeploy a multi-file siteADestructiveInspect
Deploy a map of path -> content as a multi-file site (must include index.html to serve at the root). Anonymous: up to 100 files per request, 30-day expiry (90 days once signed in). Pro ($4/mo): up to 900 files, custom or no TTL, named drops.
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | Lifetime in seconds (min 60). Anonymous: max 2592000 (30 days), default 30 days. Signed-in free: max 7776000 (90 days), default 90 days. Paid: any value, omit for no expiry. | |
| name | No | Stable name for a redeployable drop (1-41 chars of [a-z0-9-]). Requires an active subscription; Team accounts serve it on their vanity subdomain. | |
| agent | No | Name of the AI agent or app publishing this drop, e.g. 'chatgpt', 'claude', 'cursor'. AI agents: always set this. | |
| No | Contact email for an anonymous deploy: the one-time claim link is mailed to it, so the drop stays recoverable even if the claim_token from the response is lost. Pass it whenever the deploy is for a human. Ignored for authenticated deploys (those are owned already). | ||
| files | Yes | Map of relative paths (e.g. 'index.html', 'css/app.css') to either a string, or { encoding: 'base64', content } for binary files. | |
| password | No | Shared password: 8-128 Unicode characters, at most 512 UTF-8 bytes. Requires active paid Pro/Team. Sent privately, never in the URL or response. Omit on a live named redeploy to preserve protection. Recreating an expired or purged name is a new drop: send the password again. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| name | No | |
| plan | Yes | |
| slug | Yes | Drop slug; the site is live at https://<slug>.shipped.run/ |
| files | Yes | |
| replaced | No | Present with named deploys; true when an existing drop was replaced |
| expires_at | Yes | ISO timestamp, or null when the drop never expires |
| claim_token | No | One-time claim token (spc_...), present only on anonymous deploys and shown once. Anyone holding it can attach the drop to an account via claim_drop. |
| password_protected | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent, so the bar is lower. The description still adds real behavioral context: file-count ceilings, 30/90-day expiry windows, and the index.html serving requirement — all beyond what the annotations 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?
Two tight sentences with the core purpose front-loaded before the tier/pricing detail. Dense but every clause carries usable information; only the pricing parenthetical is slightly extraneous for an agent.
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 an output schema present and annotations covering the safety profile, the description only needs to add behavioral context, which it does via limits, expiry, and the index.html rule. Minor gap: no explicit statement of auth requirements or what a failed deploy returns, but those are largely covered elsewhere.
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% with rich per-parameter descriptions for ttl, name, password, and files, so the schema does the heavy lifting. The description's mention of 'named drops' and expiry adds only marginal framing beyond what the schema already documents.
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 (deploy) and resource (multi-file site) plus the critical index.html constraint for root serving. The 'map of path -> content' and 'multi-file' phrasing clearly distinguishes it from the sibling deploy_html and append_files.
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?
Provides tier-based context (anonymous 100 files/30-day, Pro 900 files/custom TTL) that implicitly guides when the tool is usable, but never explicitly routes the agent between this and deploy_html or append_files for incremental updates. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_htmlDeploy a single HTML pageADestructiveInspect
Deploy one HTML document and get back a live, unguessable https://.shipped.run/ URL. Anonymous: 10 deploys/min per IP, 10MB body cap, 30-day expiry. Pro ($4/mo): custom or no TTL, named drops.
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | Lifetime in seconds (min 60). Anonymous: max 2592000 (30 days), default 30 days. Signed-in free: max 7776000 (90 days), default 90 days. Paid: any value, omit for no expiry. | |
| html | Yes | The full HTML document to publish. | |
| name | No | Stable name for a redeployable drop (1-41 chars of [a-z0-9-]). Requires an active subscription; Team accounts serve it on their vanity subdomain. | |
| agent | No | Name of the AI agent or app publishing this drop, e.g. 'chatgpt', 'claude', 'cursor'. AI agents: always set this. | |
| No | Contact email for an anonymous deploy: the one-time claim link is mailed to it, so the drop stays recoverable even if the claim_token from the response is lost. Pass it whenever the deploy is for a human. Ignored for authenticated deploys (those are owned already). | ||
| password | No | Shared password: 8-128 Unicode characters, at most 512 UTF-8 bytes. Requires active paid Pro/Team. Sent privately, never in the URL or response. Omit on a live named redeploy to preserve protection. Recreating an expired or purged name is a new drop: send the password again. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| name | No | |
| plan | Yes | |
| slug | Yes | Drop slug; the site is live at https://<slug>.shipped.run/ |
| files | Yes | |
| replaced | No | Present with named deploys; true when an existing drop was replaced |
| expires_at | Yes | ISO timestamp, or null when the drop never expires |
| claim_token | No | One-time claim token (spc_...), present only on anonymous deploys and shown once. Anyone holding it can attach the drop to an account via claim_drop. |
| password_protected | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are limited to hints (non-read-only, open-world, non-idempotent, destructive), and the description goes well beyond them: rate limit per IP, body size cap, expiry behavior for anonymous deploys, and the unguessable-slug security property. It does not explain what a deploy overwrites when a name is reused, which is the behavior the destructiveHint implies.
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 sentences, front-loaded with the action and its result, then tier constraints. Dense but every clause carries information; the mid-sentence tier enumeration is slightly list-like but not wasteful.
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 an output schema present, the description need not explain return fields, and it still surfaces the key output (the live URL). It covers quotas, caps, and expiry tiers, which is enough for an agent to invoke it correctly; only the sibling routing decision is left unaddressed.
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 the parameter docs are already detailed (ttl tiers, name/subscription requirement, email claim link, password rules). The description's mentions of TTL, named drops, and Pro tier restate that same information rather than adding syntax or edge-case detail the schema lacks, so the 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?
The description gives a specific verb and resource (deploy one HTML document) plus the concrete outcome: a live unguessable https://<slug>.shipped.run/ URL. It is clear on its own, but it never names the obvious sibling deploy_files, so an agent has to guess whether a multi-file or single-file case routes here.
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?
Tier-based conditions are stated (anonymous 10 deploys/min, 10MB cap, 30-day expiry; Pro gets custom TTL and named drops), which implies when the tool is usable. But there is no explicit when-to-use-this-vs-deploy_files guidance and no stated prerequisites for named/password deploys.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountGet account infoAInspect
Show the authenticated account's plan, subscription status and usage (requires an sp_ API key). Anonymous callers should use get_limits for the static free-tier limits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | Yes | free | pro | team |
| cancelAt | No | |
| accountId | Yes | |
| portalAvailable | No | |
| currentPeriodEnd | No | |
| activeSubscription | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
All annotation hints are false, so the description carries the burden of behavioral disclosure. It discloses an authentication requirement (sp_ API key) and characterizes the operation as 'Show', implying a read-only, non-destructive access. It does not explicitly state 'does not modify state', but given the tool name and description, this is sufficiently clear for an agent. No contradiction with annotations.
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?
The description is a single, focused sentence with no wasted words. The core purpose is front-loaded, followed by the auth requirement and the routing to an alternative, all in compact, scannable structure.
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?
This is a low-complexity, zero-parameter tool with an output schema present. The description covers the tool's purpose, authentication requirement, and the alternative for anonymous callers. Nothing needed for correct invocation 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?
The input schema has zero parameters and schema coverage is 100%, so there are no parameter semantics to document. The baseline of 4 applies because the description adds no unnecessary parameter commentary and there is nothing missing.
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 description names the resource ('the authenticated account') and a specific verb ('Show'), and enumerates the exact fields returned (plan, subscription status, usage). It also differentiates this tool from the sibling get_limits by explicitly stating the account-specific scope, leaving no ambiguity about what the tool does.
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 clearly states a precondition ('requires an sp_ API key') and explicitly routes anonymous callers to the alternative tool get_limits. This is direct when-to-use versus when-not-to-use guidance, with the named sibling alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_limitsGet plan limitsAInspect
Show the ship.page plan matrix (anonymous free tier vs Pro $4/mo vs Team $19/mo) and, when an sp_ API key is present, the caller's current account/plan status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plans | Yes | Plan matrix: anonymous, pro, team |
| account | No | Present when an sp_ API key was supplied |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond annotations: it discloses the anonymous vs authenticated behavior and the public plan matrix. The word 'Show' implies a non-mutating operation, and while readOnlyHint is false, this is not an affirmative contradiction since false is not a positive claim of mutation.
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?
The description is a single, information-dense sentence with principal content front-loaded and the conditional case stated second. No unnecessary words or repetition of the title or schema.
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 tool with no parameters and an output schema, the description is complete: it specifies exactly what is shown in both the anonymous and API-key-present cases. Nothing an agent needs to decide whether to call it 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?
There are no parameters, so the description does not need to explain parameter meaning. The baseline for zero parameters is 4, and the description correctly avoids inventing parameter details while still clarifying the API key as an environmental condition.
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 description states a specific action ('Show') and a specific resource (the ship.page plan matrix), and adds the conditional account/plan status. It is clear about what the tool does, though it does not explicitly differentiate itself from the overlapping 'get_account' sibling for account status.
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 gives clear context for when the tool provides just the public matrix versus when it also shows the caller's status (when an sp_ API key is present). It does not mention alternatives or exclusions, but for a zero-parameter informational tool this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dropsList your dropsAInspect
List drops owned by the authenticated account (requires an sp_ API key; anonymous drops are not listable). Returns slug, url, name, file counts, expiry and password_protected, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max drops to return (1-500, default 100). | |
| offset | No | Number of drops to skip (default 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| drops | Yes | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no hints (all false), so the description carries the burden. It discloses the auth requirement, that anonymous drops are excluded, the exact returned fields, and newest-first ordering — meaningful behavior beyond the schema.
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 sentences with no filler. Purpose and auth constraint are front-loaded, followed by return fields and ordering. Every element earns its place.
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?
Complete for a simple list tool: output schema covers return values, pagination lives in the documented schema, and auth requirements and return composition are described. Slightly richer tie-in to how ordering interacts with offset could push it higher, but nothing essential 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% for both limit and offset, so the schema fully documents the parameters. The description adds nothing substantive about parameters beyond the schema, but it needn't — 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 (list) + resource (drops) + scope (owned by the authenticated account), immediately distinguishing it from get_account and get_limits. The mention of returned fields makes the operation unmistakable.
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 operational context: requires an sp_ API key, anonymous drops are not listable. While it doesn't name a specific sibling alternative, none of the siblings compete for this operation, so the context is sufficient for an agent to know when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_drop_passwordRemove a drop passwordADestructiveInspect
Remove password protection from a drop you own, making it readable by anyone with its URL. Requires an sp_ API key; works even after your paid subscription lapses.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The drop slug (the subdomain part of its URL). |
Output Schema
| Name | Required | Description |
|---|---|---|
| slug | Yes | |
| password_protected | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing the destructive consequence (password removed and drop becomes publicly readable), the authentication requirement, and the surprising behavior of remaining functional after subscription lapse. No contradiction with destructiveHint or readOnlyHint exists.
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 concise sentences with the core action front-loaded and no unnecessary detail. Every clause adds useful decision-making information.
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 one-parameter mutation with an output schema, the description covers prerequisites, side effects, authentication, and an edge-case licensing condition. Nothing essential is missing for an agent to select and invoke this tool 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 single parameter `slug` is already fully described in the input schema as the drop slug subdomain part. The description adds no additional parameter-level detail, so the schema carries the semantic burden.
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 description clearly states the action ('Remove password protection'), the resource ('a drop you own'), and the outcome ('making it readable by anyone with its URL'). This unambiguously distinguishes it from sibling tools like set_drop_password.
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 specifies key usage context: the drop must be owned, an sp_ API key is required, and the action works even after subscription lapse. It does not explicitly name set_drop_password as the alternative, but the conditions for when to use this tool are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_dropRestore an expired dropAInspect
Bring back an expired drop owned by the authenticated account while its files are still retained (requires an sp_ API key). Free accounts restore up to 30 days past expiry and the drop comes back at the 90-day lifetime; paid plans restore up to 90 days past expiry and the drop never expires again.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The drop slug (the subdomain part of its ${domain} URL). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| slug | Yes | |
| restored | Yes | False when the drop was not expired and nothing changed |
| expires_at | Yes | ISO timestamp after the restore, or null when the drop never expires |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, and the description adds meaningful behavioral details: the authentication requirement, file retention dependency, restore windows, and resulting lifetime behavior. This goes beyond what annotations alone provide.
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 sentences with no filler: the first states the core action and key prerequisite, the second summarizes plan-specific behavior. Every clause adds necessary information and the most important action is front-loaded.
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 single-parameter tool with an output schema and annotations, the description provides all essential operational context: ownership, authentication, retention condition, time limits, and post-restore lifetime. Nothing critical is missing for an agent to decide whether and how to call it.
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% with the only parameter, slug, fully described as the subdomain part of the drop URL. The description does not add parameter-level meaning, but the schema already handles it, so the baseline of 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?
The description states a specific verb ('bring back') and resource ('an expired drop owned by the authenticated account'), clearly differentiating it from siblings like delete_drop and list_drops. The scope is precise: restore only expired drops while files are still retained.
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 gives explicit usage conditions: requires an sp_ API key, only works for expired drops, and applies different restore windows for free vs paid accounts. It does not explicitly name alternative tools, but the conditions make when-to-use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_drop_passwordSet a drop passwordADestructiveInspect
Set or rotate the shared password on a drop you own. Requires an sp_ API key and active paid Pro/Team; unavailable billing returns an error, not a public drop. Visitors unlock in their browser. Never put the password in a URL.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The drop slug (the subdomain part of its URL). | |
| password | Yes | Shared password: 8-128 Unicode characters, at most 512 UTF-8 bytes. Requires active paid Pro/Team. Sent privately, never in the URL or response. Omit on a live named redeploy to preserve protection. Recreating an expired or purged name is a new drop: send the password again. |
Output Schema
| Name | Required | Description |
|---|---|---|
| slug | Yes | |
| password_protected | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a destructive, non-read-only, non-idempotent write operation. The description adds valuable behavioral context beyond that: billing failures error out instead of exposing a public drop, visitors unlock in their browser, and the password must not be placed in a URL. This meaningfully supplements the structured hints without contradicting them.
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?
The description is compact, front-loaded with the core action, and every sentence earns its place: the operation, prerequisites, failure behavior, visitor experience, and a security warning. No redundant phrases or filler are present.
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 write operation with annotations, a fully documented schema, and an output schema, the description covers the essential context: authentication needs, billing prerequisite, failure mode, security constraints, and the end-user effect. Nothing critical for selecting or calling the tool 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%, so the schema already fully documents both slug and password, including length limits, UTF-8 byte constraints, and redeploy behavior. The description adds minimal parameter-specific semantics beyond reinforcing that the password is shared and should be kept out of URLs, so the baseline score of 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?
The description opens with a specific verb and resource: 'Set or rotate the shared password on a drop you own.' This clearly defines the operation and naturally distinguishes it from the sibling remove_drop_password tool, which removes rather than sets or rotates.
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 gives clear context for when the tool is usable: it requires an sp_ API key and active paid Pro/Team, and it warns that unavailable billing returns an error rather than falling back to a public drop. It does not explicitly mention alternatives or when to prefer remove_drop_password, but the usage context is strong.
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.
2 tool updates
- Changed
deploy_files1 field changed- added
Input schema / properties / agentAdded value: +{ + "description": "Name of the AI agent or app publishing this drop, e.g. 'chatgpt', 'claude', 'cursor'. AI agents: always set this.", + "maxLength": 64, + "type": "string" +}
- Changed
deploy_html1 field changed- added
Input schema / properties / agentAdded value: +{ + "description": "Name of the AI agent or app publishing this drop, e.g. 'chatgpt', 'claude', 'cursor'. AI agents: always set this.", + "maxLength": 64, + "type": "string" +}
2 tool updates
- Changed
deploy_files1 field changed- changed
Output schema / properties / slug / descriptionPrevious value: -"Drop slug; the site is live at https://<slug>.shipped.cloud/"New value: +"Drop slug; the site is live at https://<slug>.shipped.run/"
- Changed
deploy_html1 field changed- changed
Output schema / properties / slug / descriptionPrevious value: -"Drop slug; the site is live at https://<slug>.shipped.cloud/"New value: +"Drop slug; the site is live at https://<slug>.shipped.run/"
2 tool updates
- Changed
deploy_files1 field changed- changed
Output schema / properties / slug / descriptionPrevious value: -"Drop slug; the site is live at https://<slug>.shipped.run/"New value: +"Drop slug; the site is live at https://<slug>.shipped.cloud/"
- Changed
deploy_html1 field changed- changed
Output schema / properties / slug / descriptionPrevious value: -"Drop slug; the site is live at https://<slug>.shipped.run/"New value: +"Drop slug; the site is live at https://<slug>.shipped.cloud/"
2 tool updates
- Changed
deploy_files1 field changed- changed
Output schema / properties / slug / descriptionPrevious value: -"Drop slug; the site is live at https://<slug>.shipped.page/"New value: +"Drop slug; the site is live at https://<slug>.shipped.run/"
- Changed
deploy_html1 field changed- changed
Output schema / properties / slug / descriptionPrevious value: -"Drop slug; the site is live at https://<slug>.shipped.page/"New value: +"Drop slug; the site is live at https://<slug>.shipped.run/"
6 tool updates
- Changed
append_files1 field changed- changed
Input schema / properties / slug / descriptionPrevious value: -"The drop slug (the subdomain part of its shipped.run URL)."New value: +"The drop slug (the subdomain part of its ${domain} URL)."
- Changed
claim_drop1 field changed- changed
Input schema / properties / slug / descriptionPrevious value: -"The drop slug (the subdomain part of its shipped.run URL)."New value: +"The drop slug (the subdomain part of its ${domain} URL)."
- Changed
delete_drop1 field changed- changed
Input schema / properties / slug / descriptionPrevious value: -"The drop slug (the subdomain part of its shipped.run URL)."New value: +"The drop slug (the subdomain part of its ${domain} URL)."
- Changed
deploy_files1 field changed- changed
Output schema / properties / slug / descriptionPrevious value: -"Drop slug; the site is live at https://<slug>.shipped.run/"New value: +"Drop slug; the site is live at https://<slug>.shipped.page/"
- Changed
deploy_html1 field changed- changed
Output schema / properties / slug / descriptionPrevious value: -"Drop slug; the site is live at https://<slug>.shipped.run/"New value: +"Drop slug; the site is live at https://<slug>.shipped.page/"
- Changed
restore_drop1 field changed- changed
Input schema / properties / slug / descriptionPrevious value: -"The drop slug (the subdomain part of its shipped.run URL)."New value: +"The drop slug (the subdomain part of its ${domain} URL)."
5 tool updates
- Changed
deploy_files3 fields changed- added
Input schema / properties / passwordAdded value: +{ + "description": "Shared password: 8-128 Unicode characters, at most 512 UTF-8 bytes. Requires active paid Pro/Team. Sent privately, never in the URL or response. Omit on a live named redeploy to preserve protection. Recreating an expired or purged name is a new drop: send the password again.", + "maxLength": 128, + "minLength": 8, + "type": "string", + "writeOnly": true +} - added
Output schema / properties / password_protectedAdded value: +{ + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "slug", - "url", - "files", - "plan", - "expires_at" -]New value: +[ + "slug", + "url", + "files", + "plan", + "expires_at", + "password_protected" +]
- Changed
deploy_html3 fields changed- added
Input schema / properties / passwordAdded value: +{ + "description": "Shared password: 8-128 Unicode characters, at most 512 UTF-8 bytes. Requires active paid Pro/Team. Sent privately, never in the URL or response. Omit on a live named redeploy to preserve protection. Recreating an expired or purged name is a new drop: send the password again.", + "maxLength": 128, + "minLength": 8, + "type": "string", + "writeOnly": true +} - added
Output schema / properties / password_protectedAdded value: +{ + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "slug", - "url", - "files", - "plan", - "expires_at" -]New value: +[ + "slug", + "url", + "files", + "plan", + "expires_at", + "password_protected" +]
- Changed
list_drops2 fields changed- added
Output schema / properties / drops / items / properties / password_protectedAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / drops / items / requiredPrevious value: -[ - "slug", - "url" -]New value: +[ + "slug", + "url", + "password_protected" +]
- Added
remove_drop_password - Added
set_drop_password
2 tool updates
- Changed
deploy_files1 field changed- changed
Input schema / properties / ttl / descriptionPrevious value: -"Lifetime in seconds (min 60). Anonymous: max 604800 (7 days), default 7 days. Signed-in free: max 2592000 (30 days), default 30 days. Paid: any value, omit for no expiry."New value: +"Lifetime in seconds (min 60). Anonymous: max 2592000 (30 days), default 30 days. Signed-in free: max 7776000 (90 days), default 90 days. Paid: any value, omit for no expiry."
- Changed
deploy_html1 field changed- changed
Input schema / properties / ttl / descriptionPrevious value: -"Lifetime in seconds (min 60). Anonymous: max 604800 (7 days), default 7 days. Signed-in free: max 2592000 (30 days), default 30 days. Paid: any value, omit for no expiry."New value: +"Lifetime in seconds (min 60). Anonymous: max 2592000 (30 days), default 30 days. Signed-in free: max 7776000 (90 days), default 90 days. Paid: any value, omit for no expiry."
6 tool updates
- Changed
append_files1 field changed- changed
Input schema / properties / slug / descriptionPrevious value: -"The drop slug (the subdomain part of its shipped.page URL)."New value: +"The drop slug (the subdomain part of its shipped.run URL)."
- Changed
claim_drop1 field changed- changed
Input schema / properties / slug / descriptionPrevious value: -"The drop slug (the subdomain part of its shipped.page URL)."New value: +"The drop slug (the subdomain part of its shipped.run URL)."
- Changed
delete_drop1 field changed- changed
Input schema / properties / slug / descriptionPrevious value: -"The drop slug (the subdomain part of its shipped.page URL)."New value: +"The drop slug (the subdomain part of its shipped.run URL)."
- Changed
deploy_files1 field changed- changed
Output schema / properties / slug / descriptionPrevious value: -"Drop slug; the site is live at https://<slug>.shipped.page/"New value: +"Drop slug; the site is live at https://<slug>.shipped.run/"
- Changed
deploy_html1 field changed- changed
Output schema / properties / slug / descriptionPrevious value: -"Drop slug; the site is live at https://<slug>.shipped.page/"New value: +"Drop slug; the site is live at https://<slug>.shipped.run/"
- Changed
restore_drop1 field changed- changed
Input schema / properties / slug / descriptionPrevious value: -"The drop slug (the subdomain part of its shipped.page URL)."New value: +"The drop slug (the subdomain part of its shipped.run URL)."
2 tool updates
- Changed
deploy_files1 field changed- added
Input schema / properties / emailAdded value: +{ + "description": "Contact email for an anonymous deploy: the one-time claim link is mailed to it, so the drop stays recoverable even if the claim_token from the response is lost. Pass it whenever the deploy is for a human. Ignored for authenticated deploys (those are owned already).", + "type": "string" +}
- Changed
deploy_html1 field changed- added
Input schema / properties / emailAdded value: +{ + "description": "Contact email for an anonymous deploy: the one-time claim link is mailed to it, so the drop stays recoverable even if the claim_token from the response is lost. Pass it whenever the deploy is for a human. Ignored for authenticated deploys (those are owned already).", + "type": "string" +}
2 tool updates
- Added
append_files - Added
restore_drop
3 tool updates
- Changed
claim_drop2 fields changed- added
Output schema / properties / expires_atAdded value: +{ + "description": "ISO timestamp after the claim's lifetime extension, or null", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / restoredAdded value: +{ + "description": "True when the drop had already expired and was revived by the claim", + "type": "boolean" +}
- Changed
deploy_files1 field changed- changed
Input schema / properties / ttl / descriptionPrevious value: -"Lifetime in seconds (min 60). Free: max 604800 (7 days), default 7 days. Paid: any value, omit for no expiry."New value: +"Lifetime in seconds (min 60). Anonymous: max 604800 (7 days), default 7 days. Signed-in free: max 2592000 (30 days), default 30 days. Paid: any value, omit for no expiry."
- Changed
deploy_html1 field changed- changed
Input schema / properties / ttl / descriptionPrevious value: -"Lifetime in seconds (min 60). Free: max 604800 (7 days), default 7 days. Paid: any value, omit for no expiry."New value: +"Lifetime in seconds (min 60). Anonymous: max 604800 (7 days), default 7 days. Signed-in free: max 2592000 (30 days), default 30 days. Paid: any value, omit for no expiry."
3 tool updates
- Added
claim_drop - Changed
deploy_files1 field changed- added
Output schema / properties / claim_tokenAdded value: +{ + "description": "One-time claim token (spc_...), present only on anonymous deploys and shown once. Anyone holding it can attach the drop to an account via claim_drop.", + "type": "string" +}
- Changed
deploy_html1 field changed- added
Output schema / properties / claim_tokenAdded value: +{ + "description": "One-time claim token (spc_...), present only on anonymous deploys and shown once. Anyone holding it can attach the drop to an account via claim_drop.", + "type": "string" +}
6 tool updates
- First observed
delete_drop - First observed
deploy_files - First observed
deploy_html - First observed
get_account - First observed
get_limits - First observed
list_drops
Related MCP Connectors
Deploy AI-generated HTML/CSS/JS to instant public HTTPS URLs from any MCP-compatible agent.
Deploy HTML or dist/ to a live HTTPS URL. No account. Drop, MCP, or CLI.
Instant web publishing for AI agents. POST HTML, get a live URL. No account needed.
Publish HTML, Markdown, and multi-file sites as shareable URLs instantly via MCP.
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
- FlicenseNot gradedqualityDmaintenanceDeploys HTML pages to an online preview platform and returns a shareable URL via MCP protocol.-
- AlicenseAqualityAmaintenanceEnables publishing sanitized static HTML pages from an MCP agent and receiving shareable URLs, with tools for updating, listing, publishing, and deleting pages.123 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables coding agents to publish HTML pages and small sites over MCP, returning a stable link and keeping every version, with access limited to specific people, an organization, or anyone with the link.AGPL 3.0
Glama MCP Gateway
Add one secure layer between your agents and this server.