Skip to main content
Glama
README.md
# MCP Kkebi πŸš€

![MCP](https://img.shields.io/badge/MCP-Compatible-blue?style=flat-square)
![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue?style=flat-square&logo=typescript)
![React](https://img.shields.io/badge/React-18.3-61DAFB?style=flat-square&logo=react)
![License](https://img.shields.io/badge/License-MIT-green?style=flat-square)

ChatGPT와 Claudeμ—μ„œ μ‹€ν–‰λ˜λŠ” μΈν„°λž™ν‹°λΈŒ UI μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μΆ•ν•˜λŠ” MCP μ•±μž…λ‹ˆλ‹€.

> πŸ”— **Repository**: [github.com/mimsut/mcp_kkebi](https://github.com/mimsut/mcp_kkebi)

## ✨ νŠΉμ§•

- 🎨 **μΈν„°λž™ν‹°λΈŒ μœ„μ ―**: React 기반의 μ•„λ¦„λ‹€μš΄ UI μ»΄ν¬λ„ŒνŠΈ
- πŸ€– **AI 톡합**: ChatGPT와 Claudeμ—μ„œ λ°”λ‘œ μ‚¬μš© κ°€λŠ₯
- ⚑️ **λΉ λ₯Έ 개발**: TypeScript + Hot Reload
- πŸ“¦ **μ‰¬μš΄ 배포**: Manufact Cloud 지원
- πŸ”§ **ν™•μž₯ κ°€λŠ₯**: μƒˆλ‘œμš΄ 도ꡬ와 μœ„μ ― μ‰½κ²Œ μΆ”κ°€

## πŸš€ λΉ λ₯Έ μ‹œμž‘

```bash
# Clone
git clone https://github.com/mimsut/mcp_kkebi.git
cd mcp_kkebi

# μ„€μΉ˜
npm install

# 개발 λͺ¨λ“œ
npm run dev

# λΉŒλ“œ
npm run build
```

## πŸ“¦ ν”„λ‘œμ νŠΈ ꡬ쑰

```
my-mcp-app/
β”œβ”€β”€ src/
β”‚   └── index.ts              # MCP μ„œλ²„ μ§„μž…μ  (TypeScript)
β”œβ”€β”€ dist/
β”‚   └── index.js              # λΉŒλ“œλœ μ„œλ²„ (JavaScript)
β”œβ”€β”€ resources/
β”‚   β”œβ”€β”€ example-widget/       # 예제 μœ„μ ―
β”‚   β”‚   β”œβ”€β”€ widget.tsx        # React μ»΄ν¬λ„ŒνŠΈ
β”‚   β”‚   └── types.ts          # Props νƒ€μž…
β”‚   └── counter-widget/       # μΈν„°λž™ν‹°λΈŒ μΉ΄μš΄ν„° μœ„μ ―
β”‚       β”œβ”€β”€ widget.tsx
β”‚       └── types.ts
β”œβ”€β”€ package.json
β”œβ”€β”€ tsconfig.json
β”œβ”€β”€ mcp-config.json           # MCP μ„€μ • 파일
└── README.md
```

## πŸ—οΈ μ•„ν‚€ν…μ²˜

- **Server**: MCP 도ꡬ(tools)와 λ¦¬μ†ŒμŠ€(resources) μ •μ˜ (`src/index.ts`)
- **Widget**: `resources/` ν΄λ”μ˜ React μ»΄ν¬λ„ŒνŠΈλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λ Œλ”λ§
- **Protocol**: MCPκ°€ μžλ™μœΌλ‘œ 톡신 처리

## πŸš€ μ‹œμž‘ν•˜κΈ°

### 1. μ˜μ‘΄μ„± μ„€μΉ˜

```bash
npm install
```

### 2. λΉŒλ“œ

```bash
npm run build
```

### 3. 개발 λͺ¨λ“œ μ‹€ν–‰ (ν•« λ¦¬λ‘œλ“œ)

```bash
npm run dev
```

### 4. ν”„λ‘œλ•μ…˜ μ‹€ν–‰

```bash
npm start
```

## πŸ”§ Claude Desktop에 μ—°κ²°ν•˜κΈ°

### macOS

1. Claude Desktop μ„€μ • 파일 μ—΄κΈ°:
```bash
nano ~/Library/Application\ Support/Claude/claude_desktop_config.json
```

2. λ‹€μŒ μ„€μ • μΆ”κ°€:
```json
{
  "mcpServers": {
    "my-mcp-app": {
      "command": "node",
      "args": [
        "/Users/user/Downloads/b_ru8Xi2QdWzH-1771717682115/my-mcp-app/dist/index.js"
      ]
    }
  }
}
```

3. Claude Desktop μž¬μ‹œμž‘

### Windows

μ„€μ • 파일 μœ„μΉ˜: `%APPDATA%\Claude\claude_desktop_config.json`

## πŸ’¬ ChatGPT에 μ—°κ²°ν•˜κΈ°

1. ChatGPT μ„€μ •μ—μ„œ "Custom Actions" λ˜λŠ” "GPT" μ„Ήμ…˜μœΌλ‘œ 이동
2. MCP μ„œλ²„ μΆ”κ°€:
   - μ„œλ²„ URL: 둜컬 λ˜λŠ” 배포된 URL
   - ν”„λ‘œν† μ½œ: MCP (Model Context Protocol)

## 🎨 μœ„μ ― μ‚¬μš©ν•˜κΈ°

### Example Widget
ν™˜μ˜ λ©”μ‹œμ§€μ™€ κΈ°λ³Έ 정보λ₯Ό ν‘œμ‹œν•˜λŠ” κ°„λ‹¨ν•œ μœ„μ ―μž…λ‹ˆλ‹€.

**μ‚¬μš©λ²•:**
```
widget://example
```

**νŠΉμ§•:**
- κ·ΈλΌλ””μ–ΈνŠΈ λ°°κ²½
- ν™˜μ˜ λ©”μ‹œμ§€
- μƒνƒœ ν‘œμ‹œ

### Counter Widget
μ‚¬μš©μž μƒν˜Έμž‘μš©μ„ λ³΄μ—¬μ£ΌλŠ” μΈν„°λž™ν‹°λΈŒ μΉ΄μš΄ν„° μœ„μ ―μž…λ‹ˆλ‹€.

**μ‚¬μš©λ²•:**
```
widget://counter
```

**νŠΉμ§•:**
- 증가/κ°μ†Œ λ²„νŠΌ
- μ΄ˆκΈ°ν™” κΈ°λŠ₯
- μ‹€μ‹œκ°„ μƒνƒœ μ—…λ°μ΄νŠΈ
- λΆ€λ“œλŸ¬μš΄ μ• λ‹ˆλ©”μ΄μ…˜

## πŸ› οΈ 도ꡬ (Tools)

### greet
μ‚¬μš©μžμ—κ²Œ ν™˜μ˜ λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

**νŒŒλΌλ―Έν„°:**
- `name` (string, ν•„μˆ˜): μ‚¬μš©μž 이름

**예제:**
```json
{
  "name": "홍길동"
}
```

**응닡:**
```
μ•ˆλ…•ν•˜μ„Έμš”, ν™κΈΈλ™λ‹˜! MCP 앱에 μ˜€μ‹  것을 ν™˜μ˜ν•©λ‹ˆλ‹€! πŸŽ‰
```

## πŸ§ͺ ν…ŒμŠ€νŠΈν•˜κΈ°

### 둜컬 ν…ŒμŠ€νŠΈ

```bash
# 개발 λͺ¨λ“œλ‘œ μ‹€ν–‰
npm run dev

# λ‹€λ₯Έ ν„°λ―Έλ„μ—μ„œ MCP Inspector μ‚¬μš©
npx @modelcontextprotocol/inspector node dist/index.js
```

### Inspectorμ—μ„œ 확인

MCP Inspectorλ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹€μŒμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€:
- λͺ¨λ“  도ꡬ와 λ¦¬μ†ŒμŠ€ λͺ©λ‘ 확인
- ν…ŒμŠ€νŠΈ μž…λ ₯으둜 도ꡬ 호좜
- μœ„μ ― 미리보기 라이브둜 확인
- μ½”λ“œ λ³€κ²½ μ‹œ μ¦‰μ‹œ ν•« λ¦¬λ‘œλ“œ

## πŸ“ μƒˆλ‘œμš΄ μœ„μ ― μΆ”κ°€ν•˜κΈ°

1. `resources/` 폴더에 μƒˆ 디렉토리 생성:
```bash
mkdir resources/my-widget
```

2. `types.ts` 파일 생성:
```typescript
export interface MyWidgetProps {
  // props μ •μ˜
}
```

3. `widget.tsx` 파일 생성:
```tsx
import React from "react";
import type { MyWidgetProps } from "./types";

export default function MyWidget(props: MyWidgetProps) {
  return <div>{/* μœ„μ ― UI */}</div>;
}
```

4. `src/index.ts`에 λ¦¬μ†ŒμŠ€ ν•Έλ“€λŸ¬ μΆ”κ°€:
```typescript
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
  // ...
  if (uri === "widget://my-widget") {
    return {
      contents: [{
        uri: "widget://my-widget",
        mimeType: "application/vnd.mcp.widget+json",
        text: JSON.stringify({
          type: "my-widget",
          props: { /* props */ },
        }),
      }],
    };
  }
  // ...
});
```

## 🌐 λ°°ν¬ν•˜κΈ°

### Manufact Cloud에 배포

1. [manufact.com](https://manufact.com) 접속
2. GitHub 리포지토리 μ—°κ²°
3. `main` λΈŒλžœμΉ˜μ— push β†’ μžλ™ 배포

λ˜λŠ” CLI μ‚¬μš©:

```bash
npx @mcp-use/cli deploy
```

### ν™˜κ²½ λ³€μˆ˜ μ„€μ •

ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ ν•„μš”ν•œ ν™˜κ²½ λ³€μˆ˜κ°€ μžˆλ‹€λ©΄ `.env` 파일 생성:

```bash
# .env
API_KEY=your_api_key
DATABASE_URL=your_database_url
```

## 🎯 평가 κΈ°μ€€ (해컀톀)

ν”„λ‘œμ νŠΈλŠ” λ‹€μŒ κΈ°μ€€μœΌλ‘œ ν‰κ°€λ©λ‹ˆλ‹€:

### 1. 독창성 (30점) 🌟
- μƒˆλ‘œμš΄ κ°œλ…μ˜ μ°½μ˜μ„±
- "이런 것도 MCP μ•±μœΌλ‘œ λ§Œλ“€ 수 μžˆκ΅¬λ‚˜!" ν•˜λŠ” 놀라움

### 2. μ‹€μš©μ„± (30점) πŸ’‘
- μ‹€μ œ 문제 ν•΄κ²° λ˜λŠ” μ›Œν¬ν”Œλ‘œμš° κ°œμ„ 
- μ‚¬μš©μžμ—κ²Œ μ‹€μ§ˆμ μΈ κ°€μΉ˜ 제곡

### 3. μœ„μ ―-λͺ¨λΈ μƒν˜Έμž‘μš© (20점) πŸ”„
- `useCallTool()`, `sendFollowUpMessage()` λ“± μ–‘λ°©ν–₯ 톡신 ν™œμš©
- `state()`, `setState()` ν™œμš©
- μœ„μ ―κ³Ό AI λͺ¨λΈ κ°„μ˜ 효과적인 μƒν˜Έμž‘μš©

### 4. UI/UX (10점) 🎨
- μ„Έλ ¨λ˜κ³  직관적인 κ²½ν—˜
- λ°˜μ‘ν˜• λ””μžμΈ
- μ ‘κ·Όμ„±

### 5. ν”„λ‘œλ•μ…˜ μ€€λΉ„ (10점) πŸš€
- OAuth 인증
- μ˜¨λ³΄λ”© ν”Œλ‘œμš°
- μ—λŸ¬ 처리
- μ‚¬μš©μž μ„€μ • 관리

## πŸ“š μΆ”κ°€ λ¦¬μ†ŒμŠ€

- [mcp-use λ¬Έμ„œ](https://docs.mcp-use.com)
- [GitHub 리포지토리](https://github.com/mcp-use/mcp-use)
- [해컀톀 μŠ€νƒ€ν„° 레포](https://github.com/mcp-use/hack-y)
- [Inspector (온라인)](https://inspector.mcp-use.com)
- [MCP 곡식 λ¬Έμ„œ](https://modelcontextprotocol.io)

## 🀝 κΈ°μ—¬ν•˜κΈ°

μ΄μŠˆλ‚˜ PR은 μ–Έμ œλ‚˜ ν™˜μ˜ν•©λ‹ˆλ‹€!

## πŸ“„ λΌμ΄μ„ΌμŠ€

MIT License

---

## πŸŽ‰ λΉ λ₯Έ μ‹œμž‘ μš”μ•½

```bash
# 1. μ˜μ‘΄μ„± μ„€μΉ˜
npm install

# 2. λΉŒλ“œ
npm run build

# 3. Claude Desktop에 μ—°κ²°
# ~/Library/Application Support/Claude/claude_desktop_config.json νŽΈμ§‘

# 4. Claude Desktop μž¬μ‹œμž‘

# 5. Claudeμ—μ„œ ν…ŒμŠ€νŠΈ
# "greet" 도ꡬ ν˜ΈμΆœν•˜κ±°λ‚˜ μœ„μ ― ν‘œμ‹œ μš”μ²­
```

이제 ChatGPT와 Claudeμ—μ„œ μ‹€ν–‰λ˜λŠ” λ©‹μ§„ μΈν„°λž™ν‹°λΈŒ MCP 앱을 λ§Œλ“€ μ€€λΉ„κ°€ λ˜μ—ˆμŠ΅λ‹ˆλ‹€! πŸš€βœ¨

TDQS

B3.2/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a distinct purpose: calculate handles math, get_time provides current time, greet shows a welcome message. There is no overlap or ambiguity.

Naming Consistency4/5

All tools use lowercase verb-based names. 'get_time' uses an underscore, while 'calculate' and 'greet' are single words, but the pattern is still consistent and predictable.

Tool Count3/5

With only 3 tools, the server is on the low end of the appropriate range. While it covers basic utilities, a slightly larger set (e.g., 5-10 tools) would feel more substantial.

Completeness4/5

For a simple utility server, the tools cover time, math, and greeting. Minor gaps like a date tool or advanced math operations could exist, but the set is functional and cohesive.

Maintenance

ActivityInactive
ResponsivenessNo issues