Skip to main content
Glama

Server Details

Publish any app in one call: SQL database, functions, email, and a custom domain. Flat price.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A3.6/5.0

Scored across 114 tools

Disambiguation3/5

Most tools target distinct resources, but several clusters blur together: add_domain/add_subdomain/add_custom_domain, site_status/verify_site/check_domain/check_custom_domain, whoami/get_account_status, and list_inbox/list_site_inbox all require careful reading to distinguish. The detailed descriptions help, but the boundaries are not immediately obvious.

Naming Consistency4/5

The vast majority of tools follow a clear snake_case verb_noun pattern (list_sites, create_project, delete_database, set_secret). A few outliers like whoami, site_status, contract_pdf, and data_export_collection break the pattern, and there is some verb variation (add/create/set for similar operations), but overall the naming is predictable and readable.

Tool Count1/5

114 tools is an extreme count for a single MCP server, far beyond the 50+ threshold for a mismatch. Even though shiply covers many subdomains, the surface is overwhelming for an agent and should be split into focused servers for sites, email/inbox, projects/contracts, marketplace, data, and functions.

Completeness4/5

The tool surface is remarkably broad and covers most lifecycle workflows: sites, domains, projects, contracts, email, drives, databases, variables, secrets, marketplace orders, and data collections. Notable gaps remain, such as no MCP contract-edit tool (explicitly documented), no project/site field update tools, and no delete_drive or delete_test, but these are minor relative to the overall coverage.

Available Tools

114 tools
add_custom_domainRegister a custom domainA
Idempotent
Inspect

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.

Inputs: domain (required). Returns: result

add_domainConnect a custom domainA
Idempotent
Inspect

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.

Inputs: slug (required), hostname (required). Returns: result

add_sending_domainAdd a sending domainA
Idempotent
Inspect

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.

Inputs: domain (required). Returns: result

add_subdomainPoint a subdomain at a siteA
Idempotent
Inspect

Serve an owned site at . (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.

Inputs: slug (required), domain (required), subdomain (required). Returns: result

add_suppressionSuppress an email or domainA
Idempotent
Inspect

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.

Inputs: kind (required), value (required), notes. Returns: result

archive_projectArchive a projectA
Idempotent
Inspect

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.

Inputs: id (required), reason. Returns: result

archive_threadArchive a threadA
Idempotent
Inspect

Soft-archive the thread (sets archivedAt). Hidden from the default inbox view; surface again with list_inbox filter=archived. Reverse with unarchive_thread.

Inputs: threadId (required). Returns: result

attach_databaseAttach a database to a siteA
Idempotent
Inspect

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.

Inputs: id (required), siteSlug (required). Returns: result

attach_variableAttach a variable to a siteA
Idempotent
Inspect

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.

Inputs: name (required), slug (required). Returns: result

check_custom_domainCheck a custom domainA
Read-only
Inspect

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.

Inputs: domain (required). Returns: result

check_domainCheck a custom domainA
Read-only
Inspect

Refresh certificate status + live TLS/HTTPS probe for a connected domain (by id from list_domains).

Inputs: id (required). Returns: result

connect_providerConnect the domain's DNS providerA
Idempotent
Inspect

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.

Inputs: domain (required). Returns: result

contract_amendCreate an amendment to a signed contractAInspect

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).

Inputs: scopeDelta (required), parentContractId (required), feeDeltaCents, targetCompletionDate. Returns: result

contract_draftDraft a contract from a brief_ready projectA
Idempotent
Inspect

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.

Inputs: projectId (required). Returns: result

contract_pdfGet the signed contract PDF (base64)A
Read-only
Inspect

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.

Inputs: contractId (required). Returns: result

contract_sendSend a draft contract to the customerAInspect

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.

Inputs: contractId (required). Returns: result

contract_statusRead contract state + amendmentsA
Read-only
Inspect

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}.

Inputs: contractId (required). Returns: result

create_databaseCreate a databaseA
Idempotent
Inspect

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.

