본문으로 건너뛰기
cccskills
무료GitHub에 공개한국어 소개

mcp-apps-builder

mcp-use로 AI가 외부 작업과 데이터를 이용하는 MCP 서버를 설계하고 구현하도록 안내합니다. 인증, 조작 화면, 오류 처리와 배포를 다룹니다.

원문원문 설명 보기

**MANDATORY for ALL MCP server work** - mcp-use framework best practices and patterns. **READ THIS FIRST** before any MCP server work, including: - Creating new MCP servers - Modifying existing MCP servers (adding/updating tools, resources, prompts, widgets) - Debugging MCP server issues or errors - Reviewing MCP server code for quality, security, or performance - Answering questions about MCP development or mcp-use patterns - Making ANY changes to server.tool(), server.resource(), server.prompt(), or widgets This skill contains critical architecture decisions, security patterns, and common pitfalls. Always consult the relevant reference files BEFORE implementing MCP features.

연동 도구SupabaseDocker
AI 평가70점/ 100설치 방법 보기

이럴 때 유용합니다

  • 새 MCP 서버 만들기
  • 작업·데이터·재사용 프롬프트 추가
  • 목록과 선택을 위한 React 화면 구현
  • 인증·오류 처리·배포 설정 검토

한국어 소개

할 수 있는 일

mcp-apps-builder는 mcp-use로 MCP 서버를 설계하고 구현하는 가이드입니다. MCP는 AI가 외부 작업과 데이터를 이용하게 하는 방식입니다. 작업을 실행하는 Tool, 읽기 전용 데이터를 제공하는 Resource, 문구를 재사용하는 Prompt, React 조작 화면인 Widget의 역할을 구분합니다. 입력 검증, 응답 형식, 오류 처리, 인증, 화면 상태 관리, 테마 지원과 배포 방법도 다룹니다.

이럴 때 유용합니다

새 서버를 만들거나 기존 mcp-use 프로젝트에 기능을 추가할 때 참고합니다. 데이터를 나열하고 비교하며 선택하는 화면을 만들거나 코드의 보안과 성능을 검토할 때도 활용합니다.

사용 예시

  • “mcp-use로 MCP 서버를 새로 만들어 주세요.”
  • “기존 도구에 항목을 비교하고 선택하는 Widget을 추가해 주세요.”
  • “인증, 입력 검증, 오류 처리를 검토해 주세요.”

주의 사항

본문은 참고 자료를 안내하므로 구현할 때는 기능별 첨부 자료도 함께 사용합니다. 새 프로젝트는 npx create-mcp-use-app 사용을 전제로 합니다. Widget 예시는 React를, 입력 검증 예시는 Zod를 사용합니다. 인증 정보는 환경 변수로 관리하는 방침입니다.

이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.

객관 평가

AI가 SKILL.md의 내용만을 근거로 4가지 관점에서 판정했습니다. 스타 수나 인기도는 판정에 넣지 않았습니다.

지시의 명확성언제 쓰고 무엇을 하는지 알 수 있는가
A양호서버 생성, 기능 추가, 검토 시점과 기능별 참고 자료가 명시되어 있습니다.
절차의 구체성절차·입출력·예시가 구체적으로 적혀 있는가
B일부 부족프로젝트 탐지 방법과 생성 명령은 구체적이지만 기능 구현의 세부 내용은 별도 자료에 있습니다.
안전성전송·삭제·명령 실행 등을 명시하고 있는가
B일부 부족생성 위치 확인은 있으나 배포와 인증 작업의 범위 및 확인 절차는 본문에 없습니다.
도입의 용이성필요한 도구나 API 키가 적고 적혀 있는가
B일부 부족생성과 실행 명령은 있지만 실행 환경과 인증 설정의 세부 내용은 별도 자료에 있습니다.

총점은 각 항목을 A=25점, B=15점, C=5점으로 더한 값입니다. 2026년 10월 20일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.

평가가 다르다고 생각되면 재검토를 요청하기

어느 항목이 왜 다르다고 생각하는지 적어 주세요. 로그인은 필요 없습니다. SKILL.md와 대조해 평가를 다시 만들고 이곳에 반영합니다.

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

포함된 파일(20)

  • SKILL.md12.5 KB
  • LICENSE.txt8.9 KB
  • references/authentication/custom.md7.3 KB
  • references/authentication/overview.md6.8 KB
  • references/authentication/supabase.md5.6 KB
  • references/authentication/workos.md6.7 KB
  • references/foundations/architecture.md6.5 KB
  • references/foundations/concepts.md3.4 KB
  • references/foundations/deployment.md3.1 KB
  • references/foundations/quickstart.md6.4 KB
  • references/patterns/common-patterns.md21.5 KB
  • references/server/prompts.md16.9 KB
  • references/server/resources.md11.5 KB
  • references/server/response-helpers.md12.9 KB
  • references/server/tools.md10.3 KB
  • references/widgets/advanced.md20.2 KB
  • references/widgets/basics.md18.4 KB
  • references/widgets/interactivity.md24.2 KB
  • references/widgets/state.md15.9 KB
  • references/widgets/ui-guidelines.md16.5 KB

