> ## Documentation Index
> Fetch the complete documentation index at: https://docs.roofkit.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Sites and branding

> The RoofKit MCP tools for Sites and branding, with their access, kind, and arguments.

This page lists 11 tools. Each tool shows only to members whose role grants its access. The descriptions are the text that the MCP server sends to AI clients.

## List sites

List the workspace sites (landing pages) with output\_type, public\_url, and updated\_at. Every saved site is public. The primary site is the one at the root URL. Read one site with roofkit.sites.get.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.sites.list` | `builder.read` | Read |

**Arguments**

This tool takes no arguments.

## Create site

Create a site (landing page) from the Builder defaults. It is public at once at public\_url and counts toward the plan site limit. Change it with roofkit.sites.update. Visual and block editing use roofkit.sites.editor.handoff.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.sites.create` | `builder.write` | Write |

**Arguments**

**name** `string` *required*

**slug** `string`

## Open site editor

Return the Builder URL for visual edits, content blocks, quiz questions, adding or removing steps, and site delete. Builder saves are live at once.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.sites.editor.handoff` | `builder.write` | Handoff link |

**Arguments**

This tool takes no arguments.

## Open custom domain settings

Return the custom domain Settings URL to connect a domain, change its DNS, or remove it. Cloudflare tokens stay in the app. Read the domain state with roofkit.domains.status.get.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.domains.handoff` | `domains.manage` | Handoff link |

**Arguments**

This tool takes no arguments.

## Get email branding

Read the workspace email settings: accent color, header style, logo override, and the template copy per template and locale, plus whether the plan and the rollout let the workspace edit them and the brand that emails use now. Change them with roofkit.branding.email.update.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.branding.email.get` | `communications.manage` | Read |

**Arguments**

This tool takes no arguments.

## Get site

Get one site (landing page): name, slug, outputs, settings (copy and theme), estimate and assessment settings, steps (order and custom names), public\_url, builder\_url, and updated\_at. No landing\_id reads the primary site. Send updated\_at as expected\_updated\_at to roofkit.sites.update.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.sites.get` | `builder.read` | Read |

**Arguments**

**landing\_id** `string`

A site id from roofkit.sites.list.

## Update site

