stitch::upload-to-stitch — Claude Code skill: setup and features
Uploads local images, mockups, extracted HTML, and design markdown to a Stitch project over HTTP, bypassing MCP base64 token limits.
npx skills add google-labs-code/stitch-skills --skill stitch::upload-to-stitch -a claude-code
npx skills add google-labs-code/stitch-skills --skill upload-to-stitch -a claude-codeWhat stitch::upload-to-stitch does
Direct MCP tool calls fail when uploading large assets because base64 encoding quickly overflows the model output token limit. This skill circumvents that barrier. It runs a local Python script that reads the file directly from disk and streams it straight to the Stitch HTTP endpoint.
Before any upload happens, the skill stops and requires user confirmation. The agent must show the file paths, sizes, and MIME types, then wait for explicit approval. It extracts the API key from your local MCP configuration or asks for one directly. If certificate verification fails on macOS, installing the certifi package fixes the environment.
What it helps with
- upload UI mockups and screenshots to a Stitch project
- bypass base64 token limits in standard MCP file transfers
- push extracted HTML templates to Stitch with route titles
- enforce manual approval before uploading local files
Example prompts for the agent
- Upload the mockup image from assets to my Stitch project
- Send the extracted dashboard HTML to Stitch with title /dashboard
- Upload design.md to the current Stitch project
How to install stitch::upload-to-stitch
1Skills CLI (Vercel)
npx skills add google-labs-code/stitch-skills --skill stitch::upload-to-stitch -a claude-codenpx skills add google-labs-code/stitch-skills --skill upload-to-stitch -a claude-code2Manually: put the files in place
~/.claude/skills/upload-to-stitch/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/upload-to-stitch/
1Skills CLI (Vercel)
npx skills add google-labs-code/stitch-skills --skill upload-to-stitch -a codex2Manually: put the files in place
.agents/skills/upload-to-stitch/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add google-labs-code/stitch-skills --skill upload-to-stitch -a cursor2Manually: put the files in place
.cursor/skills/upload-to-stitch/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install google-labs-code/stitch-skills upload-to-stitch2Manually: put the files in place
.github/skills/upload-to-stitch/SKILL.md1Skills CLI (Vercel)
npx skills add google-labs-code/stitch-skills --skill upload-to-stitch -a gemini-cli2Platform CLI
gemini skills install https://github.com/google-labs-code/stitch-skills --path plugins/stitch-design/skills/upload-to-stitchManually: put the files in place
.devin/skills/upload-to-stitch/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add google-labs-code/stitch-skills --skill upload-to-stitch -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set15
The whole set →Similar
Questions about stitch::upload-to-stitch
How to install stitch::upload-to-stitch in Claude Code?
Run the following command in your terminal: npx skills add google-labs-code/stitch-skills --skill stitch::upload-to-stitch -a claude-code.
Why use this skill instead of standard MCP calls?
Encoding files to base64 within MCP tool calls often exceeds model output token limits. This skill streams the file directly over HTTP instead.
What is required to run the upload script?
You need a Stitch project ID and an API key from your MCP settings. The skill also requires explicit user confirmation before executing any upload.
Source text
SKILL.md · Apache-2.0
--- name: stitch::upload-to-stitch description: >- Upload local assets (images, mockups, extracted HTML, design markdown) to a Stitch project. ALWAYS use this skill when you need to upload visual assets, HTML pages, or design docs to Stitch, particularly when direct MCP tool calls fail or truncate due to base64 token limits. allowed-tools: - "stitch*:*" - "Bash" - "Read" - "Write" - "web_fetch" --- # Upload-to-Stitch Upload local assets (images, mockups, HTML, and markdown files) to a Stitch project using the provided upload script, which bypasses the MCP tool's base64 output token limits. > [!NOTE] > The AI model cannot upload files via MCP tools directly because the base64 > encoding of even a small file exceeds the model's output token limit (~16K > tokens). This script reads the file and sends it directly over HTTP. ## Steps ### 1. Identify Target Project Use `list_projects` to find the correct `projectId`. ### 2. Get the API Key Locate your active MCP server configuration file and extract the API key: - **Antigravity**: `.gemini/antigravity/mcp_config.json` or `.gemini/jetski/mcp_config.json` - **Gemini CLI**: `~/.gemini/settings.json` or `~/.gemini/extensions/Stitch/gemini-extension.json` - **Claude Code**: `~/.claude.json` Extract: - **API Key**: From the `X-Goog-Api-Key` header or auth argument - **MCP URL** (optional): From the `httpUrl` or endpoint argument (defaults to `https://stitch.googleapis.com`) > [!IMPORTANT] > If you cannot find the API key in any of these locations, or if you cannot access these files, you MUST ask the user to provide the Stitch API key. Do not proceed without a valid API key. ### 3. Run Upload Script > [!WARNING] > **Checkpoint — User Confirmation Required.** > Before running the upload script, you **MUST** pause and present the file(s) > to be uploaded (paths, sizes, and types) to the user and wait for explicit > approval. Do **NOT** execute the upload script until the user confirms. Use `run_command` to execute the Python script: ```bash python3 <SKILL_DIR>/scripts/upload_to_stitch.py \ --project-id <PROJECT_ID> \ --file-path <PATH_TO_FILE> \ --api-key <API_KEY> \ [--api-url <STITCH_API_URL>] \ [--title <SCREEN_TITLE>] \ [--generated-by <GENERATED_BY>] ``` > [!TIP] > **macOS / SSL Certificate Troubleshooting:** > If the upload fails with `ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] unable to get local issuer certificate`, this means your Python installation does not have root certificate authorities configured. > > The script automatically attempts to use the `certifi` package to load the CA bundle if it is installed in your python environment. If `certifi` is not installed, you can either install it (`pip install certifi`) or manually supply the `SSL_CERT_FILE` environment variable when running the script: > ```bash > SSL_CERT_FILE=$(python3 -c "import certifi; print(certifi.where())") python3 <SKILL_DIR>/scripts/upload_to_stitch.py \ > --project-id <PROJECT_ID> \ > --file-path <PATH_TO_FILE> \ > --api-key <API_KEY> \ > [--api-url <STITCH_API_URL>] \ > [--title <SCREEN_TITLE>] \ > [--generated-by <GENERATED_BY>] > ``` ### Supported File Types | Extension | MIME Type | |:---|:---| | `.png` | `image/png` | | `.jpg`, `.jpeg` | `image/jpeg` | | `.webp` | `image/webp` | | `.html`, `.htm` | `text/html` | | `.md` | `text/markdown` | The script auto-detects MIME type from the file extension. ### Script Options - `--project-id`: **Required**. The Stitch project ID. - `--file-path`: **Required**. Path to the local file to upload. - `--api-key`: **Required**. API key for Stitch authorization. - `--api-url`: Optional. Base URL of the Stitch API. Defaults to `https://stitch.googleapis.com`. - `--title`: Optional. Title for the uploaded screen. When uploading extracted HTML from a web app, set this to the **route path** of the page (e.g., `'/dashboard'`, `'/settings/profile'`, `'/inbox'`) so that the screen name/title in Stitch clearly identifies the route. - `--generated-by`: Optional. Specify how the uploaded file was generated (e.g., 'stitch::extract-static-html' skill, 'Claude Code', 'Codex', 'Gemini' etc.).
© google-labs-code · Apache-2.0 · google-labs-code/stitch-skills