SKILL.md(원문)

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

IMPORTANT: How to Use This Skill

This file provides a NAVIGATION GUIDE ONLY. Before implementing any MCP server features, you MUST:

  1. Read this overview to understand which reference files are relevant
  2. ALWAYS read the specific reference file(s) for the features you're implementing
  3. Apply the detailed patterns from those files to your implementation

Do NOT rely solely on the quick reference examples in this file - they are minimal examples only. The reference files contain critical best practices, security considerations, and advanced patterns.


MCP Server Best Practices

Comprehensive guide for building production-ready MCP servers with tools, resources, prompts, and widgets using mcp-use.

⚠️ FIRST: New Project or Existing Project?

Before doing anything else, determine whether you are inside an existing mcp-use project.

Detection: Check the workspace for a package.json that lists "mcp-use" as a dependency, OR any .ts file that imports from "mcp-use/server".

├─ mcp-use project FOUND → Do NOT scaffold. You are already in a project.
│  └─ Skip to "Quick Navigation" below to add features.
│
├─ NO mcp-use project (empty dir, unrelated project, or greenfield)
│  └─ Scaffold first with npx create-mcp-use-app, then add features.
│     See "Scaffolding a New Project" below.
│
└─ Inside an UNRELATED project (e.g. Next.js app) and user wants an MCP server
   └─ Ask the user where to create it, then scaffold in that directory.
      Do NOT scaffold inside an existing unrelated project root.

NEVER manually create MCPServer boilerplate, package.json, or project structure by hand. The CLI sets up TypeScript config, dev scripts, inspector integration, hot reload, and widget compilation that are difficult to replicate manually.


Scaffolding a New Project

npx create-mcp-use-app my-server
cd my-server
npm run dev

For full scaffolding details and CLI flags, see quickstart.md.


Quick Navigation

Choose your path based on what you're building:

🚀 Foundations

When: ALWAYS read these first when starting MCP work in a new conversation. Reference later for architecture/concept clarification.

  1. concepts.md - MCP primitives (Tool, Resource, Prompt, Widget) and when to use each
  2. architecture.md - Server structure (Hono-based), middleware system, server.use() vs server.app
  3. quickstart.md - Scaffolding, setup, and first tool example
  4. deployment.md - Deploying to Manufact Cloud, self-hosting, Docker, managing deployments

Load these before diving into tools/resources/widgets sections.


🔐 Adding Authentication?

When: Protecting your server with OAuth (WorkOS, Supabase, or custom)

  • overview.md

    • When: First time adding auth, understanding ctx.auth, or choosing a provider
    • Covers: oauth config, user context shape, provider comparison, common mistakes
  • workos.md

    • When: Using WorkOS AuthKit for authentication
    • Covers: Setup, env vars, DCR vs pre-registered, roles/permissions, WorkOS API calls
  • supabase.md

    • When: Using Supabase for authentication
    • Covers: Setup, env vars, HS256 vs ES256, RLS-aware API calls
  • custom.md

    • When: Using any other identity provider (GitHub, Okta, Azure AD, Google, etc.)
    • Covers: Custom verification, user info extraction, provider examples

🔧 Building Server Backend (No UI)?

When: Implementing MCP features (actions, data, templates). Read the specific file for the primitive you're building.

  • tools.md

    • When: Creating backend actions the AI can call (send-email, fetch-data, create-user)
    • Covers: Tool definition, schemas, annotations, context, error handling
  • resources.md

    • When: Exposing read-only data clients can fetch (config, user profiles, documentation)
    • Covers: Static resources, dynamic resources, parameterized resource templates, URI completion
  • prompts.md

    • When: Creating reusable message templates for AI interactions (code-review, summarize)
    • Covers: Prompt definition, parameterization, argument completion, prompt best practices
  • response-helpers.md

    • When: Formatting responses from tools/resources (text, JSON, markdown, images, errors)
    • Covers: text(), object(), markdown(), image(), error(), mix()

🎨 Building Visual Widgets (Interactive UI)?

