shipstatic
The server deploys static websites and manages deployments and custom domains from an MCP client.
Deploy a static site: Publish a folder and get a live URL instantly; optionally password-protect it, add labels, set a TTL (with account), or use an idempotency key for safe retries.
No-account publishing:
deployments_uploadworks without an API key and returns a claim link (site lives for 3 days).Manage deployments: List, view details, update labels, or permanently delete deployments (with confirmation).
Manage custom domains: Create/update domains, link them to deployments, list/get domain details, validate availability, fetch required DNS records, detect DNS provider, share DNS setup, trigger DNS verification, or delete domains (with confirmation).
Check account:
whoamishows email, plan, usage, and caps when authenticated.
Provides the ability to identify if a domain's DNS is managed by Cloudflare, helping users know where to configure DNS records.
Provides the ability to identify if a domain's DNS is managed by Namecheap, helping users know where to configure DNS records.
ShipStatic MCP
One URL. Your agent ships.
⚡ You probably don't need to install this. The same server is hosted at
https://mcp.shipstatic.com— drop that URL into any MCP client and your agent can publish a website in its next message. No install, no Node.js, no signup, no API key.This package is the local alternative. Install it when your agent needs to deploy a folder on your own machine, when you'd rather configure a token once than sign in, or when your client doesn't speak OAuth yet — the same fifteen tools, reached the other way. Local setup ↓
Deploy static websites, landing pages, and prototypes instantly from AI agents. Ask yours to put your site online and get back a real, shareable link in seconds.
Hosted: start here
Drop https://mcp.shipstatic.com into any MCP client. No install, no signup, no API key — your agent can publish a website in its next message.
https://mcp.shipstatic.comClaude Code
claude mcp add --transport http shipstatic https://mcp.shipstatic.comClaude Desktop and claude.ai
Settings → Connectors → Add custom connector, paste https://mcp.shipstatic.com, save.
Cursor, Antigravity, Windsurf, n8n, Zed — anywhere with mcp.json
{
"mcpServers": {
"shipstatic": {
"url": "https://mcp.shipstatic.com"
}
}
}VS Code
Install ShipStatic for VS Code — the server is built in, with no config at all.
Then just ask
"Put my site online."
Your agent publishes the files and answers with two links:
The live site — a real URL you can share right away.
A claim link — the site stays live for 3 days; open the claim link to keep it forever. A free account is all it takes.
Want the site private? Ask for a password — visitors must enter it before they can see anything.
Then connect, if you want more
Everything above works with no account at all. Connect one when your client offers to sign you in, and the same URL answers with the rest: everything you've shipped, your own domains, and sites that stay up permanently. Nothing to install, no key to paste — your client starts the sign-in itself.
Related MCP server: deloc-mcp
Local: the same tools, from your own machine
Install this package when your agent needs to deploy a folder on your own machine — the hosted endpoint takes files inline, so it has no path to read from — when you'd rather configure a token once than sign in, or when your MCP client doesn't speak OAuth yet.
The config asks for one thing: SHIP_TOKEN. Its value is your API key — one credential, two names. The console mints it as an API key (it starts with ship-), and the setting that carries it is called the token. Get yours free at my.shipstatic.com/api-key, paste it where the snippets below show ship-your-api-key, and every site you publish lands in your account and never expires, with a rate limit of your own instead of the shared anonymous pools.
The key is optional: leave it out and the local server behaves exactly like the hosted endpoint with no account connected — public sites, claim links, live for 3 days.
The server runs with npx, which ships with Node.js (20.19 or newer).
Claude Code
claude mcp add shipstatic -e SHIP_TOKEN=ship-your-api-key -- npx -y @shipstatic/mcpCursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"shipstatic": {
"command": "npx",
"args": ["-y", "@shipstatic/mcp"],
"env": { "SHIP_TOKEN": "ship-your-api-key" }
}
}
}Antigravity
Add to ~/.gemini/antigravity/mcp_config.json:
{
"mcpServers": {
"shipstatic": {
"command": "npx",
"args": ["-y", "@shipstatic/mcp"],
"env": { "SHIP_TOKEN": "ship-your-api-key" }
}
}
}Windsurf, Zed, and other MCP clients
Same config shape — npx -y @shipstatic/mcp, with SHIP_TOKEN in env. Works with any MCP-compatible client.
Tools
All fifteen tools are on both doors. What changes is not which tools exist, but which ones answer: deployments_upload is the one that needs no account, and the other fourteen answer once you have connected one (hosted) or set SHIP_TOKEN (local).
Publishing — no account needed
Tool | Description |
| Publish files and get a live URL instantly, optionally protected by a password |
Deployments — with an account
Tool | Description |
| List all deployments with their URLs, status, labels, and password protection state. Pages with |
| Get deployment details including URL, status, file count, size, labels, and password protection state |
| Update the labels on a deployment for organization and filtering |
| Permanently delete a deployment and all its files |
Domains — with an account
Tool | Description |
| Connect a custom domain to your site, switch deployments, or update labels |
| List all domains with their linked deployment and verification status. Pages with |
| Get domain details including linked deployment, verification status, and labels |
| Get the DNS records you need to configure at your DNS provider |
| The DNS provider recorded for a domain, if known (e.g. Cloudflare, Namecheap) |
| Get a shareable link so someone else can see the required DNS records |
| Check if a domain name is valid and available before connecting it |
| Check if DNS is configured correctly after you set up the records |
| Permanently disconnect and delete a custom domain |
Account — with an account
Tool | Description |
| Your account's email, name, plan, current usage and plan caps |
Paging long lists
deployments_list and domains_list accept limit and cursor. Each response carries a cursor — pass it back to fetch the next page; null means you are on the last one.
Retrying a deploy safely
deployments_upload accepts an idempotencyKey. If a deploy times out you cannot tell "it never landed" from "it landed and the response was lost", and retrying without a key creates a second site. Send the same key on the retry and the original deployment is returned instead.
Key the attempt, not the try — a run id, a commit sha, or a uuid generated before the first call. A key that changes on every retry does nothing.
Deployments that clean themselves up
deployments_upload accepts a ttl in seconds. The deployment expires when the time is up and the platform reclaims it — handy for previews and throwaway iterations you would otherwise have to remember to delete.
{ "path": "/path/to/dist", "ttl": 3600 }It needs an account — SHIP_TOKEN here, a connected account on the hosted endpoint: a deploy with no account already expires on the platform's schedule, so a ttl on one is refused rather than ignored. A deployment carrying a ttl cannot be linked to a custom domain — deploy without one when the site needs a domain.
Registry
Published to the MCP Registry as com.shipstatic/mcp. Registry-aware clients see both the hosted endpoint and the local install and pick whichever fits their environment.
Also available
Surface | Reach it |
| |
Search "ShipStatic" in the Marketplace | |
| |
Search "ShipStatic" in n8n's node panel | |
| |
One file, for any skills-aware tool |
License
MIT
Available Tools
15 toolsdeployments_getARead-onlyIdempotentInspect
Get deployment details including URL, status, file count, size, and labels.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment | Yes | Deployment hostname (e.g. "happy-cat-abc1234.shipstatic.com"). Returned by deployments_upload or deployments_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (read-only, idempotent). Description adds return fields but does not disclose any additional behavioral traits beyond what annotations 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?
Single sentence, no unnecessary text, front-loaded with purpose.
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 simple read-only tool with one parameter, the description covers what it returns and is sufficient for correct invocation. No output schema needed.
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 of the deployment parameter is detailed and clear (100% coverage). Tool description adds no further parameter info, so baseline score 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?
Clearly states it gets deployment details with specific fields (URL, status, etc.), distinguishing it from sibling tools like deployments_list and deployments_remove.
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?
No explicit guidance on when to use this tool vs alternatives. The input schema hints that deployment hostname comes from other tools, but the description itself lacks context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployments_listARead-onlyIdempotentInspect
List all deployments with their URLs, status, and labels.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, non-destructive, idempotent behavior. The description adds context about the output fields (URLs, status, labels), which is beyond what annotations provide. No contradiction.
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 sentence that is front-loaded with the main purpose and includes key output details. Every word is valuable, with no redundancy.
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?
The description covers the basic purpose and output fields, but lacks details on pagination, ordering, or filtering. Without an output schema, more context about the response format would be helpful.
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?
No parameters exist in the schema, so the description cannot add parameter-level detail. Baseline for 0 parameters is 4, which is appropriate as there is nothing to compensate.
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 tool lists all deployments and explicitly mentions the returned fields (URLs, status, labels). This distinguishes it from sibling tools like deployments_get (single) and deployments_remove (delete).
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 implies it is used to list all deployments, which is clear. However, no explicit guidance on when not to use it or alternatives is provided, though sibling tools suggest other operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployments_removeADestructiveIdempotentInspect
Permanently delete a deployment and its files. You MUST confirm with the user before calling this tool, referencing the deployment.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment | Yes | Deployment hostname to delete (e.g. "happy-cat-abc1234.shipstatic.com") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations by specifying the deletion is permanent and includes files, and mandates user confirmation. No contradictions 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?
Single sentence plus mandatory instruction, concise and front-loaded. No wasted words.
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?
Given the single parameter, destructive nature explained in annotations, and clear description, the tool definition is complete and well-suited for agent 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?
Input schema describes the single parameter fully with an example. Description adds no additional semantic value beyond what schema already provides.
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?
Clearly states the tool permanently deletes a deployment and its files, which distinguishes it from sibling tools like deployments_get or deployments_list.
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 instructs to confirm with the user before calling, referencing the deployment. No alternatives or exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployments_setAIdempotentInspect
Update deployment labels. Replaces all existing labels.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment | Yes | Deployment hostname (e.g. "happy-cat-abc1234.shipstatic.com"). Use deployments_list to find deployments. | |
| labels | Yes | Labels to set. Replaces all existing labels. Pass empty array to clear. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and non-destructive behavior. The description adds clarity by explicitly stating that all existing labels are replaced, which is a key behavioral detail.
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 extremely concise with two sentences, no redundant information, and the key point 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?
Given the tool's simplicity, the description adequately covers its purpose and behavior. No output schema exists, but the description does not explain return values; however, the context from annotations and schema is sufficient.
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 detailed descriptions for each parameter. The tool description adds no new information beyond the schema, providing only a high-level summary.
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 specific action 'Update deployment labels' and the critical behavior 'Replaces all existing labels', which distinguishes it from siblings like deployments_get or deployments_list.
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 does not explicitly state when to use this tool versus alternatives, though the deployment parameter hint in the schema provides indirect guidance by suggesting deployments_list for finding deployments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployments_uploadAInspect
Deploy a static site instantly. No account or API key required. Returns the live URL, file count, and size. Without SHIP_API_KEY, the response includes a claim URL (site expires in 3 days) — always show both the deployment URL and claim URL to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the build output directory to deploy (e.g. "/Users/me/project/dist") | |
| labels | No | Labels for organizing deployments (e.g. ["production", "v1.2"]). Lowercase, 3-25 chars, allows . _ - separators. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral traits: no auth needed, returns live URL/file count/size, and claim URL behavior with expiry. Annotations (destructiveHint=false, openWorldHint=true) are supported and not contradicted.
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 are efficient, but the second sentence is lengthy and could be split for readability. No wasted words.
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?
Given no output schema, description adequately explains return values (live URL, file count, size) and claim URL. Parameters are well-documented in schema. Missing details on error cases or rate limits.
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 descriptions for both parameters. Description adds context about without-API-key behavior but does not further explain parameters. 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?
The description clearly states 'Deploy a static site instantly', which is a specific verb and resource. It distinguishes itself from siblings (e.g., deployments_get, deployments_list) by focusing on upload/creation.
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 states no account/API key required, and explains behavior with and without SHIP_API_KEY. Provides actionable instruction to always show both URLs. Missing explicit when-not-to-use or comparison to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domains_dnsARead-onlyIdempotentInspect
Look up the DNS provider for a domain (e.g. Cloudflare, Namecheap). Helps the user know where to configure their DNS records.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain name to look up DNS provider for (e.g. "www.example.com") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description's statement 'look up' is consistent but adds no additional behavioral context beyond what annotations 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 concise sentences, no wasted words, front-loaded with purpose and example immediately.
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 simple read-only tool with one parameter and no output schema, the description fully addresses what the tool does and why it's useful.
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% for the single parameter 'domain'. Tool description adds no extra meaning beyond the schema's own description.
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?
Description clearly states the action (look up) and resource (DNS provider for a domain), with specific examples (Cloudflare, Namecheap). It distinguishes from sibling tools like domains_records which manage DNS records.
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?
Description implies when to use: to find where to configure DNS records. No explicit exclusions or alternatives, but the context is clear given the simple use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domains_getARead-onlyIdempotentInspect
Get domain details including URL, linked deployment, verification status, and labels.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain name (e.g. "www.example.com"). Use domains_list to find names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds value by listing the return fields (URL, deployment, verification, labels). No behavioral contradictions or hidden side effects noted.
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?
Single sentence, no wasted words, front-loaded with verb and resource. Efficiently conveys the tool's action and scope.
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?
No output schema exists, so the description partially compensates by listing key return fields. Combined with strong annotations (idempotent, read-only), the definition is adequately complete for a simple retrieval 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 parameter 'domain'. The description adds example format and suggests using domains_list to find names, which aids correct invocation. The main description also hints at output fields, helping interpret the parameter's purpose.
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 'Get domain details' with specific fields (URL, linked deployment, verification status, labels). It distinguishes from sibling tools like domains_list (list all) and domains_set (modify).
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 main description does not explicitly state when to use this tool vs alternatives, but the input schema parameter description advises 'Use domains_list to find names', implying a typical workflow. The purpose is clear enough given the sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domains_listARead-onlyIdempotentInspect
List all domains with their URLs, linked deployments, and verification status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds value by detailing the return fields (URLs, deployments, verification status), which compensates for the lack of an output schema. However, it does not mention any pagination or rate limiting, but these are less critical given the simple nature.
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, concise sentence that is front-loaded with the verb 'List' and the resource 'domains'. It contains no extraneous words or unnecessary 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?
For a list tool with no parameters and no output schema, the description adequately specifies the output content (URLs, deployments, verification status). It covers the key aspects needed for an AI agent to understand what the tool returns, without requiring additional context.
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 add parameter information. The baseline for 0 params is 4, and the schema coverage is 100% (empty). The description correctly focuses on the output.
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 it lists all domains and specifies the included information: URLs, linked deployments, and verification status. It distinguishes itself from sibling tools like domains_get by being a list operation.
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 implies usage for listing all domains but does not provide explicit guidance on when to use this tool versus alternatives like domains_get or other filtering methods. No when-not or exclusion criteria are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domains_recordsARead-onlyIdempotentInspect
Get the DNS records the user needs to configure at their DNS provider. Call after domains_set. You MUST show the returned records to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain name. Must be a domain previously created with domains_set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. Description adds context about prerequisite (domains_set) and user-facing action (must show records), which is valuable beyond structured data.
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, no wasted words. First sentence states purpose, second gives actionable instruction. Extremely efficient.
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?
Sufficient for a simple read tool with rich annotations. Covers purpose, prerequisite, and user interaction. Minor gap: no mention of output format, but not critical given no output schema.
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 covers domain parameter with description. Description reinforces that domain must be from domains_set, adding usage constraint and meaning beyond 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?
The description clearly states the tool retrieves DNS records for configuration, with explicit context to call after domains_set, distinguishing it from siblings like domains_set or domains_validate.
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 instructs to call after domains_set and mandates showing records to the user. Lacks explicit 'when not to use' or alternative tools, but provides clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domains_removeADestructiveIdempotentInspect
Permanently delete a domain. You MUST confirm with the user before calling this tool, referencing the domain name.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain name to delete (e.g. "www.example.com") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint: true. The description adds the confirmation requirement, which is helpful behavioral context, but does not elaborate on other traits like permissions or side effects.
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, no unnecessary words. Front-loaded with the action and followed by a crucial safety instruction.
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 simple delete tool with one parameter and annotations covering destructive and idempotent hints, the description is complete. It adequately informs the agent of the destructive action and the required user confirmation.
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 fully describes the single parameter with a clear description and example. The tool description adds no additional meaning beyond what the schema provides.
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 'Permanently delete a domain', which is a specific verb and resource. It distinguishes itself from sibling tools like domains_get, domains_list, and domains_set.
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 instructs the agent to confirm with the user before calling, referencing the domain name. However, it does not mention when not to use this tool or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domains_setAIdempotentInspect
Create or update a custom domain. Can reserve a name (omit deployment), link it to a deployment, switch deployments, or update labels. After creating, call domains_records and show the DNS records to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain name (e.g. "www.example.com" or "blog.example.com") | |
| deployment | No | Deployment to serve on this domain (e.g. "happy-cat-abc1234.shipstatic.com"). Omit to reserve the domain without linking. | |
| labels | No | Labels for organizing domains (e.g. ["production"]). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavior: idempotent upsert, option to omit deployment for reservation. Add details beyond annotations (destructiveHint=false, idempotentHint=true) without contradiction.
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 concise sentences with front-loaded purpose, specific details, and a clear next step.
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?
No output schema, so description should hint at return value. It does not specify what the tool returns, but provides enough context for usage.
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 description adds minimal value. However, it clarifies the deployment parameter can be omitted to reserve the domain.
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?
Clearly states create or update custom domain, with specific verbs and resource. Distinguishes from siblings like domains_get, domains_list, etc.
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 use cases (reserve, link, switch, update) and a follow-up action (call domains_records). However, does not explicitly state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domains_validateARead-onlyIdempotentInspect
Check if a domain name is valid and available before creating it. Returns the normalized form and availability.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain name to check (e.g. "www.example.com"). Call before domains_set to check availability. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds that it returns 'normalized form and availability,' which is useful behavioral context beyond the annotations. No contradictions.
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 that states the purpose and the return value. It is concise and front-loaded with the key 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?
Given the tool's simplicity (one parameter, safe read operation), the description and annotations provide complete context. Although there is no output schema, the description adequately explains the return value. The tool is fully understandable for correct selection and 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 the parameter description itself includes usage guidance ('Call before domains_set'). The tool description does not add additional semantics beyond what the schema already provides, so a 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 clearly states the action ('Check if a domain name is valid and available'), the resource ('domain name'), and the return value ('normalized form and availability'). It distinguishes from sibling tools like 'domains_set' (creation) by positioning itself as a pre-check.
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 says 'before creating it' and the schema parameter description explicitly says 'Call before domains_set to check availability.' This provides clear context for when to use the tool. No exclusions or alternatives are mentioned, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domains_verifyAIdempotentInspect
Trigger DNS verification for a custom domain. Call after the user has configured DNS records from domains_records. Verification is asynchronous — the domain status updates once DNS propagates.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain name to verify DNS for. Must be a domain previously created with domains_set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint true and destructiveHint false. The description adds the important behavioral detail that verification is asynchronous and domain status updates after DNS propagation. This goes beyond what annotations 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?
The description is concise with two short sentences. The first sentence states the main action, and the second provides context and behavior. No unnecessary 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?
Given the tool's simplicity (one parameter, no output schema, clear annotations), the description is complete. It explains when to call, what it does, the async nature, and preconditions. No gaps remain.
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 100% coverage for the single parameter, but the description adds the requirement that the domain must have been previously created with domains_set, which is not in the schema. This provides additional meaning 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?
The description clearly states the verb 'Trigger DNS verification' and specifies the resource 'custom domain'. It distinguishes from sibling tools by noting it is for verification after DNS record configuration, and mentions the asynchronous nature.
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 provides explicit guidance: 'Call after the user has configured DNS records from domains_records.' It also clarifies that verification is asynchronous. However, it does not explicitly state when not to use this tool or mention alternatives, but the context with sibling tools is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiARead-onlyIdempotentInspect
Show authenticated account details including email, plan, and usage.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and open-world behavior. The description adds context about returned fields (email, plan, usage) but doesn't disclose authentication requirements or error scenarios.
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?
Single, front-loaded sentence with no extraneous words. Every part serves a purpose.
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?
Given no parameters and rich annotations, the description is largely sufficient. However, without an output schema, details on return format or error handling would improve completeness.
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?
No parameters exist, so the description needs no parameter explanation. Baseline of 4 applies as schema coverage is 100%.
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 verb 'Show' and the resource 'authenticated account details', with specific attributes (email, plan, usage). This distinguishes it from sibling tools focused on deployments and domains.
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?
No explicit when-to-use or when-not-to-use guidance. However, as the only tool exposing account details, usage is implied. Lacks exclusions or alternatives.
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.
15 tool updates
v0.4.5- First observed
deployments_get - First observed
deployments_list - First observed
deployments_remove - First observed
deployments_set - First observed
deployments_upload - First observed
domains_dns - First observed
domains_get - First observed
domains_list - First observed
domains_records - First observed
domains_remove - First observed
domains_set - First observed
domains_share - First observed
domains_validate - First observed
domains_verify - First observed
whoami
TDQS
Scored across 15 tools
All tools are clearly grouped into deployments, domains, and whoami. Each tool has a distinct purpose and description, with no overlapping functionality. For example, deployments_upload is for creating deployments, while deployments_set updates labels, and they are not ambiguous.
Tool names follow a consistent {resource}_{action} pattern using snake_case (e.g., deployments_get, domains_list). The only exception is whoami, which is a single-word tool, but it is still clear and fits the pattern of a standalone action.
With 15 tools, the server is well-scoped for static site deployment and domain management. It covers all necessary operations without being overwhelming or too sparse.
The tool set provides full CRUD for deployments (create via upload, read, update labels, delete) and comprehensive domain management (validate, set, get, list, records, verify, share, DNS lookup). There are no obvious gaps in the workflow.
Maintenance
Related MCP Connectors
Hosted MCP for creating, checking, deploying, and hosting static sites for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Deploy AI-generated HTML/CSS/JS to instant public HTTPS URLs from any MCP-compatible agent.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceAI-native static site generator with built-in MCP server and Claude Code integration20MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Deloc — deploy static sites from AI coding agents. Say "deploy this to Deloc" in Claude Code or Cursor and get a live URL back without leaving your editor.4MIT
- AlicenseNot gradedqualityFmaintenanceHosted MCP server for Novence, a static site hosting platform for AI agents. It enables users to deploy and manage static sites through natural language using a streamable HTTP endpoint.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for self-hosted static site publishing on Cloudflare Workers. Enables AI coding agents to deploy pages with a single 'publish' tool and get live URLs, with support for atomic updates, versioning, and per-site passwords.3 npmMIT