[HN Gopher] Show HN: I built a MCP server so Claude can play Min...
___________________________________________________________________
Show HN: I built a MCP server so Claude can play Minesweeper
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?
Author : tonypan
Score : 93 points
Date : 2025-03-20 07:58 UTC (15 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| stared wrote:
| 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.)
| viraptor wrote:
| 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.
| tonypan wrote:
| I noticed that Claude often tries to click out of bounds even
| though in the prompt I tell it that the index is zero based.
| _joel wrote:
| Maybe tell it it's a champion Minesweeper player and that loss is
| not an option :)
| lgas wrote:
| Based on some of the recent leaked prompts I imagine something
| like "The mines are connected to actual bombs that will blow up
| your family if you make a mistake" might work best.
| bredren wrote:
| Realize this must be somewhat tic, but curious about a link
| to example leaked related prompt?
| 111111101101 wrote:
| https://simonwillison.net/2025/Feb/25/leaked-windsurf-
| prompt...
| breckenedge wrote:
| 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?
| fragmede wrote:
| 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.
| breckenedge wrote:
| Curious, I've yet to see Claude effectively use Unity.
| fragmede wrote:
| That repo's only a week old, give it some time.
|
| Did Mario not do it for you? https://youtu.be/dCC7QoV5a6E
| breckenedge wrote:
| 2 days old :D where are people seeing these releases
| announced? I swear we need an MCP weekly email digest
| emersonmacro wrote:
| Pulse MCP has a weekly email digest
| dartos wrote:
| MCP is analogous to REST.
|
| It doesn't define what behavior should be where in a given app,
| just how to communicate what that behavior is and how to invoke
| it.
| breckenedge wrote:
| RPC, not REST
| ericol wrote:
| 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)
| ericol wrote:
| 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.
| tonypan wrote:
| Good idea! I've updated the game server so a human can watch
| the game in real-time. Updated the README with a screen
| recording: https://github.com/tonypan2/minesweeper-mcp-server
| codegladiator wrote:
| 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
| lopsidedgrin wrote:
| Teach Claude how to play Solitaire or Candy Crush at work and we
| will have come full circle.
| rcarmo wrote:
| MCP is the new agentic, it seems. Most MCP stuff I've seen seems
| over-engineered, but this one was actually fun to check out.
| jakeprins wrote:
| cool
| helsinki wrote:
| Maybe I'm misunderstanding, but how is the actual game board / UI
| being rendered? I only see a MCP protocol definition.
| tonypan wrote:
| The game server is another Node app I built:
| https://github.com/tonypan2/minesweeper-server.
| punkpeye wrote:
| Awesome to see MCP related work surfacing on the front page of
| HN!
| tmitchel2 wrote:
| It feels nuts to me that there is a push away from strict APIs to
| conversational interfaces for products and then the actual
| technology itself under the hood is translating that into a
| strict set of API calls in order to understand something. Would
| it not be better to seek interoperability with fairly well
| scripted natural language handshake. I feel like MCP is built for
| understanding language and Syntax to a greater degree but not
| random tools and APIs.
| cbm-vic-20 wrote:
| For the acroym-averse:
|
| MCP = Model Context Protocol
|
| https://modelcontextprotocol.io/
|
| "MCP is an open protocol that standardizes how applications
| provide context to LLMs."
___________________________________________________________________
(page generated 2025-03-20 23:01 UTC)