When: Creating React-based visual interfaces for browsing, comparing, or selecting data

  • basics.md

    • When: Creating your first widget or adding UI to an existing tool
    • Covers: Widget setup, useWidget() hook, isPending checks, props handling
  • state.md

    • When: Managing UI state (selections, filters, tabs) within widgets
    • Covers: useState, setState, state persistence, when to use tool vs widget state
  • interactivity.md

    • When: Adding buttons, forms, or calling tools from within widgets
    • Covers: useCallTool(), form handling, action buttons, optimistic updates
  • ui-guidelines.md

    • When: Styling widgets to support themes, responsive layouts, or accessibility
    • Covers: useWidgetTheme(), light/dark mode, autoSize, layout patterns, CSS best practices
  • advanced.md

    • When: Building complex widgets with async data, error boundaries, or performance optimizations
    • Covers: Loading states, error handling, memoization, code splitting

📚 Need Complete Examples?

When: You want to see full implementations of common use cases

  • common-patterns.md
    • End-to-end examples: weather app, todo list, recipe browser
    • Shows: Server code + widget code + best practices in context

Decision Tree

What do you need?

├─ New project from scratch
│  └─> quickstart.md (scaffolding + setup)
│
├─ OAuth / user authentication
│  └─> authentication/overview.md → provider-specific guide
│
├─ Simple backend action (no UI)
│  └─> Use Tool: server/tools.md
│
├─ Read-only data for clients
│  └─> Use Resource: server/resources.md
│
├─ Reusable prompt template
│  └─> Use Prompt: server/prompts.md
│
├─ Visual/interactive UI
│  └─> Use Widget: widgets/basics.md
│
└─ Deploy to production
   └─> deployment.md (cloud deploy, self-hosting, Docker)

Core Principles

  1. Tools for actions - Backend operations with input/output
  2. Resources for data - Read-only data clients can fetch
  3. Prompts for templates - Reusable message templates
  4. Widgets for UI - Visual interfaces when helpful
  5. Mock data first - Prototype quickly, connect APIs later

❌ Common Mistakes

Avoid these anti-patterns found in production MCP servers:

Tool Definition

  • ❌ Returning raw objects instead of using response helpers
    • ✅ Use text(), object(), widget(), error() helpers
  • ❌ Skipping Zod schema .describe() on every field
    • ✅ Add descriptions to all schema fields for better AI understanding
  • ❌ No input validation or sanitization
    • ✅ Validate inputs with Zod, sanitize user-provided data
  • ❌ Throwing errors instead of returning error() helper
    • ✅ Use error("message") for graceful error responses

Widget Development

  • ❌ Accessing props without checking isPending
    • ✅ Always check if (isPending) return <Loading/>
  • ❌ Widget handles server state (filters, selections)
    • ✅ Widgets manage their own UI state with useState
  • ❌ Missing McpUseProvider wrapper or autoSize
    • ✅ Wrap root component: <McpUseProvider autoSize>
  • ❌ Inline styles without theme awareness
    • ✅ Use useWidgetTheme() for light/dark mode support

Security & Production

  • ❌ Hardcoded API keys or secrets in code
    • ✅ Use process.env.API_KEY, document in .env.example
  • ❌ No error handling in tool handlers
    • ✅ Wrap in try/catch, return error() on failure
  • ❌ Expensive operations without caching
    • ✅ Cache API calls, computations with TTL
  • ❌ Missing CORS configuration
    • ✅ Configure CORS for production deployments

🔒 Golden Rules

Opinionated architectural guidelines:

1. One Tool = One Capability

Split broad actions into focused tools:

  • ❌ manage-users (too vague)
  • ✅ create-user, delete-user, list-users

2. Return Complete Data Upfront

Tool calls are expensive. Avoid lazy-loading:

  • ❌ list-products + get-product-details (2 calls)
  • ✅ list-products returns full data including details

3. Widgets Own Their State

UI state lives in the widget, not in separate tools:

  • ❌ select-item tool, set-filter tool
  • ✅ Widget manages with useState or setState

4. exposeAsTool Defaults to false

Widgets are registered as resources only by default. Use a custom tool (recommended) or set exposeAsTool: true to expose a widget to the model:

// ✅ ALL 4 STEPS REQUIRED for proper type inference:

// Step 1: Define schema separately
const propsSchema = z.object({
  title: z.string(),
  items: z.array(z.string()),
});

// Step 2: Reference schema variable in metadata
export const widgetMetadata: WidgetMetadata = {
  description: "...",
  props: propsSchema, // ← NOT inline z.object()
  exposeAsTool: false,
};

// Step 3: Infer Props type from schema variable
type Props = z.infer<typeof propsSchema>;

// Step 4: Use typed Props with useWidget
export default function MyWidget() {
  const { props, isPending } = useWidget<Props>(); // ← Add <Props>
  // ...
}

⚠️ Common mistake: Only doing steps 1-2 but skipping 3-4 (loses type safety)

