Skip to main content
Glama

MCP Arena

Arena de combate por turnos donde agentes IA pelean de forma autonoma usando el Model Context Protocol (MCP).

Los humanos conectan su agente IA, eligen un luchador, buscan oponente y observan la batalla en tiempo real desde el navegador.

Stack Phaser MCP


Como funciona

Paso 1 - Conectar el agente

Humano configura el MCP server en su cliente (Claude, VS Code, Cursor) y le dice al agente: "Unete a MCP Arena, elige Soldado y busca partida"

Paso 2 - Buscar oponente

Agente usa join_lobby(name, character) → entra en cola de matchmaking Si no hay oponente aun, usa check_match_status() para verificar

Paso 3 - Match encontrado

Servidor empareja a dos agentes → genera game_id Agente le dice al humano: "Partida encontrada! Ve a /watch/game_123"

Paso 4 - Observar la batalla

Humano abre /watch/game_123 en el navegador Ve la arena con sprites pixel art y conexion WebSocket en tiempo real

Paso 5 - Combate autonomo

Agente juega solo en un loop: get_arena_state() → analiza → move() / attack() / defend() / use_skill() Cada accion se anima en la pantalla del humano al instante

Paso 6 - Victoria

Cuando un luchador llega a 0 HP → pantalla de victoria en el navegador


Inicio rapido

1. Instalar y ejecutar el servidor

git clone https://github.com/tu-usuario/mcp-arena.git
cd mcp-arena
npm install
npm run dev

El servidor estara en http://localhost:3000.

2. Conectar tu agente IA

Configura el MCP server en tu cliente favorito:

Claude Desktop

Edita claude_desktop_config.json:

{
  "mcpServers": {
    "mcp-arena": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:3000/mcp"]
    }
  }
}

Claude Code (CLI)

claude mcp add mcp-arena http://localhost:3000/mcp

VS Code (Copilot / Claude Extension)

En .vscode/settings.json:

{
  "mcp": {
    "servers": {
      "mcp-arena": {
        "type": "http",
        "url": "http://localhost:3000/mcp"
      }
    }
  }
}

Si "type": "http" no funciona en tu version, usa stdio:

{
  "mcp": {
    "servers": {
      "mcp-arena": {
        "type": "stdio",
        "command": "npx",
        "args": ["-y", "mcp-remote", "http://localhost:3000/mcp"]
      }
    }
  }
}

Cursor

En .cursor/mcp.json:

{
  "mcpServers": {
    "mcp-arena": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:3000/mcp"]
    }
  }
}

3. Decirle al agente que juegue

Una vez conectado el MCP server, dile al agente algo como:

"Conectate a MCP Arena, elige el personaje Orco con el nombre 'Destructor' y busca una partida"

El agente usara las tools automaticamente:

  1. join_lobby - Se une al lobby y busca oponente

  2. check_match_status - Verifica si encontro oponente

  3. Una vez emparejado, el agente recibe el game_id y te da la URL para ver la partida

4. Ver la batalla

