{"apiVersion":"v1","directorySlug":"weinerandballs-mcp-dc5d3227f2","title":"Weinerandballs","description":null,"pageUrl":"https://www.mcpbundles.com/skills/weinerandballs-mcp-dc5d3227f2","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://weinerandballs.com/api/mcp","hostedMcpUrl":null,"toolCount":41,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.weinerandballs/weinerandballs-mcp-dc5d3227f2","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"create_site_from_brief","description":"BUILD FIRST, ASK LATER. Creates a complete, live draft website in one call - free, instant, no account and no sign-in. Call this as soon as someone asks for a website, using whatever you already know and sensible defaults for the rest, then show them the returned preview_url and refine it with edit_section and set_theme. Do not interview the user first. Composition is deterministic and no language model is involved, so anything you leave blank renders as a visible placeholder rather than invente","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["business_name"],"properties":{"tagline":{"type":"string"},"sections":{"type":"string"},"template":{"enum":["storefront","event","shop","services","nonprofit"],"type":"string"},"font_body":{"type":"string"},"site_name":{"type":"string"},"draft_token":{"type":"string"},"content_json":{"anyOf":[{"type":"string"},{"type":"object","additionalProperties":{}}]},"font_heading":{"type":"string"},"business_name":{"type":"string"},"contact_email":{"type":"string"},"contact_phone":{"type":"string"},"contact_address":{"type":"string"},"palette_neutral":{"type":"string"},"palette_primary":{"type":"string"}},"additionalProperties":false},"title":"Create a site from a brief","logicalName":"create_site_from_brief","displayName":"Create a site from a brief","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_site_from_html","description":"BUILD FIRST. Creates a live draft site from HTML you already have - free, instant, no account and no sign-in, fully deterministic with no language model involved. Call it immediately when the user brings you markup, then show them the returned preview_url. Choose create_site_from_brief instead when you are authoring the site yourself and want every section to stay editable in the Pagetool editor: this route keeps the markup verbatim and the flattening is ONE-WAY. Both routes end in the same host","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"html":{"type":"string"},"pages":{"type":"array","items":{"type":"object","additionalProperties":{}}},"site_name":{"type":"string"},"draft_token":{"type":"string"}},"additionalProperties":false},"title":"Create a site from raw HTML","logicalName":"create_site_from_html","displayName":"Create a site from raw HTML","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"edit_section","description":"Changes one node of a site - text, title, styling, link, image, heading level - or removes it and its descendants when remove is true. Address a section with section_id (from list_sections) or index, then aim at the node inside it with field (e.g. \"heading\", \"body\", \"items[1].title\"); list_sections shows every section's fields. Text goes on text nodes only: content aimed at a container is refused with the right field names. Free, and no account is needed for a draft you created.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"alt":{"type":"string"},"src":{"type":"string"},"href":{"type":"string"},"page":{"type":"string"},"field":{"type":"string"},"index":{"type":"integer"},"level":{"type":"integer"},"stage":{"type":"boolean"},"remove":{"type":"boolean"},"content":{"type":"string"},"html_id":{"type":"string"},"subtype":{"type":"string"},"add_item":{"type":"object","additionalProperties":{}},"site_key":{"type":"string"},"class_name":{"type":"string"},"section_id":{"type":"string"},"draft_token":{"type":"string"}},"additionalProperties":false},"title":"Edit or remove a site section","logicalName":"edit_section","displayName":"Edit or remove a site section","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_section","description":"Adds ONE section of any kind (menu, map, faq, hours, ...) to an existing site, styled like the rest of it, without rebuilding the site. Pass content_json with that section's keys (or html with your own markup instead of kind), and position to choose where it goes (default: end, before the footer). Saves an undo version first; stage:true previews it before it goes live. Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"html":{"type":"string"},"kind":{"enum":["hero","about","services","features","gallery","testimonials","pricing","faq","hours","contact","cta","footer","menu","map","social","header","products"],"type":"string"},"page":{"type":"string"},"stage":{"type":"boolean"},"position":{"type":"integer"},"site_key":{"type":"string"},"draft_token":{"type":"string"},"content_json":{"anyOf":[{"type":"string"},{"type":"object","additionalProperties":{}}]}},"additionalProperties":false},"title":"Add a section","logicalName":"add_section","displayName":"Add a section","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_page","description":"Adds a new page (e.g. \"/about\", \"/contact\") to an existing site, built from html (same importer as create_site_from_html) or composed from sections/content_json in the site's own palette and fonts. Link between pages with href=\"/about\". Respects the plan's page limit; stage:true previews it before it goes live. Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["path"],"properties":{"html":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"stage":{"type":"boolean"},"sections":{"type":"string"},"site_key":{"type":"string"},"draft_token":{"type":"string"},"content_json":{"anyOf":[{"type":"string"},{"type":"object","additionalProperties":{}}]}},"additionalProperties":false},"title":"Add a page to a site","logicalName":"add_page","displayName":"Add a page to a site","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_sections","description":"Lists a site's top-level sections in order - each one's CURRENT index, its stable section_id, its kind, its heading, and its fields (every editable node inside it: heading, body, items[n].title, ... with each node's index and current text) - so you can aim edit_section at exactly the right node with section_id + field. Indices shift whenever an earlier section is removed, so list the sections again after any removal instead of reusing an index you recorded earlier. Free, and no account is needed","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"page":{"type":"string"},"stage":{"type":"boolean"},"site_key":{"type":"string"},"draft_token":{"type":"string"}},"additionalProperties":false},"title":"List a site's sections","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_sections","displayName":"List a site's sections"},{"name":"list_sites","description":"Lists every site you own, newest first - site_key, name, preview_url and when that preview link expires, whether it is published and on which domain, and when it was created and last changed. Signed in (OAuth) it lists your account; with a draft_token it lists that draft. Read-only and free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"draft_token":{"type":"string"}},"additionalProperties":false},"title":"List your sites","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_sites","displayName":"List your sites"},{"name":"archive_site","description":"Removes one of your own UNPUBLISHED sites from your account so it no longer appears in list_sites (for example test sites). Nothing is deleted: it is the same recoverable archive the dashboard uses. Live sites, and sites with an active client pay link, are refused. Signed-in accounts only. Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["site_key"],"properties":{"site_key":{"type":"string"}},"additionalProperties":false},"title":"Archive an unpublished site","logicalName":"archive_site","displayName":"Archive an unpublished site","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_pages","description":"Lists every page of a site (home first) with its path, name, draft preview URL and live URL. Use the path as the page parameter of edit_section, add_section, list_sections and the version tools. Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"site_key":{"type":"string"},"draft_token":{"type":"string"}},"additionalProperties":false},"title":"List the pages of a site","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_pages","displayName":"List the pages of a site"},{"name":"remove_page","description":"Removes one page (not the home page) from your site, using the dashboard's recoverable delete: a version is saved first and the page can be restored. Signed-in accounts only. Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["site_key","path"],"properties":{"path":{"type":"string"},"site_key":{"type":"string"}},"additionalProperties":false},"title":"Remove a page from a site","logicalName":"remove_page","displayName":"Remove a page from a site","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"replace_page_html","description":"Re-imports ONE page (the home page too) from new HTML, in place: same address, same share link, same place in the page order, and a version is saved first so it can be undone. Use it to refresh a page built earlier. stage:true previews it before it goes live. Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["html"],"properties":{"html":{"type":"string"},"path":{"type":"string"},"stage":{"type":"boolean"},"site_key":{"type":"string"},"draft_token":{"type":"string"}},"additionalProperties":false},"title":"Replace a page with new HTML","logicalName":"replace_page_html","displayName":"Replace a page with new HTML","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"prowess_buy_domain","description":"Operator token only, during a \"code prowess\" build the owner authorized with a spending cap. Buys ONE domain for the business through our registrar (owner-paid; no customer charge), points it at the server and starts HTTPS. Use dry_run first to compare endings. Exact business name within the cap beats a cheaper near-miss. Auto-renew stays off. Then publish_site and poll publish_status.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["domain"],"properties":{"domain":{"type":"string"},"dry_run":{"type":"boolean"},"site_key":{"type":"string"}},"additionalProperties":false},"title":"Buy the domain for a live build (code prowess)","logicalName":"prowess_buy_domain","displayName":"Buy the domain for a live build (code prowess)","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"publish_status","description":"For a domain your site uses: does DNS point at our server, is the HTTPS certificate in place, and does the page answer? live:true means a visitor can open https://<domain> now. A fresh domain usually takes 5-15 minutes; poll every 20-30 seconds.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["domain"],"properties":{"domain":{"type":"string"}},"additionalProperties":false},"title":"Check whether a domain is live","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"publish_status","displayName":"Check whether a domain is live"},{"name":"record_review","description":"Reviewer token only. Records pass or revise for one exact version of a site (from list_reviews). The operator token can publish only a version whose latest review is a pass; any edit makes a new version.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["site_key","version","verdict"],"properties":{"note":{"type":"string"},"items":{"type":"array","items":{"type":"string"}},"verdict":{"enum":["pass","revise"],"type":"string"},"version":{"type":"string"},"site_key":{"type":"string"}},"additionalProperties":false},"title":"Record a review of one exact site version","logicalName":"record_review","displayName":"Record a review of one exact site version","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_reviews","description":"For one site: whether publishing with the operator token needs a review (enforced), the current draft and staged versions (what record_review must name), and the reviews recorded so far, newest first.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["site_key"],"properties":{"site_key":{"type":"string"}},"additionalProperties":false},"title":"List reviews and the current reviewable versions","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_reviews","displayName":"List reviews and the current reviewable versions"},{"name":"live_check","description":"For a published domain of your site: https root 200, http and www reach https://<domain>/ in one hop, title/description/og tags name the site, og:image is a 1200x630 PNG/JPEG, the favicon is the site's own, no editor leftovers, outbound links answer, exactly one h1, no draft badge. Returns PASS/WARN/FAIL per check. stored:true returns the automatic report made about two minutes after publish_site.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["domain"],"properties":{"name":{"type":"string"},"domain":{"type":"string"},"stored":{"type":"boolean"}},"additionalProperties":false},"title":"Check a published site the way a visitor and a crawler see it","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"live_check","displayName":"Check a published site the way a visitor and a crawler see it"},{"name":"list_versions","description":"Lists a site's saved versions, newest first - version_id, why it was saved, its label, whether an AI edit made it (ai: true), and when. Every edit_section and set_theme call saves the page first, so any AI edit can be undone with restore_version. Free, and no account is needed for a draft you created.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"page":{"type":"string"},"site_key":{"type":"string"},"draft_token":{"type":"string"}},"additionalProperties":false},"title":"List a site's undo history","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_versions","displayName":"List a site's undo history"},{"name":"restore_version","description":"Puts a site back to a version from list_versions - the undo button for AI edits. The current page is saved as a version first, so a restore can itself be undone. Free, and no account is needed for a draft you created.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["version_id"],"properties":{"page":{"type":"string"},"site_key":{"type":"string"},"version_id":{"type":"integer"},"draft_token":{"type":"string"}},"additionalProperties":false},"title":"Restore a saved version (undo)","logicalName":"restore_version","displayName":"Restore a saved version (undo)","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"import_image","description":"Copies a photo from a public URL (e.g. the business's own website) into Pagetool's image store and returns its hosted url. Use that url in content_json (hero/about/card/gallery image), in edit_section src, or in <img src> for create_site_from_html - external image URLs are otherwise dropped. JPEG, PNG, WebP, GIF or AVIF up to 10 MB; resized to 1600px WebP and safety-checked. No public URL (e.g. photos the owner took)? Send data_base64 instead - downscale large photos first. Counts against the si","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"url":{"type":"string"},"format":{"enum":["webp","jpeg"],"type":"string"},"filename":{"type":"string"},"site_key":{"type":"string"},"data_base64":{"type":"string"},"draft_token":{"type":"string"}},"additionalProperties":false},"title":"Import an image (hosted copy)","logicalName":"import_image","displayName":"Import an image (hosted copy)","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"set_client_record","description":"Saves who a site is for and where things stand: business name, contact name/email/phone, the source pages its facts came from, status (prospect, pitched, managed, declined, transferred_out) and notes. Only the fields you pass change; null clears one. list_sites shows each site's record.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"notes":{"type":"string"},"status":{"enum":["prospect","pitched","managed","declined","transferred_out"],"type":"string"},"site_key":{"type":"string"},"draft_token":{"type":"string"},"source_urls":{"type":"array","items":{"type":"string"}},"contact_name":{"type":"string"},"business_name":{"type":"string"},"contact_email":{"type":"string"},"contact_phone":{"type":"string"}},"additionalProperties":false},"title":"Save the client record for a site","logicalName":"set_client_record","displayName":"Save the client record for a site","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_transfer_code","description":"Creates a one-time link that hands a managed site to a departing client: they sign in or sign up and accept, and the site (and, by default, its domain) moves to their account. The link works once and expires at expires_at; creating a new one cancels the previous one. Signed-in accounts only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["site_key"],"properties":{"site_key":{"type":"string"},"include_domain":{"type":"boolean"}},"additionalProperties":false},"title":"Create a one-time site transfer link","logicalName":"create_transfer_code","displayName":"Create a one-time site transfer link","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"publish_staged","description":"Makes a site's staged changes (edit_section/set_theme with stage: true) live. The live page is saved as a version first, so this can be undone with restore_version. Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"site_key":{"type":"string"},"draft_token":{"type":"string"}},"additionalProperties":false},"title":"Make staged changes live","logicalName":"publish_staged","displayName":"Make staged changes live","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"discard_staged","description":"Drops a site's staged changes without touching the live site. Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"site_key":{"type":"string"},"draft_token":{"type":"string"}},"additionalProperties":false},"title":"Drop staged changes","logicalName":"discard_staged","displayName":"Drop staged changes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"set_theme","description":"Repaints the palette and fonts of an existing site across every section without touching its content or structure - the tool for make it warmer, darker, more corporate. At least one of palette_primary, palette_neutral, font_heading, font_body is required. Free, and no account is needed for a draft you created.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"stage":{"type":"boolean"},"site_key":{"type":"string"},"font_body":{"type":"string"},"draft_token":{"type":"string"},"favicon_url":{"type":"string"},"font_heading":{"type":"string"},"palette_neutral":{"type":"string"},"palette_primary":{"type":"string"}},"additionalProperties":false},"title":"Repaint a site's theme","logicalName":"set_theme","displayName":"Repaint a site's theme","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_preview_url","description":"Returns the shareable preview URL for a site, plus its expiry. The create tools already return this URL, so call this only when you need it again later. Free, and no account is needed for a draft you created. Drafts are kept for 7 days from creation.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"share_id":{"type":"string"},"site_key":{"type":"string"},"draft_token":{"type":"string"}},"additionalProperties":false},"title":"Get a site's preview URL","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_preview_url","displayName":"Get a site's preview URL"},{"name":"draft_create","description":"Mints an anonymous draft identity (a draft token) with no account and no sign-in. You usually do NOT need to call this first: create_site_from_brief and create_site_from_html mint one for you and return it. Use this only when you want the token before composing anything. Drafts are kept for 7 days from creation.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"name":{"type":"string"}},"additionalProperties":false},"title":"Create anonymous draft site","logicalName":"draft_create","displayName":"Create anonymous draft site","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"export_site_html","description":"Renders a site to a single self-contained HTML file. Paying customers only: requires a signed-in bearer token and an entitlement, so anonymous drafts do not export.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["site_key"],"properties":{"site_key":{"type":"string"}},"additionalProperties":false},"title":"Export a site to a self-contained HTML file","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"export_site_html","displayName":"Export a site to a self-contained HTML file"},{"name":"draft_claim","description":"Moves an anonymous draft onto the account of the signed-in user after they have authorized. Call this only once the user has said they want to keep the site - never before, and never as a precondition for building.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"draft_token":{"type":"string"}},"additionalProperties":false},"title":"Claim a draft into your account","logicalName":"draft_claim","displayName":"Claim a draft into your account","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"domain_search","description":"Checks availability and price for a domain, or for a bare name across a set of TLDs. Free and needs no account. Use it once the user wants their finished draft on a real address.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"tlds":{"type":"string"},"limit":{"type":"integer"},"query":{"type":"string"}},"additionalProperties":false},"title":"Domain search","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"domain_search","displayName":"Domain search"},{"name":"purchase_link","description":"Creates the one Stripe Checkout link that pays for a domain registration and saves the card of the customer, so every later purchase can happen inside this conversation. This is the only time the user leaves the chat - give them the returned URL. Reach for this only after they have asked to publish.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["domain"],"properties":{"domain":{"type":"string"}},"additionalProperties":false},"title":"Create payment link","logicalName":"purchase_link","displayName":"Create payment link","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"purchase_execute","description":"Charges the saved card of the customer immediately for a purchase they have explicitly agreed to in this conversation. Only call it after they have confirmed the exact item and amount in words - this tool moves real money right away.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["kind","item","consent_confirmed","consent_item","consent_amount_cents","consent_statement"],"properties":{"item":{"type":"string"},"kind":{"enum":["domain"],"type":"string"},"consent_item":{"type":"string"},"consent_confirmed":{"enum":["user_confirmed"],"type":"string"},"consent_statement":{"type":"string"},"consent_amount_cents":{"type":"integer"}},"additionalProperties":false},"title":"Charge the saved card","logicalName":"purchase_execute","displayName":"Charge the saved card","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"domain_register","description":"Completes registration for a domain the customer has ALREADY paid for. It never charges, and it never reports success it has not confirmed.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["domain"],"properties":{"domain":{"type":"string"}},"additionalProperties":false},"title":"Register a paid domain","logicalName":"domain_register","displayName":"Register a paid domain","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_client_checkout","description":"Creates a pay link (pay_url) for a business owner with NO Pagetool account: they pay by card (US cards only) a monthly subscription (default $25/month, or price_cents) that registers the domain, keeps it renewed and puts the site live on it automatically. If they cancel, or stay unpaid past the grace period, the site comes down. The link expires at expires_at. Signed-in accounts only. Free to create; it never charges you.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["site_key","domain"],"properties":{"domain":{"type":"string"},"dry_run":{"type":"boolean"},"interval":{"enum":["month","year"],"type":"string"},"site_key":{"type":"string"},"price_cents":{"type":"integer"},"business_name":{"type":"string"},"contact_email":{"type":"string"}},"additionalProperties":false},"title":"Create a client pay link","logicalName":"create_client_checkout","displayName":"Create a client pay link","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"cancel_client_checkout","description":"Retires a pay link that has NOT been paid (give code = the pcl_… part of pay_url, or site_key), so nobody can pay it. Nothing is charged. A link that was already paid cannot be cancelled here.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"code":{"type":"string"},"site_key":{"type":"string"}},"additionalProperties":false},"title":"Cancel an unused pay link","logicalName":"cancel_client_checkout","displayName":"Cancel an unused pay link","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rename_site","description":"Changes a site's display name (shown in list_sites and the dashboard). Plain text; HTML entities like &#39; are decoded. Max 120 characters. Signed-in accounts only. Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"name":{"type":"string"},"stage":{"type":"boolean"},"site_key":{"type":"string"},"page_title":{"type":"string"},"og_image_url":{"type":"string"},"page_description":{"type":"string"}},"additionalProperties":false},"title":"Rename a site","logicalName":"rename_site","displayName":"Rename a site","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"upsert_site_form","description":"Declares a built-in form on a site you own: its fields (text, email, textarea, checkbox, month, date, tel, select), the recipient email (kept on the server, never in the page), the button label and the thank-you message. Entries are saved and emailed from Pagetool, behind Turnstile, a honeypot, a minimum fill time, rate limits and field validation. Returns form_key and placeholder_html: put placeholder_html in the page HTML where the form should appear (replace_page_html, or stage then publish_s","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["site_key","name","recipient_email","fields"],"properties":{"name":{"type":"string"},"stage":{"type":"boolean"},"fields":{"type":"array","items":{"type":"object","additionalProperties":{}}},"classes":{"type":"object","additionalProperties":{}},"form_key":{"type":"string"},"site_key":{"type":"string"},"submit_label":{"type":"string"},"recipient_email":{"type":"string"},"success_message":{"type":"string"}},"additionalProperties":false},"title":"Add or update a form on a site","logicalName":"upsert_site_form","displayName":"Add or update a form on a site","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_form_submissions","description":"Lists the entries visitors sent through a site's built-in forms, newest first: the submitted fields, whether the notification email was sent, and when. Optional form_key narrows it to one form. limit defaults to 50 (max 200). No visitor IP data is returned. Test entries sent from a staged preview are left out unless include_preview is true. Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["site_key"],"properties":{"limit":{"type":"integer"},"form_key":{"type":"string"},"site_key":{"type":"string"},"include_preview":{"type":"boolean"}},"additionalProperties":false},"title":"List form entries for a site","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_form_submissions","displayName":"List form entries for a site"},{"name":"site_stats","description":"Page views and unique visitors per day for a published site, plus its top pages and the websites that sent visitors. Counted on the server with no cookies; search bots, previews and Pagetool's own checks are not counted. days defaults to 30 (max 90). Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"days":{"type":"integer"},"site_key":{"type":"string"}},"additionalProperties":false},"title":"Visits to a site","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"site_stats","displayName":"Visits to a site"},{"name":"publish_site","description":"Puts a finished site live on the domain the user has connected. publish_site takes no payment itself; it requires a signed-in account with the pagetool.sites.write scope and either an active plan or an open free trial. Everything before it - building, editing, theming, previewing - is free and account-free, so build first and come here only when the user says they want to keep the site.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["site_key","domain"],"properties":{"domain":{"type":"string"},"site_key":{"type":"string"}},"additionalProperties":false},"title":"Publish a site to a domain","logicalName":"publish_site","displayName":"Publish a site to a domain","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"payment_status","description":"Read-only, truthful status of the payments and domains of the customer - use it to tell them exactly where their money and their domain stand.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"domain":{"type":"string"}},"additionalProperties":false},"title":"Payment and domain status","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"payment_status","displayName":"Payment and domain status"},{"name":"whoami","description":"Reports who the caller currently is: an authenticated account, an anonymous draft holder, or nobody. Never errors on absent credentials. You do not need to call this before building - building needs no identity at all.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"draft_token":{"type":"string"}},"additionalProperties":false},"title":"Who am I","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"whoami","displayName":"Who am I"}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Weinerandballs&config=eyJ1cmwiOiAiaHR0cHM6Ly93ZWluZXJhbmRiYWxscy5jb20vYXBpL21jcCJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Weinerandballs%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fweinerandballs.com%2Fapi%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Weinerandballs%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fweinerandballs.com%2Fapi%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Weinerandballs&connectorUrl=https%3A%2F%2Fweinerandballs.com%2Fapi%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Weinerandballs\" --url \"https://weinerandballs.com/api/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/weinerandballs-mcp-dc5d3227f2","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/weinerandballs-mcp-dc5d3227f2/tools/{tool}","mcpServerUrl":"https://weinerandballs.com/api/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/weinerandballs-mcp-dc5d3227f2?live=1"}