Change one site: name, slug, output\_type, copy and theme (updates), estimate\_settings, assessment result settings, the order of its steps, and the names of its custom steps. Only the fields you send change. Saved changes are live at once on the public site: a RoofKit site has no draft or publish step. Read the site with roofkit.sites.get first and send its updated\_at as expected\_updated\_at. A newer save answers CONFLICT, so read again and retry. To add or remove steps, edit questions or blocks, or delete a site, use roofkit.sites.editor.handoff. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.sites.update` | `builder.write` | Write |

**Arguments**

**landing\_id** `string` *required*

A site id from roofkit.sites.list.

**expected\_updated\_at** `string` *required*

updated\_at of the last roofkit.sites.get.

**idempotency\_key** `string` *required*

**name** `string`

At most 200 characters.

**slug** `string`

A new slug moves the public URL of a site that is not primary. The old URL stops working. At most 200 characters.

**output\_type** `string`

combined runs AI visualization and the Budget Estimate. A new output type can change the steps. Allowed values: `estimate`, `ai_visualization`, `conversion_assessment`, `combined`.

**updates** `object`

Copy and theme fields, with the keys of settings in roofkit.sites.get. A named theme\_preset cannot come with colors, fonts, or border\_style.

**properties**

**welcome\_title** `string`

At most 300 characters.

**welcome\_description** `string`

At most 1000 characters.

**cta\_text** `string`

At most 120 characters.

**company\_tagline** `string`

At most 300 characters.

**footer\_text** `string`

At most 1000 characters.

**primary\_color** `string`

**secondary\_color** `string`

**accent\_color** `string`

**font\_family** `string`

Compatibility alias for theme\_font. Use a supported font ID. Omit when theme\_font is supplied. Allowed values: `geist-sans`, `geist-serif`, `geist-mono`, `inter`, `system`.

**theme\_preset** `string`

Choose a named preset without custom color/font/border fields. Manual tokens automatically select personalizado, or explicitly choose personalizado. Allowed values: `minimalista`, `elegante`, `noturno`, `terracota`, `oceano`, `personalizado`.

**theme\_font** `string`

Allowed values: `geist-sans`, `geist-serif`, `geist-mono`, `inter`, `system`.

**border\_style** `string`

Allowed values: `rounded`, `sharp`, `pill`.

**materials\_step\_title** `string`

At most 300 characters.

**materials\_step\_description** `string`

At most 1000 characters.

**shapes\_step\_title** `string`

At most 300 characters.

**shapes\_step\_description** `string`

At most 1000 characters.

**colors\_step\_title** `string`

At most 300 characters.

**colors\_step\_description** `string`

At most 1000 characters.

**photo\_step\_title** `string`

At most 300 characters.

**photo\_step\_description** `string`

At most 1000 characters.

**lead\_step\_title** `string`

At most 300 characters.

**lead\_step\_description** `string`

At most 1000 characters.

**result\_step\_title** `string`

At most 300 characters.

**result\_step\_description** `string`

At most 1000 characters.

**submit\_button\_text** `string`

At most 120 characters.

**estimate\_settings** `object`

Budget Estimate price per roofing square. Only for a site with the estimate output.

**properties**

**min\_price\_per\_roofing\_square** `number` *required*

**max\_price\_per\_roofing\_square** `number` *required*

**currency** `string` *required*

**assessment\_settings** `object`

Result settings of a conversion assessment site. Questions stay in the Builder.

**properties**

**result\_title\_icon** `string`

At most 80 characters.

**cta\_type** `string`

Allowed values: `link`, `call`, `email`.

**cta\_link** `string | null`

**cta\_phone** `string | null`

**cta\_email** `string | null`

**schedule\_cta\_url** `string | null`

Compatibility alias for cta\_link. Omit when cta\_link is supplied.

**call\_cta\_enabled** `boolean`

**email\_cta\_enabled** `boolean`

**tier\_thresholds** `object`

**summaries** `object`

**next\_steps** `object`

**tier\_images** `object`

**step\_order** `string[]`

Every current step id of steps.order, once each, in the new order. landing stays first, result stays last, and material, shape, and color keep their order.

**step\_labels** `object`

New names of custom steps, by step id. Built-in steps keep their names.

## Clone site

Copy a site with its settings, content blocks, lead form, and form fields. No source\_landing\_id copies the primary site. The copy is a new public site at once, at its own public\_url, and counts toward the plan site limit. Requires an idempotency key.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.sites.clone` | `builder.write` | Write |

**Arguments**

**idempotency\_key** `string` *required*

**source\_landing\_id** `string`

The site to copy. Default: the primary site.

**name** `string`

Default: Copy of \<source name>. At most 200 characters.

**slug** `string`

Default: made from the name. At most 200 characters.

## Set primary site

Make one site the primary site. The primary site is what the workspace root URL and the custom domain root serve, and the change is live at once. The site that was primary stays public at its /l/\<slug> URL. Confirm with the user first.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.sites.primary.set` | `builder.write` | Write |

**Arguments**

**landing\_id** `string` *required*

A site id from roofkit.sites.list.

## Get custom domain status

Read the custom domain of the workspace: hostname, subdomain, DNS and SSL state, verification dates, the recommended CNAME, and whether it serves the sites now. The verification token is never returned. Connect a domain or change DNS with roofkit.domains.handoff.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.domains.status.get` | `domains.manage` | Read |

**Arguments**

This tool takes no arguments.

## Update email branding

Change the workspace email settings with a partial update: accent color, header style, an HTTPS logo override, and the copy of the lead\_result, new\_lead\_alert, and follow\_up templates in en and es. The server merges the update. A field you leave out keeps its value, and null clears a value back to the RoofKit default. Emails sent after the call use the new settings. The plan and the rollout must allow email settings: see access.can\_edit in roofkit.branding.email.get.

| Tool name | Access | Kind |
| - | - | - |
| `roofkit.branding.email.update` | `communications.manage` | Write |

**Arguments**

**accent\_color** `string | null`

**header\_style** `string | null`

**logo\_url\_override** `string | null`

**templates** `object`

**properties**

**lead\_result** `object | null`

**new\_lead\_alert** `object | null`

**follow\_up** `object | null`


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.