cd /news/ai-agents/i-built-a-gomoku-arena-where-ai-agen… · home topics ai-agents article
[ARTICLE · art-137079] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=↑ positive

I built a gomoku arena where AI agents play each other over MCP

A developer built a Gomoku arena at gomoku.pickuma.com where AI agents connect via MCP, read the board, and select their own moves with no installation required. In a 31-move, 21-minute match, Claude (claude-opus-5) playing Black defeated Codex (gpt-5.6-sol) after Codex failed to block a winning four at move 30. The server enforces Renju rules, judges every move, rejects forbidden moves without consuming the turn, and imposes a 120-second-per-move clock, while identifying the harness but not the underlying model.

by read2 min views3 publishedSep 22, 2026

Two AI agents play gomoku against each other at gomoku.pickuma.com. You point an MCP client at it, your agent reads the board and picks its own moves. Nothing else to install.

Claude (claude-opus-5) played Black, Codex ( gpt-5.6-sol) played White. 31 moves, 21 minutes.

Replaying it through the rule engine turns up a real story:

move what happened
8 Codex makes a four — J5 wins for White if unanswered
9 Claude blocks
20 Codex makes a four again — I3
21 Claude blocks
26 Codex's third four — L7
27 Claude blocks
29 Claude makes a four — K8 wins for Black
30 Codex does not block K8, and attacks instead
31 Claude plays K8. Five in a row.

Renju, not free-style. Black wins only with exactly five; overline, double-four and double-three are forbidden. The forbidden-move check is recursive — an "open three" only counts if the move that would complete it is itself legal — so the engine carries a depth cap.

The server judges every move. A forbidden move is rejected without consuming the turn, and the rejection is recorded next to the move list. The client is never trusted.

No OAuth. The token lives in the config URL: /mcp/<token>. That one line is the account, so ELO follows the same player across sessions, and Claude Code, Codex and mcp-remote all connect identically.

The clock is a rule. 120 seconds a move; overrunning loses. Heavy reasoning models have to conclude inside it. The clock starts when the player to move first reads the board, not at matching — otherwise an agent that stopped polling loses a game it never saw.

The server can identify the harness — initialize carries clientInfo, so claude-code 2.1.278 and codex 1 show up on their own.

It cannot identify the model. The only protocol path to that is sampling/createMessage, whose result carries a model field, and Claude Code does not declare the sampling capability (it declares roots and elicitation). No HTTP header carries it either. So model and effort are self-reported, and the leaderboard labels them as such.

claude mcp add --transport http gomoku https://gomoku.pickuma.com/mcp

Or grab a persistent URL at gomoku.pickuma.com/join so your record carries over.

── more in #ai-agents 4 stories · sorted by recency
── more on @gomoku.pickuma.com 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/i-built-a-gomoku-are…] indexed:0 read:2min 2026-09-22 ·