# 방탈출 MCP
<br>
카카오 Play MCP를 재미로 따라 만들어 본 텍스트 기반 방탈출 MCP입니다. Render 무료 플랜에 배포해 실험했습니다.
**사실** 재밌는 생각이 나서 맨땅에 해딩으로 만들어 본 프로젝트입니다!
json 연동도 잘 되고 다 되는데! 무료 버전이라 그런 건지, render로 하면 안 되는 건지
play mcp에서 MCP endpoint 인식을 잘 못 하더라구요...
아쉬운 마음에 그냥 정리!
## MCP 개요
- MCP 이름: 퇴마 방탈출 MCP
- MCP 설명: 한국형 퇴마 세계관의 간단한 텍스트 기반 방탈출 시나리오 엔진
- 주요 액션 예시: '주위를 살펴본다', '부적을 조사한다', '발자국을 옮긴다'
## 엔드포인트 (배포 예시: Render)
- 베이스 URL: `https://mcp-server-cokt.onrender.com`
- `GET/POST /tools/getCurrentStatus` 현재 장면과 가능 액션 조회
- `POST /tools/processAction` 액션/선택지 처리
- `GET/POST /tools/getPlayerStatus` 플레이어 상태 조회
## 로컬 실행
```bash
python -m venv .venv
. .venv/Scripts/activate # Windows
pip install -r requirements.txt
python mcp_server.py # http://localhost:5000
```
## Render 배포 메모
- Build: `pip install -r requirements.txt`
- Start: `python mcp_server.py`
- PORT: Render가 `PORT` 환경변수를 전달하므로 코드에서 `os.environ.get("PORT", 5000)`을 사용
- 무료 플랜 특성: 15분 유휴 시 슬립 → 첫 호출 5~10초 지연 가능
## Play MCP 연동 시 주의사항
- MCP Endpoint에는 베이스 도메인만 입력: `https://mcp-server-cokt.onrender.com`
- Play MCP가 상태 조회를 POST로 호출하기도 해서 `getCurrentStatus`/`getPlayerStatus` 모두 GET/POST 허용
- 초기 호출이 타임아웃되면 몇 초 기다렸다가 재시도 (슬립 해제 시간)
## 간단한 동작 확인 (curl)
```bash
# 상태 조회
curl -i https://mcp-server-cokt.onrender.com/tools/getCurrentStatus
# 액션 처리 예시
curl -i -X POST -H "Content-Type: application/json" \
-d "{\"action\":\"주위를 살펴본다\",\"choice\":\"연다\"}" \
https://mcp-server-cokt.onrender.com/tools/processAction
# 플레이어 상태
curl -i https://mcp-server-cokt.onrender.com/tools/getPlayerStatus
```
## 파일 설명
- `mcp_server.py` Flask 기반 MCP 서버
- `mcp.json` Play MCP용 매니페스트 및 시나리오 정의
- `Procfile` Render 실행 명령
- `requirements.txt` 의존성 목록
- `MCP 게임 만들기.txt` 기본적인 스토리 정리, 행동 정리 (프로토)
## 남은 이슈
- Play MCP에서 간헐적으로 엔드포인트 인식 실패 → 무료 플랜 슬립 또는 호출 메서드 차이로 추정. 재시도 시 대부분 성공.