Inputs: name (required), binding, provider, siteSlug. Returns: result

create_driveCreate a driveAInspect

Create a private cloud Drive (plan-limited). Pass client to file it under a client.

Inputs: name (required), client. Returns: result

create_listingList one of my sites for saleAInspect

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').

Inputs: siteSlug (required), termsMode (required), priceCents (required), jurisdiction (required), +3 more. Returns: result

create_projectCreate a client-intake projectAInspect

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').

Inputs: label (required), customerName, customerEmail, originatedFromSiteId. Returns: result

create_testCreate an email demand testAInspect

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.

Inputs: idea (required), headline (required), cta, sub, +1 more. Returns: result

data_export_collectionExport records (capped)A
Read-only
Inspect

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>.

Inputs: slug (required), collection (required), limit. Returns: result

data_insertInsert a record into a collectionAInspect

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.

Inputs: slug (required), record (required), collection (required). Returns: result

data_list_collectionsList Site Data collectionsA
Read-only
Inspect

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.

Inputs: slug (required). Returns: result

data_queryQuery records from a collectionA
Read-only
Inspect

Page records from an owned site's collection, newest-first. limit ≤ 200 (default 50). cursor from a previous response's nextCursor.

Inputs: slug (required), collection (required), limit, cursor. Returns: result

delete_databaseDelete a databaseA
Destructive
Inspect

PERMANENTLY delete a database and all its data. Irreversible — confirm with the user first.

Inputs: id (required). Returns: result

delete_listingUnpublish a listing (set to draft)A
Destructive
Inspect

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.

Inputs: siteSlug (required). Returns: result

delete_siteDelete a siteA
Destructive
Inspect

PERMANENTLY delete a site and all stored files. Irreversible — confirm with the user first.

Inputs: slug (required). Returns: result

delete_variableDelete a variableB
Destructive
Inspect

Remove one variable by name.

Inputs: name (required). Returns: result

deploy_functionDeploy a Worker function to a siteA
Idempotent
Inspect

Deploy a Worker function to a site. The function runs on every request to .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.

Inputs: slug (required), source (required), lang, crons. Returns: result

detach_variableDetach a variable from a siteA
Destructive
Inspect

Stop exposing a variable to a site's Worker env. Takes effect on the site's next function deploy.

Inputs: name (required), slug (required). Returns: result

drive_delete_fileDelete a drive fileA
Destructive
Inspect

Delete a file from a Drive.

Inputs: path (required), driveId (required). Returns: result

drive_list_filesList drive filesA
Read-only
Inspect

List files in a Drive (driveId = drv_…, or "default"). Optional prefix filter.

Inputs: driveId (required), prefix. Returns: result

drive_put_fileWrite a drive fileA
Idempotent
Inspect

Write a file into a Drive (driveId = drv_… or "default"). content is utf8 or base64. Use for agent memory, notes, context, assets.

Inputs: path (required), content (required), driveId (required), encoding. Returns: result

duplicate_siteDuplicate a siteAInspect

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.

Inputs: slug (required), title. Returns: result

export_accountExport account dataA
Read-only
Inspect

Return a JSON bundle of the user's profile, sites, Site Data, drives, and metadata (secrets excluded). Data portability.

Inputs: no named parameters. Returns: result

feature_siteFeature a site on ExploreA
Idempotent
Inspect

Toggle whether an owned, public site appears in the public shiply Explore gallery (https://shiply.now/explore). Only public-access sites are eligible.

Inputs: show (required), slug (required). Returns: result

forward_threadForward an inbox message to a new recipientAInspect

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: '.

Inputs: to (required), threadId (required), note, subject, +1 more. Returns: result

get_account_statusAccount plan + capability matrixA
Read-only
Inspect

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.

Inputs: no named parameters. Returns: result

get_analyticsSite analyticsB
Read-only
Inspect

Daily page views per site for the last 30 days.

Inputs: no named parameters. Returns: result

get_connect_statusStripe Connect onboarding statusA
Read-only
Inspect

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.

Inputs: no named parameters. Returns: result

get_functionGet the deployed function for a siteA
Read-only
Inspect

Return the deployed function source + metadata for a site, or null if no function deployed.

Inputs: slug (required). Returns: result

get_function_logsRead recent function logsA
Read-only
Inspect

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.

Inputs: slug (required), limit, since. Returns: result

get_projectGet one project (full row)A
Read-only
Inspect

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.

Inputs: id (required). Returns: result

get_siteSite detailB
Read-only
Inspect

Site settings + version history for one of my sites.

Inputs: slug (required). Returns: result

get_site_accessRead site access controlA
Read-only
Inspect

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.

Inputs: slug (required). Returns: result

get_test_statusDemand test status (the verdict)A
Read-only
Inspect

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.

Inputs: testId (required). Returns: result

list_complaintsList complaints + bouncesA
Read-only
Inspect

Return threads tagged as complaints (spam reports) OR bounces (recipient rejected). Read these before any further sending.

Inputs: no named parameters. Returns: result

list_cronsList cron triggers for a siteA
Read-only
Inspect

List cron triggers for a site's deployed function. Each cron is (path, schedule, lastRunAt).

Inputs: slug (required). Returns: result

list_custom_domainsList custom domainsA
Read-only
Inspect

List registered custom domains grouped with their subdomains, each subdomain's site and status, and the detected provider.

Inputs: no named parameters. Returns: result

list_databasesList my databasesA
Read-only
Inspect

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.

Inputs: no named parameters. Returns: result

list_domainsList custom domainsB
Read-only
Inspect

List connected custom domains with status.

Inputs: no named parameters. Returns: result

list_drivesList drivesA
Read-only
Inspect

List the user's private cloud Drives (id, name). Optional clientId filters to one client.

Inputs: clientId. Returns: result

list_inboxList inbox threadsA
Read-only
Inspect

List the user's email inbox threads (outbound demand-test sends + inbound replies / unsubscribes / complaints / bounces). Filter by tag.

Inputs: limit, filter, offset. Returns: result

list_listingsList my marketplace listingsA
Read-only
Inspect

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.

Inputs: no named parameters. Returns: result

list_mailbox_contactsList a mailbox's contactsA
Read-only
Inspect

List captured contacts for a (site, collection) mailbox, optionally filtered by status (signed_up/confirmed/unsubscribed). Returns email, status, confirmedAt, createdAt, and captured fields.

Inputs: slug (required), collection (required), status. Returns: result

list_my_ordersList orders where I am the buyerA
Read-only
Inspect

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.

Inputs: limit. Returns: result

list_my_salesList orders where I am the sellerA
Read-only
Inspect

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).

Inputs: limit. Returns: result

list_project_filesList files uploaded to a projectA
Read-only
Inspect

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.

Inputs: id (required). Returns: result

list_projectsList my client-intake projectsA
Read-only
Inspect

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.

Inputs: q, limit, status, clientId. Returns: result

list_secretsList secret names for a siteA
Read-only
Inspect

List secret names (values not returned) for a site's deployed function.

Inputs: slug (required). Returns: result

list_sending_domainsList my sending domainsA
Read-only
Inspect

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.

Inputs: no named parameters. Returns: result

list_site_inboxList a site's email inbox threadsB
Read-only
Inspect

Read the email threads (received, sent, web captures) for the agent's sites. Optionally scoped to one site by slug.

Inputs: slug. Returns: result

list_sitesList my sitesA
Read-only
Inspect

List the sites owned by this API key. Optional clientId filters to one client.

Inputs: clientId. Returns: result

list_site_variablesList variables attached to a siteA
Read-only
Inspect

Names of the variables attached to an owned site's Worker env (values never shown here).

Inputs: slug (required). Returns: result

list_suppressionsList suppressed emails / domainsA
Read-only
Inspect

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.

Inputs: no named parameters. Returns: result

list_test_inbox_addressesList per-test inbox addressesA
Read-only
Inspect

Return every active demand test's reply / inbound address (@). 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.

