본문으로 건너뛰기
cccskills
무료GitHub에 공개

mcp-app-scaffolding

Scaffolds MCP App project structure with correct directory layout, dependencies, entry points, and framework-specific templates. Handles React (useApp hook), Vanilla JS, Vue, Svelte, Preact, and Solid.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(2)

  • SKILL.md8.7 KB
  • README.md3.0 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

mcp-app-scaffolding

Scaffold MCP App projects from scratch with correct structure, dependencies, and framework-specific templates following the reference-code-first methodology.

Overview

MCP Apps are interactive UIs that render inline in MCP-enabled hosts (Claude Desktop, ChatGPT, VS Code, Goose, Postman). Every MCP App requires:

  • A Tool (called by the LLM/host, returns data) registered via registerAppTool
  • A Resource (serves bundled HTML UI) registered via registerAppResource
  • The tool's _meta.ui.resourceUri references the resource's URI

This skill handles the initial project scaffolding: cloning the SDK reference code, selecting a framework, generating the directory structure, and creating all entry points.

Capabilities

Reference Code Acquisition

  • Clone SDK repository at exact published npm version
  • Access framework templates from examples/basic-server-{framework}/
  • Access API reference source from src/
  • Access advanced patterns from docs/patterns.md
  • Access basic-host reference for testing from examples/basic-host/

Framework Selection Decision Tree

  • React (first-class support): SDK-provided useApp hook, useHostStyles, useHostStyleVariables, useHostFonts
  • Vanilla JS: Manual App lifecycle, simplest setup, no framework overhead
  • Vue / Svelte / Preact / Solid: Manual lifecycle management, follow team preference

Project Structure Generation

  • Directory layout with src/, build configs, entry points
  • Separate server and client source directories
  • Proper .gitignore for build artifacts

Dependency Installation

  • Runtime: @modelcontextprotocol/ext-apps, @modelcontextprotocol/sdk, zod
  • Dev: typescript, vite, vite-plugin-singlefile, tsx, concurrently
  • Framework-specific: react, react-dom, @types/react, @types/react-dom (for React)
  • Always use npm install -- never hardcode version numbers

Usage

Step 1: Clone Reference Code

# Clone SDK at the exact version published to npm
git clone --branch "v$(npm view @modelcontextprotocol/ext-apps version)" \
  --depth 1 https://github.com/modelcontextprotocol/ext-apps.git /tmp/mcp-ext-apps

Key reference locations:

PathContent
/tmp/mcp-ext-apps/examples/basic-server-react/React template
/tmp/mcp-ext-apps/examples/basic-server-vanillajs/Vanilla JS template
/tmp/mcp-ext-apps/examples/basic-server-vue/Vue template
/tmp/mcp-ext-apps/examples/basic-server-svelte/Svelte template
/tmp/mcp-ext-apps/examples/basic-server-preact/Preact template
/tmp/mcp-ext-apps/examples/basic-server-solid/Solid template
/tmp/mcp-ext-apps/src/app.tsApp class API
/tmp/mcp-ext-apps/src/server/index.tsServer registration helpers
/tmp/mcp-ext-apps/src/react/useApp.tsxReact useApp hook
/tmp/mcp-ext-apps/src/styles.tsHost styling helpers
/tmp/mcp-ext-apps/docs/patterns.mdAdvanced patterns
/tmp/mcp-ext-apps/examples/basic-host/Test host

Step 2: Framework Decision Tree

Is the team familiar with React?
  YES -> Use React with useApp hook (SDK-provided, first-class)
  NO  -> Is this a simple app with minimal UI?
           YES -> Use Vanilla JS with manual lifecycle
           NO  -> Use team's preferred framework (Vue/Svelte/Preact/Solid)
                  with manual App lifecycle management

Step 3: Initialize Project

mkdir my-mcp-app && cd my-mcp-app
npm init -y

# Core dependencies
npm install @modelcontextprotocol/ext-apps @modelcontextprotocol/sdk zod

# Dev dependencies
npm install -D typescript vite vite-plugin-singlefile tsx concurrently @types/node

# React-specific (if using React)
npm install react react-dom
npm install -D @types/react @types/react-dom

Step 4: Project Directory Layout

my-mcp-app/
├── src/
│   ├── server.ts          # MCP server with registerAppTool + registerAppResource
│   ├── main.ts            # Client UI entry (or main.tsx for React)
│   └── global.css         # Styles with host CSS variable fallbacks
├── mcp-app.html           # HTML entry point for Vite (or mcp-app.tsx for React)
├── vite.config.ts         # Vite + vite-plugin-singlefile
├── tsconfig.json          # TypeScript configuration
├── package.json           # Scripts: build:ui, build:server, build, dev
└── .gitignore             # dist/, node_modules/, /tmp/

