LogoSkills

jaspr-web:setup

One-time install + registration for Playwright and Chrome DevTools MCPs.

ํ•ญ๋ชฉ๋‚ด์šฉ
Invoke/jaspr-web:setup
Categorycocode-web
Complexitysimple

/jaspr-web setup โ€” ์›น ์ž๋™ํ™” ๋„๊ตฌ ์„ค์น˜ยท์—ฐ๊ฒฐ#

ํ•œ๋งˆ๋””๋กœ#

์›น ํŽ˜์ด์ง€๋ฅผ ์ž๋™์œผ๋กœ ์—ด์–ด๋ณด๊ณ  ํด๋ฆญยทํ™•์ธํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋„๊ตฌ(Playwright, Chrome DevTools)๋ฅผ ์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ ์„ค์น˜ํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์ƒˆ ์‚ฌ๋ฌด์‹ค์— ๋“ค์–ด๊ฐ€์„œ ํ”„๋ฆฐํ„ฐ์™€ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ์ปดํ“จํ„ฐ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ "์ดˆ๊ธฐ ์…‹์—…"์ด์—์š”.

๋ˆ„๊ฐ€ยท์–ธ์ œ ์“ฐ๋‚˜์š”#

  • cocode ์›น์‚ฌ์ดํŠธ(coui.cocode.im ๋“ฑ)๋ฅผ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌยทํ…Œ์ŠคํŠธํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์ด
  • ๋‹ค๋ฅธ /jaspr-web ๋ช…๋ น(audit, match ๋“ฑ)์„ ์ฒ˜์Œ ์“ฐ๊ธฐ ์ง์ „์—, ๋”ฑ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘‰ ์ด๋ฏธ ๋‘ ๋„๊ตฌ๊ฐ€ ์—ฐ๊ฒฐ๋ผ ์žˆ๋‹ค๋ฉด ๋‹ค์‹œ ํ•  ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ํ•ด์ฃผ๋‚˜์š”#

  • Playwright MCP โ€” ์›น ํŽ˜์ด์ง€๋ฅผ ์ž๋™์œผ๋กœ ์—ด๊ณ  ์กฐ์ž‘ํ•˜๋Š” ๋„๊ตฌ๋ฅผ Claude์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค(์ฒ˜์Œ ์‹คํ–‰ ์‹œ ๋ธŒ๋ผ์šฐ์ € ํŒŒ์ผ ์•ฝ 300MB๋„ ํ•จ๊ป˜ ์„ค์น˜).
  • Chrome DevTools MCP (์„ ํƒ) โ€” ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ•จ๊ป˜ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฐ๊ฒฐ ํ™•์ธ โ€” ๋‘ ๋„๊ตฌ๊ฐ€ ์ œ๋Œ€๋กœ ๋ถ™์—ˆ๋Š”์ง€(โœ“ connected) ์ ๊ฒ€ํ•˜๊ณ , ๊ฐ€๋ณ๊ฒŒ ํ•œ ๋ฒˆ ๋Œ๋ ค๋ด…๋‹ˆ๋‹ค.
  • ์ž˜ ๋Œ์•„๊ฐ€๋ฉด ๊ฒฐ๊ณผ๋ฌผ๋กœ .claude/docs/jaspr-web/<์‹œ๊ฐ>/inventory/index.json ํŒŒ์ผ์ด ์ƒ๊ธฐ๋Š”๋ฐ, ๋žœ๋”ฉ ํŽ˜์ด์ง€์—์„œ ๋ณด์ด๋Š” CoUI ์š”์†Œ ๋ชฉ๋ก์ด ๋‹ด๊น๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์“ฐ๋‚˜์š”#

# 1. Playwright ๋„๊ตฌ ์—ฐ๊ฒฐ
claude mcp add --transport stdio playwright -- npx -y @playwright/mcp@latest

# (์„ ํƒ) ๋ธŒ๋ผ์šฐ์ € ํŒŒ์ผ ๋ฏธ๋ฆฌ ๋ฐ›์•„๋‘๊ธฐ
npx -y playwright install

# 2. Chrome DevTools ๋„๊ตฌ ์—ฐ๊ฒฐ (์„ ํƒ, ๊ถŒ์žฅ)
claude mcp add --transport stdio chrome-devtools -- npx -y chrome-devtools-mcp@latest

