Skip to main content

Python 3.13+ pytest PyPI GitHub commits since latest release CodeQL Advanced OpenSSF Scorecard License: MIT

╭─╮╭┬╮╶┬╴   ╭─╮╷ ╷╶┬╮╭─╮╷╭ ╷ ╷
╰─╮│││ │    ╰─╮│ │ │││ │├┴╮│ │
╰─╯╵ ╵ ╵    ╰─╯╰─╯╶┴╯╰─╯╵ ╵╰─╯

smt-sudoku-mcp

Now, your agents can play Sudoku confidently!

An MCP server that demonstrates the power of satisfiability modulo theories (SMT) solving, using Z3, through the classic constraint-satisfaction puzzle of Sudoku.

Sudoku maps cleanly onto SMT primitives: generating a puzzle means finding a model that satisfies the Sudoku constraints and then proving a reduced set of clues still has only one solution; validating a grid means checking those same constraints against given cell values; solving a puzzle means finding a model or proving none exists.

Tools

All four tools are stateless: every call takes and/or returns a complete grid explicitly, with no server-side session state.

A Sudoku grid is represented as {"rows": [[...9 ints...], ...9 rows...]}, where each cell is 1-9 for a given digit or 0 for an empty cell. Any tool result that names a specific cell (a conflict) reports row/col as 1-indexed, matching how Sudoku cells are conventionally described in text (row 1, column 1 is the top-left cell).

generate_sudoku_puzzle

Generates a new, uniquely-solvable Sudoku puzzle.

  • Input: difficulty — one of "very easy", "easy", "medium", "hard", or "very hard" (default "medium"), mapping to an approximate target clue count: 63, 51, 42, 30, and 21 respectively. "very hard"'s target of 21 sits just above the proven minimum of 17 givens for any uniquely-solvable Sudoku puzzle, so in practice it commonly lands noticeably above 21 (e.g. mid-20s), since removal stops once no further cell can be cleared without breaking uniqueness.
  • Output: {"puzzle": <grid>, "difficulty": <str>, "givens": <int>}givens is the actual number of filled cells, which may be slightly above the target if removing further cells would have broken uniqueness.

validate_partial_sudoku_solution

Checks whether a partially-filled grid is conflict-free and, if so, whether it can still be completed.

  • Input: grid — a partial grid (0 for empty cells).
  • Output: {"conflicts": [<cell>, ...], "is_completable": <bool | null>, "empty_cells": [<cell>, ...], "has_conflicts": <bool>, "empty_cells_count": <int>}is_completable is null when conflicts are present, since completability is not a meaningful question until they are resolved. empty_cells lists every still-empty cell regardless of has_conflicts; empty_cells_count is len(empty_cells).

validate_full_sudoku_solution

Checks whether a fully-filled grid is a correct Sudoku solution.

  • Input: grid — expected to have no empty cells.
  • Output: {"has_empty_cells": <bool>, "conflicts": [<cell>, ...], "is_valid": <bool>}.

solve_sudoku_puzzle

Solves an unsolved grid, or reports why it cannot be solved.

  • Input: grid — a partial grid to solve (0 for empty cells).
  • Output: {"status": "satisfiable" | "conflicting_givens" | "unsatisfiable", "solution": <grid | null>, "conflicts": [<cell>, ...]}. conflicts is only populated when status is "conflicting_givens" (two given cells directly violate a row/column/box rule); "unsatisfiable" means the givens are pairwise conflict-free but no completion exists.

Installation

Requires Python 3.13+. The package is published on PyPI.

The simplest way to run it is with uvx, which fetches the package into an ephemeral environment on first use and requires no separate install step:

uvx smt-sudoku-mcp

Alternatively, install it with pip (or uv pip) and run the installed console script directly:

pip install smt-sudoku-mcp
smt-sudoku-mcp

To work on the source itself rather than the published package, see Development below.

Using it with an MCP client

This server speaks MCP over stdio by default, so any MCP client that can launch a subprocess can use it without further setup. Set SMT_SUDOKU_MCP_TRANSPORT=streamable-http instead if the client needs to reach a standalone HTTP service; see Configuration.

Claude Code

claude mcp add smt-sudoku -- uvx smt-sudoku-mcp

Claude Desktop

Add an entry under Settings → Developer → Edit Config (claude_desktop_config.json):

{
  "mcpServers": {
    "smt-sudoku": {
      "command": "uvx",
      "args": ["smt-sudoku-mcp"]
    }
  }
}

Other MCP clients and agent frameworks

Any client that accepts a raw MCP server definition — Cursor, Windsurf, VS Code, or a custom agent built on an MCP SDK — can use the same command/args pair: uvx and ["smt-sudoku-mcp"]. For streamable-http, run the server separately with SMT_SUDOKU_MCP_TRANSPORT=streamable-http uvx smt-sudoku-mcp and point the client at http://<host>:<port>/mcp rather than giving it a command to launch.

Once connected, an agent can call the four tools above as it would any other tool. For example, asking an agent to "generate a hard Sudoku puzzle, then solve it and check the solution" will chain generate_sudoku_puzzle, solve_sudoku_puzzle, and validate_full_sudoku_solution without further guidance, since each tool's description and schema are sufficient for the agent to plan the sequence itself.

Configuration

Environment variables, all optional:

Variable Default Description
SMT_SUDOKU_MCP_TRANSPORT stdio stdio or streamable-http
SMT_SUDOKU_MCP_HOST 127.0.0.1 Bind host, streamable-http only
SMT_SUDOKU_MCP_PORT 8000 Bind port, streamable-http only
SMT_SUDOKU_MCP_ALLOWED_ORIGINS (none) Comma-separated browser origins to trust, streamable-http only

Development

To run the server from a source checkout instead of the published package, use uv:

uv sync
uv run smt-sudoku-mcp

See AGENTS.md for architecture notes and the full set of development commands (just -l).

Contributing

Issues and pull requests are welcome.

License

MIT.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smt_sudoku_mcp-0.3.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

smt_sudoku_mcp-0.3.0-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file smt_sudoku_mcp-0.3.0.tar.gz.

File metadata

  • Download URL: smt_sudoku_mcp-0.3.0.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for smt_sudoku_mcp-0.3.0.tar.gz
Algorithm Hash digest
SHA256 c555fc26f5c14b9d8b4a17d1ceab217c5369739351d61985ff4b859fb1937f94
MD5 24c82489d1503804caf2350c0b7c27c3
BLAKE2b-256 c002c80cd1db1e8b9fdfac5706704aa65e53bab60df34015ea4bf84f994be93b

See more details on using hashes here.

File details

Details for the file smt_sudoku_mcp-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: smt_sudoku_mcp-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 12.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for smt_sudoku_mcp-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fdb5e2845591d0e68ca8decf22ea95f28a2d3d72d5c95c0e17a10b31c904e3fe
MD5 73a546097372841bff93961d042e7aa1
BLAKE2b-256 10dc4203f4760105d505c35df6abf2be98289194c4fc8584571991d2f7f5a70c

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 files

0.2.0

2 files

0.1.0.post1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page