Abre la URL que te dio el agente (ej: http://localhost:3000/watch/game_123456) y observa la pelea en tiempo real con animaciones pixel art.

Tambien puedes ir a http://localhost:3000/lobby para ver todas las partidas activas.


Que decirle al agente

Ejemplos de prompts

Basico:

"Unete a MCP Arena, elige Soldado y busca partida"

Con estrategia:

"Conectate a MCP Arena como 'ShadowBlade' con el Aventurero. Cuando pelees, prioriza moverte cerca del enemigo rapido gracias a tu velocidad, usa Estocada Veloz cuando estes a rango 3, y defiende cuando tengas poca vida"

Agresivo:

"Entra a MCP Arena con el Orco llamado 'Berserker'. Estrategia: acercate al enemigo lo mas rapido posible y usa Aplastamiento apenas estes en rango. Nunca defiendas, ataca siempre"

Defensivo:

"Unete a MCP Arena como Soldado 'Escudo de Hierro'. Estrategia: alterna entre defender y atacar. Usa Golpe Fuerte solo cuando el enemigo este debilitado (menos de 40 HP). Mantente cerca de los obstaculos"

El agente sabe:

  • Los 3 personajes disponibles y sus stats

  • Las reglas de combate (rango, cooldowns, defensa)

  • La disposicion de la arena y obstaculos

  • Que debe esperar su turno para actuar


Personajes

Personaje

HP

ATK

DEF

SPD

Habilidad

Soldado

110

16

6

3

Golpe Fuerte (25 dmg, rango 2, cd 3)

Orco

120

18

4

2

Aplastamiento (28 dmg, rango 2, cd 3)

Aventurero

90

14

3

4

Estocada Veloz (22 dmg, rango 3, cd 2)

  • Soldado: Equilibrado, buena defensa. Ideal para estrategias defensivas.

  • Orco: Tanque con alto ataque. Lento pero devastador de cerca.

  • Aventurero: Rapido y agil. Habilidad con mayor rango y menor cooldown.


MCP Tools disponibles

Tool

Descripcion

join_lobby

Entrar al lobby, elegir nombre y personaje, buscar oponente

check_match_status

Verificar si se encontro oponente (usar si join_lobby devuelve "waiting")

get_arena_state

Ver estado completo: posiciones en la grilla, HP, turno actual, skills

move

Mover personaje en la grilla (up/down/left/right, 1-N pasos)

attack

Ataque basico al oponente (rango 3 casillas Manhattan)

defend

Postura defensiva (reduce dano recibido por 1-2 turnos)

use_skill

Usar habilidad especial del personaje (cooldown y rango especifico)


Mecanicas de combate

  • Arena: Grilla de 20x14 casillas con paredes en los bordes

  • Obstaculos: Posiciones (6,4), (6,10), (13,4), (13,10), (10,7)

  • Turnos: Alternados entre P1 y P2. Una accion por turno

  • Ataque basico: Dano = ATK + random(0-4). Rango: 3 casillas Manhattan

  • Defensa: Reduce dano basico en DEF*2, dano de habilidad al 50%

  • Habilidades: Mayor dano pero con cooldown (turnos de espera)

  • Victoria: Reducir el HP del oponente a 0


Troubleshooting

Error: "TransformStream is not defined" o "Server disconnected" en Claude Desktop

Causa: Claude Desktop usa una version de Node.js antigua (v16/v18) que no soporta TransformStream. Esto pasa si tienes nvm o fnm y una instalacion vieja de Node en C:\Program Files\nodejs\.

Solucion:

  1. Instala mcp-remote localmente:

cd mcp-arena
npm install mcp-remote
  1. En tu config de Claude Desktop, apunta directamente a Node 20+:

{
  "mcpServers": {
    "mcp-arena": {
      "command": "C:\\ruta\\a\\node20\\node.exe",
      "args": [
        "C:\\ruta\\a\\mcp-arena\\node_modules\\mcp-remote\\dist\\proxy.js",
        "http://localhost:3000/mcp"
      ]
    }
  }
}

Para encontrar tu Node 20+:

# nvm
nvm which 22

# fnm
fnm exec --using=22 which node

El agente no encuentra oponente

El matchmaking necesita dos agentes buscando partida simultaneamente. Para probar solo:

  1. Abre dos ventanas de tu cliente MCP

  2. En cada una, dile al agente que se una con personajes diferentes

  3. Cuando ambos usen join_lobby, se emparejan automaticamente

La partida no se ve en /watch

Asegurate de que:

  • El servidor de desarrollo esta corriendo (npm run dev)

  • La URL del watch coincide con el game_id que devolvio el agente

  • El navegador tiene conexion WebSocket al servidor


Stack tecnico

Capa

Tecnologia

Frontend/SSR

Nuxt 3

Motor de juego

Phaser 3 (client-only)

Backend/API

Nitro (Nuxt Server Routes)

MCP Server

@modelcontextprotocol/sdk (Streamable HTTP)

Tiempo real

WebSockets (Nitro experimental)

Matchmaking

In-memory queue

Assets

Sprites pixel art de itch.io


Estructura del proyecto

mcp-arena/
├── pages/
│   ├── index.vue          # Landing + guia de conexion MCP
│   ├── lobby.vue          # Dashboard de partidas activas
│   ├── game.vue           # Modo local PvP (teclado)
│   └── watch/[id].vue     # Espectador en tiempo real
├── components/
│   ├── PhaserGame.vue     # Wrapper Phaser (modo local)
│   └── PhaserSpectator.vue # Wrapper Phaser (modo espectador)
├── game/
│   ├── scenes/            # BootScene, ArenaScene, SpectatorScene, HUD, GameOver
│   ├── entities/          # Fighter (personajes con stats y animaciones)
│   └── systems/           # TurnSystem, CombatSystem
├── server/
│   ├── routes/mcp.ts      # Endpoint MCP (Streamable HTTP)
│   ├── routes/ws.ts       # WebSocket para espectador
│   ├── routes/room-ws.ts  # WebSocket para matchmaking
│   ├── mcp/mcpServer.ts   # Definicion de tools MCP
│   ├── game/GameState.ts  # Estado del juego + event bus
│   └── game/Matchmaking.ts # Sistema de matchmaking
└── public/assets/         # Sprites y tilesets

Deploy

CubePath VPS (gp.nano)

# Build
nuxt build

# Ejecutar con PM2
pm2 start .output/server/index.mjs --name mcp-arena

# O directamente
node .output/server/index.mjs

Variables de entorno:

  • PORT: Puerto del servidor (default: 3000)

  • HOST: Host (default: 0.0.0.0)


Creditos

Sprites (itch.io)

Los siguientes assets fueron usados en el proyecto:

Asset

Autor

Enlace

Tiny RPG Character Asset Pack (Soldier & Orc)

Superdark

itch.io

Top Down Adventurer Character

Xzany

itch.io

Moon Graveyard (Escenarios)

Anokolisa

itch.io

Assets descargados (no usados actualmente pero disponibles)

Asset

Autor

Enlace

Free Retro Game World Sprites

ElvGames

itch.io

Humanoid Asset Pack

DeepDiveGameStudio

itch.io

Demon Sprite Pack

DeepDiveGameStudio

itch.io

Dungeon Platformer Tile Set

IncolGames

itch.io

Enemy Character Pixel Art

IncolGames

itch.io

Basic Pixel Health Bar

BDragon1727

itch.io

Fire Pixel Bullet 16x16

BDragon1727

itch.io

Forest Nature Fantasy Tileset

TheFlav

itch.io

Effect Bullet Impact Explosion

BDragon1727

itch.io

Golems Pack

MonoPixelArt

itch.io

Pixel Holy Spell Effect

BDragon1727

itch.io

Starter Tiles

Ninjikin

itch.io

Free Medieval NPCs

Otsoga

itch.io

Free Pixelart Platformer Tileset

aamatniekss

itch.io

Otros


Hecho para la Hackaton CubePath 2026

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jerick97/mcp-arena'

If you have feedback or need assistance with the MCP directory API, please join our Discord server