Stitch is Google's AI-powered UI design tool (Beta). This skill covers how to interact with Stitch projects and screens via its Remote MCP server using the HTTP API.
Generate your API key at: https://stitch.withgoogle.com/settings (API Keys section)
Set it as an environment variable: export STITCH_API_KEY=YOUR_STITCH_API_KEY
All requests go to: https://stitch.googleapis.com/mcp
Pass the key via header: X-Goog-Api-Key: $STITCH_API_KEY
Stitch exposes a standard MCP HTTP endpoint. To call a tool, POST to the MCP endpoint with the tool name and arguments.
bash
curl -X POST https://stitch.googleapis.com/mcp \
-H "Content-Type: application/json" \
-H "X-Goog-Api-Key: YOUR_STITCH_API_KEY" \
-d '{
"method": "tools/call",
"params": {
"name": "list_projects",
"arguments": {}
}
}'
Note: Stitch is a Remote MCP server (cloud-hosted), unlike local file-based MCP servers. API Keys persist indefinitely; OAuth tokens expire every ~1 hour.
list_projectsLists all Stitch projects accessible to the user.
filter (optional, string): AIP-160 filter on view field. Values: view=owned (default), view=sharedProject objectsbash
# List all owned projects
curl -X POST https://stitch.googleapis.com/mcp \
-H "Content-Type: application/json" \
-H "X-Goog-Api-Key: YOUR_STITCH_API_KEY" \
-d '{"method":"tools/call","params":{"name":"list_projects","arguments":{}}}'
create_projectCreates a new Stitch project (container for UI designs).
title (optional, string): Display name of the projectProject resource with name, title, and metadatabash
curl -X POST https://stitch.googleapis.com/mcp \
-H "Content-Type: application/json" \
-H "X-Goog-Api-Key: YOUR_STITCH_API_KEY" \
-d '{"method":"tools/call","params":{"name":"create_project","arguments":{"title":"My Ad Landing Page"}}}'
get_projectRetrieves details of a specific project.
name (required, string): Resource name. Format: projects/{project}. Example: projects/4044680601076201931Project resource objectlist_screensLists all screens within a Stitch project.
projectId (required, string): Project ID without projects/ prefixScreen objectsbash
curl -X POST https://stitch.googleapis.com/mcp \
-H "Content-Type: application/json" \
-H "X-Goog-Api-Key: YOUR_STITCH_API_KEY" \
-d '{"method":"tools/call","params":{"name":"list_screens","arguments":{"projectId":"4044680601076201931"}}}'
get_screenRetrieves details of a specific screen including HTML, screenshot, and Figma export.
Read-only: yes
Input:
name (required): projects/{project}/screens/{screen}projectId (required, deprecated): Project ID without prefixscreenId (required, deprecated): Screen ID without prefixAll three are currently required even though
projectId/screenIdare deprecated.
Screen object with htmlCode, screenshot, figmaExport download URLsgenerate_screen_from_textGenerates a new UI screen from a text prompt. Takes a few minutes.
Read-only: no (destructive)
⚠️ Don't retry on connection errors — generation may still be in progress. Use get_screen after a few minutes to check.
Input:
projectId (required, string)prompt (required, string): Describe the screen to generatedeviceType (optional): MOBILE | DESKTOP | TABLET | AGNOSTICmodelId (optional): GEMINI_3_FLASH | GEMINI_3_1_PRO (GEMINI_3_PRO is deprecated)Output: Generated Screen objects + SessionOutputComponent entries (may include suggestions)
output_components has suggestions, present them to user. If accepted, call again with the suggestion as the new prompt.bash
curl -X POST https://stitch.googleapis.com/mcp \
-H "Content-Type: application/json" \
-H "X-Goog-Api-Key: YOUR_STITCH_API_KEY" \
-d '{
"method": "tools/call",
"params": {
"name": "generate_screen_from_text",
"arguments": {
"projectId": "YOUR_PROJECT_ID",
"prompt": "A mobile landing page for a Medicare insurance offer with a bold headline, trust badges, and a prominent CTA button",
"deviceType": "MOBILE",
"modelId": "GEMINI_3_1_PRO"
}
}
}'
edit_screensEdits existing screens using a text prompt. Takes a few minutes.
projectId (required, string)selectedScreenIds (required, string[]): Screen IDs without screens/ prefixprompt (required, string): Edit instructiondeviceType (optional)modelId (optional): GEMINI_3_FLASH | GEMINI_3_1_PROScreen objectsgenerate_variantsGenerates design variants of existing screens.
projectId (required, string)selectedScreenIds (required, string[])prompt (required, string): Guide variant generationvariantOptions (required, object): See VariantOptions belowdeviceType (optional)modelId (optional)Screen objectsVariantOptions schema:
json
{
"variantCount": 3,
"creativeRange": "EXPLORE",
"aspects": ["COLOR_SCHEME", "LAYOUT"]
}
variantCount: 1–5 (default: 3)creativeRange: REFINE | EXPLORE | REIMAGINEaspects: LAYOUT | COLOR_SCHEME | IMAGES | TEXT_FONT | TEXT_CONTENTFieldTypeDescriptionnamestringResource name: projects/{project}/screens/{screen}``idstring_(Deprecated)_ Screen IDtitlestringScreen titlepromptstringPrompt used to generatescreenshotFileScreenshot imagehtmlCodeFileHTML code of the screenfigmaExportFileFigma export filethemeDesignThemeTheme useddeviceTypeDeviceTypeDevice targetscreenMetadataScreenMetadataStatus, agent type, display modewidth / heightstringScreen dimensionsgroupIdstringGroup ID for variants
FieldTypeDescriptionnamestringprojects/{project}/files/{file}``downloadUrlstringDirect download URLmimeTypestringe.g. image/png, text/html
FieldValuesstatus``IN_PROGRESS | COMPLETE | FAILED``agentType``TURBO_AGENT, PRO_AGENT, GEMINI_3_AGENT, etc.displayMode``SCREENSHOT | HTML | CODE | MARKDOWN | STICKY_NOTE
python
import requests
import json
API_KEY = "YOUR_STITCH_API_KEY"
MCP_URL = "https://stitch.googleapis.com/mcp"
HEADERS = {
"Content-Type": "application/json",
"X-Goog-Api-Key": API_KEY
}
def stitch_call(tool_name, args):
payload = {
"method": "tools/call",
"params": {"name": tool_name, "arguments": args}
}
r = requests.post(MCP_URL, headers=HEADERS, json=payload)
r.raise_for_status()
return r.json()
# 1. Create a project
project = stitch_call("create_project", {"title": "Medicare Q4 Campaign"})
project_id = project["result"]["name"].split("/")[1]
# 2. Generate initial screen
result = stitch_call("generate_screen_from_text", {
"projectId": project_id,
"prompt": "Mobile landing page for Medicare Advantage with emotional headline, plan comparison table, and green CTA button",
"deviceType": "MOBILE",
"modelId": "GEMINI_3_1_PRO"
})
# 3. Get screen details once complete
# (generation takes a few minutes — poll with get_screen)
screens = result["result"].get("screens", [])
if screens:
screen_name = screens[0]["name"]
# screen_name format: projects/{id}/screens/{screen_id}
parts = screen_name.split("/")
project_id = parts[1]
screen_id = parts[3]
screen = stitch_call("get_screen", {
"name": screen_name,
"projectId": project_id,
"screenId": screen_id
})
# Download HTML
html_url = screen["result"]["htmlCode"]["downloadUrl"]
print(f"HTML download URL: {html_url}")
# Download screenshot
screenshot_url = screen["result"]["screenshot"]["downloadUrl"]
print(f"Screenshot URL: {screenshot_url}")
python
# After generating a base screen, create variants
variants = stitch_call("generate_variants", {
"projectId": project_id,
"selectedScreenIds": [screen_id],
"prompt": "Test different color schemes and CTA button styles",
"variantOptions": {
"variantCount": 3,
"creativeRange": "EXPLORE",
"aspects": ["COLOR_SCHEME", "TEXT_CONTENT"]
},
"deviceType": "MOBILE",
"modelId": "GEMINI_3_FLASH"
})
htmlCode.downloadUrl to grab the actual HTML — hand it to Marcus for landing page deploymentfigmaExport.downloadUrl for design reviewget_screen → screenMetadata.statusGEMINI_3_1_PRO for highest quality, GEMINI_3_FLASH for faster iterationjson
{
"mcpServers": {
"stitch": {
"url": "https://stitch.googleapis.com/mcp",
"headers": {
"X-Goog-Api-Key": "YOUR_STITCH_API_KEY"
}
}
}
}
Or via Claude Code CLI:
bash
claude mcp add stitch --transport http https://stitch.googleapis.com/mcp \
--header "X-Goog-Api-Key: YOUR_STITCH_API_KEY" -s user