Inputs: no named parameters. Returns: result

list_testsList demand testsA
Read-only
Inspect

List your demand tests with signups + confirmed counts.

Inputs: no named parameters. Returns: result

list_unsubscribesList unsubscribesA
Read-only
Inspect

Shortcut for list_inbox with filter=unsubscribes — shows every thread tagged as an opt-out request.

Inputs: limit. Returns: result

list_variablesList variablesA
Read-only
Inspect

List the encrypted variables. Values are masked unless reveal=true.

Inputs: reveal. Returns: result

list_versionsList a site's deploysA
Idempotent
Inspect

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.

Inputs: slug (required). Returns: result

mark_thread_readMark a thread readA
Idempotent
Inspect

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.

Inputs: threadId (required). Returns: result

promote_sitePromote a preview to a production siteA
Idempotent
Inspect

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.

Inputs: srcSlug (required), destSlug (required). Returns: result

publish_from_drivePublish a drive as a siteA
Idempotent
Inspect

Snapshot a Drive (or a prefix of it) into a new live site at .shiply.now. Files copied server-side.

Inputs: driveId (required), title, prefix. Returns: result

publish_sitePublish a siteA
Idempotent
Inspect

Publish files to the web → live URL at .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.

Inputs: files (required), slug, title, client, +3 more. Returns: result

pull_sitePull a site's current filesA
Idempotent
Inspect

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.

Inputs: slug (required). Returns: result

read_threadRead an inbox threadA
Read-only
Inspect

Return the thread metadata + all messages in chronological order. Use list_inbox first to get a threadId.

Inputs: threadId (required). Returns: result

refund_orderRefund one of my salesA
Destructive
Inspect

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.

Inputs: orderId (required), reason. Returns: result

regenerate_briefRe-run AI brief generationAInspect

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.

Inputs: id (required). Returns: result

remove_cronRemove a cron triggerA
Destructive
Inspect

Remove a cron trigger from a site's deployed function.

Inputs: path (required), slug (required). Returns: result

remove_custom_domainRemove a custom domainA
Destructive
Inspect

Remove a registered custom domain and all its subdomains; they stop serving immediately.

Inputs: domain (required). Returns: result

remove_domainDisconnect a custom domainA
Destructive
Inspect

Remove a connected domain (by id). It stops serving immediately.

Inputs: id (required). Returns: result

remove_functionRemove the deployed function from a siteA
Destructive
Inspect

Remove the deployed Worker function from a site (and all its routes, secrets, and cron triggers). Site falls back to static-only serving. Irreversible.

Inputs: slug (required). Returns: result

remove_secretRemove a secret from a siteA
Destructive
Inspect

Remove a secret from a site's deployed function. The binding disappears on next request.

Inputs: name (required), slug (required). Returns: result

remove_sending_domainRemove a sending domainA
Destructive
Inspect

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.

Inputs: id (required). Returns: result

remove_suppressionRemove from suppression listA
Destructive
Inspect

Delete one suppression by id. Use list_suppressions first to find the id.

Inputs: suppressionId (required). Returns: result

reply_to_threadReply to an inbox threadAInspect

Send an email reply on an existing thread. Goes FROM the original recipient address (the @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: ' when omitted. Cap at 20,000 chars. Use after read_thread to make sure you're replying to the right conversation.

Inputs: body (required), threadId (required), subject. Returns: result

resend_confirmationResend a confirmation emailAInspect

Re-send the double-opt-in confirmation to a signup that has not confirmed yet.

Inputs: email (required), testId (required). Returns: result

resend_intake_inviteRe-send the customer intake invite emailAInspect

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.

Inputs: id (required). Returns: result

restore_projectRestore an archived projectA
Idempotent
Inspect

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.

Inputs: id (required). Returns: result

rollback_siteRoll back a siteA
Idempotent
Inspect

Re-point a site to any finalized version (rollback or roll-forward). Get version ids from get_site. Serving updates immediately.

Inputs: slug (required), versionId (required). Returns: result

send_broadcastBroadcast to confirmed subscribersAInspect

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.

Inputs: html (required), testId (required), subject (required), text. Returns: result

send_emailSend an email from a siteAInspect

Send an email from .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.

Inputs: to (required), html (required), slug (required), subject (required), +1 more. Returns: result

send_mailbox_broadcastBroadcast to a mailbox's confirmed audienceAInspect

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.

Inputs: html (required), slug (required), subject (required), collection (required), +1 more. Returns: result

set_cronSet or update a cron triggerA
Idempotent
Inspect

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).

