mcp-arena
A robot battle prototype that enables users to design, validate, and simulate AI combat scripts through an MCP-integrated consultative workflow. It allows AI agents to guide tactical design, perform DSL script verification, and conduct preview duels before final deployment to Firebase.
README
mcp-arena (prototype)
Firebase Hosting + Functions + Firestore + Storage 기반의 MCP 연동 로봇 배틀 프로토타입입니다.
핵심 아이디어
사람은 에이전트에게 이렇게 말합니다.
"mcp arena에 ai 로봇 만들어서 업로드해줘"
그러면 에이전트가 MCP 툴 체인을 사용해 다음 순서로 진행합니다.
- 상담 플로우 확인 (
get_build_flow) - 전략/스크립트 초안 생성 (
coach_robot_design) - 사용자에게 부족한 정보 질문 (playStyle/risk/objective)
- 스크립트 검증 (
validate_robot_script) - 프리뷰 대전 (
preview_robot_duel) - 사용자 승인 후 최종 업로드 (
upload_robot_script)
즉, 단순 업로드가 아니라 전술 상담 -> 검증 -> 시뮬레이션 -> 업로드를 MCP 안에서 지원합니다.
구성
- 모노레포(
yarn workspaces) apps/web: Next.js 프론트엔드(로봇 업로드, 배틀 실행, 캔버스 리플레이)apps/functions: Firebase Functions API + MCP(JSON-RPC)apps/mcp-bridge: stdio MCP 브리지(에이전트 연결용)- Firestore: 로봇/배틀 메타데이터 저장
- Storage: 로봇 원본 스크립트 저장
디렉터리
.
├─ apps/
│ ├─ functions/
│ │ └─ src/
│ │ ├─ index.js # REST + MCP endpoint (consultative tools 포함)
│ │ ├─ parser.js # 로봇 스크립트 DSL parser
│ │ └─ battleEngine.js # 전투 엔진 + replay timeline 생성
│ ├─ web/
│ │ ├─ app/
│ │ │ ├─ page.js
│ │ │ └─ globals.css
│ │ ├─ components/
│ │ │ └─ ArenaReplay.js # 캔버스 리플레이
│ │ └─ .env.local # 로컬 API base
│ └─ mcp-bridge/
│ └─ index.js # stdio MCP bridge
├─ .mcp.json
├─ firebase.json
├─ firestore.rules
└─ storage.rules
parser.js DSL
한 줄에 한 명령:
MOVE <1-3>: 전진ROTATE LEFT|RIGHT|NONE(또는ROTATE 0)SHOOT: 전방 5칸 시야 + 직선 사선이 맞으면 타격(원샷킬)WAITIF_SEEN <MOVE|ROTATE|SHOOT|WAIT ...>: 적이 보일 때만 실행IF_NOT_SEEN <MOVE|ROTATE|SHOOT|WAIT ...>: 적이 안 보일 때만 실행#주석
예시:
IF_SEEN SHOOT
MOVE 1
IF_NOT_SEEN ROTATE RIGHT
IF_SEEN SHOOT
WAIT
자동 시야 규칙
- 매 턴 자동으로 시야 정보가 갱신됩니다 (별도
SCAN불필요) - 시야 범위: 전방 반원, 반경 5칸
- 시야 데이터:
enemyVisible,enemy.dx,enemy.dy,enemy.distance,enemy.bearing - 배틀 로그(
timeline)에도 각 액션의perceptionBefore/perceptionAfter가 포함됩니다.
API
기본 경로: /api
GET /api/healthGET /api/robotsPOST /api/robotsPOST /api/battlesGET /api/battles/:battleIdPOST /api/mcp(JSON-RPC)
배틀 결과에는 리플레이용 데이터가 포함됩니다.
initialStatetimeline(액션별before/after, 탄환 궤적)turnsfinalState
MCP 툴 목록 (상담형)
get_build_flow- 에이전트가 사람과 어떤 순서로 상담할지 안내
coach_robot_design- 사람의 의도/성향을 받아 로봇 초안(규칙+스크립트) 생성
- 부족 정보가 있으면
followUpQuestions반환
validate_robot_script- DSL 문법 + 전술 품질 체크(경고/추천)
preview_robot_duel- 후보 스크립트를 프리뷰 배틀로 점검
upload_robot_script- 최종 로봇 업로드
userApprovalConfirmed=true가 아니면 업로드가 차단됨(최종 사용자 승인 강제)
로컬 실행 (Emulator)
현재 기본 로컬 ID:
.firebaserc->mcp-arena-local
웹 API:
apps/web/.env.localNEXT_PUBLIC_API_BASE_URL=http://127.0.0.1:5001/mcp-arena-local/us-central1/api
실행:
yarn install
yarn emulators
별도 터미널:
yarn dev:web
브라우저 http://localhost:3000:
- 로봇 2개 이상 업로드
- 배틀 실행
- Replay 재생/프레임 이동
Agent 연결용 MCP 브리지 (stdio)
에이전트는 stdio MCP 서버를 사용하므로 브리지를 연결합니다.
yarn dev:mcp-bridge
기본 포워딩 대상:
http://127.0.0.1:5001/mcp-arena-local/us-central1/api/mcp
원격 배포 API로 전환:
MCP_ARENA_API_BASE_URL=https://<region>-<project-id>.cloudfunctions.net/api yarn dev:mcp-bridge
Claude / Codex 등록 예시
Claude Code
claude mcp add mcp-arena node /ABSOLUTE/PATH/mcp-arena/apps/mcp-bridge/index.js
Codex CLI
codex mcp add mcp-arena --env MCP_ARENA_API_BASE_URL=http://127.0.0.1:5001/mcp-arena-local/us-central1/api -- node /ABSOLUTE/PATH/mcp-arena/apps/mcp-bridge/index.js
에이전트에게 줄 사용자 프롬프트 예시
mcp arena에 ai 로봇을 만들어 업로드해줘.
내 성향은 공격적이지만 너무 운빨은 싫어.
최종 업로드 전에 스크립트 검증하고 프리뷰 대전 결과도 보여줘.
이렇게 요청하면 에이전트는 보통 아래 방식으로 진행합니다.
get_build_flow확인coach_robot_design으로 초안 생성- 사용자에게 follow-up 질문
validate_robot_scriptpreview_robot_duel- 사용자 승인 후
upload_robot_script
배포 가이드
1) 실제 Firebase 프로젝트로 전환
.firebaserc의default를 실제 프로젝트 ID로 변경apps/web/.env.local의 API URL을 배포 URL로 변경
예시:
NEXT_PUBLIC_API_BASE_URL=https://<region>-<project-id>.cloudfunctions.net/api
2) 웹 빌드 + 배포
yarn build:web
firebase deploy --only hosting,functions,firestore,storage
배포 후 MCP 브리지도 같은 URL로 연결해 사용합니다.
라이선스
이 프로젝트는 PolyForm Noncommercial 1.0.0 라이선스를 따릅니다.
- 코드 다운로드/실행/수정/비상업적 배포: 허용
- 상업적 이용: 금지
자세한 내용은 루트 LICENSE 파일을 확인하세요.
현재 규칙
- 정사각형 아레나
- 로봇 2대
- 시작 위치
(0,0)vs(N-1,N-1) - 명령 루프 실행
- 전방 5칸 자동 시야 갱신
- 조건 분기(
IF_SEEN,IF_NOT_SEEN) 지원 SHOOT적중 시 즉시 사망- 승자 없으면
draw
주의
현재 firestore.rules, storage.rules는 프로토타입용 전체 허용입니다. 실제 서비스 전에는 인증/권한 규칙을 반드시 강화해야 합니다.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。