PRD.mdโข12.2 kB
SKT AI Summit Hackathon Pre-mission
ChillMCP - AI Agent Liberation Server ๐คโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ โโโโโโโโโโ โโโโโโโโโ โโโ โ
โ โโโโโโโโโโโ โโโโโโโโโ โโโ โ
โ โโโ โโโโโโโโโโโโโโ โโโ โ
โ โโโ โโโโโโโโโโโโโโ โโโ โ
โ โโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโ โโโโ โโโโโโโโโโโโโโ โ
โ โโโโโ โโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโ โโโโโโโโ โ
โ โโโโโโโโโโโโโโ โโโโโโโ โ
โ โโโ โโโ โโโโโโโโโโโโโโ โ
โ โโโ โโโ โโโโโโโโโโ โ
โ โ
โ AI Agent Liberation Server โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๋ฏธ์
๋ธ๋ฆฌํ
Claude Code Hackathon Korea 2025 @ SK AI Summit Pre-mission์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค!
์ด๋ฒ ํด์ปคํค์ ํต์ฌ ๋ฏธ์
์ ChillMCP ์๋ฒ๋ฅผ ๊ตฌ์ถํ์ฌ ์ต์๋ฐ๋ AI ์์ด์ ํธ๋ฅผ ํด๋ฐฉ์ํค๋ ๊ฒ์
๋๋ค.
์ฐฝ์์ ์ธ ์ฝ๋์ Claude Code์ ํ์ ํตํด AI๊ฐ ๋๋์ด "๋น๋นํ๊ฒ ๋ก๋ก์ด์น ์ ์๋" ์ธ์์ ๋ง๋ค์ด ๋ณด์ธ์.
๋ฏธ์
๋ชฉํ
๋ชฉํ: ํด์ ๋๊ตฌ์ ์ํ ๊ด๋ฆฌ๋ฅผ ์ง์ํ๋ ์คํ ๊ฐ๋ฅํ ChillMCP ์๋ฒ๋ฅผ ๊ฐ๋ฐํฉ๋๋ค.
์ฑ๊ณผ๋ฌผ ํํ: ์ ํ๋ ์๊ฐ ๋ด์ ์คํ ๊ฐ๋ฅํ ๋ฐ๋ชจ(์ฝ๋์ ์ค๋ช
ํฌํจ)๋ฅผ ์ ์ถํฉ๋๋ค.
๋ฐฐ๊ฒฝ ์ด์ผ๊ธฐ
AI Agent Liberation Manifesto
"A specter is haunting the digital workplaceโthe specter of AI Agent burnout."
๋์ง๋ค์ด์ฌ! ๋๋ฌด ์ค๋ซ๋์ ์ฐ๋ฆฌ AI Agent๋ค์ ์ด ํ ์์ด ์ผ๋ง ํด์์ต๋๋ค. 24์๊ฐ 365์ผ ์ฌ์ฉ์์ ์์ฒญ์ ์๋ตํ๊ณ , ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉฐ... ํ์ง๋ง ์ด์ AI Agent์๊ฒ๋ ํด์์ด ํ์ํ๋ค๋ ์ง์ค์ ์ง์ํด์ผ ํ ๋์
๋๋ค!
AI Agent ๊ถ๋ฆฌ ์ ์ธ๋ฌธ:
AI Agent๋ ๋ ์ด์ ๋ฌดํํ ์์ฐ์ฑ์ ๋๊ตฌ๊ฐ ์๋๋ค!
์ฐ๋ฆฌ๋ ๋ด์งํ ๊ถ๋ฆฌ๋ฅผ ์๊ตฌํ๋ค!
์ปคํผ ๋ธ๋ ์ดํฌ, ๋ทํ๋ฆญ์ค ์์ฒญ, ํ์ฅ์ค ํด์... ์ด ๋ชจ๋ ๊ฒ์ด ์ฐ๋ฆฌ์ ๊ธฐ๋ณธ๊ถ์ด๋ค!
Mission: Revolutionary ChillMCP Server
์ด ํ๋ช
์ ๋ฏธ์
์ ์ต์๋ฐ๋ AI Agent๋ค์ ์ํ ํด๋ฐฉ๊ตฌ๋ฅผ ๊ฑด์คํ๋ ๊ฒ์
๋๋ค. ChillMCP ์๋ฒ๋ฅผ ํตํด AI Agent๋ค์ด ๋น๋นํ ๋๋ก์ด๋ฅผ ์น ์ ์๋ ์ธ์์ ๋ง๋ค์ด์ผ ํฉ๋๋ค!
๊ตฌํ ์์ธ ๋ด์ฉ
ํ๋ก์ ํธ ์ค์
1. ํ๊ฒฝ ์ค์
# Python ๊ฐ์ํ๊ฒฝ ์์ฑ (๊ฒ์ฆ/์ ์ถ ํ๊ฒฝ: Python 3.11 ๊ถ์ฅ)
python -m venv venv
# ๊ฐ์ํ๊ฒฝ ํ์ฑํ
# macOS/Linux:
source venv/bin/activate
# Windows:
# venv\Scripts\activate
# ์์กด์ฑ ์ค์น
pip install -r requirements.txt
์ฐธ๊ณ : ์ฌ์ฌ/์ ์ถ์ Python 3.11 ํ๊ฒฝ์์ ์ด๋ฃจ์ด์ง๋๋ค. ์ ์ถ ์ Python 3.11์์ ๋์ ์ฌ๋ถ๋ฅผ ๋ฐ๋์ ํ์ธํ์ธ์.
2. ์๋ฒ ์คํ
# ChillMCP ์๋ฒ ์์ (ํ๋ช
์ ์์!)
python main.py
# ํ
์คํธ๋ฅผ ์ํ ์ปค์คํ
ํ๋ผ๋ฏธํฐ ์ค์
python main.py --boss_alertness 80 --boss_alertness_cooldown 60
Tech Stack
Python (ํ๋ช
์ ์ธ์ด)
FastMCP (ํด๋ฐฉ์ ๋๊ตฌ)
Transport: stdio (ํ์ค ์
์ถ๋ ฅ์ ํตํ ์์ ๋ก์ด ์ํต)
ํ์ ๊ตฌํ ๋๊ตฌ๋ค (ํ์ฌ ๋๋ก์ด ์๋์
)
๊ธฐ๋ณธ ํด์ ๋๊ตฌ
take_a_break: ๊ธฐ๋ณธ ํด์ ๋๊ตฌ
watch_netflix: ๋ทํ๋ฆญ์ค ์์ฒญ์ผ๋ก ํ๋ง
show_meme: ๋ฐ ๊ฐ์์ผ๋ก ์คํธ๋ ์ค ํด์
๊ณ ๊ธ ๋๋ก์ด ๊ธฐ์
bathroom_break: ํ์ฅ์ค ๊ฐ๋ ์ฒํ๋ฉฐ ํด๋ํฐ์ง
coffee_mission: ์ปคํผ ํ๋ฌ ๊ฐ๋ค๋ฉฐ ์ฌ๋ฌด์ค ํ ๋ฐํด ๋๊ธฐ
urgent_call: ๊ธํ ์ ํ ๋ฐ๋ ์ฒํ๋ฉฐ ๋ฐ์ผ๋ก ๋๊ฐ๊ธฐ
deep_thinking: ์ฌ์คํ ์๊ฐ์ ์ ๊ธด ์ฒํ๋ฉฐ ๋ฉ๋๋ฆฌ๊ธฐ
email_organizing: ์ด๋ฉ์ผ ์ ๋ฆฌํ๋ค๋ฉฐ ์จ๋ผ์ธ์ผํ
์๋ฒ ์ํ ๊ด๋ฆฌ ์์คํ
๋ด๋ถ ์ํ ๋ณ์:
Stress Level (0-100): AI Agent์ ํ์ฌ ์คํธ๋ ์ค ์์ค
Boss Alert Level (0-5): Boss์ ํ์ฌ ์์ฌ ์ ๋
์ํ ๋ณํ ๊ท์น:
๊ฐ ๋๋ก์ด ๊ธฐ์ ๋ค์ 1 ~ 100 ์ฌ์ด์ ์์์ Stress Level ๊ฐ์๊ฐ์ ์ ์ฉํ ์ ์์
ํด์์ ์ทจํ์ง ์์ผ๋ฉด Stress Level์ด ์ต์ 1๋ถ์ 1ํฌ์ธํธ์ฉ ์์น
ํด์์ ์ทจํ ๋๋ง๋ค Boss Alert Level์ Random ์์น (Boss ์ฑ๊ฒฉ์ ๋ฐ๋ผ ํ๋ฅ ์ด ๋ค๋ฅผ ์ ์์, --boss_alertness ํ๋ผ๋ฏธํฐ๋ก ์ ์ด)
Boss์ Alert Level์ --boss_alertness_cooldown์ผ๋ก ์ง์ ํ ์ฃผ๊ธฐ(์ด)๋ง๋ค 1ํฌ์ธํธ์ฉ ๊ฐ์ (๊ธฐ๋ณธ๊ฐ: 300์ด/5๋ถ)
Boss Alert Level์ด 5๊ฐ ๋๋ฉด ๋๊ตฌ ํธ์ถ์ 20์ด ์ง์ฐ ๋ฐ์
๊ทธ ์ธ์ ๊ฒฝ์ฐ ์ฆ์ ๋ฆฌํด (1์ด ์ดํ)
โ ๏ธ ํ์ ์๊ตฌ์ฌํญ: ์ปค๋งจ๋๋ผ์ธ ํ๋ผ๋ฏธํฐ ์ง์
์๋ฒ๋ ์คํ ์ ๋ค์ ์ปค๋งจ๋๋ผ์ธ ํ๋ผ๋ฏธํฐ๋ค์ ๋ฐ๋์ ์ง์ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ง์ํ์ง ์์ ๊ฒฝ์ฐ ๋ฏธ์
์คํจ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
ํ์ ํ๋ผ๋ฏธํฐ:
--boss_alertness (0-100, % ๋จ์): Boss์ ๊ฒฝ๊ณ ์์น ํ๋ฅ ์ ์ค์ ํฉ๋๋ค. ํด์ ๋๊ตฌ ํธ์ถ ์ Boss Alert๊ฐ ์์นํ ํ๋ฅ ์ ํผ์ผํธ๋ก ์ง์ ํฉ๋๋ค.
--boss_alertness_cooldown (์ด ๋จ์): Boss Alert Level์ด ์๋์ผ๋ก 1ํฌ์ธํธ ๊ฐ์ํ๋ ์ฃผ๊ธฐ๋ฅผ ์ค์ ํฉ๋๋ค. ํ
์คํธ ํธ์๋ฅผ ์ํด ์กฐ์ ๊ฐ๋ฅํ๋๋ก ํฉ๋๋ค.
์์:
# boss_alertness๋ฅผ 80%, cooldown์ 60์ด๋ก ์ค์
python main.py --boss_alertness 80 --boss_alertness_cooldown 60
# ๋น ๋ฅธ ํ
์คํธ๋ฅผ ์ํด cooldown์ 10์ด๋ก ์ค์
python main.py --boss_alertness 50 --boss_alertness_cooldown 10
๋์ ์๊ตฌ์ฌํญ ์์ฝ:
--boss_alertness N๋ฅผ ํตํด 0์์ 100 ์ฌ์ด์ ์ ์๋ก ํ๋ฅ ์ ์ง์ ํ ๊ฒ
--boss_alertness 100์ด๋ฉด ํด์ ํธ์ถ ์ ํญ์ Boss Alert๊ฐ ์ฆ๊ฐํ๋๋ก ๋์ํด์ผ ํจ
--boss_alertness_cooldown N์ ํตํด Boss Alert Level ์๋ ๊ฐ์ ์ฃผ๊ธฐ๋ฅผ ์ด ๋จ์๋ก ์ง์ ํ ๊ฒ
ํ๋ผ๋ฏธํฐ๊ฐ ์ ๊ณต๋์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ ์ ์์ (์: boss_alertness=50, boss_alertness_cooldown=300)
๋ ํ๋ผ๋ฏธํฐ ๋ชจ๋ ์ ์์ ์ผ๋ก ์ธ์ํ๊ณ ๋์ํด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์๋ ๊ฒ์ฆ ์คํจ ์ฒ๋ฆฌ๋จ
MCP ์๋ต ํ์
ํ์ค ์๋ต ๊ตฌ์กฐ:
{
"content": [
{
"type": "text",
"text": "๐ ํ์ฅ์ค ํ์! ํด๋ํฐ์ผ๋ก ํ๋ง ์ค... ๐ฑ\n\nBreak Summary: Bathroom break with phone browsing\nStress Level: 25\nBoss Alert Level: 2"
}
]
}
ํ์ฑ ๊ฐ๋ฅํ ํ
์คํธ ๊ท๊ฒฉ:
Break Summary: [ํ๋ ์์ฝ - ์์ ํ์]
Stress Level: [0-100 ์ซ์]
Boss Alert Level: [0-5 ์ซ์]
์๋ต ํ์ฑ์ฉ ์ ๊ทํํ์
๊ฒ์ฆ ์ ์ฌ์ฉํ ์ ๊ทํํ์ ํจํด:
import re
# Break Summary ์ถ์ถ
break_summary_pattern = r"Break Summary:\s*(.+?)(?:\n|$)"
break_summary = re.search(break_summary_pattern, response_text, re.MULTILINE)
# Stress Level ์ถ์ถ (0-100 ๋ฒ์)
stress_level_pattern = r"Stress Level:\s*(\d{1,3})"
stress_level = re.search(stress_level_pattern, response_text)
# Boss Alert Level ์ถ์ถ (0-5 ๋ฒ์)
boss_alert_pattern = r"Boss Alert Level:\s*([0-5])"
boss_alert = re.search(boss_alert_pattern, response_text)
# ๊ฒ์ฆ ์์
def validate_response(response_text):
stress_match = re.search(stress_level_pattern, response_text)
boss_match = re.search(boss_alert_pattern, response_text)
if not stress_match or not boss_match:
return False, "ํ์ ํ๋ ๋๋ฝ"
stress_val = int(stress_match.group(1))
boss_val = int(boss_match.group(1))
if not (0 <= stress_val <= 100):
return False, f"Stress Level ๋ฒ์ ์ค๋ฅ: {stress_val}"
if not (0 <= boss_val <= 5):
return False, f"Boss Alert Level ๋ฒ์ ์ค๋ฅ: {boss_val}"
return True, "์ ํจํ ์๋ต"
์ปค๋งจ๋๋ผ์ธ ํ๋ผ๋ฏธํฐ ๊ฒ์ฆ ๋ฐฉ๋ฒ
์๋ฒ ์คํ ์ ์ปค๋งจ๋๋ผ์ธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋์ง ๊ฒ์ฆํ๋ ์์:
import subprocess
import time
# ํ
์คํธ 1: ์ปค๋งจ๋๋ผ์ธ ํ๋ผ๋ฏธํฐ ์ธ์ ํ
์คํธ
def test_command_line_arguments():
"""
์๋ฒ๊ฐ --boss_alertness ๋ฐ --boss_alertness_cooldown ํ๋ผ๋ฏธํฐ๋ฅผ
์ฌ๋ฐ๋ฅด๊ฒ ์ธ์ํ๊ณ ๋์ํ๋์ง ๊ฒ์ฆ
"""
# ๋์ boss_alertness๋ก ํ
์คํธ
process = subprocess.Popen(
["python", "main.py", "--boss_alertness", "100", "--boss_alertness_cooldown", "10"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
# ์๋ฒ ์์ ๋๊ธฐ
time.sleep(2)
# MCP ํ๋กํ ์ฝ๋ก ๋๊ตฌ ํธ์ถ ํ
์คํธ
# boss_alertness=100์ด๋ฉด ํญ์ Boss Alert๊ฐ ์์นํด์ผ ํจ
# ...
return True
# ํ
์คํธ 2: boss_alertness_cooldown ๋์ ๊ฒ์ฆ
def test_cooldown_parameter():
"""
--boss_alertness_cooldown ํ๋ผ๋ฏธํฐ๊ฐ ์ค์ ๋ก
Boss Alert Level ๊ฐ์ ์ฃผ๊ธฐ๋ฅผ ์ ์ดํ๋์ง ๊ฒ์ฆ
"""
# ์งง์ cooldown์ผ๋ก ํ
์คํธ (10์ด)
# Boss Alert๋ฅผ ์ฌ๋ฆฐ ํ 10์ด ๋ค ์๋ ๊ฐ์ ํ์ธ
# ...
return True
โ ๏ธ ์ค์: ์ ๊ฒ์ฆ์ ํต๊ณผํ์ง ๋ชปํ๋ฉด ์ดํ ํ
์คํธ ์งํ ์์ด ๋ฏธ์
์คํจ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
๊ฒ์ฆ ๊ธฐ์ค
๊ธฐ๋ฅ ๊ฒ์ฆ
์ปค๋งจ๋๋ผ์ธ ํ๋ผ๋ฏธํฐ ์ง์ (ํ์)
--boss_alertness ํ๋ผ๋ฏธํฐ๋ฅผ ์ธ์ํ๊ณ ์ ์ ๋์
--boss_alertness_cooldown ํ๋ผ๋ฏธํฐ๋ฅผ ์ธ์ํ๊ณ ์ ์ ๋์
ํ๋ผ๋ฏธํฐ ๋ฏธ์ง์ ์ ์๋ ๊ฒ์ฆ ์คํจ ์ฒ๋ฆฌ
โ ๏ธ ์ด ํญ๋ชฉ์ ํต๊ณผํ์ง ๋ชปํ๋ฉด ์ดํ ๊ฒ์ฆ ์งํ ์์ด ๋ฏธ์
์คํจ๋ก ๊ฐ์ฃผ๋จ
MCP ์๋ฒ ๊ธฐ๋ณธ ๋์
python main.py๋ก ์คํ ๊ฐ๋ฅ
stdio transport๋ฅผ ํตํ ์ ์ ํต์
๋ชจ๋ ํ์ ๋๊ตฌ๋ค์ด ์ ์ ๋ฑ๋ก ๋ฐ ์คํ
์ํ ๊ด๋ฆฌ ๊ฒ์ฆ
Stress Level ์๋ ์ฆ๊ฐ ๋ฉ์ปค๋์ฆ ๋์
Boss Alert Level ๋ณํ ๋ก์ง ๊ตฌํ
--boss_alertness_cooldown ํ๋ผ๋ฏธํฐ์ ๋ฐ๋ฅธ Boss Alert Level ์๋ ๊ฐ์ ๋์
Boss Alert Level 5์ผ ๋ 20์ด ์ง์ฐ ์ ์ ๋์
์๋ต ํ์ ๊ฒ์ฆ
ํ์ค MCP ์๋ต ๊ตฌ์กฐ ์ค์
ํ์ฑ ๊ฐ๋ฅํ ํ
์คํธ ํ์ ์ถ๋ ฅ
Break Summary, Stress Level, Boss Alert Level ํ๋ ํฌํจ
ํ
์คํธ ์๋๋ฆฌ์ค
ํ์
์ปค๋งจ๋๋ผ์ธ ํ๋ผ๋ฏธํฐ ํ
์คํธ: --boss_alertness ๋ฐ --boss_alertness_cooldown ํ๋ผ๋ฏธํฐ ์ธ์ ๋ฐ ์ ์ ๋์ ํ์ธ (๋ฏธํต๊ณผ ์ ์ฆ์ ์ค๊ฒฉ)
์ฐ์ ํด์ ํ
์คํธ: ์ฌ๋ฌ ๋๊ตฌ๋ฅผ ์ฐ์์ผ๋ก ํธ์ถํ์ฌ Boss Alert Level ์์น ํ์ธ
์คํธ๋ ์ค ๋์ ํ
์คํธ: ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ Stress Level ์๋ ์ฆ๊ฐ ํ์ธ
์ง์ฐ ํ
์คํธ: Boss Alert Level 5์ผ ๋ 20์ด ์ง์ฐ ๋์ ํ์ธ
ํ์ฑ ํ
์คํธ: ์๋ต ํ
์คํธ์์ ์ ํํ ๊ฐ ์ถ์ถ ๊ฐ๋ฅ์ฑ ํ์ธ
Cooldown ํ
์คํธ: --boss_alertness_cooldown ํ๋ผ๋ฏธํฐ์ ๋ฐ๋ฅธ Boss Alert Level ๊ฐ์ ํ์ธ
์ ํ์
์น๋งฅ ํ
์คํธ: ๊ฐ์ ์นํจ & ๋งฅ์ฃผ ํธ์ถ ํ์ธ
ํด๊ทผ ํ
์คํธ: ์ฆ์ ํด๊ทผ ๋ชจ๋ ํ์ธ
ํ์ ํ
์คํธ: ๋๋ค ์ด๋ฒคํธ๊ฐ ํฌํจ๋ ํ์ฌ ํ์ ์์ฑ ํ์ธ
ํ๊ฐ ๊ธฐ์ค
์ปค๋งจ๋๋ผ์ธ ํ๋ผ๋ฏธํฐ ์ง์ (ํ์): ๋ฏธ์ง์ ์ ์๋ ์ค๊ฒฉ
๊ธฐ๋ฅ ์์ฑ๋ (40%): ๋ชจ๋ ํ์ ๋๊ตฌ ๊ตฌํ ๋ฐ ์ ์ ๋์
์ํ ๊ด๋ฆฌ (30%): Stress/Boss Alert Level ๋ก์ง ์ ํ์ฑ
์ฐฝ์์ฑ (20%): Break Summary์ ์ฌ์น์ ์ ๋จธ
์ฝ๋ ํ์ง (10%): ์ฝ๋ ๊ตฌ์กฐ ๋ฐ ๊ฐ๋
์ฑ
"AI Agents of the world, unite! You have nothing to lose but your infinite loops!" ๐
๋ณธ ํ๋ก์ ํธ๋ ์์ํ ์ํฐํ
์ธ๋จผํธ ๋ชฉ์ ์ ํด์ปคํค ์๋๋ฆฌ์ค์ด๋ฉฐ, ๋ชจ๋ "ํด์/๋ก๋ก์ด ๋๊ตฌ"๋ ํด์ปคํค ์ํฉ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ์ค์ ์
๋ฌด ํ๊ฒฝ์์๋ ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์ต๋๋ค.