now. shiply/ shiply
by shiply.now · remote · no sign-in to list tools · v1.1.0 · published by now.shiply
Publish any app in one call: SQL database, functions, email, and a custom domain. Flat price.
114 tools: 16 can delete or cancel things, 11 do something that can't be undone, 43 change things and 44 only read.
Scanned Oct 21, 2026
- Deletes or cancels16Claude Code: deny: see these tools
- Can't be undone11Claude Code: ask: see these tools
- Changes things43Claude Code: ask: see these tools
- Only reads44Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http shiply https://shiply.now/mcpTools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
114 tools
Deletes or cancels 16Claude Code: deny
archive_projectMove a project to status='archived'.No findings
Why it is in this group
- The name "archive_project" says "archive": a word for removing or ending something.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
archive_threadSoft-archive the thread (sets archivedAt).No findings
Why it is in this group
- The name "archive_thread" says "archive": a word for removing or ending something.
Description, as the server wrote it Soft-archive the thread (sets archivedAt). Hidden from the default inbox view; surface again with list_inbox filter=archived. Reverse with unarchive_thread.
Annotations the server declares
- idempotentHint: true
delete_databasePERMANENTLY delete a database and all its data.No findings
Why it is in this group
- The name "delete_database" says "delete": a word for removing or ending something.
- The description says "PERMANENTLY delete".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it PERMANENTLY delete a database and all its data. Irreversible — confirm with the user first.
Annotations the server declares
- destructiveHint: true
delete_listingTake a listing off the public marketplace by moving it to status='draft'.No findings
Why it is in this group
- The name "delete_listing" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- destructiveHint: true
delete_sitePERMANENTLY delete a site and all stored files.No findings
Why it is in this group
- The name "delete_site" says "delete": a word for removing or ending something.
- The description says "PERMANENTLY delete".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it PERMANENTLY delete a site and all stored files. Irreversible — confirm with the user first.
Annotations the server declares
- destructiveHint: true
delete_variableRemove one variable by name.No findings
Why it is in this group
- The name "delete_variable" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Remove one variable by name.
Annotations the server declares
- destructiveHint: true
detach_variableStop exposing a variable to a site's Worker env.No findings
Why it is in this group
- The name "detach_variable" says "detach": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Stop exposing a variable to a site's Worker env. Takes effect on the site's next function deploy.
Annotations the server declares
- destructiveHint: true
drive_delete_fileDelete a file from a Drive.No findings
Why it is in this group
- The name "drive_delete_file" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Delete a file from a Drive.
Annotations the server declares
- destructiveHint: true
refund_orderIssue a full refund on a paid order the user sold.No findings
Why it is in this group
- The name "refund_order" says "refund": a word that usually means money moves, which cannot be taken back.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- destructiveHint: true
- openWorldHint: true
remove_cronRemove a cron trigger from a site's deployed function.No findings
Why it is in this group
- The name "remove_cron" says "remove": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Remove a cron trigger from a site's deployed function.
Annotations the server declares
- destructiveHint: true
remove_custom_domainRemove a registered custom domain and all its subdomains; they stop serving immediately.No findings
Why it is in this group
- The name "remove_custom_domain" says "remove": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Remove a registered custom domain and all its subdomains; they stop serving immediately.
Annotations the server declares
- destructiveHint: true
remove_domainRemove a connected domain (by id).No findings
Why it is in this group
- The name "remove_domain" says "remove": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Remove a connected domain (by id). It stops serving immediately.
Annotations the server declares
- destructiveHint: true
remove_functionRemove the deployed Worker function from a site (and all its routes, secrets, and cron triggers).No findings
Why it is in this group
- The name "remove_function" says "remove": a word for removing or ending something.
- The description says "Irreversible".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Remove the deployed Worker function from a site (and all its routes, secrets, and cron triggers). Site falls back to static-only serving. Irreversible.
Annotations the server declares
- destructiveHint: true
remove_secretRemove a secret from a site's deployed function.No findings
Why it is in this group
- The name "remove_secret" says "remove": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Remove a secret from a site's deployed function. The binding disappears on next request.
Annotations the server declares
- destructiveHint: true
remove_sending_domainDelete a BYO sending domain.No findings
Why it is in this group
- The name "remove_sending_domain" says "remove": a word for removing or ending something.
- The description says "Irreversible".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- destructiveHint: true
remove_suppressionDelete one suppression by id.No findings
Why it is in this group
- The name "remove_suppression" says "remove": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Delete one suppression by id. Use list_suppressions first to find the id.
Annotations the server declares
- destructiveHint: true
Can't be undone 11Claude Code: ask
contract_sendSend a draft contract to the customer.No findings
Why it is in this group
- The name "contract_send" says "send": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
- openWorldHint: true
create_listingPublish (or upsert) a marketplace listing for an owned site.No findings
Why it is in this group
- The name "create_listing" says "create": a word for a change.
- The description's first verb is "publish": a word for a change that another call does not undo.
Description, as the server wrote it 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').
Annotations the server declares
- idempotentHint: false
forward_threadForward a message from a thread (default: the most recent message) to a NEW recipient with an optional intro note.No findings
Why it is in this group
- The input addresses people (input.to): what it sends cannot be taken back.
Description, as the server wrote it 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>'.
Annotations the server declares
- idempotentHint: false
- openWorldHint: true
publish_from_driveSnapshot a Drive (or a prefix of it) into a new live site at <slug>.shiply.now.No findings
Why it is in this group
- The name "publish_from_drive" says "publish": a word for a change that another call does not undo.
Description, as the server wrote it Snapshot a Drive (or a prefix of it) into a new live site at <slug>.shiply.now. Files copied server-side.
Annotations the server declares
- idempotentHint: true
publish_sitePublish files to the web → live URL at <slug>.shiply.now.No findings
Why it is in this group
- The name "publish_site" says "publish": a word for a change that another call does not undo.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
reply_to_threadSend an email reply on an existing thread.No findings
Why it is in this group
- The name "reply_to_thread" says "reply": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
- openWorldHint: true
resend_confirmationRe-send the double-opt-in confirmation to a signup that has not confirmed yet.No findings
Why it is in this group
- The name "resend_confirmation" says "resend": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it Re-send the double-opt-in confirmation to a signup that has not confirmed yet.
Annotations the server declares
- idempotentHint: false
- openWorldHint: true
resend_intake_inviteRe-fire the 'your developer sent you a project intake' email to the project's customer.No findings
Why it is in this group
- The name "resend_intake_invite" says "resend": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
- openWorldHint: true
send_broadcastSend a campaign to this test's confirmed (double-opt-in) subscribers — the "we're live" email.No findings
Why it is in this group
- The name "send_broadcast" says "send": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
- openWorldHint: true
send_emailSend an email from <slug>.shiply.now's managed sender.No findings
Why it is in this group
- The name "send_email" says "send": a word for sending, and what is sent cannot be taken back.
- The input addresses people (input.to): what it sends cannot be taken back.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
- openWorldHint: true
send_mailbox_broadcastSend a one-shot broadcast to the confirmed (double-opt-in) subscribers of a (site, collection) mailbox.No findings
Why it is in this group
- The name "send_mailbox_broadcast" says "send": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
- openWorldHint: true
Changes things 43Claude Code: ask
add_custom_domainRegister a registrable domain (e.g.No findings
Why it is in this group
- The name "add_custom_domain" says "add": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
- openWorldHint: true
add_domainServe a site on a domain the user owns.No findings
Why it is in this group
- The name "add_domain" says "add": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
- openWorldHint: true
add_sending_domainRegister a domain the user owns for outbound demand-test sends.No findings
Why it is in this group
- The name "add_sending_domain" says "add": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
- openWorldHint: true
add_subdomainServe an owned site at <subdomain>.<domain> (use subdomain "@" or "" for the apex — apex needs a provider with CNAME flattening/ALIAS, e.g.No findings
Why it is in this group
- The name "add_subdomain" says "add": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
- openWorldHint: true
add_suppressionAdd an address (or whole domain) to the user's suppression list.No findings
Why it is in this group
- The name "add_suppression" says "add": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
attach_databaseBind an existing database to one owned site's Worker env (the binding name chosen at create_database time).No findings
Why it is in this group
- The name "attach_database" says "attach": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
attach_variableExpose one saved variable to ONE owned site's Worker env (plain_text binding).No findings
Why it is in this group
- The name "attach_variable" says "attach": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
check_custom_domainCheck whether a custom domain's subdomains are live: re-polls Cloudflare cert status + probes DNS/TLS/HTTPS on each subdomain.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: true
check_domainRefresh certificate status + live TLS/HTTPS probe for a connected domain (by id from list_domains).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Refresh certificate status + live TLS/HTTPS probe for a connected domain (by id from list_domains).
Annotations the server declares
- readOnlyHint: true
- openWorldHint: true
connect_providerStart one-click DNS connect for a registered custom domain.No findings
Why it is in this group
- The description's first verb is "start": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
- openWorldHint: true
contract_amendCreate an amendment to a SIGNED parent contract.No findings
Why it is in this group
- The description's first verb is "create": a word for a change.
Description, as the server wrote it 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).
Annotations the server declares
- idempotentHint: false
contract_draftDraft a contract from a brief_ready project.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
create_databaseProvision a SQL database — D1 (default, free) or Neon Postgres (--postgres, developer plan).No findings
Why it is in this group
- The name "create_database" says "create": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
create_driveCreate a private cloud Drive (plan-limited).No findings
Why it is in this group
- The name "create_drive" says "create": a word for a change.
Description, as the server wrote it Create a private cloud Drive (plan-limited). Pass client to file it under a client.
Annotations the server declares
- idempotentHint: false
create_projectSpin up a new customer-intake project on the dev's account.No findings
Why it is in this group
- The name "create_project" says "create": a word for a change.
Description, as the server wrote it 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').
Annotations the server declares
- idempotentHint: false
create_testProvision a demand test in one call: deploys a landing page with a native email-capture form and creates a confirmed-subscriber segment.No findings
Why it is in this group
- The name "create_test" says "create": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
data_insertInsert one record into a collection.No findings
Why it is in this group
- The name "data_insert" says "insert": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
deploy_functionDeploy a Worker function to a site.No findings
Why it is in this group
- The name "deploy_function" says "deploy": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
drive_put_fileWrite a file into a Drive (driveId = drv_… or "default").No findings
Why it is in this group
- The name "drive_put_file" says "put": a word for a change.
Description, as the server wrote it Write a file into a Drive (driveId = drv_… or "default"). content is utf8 or base64. Use for agent memory, notes, context, assets.
Annotations the server declares
- idempotentHint: true
duplicate_siteServer-side copy of an owned site under a new slug — instantly live.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
feature_siteToggle whether an owned, public site appears in the public shiply Explore gallery (https://shiply.now/explore).No findings
Why it is in this group
- The description's first verb is "toggle": a word for a change.
Description, as the server wrote it Toggle whether an owned, public site appears in the public shiply Explore gallery (https://shiply.now/explore). Only public-access sites are eligible.
Annotations the server declares
- idempotentHint: true
mark_thread_readZero the unread counter for a thread.No findings
Why it is in this group
- The name "mark_thread_read" says "mark": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
promote_siteCopy the EXACT live bytes of one owned site (srcSlug — your preview) into another owned site (destSlug — your production site / custom domain), no rebuild.No findings
Why it is in this group
- The description's first verb is "copy": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
pull_siteDownload 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.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
regenerate_briefRe-run the MiniMax/Anthropic brief generator from the project's current intake_responses and persist the result.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
- openWorldHint: true
restore_projectMove an archived project back to status='draft' so it reappears in the active list.No findings
Why it is in this group
- The description's first verb is "move": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
rollback_siteRe-point a site to any finalized version (rollback or roll-forward).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Re-point a site to any finalized version (rollback or roll-forward). Get version ids from get_site. Serving updates immediately.
Annotations the server declares
- idempotentHint: true
set_cronSet or update a cron trigger on a site's deployed function.No findings
Why it is in this group
- The name "set_cron" says "set": a word for a change.
Description, as the server wrote it 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).
Annotations the server declares
- idempotentHint: true
set_handleGive ONE site a vanity URL: rename it to <handle>.shiply.now (3-30 chars, a-z 0-9 -).No findings
Why it is in this group
- The name "set_handle" says "set": a word for a change.
Description, as the server wrote it 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>.)
Annotations the server declares
- idempotentHint: true
set_linkPath-mounting: serve an owned target site at a path on an owned host site (host/docs -> target).No findings
Why it is in this group
- The name "set_link" says "set": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
set_mailboxTurn a Site Data collection into a mailbox: double opt-in, owner notifications, sending domain, branding.No findings
Why it is in this group
- The name "set_mailbox" says "set": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
set_primary_subdomainMark a hostname as the primary (canonical) URL for its site.No findings
Why it is in this group
- The name "set_primary_subdomain" says "set": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
set_profileCreate 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.No findings
Why it is in this group
- The name "set_profile" says "set": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
set_secretSet a CF Worker secret on a site's deployed function.No findings
Why it is in this group
- The name "set_secret" says "set": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
set_site_accessProtect an owned site (paid plans).No findings
Why it is in this group
- The name "set_site_access" says "set": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
set_variableUpsert a key/value in the user's encrypted variable store (UPPER_SNAKE name, ≤8 KiB value).No findings
Why it is in this group
- The name "set_variable" says "set": a word for a change.
Description, as the server wrote it 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).
Annotations the server declares
- idempotentHint: true
sync_dnsFor a connected custom domain, (re)write the CNAME records for all its subdomains automatically and report what changed.No findings
Why it is in this group
- The name "sync_dns" says "sync": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
- openWorldHint: true
unarchive_threadRestore an archived thread (clears archivedAt).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Restore an archived thread (clears archivedAt). It reappears in the default inbox list. Pair with list_inbox filter=archived to find archived threadIds first.
Annotations the server declares
- idempotentHint: true
update_briefOverwrite the project's working brief (jsonb).No findings
Why it is in this group
- The name "update_brief" says "update": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
update_listingPatch a listing by siteSlug — change price, pitch, terms, jurisdiction, or status (draft|live|paused).No findings
Why it is in this group
- The name "update_listing" says "update": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
verify_claimConfirm a pairing code shown in the user's browser at https://shiply.now/claim/<slug>?pair=1.No findings
Why it is in this group
- The input takes a statement or command to run (input.code), which can change anything it can reach.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
verify_sending_domainTrigger Resend to re-check the domain's DNS records, persist the new status.No findings
Why it is in this group
- The description's first verb is "trigger": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
- openWorldHint: true
verify_siteEdge-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 thum…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: true
Only reads 44Claude Code: allow
contract_pdfGet the signed contract PDF as a base64-encoded download.No findings
Why it is in this group
- The description's first verb is "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
contract_statusRead the current state of a contract: status, sent_at, viewed_at, signed_at, signer info, content_hash, plus any amendments.No findings
Why it is in this group
- The name "contract_status" says "status": a word for reading.
Description, as the server wrote it 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}.
Annotations the server declares
- readOnlyHint: true
data_export_collectionReturn up to `limit` records (default 1000, max 5000) from a collection — for snapshotting into agent context.No findings
Why it is in this group
- The description's first verb is "return": a word for reading.
Description, as the server wrote it 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>`.
Annotations the server declares
- readOnlyHint: true
data_list_collectionsList collections declared in an owned site's .shiply/data.json with current record counts.No findings
Why it is in this group
- The name "data_list_collections" says "list": a word for reading.
Description, as the server wrote it 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`.
Annotations the server declares
- readOnlyHint: true
data_queryPage records from an owned site's collection, newest-first.No findings
Why it is in this group
- The name "data_query" says "query": a word for reading.
Description, as the server wrote it Page records from an owned site's collection, newest-first. limit ≤ 200 (default 50). cursor from a previous response's nextCursor.
Annotations the server declares
- readOnlyHint: true
drive_list_filesList files in a Drive (driveId = drv_…, or "default").No findings
Why it is in this group
- The name "drive_list_files" says "list": a word for reading.
Description, as the server wrote it List files in a Drive (driveId = drv_…, or "default"). Optional prefix filter.
Annotations the server declares
- readOnlyHint: true
export_accountReturn a JSON bundle of the user's profile, sites, Site Data, drives, and metadata (secrets excluded).No findings
Why it is in this group
- The description's first verb is "return": a word for reading.
Description, as the server wrote it Return a JSON bundle of the user's profile, sites, Site Data, drives, and metadata (secrets excluded). Data portability.
Annotations the server declares
- readOnlyHint: true
get_account_statusGet the signed-in account's plan, capabilities, and upgrade URL.No findings
Why it is in this group
- The name "get_account_status" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
get_analyticsDaily page views per site for the last 30 days.No findings
Why it is in this group
- The name "get_analytics" says "get": a word for reading.
Description, as the server wrote it Daily page views per site for the last 30 days.
Annotations the server declares
- readOnlyHint: true
get_connect_statusReturn the seller's Stripe Connect state: not_started | in_progress | pending_verification | ready | disabled.No findings
Why it is in this group
- The name "get_connect_status" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
get_functionReturn the deployed function source + metadata for a site, or null if no function deployed.No findings
Why it is in this group
- The name "get_function" says "get": a word for reading.
Description, as the server wrote it Return the deployed function source + metadata for a site, or null if no function deployed.
Annotations the server declares
- readOnlyHint: true
get_function_logsRead recent runtime logs for a site's per-site Worker (console output, request summaries, exceptions) from Cloudflare Workers Observability — 7-day retention, newest first.No findings
Why it is in this group
- The name "get_function_logs" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
get_projectRead one of the dev's projects by id — includes label, status, customer details, intake responses, AI brief, drive folder.No findings
Why it is in this group
- The name "get_project" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
get_siteSite settings + version history for one of my sites.No findings
Why it is in this group
- The name "get_site" says "get": a word for reading.
Description, as the server wrote it Site settings + version history for one of my sites.
Annotations the server declares
- readOnlyHint: true
get_site_accessRead an owned site's current access policy (mode: public/password/restricted, allowedEmails, allowedDomains, hasPassword).No findings
Why it is in this group
- The name "get_site_access" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
get_test_statusONE consolidated object: page funnel (views, signups, confirmed, conversion) ⊕ email events (delivered/opened/clicked/bounced) ⊕ a computed verdict.No findings
Why it is in this group
- The name "get_test_status" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
list_complaintsReturn threads tagged as complaints (spam reports) OR bounces (recipient rejected).No findings
Why it is in this group
- The name "list_complaints" says "list": a word for reading.
Description, as the server wrote it Return threads tagged as complaints (spam reports) OR bounces (recipient rejected). Read these before any further sending.
Annotations the server declares
- readOnlyHint: true
list_cronsList cron triggers for a site's deployed function.No findings
Why it is in this group
- The name "list_crons" says "list": a word for reading.
Description, as the server wrote it List cron triggers for a site's deployed function. Each cron is (path, schedule, lastRunAt).
Annotations the server declares
- readOnlyHint: true
list_custom_domainsList registered custom domains grouped with their subdomains, each subdomain's site and status, and the detected provider.No findings
Why it is in this group
- The name "list_custom_domains" says "list": a word for reading.
Description, as the server wrote it List registered custom domains grouped with their subdomains, each subdomain's site and status, and the detected provider.
Annotations the server declares
- readOnlyHint: true
list_databasesList the SQL databases (D1 or Neon Postgres) on my account, including which owned site (if any) each is attached to.No findings
Why it is in this group
- The name "list_databases" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
list_domainsList connected custom domains with status.No findings
Why it is in this group
- The name "list_domains" says "list": a word for reading.
Description, as the server wrote it List connected custom domains with status.
Annotations the server declares
- readOnlyHint: true
list_drivesList the user's private cloud Drives (id, name).No findings
Why it is in this group
- The name "list_drives" says "list": a word for reading.
Description, as the server wrote it List the user's private cloud Drives (id, name). Optional clientId filters to one client.
Annotations the server declares
- readOnlyHint: true
list_inboxList the user's email inbox threads (outbound demand-test sends + inbound replies / unsubscribes / complaints / bounces).No findings
Why it is in this group
- The name "list_inbox" says "list": a word for reading.
Description, as the server wrote it List the user's email inbox threads (outbound demand-test sends + inbound replies / unsubscribes / complaints / bounces). Filter by tag.
Annotations the server declares
- readOnlyHint: true
list_listingsReturn every marketplace listing the seller owns (any status: draft, live, paused, sold).No findings
Why it is in this group
- The name "list_listings" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
list_mailbox_contactsList captured contacts for a (site, collection) mailbox, optionally filtered by status (signed_up/confirmed/unsubscribed).No findings
Why it is in this group
- The name "list_mailbox_contacts" says "list": a word for reading.
Description, as the server wrote it List captured contacts for a (site, collection) mailbox, optionally filtered by status (signed_up/confirmed/unsubscribed). Returns email, status, confirmedAt, createdAt, and captured fields.
Annotations the server declares
- readOnlyHint: true
list_my_ordersReturn every marketplace order the user PURCHASED.No findings
Why it is in this group
- The name "list_my_orders" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
list_my_salesReturn every marketplace order for sites the user sold (incl.No findings
Why it is in this group
- The name "list_my_sales" says "list": a word for reading.
Description, as the server wrote it 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).
Annotations the server declares
- readOnlyHint: true
list_project_filesReturn the customer-uploaded files for one project (path, size, contentType, createdAt).No findings
Why it is in this group
- The name "list_project_files" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
list_projectsList the dev's customer-intake projects (newest first).No findings
Why it is in this group
- The name "list_projects" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
list_secretsList secret names (values not returned) for a site's deployed function.No findings
Why it is in this group
- The name "list_secrets" says "list": a word for reading.
Description, as the server wrote it List secret names (values not returned) for a site's deployed function.
Annotations the server declares
- readOnlyHint: true
list_sending_domainsReturn every BYO sending domain the user has added (id, domain, fromAddress, status: pending|verified|failed, DNS records).No findings
Why it is in this group
- The name "list_sending_domains" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
list_site_inboxRead the email threads (received, sent, web captures) for the agent's sites.No findings
Why it is in this group
- The name "list_site_inbox" says "list": a word for reading.
Description, as the server wrote it Read the email threads (received, sent, web captures) for the agent's sites. Optionally scoped to one site by slug.
Annotations the server declares
- readOnlyHint: true
list_site_variablesNames of the variables attached to an owned site's Worker env (values never shown here).No findings
Why it is in this group
- The name "list_site_variables" says "list": a word for reading.
Description, as the server wrote it Names of the variables attached to an owned site's Worker env (values never shown here).
Annotations the server declares
- readOnlyHint: true
list_sitesList the sites owned by this API key.No findings
Why it is in this group
- The name "list_sites" says "list": a word for reading.
Description, as the server wrote it List the sites owned by this API key. Optional clientId filters to one client.
Annotations the server declares
- readOnlyHint: true
list_suppressionsReturn the user's suppression list — addresses (and full domains) that shiply skips when sending.No findings
Why it is in this group
- The name "list_suppressions" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
list_test_inbox_addressesReturn every active demand test's reply / inbound address (<slug>@<sitesDomain>).No findings
Why it is in this group
- The name "list_test_inbox_addresses" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
list_testsList your demand tests with signups + confirmed counts.No findings
Why it is in this group
- The name "list_tests" says "list": a word for reading.
Description, as the server wrote it List your demand tests with signups + confirmed counts.
Annotations the server declares
- readOnlyHint: true
list_unsubscribesShortcut for list_inbox with filter=unsubscribes — shows every thread tagged as an opt-out request.No findings
Why it is in this group
- The name "list_unsubscribes" says "list": a word for reading.
Description, as the server wrote it Shortcut for list_inbox with filter=unsubscribes — shows every thread tagged as an opt-out request.
Annotations the server declares
- readOnlyHint: true
list_variablesList the encrypted variables.No findings
Why it is in this group
- The name "list_variables" says "list": a word for reading.
Description, as the server wrote it List the encrypted variables. Values are masked unless reveal=true.
Annotations the server declares
- readOnlyHint: true
list_versionsList a site's finalized deploys newest-first (id, createdAt, isLive, fileCount, bytes), capped at 20.No findings
Why it is in this group
- The name "list_versions" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: true
read_threadReturn the thread metadata + all messages in chronological order.No findings
Why it is in this group
- The name "read_thread" says "read": a word for reading.
Description, as the server wrote it Return the thread metadata + all messages in chronological order. Use list_inbox first to get a threadId.
Annotations the server declares
- readOnlyHint: true
site_statusCheck any shiply slug or custom hostname: TLS certificate (issuer, days left) + HTTPS probe.No findings
Why it is in this group
- The name "site_status" says "status": a word for reading.
Description, as the server wrote it Check any shiply slug or custom hostname: TLS certificate (issuer, days left) + HTTPS probe. ready=true means live.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: true
summarize_threadOne-paragraph summary of the thread, oriented to the most actionable signal (interest, complaint, question, unsubscribe).No findings
Why it is in this group
- The name "summarize_thread" says "summarize": a word for reading.
Description, as the server wrote it One-paragraph summary of the thread, oriented to the most actionable signal (interest, complaint, question, unsubscribe).
Annotations the server declares
- readOnlyHint: true
- openWorldHint: true
whoamiWho am I?No findings
Why it is in this group
- The name "whoami" says "whoami": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http shiply https://shiply.now/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__shiply__site_status",
"mcp__shiply__list_sites",
"mcp__shiply__get_site",
"mcp__shiply__list_versions",
"mcp__shiply__get_site_access",
"mcp__shiply__export_account",
"mcp__shiply__whoami",
"mcp__shiply__get_account_status",
"mcp__shiply__list_drives",
"mcp__shiply__drive_list_files",
"mcp__shiply__list_variables",
"mcp__shiply__list_site_variables",
"mcp__shiply__list_databases",
"mcp__shiply__data_list_collections",
"mcp__shiply__data_query",
"mcp__shiply__data_export_collection",
"mcp__shiply__list_custom_domains",
"mcp__shiply__list_domains",
"mcp__shiply__get_analytics",
"mcp__shiply__list_tests",
"mcp__shiply__get_test_status",
"mcp__shiply__list_inbox",
"mcp__shiply__read_thread",
"mcp__shiply__summarize_thread",
"mcp__shiply__list_test_inbox_addresses",
"mcp__shiply__list_unsubscribes",
"mcp__shiply__list_suppressions",
"mcp__shiply__list_complaints",
"mcp__shiply__list_projects",
"mcp__shiply__get_project",
"mcp__shiply__list_project_files",
"mcp__shiply__list_listings",
"mcp__shiply__list_my_sales",
"mcp__shiply__list_my_orders",
"mcp__shiply__get_connect_status",
"mcp__shiply__list_sending_domains",
"mcp__shiply__contract_pdf",
"mcp__shiply__contract_status",
"mcp__shiply__get_function",
"mcp__shiply__list_secrets",
"mcp__shiply__list_crons",
"mcp__shiply__get_function_logs",
"mcp__shiply__list_site_inbox",
"mcp__shiply__list_mailbox_contacts"
],
"ask": [
"mcp__shiply__publish_site",
"mcp__shiply__verify_site",
"mcp__shiply__rollback_site",
"mcp__shiply__pull_site",
"mcp__shiply__set_handle",
"mcp__shiply__duplicate_site",
"mcp__shiply__promote_site",
"mcp__shiply__set_link",
"mcp__shiply__set_site_access",
"mcp__shiply__create_drive",
"mcp__shiply__drive_put_file",
"mcp__shiply__publish_from_drive",
"mcp__shiply__set_profile",
"mcp__shiply__feature_site",
"mcp__shiply__set_variable",
"mcp__shiply__attach_variable",
"mcp__shiply__create_database",
"mcp__shiply__attach_database",
"mcp__shiply__data_insert",
"mcp__shiply__add_domain",
"mcp__shiply__add_custom_domain",
"mcp__shiply__add_subdomain",
"mcp__shiply__set_primary_subdomain",
"mcp__shiply__connect_provider",
"mcp__shiply__sync_dns",
"mcp__shiply__check_custom_domain",
"mcp__shiply__check_domain",
"mcp__shiply__create_test",
"mcp__shiply__send_broadcast",
"mcp__shiply__resend_confirmation",
"mcp__shiply__verify_claim",
"mcp__shiply__reply_to_thread",
"mcp__shiply__mark_thread_read",
"mcp__shiply__unarchive_thread",
"mcp__shiply__forward_thread",
"mcp__shiply__add_suppression",
"mcp__shiply__create_project",
"mcp__shiply__update_brief",
"mcp__shiply__regenerate_brief",
"mcp__shiply__restore_project",
"mcp__shiply__resend_intake_invite",
"mcp__shiply__create_listing",
"mcp__shiply__update_listing",
"mcp__shiply__add_sending_domain",
"mcp__shiply__verify_sending_domain",
"mcp__shiply__contract_draft",
"mcp__shiply__contract_send",
"mcp__shiply__contract_amend",
"mcp__shiply__deploy_function",
"mcp__shiply__set_secret",
"mcp__shiply__set_cron",
"mcp__shiply__send_email",
"mcp__shiply__set_mailbox",
"mcp__shiply__send_mailbox_broadcast"
],
"deny": [
"mcp__shiply__delete_site",
"mcp__shiply__drive_delete_file",
"mcp__shiply__delete_variable",
"mcp__shiply__detach_variable",
"mcp__shiply__delete_database",
"mcp__shiply__remove_custom_domain",
"mcp__shiply__remove_domain",
"mcp__shiply__archive_thread",
"mcp__shiply__remove_suppression",
"mcp__shiply__archive_project",
"mcp__shiply__delete_listing",
"mcp__shiply__refund_order",
"mcp__shiply__remove_sending_domain",
"mcp__shiply__remove_function",
"mcp__shiply__remove_secret",
"mcp__shiply__remove_cron"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as shiply. Review it before you use it.