Inputs: path (required), slug (required), schedule (required). Returns: result

set_handleSet a vanity handleA
Idempotent
Inspect

Give ONE site a vanity URL: rename it to .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/@.)

Inputs: slug (required), handle (required). Returns: result

set_mailboxConfigure a site collection's email behaviorA
Idempotent
Inspect

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.

Inputs: slug (required), collection (required), branding, notifyTo, +3 more. Returns: result

set_primary_subdomainPick the canonical URL for a custom domainA
Idempotent
Inspect

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.

Inputs: domain (required), hostname (required). Returns: result

set_profileSet up a public profileA
Idempotent
Inspect

Create or update the user's public PORTFOLIO page at shiply.now/@ (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 .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.

Inputs: enable, handle, autoAdd. Returns: result

set_secretSet a Worker secret on a siteA
Idempotent
Inspect

Set a CF Worker secret on a site's deployed function. Value is encrypted-at-rest and accessible as env. inside the worker. Use for Stripe keys, Resend API keys, etc.

Inputs: name (required), slug (required), value (required). Returns: result

set_site_accessSet site access controlA
Idempotent
Inspect

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.

Inputs: mode (required), slug (required), password, allowedEmails, +1 more. Returns: result

set_variableSave an encrypted variableA
Idempotent
Inspect

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).

Inputs: name (required), value (required). Returns: result

site_statusSSL + readiness checkA
Read-only
Inspect

Check any shiply slug or custom hostname: TLS certificate (issuer, days left) + HTTPS probe. ready=true means live.

Inputs: target (required). Returns: result

summarize_threadAI-summarize an inbox threadA
Read-only
Inspect

One-paragraph summary of the thread, oriented to the most actionable signal (interest, complaint, question, unsubscribe).

Inputs: threadId (required). Returns: result

sync_dnsSync DNS recordsA
Idempotent
Inspect

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.

Inputs: domain (required). Returns: result

unarchive_threadUnarchive a threadA
Idempotent
Inspect

Restore an archived thread (clears archivedAt). It reappears in the default inbox list. Pair with list_inbox filter=archived to find archived threadIds first.

Inputs: threadId (required). Returns: result

update_briefPatch the project briefA
Idempotent
Inspect

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.

Inputs: id (required), brief (required). Returns: result

update_listingUpdate one of my listingsA
Idempotent
Inspect

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.

Inputs: siteSlug (required), pitch, status, termsMode, +3 more. Returns: result

verify_claimVerify a Shiply claim pairing codeAInspect

Confirm a pairing code shown in the user's browser at https://shiply.now/claim/?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.

Inputs: code (required). Returns: result

verify_sending_domainRe-check DNS for a sending domainA
Idempotent
Inspect

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.

Inputs: id (required). Returns: result

verify_siteVerify a live deployA
Read-only
Inspect

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.

Inputs: target (required). Returns: result

whoamiAccount overviewA
Read-only
Inspect

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.

Inputs: no named parameters. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to build and deploy an app from a GitHub repository to a managed live server and then operate it — logs, captured errors, health checks, managed Postgres, secrets, custom domains, email authentication, and Stripe checkout links. It also exposes safe, read/write-labelled tools so agents can rebuild, start/stop, and inspect projects without ever editing source code.
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Publishes the app your coding agent built so your coworkers can use it: a private address behind email sign-in, its own database, scheduled jobs and email reminders, with tools to invite people, read logs, roll back and export data.
      MIT
    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.

    Resources