
Deploy static sites and connect custom domains from Claude, Cursor, or any MCP agent.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
API key (wpk_live_...) from the console API keys panel: https://webprompter.ai/console
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Finalize deploy after PUT using upload_id. Pass the same deploy_ack_token from get_deployment_rules for this site as on create_deploy_upload when MCP_ENFORCE_DEPLOY_ACK is on.
From get_deployment_rules.deploy_ack_token (required when MCP_ENFORCE_DEPLOY_ACK is true).
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http mcp-service https://mcp.webprompter.ai/mcp \ --header 'X-Api-Key: YOUR_X_API_KEY'
Headers
X-Api-Key (required): API key (wpk_live_...) from the console API keys panel: https://webprompter.ai/consoleFinalize deploy after PUT using upload_id. Pass the same deploy_ack_token from get_deployment_rules for this site as on create_deploy_upload when MCP_ENFORCE_DEPLOY_ACK is on.
| Argument | Type | Description |
|---|---|---|
| upload_id* | string | |
| deploy_ack_token | string | From get_deployment_rules.deploy_ack_token (required when MCP_ENFORCE_DEPLOY_ACK is true). |
{
"type": "object",
"required": [
"upload_id"
],
"properties": {
"upload_id": {
"type": "string"
},
"deploy_ack_token": {
"type": "string",
"description": "From get_deployment_rules.deploy_ack_token (required when MCP_ENFORCE_DEPLOY_ACK is true)."
}
},
"additionalProperties": false
}Attach an externally owned domain to a site's live prod deployment. Returns ACM DNS validation CNAMEs (apex + www). Requires active prod deploy and an active domain subscription (subscribe in console first).
| Argument | Type | Description |
|---|---|---|
| site_id* | string | |
| hostname* | string | Apex hostname (e.g. example.com) |
{
"type": "object",
"required": [
"site_id",
"hostname"
],
"properties": {
"site_id": {
"type": "string"
},
"hostname": {
"type": "string",
"description": "Apex hostname (e.g. example.com)"
}
},
"additionalProperties": false
}Start a staging deploy: request presigned PUT URL for the zip. Use promote_staging_to_prod to go live on production. Requires deploy_ack_token from get_deployment_rules when MCP_ENFORCE_DEPLOY_ACK is on. Pass the same token to commit_deploy_upload. Returns upload_id; PUT the zip then commit_deploy_upload.
| Argument | Type | Description |
|---|---|---|
| site_id* | string | |
| sha256_hex | string | Optional SHA-256 digest hex for upload integrity verification. |
| size_bytes* | number | Expected zip size in bytes. |
| deploy_ack_token | string | From get_deployment_rules.deploy_ack_token (required when MCP_ENFORCE_DEPLOY_ACK is true). |
{
"type": "object",
"required": [
"site_id",
"size_bytes"
],
"properties": {
"site_id": {
"type": "string"
},
"sha256_hex": {
"type": "string",
"description": "Optional SHA-256 digest hex for upload integrity verification."
},
"size_bytes": {
"type": "number",
"description": "Expected zip size in bytes."
},
"deploy_ack_token": {
"type": "string",
"description": "From get_deployment_rules.deploy_ack_token (required when MCP_ENFORCE_DEPLOY_ACK is true)."
}
},
"additionalProperties": false
}Create a new site owned by the caller. Site name must be lowercase letters/digits/hyphens, 1-64 chars. Returns { site } only. Read server instructions and call get_deployment_rules before building a zip or deploying.
| Argument | Type | Description |
|---|---|---|
| name* | string | Site slug |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Site slug"
}
},
"additionalProperties": false
}Remove custom domain connection for a site (best-effort CloudFront disable + ACM delete).
| Argument | Type | Description |
|---|---|---|
| site_id* | string |
{
"type": "object",
"required": [
"site_id"
],
"properties": {
"site_id": {
"type": "string"
}
},
"additionalProperties": false
}Download a deployment version as a zip (presigned GET URL, expires in ~15 minutes). Use list_deployments to find deployment_id. Omits cleanUrls materialized copies when possible and includes static-hosting.json for editing and redeploying to staging.
| Argument | Type | Description |
|---|---|---|
| site_id* | string | |
| deployment_id* | string |
{
"type": "object",
"required": [
"site_id",
"deployment_id"
],
"properties": {
"site_id": {
"type": "string"
},
"deployment_id": {
"type": "string"
}
},
"additionalProperties": false
}Poll custom domain setup progress; triggers one processing tick. Returns steps and dns_records (cert validation + routing).
| Argument | Type | Description |
|---|---|---|
| site_id* | string |
{
"type": "object",
"required": [
"site_id"
],
"properties": {
"site_id": {
"type": "string"
}
},
"additionalProperties": false
}REQUIRED before deploy: returns platform deploy rules + a site-scoped checklist, example URLs for this site_id, and a short-lived deploy_ack_token. Call after create_site or list_sites. Pass the token to create_deploy_upload and commit_deploy_upload.
| Argument | Type | Description |
|---|---|---|
| site_id* | string | Site UUID from create_site / list_sites |
{
"type": "object",
"required": [
"site_id"
],
"properties": {
"site_id": {
"type": "string",
"description": "Site UUID from create_site / list_sites"
}
},
"additionalProperties": false
}List deployments for a site, optionally filtered to one environment. Excludes pruned (deleted) versions. Only the current deployment plus 5 previous versions per environment are retained.
| Argument | Type | Description |
|---|---|---|
| site_id* | string | |
| environment | string |
{
"type": "object",
"required": [
"site_id"
],
"properties": {
"site_id": {
"type": "string"
},
"environment": {
"enum": [
"staging",
"prod"
],
"type": "string"
}
},
"additionalProperties": false
}List all sites owned by the authenticated caller, including deploy URLs, custom domain status, and bandwidth usage (with warning at 80% and shutdown message when the custom domain is suspended).
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Promote the current staging deployment to production (the only way to go live on prod). Copies the active staging artifact into a new prod version. Requires an active current staging deployment; does not accept a zip.
| Argument | Type | Description |
|---|---|---|
| site_id* | string |
{
"type": "object",
"required": [
"site_id"
],
"properties": {
"site_id": {
"type": "string"
}
},
"additionalProperties": false
}Promote a previous deployment back to current for its environment.
| Argument | Type | Description |
|---|---|---|
| site_id* | string | |
| deployment_id* | string |
{
"type": "object",
"required": [
"site_id",
"deployment_id"
],
"properties": {
"site_id": {
"type": "string"
},
"deployment_id": {
"type": "string"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 9, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.