A real board, inside the chat

Check, Mate? is a free MCP tool that lives at mcp.getmasset.com/chess/mcp. Connect it to Claude, say "let's play chess," and a real board renders right there in the conversation. Navy and white squares, legal moves marked with blue dots, a move list, captured pieces, a promotion picker when your pawn reaches the last rank.

You move by clicking the board. Claude moves by calling a tool. The card and the conversation stay in sync because they're both reading the same game state.

INSIDE THE CHAT
You: "let's play chess"
Claude: "I'll meet you in the center. 1... e5. Your move."
The board after 1. e4 e5. The click and the reply read the same game state.

Until this month, that sentence was impossible. A tool call in an AI chat could only return text. On July 28 the MCP spec made MCP Apps official: a tool result can now carry an interactive HTML card that renders inline, talks back to the server, and updates itself. We wrote about the spec change, and shipped our first tool on it, the day it landed. The chess board is tool number two on the same free host.

Connect it in one minute

You don't need an account. You don't need a credit card. You need one URL.

In Claude, open Settings, then Connectors, then "Add custom connector." Paste https://mcp.getmasset.com/chess/mcp, save, and start a new chat. Say "let's play chess." That's it. The board appears, you're playing white, and Claude will start thinking out loud about how to respond to your first move.

01 / OPEN SETTINGS

In Claude, go to Settings, then Connectors, then Add custom connector.

02 / PASTE THE URL

Paste this URL and save. No signup, no key.

mcp.getmasset.com/chess/mcp
03 / SAY THE WORDS

Start a new chat and say: let's play chess.

Three steps, about a minute, nothing to install.

One honest caveat. The interactive board renders in clients that support MCP Apps, which today means claude.ai and Claude Desktop. Connect it to another MCP client and everything still works, you just get the text version: a unicode board, the position, and the move list. The game is the same either way.

There's no engine. That's the whole point.

Every chess app you've ever used runs an engine, a program like Stockfish that calculates millions of positions per second. Check, Mate? has none. When it's Claude's turn, Claude reads the position and picks a move the same way it writes a paragraph: from everything it has ever read about chess.

On its own, that goes wrong fast. Language models are famous for playing confident, illegal chess. So we gave the model two guardrails. First, the rules live in code: a library called chess.js validates every move, and an illegal one bounces back with a polite list of legal alternatives instead of breaking the game. Second, there's a third tool, chess_position, that Claude calls before it moves. It returns a structured report: every legal move, which captures are available and what they're worth, which pieces are hanging undefended, the material count, the phase of the game.

Think of it as giving the model eyes, but not a brain. The analysis tells Claude what's true about the position. Choosing the move is still all Claude.

How strong is it? Honestly, somewhere around an enthusiastic club player, on a good day. It develops pieces sensibly, it grabs hanging material, and then every so often it walks its queen into a fork with total confidence. That's not a bug we plan to fix. Beating an engine is impossible and boring. Beating the model that helps you write email copy, on a board it can actually see, is genuinely fun.

If a fully playable game can render inside a conversation, so can your pricing calculator, your campaign calendar, your content library.

Benjamin Ard, Co-Founder & CEO at Masset

The entire game fits in one line of text

Here's the part that makes this tool almost embarrassingly simple to run: the server remembers nothing. No database, no accounts, no sessions. Chess has a gift for this. A whole position compresses into one line of text called a FEN string. The starting position looks like this:

rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1

Every tool call carries the current FEN in and hands a new FEN back, along with the move history. The conversation itself is the save file. Close the chat, come back tomorrow, and the last board card still holds everything needed to keep playing.

THE WHOLE GAME TRAVELS THROUGH THE TOOL CALL
Your click, or Claude's move
chess_move(fen, move, history)
chess.js validates
new fen + updated board
rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq…
Nothing is stored between moves. The FEN and the history are the entire memory.

This is the same pattern our A/B test tool uses, and it's worth stealing for anything you build on MCP: if the state fits in the arguments, you never have to store, secure, or delete anyone's data, because you never have it.

How the afternoon actually went

