[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)