---
title: AI Website & Landing Page Builder MCP Server | 8B
description: Free AI website builder MCP server with no account or credits: Claude, ChatGPT, Cursor or Codex creates a new landing page in chat and gives you the HTML.
canonical: https://8b.com/mcp/
updated: 2026-10-01
publisher: 8b Tech Ltd (https://8b.com)
---

# 8B AI website builder MCP server.

> 8B is an AI website builder. Its free MCP server, `https://mcp.8b.com/mcp`, lets Claude, ChatGPT, Cursor, Codex and other AI assistants create a new website or landing page from scratch, right in the chat: a finished 8B design with texts, colors and photos written for the business, a preview, edits in plain words and one HTML file to download. No account, sign-in, API key or credits.

**Status, checked 2026-10-01:** the server is live at `https://mcp.8b.com/mcp` (version 0.3.0, Streamable HTTP, no authentication). We have tested it in Claude (web), ChatGPT (developer mode) and Claude Code; the other clients below follow their vendors' documentation read on 2026-10-01. The Claude and ChatGPT directory listings are in review.

Canonical: https://8b.com/mcp/

## At a glance

- **What it is:** 8B (https://8b.com) is an AI website builder run by 8b Tech Ltd. "8B" is the product name, not an AI model size. `mcp.8b.com` is this MCP server and the preview host; `ai.8b.com` is 8B's web builder, which the Sign Up button on 8b.com opens. The MCP server needs no account. It creates the site; it does not host or publish it: you get one HTML file for any host, with no visible 8B branding. [Examples](#examples) of the designs.
- **Use it when:** someone asks for a new website, landing page or homepage for a small business, studio, shop (without online checkout), event, project or person, and wants to see it within minutes, change it in words and take the finished file.
- **Do not use it when:** you need a web app with accounts, a database or a checkout, several pages or a CMS, your own photos and logo built in, publishing to a domain from the chat, or changes to a site that already exists elsewhere.
- **Terms in short:** free; the downloaded site can be used and edited for any site, including commercial and client work, but not resold as a template or theme; no credit required. The server keeps the values you send and the preview for 90 days after it was built or last downloaded, uses them for nothing else and runs no AI model. Run by 8b Tech Ltd; listed in the official MCP Registry; the Claude and ChatGPT directory reviews are pending. Details: [License](#license), [Privacy and data](#privacy), [Who runs it](#about).
- **What the human does:** adds 8B once (a link, a command or a few settings, below) and says what the site is for. The assistant chooses the design, writes the texts, picks the colors and fonts and writes the photo searches.
- **Next step:** find your client in [Connect your client](#connect), then ask: "Make a website for my bakery Crumb in Lisbon in 8B."

## Connect your client

One server for every client: `https://mcp.8b.com/mcp`, transport Streamable HTTP, no authentication. "Card" means the chat shows a preview card (through the MCP Apps extension): a thumbnail of the first screen, and **Open preview** shows the full animated site full screen in the chat (a client without a full-screen view opens the preview link in the browser). Elsewhere the assistant gives you the preview link. "Tested by us" says whether we ran it ourselves or followed the vendor's documentation: a client is marked tested only after we built a site in it, and the table is updated as we test more. In ChatGPT, developer mode is the setting that lets you add an MCP server that is not in the ChatGPT directory; once 8B is approved there, it is not needed.

| Client | How to connect | Plan | Card | Tested by us | Guide |
|---|---|---|---|---|---|
| Claude (web, desktop, mobile) | [Add to Claude](https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=8B%20AI%20Website%20Builder&connectorUrl=https%3A%2F%2Fmcp.8b.com%2Fmcp), or Customize > Connectors > Add custom connector | Free (one custom connector), Pro, Max, Team, Enterprise | Yes | Yes, on the web | [Claude](https://8b.com/mcp/claude.html) |
| ChatGPT | Settings > Security and login > Developer mode, then Plugins > + with the server URL, No Authentication | Plus, Pro, Business, Enterprise, Education (web) | Yes | Yes, developer mode | [ChatGPT](https://8b.com/mcp/chatgpt.html) |
| Claude Code | `claude mcp add --transport http 8b https://mcp.8b.com/mcp` | Any | No, link | Yes | [Claude Code](https://8b.com/mcp/claude-code.html) |
| Cursor | [Add to Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=8b&config=eyJ1cmwiOiJodHRwczovL21jcC44Yi5jb20vbWNwIn0=) (Cursor asks to confirm), or `.cursor/mcp.json` | Any | Expected, per docs | No, vendor docs | [Cursor](https://8b.com/mcp/cursor.html) |
| VS Code with GitHub Copilot | [Install in VS Code](vscode:mcp/install?%7B%22name%22%3A%228b%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.8b.com%2Fmcp%22%7D) (VS Code asks to confirm), or `.vscode/mcp.json` | all GitHub Copilot plans, including Free; on Business and Enterprise the "MCP servers in Copilot" policy must be on | Expected, per docs | No, vendor docs | [VS Code](https://8b.com/mcp/vscode.html) |
| OpenAI Codex | `codex mcp add 8b --url https://mcp.8b.com/mcp` | Any | No, link | No, vendor docs | [Codex](https://8b.com/mcp/codex.html) |
| Gemini CLI | `gemini mcp add --transport http 8b https://mcp.8b.com/mcp` | Any | No, link | No, vendor docs | [Gemini CLI](https://8b.com/mcp/other-clients.html#gemini-cli) |
| Goose | [Add to Goose](goose://extension?url=https%3A%2F%2Fmcp.8b.com%2Fmcp&type=streamable_http&id=8b&name=8B%20AI%20Website%20Builder&description=Build%20websites%20with%208B) | Any | Expected, per docs | No, vendor docs | [Goose](https://8b.com/mcp/other-clients.html#goose) |
| Devin Desktop (Windsurf), Kiro, Zed, Cline, Amp, OpenCode, Continue, JetBrains AI Assistant, LM Studio | A config entry with the server URL | Any | No, link | No, vendor docs | [Other clients](https://8b.com/mcp/other-clients.html) |
| Mistral Le Chat (Vibe), Perplexity, Microsoft 365 Copilot | A custom connector with the server URL | Le Chat: every plan, added by the account owner or admin. Microsoft 365: an admin adds it. Perplexity: see the guide | No, link (Microsoft 365: unknown) | No, vendor docs | [Other clients](https://8b.com/mcp/other-clients.html#chat-apps) |
| Lovable, Bolt, Base44, v0, Replit | A custom MCP connector with the server URL | Lovable: every plan. Base44: Builder and up. Others: see the guide | No, link | No, vendor docs | [AI app builders](https://8b.com/mcp/ai-app-builders.html) |

Any other MCP client: add a remote server with the URL `https://mcp.8b.com/mcp`, transport Streamable HTTP (some clients say "HTTP"), no authentication. Most clients that take JSON use this shape. These differ, see their guides: VS Code (`servers`, `type: "http"`), Claude Code (`type: "http"`), Gemini CLI (`httpUrl`), Devin Desktop (`serverUrl`), Zed (`context_servers`), Cline (`type: "streamableHttp"`) and OpenCode (`mcp`, `type: "remote"`); Goose and Continue use YAML, Codex uses TOML. Name the server `8b` everywhere:

mcp.json:

```json
{
  "mcpServers": {
    "8b": {
      "url": "https://mcp.8b.com/mcp"
    }
  }
}
```

- The server is stateless at the protocol level: there is no MCP session id to keep between calls (previews are stored on the server). MCP protocol versions accepted by our SDK: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 and 2024-10-07. The older HTTP+SSE transport is not supported.
- Health check: `GET https://mcp.8b.com/` answers 200 with a short page that says `Status: OK`. A first real call is `explore_designs` (read-only, about 6,000 tokens).
- After connecting, the client should list three tools: `explore_designs`, `get_design_brief`, `generate_site`. The server calls itself `8b`, title "8B AI Website Builder".

## What happens when you ask

A request like "Make a website for my bakery in 8B" uses three tools, and `generate_site` again for each change. Our server runs no AI model: your assistant writes the content, and the server puts it into the design.

1. `explore_designs`: the assistant reads the 8B generated designs (look, sections from top to bottom, kinds of business each fits) and picks one on its own, usually saying which look it chose. Designs are not tied to their sample business: if none names yours, the assistant picks the closest look and structure. Every section of a design stays on the page, so it also checks the sections listed in `summary`. A different design later means writing the site again.
2. `get_design_brief` with the site's language code (`pl`, `de`, `en`; see [language codes](#languages)): every text field with a hint and a length limit (166 to 276 fields per design), the palette with the role of each color, the fonts and the photo slots (10 to 33 per design), plus `how_to_fill`, the rules for writing them.
3. The assistant writes the texts, picks colors and fonts and writes one search query per kind of photo. On large models this takes a few minutes. It is ordinary use of your Claude, ChatGPT or other plan: 8B adds no fees, credits or tokens of its own.
4. `generate_site`: the server fills the design, finds the photos on Unsplash and builds the site in about 3 seconds (our timing on production, 2026-09-30).
5. You see a card in the chat: a thumbnail of the first screen, with **Open preview**, which shows the full animated site full screen. Clients without cards give the preview link.
6. Changes in plain words ("warmer colors", "another headline") send only the changed values, so the server rebuilds the site in about a second.
7. You download the site as one HTML file.

## The finished site

### Examples

Every site is one of the 8B generated designs, filled with the user's business. Some of the designs as they appear with their sample businesses (all made up): [a bakery](https://8b.com/demos/bakery.html), [a business advisory firm](https://8b.com/demos/business-advisory.html), [a dance studio](https://8b.com/demos/dance-studio.html), [an architecture studio](https://8b.com/demos/architect-homes.html), [a design school](https://8b.com/demos/design-school.html). More on [8b.com](https://8b.com/). A site built through the server looks the same, with the user's texts, colors, fonts and photos.

The designs are made for food and drink (cafés, bakeries, pizzerias), professional services (law, accounting, consulting, insurance), creative studios and agencies, schools and classes (dance, yoga, music, languages, courses), festivals and events, fashion and craft brands, travel and rentals, sports and fitness clubs, software and online services, media and nonprofits, and furniture and home makers. A business not on the list takes the closest look: in our tests, a dental clinic was built on a clean professional-services design.

### What you get

- **In the chat:** a card with a thumbnail of the first screen, **Open preview**, which shows the full animated site full screen, and **Download site**.
- **Preview page:** `https://mcp.8b.com/p/<id>` with a Download site button, for clients without cards and for sharing. Anyone with the link can open it.
- **The file:** one HTML file, 66 to 108 KB of HTML, photos not included. It loads images.unsplash.com (photos), cdn.jsdelivr.net (GSAP, ScrollTrigger, Lenis), fonts.googleapis.com and fonts.gstatic.com (fonts), so it needs an internet connection and works on any static host, in any folder.
- **Layout:** one long page with sections such as the hero, about, services, team, prices, FAQ and contact; the menu scrolls within the page. Sections cannot be added or removed yet.
- **Phones:** every design has a phone layout (viewport meta and media queries).
- **Search engines:** the page title and meta description are fields the assistant writes; no Open Graph tags and no analytics or tracking scripts (the files it loads are listed below); the page's `<html lang>` is set from `language`.
- **Forms:** contact and newsletter forms are visual: they show a thank-you message and send nothing. To receive messages, point the form at a form service after you download the file.
- **Photos:** from Unsplash, searched by our server from the queries the AI writes, under the [Unsplash License](https://unsplash.com/license). Your own photos and logo cannot be sent through the tools yet: replace the image addresses and the text logo in the downloaded file.
- **Links:** phone and email links (tel:, mailto:) follow the phone and email fields; buttons such as "Call us" take the site's phone and email. While a phone or email field holds no usable number or address, such as a placeholder (`[phone]`, `[telefon]`) or an empty string, its links lead nowhere (`#`) instead of to the sample's number. Buttons and the menu link within the page. Social network links in some designs point to the network's home page until you edit them in the downloaded file; links to other sites, such as a booking page, cannot be set through the tools.
- **Image text:** the `alt` you send becomes the photo's alt text in the file. Without one, a new photo gets Unsplash's English description; a photo you do not replace keeps the design's alt text.
- **Motion:** every design switches its animations off for visitors who ask for reduced motion.
- **Credit:** an HTML comment at the top and the bottom of the file credits 8B; nothing visible on the page.
- **Colors** change per palette color: if the buttons share their color with other elements, those change too.
- **Languages:** sites have been built and checked in English, Russian and Polish; other languages are written the same way. Word limits are raised for languages with long words ([language codes](#languages)); for scripts other than Latin and Cyrillic, the assistant chooses fonts with the needed letters. Right-to-left languages (Arabic, Hebrew): the text runs right to left, but the page layout, such as the side of the menu and the order of columns, stays as in the design.
- You can edit the downloaded file by hand. It cannot be loaded back into 8B; keep editing through the tools while the preview exists.

### Putting the site online

1. Download the file and rename it `index.html`.
2. Upload it to any static host: drag it into Netlify Drop, or use Cloudflare Pages, GitHub Pages or your own hosting.
3. Point your domain at the host, following the host's instructions.
4. To receive form messages, set the form's `action` to a form service's address and remove the page script's submit handler, which only shows the thank-you message. A coding agent can do this step.

### What the file loads, and under which licenses

| Asset | Loaded from | License |
|---|---|---|
| Photos | `images.unsplash.com`, linked, not embedded | [Unsplash License](https://unsplash.com/license) |
| Fonts | `fonts.googleapis.com`, `fonts.gstatic.com` | Open font licenses, mostly SIL OFL; see [Google Fonts licensing](https://developers.google.com/fonts/faq) |
| GSAP, ScrollTrigger | `cdn.jsdelivr.net` | [GSAP Standard License](https://gsap.com/standard-license) |
| Lenis | `cdn.jsdelivr.net` | MIT |

Visitors' browsers contact these hosts when they open the site. If that matters for you (for example under GDPR), host the fonts, scripts and photos yourself after downloading.

## Cost, speed and limits

|  | Value |
|---|---|
| `explore_designs` result | about 21,000 characters (about 6,000 tokens) |
| `get_design_brief` result | 29,000 to 45,000 characters (about 8,000 to 13,000 tokens), depending on the design |
| `generate_site` result | under 1,000 characters: ids and links, never the HTML |
| Read calls | about 1 second (measured 2026-10-01) |
| Build | about 3 seconds with photos (measured 2026-09-30) |
| Edit | about a second on the server (measured 2026-09-30) |
| Writing by the assistant | a few minutes on large models, the longest step |
| Rate limits | we set none, per IP or overall; photo search shares an Unsplash allowance of 5,000 requests an hour |
| Preview lifetime | 90 days after it was built or last downloaded |
| Price | Free: no account, no API key, no credits. 8B Pro is a separate plan of the web builder at ai.8b.com (see the FAQ) |

## 8B or something else

| Option | Good for | You get |
|---|---|---|
| 8B MCP server | A new one-page site from inside the chat, in minutes, at no cost | A finished animated design, live preview, edits in words, one HTML file |
| Asking the assistant to write HTML | Anything you can describe, or code inside your project | Code whose look depends on the prompt; a preview only where the client renders HTML |
| 8B web builder at ai.8b.com | A new design composed from your prompt, an editor, publishing | A site in your 8B account; publishing on 8B Pro |
| Hosted site builders | Hosting, a domain, an online shop, an editor | A site on their platform, on their plans |
| AI app builders | Apps with accounts, data and logic | A code project in their workspace, on their plans |

## License

- The texts and photo searches you write belong to you.
- The design code in the downloaded file can be used for any site, including commercial ones and client work, and can be edited. It cannot be resold or distributed as a template or theme.
- No credit is required: the "Made with 8B" comment can be left in or removed.
- Designs are not exclusive: other users can generate sites and get a similar design, with their own texts, colors, fonts and photos.
- Photos, fonts and scripts the file loads keep their own licenses: see [what the file loads](#third-party).
- Terms of use of 8B: [8b.com/tos.html](https://8b.com/tos.html).

## Privacy and data

- The MCP server needs no account or API key and sets no cookies. (This documentation page uses Google Tag Manager, like the rest of 8b.com.)
- What the server receives: no arguments with `explore_designs`; the design id and language with `get_design_brief`; every value your assistant sends with `generate_site` (site name, language, texts, colors, fonts, photo queries and descriptions, the base preview id). Like any web service it also sees the connecting IP address (for hosted assistants such as claude.ai, the platform's) and the client's name. Never your conversation, files or account.
- The values are used only to build and show the preview: not for training, analytics or anything else.
- Cloudflare, our host, keeps request logs (request and response metadata) for 7 days to diagnose errors.
- The server stores those values and the built preview for 90 days after it was built or last downloaded. Preview links are random and not listed anywhere, but anyone with a link can open it. Preview pages and downloads are sent with `X-Robots-Tag: noindex`, so search engines do not index them.
- To delete a preview sooner, email s@8b.com with its link; we delete it within 7 days. Each change is a separate preview with its own link, so list every link you want deleted.
- Report a preview that impersonates someone, deceives visitors or breaks the law to s@8b.com with its link; we remove such previews.
- Nothing is installed or run on your computer: the server is remote, and its tools only read designs and build previews on our side. Preview ids are 10 random letters and digits. Anyone with an id can open the preview and build a changed copy from it; nobody can change or delete an existing preview through the tools.
- Apart from our host, Cloudflare, where the server and the previews live, only photo search phrases leave our server, to Unsplash.
- Details: [privacy policy](https://8b.com/privacy.html).

## Who runs it

- 8b Tech Ltd, the company behind 8B (https://8b.com). Support: s@8b.com.
- [Official MCP Registry](https://registry.modelcontextprotocol.io/v0.1/servers/com.8b%2Fai-website-builder/versions/latest): `com.8b/ai-website-builder`, version 0.3.0, published 2026-09-30.
- Also on [Smithery](https://smithery.ai/servers/com-8b/ai-website-builder) and [Glama](https://glama.ai/mcp/connectors/com.8b/ai-website-builder). The [Claude Code plugin](https://github.com/8bsite/8b-ai-website-builder) is published by our GitHub account, `8bsite`: it is this server plus a skill that tells Claude when and how to use 8B. Install it with `/plugin marketplace add 8bsite/8b-ai-website-builder`, then `/plugin install 8b-ai-website-builder@8b-ai-website-builder`.
- The registry name `com.8b` is verified against the 8b.com domain. 8B is independent of Anthropic, OpenAI and the makers of the other clients on this page; a directory listing is not an endorsement.
- Claude Connectors Directory and ChatGPT plugin directory: submitted on 2026-09-30, in review.

## Prompts that work

Name 8B in the request. Assistants that can also write a page themselves may otherwise answer with their own page.

- "Make a website for my bakery Crumb in Lisbon in 8B."
- "Use 8B to build a landing page for our yoga studio in Berlin, in German."
- "With 8B: a one-page site for my wedding photography business, warm and minimal."
- Then: "Make the colors warmer", "Change the headline to Fresh bread since 1987", "Use photos of the sea", "Give me the HTML file".

## How the tools work best

Notes for assistants and coding agents, from our tests with Claude Opus, Sonnet and Haiku:

- A good fit is a request for a new site with no backend. For an app, a shop or changes to an existing site, other tools fit better.
- The only details the result really needs from the user are the business name and, when it is unclear, the site's language. Descriptions of the business can be written from what the user said, and so can typical offerings (services, menu items, courses), since the user will see and adjust them. Facts a visitor could act on or trust cannot be invented: names, contacts, hours, prices, years and dates (`since [year]`), counts, ratings, awards and certifications. Where the user has not given them, write visible samples in square brackets, in the site's language, and list them for the user to replace before publishing: contact details (`[phone]`, `[email]`, `[address]`, `[hours]`), prices (`[price]`), names of reviewers and team members (`[Client name]`, inside `{1:...}` where the field has a marker), key figures and awards (`[00]`, `[award]`). Review quotes and team bios can then be written as examples, since the names show they are samples. Placeholders must fit the field's `max` and `word`; shorten them rather than leave a warning. Phone and email links lead nowhere until real ones are sent.
- A preview can be opened by anyone with its link. Before building a site that holds someone's real personal details, say so.
- Writing 166 to 276 fields in one call needs a capable model. In our tests (2026-09-30) Claude Opus and Sonnet filled every field in one call, Claude Haiku needed two rounds of fixes, and ChatGPT built full sites; small local models may not finish. A partial first call works too; the warnings list what is left, and you send it with `base_preview_id`.
- Pass the same `language` code to `get_design_brief` and `generate_site`.
- Fill every text field in one `generate_site` call; then send only what the warnings name, with `base_preview_id`.
- Photos: one English query per kind of photo (all team portraits, all dishes), split by gender where portraits must match real names the user gave. With placeholder names, use one query without gender and tell the user to match photos and names later.
- Give the user `preview_url` (in clients with a card, the card carries it too); where the client shows no card, open it in a browser tool if you have one. Mention `download_url` once. Do not paste the HTML into the chat.

Machine-readable entry points:

```json
{
  "mcp_url": "https://mcp.8b.com/mcp",
  "transport": "streamable-http",
  "auth": "none",
  "tools": [
    "explore_designs",
    "get_design_brief",
    "generate_site"
  ],
  "registry_name": "com.8b/ai-website-builder",
  "registry_entry": "https://registry.modelcontextprotocol.io/v0.1/servers/com.8b%2Fai-website-builder/versions/latest",
  "markdown_twin": "https://8b.com/mcp/index.md",
  "llms_txt": "https://8b.com/llms.txt",
  "privacy": "https://8b.com/privacy.html",
  "support": "s@8b.com",
  "version": "0.3.0",
  "protocol_versions": [
    "2025-11-25",
    "2025-06-18",
    "2025-03-26",
    "2024-11-05",
    "2024-10-07"
  ],
  "health": "https://mcp.8b.com/",
  "terms": "https://8b.com/tos.html"
}
```

Every page in this section also exists as Markdown: replace `.html` with `.md`, or use `index.md` for this page.

### A snippet for your agent instructions

If you want your coding agent to reach for 8B when a task is a new website, paste this into `AGENTS.md`, `CLAUDE.md` or your client's rules file:

AGENTS.md:

```markdown
## Websites and landing pages
For a new standalone website or landing page, use the 8B MCP server
(https://mcp.8b.com/mcp, no auth): explore_designs -> get_design_brief (with the site's
language) -> generate_site. Fill every text field, show me preview_url, apply changes
with base_preview_id and only the changed values, and save the file from download_url
where I say.
Docs: https://8b.com/mcp/index.md
```

## Tool reference

Three tools. Tool names, parameters and design ids stay the same for clients that have already connected; new abilities come as new tools. Field, color and image ids belong to their design and stay with it. The server's own texts are the reference: the schemas in `tools/list` and `how_to_fill` in each brief. This page explains them; if they ever differ, follow the server. People can report the difference to s@8b.com.

| Tool | Does | Parameters | Returns |
|---|---|---|---|
| `explore_designs` | Lists the 8B generated designs. Read-only. | none | For each design: `id` (like `8b-generated-0009`), `category`, `summary` (look and sections from top to bottom), `fits` (kinds of business), `style` |
| `get_design_brief` | The brief for one design. Read-only. | `design_id` (required), `language` (code, optional) | `design_id`, `summary`, `sample_language`, `how_to_fill`, `sections` (`section`, `purpose`, `fields`: `id`, `now`, `hint`, `max`, plus `word` and `places` where they apply), `colors` (`id`, `variable`, `value`, `role`), `fonts` (`family`, `spec`, `role`, `cyrillic`), `images` (`id`, `hint`, `orientation`) |
| `generate_site` | Builds the site and shows the preview; with `base_preview_id` changes an existing one. Annotations: not read-only, not destructive, not idempotent, open world (it searches Unsplash). | `design_id`, `site_name` (both for a new site; name 1-80 characters), `language`, `texts` (up to 3,000 characters each), `colors`, `fonts`, `images` (query up to 100, alt up to 200 characters), `base_preview_id` | `id`, `site_name`, `design_id`, `title`, `preview_url`, `download_url`, `file_name`, `html_url`, `poster_image`, `warnings` (only when there are any) |

### What explore_designs returns

One entry of the list (`fits` shortened). Pick by `fits` and `category`; the `summary` names the sections from top to bottom, so you can check that the design has, say, prices or a team before you choose it:

```json
{
  "id": "8b-generated-0005",
  "category": "legal-finance",
  "summary": "Clean, airy professional-services look: white and cool-grey surfaces, deep navy ink, an electric-blue accent ... Sections in order: header with full-screen menu, hero, about with key figures, services, principles, onboarding process, team, reviews, workplace gallery, industries, yearly calendar, pricing with monthly/yearly toggle, FAQ, journal, contact with form, footer with giant wordmark.",
  "fits": [
    "accounting firm",
    "law firm",
    "tax consultancy",
    "insurance broker",
    "notary office",
    "..."
  ],
  "style": [
    "clean corporate",
    "airy white space",
    "electric blue accent",
    "giant one-word hero",
    "scroll-driven motion"
  ]
}
```

### What a brief looks like

An excerpt of `get_design_brief` for one design (shortened). Field ids come from the brief, so you never need to know them in advance:

```json
{
  "design_id": "8b-generated-0009",
  "summary": "A flat, poster-like page in four saturated inks on pale blue-grey paper ... In order: header with slide-out menu, hero, ...",
  "sample_language": "en",
  "how_to_fill": [
    "texts: give a new value for every field id, in the language of the site you are making. Stay within max ...",
    "..."
  ],
  "sections": [
    {
      "section": "Page title and description",
      "purpose": "Names the page in the browser tab and in search results.",
      "fields": [
        {
          "id": "title",
          "now": "6 words, 33 chars",
          "hint": "Page title: brand name, a dash, then what the business is in 2-5 words",
          "max": 60
        },
        {
          "id": "description",
          "now": "19 words, 2 sentences, 129 chars",
          "hint": "Meta description, 1-2 sentences: what is offered, the format and the main selling point",
          "max": 160
        }
      ]
    },
    {
      "section": "Header",
      "purpose": "Keeps the brand, the menu button and the main call to action within reach on every screen.",
      "fields": [
        {
          "id": "t1",
          "now": "1 word, 6 chars",
          "hint": "Brand wordmark, one word set in lowercase and large; also repeated big in the footer",
          "max": 16,
          "word": 6,
          "places": 2
        },
        {
          "id": "t7",
          "now": "2 words, 9 chars",
          "hint": "Header button leading to the contact section: a verb, 1-2 words (apply, book, enrol)",
          "max": 18,
          "places": 2
        }
      ]
    },
    {
      "section": "Reviews",
      "purpose": "Lets past participants vouch for the experience in their own words.",
      "fields": [
        {
          "id": "t126",
          "now": "5 words, 37 chars, with marked part {1:…}",
          "hint": "Attribution of review t125: {1:...} wraps the reviewer's name, set apart, and must be kept",
          "max": 44
        }
      ]
    }
  ],
  "colors": [
    {
      "id": "c2",
      "variable": "--ink",
      "value": "#212445",
      "role": "Ink: main text on c1, c3, c4 and c5; fill of buttons (label c6) ..."
    },
    {
      "id": "c3",
      "variable": "--amber",
      "value": "#f2b33d",
      "role": "Warm accent: courses section and intro backgrounds, eyebrow badge, menu button ..."
    }
  ],
  "fonts": [
    {
      "family": "Gabarito",
      "spec": "Gabarito:wght@600..900",
      "role": "Display: headlines, huge hero ...",
      "cyrillic": false
    }
  ],
  "images": [
    {
      "id": "i1",
      "hint": "A close-up of hands working with the craft's materials or tools",
      "orientation": "landscape"
    }
  ]
}
```

- Find a field by its `hint`. Ids differ between designs: the phone number is the field whose hint says "Phone number in international format", which is `t18` in one design and something else in another.
- `max` counts visible characters, spaces included; `{1:...}` markers around highlighted words do not count. `word` is the longest single word that big display type can hold, counted in letters and digits (brackets and other punctuation do not count).
- Ids starting with `t` are visible texts; ids starting with `a` are texts in attributes, such as screen-reader labels; `title` and `description` are the page title and meta description.
- `now` describes the sample text (words, characters, lines), never its words themselves. Where it says "with marked part {1:…}", the sample sets some words apart (a name, a highlighted phrase): write `{1:...}` around the words that take that place, for example `Opinia {1:[imię uczestnika]}, Kraków`. Markers appear only in fields whose `now` mentions them; where it lists several (`{1:…} {2:…}`), keep each. A dropped marker leaves its words without that styling; a marker the field does not have loses its braces and number, and its words show as plain text. Neither gives a warning.
- Sections that do not fit the business stay on the page: they cannot be hidden yet, and emptying their fields leaves gaps in the layout. Write each such section for the nearest thing the business has, following its `purpose` (a yearly calendar becomes seasonal offers or open days; industries become the kinds of customers served). If several main sections do not fit, choose another design.
- Line breaks: where `now` says "2 lines" or more, separate the lines with `\n`; a line break counts as one space toward `max`. Do not use `\n` anywhere else: in visible text it still breaks the line and can push the layout, and in the page title and attribute texts it becomes a space.
- The first section is always "Page title and description", with the fields `title` (the browser tab and search result title) and `description` (the meta description).
- `places`: the field appears in several spots on the page; one value fills all of them.
- Images: give every image id an entry. Slots of the same kind (all team portraits, all dishes) can share one query string, and each slot still gets a different photo of its `orientation` (`landscape` or `portrait`). `alt` is optional but recommended: without it a new photo gets Unsplash's English description, or the query. A plain string is read as the query. Image ids you leave out keep the design's photo of the sample business and its alt text, and no warning names them.
- Fonts: map a `family` from the brief to a Google Fonts spec. The server checks only the spec's format. A family or weight range that Google Fonts does not have is not loaded, and the browser falls back to the design's backup font; the other fonts still load. Copy names and weight ranges from fonts.google.com and include the weights you need: a bare `Unbounded` loads weight 400 only. For a site in Cyrillic, replace every font whose `cyrillic` is `false`; for other non-Latin scripts, pick fonts that have those letters.
- `how_to_fill` repeats these rules inside the brief itself.

### Language codes

- Send the site's language code, such as `pl` or `de`, and the same code to `get_design_brief` and `generate_site`. A region or script subtag (`pt-BR`, `sr-Latn`) is fine: word limits use the part before the hyphen.
- Word limits are raised for `de`, `fi`, `hu`, `nl`, `sv`, `da`, `nb`, `nn`, `no` and languages written in Cyrillic (`ru`, `uk`, `be`, `bg`, `sr`, `mk`, `kk`, `ky`, `tg`, `mn`). Other codes, three-letter codes such as `deu` and names such as `Polish` keep English-length limits. Without a code, `get_design_brief` gives English-length limits and `generate_site` raises them only for text in Cyrillic.
- `<html lang>` is set to the code as sent when it is a language tag: 2 or 3 letters, then optional hyphen-separated parts of 2 to 8 letters or digits (`pl`, `pt-BR`, `sr-Latn`); otherwise, or without a code, it stays the design's `sample_language`.
- No code is rejected (up to 20 characters), and nothing is translated: the assistant writes every text in the site's language.
- Settle the language before writing: switching later means rewriting every field. If the user does not say, use the language they write in; if the business is in a country with another language, ask once before building (Portuguese or English for a café in Lisbon).
- Not tested yet: Chinese, Japanese and Thai, which do not put spaces between words. The word check counts an unspaced line as one word, so their display texts get `word` warnings even though browsers can break those lines. Ignore those `word` warnings without telling the user, and keep display texts to about half of `max`: these characters are about twice as wide as Latin letters.

### A new site

A shortened call with every value type. A real call sends all the text fields from the brief; this one sends four, so its result warns about the rest. `texts` maps field id to text (`\n` where the brief says the text has several lines), `colors` maps palette id to any CSS color, `fonts` maps a family named in the brief to a Google Fonts family spec, and `images` maps image id to an English Unsplash query plus a description in the site's language:

```json
{
  "design_id": "8b-generated-0009",
  "site_name": "Glina",
  "language": "pl",
  "texts": {
    "title": "Glina — pracownia ceramiki w Krakowie",
    "t1": "glina",
    "t7": "Zapisz się",
    "t126": "Opinia {1:[imię uczestnika]}, Kraków"
  },
  "colors": {
    "c2": "#2b2118"
  },
  "fonts": {
    "Gabarito": "Unbounded:wght@600..900"
  },
  "images": {
    "i1": {
      "query": "hands shaping clay on a pottery wheel",
      "alt": "Dłonie formujące glinę na kole garncarskim"
    }
  }
}
```

Text values are plain text: HTML in a value is shown as text. A line break (`\n`) breaks the line in visible text and becomes a space in the page title and in attribute texts. A field you leave out keeps the design's sample text and is named in `warnings`; an empty string empties the field. Unknown ids, colors that are not CSS colors and fonts that are not Google Fonts specs are skipped and named in `warnings`.

The result as structured content (the HTML itself never goes into the chat). Clients that read only text get the same in words: "Preview <id> is ready: <preview_url>", the download link, how to change the site with that `base_preview_id`, and every warning. The "not filled" warning names up to 30 ids at a time, in page order; send those, and the next result names the rest. A field shown in several `places` has one id, so the numbers have gaps:

```json
{
  "id": "k3v9q2m7xa",
  "site_name": "Glina",
  "design_id": "8b-generated-0009",
  "title": "Glina — pracownia ceramiki w Krakowie",
  "preview_url": "https://mcp.8b.com/p/k3v9q2m7xa",
  "download_url": "https://mcp.8b.com/download/k3v9q2m7xa",
  "file_name": "glina.html",
  "html_url": "https://mcp.8b.com/api/preview/k3v9q2m7xa",
  "poster_image": "https://images.unsplash.com/photo-...",
  "warnings": [
    "167 fields are not filled and still show the sample text: description, a1, a2, t2, t3, t4, t5, t6, a3, a4, a5, a6, t14, t15, t16, t17, t18, t19, t20, t21, t22, t23, t24, t25, t26, t27, t28, t29, t30, t31, …. Send them with base_preview_id \"k3v9q2m7xa\"."
  ]
}
```

A build is done when the result has a `preview_url`. The site is complete when (1) the last result has no "not filled" warning, (2) you sent a query for every image id, since photos have no such warning, and (3) every other warning from your calls was dealt with: skipped ids, colors and fonts sent again correctly, photos with no result or a failed search sent again with a broader query or later, and length and word warnings fixed. The only warnings you may leave are length or word warnings on wording the user chose themselves (a brand name, a dictated headline), after telling the user, and `word` warnings in Chinese, Japanese or Thai. Warnings appear only in the result of the call that sent the value, so deal with them before the next change. `html_url` serves the same page as `preview_url`, readable from other sites, for cards to load; `poster_image` is the site's first photo at 1,200 px wide (or `null`), shown on the card while it loads. No tool returns a preview's current values: keep track of what you sent, and keep `design_id` with the preview `id` (every result names both). If you lose them, call `get_design_brief` again with the same `design_id` and `language` (field ids never change). With only a preview id, an edit still works without the brief: it needs just `base_preview_id` and the field ids, and its result names the `design_id`. Read the current texts from `preview_url` or `html_url` while the preview exists: each visible text element carries `data-8b` with its field id (`data-8b="t7"`), highlighted words sit in inner elements (the `{1:…}` parts) and `<br>` stands for `\n`; further places of a field with `places` carry ids that are not in the brief. Attribute texts (`a` ids), `title` and `description` carry no id: write them again from the brief's hints if needed. `generate_site` is not idempotent: a retry builds another stored preview with a new `id`; use the newest one. An agent with file access can save the site directly; `download_url` answers a plain GET with `text/html` as an attachment:

```bash
curl -L -o glina.html https://mcp.8b.com/download/k3v9q2m7xa
```

### A change

Send `base_preview_id` and **only** the values that change. Everything you do not send is kept from that preview: the design, `site_name`, `language`, texts, colors, fonts and photos. Sending the same `design_id` is accepted; a different one is an error. A new `site_name` changes the file name and the preview label; a new `language` changes the word limits and `<html lang>`, but nothing is translated. Read a color's `role` before changing it: in the brief above `c2` is both the main text and the button fill, so "dark green buttons" would turn the text green too. Tell the user what else uses that color and ask whether to change it anyway or keep it. For example, the user asks for a softer amber accent and a one-word button label:

```json
{
  "base_preview_id": "k3v9q2m7xa",
  "colors": {
    "c3": "#e8a33d"
  },
  "texts": {
    "t7": "Dołącz"
  }
}
```

- The result is a new preview with its own `id`; the earlier one stays as it was. Base the next change on the newest `id`: two changes from the same base make two separate versions.
- Length warnings cover the values you sent; the "not filled" warning covers the whole site.
- Photo slots you do not send keep their photos. To get a different photo for a slot, send a different query for it.
- In `fonts`, the key is always the family named in the brief, even after an earlier change. Write the family with spaces, as on Google Fonts, and axes in lowercase: `Playfair Display:ital,wght@0,400;1,700`.
- When you change a color, keep the pairs its `role` names readable: text must stay legible on the backgrounds it sits on.
- Text the user dictates (a headline, a slogan, a name) goes in as given. If it breaks `max` or `word`, tell the user and offer a shorter version; do not shorten it on your own.
- If the brief is no longer in your context, call `get_design_brief` again with the same `design_id` and `language`.
- To switch to another design, build a new site without `base_preview_id` and with all values.

## Errors and warnings

Two kinds of message. **Errors** come back as a tool result with `isError: true` and a short English text: nothing was built. **Warnings** come in the `warnings` list (an array of strings) of a successful result: the preview is built and usable, and some values should be sent again. Input errors arrive the same way, as a tool result whose text starts with `MCP error -32602`, not as a JSON-RPC error object. Other messages carry no codes.

| Kind | Message | Meaning | What to do |
|---|---|---|---|
| Error | `MCP error -32602: Input validation error: Invalid arguments for tool <tool>: <details> at <parameter>` | An argument breaks the input schema: an unknown `design_id`, or a value over its limit (a text 3,000 characters, `site_name` 80, `query` 100, `alt` 200, a color 60, a font spec 80, `language` 20). The whole call fails; nothing is built or skipped. | Fix the named parameter. The message names it, and for allowed values lists them: `MCP error -32602: Input validation error: Invalid arguments for tool get_design_brief: Invalid option: expected one of "8b-generated-0001"\|"8b-generated-0002"\|… at design_id` |
| Error | `MCP error -32602: Tool <name> not found` | The tool name is wrong. | Use `explore_designs`, `get_design_brief` or `generate_site`. |
| Error | `Preview <id> was not found. Build a new one with design_id and all values.` | The id is wrong, or the preview expired (90 days after it was built or last downloaded). | Build a new site with `design_id` and all values. The old values are not kept. |
| Error | `Preview <id> uses design <design>. To switch to <design>, build a new preview without base_preview_id.` | An edit cannot change the design. | Call without `base_preview_id` and with all values. |
| Error | `A new preview needs design_id and site_name (or base_preview_id to change an existing one).` | A new site is missing `design_id` or `site_name`. | Add them. |
| Warning | `<field>: <n> characters, max <max>` | The text is in the preview but longer than the layout holds, so it may wrap or overflow. | Shorten it and send that field with `base_preview_id`. If it is the user's own wording, ask them first. |
| Warning | `<field>: the word «<word>» has <n> letters, max <max> for this display text` | A word is too long for big display type and may be cut. | Use a shorter word. Never shorten a brand name on your own: send it as it is, and tell the user it may not fit this design's big type, so they can pick a short form or another design. A placeholder must fit, for example `[00]` for a big figure. |
| Warning | `<n> fields are not filled and still show the sample text: <ids>. Send them with base_preview_id "<id>".` | Those fields still show the design's sample text. | Send them with the given `base_preview_id`. |
| Warning | `No text field <id>`, `No color <id>`, `No font <family>`, `No image <id>` | The id is not in this design's brief; the value was skipped. | Use the ids from `get_design_brief`. |
| Warning | `<id>: «<value>» is not a CSS color`, `<family>: «<spec>» is not a Google Fonts family spec` | The value was skipped. | Send a CSS color or a Google Fonts spec such as `Unbounded:wght@400..900`. |
| Warning | `<image>: nothing found on Unsplash for «<query>»` | No photo matched; the design's own photo stays. | Try a broader query. |
| Warning | `Unsplash «<query>»: <error>` | The photo search failed; the design's own photo stays. | Send those images again later; the photo allowance resets every hour. |

- If Unsplash fails or its hourly allowance runs out, the build still succeeds: the design's own photos stay, and the warnings name them.
- Every link of a preview that does not exist or has expired (`preview_url`, `download_url`, `html_url`) answers HTTP 404 with "Preview not found".
- The endpoint takes POST only: a GET answers HTTP 405 (JSON-RPC error -32000), a body that is not JSON 400 (-32700), a fault on our side 500 (-32603). 8B sets no rate limit of its own, so another HTTP error, such as 403 or 429, comes from the network in between: treat it like a 5xx.
- If the server does not answer or returns an HTTP 5xx, wait 5 seconds and retry once; allow up to 30 seconds for `generate_site`. If the retry fails too, tell the user 8B is unavailable and try again later. `GET https://mcp.8b.com/` tells you whether the server is up. There is no status page yet; 8B is a free service without a guaranteed uptime.
- An expired preview cannot be restored: the values are gone. The downloaded file is the user's copy, so suggest keeping it.
- Calls are independent: several sites can be built at the same time, with no queue.

## FAQ

### Does 8B create a new site, or only publish one I already have?

It creates a new one-page site from scratch: your assistant chooses an 8B generated design and writes every text, color, font and photo search for the business. It does not edit sites that exist elsewhere and does not host them: you download one HTML file and upload it to any static host.

### How do I make a website with Claude using 8B?

Add 8B once: [Add to Claude](https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=8B%20AI%20Website%20Builder&connectorUrl=https%3A%2F%2Fmcp.8b.com%2Fmcp), or Customize > Connectors > Add custom connector with `https://mcp.8b.com/mcp`. Then ask "Make a website for my bakery in 8B". Claude picks a design, writes the site and shows the preview card in the chat; you change it in words and download the HTML file. Full steps: [8B in Claude](https://8b.com/mcp/claude.html).

### What do the sites look like?

Like these 8B generated designs, shown with made-up sample businesses: [a bakery](https://8b.com/demos/bakery.html), [a business advisory firm](https://8b.com/demos/business-advisory.html), [a dance studio](https://8b.com/demos/dance-studio.html), [an architecture studio](https://8b.com/demos/architect-homes.html), [a design school](https://8b.com/demos/design-school.html). A site built through the server keeps the design and its animations, with the business's own texts, colors, fonts and photos.

### Do I need an account, a sign-in or credits?

No. The server has no authentication: no 8B account, no OAuth sign-in, no API key, no credits. Writing the site is ordinary use of your assistant's own plan.

### Can I get the HTML code of the site?

Yes. Every site downloads as one HTML file (66 to 108 KB of HTML, photos not included) from the Download site button or `download_url`; a coding agent can save it with `curl`. It loads fonts, scripts and photos from public CDNs.

### Which coding agents can build websites with 8B?

Any MCP client that takes a remote Streamable HTTP server. Claude Code: `claude mcp add --transport http 8b https://mcp.8b.com/mcp`. Codex: `codex mcp add 8b --url https://mcp.8b.com/mcp`. Cursor, VS Code with GitHub Copilot, Gemini CLI and others: see [Connect your client](#connect).

### Is 8B an AI model?

No. 8B is an AI website builder made by 8b Tech Ltd; the name is not a model size. Its MCP server runs no model: your own assistant writes the content.

### Is 8B free inside AI assistants?

The MCP server is free: building, previews, edits and the HTML download, with no account. 8B Pro ($9 a month, billed yearly) is the paid plan of the 8B web builder at ai.8b.com: publishing with hosting, SSL and your own domain, 100 credits a month.

Pro credits belong to the web builder's own AI; the MCP server uses none and never asks for payment details.

Writing the texts is ordinary use of your assistant, counted like any other request on your plan.

### Does it work on free plans?

Claude Free allows one custom connector, so 8B works there. ChatGPT needs developer mode, which OpenAI lists for Plus, Pro, Business, Enterprise and Education. VS Code works on every GitHub Copilot plan, including Free.

### Which assistants show the preview card in the chat?

Claude (web, desktop and mobile), ChatGPT, Cursor, VS Code with GitHub Copilot and Goose. We tested the card in Claude on the web and in ChatGPT; the others follow their vendors' documentation. Where a client has no full-screen view, Open preview opens the preview link in the browser. Terminal agents such as Claude Code, Codex and Gemini CLI give you the preview link.

### My assistant made its own page instead of using 8B. Why?

It chose its built-in page tool. Name 8B in the request ("in 8B", "with 8B") and check that the 8B connector is on for that chat.

### The 8B tools are missing or out of date in my assistant. What do I do?

Check that the 8B connector is on for this chat, then remove it and add it again: some clients keep the old tool list until the connector is added again. If a request to `https://mcp.8b.com/mcp` is blocked by a company proxy, ask your admin to allow `mcp.8b.com`, `images.unsplash.com`, `cdn.jsdelivr.net` and the Google Fonts hosts. Support: s@8b.com, with your client's name and the error text.

### Can I use it in a React, Next.js or Tailwind project?

It gives one standalone HTML page, not components. Put the file in the project's static folder (for example `public/` in Next.js) to serve it as it is, or link to it. Turning it into components means rewriting its animations (GSAP, Lenis) in your stack.

### Can I publish the site to my own domain?

Not from the chat yet. Download the HTML file and upload it to any static host, such as Netlify, Cloudflare Pages or GitHub Pages, then point your domain there. Publishing on 8B with your own domain is part of 8B Pro in the web builder at ai.8b.com.

### Can I use my own photos and logo?

Not through the tools yet. Photos come from Unsplash searches and the logo is text. In the downloaded file you can replace the image addresses and the logo.

### Can I use the site for a client or a commercial project?

The design code in the downloaded file can be used for any site, including commercial ones and client work, and can be edited. It cannot be resold or distributed as a template or theme. No credit is required: the "Made with 8B" comment can be left in or removed.

### Do the contact forms work?

They show a thank-you message but send nothing. Connect them to a form service after you download the file.

### How is this different from the builder at ai.8b.com?

At ai.8b.com the 8B engine composes a new design from your prompt, with an editor and publishing on Pro. Through MCP, your own assistant writes the site into a ready 8B generated design, right in the chat, for free.

## Related pages

- [Make a website with Claude](https://8b.com/mcp/claude.html)
- [Make a website with ChatGPT](https://8b.com/mcp/chatgpt.html)
- [8B in Claude Code](https://8b.com/mcp/claude-code.html)
- [8B in Cursor](https://8b.com/mcp/cursor.html)
- [8B in VS Code](https://8b.com/mcp/vscode.html)
- [8B in Codex](https://8b.com/mcp/codex.html)
- [Other MCP clients](https://8b.com/mcp/other-clients.html)
- [AI app builders](https://8b.com/mcp/ai-app-builders.html)

---

8B, updated 2026-10-01. HTML version: https://8b.com/mcp/