Step 5: Package.json Scripts

{
  "scripts": {
    "build:ui": "vite build",
    "build:server": "tsc --project tsconfig.server.json",
    "build": "npm run build:ui && npm run build:server",
    "dev": "concurrently \"vite\" \"tsx watch src/server.ts\"",
    "serve": "tsx src/server.ts"
  }
}

Step 6: TypeScript Configuration

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "strict": true,
    "esModuleInterop": true,
    "jsx": "react-jsx",
    "outDir": "dist",
    "rootDir": "src"
  },
  "include": ["src/**/*.ts", "src/**/*.tsx"],
  "exclude": ["node_modules", "dist"]
}

Verification Checklist

  • SDK reference code cloned at pinned version
  • Framework selected based on team context
  • All dependencies installed via npm install (no manual versions)
  • Server entry point created (server.ts)
  • Client entry point created (main.ts / main.tsx)
  • HTML entry point created (mcp-app.html / mcp-app.tsx)
  • Vite config with vite-plugin-singlefile present
  • Build scripts defined (build:ui, build:server, build)
  • TypeScript configured correctly
  • .gitignore includes dist/ and node_modules/

Task Definition

const mcpAppScaffoldingTask = defineTask({
  name: 'mcp-app-scaffolding',
  description: 'Scaffold MCP App project structure with framework-specific templates',

  inputs: {
    appName: { type: 'string', required: true },
    framework: { type: 'string', default: 'react' },
    description: { type: 'string', default: '' },
    transport: { type: 'string', default: 'stdio' },
    existingServer: { type: 'boolean', default: false }
  },

  outputs: {
    projectDir: { type: 'string' },
    framework: { type: 'string' },
    files: { type: 'array' },
    artifacts: { type: 'array' }
  },

  async run(inputs, taskCtx) {
    return {
      kind: 'skill',
      title: `Scaffold MCP App: ${inputs.appName} (${inputs.framework})`,
      skill: {
        name: 'mcp-app-scaffolding',
        context: {
          appName: inputs.appName,
          framework: inputs.framework,
          description: inputs.description,
          transport: inputs.transport,
          existingServer: inputs.existingServer,
          instructions: [
            'Clone SDK reference code at published npm version',
            'Execute framework selection decision tree',
            'Generate project directory structure',
            'Install all dependencies via npm install',
            'Create server and client entry points',
            'Configure Vite with vite-plugin-singlefile',
            'Set up TypeScript and build scripts'
          ]
        }
      },
      io: {
        inputJsonPath: `tasks/${taskCtx.effectId}/input.json`,
        outputJsonPath: `tasks/${taskCtx.effectId}/result.json`
      }
    };
  }
});

Applicable Processes

  • create-mcp-app.js
  • add-app-to-mcp-server.js

External Dependencies

  • Node.js 18+
  • npm
  • Git (for cloning SDK reference code)
  • @modelcontextprotocol/ext-apps npm package
  • @modelcontextprotocol/sdk npm package

References

Related Skills

  • mcp-tool-resource-pattern
  • mcp-host-styling-integration
  • single-file-bundling
  • mcp-app-verification

Related Agents

  • mcp-app-architect
  • mcp-ui-developer

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Provide implementations of advanced data structures

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

a5c-ai/babysitter1.9천2026년 9월 17일 업데이트

Fresh adversarial code review with binary PASS/FAIL verdicts, evidence citations, and anchoring bias prevention via fresh reviewer spawning.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

a5c-ai/babysitter1.9천2026년 9월 17일 업데이트

WASM-based instant code transforms for simple tasks, achieving 352x speedup over LLM inference with zero cost.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

a5c-ai/babysitter1.9천2026년 9월 17일 업데이트

Coordinate Crew (persistent) and Polecat (transient) agents using Gas Town's hook-based work distribution and GUPP principle.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

a5c-ai/babysitter1.9천2026년 9월 17일 업데이트

Generate visual representations of algorithm execution

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

a5c-ai/babysitter1.9천2026년 9월 17일 업데이트

Hierarchical coordination and drift detection with frequent checkpoints, shared memory coherence validation, role specialization enforcement, and short task cycles.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

a5c-ai/babysitter1.9천2026년 9월 17일 업데이트

a5c-ai의 스킬 모두 보기

이 스킬의 문제 신고