Connect your AI model to Prospia Sites
Prospia Sites hosts your landing pages, blog and news with the SEO work done for you: pages rendered on the server, sitemap, robots.txt, llms.txt, RSS, structured data (JSON-LD) and 301 redirects when a URL changes.
You can edit and publish all of it from the AI assistant you already use (Claude, ChatGPT, Cursor or any client that speaks the Model Context Protocol, MCP). The assistant writes; Prospia Sites stores every version, shows you a preview and publishes only when you say so.
1. Add the connector
Connector URL: https://prospia.ai/mcp/sites
Transport: Streamable HTTP. Authentication: OAuth 2.1 with your Prospia account. There is no token to copy: your client opens the Prospia sign-in, then a permissions screen where you choose what the assistant may do (read, edit drafts, publish, spend AI credits). Publishing, rollback and domains are only for the organization owner or an admin. You can review or revoke the connection any time in Prospia (Settings > Connected apps).
The same guide, with your organization’s details, is in Prospia under Content > Sites > Connect a model.
2. Pick your client
claude.ai and the Claude apps
- Settings > Connectors > Add custom connector.
- Paste
https://prospia.ai/mcp/sitesand save. - Click Connect, sign in to Prospia and approve the permissions.
ChatGPT
- Settings > Connectors: create a connector with
https://prospia.ai/mcp/sites(on some plans, turn developer mode on first). - Pick OAuth authentication, sign in to Prospia and approve the permissions.
Claude Code
claude mcp add --transport http prospia-sites https://prospia.ai/mcp/sites
Cursor, VS Code and other clients with a JSON config
{
"mcpServers": {
"prospia-sites": { "type": "http", "url": "https://prospia.ai/mcp/sites" }
}
}
The client signs in through OAuth on the first call.
3. Ask for what you want
Examples you can paste:
- “List my sites and show the last five blog posts of the main one.”
- “Write a draft article about choosing SAE 1045 steel, 900 words, with an FAQ of three questions. Show me the preview link before publishing.”
- “Change the title of the steel weights article to something with a clearer benefit, save it as a draft and compare it with the live version.”
- “Publish it.” / “That was a mistake, put the previous version back.”
- “Create a landing page for our October promotion with a hero, three benefits, an FAQ and a button to https://example.com/offer."
How publishing works
- Every change is saved as a new draft revision. The live page does not change.
preview_linkgives a private link (it expires) that shows the draft exactly as the public page will look. Search engines never index it.content_publishputs a revision live. The whole site is regenerated (page, indexes, sitemap, feeds, llms.txt) and switches to the new version at once.content_rollbackputs an older revision back live. Nothing is ever lost:revision_listandrevision_diffshow the history.- If you change the address (slug) of a published page, the old address keeps working with a permanent redirect.
- Your published site never changes because we upgraded Prospia Sites. Each published version carries everything it needs (fonts, scripts, icons) and keeps working as it is. When a newer look is available,
site_look_statussays so,site_look_previewshows the whole site with it (nothing is published) andsite_look_applyputs it live once you agree. Your next publication also moves the site to the newer look, since previews always show it.
Tools
Every tool takes site: the site’s id or its short name (site_list shows both). With a single site you can leave it out. Tools act on your active Prospia organization; pass org (id or exact name) to act on another one you belong to.
| Tool | What it does |
|---|---|
getting_started |
The short version of the flow and the index of the builder guide. Needs no permission: call it first |
sites_guide |
The builder guide, by topic: how the platform works, site design, every block with its fields and limits, recipes (personal site, SaaS, local business, lead capture, blog, several languages), copy, images, SEO and languages, links, common mistakes and credits. Free, needs no permission |
site_list, site_get |
Your sites, their address, domains and sitemap |
site_create, site_update |
Create a site on <name>.sites.prospia.ai; change its name, language, branding, kind (organization or person), home page, favicon (plans with a custom favicon) and analytics and ad tags (GA4 and Umami on every plan; Tag Manager, Google Ads, Meta Pixel, LinkedIn and Clarity on paid plans; tags that set cookies load only after the visitor accepts the cookie banner, Umami is cookieless and loads at once). site_update saves a draft of the settings: the public site does not change until you publish them |
site_preview_link, site_settings_diff |
Private, expiring preview of the whole site with the draft settings, and what changed compared with the live site |
site_settings_publish, site_settings_discard |
Put the draft settings live (the site is rebuilt at once), or throw the draft away |
site_settings_revisions, site_settings_rollback |
Settings history, and putting an older version back live |
site_look_status, site_look_preview, site_look_apply |
Whether a newer look is available for your live site, a private preview of the whole site with it, and applying it (only when you say so) |
site_plan_status |
Your plan limits for Sites and the credits spent by the AI |
landing_*, blog_*, news_*, page_* |
By type: _list, _get, _create_draft, _update (a new draft revision; send baseRevision so you never overwrite someone else’s edit), _publish, _unpublish, _delete. blog_* and news_* accept the argument names of BuscaMetal’s editorial tools (content, summary, featuredImage, ogTitle), for routines written for them |
preview_link |
Private, expiring preview of the latest draft |
content_publish |
Puts the latest draft (or a given revision) of any page live |
content_rollback |
Puts an older revision back live |
revision_list, revision_diff |
History and a field-by-field comparison |
media_upload |
Store an image from an https URL or base64; you get the share-card size (1200x630) and responsive sizes |
domain_list, domain_add, domain_check |
Use your own domain: add it, create the DNS records shown (ownership and routing), then check (and make it primary) |
site_delete |
Delete a site for good, with its pages, images and domains. Ask for the export first (site_export_link) and send the site’s exact name as confirmName. Only the owner or an admin |
content_generate_landing, content_generate_block, content_generate_article, content_generate_image |
AI writing and images, saved as drafts. They spend your organization’s AI credits; the answer shows how many |
content_generate_favicon, content_generate_share_image, image_suggest_description |
AI site icon (into the settings draft; plans with a custom favicon), AI default share image, and a suggested description to draw an image from. They spend credits |
Landing pages
A landing page is a list of blocks, in order (at most 40). The set of blocks is fixed on purpose (there is no free layout). Each tool exposes the exact JSON Schema of every block; fields marked “required” must be present, and the limits are in characters:
| Block | Required | Optional |
|---|---|---|
hero |
heading (200) |
subheading (300), body (2000, inline markdown), ctaLabel (60) together with ctaUrl (link), imageMediaId with imageAlt (200), or avatarMediaId with avatarAlt (200) and avatarSize (small, medium), socialLinks (up to 8) or showSocialLinks |
features, benefits |
items (1 to 30): {title (200)} |
heading (200), intro (2000, inline markdown: [text](link), **bold**); per item text (2000), linkUrl (link), linkLabel (60, needs linkUrl; defaults to “Learn more” in the site language), links: [{label (60), url}] (at most 3 links per item, linkUrl included) |
faq |
items (1 to 30): {question (300), answer (2000)} |
heading (200) |
cta |
heading (200), buttonLabel (60), buttonUrl (link) |
text (2000), style (banner, card), imageMediaId with imageAlt (card only), imagePosition (left, right), buttonStyle (primary, outline) |
testimonials |
items (1 to 30): {quote (2000), author (100)} |
heading (200); per item role (100) |
text |
markdown (20000) |
heading (200) |
image |
mediaId, alt (200) |
caption (300) |
form |
formId, purpose (300), then privacyUrl or controllerName + controllerEmail |
heading, intro, fields (optional built-ins: phone, company, cnpj, role, message, city), required, customFields: [{key, label, kind, required, options}], submitLabel, successMessage, termsUrl. Name, e-mail and the consent checkbox are always there. Forms depend on your Prospia plan; leads arrive in Prospia |
Eyebrows. Every block also takes an optional eyebrow (up to 40 characters): a small uppercase label shown above the section title (“Products”, “Series”).
Hero with a portrait. Besides subheading and the button, a hero takes body (a paragraph, inline markdown; with it the subheading reads as a role line), avatarMediaId + avatarAlt (a round portrait beside the text instead of the picture, avatarSize small or medium) and social buttons: socialLinks: [{label, url}] or showSocialLinks: true for the site’s own profiles. Each button gets the brand icon of its URL (X, LinkedIn, GitHub, Instagram, YouTube, Mastodon, mailto: for e-mail, a globe for any other site).
Call to action as a card. A cta with style: "card" is a tinted card with an accent border instead of the solid banner, with an optional imageMediaId + imageAlt beside the text (imagePosition left or right). buttonStyle is primary or outline.
Anchors. Every block takes an optional anchorId (produtos: lowercase letters, digits and hyphens, unique in the page), rendered as the id of its section. Link to it with #produtos from the same page, content:<id>#produtos from anywhere, or #produtos in the menu (the menu sends it to the home page).
Links. Every link field (and every link inside markdown) accepts an absolute https:// URL, a path of the site (/contact), an anchor (#form-contact), mailto:, tel: or content:<id>, the id of another page of the same site. Prefer content:<id> or /path for links between your own pages: they are resolved when the site is rendered, so they keep working after a slug change, on a custom domain and inside previews (a draft preview opens the drafts of the pages it links to).
Errors. Nothing you send is dropped silently. An unknown field, a value over its limit, a missing required field or an invalid link comes back as an error that names the field, for example blocks[2].color: unknown_field or blocks[0].subheading: too_long, and nothing is saved.
Share image. Each page can have its own share image (ogMediaId). Otherwise the share image is the cover, then the site’s default share image, then (landings) the hero or first image, then a generated card with the title.
Languages. A page in another language is a separate page with locale (for example en) and translationOf (the id of the original). On the same site it is served under the language prefix: /en/<slug>, and the translation of the home page at /en. The original can also live on another site of the same organization (one site per language or domain). Every published version lists the others as hreflang alternates (with x-default pointing at the original), in the page head and in the sitemap, the page gets its own <html lang>, og:locale (in the en_US form) and structured data language, and the header shows a small language switcher. A page has one translation per language on a site: creating a second one answers translation_exists with the id and slug of the one that exists. Translations across organizations are refused.
Slugs are unique per language, so a translation may keep the original’s slug (/infra-com-ia and /en/infra-com-ia). Previews show the language switcher and the hreflang links too, pointing to the other languages inside the preview.
Custom domains. A domain needs two things, checked apart. Ownership: one TXT record _prospia-sites.<your domain> (for example _prospia-sites.acme.com.br) with the value shown. It proves the domain is yours once for the whole organization: www, blog and any other address under it are covered, on any of your sites. A TXT record at the exact address (_prospia-sites.blog.acme.com.br) also works. Keep the record in place; it is checked again when you add an address. Routing: for an address like www.acme.com.br or blog.acme.com.br, a CNAME to sites.prospia.ai; for the domain itself (acme.com.br, which cannot have a CNAME), the A and AAAA records with the addresses shown, or an ALIAS/ANAME record to sites.prospia.ai if your DNS provider has one. When you add the domain itself, add www too: it redirects to the main address. Removing a domain and adding it again keeps the same TXT value.
Analytics with Umami. Besides Google Analytics, a site can use Umami, a privacy-friendly analytics tool that sets no cookies: give the script URL (umamiScriptUrl, for example https://cloud.umami.is/script.js or your own server) and the website id (umamiWebsiteId). Umami works on every plan and loads without waiting for the cookie banner; a site whose only tool is Umami shows no banner at all. A form sent through the site counts as the generate_lead event. Host your own Umami on Quave ONE: create an app with the official image ghcr.io/umami-software/umami:postgresql-latest, add a Postgres database and set DATABASE_URL and APP_SECRET, open the app, change the admin password, add your site and copy its script URL and website id here.
Site settings. Besides colors (primaryColor, accentColor, backgroundColor, textColor) and the font, a site has a header menu (navLinks, up to 8 links of label and link), social profiles (socialLinks, used as sameAs in the structured data) and, on a personal site, a job title (jobTitle, the Person’s jobTitle). locales holds a version of the menu, header button, footer and job title per language ({"en": {"navLinks": [...], "footerText": "...", "jobTitle": "..."}}): pages in English show it, and a menu link content:<id> opens the English translation of that page when there is one. Settings are saved as a draft and go live with site_settings_publish.
Design. fontPairing picks heading and body fonts, served from your own site (no font service): classic-serif (a serif display over the system font), editorial, modern, book, or system. colorScheme is light (default), dark or auto (follows the visitor’s system setting, no JavaScript needed); the dark colors are derived from yours with accessible contrast, or set them with darkPrimaryColor, darkAccentColor, darkBackgroundColor and darkTextColor. themeToggle: true adds a light/dark button to the header that remembers the visitor’s choice. headerMark: "monogram" shows your logo, or your initials on a colored circle (monogram to choose the letters). languageSwitcher: "compact" shows the current language code (PT, EN) in a small pill that opens the list. footerBadges (up to 4) are small linked logos in the footer, such as “Hosted on Quave ONE”: a built-in mark (quave-one, prospia-sites) or one of your images (mediaId, alt, url, optional darkMediaId); locales can carry them with labels in each language. site_get lists the plan flags (planFlags) with what each one does; they follow your plan.
Example landing_create_draft arguments:
{
"site": "acme",
"title": "October offer",
"description": "Steel bars with free delivery in October for orders above 500 kg, quoted in one hour.",
"blocks": [
{ "type": "hero", "heading": "Free delivery in October", "subheading": "Orders above 500 kg", "ctaLabel": "Get a quote", "ctaUrl": "https://example.com/quote" },
{ "type": "benefits", "items": [ { "title": "Quote in one hour" }, { "title": "Mill certificate included" } ] },
{ "type": "faq", "items": [ { "question": "Which cities?", "answer": "Every city in the state." } ] },
{ "type": "cta", "heading": "Ready?", "buttonLabel": "Get a quote", "buttonUrl": "https://example.com/quote" }
]
}
Articles and news
The body is markdown. The title is the page’s only H1, so start sections at ##. A section called “FAQ” (or “Perguntas frequentes”) with bold questions becomes FAQ structured data; you can also send faq as a list. News items take sourceName and sourceUrl.
What the platform does for you
- HTML rendered on the server for every visitor and search engine, with canonical URL, Open Graph and Twitter cards, and JSON-LD (Organization, or Person on a personal site, WebSite, BlogPosting or NewsArticle, FAQPage, BreadcrumbList).
- A share image for every page: the page’s own share image, the cover, the site default or the hero image, else a 1200x630 card with the page title and the site name in your colors.
- Heading anchors for every section (
#registrar-dominiofor “Registrar domínio”: accents are transliterated). - Images keep their format: PNG stays lossless (diagrams, screenshots and text stay sharp), photos are served as JPEG. A share image uploaded as PNG (a 1200x630 card, for example) is shared as PNG; large photos become a small JPEG.
- Favicons (
/favicon.ico,/favicon.svg,/apple-touch-icon.png, a web manifest): the Prospia Sites icon, or your own on plans with a custom favicon (upload a square PNG, 512x512 recommended). - The home page: the page you choose; with no choice and a single landing page, that landing is the home; otherwise an index of your pages and posts.
sitemap.xmlwith every page (a sitemap index when the site grows),robots.txt,llms.txtandllms-full.txt, RSS feeds.- Permanent redirects from old addresses.
- SEO advice on every save (
issues): title and description length, missing cover image or alt text, thin articles.
For developers
Prospia’s servers talk to this service through a signed JSON API: OpenAPI document. The service also has its own MCP endpoint at https://sites.prospia.ai/mcp for internal tests, authenticated with organization tokens issued by Prospia; customers use the Prospia connector above.