Live data from Hacker News

Show HN: I built a MCP server so Claude can play Minesweeper

github.com

1–10 of 39 posts

Show HN: I built a MCP server so Claude can play Minesweeper

#1
Hi! I build an MCP server that allows clients to play Minesweeper. It turns out that Claude is not very good at it (makes obvious mistakes, hasn't won a single game on a 9x9 board after many attempts).

I am curious how I can prompt Claude to do better?

Show HN: I built a MCP server so Claude can play Minesweeper
github.com

Re: Show HN: I built a MCP server so Claude can play Minesweeper

#2
Key things for debugging:

* What is the data format it gets? Does it unambiguously correspond to output (i.e. without mistaking rows for cols, or indexes starting at 0 or 1)?

* What is the prompt?

* Is the model allowed to think? (If it is just JSON response, I expect it to suck, as tokens are units of thinking.)

Re: Show HN: I built a MCP server so Claude can play Minesweeper

#4
post #2

Key things for debugging: * What is the data format it gets? Does it unambiguously correspond to output (i.e. without mistaking rows for cols, or indexes starting at 0 or 1)? * What is the prompt? * Is the model allowed to think? (If it is just JSON response, I expect it to suck, as tokens are units of thinking.)

One way to sanity check would be to ask it to reproduce the board with the new position marked to make sure the board model works as expected.

Re: Show HN: I built a MCP server so Claude can play Minesweeper

#5
Yea Claude sucks at minesweeper (and many spatial reasoning tasks), but isn’t an idea of MCPs is that Claude should be able to ask an MCP what the next best move is rather than figuring it out itself? Like offload hard thinking/reasoning to purpose-built solvers because they are deterministic? Though I guess you’d expect a reasoning model to be able to come up with its own solvers on the fly, especially for well-known problems. Maybe having access to an MCP itself is confusing it?

Re: Show HN: I built a MCP server so Claude can play Minesweeper

#6
By just looking at the README from the repo (Would look more deeply into this later) you're replying with an image of the current status? If you expect Claude to interpret the image corretly may be you're asking for too much. Besides the image (Gotta say I didn't know you could fed Claude images in MCP that's incredible cool) I'd rather / also return some json payload that informs Claude which positions has "cleared" neighbor positions, and their value. E.g.:

    {"loc": {"x": 4, "y": 3}, "neighbors": [{"loc": {"x": 4, "y": 4}, "value": 1}, ... ]}
(Might not be valid json, just wrote that by hand on the fly)

I would report only on the positions that has cleared neighbors, and hope for the best. Good luck!

(Impressive work BTW, I think we haven't even started to see the possibilities of MCP and I love people being this imaginative)

Re: Show HN: I built a MCP server so Claude can play Minesweeper

#7
post #6

By just looking at the README from the repo (Would look more deeply into this later) you're replying with an image of the current status? If you expect Claude to interpret the image corretly may be you're asking for too much. Besides the image (Gotta say I didn't know you could fed Claude images in MCP that's incredible cool) I'd rather / also return some json payload that informs Claude which positions has "cleared"…

An interesting exercise here would be to make the MCP server show the actual state in a window and return to Claude just the json payload with the status.

Re: Show HN: I built a MCP server so Claude can play Minesweeper

#8
Ditch the image

use this format for board representation

``` { "game_state": { "board_size": { "width": 9, "height": 9 }, "mines_total": 10, "mines_flagged": 2, "game_status": "in_progress", // "in_progress", "won", "lost" "time_elapsed": 45, "difficulty": "beginner" // "beginner", "intermediate", "expert", "custom" }, "board": [ ["1", "?", "?", "2", "1", "1", "1", "1", "0"], ["1", "2", "?", "2", "?", "1", "1", "?", "0"], ["0", "1", "1", "2", "1", "1", "1", "1", "0"], ["0", "0", "0", "0", "0", "0", "0", "0", "0"], ["1", "1", "0", "0", "0", "0", "0", "0", "0"], ["?", "1", "0", "0", "0", "1", "1", "1", "0"], ["1", "1", "0", "0", "0", "1", "F", "1", "0"], ["0", "0", "0", "0", "0", "1", "1", "1", "0"], ["0", "0", "0", "0", "0", "0", "0", "0", "0"] ], "last_action": { "action_type": "reveal", "x": 3, "y": 2, "result": "revealed_number", "timestamp": 1710931245 } } ```

and this format for llm response generation

``` { "action": { "action_type": "reveal", // "reveal", "flag", "unflag", "chord" "x": 5, "y": 3, "confidence": 0.95, "reasoning": "This cell is surrounded by revealed cells with low numbers, making it a safe choice." }, "game_analysis": { "identified_safe_cells": [[5, 3], [2, 5]], "identified_mine_cells": [[6, 1], [8, 2]], "uncertain_cells": [[1, 1], [2, 2]], "strategy": "Targeting isolated revealed areas first to gain more information." } } ```

It should fix all your issues plus also make it cheaper to play

Re: Show HN: I built a MCP server so Claude can play Minesweeper

#9

Yea Claude sucks at minesweeper (and many spatial reasoning tasks), but isn’t an idea of MCPs is that Claude should be able to ask an MCP what the next best move is rather than figuring it out itself? Like offload hard thinking/reasoning to purpose-built solvers because they are deterministic? Though I guess you’d expect a reasoning model to be able to come up with its own solvers on the fly, especially for well-know…

MCP generically connects Claude to an environment, so it can be used to connect Claude to minesweeper, and then also to connect it to a CSP solver. Or a calculator and a dictionary. Or your GitHub and a devbox. Or Unity and a 3d printer.

Re: Show HN: I built a MCP server so Claude can play Minesweeper

#10
post #9

Yea Claude sucks at minesweeper (and many spatial reasoning tasks), but isn’t an idea of MCPs is that Claude should be able to ask an MCP what the next best move is rather than figuring it out itself? Like offload hard thinking/reasoning to purpose-built solvers because they are deterministic? Though I guess you’d expect a reasoning model to be able to come up with its own solvers on the fly, especially for well-know…

MCP generically connects Claude to an environment, so it can be used to connect Claude to minesweeper, and then also to connect it to a CSP solver. Or a calculator and a dictionary. Or your GitHub and a devbox. Or Unity and a 3d printer.

Curious, I’ve yet to see Claude effectively use Unity.
Post reply on HN