wordle-solver
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@wordle-solverI played CRANE and got gray-yellow-gray-green-gray. What should I play next?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Wordle Solver MCP Server
An MCP (Model Context Protocol) server that gives AI assistants governed access to a production analytics microservice: the entropy-based Wordle solver that powers the interactive demo on courtneyperigo.com.
This repo is the companion demo for the article "Your Analytics Microservices Have a New Customer" — a sequel to Get More Out of Your Data with Analytics Microservices (Towards Data Science, 2022). The 2022 argument: put your analytics behind independently deployable, domain-bound services. The 2026 payoff: the highest-volume consumer of a well-built analytics service is now an AI agent — and MCP is the standardized communication layer that article said was the pattern's biggest cost.
2022 2026
┌──────────┐ ┌──────────────────┐ ┌───────────┐ ┌──────────────────┐
│ Web UI │───▶│ Solver API │ │ AI agent │───▶│ MCP server │
│ (Vue) │ │ (FastAPI on │ │ (Claude, │ │ (this repo) │
└──────────┘ │ App Engine) │ │ etc.) │ └────────┬─────────┘
└──────────────────┘ └───────────┘ │
▼
┌──────────────────┐
│ Same solver API │
│ — unchanged │
└──────────────────┘The microservice didn't change. It gained a new kind of customer.
What the solver does
The upstream service ranks every legal Wordle guess by expected information gain (measured in bits) against the words still consistent with the game's feedback. It knows the official NYT allowed-guess and answer lists, and reports game state as uncertainty in bits. It's a FastAPI app on Google App Engine with Cloud Build CI/CD — a small but real production analytics service, built originally for a website UI, long before agents.
Related MCP server: multivon-mcp
Tools
Tool | When the agent should call it |
| At the start of a game — dictionary size, answer count, starting uncertainty, and suggested opening words |
| After each guess — pass the full guess history with color feedback ( |
Resources
Resource | Contents |
| How the ranking works (lower bits = better), what the two ranked lists mean, how to read uncertainty — so the assistant explains recommendations correctly instead of guessing |
Design notes (the part that generalizes beyond Wordle)
Tools accept the agent's representation, not the API's. The upstream API wants position-wise constraint lists (
green_letters, per-position yellow exclusions, duplicate caps). Agents think in guesses: "I played CRANE and got gray-yellow-gray-green-gray." The translation — including the subtle duplicate-letter rules — lives inconstraints.py, tested intest_constraints.py. Don't make the model do bookkeeping code can do.Tool descriptions say when to call, not just what. The descriptions steer the agent away from a known-expensive call path (scoring the full dictionary with no constraints) and toward the cheap one.
Responses are shaped for context economy. The API returns 100 recommendations; the tool returns 10 plus the answer-eligible shortlist. An agent's context window is a cost center.
Documentation is served, not linked. The methodology resource travels with the tools, so the assistant's explanations are grounded in how the solver actually works.
Install & run
Requires Python 3.10+ and uv (or plain pip).
git clone https://github.com/agentdanger/wordle-mcp-server.git
cd wordle-mcp-server
uv sync # or: pip install -e .
uv run server.py # starts the server on stdioClaude Code
claude mcp add wordle-solver -- uv --directory /path/to/wordle-mcp-server run server.pyClaude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"wordle-solver": {
"command": "uv",
"args": ["--directory", "/path/to/wordle-mcp-server", "run", "server.py"]
}
}
}Point at a different deployment of the solver with WORDLE_API_BASE.
Try it
Ask your assistant:
I'm playing Wordle. I opened with CRANE and got: C gray, R yellow, A gray, N green, E gray. What should I play next?
The assistant calls recommend_guesses(words=["crane"], feedback=["xyxgx"]) and reasons over ranked, real solver output instead of guessing.
Tests
uv run pytestLicense
MIT
Available Tools
2 toolsget_game_statsA
Get the state of a Wordle game before any guess has been made.
Call this at the START of a game, before the first guess: it returns the size of the guess dictionary, how many words are eligible answers, and the starting uncertainty in bits. Do not call recommend_guesses with an empty guess history - scoring the full dictionary is too expensive, so open with a standard high-information first word instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool is a read-only stats getter (safe, non-mutating), and contextualizes the output fields (dictionary size, eligible answers, uncertainty in bits). While it doesn't describe return format details, the description sufficiently conveys the read-only nature and what data it surfaces for a game-state tool with no destructive behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded, with the core purpose stated first and usage guidance following. Every sentence adds value. Slightly more verbose than necessary but justified by the important exclusion guidance regarding the sibling tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple 0-parameter, read-only stats tool with no output schema. The description explains what data it returns (dictionary size, eligible answers, uncertainty), when to use it, and importantly warns against the expensive alternative path. This is functionally complete for its scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters. With no parameters to document, the baseline is 4. There is nothing the description needs to add about parameter syntax since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the state of a Wordle game (guess dictionary size, eligible answer count, starting uncertainty in bits). The verb 'get' plus resource 'game state' is specific and distinct from the sibling recommend_guesses, which focuses on suggesting guesses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to call this at the START before the first guess, and provides an explicit exclusion: do NOT call recommend_guesses with an empty guess history because scoring the full dictionary is too expensive, so open with a standard high-information first word instead. This clearly delineates when to use this tool vs. the sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_guessesA
Get ranked next-guess recommendations for an in-progress Wordle game.
Call this AFTER each guess, passing the full game so far: every guessed word and its color feedback, in order. Feedback is one string per guess, one character per letter: 'g' green (right letter, right spot), 'y' yellow (in the word, wrong spot), 'x' gray (not in the word).
Example: the guess CRANE showing gray-yellow-gray-green-gray is words=["crane"], feedback=["xyxgx"].
Returns the top recommendations ranked by expected information gain (lower bits = better guess), the best guesses that are also eligible answers, and game-state statistics including remaining possibilities and uncertainty in bits. Prefer a word from best_answers when few answers remain; prefer best_overall when many remain and you want to maximize information.
| Name | Required | Description | Default |
|---|---|---|---|
| words | Yes | ||
| feedback | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the ranking criterion (expected information gain, lower bits = better), distinguishes the two recommendation lists (best_answers vs best_overall) and what each is for, and describes game-state statistics returned including remaining possibilities and uncertainty in bits. It doesn't discuss edge cases (e.g., invalid states, duplicate guesses), but covers the core behavioral contract well for a non-destructive calculation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Each sentence earns its place: the opening states purpose, the second block covers invocation timing and parameter semantics with an example, and the final sentence covers return-value interpretation. No filler or redundancy, well front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 required array parameters, no output schema, and no annotations, the description is complete: it explains both parameters with formats and example, describes the three categories of return data, gives behavioral guidance for selecting among them, and clearly scopes input requirements ('full game so far'). No output schema exists, so describing the returned fields is necessary and done well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully. It does: it defines words as 'every guessed word' in order, defines feedback format per-character ('g'/'y'/'x' each with explicit meaning), enforces one feedback string per guess, and gives a concrete example mapping words=['crane'] to feedback=['xyxgx']. This substantially exceeds the bare array-of-strings schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'ranked next-guess recommendations for an in-progress Wordle game' using a specific verb ('Get ranked...recommendations') and resource (next guesses for Wordle). It distinguishes from sibling get_game_stats by focusing on recommendations rather than statistics, and even describes what the returned fields contain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Call this AFTER each guess, passing the full game so far' and provides concrete format rules for the feedback strings ('g', 'y', 'x'). It also includes a worked example (CRANE = 'xyxgx') and end-state guidance on when to prefer best_answers vs best_overall. This is exceptionally actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
v0.1.0- First observed
get_game_stats - First observed
recommend_guesses
TDQS
The two tools have clearly distinct purposes: get_game_stats initializes a game, while recommend_guesses drives in-progress gameplay. Each description explicitly states when to call the tool and what it must not be called with, leaving no ambiguity about which to invoke at any stage.
Both tools follow a verb_noun pattern (get_game_stats, recommend_guesses). The verbs differ (get vs recommend) but this reflects distinct actions rather than inconsistency; this is a minor stylistic variation within an otherwise consistent scheme.
Two tools is on the thin side for a solver server. The set covers game initialization and guidance, but a solver could reasonably also expose a dedicated 'get opening word' tool or a 'filter results' capability. That said, two focused tools for a tightly scoped purpose is defensible.
The surface covers the start-state and the recommendation loop, which are the core needs. However, get_game_stats doesn't itself return a first guess (it explicitly instructs against calling recommend_guesses with empty history), leaving the opening move unexplained. A tool to provide the standard high-information first word would close the gap between game start and first guess.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Official MCP server for Agentwork — delegate tasks to AI agents with human-in-the-loop
MCP server for building and testing AI agents with multi-model experimentation and insights.
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- FlicenseBqualityDmaintenanceAn MCP server that allows users to play the 'Turtle Soup' puzzle game with LLMs acting as game hosts, providing tools to access game rules, puzzles, and comprehensive puzzle information.312-

multivon-mcpofficial
AlicenseAqualityBmaintenanceMCP server that gives AI coding agents direct access to evaluation tools.22Apache 2.0- AlicenseNot gradedqualityCmaintenanceA local MCP server that gives AI agents structured task planning, execution tracking, and guided research workflows.11MIT
- AlicenseAqualityCmaintenanceAn MCP server for agent-guided DSA practice that generates LeetCode-style problems and provides tutoring with escalating hints, concept explanations, and progress tracking.77MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/agentdanger/wordle-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server