Server definition
- Hash
- sha256:e39628f6866e4888066e9b935c6163096f71657dd3520183e6f23b8ba397a491
- What it is
- What a remote MCP server returned when asked what it offers: 114 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "Register a registrable domain (e.g. example.com) the user owns and detect its DNS provider. Returns the provider and whether one-click connect is available. Then attach sites with add_subdomain.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "registrable domain you own, e.g. example.com",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "add_custom_domain",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Serve a site on a domain the user owns. Returns the CNAME to add (hostname → cname.shiply.now); the certificate issues automatically once DNS resolves. Poll with check_domain.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"hostname": {
"description": "full hostname to serve, e.g. www.example.com",
"type": "string"
},
"slug": {
"description": "owned site slug to serve there",
"type": "string"
}
},
"required": [
"hostname",
"slug"
],
"type": "object"
},
"name": "add_domain",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Register a domain the user owns for outbound demand-test sends. Returns DNS records (SPF, DKIM, MX) to add at the DNS provider. After DNS propagates, call verify_sending_domain. Cannot be a shiply.now subdomain.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "e.g. mail.yourbrand.com",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "add_sending_domain",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Serve an owned site at <subdomain>.<domain> (use subdomain \"@\" or \"\" for the apex — apex needs a provider with CNAME flattening/ALIAS, e.g. Cloudflare). Auto-registers the parent domain. Returns the CNAME record to add (host -> cname.shiply.now); the certificate issues automatically once DNS resolves. Poll with check_domain.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "registrable parent domain, e.g. example.com",
"type": "string"
},
"slug": {
"description": "owned site slug to serve there",
"type": "string"
},
"subdomain": {
"description": "subdomain label, or \"@\"/\"\" for the apex",
"type": "string"
}
},
"required": [
"domain",
"subdomain",
"slug"
],
"type": "object"
},
"name": "add_subdomain",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Add an address (or whole domain) to the user's suppression list. Future confirmations and broadcasts will skip it across every test. Use kind='email' for a single address, kind='domain' for everyone @example.com.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"kind": {
"description": "'email' for one address, 'domain' for everyone @example.com",
"enum": [
"email",
"domain"
],
"type": "string"
},
"notes": {
"description": "optional reason / note for the suppression",
"type": "string"
},
"value": {
"description": "e.g. '[email protected]' or 'competitor.com'",
"type": "string"
}
},
"required": [
"kind",
"value"
],
"type": "object"
},
"name": "add_suppression",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Move a project to status='archived'. Hidden from the default dashboard list. Optional reason is shown on the project page. Restore later with restore_project.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "project id to archive",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"reason": {
"description": "optional reason shown on the project page",
"maxLength": 500,
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "archive_project",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Soft-archive the thread (sets archivedAt). Hidden from the default inbox view; surface again with list_inbox filter=archived. Reverse with unarchive_thread.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"threadId": {
"description": "thread id from list_inbox to archive",
"type": "string"
}
},
"required": [
"threadId"
],
"type": "object"
},
"name": "archive_thread",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Bind an existing database to one owned site's Worker env (the binding name chosen at create_database time). Takes effect on the site's next function/publish deploy.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "database id (from list_databases)",
"type": "string"
},
"siteSlug": {
"description": "owned site slug",
"type": "string"
}
},
"required": [
"id",
"siteSlug"
],
"type": "object"
},
"name": "attach_database",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Expose one saved variable to ONE owned site's Worker env (plain_text binding). Opt-in per site — unattached variables are never injected, because the Worker runs the site's own code. Takes effect on the site's next function deploy.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "variable name to attach, e.g. SUPABASE_URL",
"type": "string"
},
"slug": {
"description": "owned site slug",
"type": "string"
}
},
"required": [
"slug",
"name"
],
"type": "object"
},
"name": "attach_variable",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Check whether a custom domain's subdomains are live: re-polls Cloudflare cert status + probes DNS/TLS/HTTPS on each subdomain. Poll this after connect_provider / add_subdomain to confirm the domain is serving. Returns per-subdomain status + tls + http + ready.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "registered custom domain to check, e.g. example.com",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "check_custom_domain",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Refresh certificate status + live TLS/HTTPS probe for a connected domain (by id from list_domains).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "connected domain id from list_domains",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "check_domain",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Start one-click DNS connect for a registered custom domain. For Cloudflare-hosted domains this returns an authorize URL — SHOW THE USER the url as a clickable link; after they authorize, records are written automatically. For other providers, add the records manually.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "registered custom domain to connect, e.g. example.com",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "connect_provider",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Create an amendment to a SIGNED parent contract. Scope delta required; fee delta and target date optional. Returns the draft amendment for editing before send — call contract_send with the returned amendment id to fire it. Cannot amend an amendment (amend the parent instead).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"feeDeltaCents": {
"description": "Optional fee adjustment in cents. Can be negative for descope.",
"maximum": 1000000000,
"minimum": -1000000000,
"type": "integer"
},
"parentContractId": {
"description": "id of the SIGNED parent contract to amend",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"scopeDelta": {
"description": "What's changing — visible to customer.",
"maxLength": 20000,
"minLength": 1,
"type": "string"
},
"targetCompletionDate": {
"description": "Optional ISO date (YYYY-MM-DD) for revised completion.",
"type": "string"
}
},
"required": [
"parentContractId",
"scopeDelta"
],
"type": "object"
},
"name": "contract_amend",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Draft a contract from a brief_ready project. Auto-fills 8 fields from the AI brief, Stripe Connect default currency, and dev profile. Returns the contract row with status='draft' so the dev can review fields before sending. After this, edit fields via PATCH /api/v1/contracts/{id} (no MCP edit tool yet), then call contract_send to fire it.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"projectId": {
"description": "Project to draft a contract for",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"projectId"
],
"type": "object"
},
"name": "contract_draft",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Get the signed contract PDF as a base64-encoded download. PDF includes the contract, signature certificate, and any signed amendments. Returns { filename, contentType, base64 }. Errors with conflict:contract_not_signed if the parent contract has not been signed yet.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"contractId": {
"description": "signed contract id (parent or amendment) to render as PDF",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"contractId"
],
"type": "object"
},
"name": "contract_pdf",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Send a draft contract to the customer. Validates all 8 fields are non-empty, computes content_hash, flips project to contract_sent, fires the customer email. Same handler works for amendment drafts — sending an amendment does not move project state.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"contractId": {
"description": "draft contract id to send (from contract_draft)",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"contractId"
],
"type": "object"
},
"name": "contract_send",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Read the current state of a contract: status, sent_at, viewed_at, signed_at, signer info, content_hash, plus any amendments. Use this to check whether a customer has signed yet. Returns { contract, amendments } — the contract row matches GET /api/v1/contracts/{id}.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"contractId": {
"description": "contract id to read state for",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"contractId"
],
"type": "object"
},
"name": "contract_status",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Provision a SQL database — D1 (default, free) or Neon Postgres (--postgres, developer plan). Optionally attach it to an owned site's Worker env in the same call (siteSlug); otherwise attach it later with attach_database.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"binding": {
"description": "Worker binding name, UPPER_SNAKE (defaults to a name derived from `name`)",
"type": "string"
},
"name": {
"description": "database name, a-z 0-9 -, 2-63 chars",
"type": "string"
},
"provider": {
"description": "defaults to d1",
"enum": [
"d1",
"neon"
],
"type": "string"
},
"siteSlug": {
"description": "owned site slug to attach immediately",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "create_database",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Create a private cloud Drive (plan-limited). Pass client to file it under a client.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"client": {
"description": "optional: file this under a client (the publish/site is grouped in their customer view)",
"properties": {
"clientCompany": {
"description": "client's company (used when creating)",
"type": "string"
},
"clientEmail": {
"description": "client email — create-or-find by this",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"clientId": {
"description": "an existing client id (skips lookup)",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"clientName": {
"description": "client's name (used when creating)",
"type": "string"
}
},
"type": "object"
},
"name": {
"description": "display name for the new drive",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "create_drive",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Publish (or upsert) a marketplace listing for an owned site. Requires Stripe Connect set up (status='ready' — see get_connect_status). priceCents = whole-dollar between 100 and 999900. termsMode='standard' uses shiply's template; 'custom' requires termsCustom ≥50 chars. jurisdiction is required (e.g. 'California, USA').",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"jurisdiction": {
"description": "governing jurisdiction, e.g. 'California, USA'",
"maxLength": 80,
"minLength": 2,
"type": "string"
},
"pitch": {
"description": "short sales pitch, ≤280 chars",
"maxLength": 280,
"type": "string"
},
"priceCents": {
"description": "whole-dollar price in cents, 100–999900",
"maximum": 999900,
"minimum": 100,
"type": "integer"
},
"siteSlug": {
"description": "slug of the owned site to list",
"type": "string"
},
"status": {
"description": "publish state (default draft)",
"enum": [
"draft",
"live"
],
"type": "string"
},
"termsCustom": {
"description": "custom terms text, ≥50 chars, required when termsMode='custom'",
"maxLength": 20000,
"type": "string"
},
"termsMode": {
"description": "'standard' uses shiply's template; 'custom' requires termsCustom",
"enum": [
"standard",
"custom"
],
"type": "string"
}
},
"required": [
"siteSlug",
"priceCents",
"termsMode",
"jurisdiction"
],
"type": "object"
},
"name": "create_listing",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Spin up a new customer-intake project on the dev's account. Returns the project row plus intakeUrl — the public link the customer fills out (10-step wizard). If customerEmail is provided, shiply also emails them the intake invite. Use originatedFromSiteId to link a project to an existing site (e.g. 'redesign this site').",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"customerEmail": {
"description": "customer email; if set, shiply emails them the intake invite",
"format": "email",
"maxLength": 320,
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"customerName": {
"description": "the customer's name",
"maxLength": 200,
"type": "string"
},
"label": {
"description": "project name shown in the dev dashboard",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"originatedFromSiteId": {
"description": "link this project to an existing site (e.g. a redesign)",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"label"
],
"type": "object"
},
"name": "create_project",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Provision a demand test in one call: deploys a landing page with a native email-capture form and creates a confirmed-subscriber segment. Returns testId + live siteUrl. Share the siteUrl to collect signups; each signup gets a double-opt-in confirmation. Read progress with get_test_status.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"cta": {
"description": "call-to-action button label",
"type": "string"
},
"headline": {
"description": "landing-page headline",
"type": "string"
},
"idea": {
"description": "the product/idea name",
"type": "string"
},
"price": {
"description": "price to display, e.g. \"$29/mo\"",
"type": "string"
},
"sub": {
"description": "subheadline / supporting line",
"type": "string"
}
},
"required": [
"idea",
"headline"
],
"type": "object"
},
"name": "create_test",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return up to `limit` records (default 1000, max 5000) from a collection — for snapshotting into agent context. For larger sets use the CLI: `shiply data export <slug> <collection>`.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"collection": {
"description": "collection name to export",
"type": "string"
},
"limit": {
"description": "max records to return (default 1000, max 5000)",
"maximum": 5000,
"minimum": 1,
"type": "integer"
},
"slug": {
"description": "owned site slug",
"type": "string"
}
},
"required": [
"slug",
"collection"
],
"type": "object"
},
"name": "data_export_collection",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Insert one record into a collection. Goes through the same public visitor endpoint a browser would use — manifest access.insert decides whether it is allowed. Use to seed waitlist data, test forms end-to-end, etc.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"collection": {
"description": "collection name to insert into",
"type": "string"
},
"record": {
"additionalProperties": {},
"description": "the record fields to insert as key/value pairs",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"slug": {
"description": "owned site slug",
"type": "string"
}
},
"required": [
"slug",
"collection",
"record"
],
"type": "object"
},
"name": "data_insert",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List collections declared in an owned site's .shiply/data.json with current record counts. Empty list means the site has no manifest yet — scaffold one with `shiply data init`.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "owned site slug",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "data_list_collections",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Page records from an owned site's collection, newest-first. limit ≤ 200 (default 50). cursor from a previous response's nextCursor.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"collection": {
"description": "collection name from data_list_collections",
"type": "string"
},
"cursor": {
"description": "nextCursor from a previous response's page",
"type": "string"
},
"limit": {
"description": "max records to return, ≤200 (default 50)",
"maximum": 200,
"minimum": 1,
"type": "integer"
},
"slug": {
"description": "owned site slug",
"type": "string"
}
},
"required": [
"slug",
"collection"
],
"type": "object"
},
"name": "data_query",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "PERMANENTLY delete a database and all its data. Irreversible — confirm with the user first.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "database id (from list_databases)",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "delete_database",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Take a listing off the public marketplace by moving it to status='draft'. Marketplace v1 keeps the row so analytics + future re-listing work — there's no hard delete. Sold listings can't be modified. Use to stop accepting offers without losing pricing history.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"siteSlug": {
"description": "slug of the listed site to unpublish",
"type": "string"
}
},
"required": [
"siteSlug"
],
"type": "object"
},
"name": "delete_listing",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "PERMANENTLY delete a site and all stored files. Irreversible — confirm with the user first.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "site slug to delete",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "delete_site",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Remove one variable by name.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "variable name to delete",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "delete_variable",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Deploy a Worker function to a site. The function runs on every request to <slug>.shiply.now and can receive webhooks, run on cron triggers, and access bindings (D1, secrets, env vars). Requires Developer plan. Use when the user wants webhook receivers, cron jobs, or a backend for their site.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"crons": {
"description": "cron triggers to register, ≤20",
"items": {
"properties": {
"path": {
"description": "URL path the cron handler fires on",
"maxLength": 300,
"minLength": 1,
"type": "string"
},
"schedule": {
"description": "crontab schedule in UTC, e.g. \"0 * * * *\"",
"maxLength": 60,
"minLength": 9,
"type": "string"
}
},
"required": [
"path",
"schedule"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"lang": {
"description": "source language (default js)",
"enum": [
"js",
"ts"
],
"type": "string"
},
"slug": {
"description": "site slug to deploy the function to",
"type": "string"
},
"source": {
"description": "the Worker source code",
"maxLength": 1500000,
"minLength": 1,
"type": "string"
}
},
"required": [
"slug",
"source"
],
"type": "object"
},
"name": "deploy_function",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Stop exposing a variable to a site's Worker env. Takes effect on the site's next function deploy.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "variable name to detach",
"type": "string"
},
"slug": {
"description": "owned site slug",
"type": "string"
}
},
"required": [
"slug",
"name"
],
"type": "object"
},
"name": "detach_variable",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Delete a file from a Drive.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"driveId": {
"description": "drive id (drv_…) or \"default\"",
"type": "string"
},
"path": {
"description": "path of the file to delete",
"type": "string"
}
},
"required": [
"driveId",
"path"
],
"type": "object"
},
"name": "drive_delete_file",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List files in a Drive (driveId = drv_…, or \"default\"). Optional prefix filter.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"driveId": {
"description": "drive id (drv_…) or \"default\"",
"type": "string"
},
"prefix": {
"description": "only list files under this path prefix",
"type": "string"
}
},
"required": [
"driveId"
],
"type": "object"
},
"name": "drive_list_files",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Write a file into a Drive (driveId = drv_… or \"default\"). content is utf8 or base64. Use for agent memory, notes, context, assets.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"content": {
"description": "file contents (utf8 text, or base64 when encoding=base64)",
"type": "string"
},
"driveId": {
"description": "drive id (drv_…) or \"default\"",
"type": "string"
},
"encoding": {
"description": "default utf8; base64 for binary",
"enum": [
"utf8",
"base64"
],
"type": "string"
},
"path": {
"description": "destination path inside the drive, e.g. notes/context.md",
"type": "string"
}
},
"required": [
"driveId",
"path",
"content"
],
"type": "object"
},
"name": "drive_put_file",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Server-side copy of an owned site under a new slug — instantly live. Copies files + title; does NOT copy access settings, domains, or data. Great for iterating on variants.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "site slug to copy",
"type": "string"
},
"title": {
"description": "display title for the new copy (defaults to source title)",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "duplicate_site",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return a JSON bundle of the user's profile, sites, Site Data, drives, and metadata (secrets excluded). Data portability.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "export_account",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Toggle whether an owned, public site appears in the public shiply Explore gallery (https://shiply.now/explore). Only public-access sites are eligible.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"show": {
"description": "true to feature on Explore, false to remove",
"type": "boolean"
},
"slug": {
"description": "owned, public site slug",
"type": "string"
}
},
"required": [
"slug",
"show"
],
"type": "object"
},
"name": "feature_site",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Forward a message from a thread (default: the most recent message) to a NEW recipient with an optional intro note. Body is composed as note + standard '---------- Forwarded message ----------' quote of the original. Goes from the thread's existing shiply alias so replies still route through the inbox. Subject defaults to 'Fwd: <original>'.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"messageId": {
"description": "specific message to forward (default: most recent)",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"note": {
"description": "intro note prepended above the forwarded quote",
"maxLength": 5000,
"type": "string"
},
"subject": {
"description": "subject; defaults to 'Fwd: <original>'",
"maxLength": 200,
"type": "string"
},
"threadId": {
"description": "thread id from list_inbox to forward from",
"type": "string"
},
"to": {
"description": "new recipient email address",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
}
},
"required": [
"threadId",
"to"
],
"type": "object"
},
"name": "forward_thread",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Get the signed-in account's plan, capabilities, and upgrade URL. Call this FIRST when figuring out what features you have access to — it tells you exactly what's available and what's blocked. The upgrade_url is human-clickable; show it in chat when a feature requires a higher plan. Returns plan id + name + subscription status, hard limits (sites, databases, custom domains, drives), and a capability matrix listing every gated feature (workers_lite, databases_neon_postgres, custom_domains, etc.) with whether you have access and the minimum plan needed.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "get_account_status",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Daily page views per site for the last 30 days.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_analytics",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return the seller's Stripe Connect state: not_started | in_progress | pending_verification | ready | disabled. When status != 'ready' the user can't list sites. Includes a one-shot onboardingUrl (if not_started or in_progress) and dashboardUrl (if ready). Refreshes from Stripe on every call.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "get_connect_status",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return the deployed function source + metadata for a site, or null if no function deployed.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "site slug whose function to fetch",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_function",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Read recent runtime logs for a site's per-site Worker (console output, request summaries, exceptions) from Cloudflare Workers Observability — 7-day retention, newest first. Use this to debug a deployed function: each event has timestamp, level, message, outcome, statusCode, requestId, and CPU/wall time. Also returns a CF dashboard deep-link.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"description": "max events to return (default 50)",
"maximum": 1000,
"minimum": 1,
"type": "integer"
},
"since": {
"description": "look back this many minutes (default 60, max 10080 = 7 days)",
"maximum": 10080,
"minimum": 1,
"type": "integer"
},
"slug": {
"description": "site slug whose function logs to read",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_function_logs",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Read one of the dev's projects by id — includes label, status, customer details, intake responses, AI brief, drive folder. Use before update_brief / regenerate_brief.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "project id",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_project",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Site settings + version history for one of my sites.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "site slug, e.g. my-site",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_site",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Read an owned site's current access policy (mode: public/password/restricted, allowedEmails, allowedDomains, hasPassword). Read-only counterpart to set_site_access — check before changing it.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "owned site slug",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_site_access",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "ONE consolidated object: page funnel (views, signups, confirmed, conversion) ⊕ email events (delivered/opened/clicked/bounced) ⊕ a computed verdict. The single place to check progress — never query email separately.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"testId": {
"description": "demand test id from create_test / list_tests",
"type": "string"
}
},
"required": [
"testId"
],
"type": "object"
},
"name": "get_test_status",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return threads tagged as complaints (spam reports) OR bounces (recipient rejected). Read these before any further sending.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_complaints",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List cron triggers for a site's deployed function. Each cron is (path, schedule, lastRunAt).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "site slug whose cron triggers to list",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "list_crons",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List registered custom domains grouped with their subdomains, each subdomain's site and status, and the detected provider.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_custom_domains",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List the SQL databases (D1 or Neon Postgres) on my account, including which owned site (if any) each is attached to. Call this BEFORE db_query/db_schema-style work to discover a databaseId — those live on a per-database MCP server reached via GET /api/v1/databases/{id} (see llms.txt), which this id feeds.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_databases",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List connected custom domains with status.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_domains",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List the user's private cloud Drives (id, name). Optional clientId filters to one client.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"clientId": {
"description": "only drives filed under this client",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"type": "object"
},
"name": "list_drives",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List the user's email inbox threads (outbound demand-test sends + inbound replies / unsubscribes / complaints / bounces). Filter by tag.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"filter": {
"description": "default all",
"enum": [
"all",
"unread",
"replies",
"unsubscribes",
"complaints",
"bounces"
],
"type": "string"
},
"limit": {
"description": "max threads to return, ≤200",
"maximum": 200,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "number of threads to skip (pagination)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"name": "list_inbox",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return every marketplace listing the seller owns (any status: draft, live, paused, sold). Includes site slug and current price. Use to see what's for sale across the account.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_listings",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List captured contacts for a (site, collection) mailbox, optionally filtered by status (signed_up/confirmed/unsubscribed). Returns email, status, confirmedAt, createdAt, and captured fields.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"collection": {
"description": "mailbox collection name",
"type": "string"
},
"slug": {
"description": "site slug the mailbox belongs to",
"type": "string"
},
"status": {
"description": "filter contacts by status",
"enum": [
"signed_up",
"confirmed",
"unsubscribed"
],
"type": "string"
}
},
"required": [
"slug",
"collection"
],
"type": "object"
},
"name": "list_mailbox_contacts",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return every marketplace order the user PURCHASED. Most recent first. Shows the acquired site, paid amount, and whether the order is still inside the 30-day refund window. Use to recap what the user owns by purchase.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"description": "max orders to return (default 100, max 500)",
"maximum": 500,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "list_my_orders",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return every marketplace order for sites the user sold (incl. pending, paid, refunded, failed, disputed). Most recent first. Use to surface revenue + which orders are still inside the 30-day refund window (refundExpiresAt > now).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"description": "max orders to return (default 100, max 500)",
"maximum": 500,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "list_my_sales",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return the customer-uploaded files for one project (path, size, contentType, createdAt). Empty when no drive folder exists yet (no uploads). Use to inspect what intake assets the customer attached.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "project id whose uploaded files to list",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "list_project_files",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List the dev's customer-intake projects (newest first). Optional filters: status (draft|intake_open|brief_ready|brief_failed|archived), q (case-insensitive match on label or customer email), limit (default 100). Use to triage what's in flight before opening a specific project.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"clientId": {
"description": "only projects filed under this client",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"limit": {
"description": "max projects to return (default 100)",
"maximum": 200,
"minimum": 1,
"type": "integer"
},
"q": {
"description": "case-insensitive match on label or customer email",
"type": "string"
},
"status": {
"description": "filter by project status",
"enum": [
"draft",
"intake_open",
"brief_ready",
"brief_failed",
"archived"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_projects",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List secret names (values not returned) for a site's deployed function.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "site slug whose secret names to list",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "list_secrets",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return every BYO sending domain the user has added (id, domain, fromAddress, status: pending|verified|failed, DNS records). Use to inspect verification state or find the id of a domain to verify/remove.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_sending_domains",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Read the email threads (received, sent, web captures) for the agent's sites. Optionally scoped to one site by slug.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "limit to one site by slug; omit for all sites",
"type": "string"
}
},
"type": "object"
},
"name": "list_site_inbox",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Names of the variables attached to an owned site's Worker env (values never shown here).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "owned site slug",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "list_site_variables",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List the sites owned by this API key. Optional clientId filters to one client.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"clientId": {
"description": "only sites filed under this client",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"type": "object"
},
"name": "list_sites",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return the user's suppression list — addresses (and full domains) that shiply skips when sending. Bounces, complaints, manual user adds, and AI-detected unsubscribes all land here.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_suppressions",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return every active demand test's reply / inbound address (<slug>@<sitesDomain>). Use this when you need to TELL someone where to email — e.g. drafting a reply or sharing a test's contact address. Mail sent to these aliases lands in /dashboard/inbox tied to the test.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_test_inbox_addresses",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List your demand tests with signups + confirmed counts.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_tests",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Shortcut for list_inbox with filter=unsubscribes — shows every thread tagged as an opt-out request.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"description": "max threads to return, ≤200",
"maximum": 200,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "list_unsubscribes",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List the encrypted variables. Values are masked unless reveal=true.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"reveal": {
"description": "return plaintext values instead of masked",
"type": "boolean"
}
},
"type": "object"
},
"name": "list_variables",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List a site's finalized deploys newest-first (id, createdAt, isLive, fileCount, bytes), capped at 20. Pair with rollback_site: pick a version id from here and re-point the site to it.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "site slug to list deploys for",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "list_versions",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Zero the unread counter for a thread. Useful after the agent has read but not acted. read_thread already calls this implicitly; use this explicitly when you want to clear unread without re-fetching the thread body.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"threadId": {
"description": "thread id from list_inbox to mark read",
"type": "string"
}
},
"required": [
"threadId"
],
"type": "object"
},
"name": "mark_thread_read",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Copy the EXACT live bytes of one owned site (srcSlug — your preview) into another owned site (destSlug — your production site / custom domain), no rebuild. Dest keeps its slug, domains, and access settings; only the served bytes change.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"destSlug": {
"type": "string"
},
"srcSlug": {
"type": "string"
}
},
"required": [
"srcSlug",
"destSlug"
],
"type": "object"
},
"name": "promote_site",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Snapshot a Drive (or a prefix of it) into a new live site at <slug>.shiply.now. Files copied server-side.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"driveId": {
"description": "drive id (drv_…) or \"default\"",
"type": "string"
},
"prefix": {
"description": "only snapshot files under this path prefix",
"type": "string"
},
"title": {
"description": "display title for the new site",
"type": "string"
}
},
"required": [
"driveId"
],
"type": "object"
},
"name": "publish_from_drive",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Publish files to the web → live URL at <slug>.shiply.now. UPDATING: never create a new site for changes — re-call with claimToken (anonymous sites) or slug (sites you own with a Bearer key) and the SAME URL gets the new version. Unchanged files are hash-skipped server-side, so re-publishing (including retrying a failed publish) is cheap — always update the same site rather than creating a new one. Works WITHOUT auth (anonymous: 24h lifetime, returns claimToken/claimUrl — SAVE THEM). With a Bearer shp_ key sites are permanent. ≤50 files / 2 MB inline; bigger: REST flow per https://shiply.now/llms.txt. index.html serves at /. spaMode for client-side routing.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"agentName": {
"description": "label shown during the automatic account re-auth flow",
"type": "string"
},
"claimToken": {
"description": "UPDATE an existing anonymous site (from the original publish result)",
"type": "string"
},
"client": {
"description": "optional: file this under a client (the publish/site is grouped in their customer view)",
"properties": {
"clientCompany": {
"description": "client's company (used when creating)",
"type": "string"
},
"clientEmail": {
"description": "client email — create-or-find by this",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"clientId": {
"description": "an existing client id (skips lookup)",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"clientName": {
"description": "client's name (used when creating)",
"type": "string"
}
},
"type": "object"
},
"files": {
"description": "site files; index.html required for a homepage",
"items": {
"properties": {
"content": {
"description": "file contents (utf8 text, or base64 when encoding=base64)",
"type": "string"
},
"encoding": {
"description": "default utf8; base64 for binary",
"enum": [
"utf8",
"base64"
],
"type": "string"
},
"path": {
"description": "relative path, e.g. index.html",
"type": "string"
}
},
"required": [
"path",
"content"
],
"type": "object"
},
"type": "array"
},
"slug": {
"description": "UPDATE an existing site you own (requires Bearer key)",
"type": "string"
},
"spaMode": {
"description": "serve index.html for unknown paths (client-side routing)",
"type": "boolean"
},
"title": {
"description": "display title for the site",
"type": "string"
}
},
"required": [
"files"
],
"type": "object"
},
"name": "publish_site",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Download the current files of a site you own (or created via a platform connection) so you can edit and republish to the same slug with publish_site. Static sites return editable source; framework/SSR sites return the built bundle (`.shiply/bundle/*`), not original source.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "site slug to pull files for",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "pull_site",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Return the thread metadata + all messages in chronological order. Use list_inbox first to get a threadId.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"threadId": {
"description": "thread id from list_inbox",
"type": "string"
}
},
"required": [
"threadId"
],
"type": "object"
},
"name": "read_thread",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Issue a full refund on a paid order the user sold. Must be inside the 30-day refund window (server enforces). Triggers a Stripe refund; the webhook flips the order to 'refunded' and reverts site ownership to the seller. Idempotent on already-refunded orders.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"orderId": {
"description": "id of the paid order to refund (from list_my_sales)",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"reason": {
"description": "optional refund reason",
"maxLength": 500,
"type": "string"
}
},
"required": [
"orderId"
],
"type": "object"
},
"name": "refund_order",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Re-run the MiniMax/Anthropic brief generator from the project's current intake_responses and persist the result. Flips status to brief_ready on success or brief_failed on error. Use after the customer edits answers post-submit, or when the first AI attempt failed.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "project id to re-run the brief for",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "regenerate_brief",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Remove a cron trigger from a site's deployed function.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"path": {
"description": "URL path of the cron to remove",
"maxLength": 300,
"minLength": 1,
"type": "string"
},
"slug": {
"description": "site slug whose cron to remove",
"type": "string"
}
},
"required": [
"slug",
"path"
],
"type": "object"
},
"name": "remove_cron",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Remove a registered custom domain and all its subdomains; they stop serving immediately.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "registered custom domain to remove, e.g. example.com",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "remove_custom_domain",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Remove a connected domain (by id). It stops serving immediately.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "connected domain id from list_domains",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "remove_domain",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Remove the deployed Worker function from a site (and all its routes, secrets, and cron triggers). Site falls back to static-only serving. Irreversible.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "site slug whose function to remove",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "remove_function",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Remove a secret from a site's deployed function. The binding disappears on next request.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "secret name to remove",
"maxLength": 80,
"type": "string"
},
"slug": {
"description": "site slug whose function holds the secret",
"type": "string"
}
},
"required": [
"slug",
"name"
],
"type": "object"
},
"name": "remove_secret",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Delete a BYO sending domain. Any demand tests bound to it fall back to the managed shiply sender. Also GCs the underlying Resend domain. Irreversible — re-adding requires re-verifying DNS.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "sending domain id from list_sending_domains",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "remove_sending_domain",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Delete one suppression by id. Use list_suppressions first to find the id.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"suppressionId": {
"description": "suppression id from list_suppressions",
"type": "string"
}
},
"required": [
"suppressionId"
],
"type": "object"
},
"name": "remove_suppression",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Send an email reply on an existing thread. Goes FROM the original recipient address (the <slug>@shiply.now alias the sender used) and TO the original sender. Threaded via RFC 5322 In-Reply-To so Gmail/Outlook group it with the original. Subject defaults to 'Re: <original>' when omitted. Cap at 20,000 chars. Use after read_thread to make sure you're replying to the right conversation.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"body": {
"description": "reply body, ≤20,000 chars",
"maxLength": 20000,
"minLength": 1,
"type": "string"
},
"subject": {
"description": "subject; defaults to 'Re: <original>'",
"maxLength": 200,
"type": "string"
},
"threadId": {
"description": "thread id from list_inbox to reply on",
"type": "string"
}
},
"required": [
"threadId",
"body"
],
"type": "object"
},
"name": "reply_to_thread",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Re-send the double-opt-in confirmation to a signup that has not confirmed yet.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"email": {
"description": "the unconfirmed signup email to re-send to",
"type": "string"
},
"testId": {
"description": "demand test id the signup belongs to",
"type": "string"
}
},
"required": [
"testId",
"email"
],
"type": "object"
},
"name": "resend_confirmation",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Re-fire the 'your developer sent you a project intake' email to the project's customer. Throws invalid_request if the project has no customerEmail (the dev needs to set one via the dashboard first — customer email isn't agent-patchable). Use when the customer says they didn't receive the link.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "project id to re-send the intake invite for",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "resend_intake_invite",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Move an archived project back to status='draft' so it reappears in the active list. Idempotent on non-archived projects? No — server rejects the transition unless the project is currently archived.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "archived project id to restore",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "restore_project",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Re-point a site to any finalized version (rollback or roll-forward). Get version ids from get_site. Serving updates immediately.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"description": "site slug to re-point",
"type": "string"
},
"versionId": {
"description": "finalized version id from get_site",
"type": "string"
}
},
"required": [
"slug",
"versionId"
],
"type": "object"
},
"name": "rollback_site",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Send a campaign to this test's confirmed (double-opt-in) subscribers — the \"we're live\" email. An unsubscribe link is added automatically. Fails if there are no confirmed subscribers yet.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"html": {
"description": "email HTML body (unsubscribe link added automatically)",
"type": "string"
},
"subject": {
"description": "email subject line",
"type": "string"
},
"testId": {
"description": "demand test id whose confirmed subscribers to email",
"type": "string"
},
"text": {
"description": "plain-text fallback body",
"type": "string"
}
},
"required": [
"testId",
"subject",
"html"
],
"type": "object"
},
"name": "send_broadcast",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Send an email from <slug>.shiply.now's managed sender. The site can send transactional/notification email — no SMTP setup. Rate-limited and spam-checked; replies route back to the site inbox.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"html": {
"description": "email HTML body",
"type": "string"
},
"slug": {
"description": "site slug to send from (<slug>.shiply.now sender)",
"type": "string"
},
"subject": {
"description": "email subject line",
"type": "string"
},
"text": {
"description": "plain-text fallback body",
"type": "string"
},
"to": {
"description": "recipient email address",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
}
},
"required": [
"slug",
"to",
"subject",
"html"
],
"type": "object"
},
"name": "send_email",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Send a one-shot broadcast to the confirmed (double-opt-in) subscribers of a (site, collection) mailbox. Spam-checked; unsubscribe footer auto-added. Fails if no confirmed subscribers exist yet.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"collection": {
"description": "mailbox collection whose confirmed audience to email",
"type": "string"
},
"html": {
"description": "email HTML body (unsubscribe footer added automatically)",
"type": "string"
},
"slug": {
"description": "site slug the mailbox belongs to",
"type": "string"
},
"subject": {
"description": "email subject line",
"type": "string"
},
"text": {
"description": "plain-text fallback body",
"type": "string"
}
},
"required": [
"slug",
"collection",
"subject",
"html"
],
"type": "object"
},
"name": "send_mailbox_broadcast",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Set or update a cron trigger on a site's deployed function. Schedule is crontab syntax (UTC). Path is the URL the cron handler should fire on (for the worker's scheduled() handler context).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"path": {
"description": "URL path the cron handler fires on",
"maxLength": 300,
"minLength": 1,
"type": "string"
},
"schedule": {
"description": "crontab schedule in UTC, e.g. \"0 * * * *\"",
"maxLength": 60,
"minLength": 9,
"type": "string"
},
"slug": {
"description": "site slug whose function gets the cron",
"type": "string"
}
},
"required": [
"slug",
"path",
"schedule"
],
"type": "object"
},
"name": "set_cron",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Give ONE site a vanity URL: rename it to <handle>.shiply.now (3-30 chars, a-z 0-9 -). The old address 301-redirects for 30 days. (For a portfolio page listing all your sites, use set_profile instead — that lives at shiply.now/@<handle>.)",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"handle": {
"description": "new vanity handle, 3-30 chars a-z 0-9 -",
"type": "string"
},
"slug": {
"description": "current site slug",
"type": "string"
}
},
"required": [
"slug",
"handle"
],
"type": "object"
},
"name": "set_handle",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Path-mounting: serve an owned target site at a path on an owned host site (host/docs -> target). location is a path like \"docs\", or \"__root__\" for the host root. Both sites must be owned by you. Pass remove=true to unmount.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"hostSlug": {
"description": "slug of the owned host site",
"type": "string"
},
"location": {
"description": "path to mount at, e.g. \"docs\", or \"__root__\" for the host root",
"type": "string"
},
"remove": {
"description": "unmount instead of mounting",
"type": "boolean"
},
"targetSlug": {
"description": "slug of the owned site to serve there (required unless remove=true)",
"type": "string"
}
},
"required": [
"hostSlug",
"location"
],
"type": "object"
},
"name": "set_link",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Turn a Site Data collection into a mailbox: double opt-in, owner notifications, sending domain, branding. Call once per (site, collection) to configure how captured leads are handled.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"branding": {
"description": "branding applied to mailbox emails",
"properties": {
"brandColor": {
"description": "accent color hex, e.g. #2563eb",
"type": "string"
},
"brandName": {
"description": "brand name shown in emails",
"type": "string"
},
"logoUrl": {
"description": "logo image URL shown in emails",
"type": "string"
}
},
"type": "object"
},
"collection": {
"description": "Site Data collection to turn into a mailbox",
"type": "string"
},
"doubleOptIn": {
"description": "require email confirmation before a contact is active",
"type": "boolean"
},
"notifyOwner": {
"description": "email the owner on each new capture",
"type": "boolean"
},
"notifyTo": {
"description": "address to send owner notifications to",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"sendingDomainId": {
"description": "BYO sending domain id to send from",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
},
"slug": {
"description": "site slug the collection belongs to",
"type": "string"
}
},
"required": [
"slug",
"collection"
],
"type": "object"
},
"name": "set_mailbox",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Mark a hostname as the primary (canonical) URL for its site. Sibling hostnames (apex + www both pointed at the same site) start 301-redirecting to it, preserving path + query. The host-side fix for the duplicate-content SEO problem. The first subdomain you add for a site is primary by default; call this only when you need to switch.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "registered custom domain, e.g. example.com",
"type": "string"
},
"hostname": {
"description": "full hostname to make primary, e.g. www.example.com",
"type": "string"
}
},
"required": [
"domain",
"hostname"
],
"type": "object"
},
"name": "set_primary_subdomain",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Create or update the user's public PORTFOLIO page at shiply.now/@<handle> (handle 3-30 chars a-z0-9-) — a landing page listing the user's sites. This is NOT a site's address: to give one site a vanity URL like <handle>.shiply.now, use set_handle instead. enable shows the profile; autoAdd auto-lists new sites. Use after publishing to give the user a shareable portfolio.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"autoAdd": {
"description": "auto-list newly published sites on the profile",
"type": "boolean"
},
"enable": {
"description": "show (true) or hide (false) the public profile",
"type": "boolean"
},
"handle": {
"description": "public portfolio handle, 3-30 chars a-z 0-9 -; portfolio lives at shiply.now/@<handle> (a page listing your sites — not a site URL; for a site vanity URL use set_handle)",
"type": "string"
}
},
"type": "object"
},
"name": "set_profile",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Set a CF Worker secret on a site's deployed function. Value is encrypted-at-rest and accessible as env.<NAME> inside the worker. Use for Stripe keys, Resend API keys, etc.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "secret name, UPPER_SNAKE_CASE; available as env.<NAME>",
"maxLength": 80,
"pattern": "^[A-Z_][A-Z0-9_]*$",
"type": "string"
},
"slug": {
"description": "site slug whose function gets the secret",
"type": "string"
},
"value": {
"description": "secret value (encrypted at rest), ≤8 KiB",
"maxLength": 8192,
"minLength": 1,
"type": "string"
}
},
"required": [
"slug",
"name",
"value"
],
"type": "object"
},
"name": "set_secret",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Protect an owned site (paid plans). mode 'public' (anyone), 'password' (supply password), or 'restricted' (supply allowedEmails and/or allowedDomains — only those can request a login code). Changing any setting signs out existing visitors.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"allowedDomains": {
"description": "allowlisted email domains when mode='restricted'",
"items": {
"type": "string"
},
"type": "array"
},
"allowedEmails": {
"description": "allowlisted emails when mode='restricted'",
"items": {
"type": "string"
},
"type": "array"
},
"mode": {
"description": "public = anyone; password = supply password; restricted = supply allowedEmails/allowedDomains",
"enum": [
"public",
"password",
"restricted"
],
"type": "string"
},
"password": {
"description": "required when mode='password'",
"type": "string"
},
"slug": {
"description": "owned site slug to protect",
"type": "string"
}
},
"required": [
"slug",
"mode"
],
"type": "object"
},
"name": "set_site_access",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Upsert a key/value in the user's encrypted variable store (UPPER_SNAKE name, ≤8 KiB value). Use for API keys the user's sites/agents need, e.g. SUPABASE_URL. NOTE: saving alone does NOT expose it to any site Worker's env — attach it to a specific site with attach_variable (takes effect on that site's next function deploy).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "variable name, UPPER_SNAKE_CASE, e.g. SUPABASE_URL",
"type": "string"
},
"value": {
"description": "value to store (encrypted, ≤8 KiB)",
"type": "string"
}
},
"required": [
"name",
"value"
],
"type": "object"
},
"name": "set_variable",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Check any shiply slug or custom hostname: TLS certificate (issuer, days left) + HTTPS probe. ready=true means live.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"target": {
"description": "slug (my-site) or hostname (www.example.com)",
"type": "string"
}
},
"required": [
"target"
],
"type": "object"
},
"name": "site_status",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "One-paragraph summary of the thread, oriented to the most actionable signal (interest, complaint, question, unsubscribe).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"threadId": {
"description": "thread id from list_inbox",
"type": "string"
}
},
"required": [
"threadId"
],
"type": "object"
},
"name": "summarize_thread",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "For a connected custom domain, (re)write the CNAME records for all its subdomains automatically and report what changed. For unconnected domains, returns the records to add manually.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "registered custom domain to sync, e.g. example.com",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "sync_dns",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Restore an archived thread (clears archivedAt). It reappears in the default inbox list. Pair with list_inbox filter=archived to find archived threadIds first.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"threadId": {
"description": "archived thread id to restore",
"type": "string"
}
},
"required": [
"threadId"
],
"type": "object"
},
"name": "unarchive_thread",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Overwrite the project's working brief (jsonb). Hard-capped at 500 KB. Use to revise the AI-generated brief by hand; the original AI output is preserved separately in briefAiOriginal so you can always compare. Does not change status.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"brief": {
"additionalProperties": {},
"description": "the full replacement brief object (jsonb, ≤500 KB)",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"id": {
"description": "project id",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"id",
"brief"
],
"type": "object"
},
"name": "update_brief",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Patch a listing by siteSlug — change price, pitch, terms, jurisdiction, or status (draft|live|paused). Sold listings cannot be edited. Status transitions enforced server-side. Use to pause sales or drop the price.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"jurisdiction": {
"description": "governing jurisdiction, e.g. 'California, USA'",
"maxLength": 80,
"minLength": 2,
"type": "string"
},
"pitch": {
"anyOf": [
{
"maxLength": 280,
"type": "string"
},
{
"type": "null"
}
],
"description": "new sales pitch (null to clear)"
},
"priceCents": {
"description": "new whole-dollar price in cents, 100–999900",
"maximum": 999900,
"minimum": 100,
"type": "integer"
},
"siteSlug": {
"description": "slug of the listed site to patch",
"type": "string"
},
"status": {
"description": "new listing status",
"enum": [
"draft",
"live",
"paused"
],
"type": "string"
},
"termsCustom": {
"anyOf": [
{
"maxLength": 20000,
"type": "string"
},
{
"type": "null"
}
],
"description": "new custom terms text (null to clear)"
},
"termsMode": {
"description": "'standard' template or 'custom' terms",
"enum": [
"standard",
"custom"
],
"type": "string"
}
},
"required": [
"siteSlug"
],
"type": "object"
},
"name": "update_listing",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Confirm a pairing code shown in the user's browser at https://shiply.now/claim/<slug>?pair=1. Use ONLY in the agent session that originally published the site — it reads the claimToken from .shiply.json in the current working directory and proves to Shiply that this agent session is authorised to claim the site. After verification the user is auto-redirected to /welcome and the site binds to their account.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"code": {
"description": "the SHIPLY-XXXXXXXX code in the user's browser",
"pattern": "^SHIPLY-[A-Z2-7]{8}$",
"type": "string"
}
},
"required": [
"code"
],
"type": "object"
},
"name": "verify_claim",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Trigger Resend to re-check the domain's DNS records, persist the new status. Call after adding the DNS records returned by add_sending_domain. Status flips to 'verified' once SPF + DKIM + MX all check out.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "sending domain id from list_sending_domains",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "verify_sending_domain",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Edge-check a shiply slug or custom hostname and return a structured readiness report: status (LIVE/PENDING), SSL details (valid, issuer, daysLeft), HTTP probe, and a presigned thumbnail URL when available. Use this after publishing to confirm the site is reachable.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"target": {
"description": "slug (my-site) or hostname (www.example.com)",
"type": "string"
}
},
"required": [
"target"
],
"type": "object"
},
"name": "verify_site",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Who am I? Returns the signed-in account: email, @handle, plan + limits, counts of sites/domains/drives, and connected DNS providers. Call this first to orient before managing sites or domains.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "whoami",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:e39628f6866e4888066e9b935c6163096f71657dd3520183e6f23b8ba397a491 | sha256sum