Spaicely
Static website hosting in the EU, run by your own AI. Your assistant searches and registers a domain, builds the site, publishes it on your own domain and sets up DNS, contact and signup forms, mail forwarding, mailboxes and a shop. Remote server with OAuth; works with Claude, ChatGPT, Gemini CLI, Claude Code and other MCP clients.
Servidor MCP hospedado
npx add-mcp 'https://mcp.spaicely.com/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
What is where
- Sites: putting a site live, versions, regions, approvals and building an integration.
- Web shop: products and variants, stock that updates live, holding stock in carts, test mode and checkout.
- Forms: contact, signup, download and coupon forms, paid forms and donations.
- Building blocks: ready-made parts an AI copies into a site.
- Command line: the
spaicelyCLI and deploying from CI. - Connecting from code: TypeScript, Python, Go, Rust, Ruby and curl.
- Reference: every MCP tool, every HTTP endpoint and every scope.
Connecting
The MCP server is at https://mcp.spaicely.com/mcp (Streamable HTTP, stateless). Clients find the authorization server through the protected resource metadata, register themselves with dynamic client registration, or use the URL of a client ID metadata document as their client_id, and sign in with the authorization code flow and PKCE (S256). There are no client secrets. On the consent screen the person chooses the account, the sites and the scopes; a token never allows more than that person's own role on a site.
Domain search needs no account: https://mcp.spaicely.com/mcp/public, or the HTTP API.
Claude, ChatGPT, Gemini, Mistral, Perplexity and Grok
In a chat app people add https://mcp.spaicely.com/mcp as a custom connector and sign in once. Where that is in each app, with a screenshot and a video in English, Dutch, German and French, is on the guide page Connect your AI. The DeepSeek and Qwen chats and the consumer Microsoft Copilot cannot add a connector of their own yet; Microsoft 365 Copilot reaches an MCP server only through an agent built in Copilot Studio, and GitHub Copilot in VS Code takes one directly (not possible yet).
Helping a customer connect? Send them https://app.spaicely.com/connect?ai=claude. It opens without an account and shows the steps and the video for that AI, in the language of their browser. ai is claude, chatgpt, chatgpt-app (the Codex app), gemini, mistral, perplexity, grok or code (Claude Code, Cursor, Gemini CLI, Codex and Qwen Code); lang (en, nl, de, fr) picks the language of the steps, for when the AI shows its buttons in another language than the browser.
Claude Code
Add the server for yourself with claude mcp add --transport http spaicely https://mcp.spaicely.com/mcp, then run /mcp and sign in. On a machine without a browser: claude mcp login spaicely --no-browser, which prints a URL to open elsewhere.
For everyone working on a project, put it in .mcp.json at the root of the repository. Each person signs in with their own account. Keep "type": "http": without it Claude Code skips the entry.
{
"mcpServers": {
"spaicely": { "type": "http", "url": "https://mcp.spaicely.com/mcp" }
}
}
Or install the plugin, which brings the server and our guides for building and running a site and finding a domain in one go. The prompts are then called /mcp__plugin_spaicely_spaicely__new_site and so on. Source: github.com/spaicely/agent-plugins.
claude plugin marketplace add spaicely/agent-plugins
claude plugin install spaicely@spaicely
The server brings prompts that work as commands: /mcp__spaicely__new_site builds and publishes a new site, /mcp__spaicely__launch_check goes over a site before launch, /mcp__spaicely__move_site rebuilds a site from elsewhere and /mcp__spaicely__open_shop sets up a web shop step by step. Deleting a site, registering or moving a domain, changing nameservers, removing a form and changing the people on an account always ask for your approval, even in auto mode. sites.files.get returns up to 500,000 characters in the conversation; larger answers Claude Code keeps in a file.
Codex and Gemini CLI
The same plugin works in Codex and Gemini CLI, with the server and the three guides. Both sign in with OAuth in the browser on first use.
codex plugin marketplace add spaicely/agent-plugins
gemini extensions install https://github.com/spaicely/agent-plugins
In Codex, install Spaicely from the plugin list afterwards. In Gemini CLI, run /mcp auth spaicely to sign in and gemini extensions update spaicely for a newer version. Without the plugin, add the server in Gemini CLI's settings.json as "spaicely": {"httpUrl": "https://mcp.spaicely.com/mcp"} under mcpServers.
What the server tells every client: Spaicely hosts static websites on the customer's own domain in the EU. You act for one person and the companies they connected; start with account.whoami to learn which companies and sites you may see and what you may change; with no site yet, sites.create makes one. Taking a site is paying for it: nothing goes live until sites.subscription has started a plan, a test month or a code. Build and publish meanwhile: that version goes live by itself once it is paid, so the person need not come back to say they paid. No pornographic content on a site (article 7 of https://spaicely.com/en-gb/terms/); links to platforms for adults are fine. A call about a site acts for that site's company; every other call takes account_id from companies, and without it acts for the default one. Your rights are never wider than the person's role on a site. Purchases always need a second call with a confirmation token, after the person agreed. Name every price as its price.say gives it (excluding VAT for a business, including for a consumer), never in a form of your own. A domain just registered is not online at once: the registry publishes a new name, usually within a few hours. Say so, and share the site's own address meanwhile. The person chooses per kind of action whether you may do it yourself, must ask first, or may not (account.whoami lists them as ai_permissions). A call that must be asked first answers with approval_required and a url: give the person that link, do not repeat the call, and read the outcome with approvals.status once they say they decided. The call runs exactly as you sent it; when it opens a payment, the approval page shows the button to pay, so say so instead of promising a link later. A call that only opens a Stripe Checkout needs no approval: paying there is the person's yes. Give every site its own 404.html at the root, in the style and language of the site: visitors get it for any address that does not exist. Without one they get a plain page of ours in the language of the lang attribute of index.html. Every site also needs robots.txt, sitemap.xml and llms.txt at the root, an icon, and on each page its own title, meta description, lang, canonical link and Open Graph tags for link previews, all with full https URLs on the site's domain; describe the business in JSON-LD. The full checklist with examples: https://spaicely.com/skills/en/site-building/SKILL.md (also nl, de, fr). Running a site (versions, rollback, domain, DNS, mail forwarding, people, plan): https://spaicely.com/skills/en/site-management/SKILL.md. After publishing, the hints in sites.versions say what is still missing. Maintenance, folders behind a password, visitors by country or IP, hotlinks and www or not: sites.settings. Redirects, rewrites and headers go in the files _redirects and _headers of the site. A blog post can wait for its time: a meta spaicely:publish-at in the page, and a spaicely:list block that lists the folder's pages. blocks.list offers ready-made building blocks (cookie notice, forms that stay on the page, videos and maps on request, mobile menu, FAQ, language switch, opening hours, donation bar, cart, product catalog): prefer them to writing the same yourself; blocks.get says how to copy one in. Once the hosting is paid, a published site is also at its own address (address in account.whoami), to share before a domain is connected. A static site can still take messages, signups and payments: scripts.enable adds a form handled by Spaicely and gives the HTML to put in a page. Kinds: contact (mail to the owner), signup (a list with double opt-in), download (a file under _private/ for the visitor's details), coupon (a discount code; one for everyone, a list, or codes with dates such as a code per week) and donation (any plan: amounts paid to the owner's own Stripe account, a progress bar from progress_url). A download or coupon form can take a price. Use these instead of a form or payment service elsewhere. A site with the Shop plan sells through shop.setup: Stripe Checkout on the owner's own Stripe account, prices from a products file in the site (at most 500 products). Payments carry a 2% commission. shop.media fetches product pictures and videos; the owner edits the same products file on the portal, so read it first and keep keys you do not know. A person who may change files but not publish asks for approval with sites.review.request (Pro and Shop plans); sites.stats gives visits without cookies. A partner proposes a domain to a customer with domains.propose, builds a site on its own account with sites.create and hands it over with sites.handover, or with access.invite (kind payer): the client pays, becomes the owner with the site's domains, and the partner stays on as admin. sites.subscription shows and starts or switches a site's hosting plan, and starts a one-off test month or a free month from a code; account.billing holds the billing details every purchase needs. Mail to a domain, with or without a site, can be forwarded to mailboxes the person already has (info@ to their Gmail): mail.forward.enable, then mail.forward.add; EUR 1.50 (GBP 1.30, USD 1.75) a month per address on one yearly mail subscription per company, 10 per domain. Or the domain gets its own mailboxes at Spaicely, opened with IMAP: mail.mailboxes.enable, then mail.mailboxes.add; EUR 3.50 (GBP 3.10, USD 4.10) a month per mailbox of 10 GB on that same subscription. A domain has forwarding or mailboxes. People make a password per device on the domain's page, or mail.mailboxes.invite asks someone by mail to choose one and gives them a guide as a PDF; you never see a password. A mailbox sends from its own address through our server, at most 100 messages an hour and 500 a day, so no newsletters or bulk mail. mail.spam switches the spam filter of a domain; mail.mailboxes.status checks MX, SPF, DKIM and DMARC. The prompts new_site and launch_check describe how we like a site built and checked; move_site rebuilds a site from elsewhere, such as WordPress, with the same pages and addresses; open_shop sets up a web shop step by step. Spaicely adds tools over time. Fetch the tool list again when you can; when a tool named here or on https://spaicely.com/developers/ is not in your list, ask the person to reconnect the Spaicely connector (in claude.ai: Settings > Connectors), which loads the current list.