mcp-stitch 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +289 -4
- package/dist/config/stitch.js +1 -1
- package/dist/config/stitch.js.map +1 -1
- package/dist/tools/stitchScreens.d.ts.map +1 -1
- package/dist/tools/stitchScreens.js +208 -19
- package/dist/tools/stitchScreens.js.map +1 -1
- package/docs/stitch-tools.md +5 -1
- package/package.json +4 -2
- package/scripts/release.sh +69 -0
package/README.md
CHANGED
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
MCP server for Google Stitch. It exposes Stitch project, screen, design-system, generation, edit, variant, and artifact export tools over stdio for VS Code and other MCP-compatible agents.
|
|
4
4
|
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- [Links](#links)
|
|
8
|
+
- [Status](#status)
|
|
9
|
+
- [Requirements](#requirements)
|
|
10
|
+
- [Install](#install)
|
|
11
|
+
- [Environment](#environment)
|
|
12
|
+
- [VS Code Setup](#vs-code-setup)
|
|
13
|
+
- [Cursor Setup](#cursor-setup)
|
|
14
|
+
- [Continue Setup](#continue-setup)
|
|
15
|
+
- [Claude Desktop Setup](#claude-desktop-setup)
|
|
16
|
+
- [Claude Code CLI Setup](#claude-code-cli-setup)
|
|
17
|
+
- [Gemini CLI Setup](#gemini-cli-setup)
|
|
18
|
+
- [Codex Setup](#codex-setup)
|
|
19
|
+
- [Tools](#tools)
|
|
20
|
+
- [Safety](#safety)
|
|
21
|
+
- [Development](#development)
|
|
22
|
+
- [Release Script](#release-script)
|
|
23
|
+
- [Contributing](#contributing)
|
|
24
|
+
- [Security](#security)
|
|
25
|
+
- [License](#license)
|
|
26
|
+
- [Publishing Checklist](#publishing-checklist)
|
|
27
|
+
|
|
5
28
|
## Links
|
|
6
29
|
|
|
7
30
|
- npm: https://www.npmjs.com/package/mcp-stitch
|
|
@@ -42,7 +65,7 @@ Optional:
|
|
|
42
65
|
|
|
43
66
|
- `STITCH_API_BASE_URL`: defaults to `https://stitch.googleapis.com/mcp`
|
|
44
67
|
- `STITCH_OUTPUT_DIR`: fallback output root when `PROJECT_ROOT` is not set
|
|
45
|
-
- `STITCH_TIMEOUT_MS`: defaults to `
|
|
68
|
+
- `STITCH_TIMEOUT_MS`: defaults to `180000`
|
|
46
69
|
- `STITCH_MAX_RETRIES`: defaults to `2`
|
|
47
70
|
|
|
48
71
|
## VS Code Setup
|
|
@@ -101,8 +124,256 @@ For local development before publishing, build this repo and point VS Code at th
|
|
|
101
124
|
}
|
|
102
125
|
```
|
|
103
126
|
|
|
127
|
+
Open the VS Code Command Palette with `Cmd+Shift+P` on macOS or `Ctrl+Shift+P` on Windows/Linux, then run `MCP: List Servers` to start or restart the server.
|
|
128
|
+
|
|
104
129
|
After VS Code starts the server, ask your agent to call `stitch_status` to confirm the setup.
|
|
105
130
|
|
|
131
|
+
## Cursor Setup
|
|
132
|
+
|
|
133
|
+
In Cursor, open `Cursor Settings > MCP` and add a new server:
|
|
134
|
+
|
|
135
|
+
- Name: `stitch`
|
|
136
|
+
- Type / Transport: `stdio`
|
|
137
|
+
- Command: `npx`
|
|
138
|
+
- Arguments:
|
|
139
|
+
- `-y`
|
|
140
|
+
- `mcp-stitch`
|
|
141
|
+
|
|
142
|
+
Environment variables:
|
|
143
|
+
|
|
144
|
+
- `GOOGLE_API_KEY`: your Google API key
|
|
145
|
+
- `PROJECT_ROOT`: absolute path to the project where artifacts should be exported
|
|
146
|
+
|
|
147
|
+
Cursor may not expand VS Code variables like `${workspaceFolder}`, so use a real absolute path for `PROJECT_ROOT`, for example:
|
|
148
|
+
|
|
149
|
+
```text
|
|
150
|
+
/Users/you/Workspace/my-project
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
You can also use Cursor's MCP JSON config:
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"mcpServers": {
|
|
158
|
+
"stitch": {
|
|
159
|
+
"command": "npx",
|
|
160
|
+
"args": ["-y", "mcp-stitch"],
|
|
161
|
+
"env": {
|
|
162
|
+
"GOOGLE_API_KEY": "your-key-here",
|
|
163
|
+
"PROJECT_ROOT": "/absolute/path/to/your/project"
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
After adding it, ask Cursor Agent to call `stitch_status`.
|
|
171
|
+
|
|
172
|
+
## Continue Setup
|
|
173
|
+
|
|
174
|
+
Continue supports MCP servers in Agent mode. One local setup option is to create a file like:
|
|
175
|
+
|
|
176
|
+
```text
|
|
177
|
+
.continue/mcpServers/stitch.yaml
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Example:
|
|
181
|
+
|
|
182
|
+
```yaml
|
|
183
|
+
name: Stitch MCP
|
|
184
|
+
version: 0.1.0
|
|
185
|
+
schema: v1
|
|
186
|
+
|
|
187
|
+
mcpServers:
|
|
188
|
+
- name: Stitch
|
|
189
|
+
type: stdio
|
|
190
|
+
command: npx
|
|
191
|
+
args:
|
|
192
|
+
- "-y"
|
|
193
|
+
- "mcp-stitch"
|
|
194
|
+
env:
|
|
195
|
+
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
|
|
196
|
+
PROJECT_ROOT: /absolute/path/to/your/project
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Use Continue's secrets or your local environment for `GOOGLE_API_KEY`; do not commit a literal key.
|
|
200
|
+
|
|
201
|
+
## Claude Desktop Setup
|
|
202
|
+
|
|
203
|
+
Claude Desktop loads MCP servers from its desktop configuration file. On macOS, create or edit:
|
|
204
|
+
|
|
205
|
+
```text
|
|
206
|
+
~/Library/Application Support/Claude/claude_desktop_config.json
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Add `mcp-stitch` under `mcpServers`:
|
|
210
|
+
|
|
211
|
+
```json
|
|
212
|
+
{
|
|
213
|
+
"mcpServers": {
|
|
214
|
+
"stitch": {
|
|
215
|
+
"command": "npx",
|
|
216
|
+
"args": ["-y", "mcp-stitch"],
|
|
217
|
+
"env": {
|
|
218
|
+
"GOOGLE_API_KEY": "your-key-here",
|
|
219
|
+
"PROJECT_ROOT": "/absolute/path/to/your/project"
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
If Claude Desktop cannot find `npx`, use the absolute path from `which npx` instead, for example:
|
|
227
|
+
|
|
228
|
+
```json
|
|
229
|
+
{
|
|
230
|
+
"mcpServers": {
|
|
231
|
+
"stitch": {
|
|
232
|
+
"command": "/opt/homebrew/bin/npx",
|
|
233
|
+
"args": ["-y", "mcp-stitch"],
|
|
234
|
+
"env": {
|
|
235
|
+
"GOOGLE_API_KEY": "your-key-here",
|
|
236
|
+
"PROJECT_ROOT": "/absolute/path/to/your/project"
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
After saving the config, fully quit and reopen Claude Desktop. Then ask Claude to call `stitch_status` to confirm the setup.
|
|
244
|
+
|
|
245
|
+
## Claude Code CLI Setup
|
|
246
|
+
|
|
247
|
+
Claude Code can add stdio MCP servers from the terminal:
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
claude mcp add \
|
|
251
|
+
-e GOOGLE_API_KEY=your-key-here \
|
|
252
|
+
-e PROJECT_ROOT=/absolute/path/to/your/project \
|
|
253
|
+
stitch -- npx -y mcp-stitch
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Then run:
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
claude mcp list
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Start or restart Claude Code in your project and ask it to call `stitch_status`.
|
|
263
|
+
|
|
264
|
+
## Gemini CLI Setup
|
|
265
|
+
|
|
266
|
+
Gemini CLI can load MCP servers from user or workspace settings.
|
|
267
|
+
|
|
268
|
+
For all Gemini CLI projects, create or edit:
|
|
269
|
+
|
|
270
|
+
```text
|
|
271
|
+
~/.gemini/settings.json
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
For just one workspace, create or edit:
|
|
275
|
+
|
|
276
|
+
```text
|
|
277
|
+
.gemini/settings.json
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Add `mcp-stitch` under `mcpServers`:
|
|
281
|
+
|
|
282
|
+
```json
|
|
283
|
+
{
|
|
284
|
+
"mcpServers": {
|
|
285
|
+
"stitch": {
|
|
286
|
+
"command": "npx",
|
|
287
|
+
"args": ["-y", "mcp-stitch"],
|
|
288
|
+
"env": {
|
|
289
|
+
"GOOGLE_API_KEY": "your-key-here",
|
|
290
|
+
"PROJECT_ROOT": "/absolute/path/to/your/project"
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
If Gemini CLI cannot find `npx`, use the absolute path from `which npx` instead:
|
|
298
|
+
|
|
299
|
+
```json
|
|
300
|
+
{
|
|
301
|
+
"mcpServers": {
|
|
302
|
+
"stitch": {
|
|
303
|
+
"command": "/opt/homebrew/bin/npx",
|
|
304
|
+
"args": ["-y", "mcp-stitch"],
|
|
305
|
+
"env": {
|
|
306
|
+
"GOOGLE_API_KEY": "your-key-here",
|
|
307
|
+
"PROJECT_ROOT": "/absolute/path/to/your/project"
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
Restart Gemini CLI after saving the settings. Inside Gemini CLI, run `/mcp` to list configured MCP servers and tools, then ask it to call `stitch_status`.
|
|
315
|
+
|
|
316
|
+
## Codex Setup
|
|
317
|
+
|
|
318
|
+
In the Codex app, add a new MCP server with the `+` button:
|
|
319
|
+
|
|
320
|
+
- Name: `stitch`
|
|
321
|
+
- Transport: `STDIO`
|
|
322
|
+
- Command to launch: `npx`
|
|
323
|
+
- Arguments:
|
|
324
|
+
- `-y`
|
|
325
|
+
- `mcp-stitch`
|
|
326
|
+
|
|
327
|
+
Environment variables:
|
|
328
|
+
|
|
329
|
+
- `GOOGLE_API_KEY`: your Google API key
|
|
330
|
+
- `PROJECT_ROOT`: absolute path to the project where artifacts should be exported
|
|
331
|
+
|
|
332
|
+
Codex may not expand VS Code variables like `${workspaceFolder}`, so use a real absolute path for `PROJECT_ROOT`, for example:
|
|
333
|
+
|
|
334
|
+
```text
|
|
335
|
+
/Users/you/Workspace/my-project
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
After adding the server, restart or reconnect it and ask Codex to call `stitch_status`.
|
|
339
|
+
|
|
340
|
+
For Codex CLI, add the server from the terminal:
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
codex mcp add stitch \
|
|
344
|
+
--env GOOGLE_API_KEY=your-key-here \
|
|
345
|
+
--env PROJECT_ROOT=/absolute/path/to/your/project \
|
|
346
|
+
-- npx -y mcp-stitch
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
Then run:
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
codex mcp list
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
Start or restart Codex in your project and ask it to call `stitch_status`.
|
|
356
|
+
|
|
357
|
+
For manual Codex CLI setup, add a stdio MCP server to your Codex config, usually:
|
|
358
|
+
|
|
359
|
+
```text
|
|
360
|
+
~/.codex/config.toml
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
Example:
|
|
364
|
+
|
|
365
|
+
```toml
|
|
366
|
+
[mcp_servers.stitch]
|
|
367
|
+
command = "npx"
|
|
368
|
+
args = ["-y", "mcp-stitch"]
|
|
369
|
+
|
|
370
|
+
[mcp_servers.stitch.env]
|
|
371
|
+
GOOGLE_API_KEY = "your-key-here"
|
|
372
|
+
PROJECT_ROOT = "/absolute/path/to/your/project"
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
Keep this in your local Codex config if it contains a real API key.
|
|
376
|
+
|
|
106
377
|
## Tools
|
|
107
378
|
|
|
108
379
|
- `stitch_status`
|
|
@@ -141,6 +412,22 @@ npm run build
|
|
|
141
412
|
npm run dev
|
|
142
413
|
```
|
|
143
414
|
|
|
415
|
+
## Release Script
|
|
416
|
+
|
|
417
|
+
Maintainers can publish a release and push the matching Git commit/tag with:
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
npm run release
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
The script defaults to a patch release. You can pass another npm version bump:
|
|
424
|
+
|
|
425
|
+
```bash
|
|
426
|
+
npm run release -- minor
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
It runs `npm version`, builds, previews the npm package, asks for confirmation before publishing, then commits, tags, and pushes the release.
|
|
430
|
+
|
|
144
431
|
## Contributing
|
|
145
432
|
|
|
146
433
|
Issues and pull requests are welcome. Please keep changes focused on the Stitch MCP server surface, avoid committing generated Stitch artifacts, and run:
|
|
@@ -163,9 +450,7 @@ ISC. See [LICENSE](LICENSE).
|
|
|
163
450
|
## Publishing Checklist
|
|
164
451
|
|
|
165
452
|
```bash
|
|
166
|
-
npm run
|
|
167
|
-
npm pack --dry-run
|
|
168
|
-
npm publish
|
|
453
|
+
npm run release
|
|
169
454
|
```
|
|
170
455
|
|
|
171
456
|
See [docs/stitch-tools.md](docs/stitch-tools.md) for detailed tool inputs and Stitch contract notes.
|
package/dist/config/stitch.js
CHANGED
|
@@ -14,7 +14,7 @@ function getProjectRoot() {
|
|
|
14
14
|
export function getStitchConfig() {
|
|
15
15
|
const apiKey = process.env.GOOGLE_API_KEY?.trim() ?? "";
|
|
16
16
|
const baseUrl = process.env.STITCH_API_BASE_URL?.trim() || DEFAULT_STITCH_API_BASE_URL;
|
|
17
|
-
const timeoutMs = parsePositiveInt(process.env.STITCH_TIMEOUT_MS,
|
|
17
|
+
const timeoutMs = parsePositiveInt(process.env.STITCH_TIMEOUT_MS, 180000);
|
|
18
18
|
const maxRetries = parsePositiveInt(process.env.STITCH_MAX_RETRIES, 2);
|
|
19
19
|
const rawOutputDir = process.env.STITCH_OUTPUT_DIR?.trim();
|
|
20
20
|
const outputDir = rawOutputDir
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stitch.js","sourceRoot":"","sources":["../../src/config/stitch.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,2BAA2B,GAAG,mCAAmC,CAAC;AAU/E,SAAS,gBAAgB,CAAC,KAAyB,EAAE,QAAgB;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE7D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,2BAA2B,CAAC;IAEvF,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"stitch.js","sourceRoot":"","sources":["../../src/config/stitch.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,2BAA2B,GAAG,mCAAmC,CAAC;AAU/E,SAAS,gBAAgB,CAAC,KAAyB,EAAE,QAAgB;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE7D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,2BAA2B,CAAC;IAEvF,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IAEvE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,SAAS,GAAG,YAAY;QAC5B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAC5B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,eAAe,CAAC,CAAC;IAEpD,OAAO;QACL,MAAM;QACN,OAAO;QACP,SAAS;QACT,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAoB;IAC1D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stitchScreens.d.ts","sourceRoot":"","sources":["../../src/tools/stitchScreens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"stitchScreens.d.ts","sourceRoot":"","sources":["../../src/tools/stitchScreens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0SpE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,QAiU1D"}
|
|
@@ -4,7 +4,7 @@ import { getStitchConfig } from "../config/stitch.js";
|
|
|
4
4
|
import { StitchClient } from "../services/stitchClient.js";
|
|
5
5
|
import { toBareProjectId, toBareScreenId, toScreenIdentifier } from "../utils/stitchIds.js";
|
|
6
6
|
import { resolveScreenInput } from "../utils/stitchScreenResolver.js";
|
|
7
|
-
import { formatStitchSummary } from "../utils/stitchResponse.js";
|
|
7
|
+
import { formatStitchSummary, safeJsonPreview } from "../utils/stitchResponse.js";
|
|
8
8
|
import { compactStitchResult, requireConfirmation } from "../utils/stitchToolHelpers.js";
|
|
9
9
|
function toErrorText(prefix, message) {
|
|
10
10
|
return `${prefix}\n\n${message}`;
|
|
@@ -45,6 +45,210 @@ const variantOptionsSchema = z
|
|
|
45
45
|
variantCount: z.number().int().min(1).max(5).optional(),
|
|
46
46
|
})
|
|
47
47
|
.passthrough();
|
|
48
|
+
function asRecord(value) {
|
|
49
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
50
|
+
? value
|
|
51
|
+
: null;
|
|
52
|
+
}
|
|
53
|
+
function getString(obj, key) {
|
|
54
|
+
const value = obj?.[key];
|
|
55
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
56
|
+
}
|
|
57
|
+
function getProjectIdFromName(name) {
|
|
58
|
+
if (!name || !name.startsWith("projects/"))
|
|
59
|
+
return undefined;
|
|
60
|
+
return name.split("/")[1];
|
|
61
|
+
}
|
|
62
|
+
function getScreenIdFromName(name) {
|
|
63
|
+
if (!name)
|
|
64
|
+
return undefined;
|
|
65
|
+
const marker = "/screens/";
|
|
66
|
+
const index = name.indexOf(marker);
|
|
67
|
+
return index >= 0 ? name.slice(index + marker.length) : undefined;
|
|
68
|
+
}
|
|
69
|
+
function parseContentJson(payload) {
|
|
70
|
+
const obj = asRecord(payload);
|
|
71
|
+
const content = obj?.content;
|
|
72
|
+
if (!Array.isArray(content))
|
|
73
|
+
return null;
|
|
74
|
+
for (const item of content) {
|
|
75
|
+
const text = getString(asRecord(item), "text");
|
|
76
|
+
if (!text)
|
|
77
|
+
continue;
|
|
78
|
+
try {
|
|
79
|
+
return JSON.parse(text);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
function getStructuredPayload(payload) {
|
|
88
|
+
const obj = asRecord(payload);
|
|
89
|
+
const structuredContent = obj?.structuredContent;
|
|
90
|
+
if (structuredContent && typeof structuredContent === "object") {
|
|
91
|
+
return structuredContent;
|
|
92
|
+
}
|
|
93
|
+
return parseContentJson(payload) ?? payload;
|
|
94
|
+
}
|
|
95
|
+
function screensFromPayload(payload) {
|
|
96
|
+
const structured = getStructuredPayload(payload);
|
|
97
|
+
const direct = asRecord(structured);
|
|
98
|
+
if (!direct)
|
|
99
|
+
return [];
|
|
100
|
+
const directScreens = direct.screens;
|
|
101
|
+
if (Array.isArray(directScreens)) {
|
|
102
|
+
return directScreens
|
|
103
|
+
.map((screen) => asRecord(screen))
|
|
104
|
+
.filter((screen) => Boolean(screen));
|
|
105
|
+
}
|
|
106
|
+
const outputComponents = direct.outputComponents;
|
|
107
|
+
const screens = [];
|
|
108
|
+
if (Array.isArray(outputComponents)) {
|
|
109
|
+
for (const component of outputComponents) {
|
|
110
|
+
const componentObj = asRecord(component);
|
|
111
|
+
const design = asRecord(componentObj?.design);
|
|
112
|
+
const designScreens = design?.screens;
|
|
113
|
+
if (!Array.isArray(designScreens))
|
|
114
|
+
continue;
|
|
115
|
+
for (const screen of designScreens) {
|
|
116
|
+
const screenObj = asRecord(screen);
|
|
117
|
+
if (screenObj)
|
|
118
|
+
screens.push(screenObj);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const design = asRecord(direct.design);
|
|
123
|
+
const designScreens = design?.screens;
|
|
124
|
+
if (Array.isArray(designScreens)) {
|
|
125
|
+
for (const screen of designScreens) {
|
|
126
|
+
const screenObj = asRecord(screen);
|
|
127
|
+
if (screenObj)
|
|
128
|
+
screens.push(screenObj);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return screens;
|
|
132
|
+
}
|
|
133
|
+
function firstScreenFromPayload(payload) {
|
|
134
|
+
const structured = getStructuredPayload(payload);
|
|
135
|
+
const direct = asRecord(structured);
|
|
136
|
+
if (!direct)
|
|
137
|
+
return null;
|
|
138
|
+
if (getString(direct, "name")?.includes("/screens/")) {
|
|
139
|
+
return direct;
|
|
140
|
+
}
|
|
141
|
+
const screens = screensFromPayload(payload);
|
|
142
|
+
if (screens.length > 0) {
|
|
143
|
+
return screens[0] ?? null;
|
|
144
|
+
}
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
function collectGenerationText(payload) {
|
|
148
|
+
const structured = asRecord(getStructuredPayload(payload));
|
|
149
|
+
const outputComponents = structured?.outputComponents;
|
|
150
|
+
if (!Array.isArray(outputComponents))
|
|
151
|
+
return [];
|
|
152
|
+
const text = [];
|
|
153
|
+
for (const component of outputComponents) {
|
|
154
|
+
const componentObj = asRecord(component);
|
|
155
|
+
const summary = getString(componentObj, "text");
|
|
156
|
+
const suggestion = getString(componentObj, "suggestion");
|
|
157
|
+
if (summary)
|
|
158
|
+
text.push(summary);
|
|
159
|
+
if (suggestion)
|
|
160
|
+
text.push(`Suggestion: ${suggestion}`);
|
|
161
|
+
}
|
|
162
|
+
return text;
|
|
163
|
+
}
|
|
164
|
+
function hasUrl(record) {
|
|
165
|
+
return getString(record, "downloadUrl") ? "yes" : "no";
|
|
166
|
+
}
|
|
167
|
+
function formatScreenListSummary(payload) {
|
|
168
|
+
const screens = screensFromPayload(payload);
|
|
169
|
+
if (screens.length === 0) {
|
|
170
|
+
return formatStitchSummary({
|
|
171
|
+
title: "Stitch screens",
|
|
172
|
+
data: payload,
|
|
173
|
+
itemKeys: ["screens", "items", "results"],
|
|
174
|
+
idKeys: ["name", "id", "screenId", "title"],
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
const lines = ["Stitch screens", "", `Screen count: ${screens.length}`, ""];
|
|
178
|
+
screens.forEach((screen, index) => {
|
|
179
|
+
const name = getString(screen, "name");
|
|
180
|
+
const screenId = getString(screen, "id") ?? getScreenIdFromName(name) ?? "(none)";
|
|
181
|
+
const screenshot = asRecord(screen.screenshot);
|
|
182
|
+
const htmlCode = asRecord(screen.htmlCode);
|
|
183
|
+
lines.push(`${index + 1}. ${getString(screen, "title") ?? "(untitled)"}`, `- screenId: ${screenId}`, `- screenName: ${name ?? "(none)"}`, `- width: ${getString(screen, "width") ?? "(none)"}`, `- height: ${getString(screen, "height") ?? "(none)"}`, `- hasScreenshotUrl: ${hasUrl(screenshot)}`, `- hasHtmlCodeUrl: ${hasUrl(htmlCode)}`, `- htmlMimeType: ${getString(htmlCode, "mimeType") ?? "(none)"}`, "");
|
|
184
|
+
});
|
|
185
|
+
lines.push("Tip:", "- Pass the bare screenId to stitch_get_screen with projectId to get screenshot.downloadUrl and htmlCode.downloadUrl.");
|
|
186
|
+
return lines.join("\n");
|
|
187
|
+
}
|
|
188
|
+
function formatScreenAssetSummary(title, payload) {
|
|
189
|
+
const structured = getStructuredPayload(payload);
|
|
190
|
+
const structuredObj = asRecord(structured);
|
|
191
|
+
const screen = firstScreenFromPayload(payload);
|
|
192
|
+
if (!screen) {
|
|
193
|
+
return formatStitchSummary({
|
|
194
|
+
title,
|
|
195
|
+
data: payload,
|
|
196
|
+
itemKeys: ["screens", "nodes", "items"],
|
|
197
|
+
idKeys: ["name", "id", "screenId", "title"],
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
const screenshot = asRecord(screen.screenshot);
|
|
201
|
+
const htmlCode = asRecord(screen.htmlCode);
|
|
202
|
+
const metadata = asRecord(screen.screenMetadata);
|
|
203
|
+
const designSystem = asRecord(screen.designSystem);
|
|
204
|
+
const nestedDesignSystem = asRecord(designSystem?.designSystem);
|
|
205
|
+
const screenName = getString(screen, "name");
|
|
206
|
+
const screenId = getString(screen, "id") ?? getScreenIdFromName(screenName);
|
|
207
|
+
const projectId = getString(structuredObj, "projectId") ?? getProjectIdFromName(screenName);
|
|
208
|
+
const prompt = getString(screen, "prompt");
|
|
209
|
+
const generationText = collectGenerationText(payload);
|
|
210
|
+
const lines = [
|
|
211
|
+
title,
|
|
212
|
+
"",
|
|
213
|
+
"Screen:",
|
|
214
|
+
`- screenId: ${screenId ?? "(none)"}`,
|
|
215
|
+
`- screenName: ${screenName ?? "(none)"}`,
|
|
216
|
+
`- projectId: ${projectId ?? "(not present)"}`,
|
|
217
|
+
`- title: ${getString(screen, "title") ?? "(none)"}`,
|
|
218
|
+
`- sessionId: ${getString(structuredObj, "sessionId") ?? "(not present)"}`,
|
|
219
|
+
`- width: ${getString(screen, "width") ?? "(none)"}`,
|
|
220
|
+
`- height: ${getString(screen, "height") ?? "(none)"}`,
|
|
221
|
+
`- deviceType: ${getString(screen, "deviceType") ?? "(none)"}`,
|
|
222
|
+
`- generatedBy: ${getString(screen, "generatedBy") ?? "(not present)"}`,
|
|
223
|
+
`- screenType: ${getString(screen, "screenType") ?? "(not present)"}`,
|
|
224
|
+
`- status: ${getString(metadata, "status") ?? "(not present)"}`,
|
|
225
|
+
`- agentType: ${getString(metadata, "agentType") ?? "(not present)"}`,
|
|
226
|
+
"",
|
|
227
|
+
"Next calls:",
|
|
228
|
+
`- stitch_get_screen: { "projectId": "${projectId ?? "PROJECT_ID"}", "screenId": "${screenId ?? "SCREEN_ID"}" }`,
|
|
229
|
+
"",
|
|
230
|
+
"Screenshot asset:",
|
|
231
|
+
`- name: ${getString(screenshot, "name") ?? "(none)"}`,
|
|
232
|
+
`- downloadUrl: ${getString(screenshot, "downloadUrl") ?? "(none)"}`,
|
|
233
|
+
"",
|
|
234
|
+
"HTML/code asset:",
|
|
235
|
+
`- name: ${getString(htmlCode, "name") ?? "(none)"}`,
|
|
236
|
+
`- downloadUrl: ${getString(htmlCode, "downloadUrl") ?? "(none)"}`,
|
|
237
|
+
`- mimeType: ${getString(htmlCode, "mimeType") ?? "(none)"}`,
|
|
238
|
+
"",
|
|
239
|
+
"Design system:",
|
|
240
|
+
`- name: ${getString(designSystem, "name") ?? "(not present)"}`,
|
|
241
|
+
`- displayName: ${getString(nestedDesignSystem, "displayName") ?? "(not present)"}`,
|
|
242
|
+
];
|
|
243
|
+
if (prompt) {
|
|
244
|
+
lines.push("", "Prompt:", safeJsonPreview(prompt, 800));
|
|
245
|
+
}
|
|
246
|
+
if (generationText.length > 0) {
|
|
247
|
+
lines.push("", "Generation notes:", ...generationText.map((item) => `- ${item}`));
|
|
248
|
+
}
|
|
249
|
+
lines.push("", "Raw preview:", safeJsonPreview(structured, 2000));
|
|
250
|
+
return lines.join("\n");
|
|
251
|
+
}
|
|
48
252
|
export function registerStitchScreenTools(server) {
|
|
49
253
|
server.registerTool("stitch_list_screens", {
|
|
50
254
|
description: "Lists screens for a Stitch project. If rawInput is provided, it takes precedence over projectId.",
|
|
@@ -85,12 +289,7 @@ export function registerStitchScreenTools(server) {
|
|
|
85
289
|
content: [
|
|
86
290
|
{
|
|
87
291
|
type: "text",
|
|
88
|
-
text:
|
|
89
|
-
title: "Stitch screens",
|
|
90
|
-
data: result.data,
|
|
91
|
-
itemKeys: ["screens", "items", "results"],
|
|
92
|
-
idKeys: ["name", "id", "screenId", "title"],
|
|
93
|
-
}),
|
|
292
|
+
text: formatScreenListSummary(result.data),
|
|
94
293
|
},
|
|
95
294
|
],
|
|
96
295
|
};
|
|
@@ -250,12 +449,7 @@ export function registerStitchScreenTools(server) {
|
|
|
250
449
|
content: [
|
|
251
450
|
{
|
|
252
451
|
type: "text",
|
|
253
|
-
text:
|
|
254
|
-
title: "Stitch screen",
|
|
255
|
-
data: result.data,
|
|
256
|
-
itemKeys: ["nodes", "components", "screens"],
|
|
257
|
-
idKeys: ["name", "id", "screenId", "title"],
|
|
258
|
-
}),
|
|
452
|
+
text: formatScreenAssetSummary("Stitch screen", result.data),
|
|
259
453
|
},
|
|
260
454
|
],
|
|
261
455
|
};
|
|
@@ -306,12 +500,7 @@ export function registerStitchScreenTools(server) {
|
|
|
306
500
|
content: [
|
|
307
501
|
{
|
|
308
502
|
type: "text",
|
|
309
|
-
text:
|
|
310
|
-
title: "Stitch generated screen",
|
|
311
|
-
data: result.data,
|
|
312
|
-
itemKeys: ["screens", "nodes", "items"],
|
|
313
|
-
idKeys: ["name", "id", "screenId", "title"],
|
|
314
|
-
}),
|
|
503
|
+
text: formatScreenAssetSummary("Stitch generated screen", result.data),
|
|
315
504
|
},
|
|
316
505
|
],
|
|
317
506
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stitchScreens.js","sourceRoot":"","sources":["../../src/tools/stitchScreens.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stitchScreens.js","sourceRoot":"","sources":["../../src/tools/stitchScreens.ts"],"names":[],"mappings":"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"}
|
package/docs/stitch-tools.md
CHANGED
|
@@ -13,7 +13,7 @@ This server exposes Stitch project, screen, design-system, DESIGN.md import, gen
|
|
|
13
13
|
## Optional environment variables
|
|
14
14
|
|
|
15
15
|
- STITCH_API_BASE_URL (default: https://stitch.googleapis.com/mcp)
|
|
16
|
-
- STITCH_TIMEOUT_MS (default:
|
|
16
|
+
- STITCH_TIMEOUT_MS (default: 180000)
|
|
17
17
|
- STITCH_MAX_RETRIES (default: 2)
|
|
18
18
|
- STITCH_OUTPUT_DIR (default: PROJECT_ROOT/stitch-output or cwd/stitch-output)
|
|
19
19
|
|
|
@@ -39,12 +39,14 @@ Mutating tools are marked `MUTATING` and require `confirm: true`. Without confir
|
|
|
39
39
|
|
|
40
40
|
4. stitch_list_screens
|
|
41
41
|
- Lists screens in a project.
|
|
42
|
+
- Response is formatted as a handoff inventory with title, bare `screenId`, full `screenName`, dimensions, and whether screenshot/HTML URLs are present.
|
|
42
43
|
- Input:
|
|
43
44
|
- projectId (optional if rawInput used; bare id or projects/{id}, normalized to bare id)
|
|
44
45
|
- rawInput (optional)
|
|
45
46
|
|
|
46
47
|
5. stitch_get_screen
|
|
47
48
|
- Gets one screen.
|
|
49
|
+
- Response highlights the bare `screenId`, full `screenName`, next `stitch_get_screen` call shape, `screenshot.downloadUrl`, and `htmlCode.downloadUrl` when present.
|
|
48
50
|
- Input:
|
|
49
51
|
- screenId (optional if rawInput used; full projects/{id}/screens/{screen} path, or bare screen id when projectId is also provided)
|
|
50
52
|
- projectId (optional; bare id or projects/{id}, used with bare screenId or partial title/name lookup)
|
|
@@ -52,6 +54,7 @@ Mutating tools are marked `MUTATING` and require `confirm: true`. Without confir
|
|
|
52
54
|
|
|
53
55
|
6. stitch_generate_screen_from_text
|
|
54
56
|
- Generates a screen from text.
|
|
57
|
+
- Response uses the same asset handoff format as `stitch_get_screen`, so agents can pass the returned bare `screenId` directly into later screen tools.
|
|
55
58
|
- Input:
|
|
56
59
|
- prompt (required unless rawInput used)
|
|
57
60
|
- projectId (required unless rawInput used; bare id preferred; projects/{id} is normalized by the adapter)
|
|
@@ -183,6 +186,7 @@ Mutating tools are marked `MUTATING` and require `confirm: true`. Without confir
|
|
|
183
186
|
"projectId": "abc",
|
|
184
187
|
"prompt": "Create a dashboard with KPI cards and a recent activity list"
|
|
185
188
|
}
|
|
189
|
+
- Use the returned bare `screenId` with stitch_get_screen to retrieve the screen asset URLs again later.
|
|
186
190
|
|
|
187
191
|
- Export a fetched screen:
|
|
188
192
|
- call stitch_export_screen_artifact with {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-stitch",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "MCP server for Google Stitch.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -18,12 +18,14 @@
|
|
|
18
18
|
"dist",
|
|
19
19
|
"docs/stitch-tools.md",
|
|
20
20
|
"README.md",
|
|
21
|
-
"LICENSE"
|
|
21
|
+
"LICENSE",
|
|
22
|
+
"scripts/release.sh"
|
|
22
23
|
],
|
|
23
24
|
"scripts": {
|
|
24
25
|
"dev": "tsx src/index.ts",
|
|
25
26
|
"build": "tsc",
|
|
26
27
|
"prepack": "npm run build",
|
|
28
|
+
"release": "bash scripts/release.sh",
|
|
27
29
|
"start": "node dist/index.js"
|
|
28
30
|
},
|
|
29
31
|
"keywords": [
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
VERSION_BUMP="${1:-patch}"
|
|
5
|
+
NPM_CACHE="${NPM_CACHE:-/private/tmp/mcp-stitch-npm-cache}"
|
|
6
|
+
|
|
7
|
+
case "$VERSION_BUMP" in
|
|
8
|
+
patch|minor|major|prepatch|preminor|premajor|prerelease)
|
|
9
|
+
;;
|
|
10
|
+
*)
|
|
11
|
+
echo "Invalid version bump: $VERSION_BUMP"
|
|
12
|
+
echo "Use one of: patch, minor, major, prepatch, preminor, premajor, prerelease"
|
|
13
|
+
exit 1
|
|
14
|
+
;;
|
|
15
|
+
esac
|
|
16
|
+
|
|
17
|
+
if ! git diff --quiet || ! git diff --cached --quiet; then
|
|
18
|
+
echo "Working tree has uncommitted changes. That is okay for a release,"
|
|
19
|
+
echo "but they will be included in the release commit after publish."
|
|
20
|
+
echo
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
echo "Release bump: $VERSION_BUMP"
|
|
24
|
+
echo "npm cache: $NPM_CACHE"
|
|
25
|
+
echo
|
|
26
|
+
|
|
27
|
+
read -r -p "Commit message: " COMMIT_MESSAGE
|
|
28
|
+
if [[ -z "${COMMIT_MESSAGE// }" ]]; then
|
|
29
|
+
echo "Commit message is required."
|
|
30
|
+
exit 1
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
echo
|
|
34
|
+
echo "Bumping package version..."
|
|
35
|
+
npm version "$VERSION_BUMP" --no-git-tag-version
|
|
36
|
+
|
|
37
|
+
VERSION="$(node -p "require('./package.json').version")"
|
|
38
|
+
TAG="v$VERSION"
|
|
39
|
+
|
|
40
|
+
echo
|
|
41
|
+
echo "Building..."
|
|
42
|
+
npm run build
|
|
43
|
+
|
|
44
|
+
echo
|
|
45
|
+
echo "Checking package contents..."
|
|
46
|
+
npm --cache "$NPM_CACHE" pack --dry-run
|
|
47
|
+
|
|
48
|
+
echo
|
|
49
|
+
read -r -p "Publish mcp-stitch@$VERSION to npm? [y/N] " CONFIRM_PUBLISH
|
|
50
|
+
case "$CONFIRM_PUBLISH" in
|
|
51
|
+
y|Y|yes|YES)
|
|
52
|
+
npm --cache "$NPM_CACHE" publish --access public
|
|
53
|
+
;;
|
|
54
|
+
*)
|
|
55
|
+
echo "Publish cancelled. Version files were updated but no npm package was published."
|
|
56
|
+
exit 1
|
|
57
|
+
;;
|
|
58
|
+
esac
|
|
59
|
+
|
|
60
|
+
echo
|
|
61
|
+
echo "Committing and pushing..."
|
|
62
|
+
git add .
|
|
63
|
+
git commit -m "$COMMIT_MESSAGE"
|
|
64
|
+
git tag "$TAG"
|
|
65
|
+
git push
|
|
66
|
+
git push origin "$TAG"
|
|
67
|
+
|
|
68
|
+
echo
|
|
69
|
+
echo "Released mcp-stitch@$VERSION and pushed $TAG."
|