I'll be honest about the process, because the process is the story. One AI model didn't build this. Four did.

The most capable model wrote the spec: three tools, exact input shapes, exact output shapes, the board's visual rules, and the list of tests that had to pass. Then it handed the actual building to three cheaper models running in parallel. One wrapped the chess rules and wrote nineteen tests. One built the board card. One wired the server, the routes, and the docs. None of them ever saw each other's work. They only saw the contract.

ONE CONTRACT, THREE BUILDERS, ONE REVIEWER
The contract: tools, shapes, tests, visual rules
Rules + 19 tests
cheaper model
The board card
cheaper model
Server + routes
cheaper model
Review pass: caught the FEN notation mismatch and the hidden-overlay CSS bug
capable model
The spec and the review came from the same model. The labor did not.

Then the expensive model came back to check everything, and this is the part worth remembering: the checking mattered. The automated smoke test caught the two halves of the build disagreeing about one obscure chess notation detail (whether the en passant square gets written into the FEN after 1. e4; modern chess.js says no, the test writer assumed yes). And a screenshot of the live page caught a one-line CSS bug that dimmed the whole card behind an invisible overlay. Cheap models did the labor. The spec and the review are what made it shippable.

Total elapsed time from "let's build it" to playing checkmate against the production server: one afternoon.

Why a content company shipped a chess board

Masset's whole thesis is that the AI chat window is becoming the place where work happens, and your business content needs to live where the AI can reach it. Mostly we make that case with serious things: brand-locked documents, approved messaging, a searchable library your team's AI can actually cite.

The chess board makes the same case in ten seconds, without a slide. If a fully playable game can render inside a conversation, then so can your pricing calculator, your campaign calendar, your content library. The chat isn't just where you ask about software anymore. It's where the software shows up.

The code is MIT licensed and public, board and all, if you want to see how thin the whole thing really is. And if you beat Claude, I'd genuinely love to hear how it lost. It's free, it takes a minute to connect, and it's the most fun you'll have testing an infrastructure spec this week.

Key Takeaways

  • Check, Mate? is a free MCP tool that renders a playable chess board inside Claude: connect mcp.getmasset.com/chess/mcp and say 'let's play chess.'
  • There is no chess engine. Claude picks its own moves, with a rules library blocking illegal ones and an analysis tool giving it structured sight of the position.
  • The server is fully stateless: the whole game travels through tool calls as a FEN string plus move history, so nothing is stored and no account exists.
  • MCP Apps, official in the July 28, 2026 spec, is what lets a tool result render as an interactive card instead of text.
  • The build took one afternoon: one capable model wrote the contract and reviewed, three cheaper models built the parts in parallel, and the review caught two real bugs.

Frequently Asked Questions

Yes. No account, no email, no trial. Connect the URL and play. The code is MIT licensed on GitHub if you'd rather run your own copy.
No. The server keeps nothing. The entire game state lives inside your conversation as a FEN string and a move list, passed through each tool call. When you delete the chat, the game is gone.
Clients that support MCP Apps render the full clickable board. Today that means claude.ai and Claude Desktop. Any other MCP client still plays fine with a text board and move list in each reply.
Around an enthusiastic club player, with occasional blunders it commits to confidently. There is no engine behind it. The move choices come from the model itself, guided by a structured analysis of the position.
No. Every move from either side goes through the same rules library (chess.js), and illegal moves are rejected with the position unchanged. Claude sees exactly the same position you do.
Yes. Ask Claude to start a game from any FEN string, or to let you play black. The new-game tool accepts both.
Topics:mcp appsmodel context protocolchessclaudeai for marketersfree marketing toolsmcp toolsai build log
Share:LinkedIn
Benjamin Ard

About Benjamin Ard

Benjamin Ard is the Co-Founder and CEO of Masset, the best home for your business content. He writes about AI, content, and the changing shape of marketing.

Free tools + updates

We build free tools for marketers. Get the next one first.

Articles like this one come from things we actually build. Leave your email and we will send you every new tool, prompt, and write-up we publish. No spam, and you can unsubscribe anytime.