# ai.sitectrl/sitectrl

> Your AI builds real hosted websites: describe it, get a live site with SSL, forms, analytics. Free.

- name: ai.sitectrl/sitectrl
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 79/100 flags: no-repository
- quality: 82/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ai.sitectrl%2Fsitectrl
- tools: https://api.protogrid.dev/v1/servers/ai.sitectrl%2Fsitectrl/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "sitectrl": {
      "type": "http",
      "url": "https://mcp.sitectrl.ai/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 98
- freshness: 85
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-95% ~updated-50d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 82/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 79 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 13 of 13 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: whoami (destructiveHint, idempotentHint, openWorldHint); get_site (destructiveHint, idempotentHint, openWorldHint); create_site (idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 2,088 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 1 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 13, about 2,088 tokens to load them all
- tool set hash: 99bbbf2dc0e0db317d9f3a292127df1a
- tools last changed: 2026-10-03T22:39:18.183Z
- badge: [![protogrid quality](https://protogrid.dev/badge/ai.sitectrl/sitectrl.svg)](https://protogrid.dev/servers/ai.sitectrl/sitectrl)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-03 `create_site` changed (inputSchema)

Full history: https://api.protogrid.dev/v1/servers/ai.sitectrl%2Fsitectrl/changes

## Remotes

- https://mcp.sitectrl.ai/mcp (streamable-http, auth none, reachable true, uptime30d 0.94736844)

## Packages

_none_

## Tools (13)

- `add_component`: Insert a component from the site's shared library into one or more existing pages, INSTEAD of hand-writing the markup yourself — the classes are already styled and themed to this site's colours. Choices: sc-page-title (the page's one <h1>), sc-gallery (cross-fading photo reel — needs 'images'), sc-info-tiles (title + picture + text sections — needs 'tiles'), sc-instructions (numbered/titled steps, optionally with a button each — needs 'tiles'), sc-event (one dated thing: a class, a session, an opening — needs 'title'), sc-btn (a link styled as a button — needs 'label'). NOT offered: sc-header/sc-footer (the site's own shell already emits those) or sc-hero (placed once, on the home page, by the site's own build). 'anchor' says where it goes: {"type": "heading", "value": "<text on the page>", "position": "after"} (default), {"type": "id", "value": "<element id>", "position": "after"}, {"type": "main_end"} (append at the end of the page), or {"type": "replace", "value": "<class of an existing sc-* block>"}. 'pages' is "all" or a list of paths from list_site_files. A page whose anchor doesn't match comes back in 'findings' with what's wrong and the fix — other pages in the same call still get the component. Follow with publish_site.
- `create_site`: Build a brand-new hosted website from a plain-language description. RETURNS IMMEDIATELY with status 'building' — the site takes about 2-3 minutes and is NOT ready when this returns. Tell the user where it will be (expected_url) and poll get_build_status with the returned claim_token. NEVER call create_site a second time for the same site: each call builds another one. Works WITHOUT signing in: an unauthenticated call builds a guest site and returns a claim_url — the user signs up free (no card) at that link to keep it; unclaimed guest sites are deleted after 72 hours. Signed in, the site lands directly on the connected account (free tier: one site, no card).
- `edit_site`: Ask sitectrl's AI editor to change an existing site ('add a contact page', 'make the hero darker'). Edits land in the site's draft; the first build of a brand-new site goes straight live. Returns what changed plus the draft URL.
- `get_analytics`: The site's private first-party traffic: pageviews/visitors/sessions/clicks totals, top pages, referrers, devices. Windows: 24h, 7d, 30d.
- `get_build_status`: Check whether a site started by create_site has finished. Pass the claim_token create_site returned. Works WITHOUT signing in. Poll this every 30-60 seconds rather than calling create_site again — a second create_site call builds a SECOND site.
- `get_site`: Details for one site: live URL, draft URL, status.
- `list_site_files`: List the files in a site's draft tree (paths + sizes).
- `list_sites`: List the user's sitectrl sites with their live URLs and hosting platform.
- `publish_site`: Publish the site's draft to the LIVE site (hosted sites). A snapshot of the previous live version is taken first, so it's undoable.
- `read_site_file`: Read one file from a site's draft tree (text, or base64 for binary; 512 KB cap).
- `search_domains`: Search real domain availability + prices (com/net/org/co/io/site and more). Available results include a purchase_url — hand it to the USER to complete checkout; the connector never spends money. Purchased domains connect to their sites in one click.
- `whoami`: The connected sitectrl account: email, plan status, free-site slot, and credit balance.
- `write_site_files`: Push files (HTML/CSS/JS/images) into a site's DRAFT — use this when YOU are writing the code yourself instead of asking sitectrl's AI. Text files go in 'content'; binary files (images/fonts) in 'content_base64'. Max 40 files/call, 2 MB/file. Keep the <script defer src="sc-track.js"></script> include on every HTML page (the site's built-in private analytics — publish re-adds it if missing). Use clearly-marked placeholder contact info unless the user provided real details. For working forms, POST to /_sc/form/submit with a hidden _form name field — submissions reach the owner's dashboard + email (never use mailto:). Every HTML file is checked before it's written (DOCTYPE, charset, and any invariant this site has declared) — a file that fails is refused and comes back in 'refused' with what's wrong and the exact fix; other files in the same call still write. Follow with publish_site to go live.
