Progress widget
ui://knak/asset-progress — appears automatically after generate-asset and polls the signed statusUrl until the asset is ready.
The Knak MCP (Model Context Protocol) server gives AI assistants like Claude and ChatGPT direct access to your Knak platform.
Through a secure OAuth connection, your AI assistant can browse your brands, campaigns, and themes — then generate production-ready emails inside Knak on your behalf.
Typical workflow:
Connect — Link your AI assistant to Knak via MCP.
Authenticate — Sign in with your Knak credentials.
Browse — Discover your brands and campaigns (themes are optional and opt-in).
Generate — Create an email with a natural-language prompt.
Preview — A live progress widget polls until generation completes, then a rendered preview appears inline. Open the asset in Knak to refine or send.
All content is generated inside the Knak platform using your brand’s themes and design system. The AI assistant orchestrates the workflow — it does not write the email content itself.
| Tool | Description |
|---|---|
list-brands | List the brands (profiles) accessible to your account, searchable by name. |
list-campaigns | List campaigns within a brand, searchable by name. Use after selecting a brand. |
list-themes | Discover available themes for asset generation. Optional — use only when the user explicitly requests a theme. Supports filtering by name or published status. |
list-brand-voices | Discover the brand voices assigned to a brand, including its default. Used to propose the default voice for confirmation before generating. One brand voice applies per generated asset. |
list-color-kits | Discover the color kits assigned to a brand, including its default. Used to propose the default color kit for confirmation before generating. One color kit applies per generated asset. |
list-font-kits | Discover the font kits assigned to a brand, including its default. Used to propose the default font kit for confirmation before generating. One font kit applies per generated asset. |
search-modules | Find the published email modules available to a brand by words in their names, or browse them a page at a time. Returns up to 25 modules per call with the total count. |
get-module-by-name | Fetch a single module by its exact name within a brand. Use after search-modules when you already know the module name. |
generate-asset | Create a new email with AI. Accepts a creative prompt and optional parameters for theme, subject line, sender details, tags, and attachments. Generation is asynchronous — you receive a link to the campaign immediately. Clients that support MCP UI show a live preview when generation completes. |
get-asset-preview | Return a rendered visual preview (screenshot) of a generated asset and a link to open it in Knak, whenever the user asks to see an asset. |
list-assets | Search and filter existing assets by brand, campaign, name, or type. Supports pagination. |
get-asset | Fetch full metadata for a single asset by ID. Use after listing assets to inspect details. |
Before connecting, ensure the following:
| Environment | URL |
|---|---|
| Production | https://enterprise.knak.io/mcp/public |
OAuth discovery endpoint: https://enterprise.knak.io/.well-known/oauth-authorization-server
The Knak MCP server uses OAuth 2.1 Authorization Code flow with PKCE for secure authentication:
Your AI client registers itself automatically via Dynamic Client Registration (DCR).
You are redirected to Knak to sign in and authorize access.
The client receives an access token scoped to mcp:use.
All subsequent MCP requests use this token.
| Parameter | Value |
|---|---|
| Discovery URL | https://enterprise.knak.io/.well-known/oauth-authorization-server |
| Scope | mcp:use |
| PKCE | Required (S256) |
List the brands (profiles) accessible to your account, searchable by name.
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | No | Filter by brand name or display name. Max 191 characters. |
limit | integer | No | Maximum brands to return, 1-25. Defaults to 25. |
offset | integer | No | Brands to skip, for pagination. Defaults to 0. |
Response:
{ "brands": [ { "id": "abc-123", "name": "brand-slug", "display_name": "My Brand" } ]}The name field is the value to pass to list-campaigns and generate-asset; display_name is for presentation only.
List campaigns within a brand, searchable by name. Use after selecting a brand.
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_name | string | No | Filter by brand, as the `name` field from list-brands. |
search | string | No | Filter by campaign name. Max 191 characters. |
limit | integer | No | Maximum campaigns to return, 1-25. Defaults to 25. |
offset | integer | No | Campaigns to skip, for pagination. Defaults to 0. |
Response:
{ "campaigns": [ { "id": "abc-123", "name": "Q1 Campaign", "brand_id": "def-456", "brand_name": "brand-slug" } ]}Discover available themes for asset generation. Optional — use only when the user explicitly requests a theme. Supports filtering by name or published status.
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | string | Yes | Brand to list themes for. |
name | string | No | Filter by exact theme name. |
search | string | No | Filter by partial theme name. |
published | boolean | No | true returns published themes, false returns drafts. Defaults to published only. |
Discover the brand voices assigned to a brand, including its default. Used to propose the default voice for confirmation before generating. One brand voice applies per generated asset.
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | string | Yes | Exact brand ID whose brand voices should be returned. |
Discover the color kits assigned to a brand, including its default. Used to propose the default color kit for confirmation before generating. One color kit applies per generated asset.
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | string | Yes | Exact brand ID whose color kits should be returned. |
Discover the font kits assigned to a brand, including its default. Used to propose the default font kit for confirmation before generating. One font kit applies per generated asset.
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | string | Yes | Exact brand ID whose font kits should be returned. |
Find the published email modules available to a brand by words in their names, or browse them a page at a time. Returns up to 25 modules per call with the total count.
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | string | Yes | Brand to search within. |
search_term | string | No | Words matched against module names; every word must appear. Omit to browse all modules. |
limit | integer | No | Maximum modules to return, 1-25. Defaults to 25. |
offset | integer | No | Modules to skip, for pagination. Defaults to 0. |
Fetch a single module by its exact name within a brand. Use after search-modules when you already know the module name.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Exact module name. |
brand_id | string | Yes | Brand that owns the module. |
Create a new email with AI. Accepts a creative prompt and optional parameters for theme, subject line, sender details, tags, and attachments. Generation is asynchronous — you receive a link to the campaign immediately. Clients that support MCP UI show a live preview when generation completes.
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Creative prompt describing the desired content, followed by the full text of any attached copy document, unmodified. Pass any webpage URL verbatim; Knak extracts from it server-side. |
campaign_name | string | Yes | Existing campaign to create the asset in, as the `name` field from list-campaigns. |
brand_name | string | No | Brand to scope the asset to, as the `name` field from list-brands. Required only when several campaigns share the given name. |
asset_name | string | No | Display name for the asset. Generated from the prompt if omitted. |
subject | string | No | Email subject line. Generated from the prompt if omitted. |
theme_id | string | No | Theme to apply, from list-themes. Cannot be combined with module_ids. |
brand_voice_id | string | No | ID of the brand voice the user confirmed or chose via list-brand-voices. Omit to use the brand default. |
color_kit_id | string | No | ID of the color kit the user confirmed or chose via list-color-kits. Omit to use the brand default. Pass "none" only when the user asks for no color kit or wants the email to take its look from a website. Cannot be combined with theme_id. |
font_kit_id | string | No | ID of the font kit the user confirmed or chose via list-font-kits. Omit to use the brand default. Pass "none" only when the user asks for no font kit or wants the email to take its look from a website. Cannot be combined with theme_id. |
module_ids | array of string | No | Modules to include, from search-modules. Cannot be combined with theme_id. Maximum 10. |
enable_module_recommendation | boolean | No | Let Knak AI choose modules from the brand library. Defaults to false. |
from_name | string | No | Sender display name. |
from_email | string | No | Sender email address. |
reply_email | string | No | Reply-to email address. |
tags | array of string | No | Tags to apply to the asset. |
images | array of object | No | Images to include. Each url must be publicly reachable; a conversation attachment cannot be used. Maximum 10.
|
files | array of object | No | Files supplying extra context for the generation. Each url must be publicly reachable. Maximum 2.
|
Response:
{ "assetId": "abc-123", "status": "generating", "campaignUrl": "https://enterprise.knak.io/account/folder-studio/...", "assetUrl": "https://enterprise.knak.io/email/abc-123", "statusUrl": "https://enterprise.knak.io/api/v2/open/assets/abc-123/generation-status?signature=...", "message": "Knak AI is generating your asset..."}Generation is asynchronous. Supporting clients display a live progress widget that polls statusUrl until completion, then call get-asset-preview to render the result inline. campaignUrl opens the containing campaign folder in Knak; assetUrl opens the asset itself once generation finishes.
Return a rendered visual preview (screenshot) of a generated asset and a link to open it in Knak, whenever the user asks to see an asset.
| Parameter | Type | Required | Description |
|---|---|---|---|
asset_id | string | Yes | Asset to preview, as returned by generate-asset. |
Returns a PNG screenshot URL, or an inline HTML fallback (up to 100 KB) if screenshotting fails. Errors if the asset is still generating or if generation failed.
Search and filter existing assets by brand, campaign, name, or type. Supports pagination.
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_name | string | No | Filter by brand, as the `name` field from list-brands. |
campaign_name | string | No | Filter by campaign name. |
search | string | No | Filter by asset name. |
type | string | No | Filter by type: email or landing. |
limit | integer | No | Maximum assets to return, 1-25. Defaults to 10. |
offset | integer | No | Assets to skip, for pagination. Defaults to 0. |
Fetch full metadata for a single asset by ID. Use after listing assets to inspect details.
| Parameter | Type | Required | Description |
|---|---|---|---|
asset_id | string | Yes | Asset to retrieve, from list-assets. |
On clients that support MCP UI resources (for example, ChatGPT), the Knak server provides two interactive widgets:
Progress widget
ui://knak/asset-progress — appears automatically after generate-asset and polls the signed statusUrl until the asset is ready.
Preview widget
ui://knak/asset-preview — appears when get-asset-preview is called, rendering the screenshot (or HTML fallback) of the asset inline.
Clients that do not support widgets fall back to the structured text responses, which contain the same URLs.
Once connected, try asking your AI assistant:
Your company administrator needs to enable the MCP integration. Contact your Knak admin and ask them to enable the MCP server in company preferences.
Your OAuth session has expired. Disconnect and reconnect the MCP server in your AI client’s settings to re-authenticate.
You may not have access to the requested brand or campaign. Run list-brands and list-campaigns to see what is available to your account. Check with your Knak admin if you expect to see additional brands.
After calling generate-asset, supporting AI clients display a progress widget that polls until generation completes. Generation typically takes 1–2 minutes; the widget times out after about 5 minutes. If the widget has not finished within that window, open the campaignUrl returned by generate-asset to check status in Knak directly. If the asset still does not appear, try generating again.
The Knak MCP server enforces several limits: