Uploads a DESIGN.md file to a Stitch project as the first half of turning it into a Stitch Design System. Always paired with stitch-mcp-create-design-system-from-design-md, which must be called immediately after.
Scanned 8/31/2026
Install to Claude Code
npx -y skills add gabelul/stitch-kit --skill stitch-mcp-upload-design-md --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Stitch Mcp Upload Design Md?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/gabelul-stitch-mcp-upload-design-md)More formats (shields.io, HTML) on the badges page.
---
name: stitch-mcp-upload-design-md
description: Uploads a DESIGN.md file to a Stitch project as the first half of turning it into a Stitch Design System. Always paired with stitch-mcp-create-design-system-from-design-md, which must be called immediately after.
allowed-tools:
- "stitch*:*"
- "Bash"
- "Read"
---
# Stitch MCP — Upload DESIGN.md
Uploads a DESIGN.md file into a Stitch project. This is step one of a two-step pair: the upload creates a screen instance holding the design doc, and `create_design_system_from_design_md` then turns that instance into a real Design System.
**On its own, this tool does nothing useful.** Uploading without the follow-up leaves an orphan screen instance and no design system. Always run both.
## Critical prerequisite
**Only use this skill when the user explicitly mentions "Stitch"** in their request. Never trigger Stitch operations silently during regular conversation.
## When to use
- The user has a DESIGN.md and wants it applied as a Stitch Design System
- You've just produced a DESIGN.md with `stitch-design-md` and want it driving generation
- The user says "use my design doc in Stitch", "make a design system from DESIGN.md"
## Step 1: Read and encode the file
The tool takes base64, not raw markdown. The decoded content **must be valid UTF-8** — uploads with invalid bytes are rejected outright.
```bash
# macOS (BSD base64 — no -w flag, and it does not wrap by default)
base64 -i DESIGN.md
```
```bash
# Linux (GNU base64 — -w 0 disables line wrapping)
base64 -w 0 DESIGN.md
```
> Google's tool description says `base64 -w 0`, which fails on macOS with `invalid option -- w`. Use `-i` there. Getting this wrong produces a confusing shell error rather than an API error, so check your platform first.
Wrapped base64 (with embedded newlines) is a common cause of rejected uploads. Both commands above emit a single unbroken line.
## Step 2: Call the MCP tool
```json
{
"name": "upload_design_md",
"arguments": {
"projectId": "3780309359108792857",
"designMdBase64": "IyBEZXNpZ24gU3lzdGVtCgpDb2xvcnM6IC4uLg=="
}
}
```
`projectId` is **numeric only** — no `projects/` prefix. Passing the prefixed path here fails.
## Step 3: Capture the screen instance — CRITICAL
The upload creates a **screen instance**, and the next tool needs two identifiers from it. Fetch them with `get_project` (which does take the `projects/` prefix):
```json
{
"name": "get_project",
"arguments": { "name": "projects/3780309359108792857" }
}
```
From the returned `screenInstances`, take the newest entry and record both:
| Field | Example | Notes |
|-------|---------|-------|
| `id` | `a1b2c3d4e5f6` | The **screen instance** id |
| `sourceScreen` | `projects/3780.../screens/98b5...` | Full resource path |
**The trap:** `id` is the screen *instance* id, **not** the source screen id. They are different values and passing the source screen id as `id` fails. Google's own schema calls this out in bold, which is usually a sign it bites people.
## Step 4: Immediately call the follow-up
Hand both values straight to `stitch-mcp-create-design-system-from-design-md`. Don't stop between the two steps or report success to the user yet — there's no design system until the second call returns.
## ID format rules (critical — different tools need different formats)
| Tool | ID format required |
|------|-------------------|
| `upload_design_md` | Numeric only: `3780309359108792857` |
| `create_design_system_from_design_md` | Numeric only, plus the screen-instance pair |
| `get_project` | Full path: `projects/3780309359108792857` |
## Integration
- Produce the DESIGN.md first with `stitch-design-md`
- Always follow with `stitch-mcp-create-design-system-from-design-md`
- Once the design system exists, apply it with `stitch-mcp-apply-design-system` or pass its asset id to `generate_screen_from_text`
No comments yet. Be the first to comment!