MCP Kkebi
by mimsut
README.md
# MCP Kkebi π




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