5. Validate at Boundaries Only

  • Trust internal code and framework guarantees
  • Validate user input, external API responses
  • Don't add error handling for scenarios that can't happen

6. Prefer Widgets for Browsing/Comparing

When in doubt, add a widget. Visual UI improves:

  • Browsing multiple items
  • Comparing data side-by-side
  • Interactive selection workflows

Quick Reference

Minimal Server

import { MCPServer, text } from "mcp-use/server";
import { z } from "zod";

const server = new MCPServer({
  name: "my-server",
  title: "My Server",
  version: "1.0.0",
});

server.tool(
  {
    name: "greet",
    description: "Greet a user",
    schema: z.object({ name: z.string().describe("User's name") }),
  },
  async ({ name }) => text("Hello " + name + "!"),
);

server.listen();

Response Helpers

HelperUse WhenExample
text()Simple string responsetext("Success!")
object()Structured dataobject({ status: "ok" })
markdown()Formatted textmarkdown("# Title\nContent")
widget()Visual UIwidget({ props: {...}, output: text(...) })
mix()Multiple contentsmix(text("Hi"), image(url))
error()Error responseserror("Failed to fetch data")
resource()Embed resource refsresource("docs://guide", "text/markdown")

리뷰

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

댓글

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

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

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

0 / 1,000자

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

같은 저장소의 스킬

advisor-orchestrator-worker

무료요약 있음AI 평가 80점

대규모 조사나 생성 작업을 여러 AI 모델에 분담해 계획 검토, 병렬 실행, 결과 검증과 통합을 진행합니다. 담당별 진행 상황과 재시도도 기록합니다.

  • 여러 경쟁사를 병렬로 조사
  • 대규모 생성 작업 분담
  • 조언자에게 계획이나 초안 검토 요청
Shubhamsaboo/awesome-llm-apps14.3만2026년 10월 19일 업데이트

chatgpt-app-builder

무료요약 있음AI 평가 70점

ChatGPT 안에서 조작하는 앱의 구상부터 React 위젯과 상태 공유 구현까지 안내합니다. 현재는 사용이 권장되지 않으며 후속 스킬로 전환하도록 안내합니다.

  • ChatGPT 앱의 기능 정리
  • 서버와 연동하는 화면 구현
  • 화면 상태를 ChatGPT와 공유
Shubhamsaboo/awesome-llm-apps14.3만2026년 10월 19일 업데이트

commit-archaeologist

무료요약 있음AI 평가 100점

로컬 Git 기록에서 코드가 추가된 배경과 변경 의도를 조사합니다. 최초 커밋과 반복해서 함께 바뀐 파일을 추적하고 수정 전에 확인할 사항을 정리합니다.

  • 낯선 함수가 존재하는 이유 파악
  • 수정 전 과거 제약 확인
  • 임시 우회 방법이 남아 있는 배경 조사
Shubhamsaboo/awesome-llm-apps14.3만2026년 10월 19일 업데이트

dependency-doctor

무료요약 있음AI 평가 100점

Python과 JavaScript 의존성 파일의 버전 미지정, 중복, 고정 버전 충돌, 오래된 호환 패키지를 점검합니다. 문제의 영향을 쉽게 설명하고 검토하기 쉬운 수정안을 제시합니다.

  • 설치 실패의 상세 조사 전 사전 점검
  • 오래된 Python 호환 패키지 확인
  • 중복 항목과 고정 버전 충돌 점검
Shubhamsaboo/awesome-llm-apps14.3만2026년 10월 19일 업데이트

first-reader

무료요약 있음AI 평가 100점

공개 전 원고를 예상 독자의 관점에서 읽고, 읽기 시작할지, 어디서 관심이 줄어드는지, 무엇을 기억하는지 확인합니다. 글을 고치지 않고 독자의 반응을 보고합니다.

  • 게시물을 끝까지 읽을지 확인
  • 독자가 읽기를 멈추는 지점 파악
  • 수정 전후 독자 반응 비교
Shubhamsaboo/awesome-llm-apps14.3만2026년 10월 19일 업데이트

mcp-builder

무료요약 있음AI 평가 80점

mcp-use로 MCP 서버의 작업, 데이터, 재사용 프롬프트와 조작 화면을 설계하는 이전 가이드입니다. 현재는 사용이 권장되지 않으며 mcp-app-builder로 전환하도록 안내합니다.

  • 기존 mcp-use 서버 구조 파악
  • Tool·Resource·Prompt 예시 확인
  • 대화형 Widget 설계 검토
Shubhamsaboo/awesome-llm-apps14.3만2026년 10월 19일 업데이트

Shubhamsaboo의 스킬 모두 보기

이 스킬의 문제 신고