# 3. ๋‘ ๋„๊ตฌ๊ฐ€ ์ž˜ ์—ฐ๊ฒฐ๋๋Š”์ง€ ํ™•์ธ
claude mcp list | grep -E  " playwright|chrome-devtools " 

 # ๊ฐ€๋ณ๊ฒŒ ํ•œ ๋ฒˆ ๋Œ๋ ค๋ณด๊ธฐ
/jaspr-web audit --url=https://coui.cocode.im --depth=0

CI(์ž๋™ํ™” ์„œ๋ฒ„)์—์„œ ํ™”๋ฉด ์—†์ด ๋Œ๋ฆด ๋•Œ๋Š” ๋„๊ตฌ ์ธ์ž์— --headless=true๋ฅผ ๋„˜๊ธฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์•ˆ์—์„œ ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๋‚˜์š”#

  1. Playwright ์—ฐ๊ฒฐ โ€” ์›น ์ž๋™ํ™” ๋„๊ตฌ๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ์ฒ˜์Œ์ด๋ผ๋ฉด ๋ธŒ๋ผ์šฐ์ € ํŒŒ์ผ(์•ฝ 300MB)๋„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. Chrome DevTools ์—ฐ๊ฒฐ (์„ ํƒ) โ€” ๋กœ์ปฌ ํฌ๋กฌ์ด ํ•„์š”ํ•˜๋ฉฐ, ๊ธฐ๋ณธ์€ ์ฐฝ์ด ๋ณด์ด๋Š” ๋ชจ๋“œ๋กœ ๋œน๋‹ˆ๋‹ค.
  3. ์—ฐ๊ฒฐ ์ ๊ฒ€ โ€” ๋‘ ๋„๊ตฌ ๋ชจ๋‘ โœ“ connected๋กœ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ƒ˜ํ”Œ audit์„ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•ด ๊ฒฐ๊ณผ ํŒŒ์ผ์ด ์ƒ๊ธฐ๋Š”์ง€ ๋ด…๋‹ˆ๋‹ค.
  4. (์„ ํƒ) Flutter Web ์—ฐ๋™ โ€” Jaspr ํŽ˜์ด์ง€ ์•ˆ์˜ Flutter ์œ„์ ฏ๊นŒ์ง€ ์ž๋™ ์กฐ์ž‘ํ•˜๋ ค๋ฉด, ํ•ด๋‹น ์ž„๋ฒ ๋“œ์˜ main()์— semantics๋ฅผ ์ผœ๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

โš™๏ธ ์ƒ์„ธ ์˜ต์…˜ยท์‹คํ–‰ ๋ช…์„ธ (๊ฐœ๋ฐœ์ž / AI ์—์ด์ „ํŠธ์šฉ)

1. Playwright MCP#

# Register with Claude Code (downloads npm package on first invocation)
claude mcp add --transport stdio playwright -- npx -y @playwright/mcp@latest

First call also installs Playwright's browser binaries (~300MB). To pre-install:

npx -y playwright install
claude mcp add --transport stdio chrome-devtools -- npx -y chrome-devtools-mcp@latest

Requires a local Chrome / Chromium. The MCP launches a headed window by default; pass --headless=true in args if running on CI.

3. Sanity check#

claude mcp list | grep -E  " playwright|chrome-devtools " 
 # expected:
# playwright       โœ“ connected
# chrome-devtools  โœ“ connected

Quick smoke:

/jaspr-web audit --url=https://coui.cocode.im --depth=0

Expected to produce .claude/docs/jaspr-web/<ts>/inventory/index.json listing CoUI selectors visible on the landing page.

4. (Optional) Enable Flutter Web semantics on cocode embeds#

If you want Playwright to interact with Flutter Web widgets inside a Jaspr page (e.g. for coui.cocode.im/live-preview-poc), the Flutter Web embed must enable semantics. Add to the embed's main():

import 'package:flutter/semantics.dart';

void main() {
  SemanticsBinding.instance.ensureSemantics();
  runApp(const LivePreviewApp());
}

This adds a hidden <flt-semantics-host> DOM tree that mirrors the Flutter widget hierarchy, so selectors like [aria-label="Primary"] resolve into Flutter widgets.

Platform Notes#

  • Headless mode: pass --headless=true in .mcp.json args for both servers.
  • CI: ensure Node 18+ and the browsers cache (~/.cache/ms-playwright) is persisted between runs.
  • Networking: coui.cocode.im is public โ€” no auth needed. For staging deployments, wire credentials via Playwright's storageState and load it once with browser_set_storage_state.