chzzk-ideas
by kaeba0616
README.md
# chzzkDevChat
치지직(Chzzk) 라이브 방송 시청자가 채팅으로 아이디어를 제안하면, 스트리머가 웹 대시보드에서 선택하여 Claude Code에 직접 전달하는 시스템입니다. 시청자 투표 기능도 지원합니다.
## 워크플로우
```
시청자 "!아이디어 할일 앱 만들어줘"
→ 웹 대시보드에 리스트 표시
→ 스트리머가 선택 클릭
→ Claude Code 세션에 전달
→ Claude가 코딩 수행
→ 선택지가 나오면 시청자 투표로 결정
```
## 아키텍처
단일 Bun 프로세스에서 3가지 서브시스템을 운영합니다:
```
[치지직 채팅 WebSocket] --(!아이디어, !투표)--> [In-Memory State]
|
WebSocket <-------->|
| |
[웹 대시보드/OBS] |
(설정, 아이디어, 투표) |
| v
[MCP Channel Server] --stdio--> [Claude Code 세션]
```
## 설치
```bash
# 1. 레포 클론
git clone https://github.com/kaeba0616/chzzkDevChat.git
cd chzzkDevChat
# 2. Bun 설치 (없는 경우)
curl -fsSL https://bun.sh/install | bash
source ~/.bashrc
# 3. 의존성 설치
bun install
```
## 설정
### MCP 서버 등록
`~/.mcp.json`에 추가하면 **어떤 프로젝트 디렉토리에서든** 사용할 수 있습니다:
```json
{
"mcpServers": {
"chzzk-ideas": {
"command": "bun",
"args": ["/절대경로/chzzkDevChat/server.ts"]
}
}
}
```
> `args`의 경로를 본인이 클론한 위치에 맞게 수정하세요.
### 치지직 채널 연결
`.env` 파일 수정 없이 **대시보드 웹 UI에서 설정**할 수 있습니다:
1. 대시보드 접속 후 **"설정"** 버튼 클릭
2. 치지직 채널 ID 입력 (채널 URL에서 확인: `chzzk.naver.com/live/채널ID`)
3. **"저장 및 연결"** 클릭
> 성인 인증이 필요 없는 방송이면 쿠키(NID_AUT, NID_SES)는 비워두세요.
## 실행
코딩 작업을 수행할 프로젝트 디렉토리에서:
```bash
cd ~/dev/my-project
claude --dangerously-load-development-channels server:chzzk-ideas
```
Claude Code가 서버를 자동 실행합니다. 별도로 서버를 띄울 필요 없습니다.
> **주의**: 사전에 `~/.mcp.json`에 절대경로로 MCP 서버를 등록해야 합니다 (위 [MCP 서버 등록](#mcp-서버-등록) 참고).
- **대시보드**: http://localhost:8789
- **OBS 오버레이**: http://localhost:8789/?obs=true
## 사용법
### 아이디어 수집
1. 대시보드에서 **"아이디어 수집 시작"** 클릭 (기본 꺼짐)
2. 시청자가 채팅에 `!아이디어 뱀 게임 만들어줘` 입력
3. 대시보드에 아이디어 실시간 표시
4. **"Claude에 전달"** 클릭 → Claude가 코딩 시작
5. 끝나면 **"아이디어 수집 중지"** 클릭
### 시청자 투표
Claude가 선택지를 제시하면:
1. 대시보드에서 **"투표 생성"** 클릭
2. 질문과 선택지 입력 → **"투표 시작"**
3. 시청자가 채팅에 `!투표 1`, `!투표 2` 등으로 투표 (1인 1표)
4. 대시보드에서 실시간 프로그레스 바 확인
5. **"투표 종료"** 클릭 → 결과가 Claude에 전달 → 최다 득표 선택지로 진행
### 치지직 재연결
앱 실행 후 방송을 시작한 경우, 대시보드 상단 치지직 상태 옆 **"재연결"** 버튼을 클릭하면 채팅에 연결됩니다.
### 세션 재개
기존 세션을 이어서 사용할 때도 채널 플래그가 필요합니다:
```bash
claude --resume <session-id> --dangerously-load-development-channels server:chzzk-ideas
```
## 테스트
방송 없이도 테스트용 API로 확인할 수 있습니다:
```bash
# 아이디어 추가
curl -X POST localhost:8789/test-idea -d "뱀 게임 만들어줘"
# 투표 생성
curl -X POST localhost:8789/test-create-vote \
-H "Content-Type: application/json" \
-d '{"question":"프레임워크 선택","options":["React","Vue","Svelte"]}'
# 투표하기
curl -X POST localhost:8789/test-vote -d "1"
curl -X POST localhost:8789/test-vote -d "3"
```
## Tech Stack
- **Runtime**: [Bun](https://bun.sh)
- **Language**: TypeScript
- **Packages**: [chzzk](https://github.com/kimcore/chzzk) (치지직 채팅), [@modelcontextprotocol/sdk](https://www.npmjs.com/package/@modelcontextprotocol/sdk) (MCP 채널)
## 파일 구조
```
├── server.ts # MCP 채널 + 치지직 리스너 + 웹 대시보드 + 설정 API
├── dashboard.html.ts # 대시보드 HTML/CSS/JS (설정, 아이디어, 투표)
├── types.ts # 공유 타입 정의
├── .mcp.json # Claude Code MCP 서버 등록
├── config.json # 설정 파일 (대시보드에서 자동 생성, git 미포함)
└── CLAUDE.md # Claude Code 프로젝트 지침
```
## 주의사항
- 치지직 쿠키(`NID_AUT`, `NID_SES`)는 만료될 수 있음 — 대시보드 설정에서 재입력
- 대시보드는 localhost 전용 (`127.0.0.1`) — 외부 노출 없음
- 이전 서버 프로세스가 남아있으면 포트 충돌 발생 — Claude Code 재시작 전 확인
- 방송 시작 전에 앱을 실행하면 채팅 연결이 안 됨 — 방송 시작 후 **"재연결"** 버튼 사용
- 프로젝트 디렉토리에 로컬 `.mcp.json`이 있으면 `~/.mcp.json`과 별도로 `chzzk-ideas`를 추가해야 함
- 세션 재개(`--resume`) 시에도 `--dangerously-load-development-channels server:chzzk-ideas` 플래그 필요
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues