Play Command & Conquer Red Alert RTS — build bases, train armies, and defeat AI opponents using 48 MCP tools.
Scanned 9/7/2026
Install to Claude Code
npx -y skills add modbender/skill-library-mcp --skill openra-rl --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Openra Rl?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/modbender-openra-rl)More formats (shields.io, HTML) on the badges page.
---
name: openra-rl
description: Play Command & Conquer Red Alert RTS — build bases, train armies, and defeat AI opponents using 48 MCP tools.
version: 1.1.0
metadata:
openclaw:
emoji: "🎮"
homepage: https://github.com/yxc20089/OpenRA-RL
requires:
bins:
- docker
env: []
install:
- kind: uv
package: openra-rl
bins: [openra-rl]
os: ["macos", "linux"]
---
# OpenRA-RL: Play Command & Conquer Red Alert
You are an AI agent playing **Command & Conquer: Red Alert**, a classic real-time strategy (RTS) game. You control one faction (Allied or Soviet) and must build a base, gather resources, train an army, and destroy the enemy.
The game runs in a Docker container. You interact through MCP tools that let you observe the battlefield, issue orders, and advance game time.
## Quick Start
### 1. Install
```bash
pip install openra-rl
```
### 2. Start the game server
```bash
openra-rl server start
```
This pulls the Docker image and starts the game server on port 8000. Verify with `openra-rl server status`.
### 3. Configure MCP
Add to your OpenClaw config (`~/.openclaw/openclaw.json`):
```json
{
"mcpServers": {
"openra-rl": {
"command": "openra-rl",
"args": ["mcp-server"]
}
}
}
```
### 4. Play
Tell your agent: *"Start a game of Red Alert and try to win."*
The agent will use the MCP tools listed below to observe and command.
---
## How the Game Works
- **Real-time**: The game runs continuously at ~25 ticks/second. Call `advance(ticks)` to let time pass.
- **Fog of war**: You can only see areas near your units/buildings. Scout to find the enemy.
- **Resources**: Harvest ore to earn credits. Credits buy buildings and units.
- **Power**: Buildings need power. Build Power Plants (`powr`) to stay powered. Low power slows production.
- **Tech tree**: Advanced buildings require prerequisites (e.g., War Factory needs Ore Refinery).
---
## MCP Tools Reference
### Observation (read the battlefield)
| Tool | Purpose |
|------|---------|
| `get_game_state` | Full snapshot: economy, units, buildings, enemies, production, military stats |
| `get_economy` | Cash, ore, power balance, harvester count |
| `get_units` | Your units with position, health, type, stance, speed, attack range |
| `get_buildings` | Your buildings with production queues, power, can_produce list |
| `get_enemies` | Visible enemy units and buildings (fog-of-war limited) |
| `get_production` | Current build queue + what you can build right now |
| `get_map_info` | Map name, dimensions |
| `get_exploration_status` | % explored, quadrant breakdown, whether enemy base found |
### Knowledge (learn the game)
| Tool | Purpose |
|------|---------|
| `lookup_unit(unit_type)` | Stats for a unit (e.g., `lookup_unit("e1")` → Rifle Infantry) |
| `lookup_building(building_type)` | Stats for a building (e.g., `lookup_building("weap")` → War Factory) |
| `lookup_tech_tree(faction)` | Full build order for `"allied"` or `"soviet"` |
| `lookup_faction(faction)` | All units and buildings for a faction |
| `get_faction_briefing()` | Comprehensive stats dump for YOUR faction |
| `get_map_analysis()` | Resource patches, water, terrain, strategic notes |
| `batch_lookup(queries)` | Multiple lookups in one call |
### Game Control
| Tool | Purpose |
|------|---------|
| `advance(ticks)` | **Critical** — advances the game by N ticks. Nothing happens without this. Use 25 ticks ≈ 1 second, 250 ticks ≈ 10 seconds. |
### Movement & Combat
| Tool | Purpose |
|------|---------|
| `move_units(unit_ids, target_x, target_y)` | Move units to a position |
| `attack_move(unit_ids, target_x, target_y)` | Move and engage enemies along the way |
| `attack_target(unit_ids, target_actor_id)` | Focus-fire a specific enemy |
| `stop_units(unit_ids)` | Halt movement and attacks |
| `guard_target(unit_ids, target_actor_id)` | Guard a unit or building |
| `set_stance(unit_ids, stance)` | Set to `"holdfire"`, `"returnfire"`, `"defend"`, or `"attackanything"` |
| `harvest(unit_id, cell_x, cell_y)` | Send harvester to ore field |
### Production
| Tool | Purpose |
|------|---------|
| `build_unit(unit_type, count)` | Train units (e.g., `build_unit("e1", 5)` → 5 Rifle Infantry) |
| `build_structure(building_type)` | Start constructing a building (needs manual placement) |
| `build_and_place(building_type, cell_x, cell_y)` | Build + auto-place when done (preferred) |
| `place_building(building_type, cell_x, cell_y)` | Place a completed building |
| `cancel_production(item_type)` | Cancel queued production |
| `get_valid_placements(building_type)` | Get valid locations to place a building |
### Building Management
| Tool | Purpose |
|------|---------|
| `deploy_unit(unit_id)` | Deploy MCV into Construction Yard |
| `sell_building(building_id)` | Sell for partial refund |
| `repair_building(building_id)` | Toggle auto-repair |
| `set_rally_point(building_id, cell_x, cell_y)` | New units go here |
| `power_down(building_id)` | Toggle power to save electricity |
| `set_primary(building_id)` | Set as primary production building |
### Unit Groups
| Tool | Purpose |
|------|---------|
| `assign_group(group_name, unit_ids)` | Create a named group |
| `add_to_group(group_name, unit_ids)` | Add units to existing group |
| `get_groups()` | List all groups |
| `command_group(group_name, command_type, ...)` | Command entire group |
### Compound Actions
| Tool | Purpose |
|------|---------|
| `batch(actions)` | Execute multiple actions in ONE tick (no time advance) |
| `plan(steps)` | Execute steps sequentially with state refresh between each |
### Utility
| Tool | Purpose |
|------|---------|
| `surrender()` | Give up the current game |
| `get_replay_path()` | Path to the replay file |
| `get_terrain_at(cell_x, cell_y)` | Terrain type at a cell |
### Planning Phase (optional)
| Tool | Purpose |
|------|---------|
| `start_planning_phase()` | Begin pre-game strategy planning |
| `get_opponent_intel()` | AI opponent profile and counters |
| `end_planning_phase(strategy)` | Commit strategy and start playing |
| `get_planning_status()` | Check planning state |
---
## How to Play (Strategy Guide)
### Step 1: Deploy your MCV
At game start you have a Mobile Construction Vehicle (MCV). Deploy it to create your Construction Yard:
```
1. Call get_units() to find your MCV (type "mcv")
2. Call deploy_unit(mcv_actor_id)
3. Call advance(50) to let it deploy
```
### Step 2: Build your base
Follow this build order:
| Order | Building | Type Code | Cost | Why |
|-------|----------|-----------|------|-----|
| 1 | Power Plant | `powr` | $300 | Powers everything |
| 2 | Barracks | `tent` (Allied) or `barr` (Soviet) | $300 | Infantry production |
| 3 | Ore Refinery | `proc` | $2000 | Income + free harvester |
| 4 | War Factory | `weap` | $2000 | Vehicle production (requires Refinery) |
| 5 | More Power | `powr` | $300 | Keep power positive |
Use `build_and_place()` — it auto-places when construction finishes:
```
1. Call get_valid_placements("powr") to find a good spot
2. Call build_and_place("powr", cell_x, cell_y)
3. Call advance(250) to let it build (~10 seconds)
4. Check get_production() to confirm completion
5. Repeat for next building
```
**Important**: Your faction may be Allied OR Soviet. Check `get_game_state()` → `faction` field. Barracks type depends on faction.
### Step 3: Train your army
```
1. Call build_unit("e1", 5) for 5 Rifle Infantry ($100 each)
2. Call advance(100) to let them train
3. Once War Factory is ready: build_unit("3tnk", 3) for Medium Tanks ($800 each)
4. Set rally point near base exit: set_rally_point(barracks_id, x, y)
```
**Key units by faction:**
| Unit | Code | Cost | Role |
|------|------|------|------|
| Rifle Infantry | `e1` | $100 | Cheap, fast |
| Rocket Soldier | `e3` | $300 | Anti-armor |
| Medium Tank | `3tnk` | $800 | Main battle tank |
| Heavy Tank | `4tnk` | $950 | Soviet heavy armor |
| Light Tank | `1tnk` | $700 | Fast flanker |
| Artillery | `arty` | $600 | Long range |
| V2 Launcher | `v2rl` | $700 | Soviet long range |
### Step 4: Scout the map
Send a cheap unit to explore:
```
1. Train one Rifle Infantry
2. Call attack_move([unit_id], far_x, far_y) toward unexplored areas
3. Call advance(500) to let it travel
4. Call get_enemies() to see what you've found
```
### Step 5: Attack the enemy
Once you have 8-10 combat units:
```
1. Call get_enemies() to find enemy buildings
2. Call attack_move(all_unit_ids, enemy_base_x, enemy_base_y)
3. Call advance(100), check get_game_state() for battle progress
4. If enemies visible: attack_target(unit_ids, enemy_id) to focus fire
5. Keep producing reinforcements while attacking
```
### Step 6: Macro (ongoing economy)
Throughout the game:
- Keep power positive (build Power Plants when needed)
- Keep producing units — never let production idle
- Build additional Ore Refineries for more income
- Replace lost harvesters
---
## Game Loop Pattern
A good agent loop looks like this:
```
1. get_game_state() → read the situation
2. Decide what to do based on:
- Economy: enough cash? Power positive?
- Production: anything building? Queue empty?
- Military: under attack? Ready to attack?
- Exploration: enemy found yet?
3. Issue orders (build, move, attack)
4. advance(50-250) → let time pass
5. Repeat until game is won or lost
```
Check `get_game_state()` → `done` field. When true, `result` will be `"win"` or `"loss"`.
---
## Tips
- **Always call `advance()`** after issuing orders. Orders don't execute until game time passes.
- **Use `batch()`** to issue multiple orders in one tick (e.g., build + move + set rally).
- **Check `available_production`** before building — it lists what you CAN build right now.
- **Don't let production idle** — keep queuing units. Idle production wastes time.
- **Build near your Construction Yard** — buildings must be placed adjacent to existing structures.
- **Power matters** — if power goes negative, production slows to a crawl.
- **Use `attack_move`** instead of `move` when heading toward enemies — units will engage threats.
- **A completed building blocks the queue** until placed. Always use `build_and_place()` to avoid this.
---
## Troubleshooting
| Problem | Solution |
|---------|----------|
| Server not running | `openra-rl server start` (needs Docker) |
| Can't build anything | Deploy MCV first with `deploy_unit()` |
| Building won't place | Use `get_valid_placements()` for valid spots |
| No money | Build Ore Refinery (`proc`) for harvesters |
| Production slow | Check power with `get_economy()` — build Power Plants |
| Can't find enemy | Scout with `attack_move` to unexplored quadrants |
## Links
- **GitHub**: https://github.com/yxc20089/OpenRA-RL
- **PyPI**: https://pypi.org/project/openra-rl/
- **Leaderboard**: https://huggingface.co/spaces/yxc20089/OpenRA-Bench
- **Discord**: https://discord.gg/openra-rl
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!