Slay the Spire 2 MCP
Click on "Deploy 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., "@Slay the Spire 2 MCPcontinue my current run and make one decision at a time"
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.
Slay the Spire 2 MCP
Let an LLM play your local Slay the Spire 2 through standard MCP tools. Tested with Codex and Unsloth Studio, including local models.
A C# game mod exposes structured state and actions on loopback HTTP. A Python adapter provides seven tools over MCP STDIO. The MCP client supplies the model; this project requires no model API key.
Windows alpha: the tested game version is 0.107.1. Early Access updates can break the bridge. See the support matrix for the difference between tested features and unverified platforms or multiplayer.
Quick start on Windows
You need:
Your own Steam installation of Slay the Spire 2.
Git, uv, and the .NET 9 SDK. The .NET runtime alone cannot build the mod.
Python 3.11 or newer. uv can download a compatible Python automatically.
An MCP client and a model that supports tool calling. Codex is optional.
Open PowerShell and run:
git clone https://github.com/Isendoum/slay-the-spire-mcp.git
cd slay-the-spire-mcp
# Close the game before installing the mod.
.\scripts\setup.ps1 -InstallModThe script finds Steam libraries, creates a locked Python environment in
.venv, builds the mod against your game, and installs it. Existing mod files
are backed up in artifacts/backups/; the installed port config is preserved.
The source release requires a local build and does not include game assemblies.
For Codex CLI registration during setup, use:
.\scripts\setup.ps1 -InstallMod -RegisterCodexIf PowerShell blocks downloaded scripts, you can run setup with a policy that applies only to that process:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\setup.ps1 -InstallModFor a custom game location:
.\scripts\setup.ps1 -GameDir 'D:\Steam Library\steamapps\common\Slay the Spire 2' -InstallModAlternatively, set STS2_GAME_DIR. Without -InstallMod, setup builds into
artifacts/mod/ without installing. To set up only the Python adapter, use
-SkipMod; this needs neither the game nor .NET, but gameplay needs the mod.
Launch the game, accept its mod consent prompt, enable STS2 MCP in Mods, and restart the game if prompted.
Related MCP server: Slay the Spire Copilot
Connect your MCP client
Generate configuration containing the actual absolute Python path:
.\scripts\client-config.ps1
# For Codex TOML:
.\scripts\client-config.ps1 -Format codexUse STDIO transport with that executable and the two arguments -m and
sts2_mcp.server. No working directory, environment variables, or OAuth are
required. Keep the checkout in its installed location; moving it requires
rerunning setup and updating the client's executable path.
For Unsloth Studio/Desktop, open Chat -> MCP -> Add custom MCP. Use
slay-the-spire-2 as the name, the generated Python path as URL or executable,
and add -m and sts2_mcp.server as separate argument rows. Test the connection,
add the server, and enable both its toggle and Use MCP Servers.
The client guide includes Codex registration, generic JSON, and Unsloth troubleshooting.
Verify and play
With the game open and the mod enabled:
.\.venv\Scripts\python.exe -m sts2_mcp.server --doctor
.\.venv\Scripts\python.exe scripts\smoke-test.py --liveThese checks read game state without making gameplay decisions. To check only
MCP startup and tool discovery without contacting the game, omit --live.
Ask your model:
Use the slay-the-spire-2 MCP to continue my current run. Start with health_check, get_game_state, and get_action_help. Make one decision at a time using current state, and wait through transitions. Do not abandon my run or change profiles.
To start a new run, explicitly ask for the character and difficulty you want.
Tool | Purpose |
| Check the game connection |
| Read the current screen, cards, enemies, intents, and choices |
| Get argument syntax for the 29 gameplay actions |
| Play cards, navigate, choose rewards/events, and buy items |
| Wait through enemy turns and loading |
| Look up discovered card and relic rules |
| Read active profile progress |
Indices start at zero and can shift after every action. Use target IDs from the
current state. Actions are never automatically retried. A timeout can mean the
action executed; read state before deciding whether to try again. The returned
after state can still show a transition; use wait_for_player or read again.
Supply expected_state_id to reject an already stale decision; it is a
best-effort check, not a transaction with the game's animation queue.
Connection and troubleshooting
The mod's http://127.0.0.1:15526 address is a REST game bridge, not an MCP
HTTP endpoint. Connect your MCP client to the Python executable over STDIO.
Missing prerequisite: follow the installer error, then reopen PowerShell.
Game not found: pass
-GameDiror setSTS2_GAME_DIR.Missing game DLL or compile errors after an update: verify the game files in Steam and check the supported version. Rebuild using
.\scripts\build-mod.ps1; source changes may be needed after game updates.Connection refused: keep the game open, confirm mod consent and activation, and check the game's Godot log for
[STS2 MCP]messages.Port conflict: edit the
portinSTS2_MCP.confbeside the installed mod, restart the game, and pass the matching--bridge-url http://127.0.0.1:PORTto the Python server or setSTS2_BRIDGE_URL.No tools: restart or refresh the client after registration and enable its MCP server toggle. For Unsloth remote/LAN settings, see the client guide.
Only loopback bridge origins are accepted. Environment proxies are ignored, and the mod rejects browser-origin requests. Other processes on the computer can access the bridge; it has no authentication. See SECURITY.md.
Updates and removal
Close the game, pull the latest source, and rerun the same setup command. Backups are made before existing mod files are replaced.
To uninstall, close the game and remove STS2_MCP.dll, STS2_MCP.json, and
optionally STS2_MCP.conf from its mods folder. For Codex, run
codex mcp remove slay-the-spire-2; remove the server entry from other clients.
You may then delete the checkout. To restore an older mod, copy its two files
from the matching directory in artifacts/backups/ with the game closed.
Development and licensing
See CONTRIBUTING.md for tests and local development, CHANGELOG.md for release history, and docs/bridge-api.md for the game protocol.
MIT licensed. The bridge is adapted from Gennadiyev/STS2MCP; its original copyright and license are retained. See THIRD_PARTY_NOTICES.md. This community project is not affiliated with or endorsed by Mega Crit. The license covers this integration, not Slay the Spire 2 or its assets.
Available Tools
7 toolsget_action_helpARead-only
Get action names and required/optional parameters for take_action.
Omit action to see all supported gameplay actions. This describes argument syntax; the current game state supplies the actual available choices and indices.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, non-destructive, closed-world behavior. The description adds the meaningful behavioral distinction that this returns static argument syntax while dynamic availability lives elsewhere — a real trait not encoded in annotations.
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?
Three short sentences: purpose first, then the omission behavior, then the scope caveat. Nothing is redundant and nothing is buried.
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 read-only, single-optional-parameter lookup with no output schema, the description covers what the tool returns and where authoritative state lives. It could note that the returned data mirrors the take_action argument schema, but the essentials are present.
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. It explains the single parameter's role (an action name) and the meaningful default (omit to list all), but adds no format guidance beyond that; the enumerated action values live only in the schema's enum. Adequate but not additive.
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?
States a specific verb and resource ('Get action names and required/optional parameters') scoped explicitly to take_action, so the agent knows this is documentation for that sibling rather than a state query. It also contrasts itself with get_game_state ('the current game state supplies the actual available choices and indices'), making the split unambiguous.
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?
Gives a concrete usage rule ('Omit action to see all supported gameplay actions') and clarifies when this tool is not what you want (live choices come from game state, not here). It stops short of explicitly saying 'call this before take_action to learn its syntax', which would be a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_game_stateARead-only
Read the current screen, player, cards, enemies, intents, and visible options.
Returns state_id, detected mode, and the complete state. Read again after each action. auto detects singleplayer/co-op. This tool works at menus as well as during a run.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavior beyond that: it lists returned fields (state_id, detected mode, complete state), states that auto detects singleplayer/co-op, and notes the tool works at menus as well as during a run.
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 four short, front-loaded sentences with no filler. Each sentence contributes: what is read, what is returned, when to read again, and how mode/menu behavior works.
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 simple read-only tool with one optional parameter and no output schema, the description covers purpose, return contents, usage timing, and mode behavior adequately. It could say more about what state_id is used for, but that is a minor gap for this complexity level.
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% for the single mode parameter, so the description must compensate. It explains that 'auto' detects singleplayer/co-op, which adds meaning beyond the enum, but it does not clarify the explicit singleplayer or multiplayer values or when a caller should override the default.
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 uses a specific verb ('Read') and enumerates the resource precisely: current screen, player, cards, enemies, intents, and visible options. It also states what is returned, making the tool's scope immediately clear and distinguishable from action-oriented siblings like take_action.
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?
It gives clear usage context: read again after each action and works at menus as well as during a run. However, it does not explicitly name when to use alternatives like take_action or health_check, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profileBRead-only
Read the active profile's progress and discoveries.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds the useful scoping detail that it reads the *active* profile, but says nothing about return shape, caching, or rate limits.
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?
One short sentence with the verb and scope front-loaded and no filler. It is efficient, though 'progress and discoveries' is doing vague double duty where a more concrete noun would be sharper.
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?
With no output schema, the description carries the burden of explaining what comes back, and 'progress and discoveries' is too abstract to tell an agent what fields or structure to expect. For a zero-param read tool this is adequate but leaves a real gap.
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 takes zero parameters, so there is no parameter semantics burden to carry; the baseline is 4. The description's mention of 'active' implicitly explains why no identifier argument is needed.
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?
States a specific verb (Read) and resource (the active profile) plus the payload (progress and discoveries), so the operation is unambiguous. It does not, however, distinguish itself from the sibling get_game_state, which an agent might reasonably confuse it with.
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?
There is no guidance on when to call this rather than get_game_state or health_check, and no prerequisites or exclusions stated. The only implied usage is that the profile must be 'active'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkBRead-only
Check whether Slay the Spire 2 is running with the STS2_MCP bridge enabled.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the bridge-enabled condition, but says nothing about the return format or failure behavior; with annotations carrying the safety burden, a 3 is appropriate.
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?
A single front-loaded sentence with no filler. Every word earns its place.
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 zero-param health check with annotations covering the safety profile, the core purpose is captured. However, with no output schema, the description should indicate what a successful or failed check returns (boolean, status, error) and none of that is present.
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 takes zero parameters, so per the baseline there is nothing for the description to disambiguate. No parameter semantics are needed.
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?
States a specific verb (check) and a precise condition (whether Slay the Spire 2 is running with the STS2_MCP bridge enabled). This is clearly distinguishable from siblings like get_game_state, which fetches state rather than verifying connectivity.
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?
No explicit when-to-use guidance or alternatives are given. An agent can infer it is a preflight connectivity check, but the description never says to run it before other tools or what to do if it fails.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_wikiBRead-only
Look up discovered card/relic rules text by name in the active game profile.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| item_type | No | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish it as a safe, non-destructive, closed-world read. The description adds a genuine behavioral constraint not in the schema: only 'discovered' items are searchable in the 'active game profile', which tells the agent results may be incomplete. It omits matching semantics (exact vs fuzzy) and result shape.
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?
A single front-loaded sentence with no filler; the verb and subject lead, and every word contributes to the meaning.
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?
With three parameters, no output schema, and 0% schema description coverage, the description is too thin. An agent gets no help on filtering, result limits, or ranking behavior — the core concerns of a search tool.
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 carries the burden, yet it only implies the query is name-based ('by name'). It says nothing about the limit parameter or the item_type filter (all/card/relic), which are undocumented except for the raw enum values.
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 states a specific verb ('look up'), a specific resource ('card/relic rules text'), and a scope ('by name in the active game profile'). This clearly separates it from the action/state siblings like take_action and get_game_state, though it doesn't name any sibling explicitly.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the six sibling tools. The agent must infer the use case entirely from the tool name and upstream context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_actionA
Perform one game action and return the result plus a fresh game state.
Call get_action_help for parameter names. Examples: play_card: {"card_index": 0, "target": "CULTIST_0"}; end_turn: {}; choose_map_node: {"index": 0}; menu_select: {"option": "singleplayer"}. Use current state indices and target IDs. Actions are serialized and never retried. Optionally supply expected_state_id from get_game_state to reject stale decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | auto | |
| action | Yes | ||
| parameters | No | ||
| expected_state_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and openWorldHint=false, so the description is not the sole source for the safety profile. It still adds genuinely useful context beyond the annotations: actions are serialized and never retried (so failures must be handled by the caller), each call returns a fresh game state, and expected_state_id acts as an optimistic-concurrency guard against stale decisions.
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?
Front-loaded purpose sentence, then routing, then compact examples, then the two behavioral cautions. No filler, no restatement of the name or schema, and the most decision-relevant constraint (serialized, never retried) is stated plainly.
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 29-action dispatcher with no output schema, the description covers the essentials: return payload, parameter lookup path, per-action examples, and staleness handling. It leaves the 'mode' parameter and any error/retry semantics undocumented, which the caller would have to discover elsewhere.
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 carries the burden, and it partially does: it supplies concrete payload shapes for play_card, end_turn, choose_map_node and menu_select, explains expected_state_id's purpose, and names get_action_help as the authoritative source for the remaining action parameters. The freeform 'parameters' object is otherwise undocumented, and the 'mode' enum is never explained — hence not a 5.
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?
States a specific verb and resource — 'Perform one game action and return the result plus a fresh game state' — and the return payload is named up front. It distinguishes itself from the read-only sibling get_game_state and the reference sibling get_action_help by routing explicitly to the latter for parameter names, though it never states outright that it is the sole mutation entry point.
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?
Clear context: call get_action_help for parameter names, use current state indices and target IDs, and optionally supply expected_state_id from get_game_state to reject stale decisions. That routing and the staleness precondition are actionable guidance, but there is no explicit statement of when NOT to use this tool or a named alternative for read-only inspection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_playerARead-only
Poll through enemy turns/loading until a player screen is available.
Returns ready=false with the last state on timeout. Performs no gameplay actions. A visible screen is not a guarantee that every action on that screen is legal.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | auto | |
| timeout_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), yet the description adds real behavioral detail: it blocks/polls, returns ready=false with the last state on timeout, and warns that a visible screen does not imply every action is legal. The timeout-return behavior is particularly useful since there is no output schema, though the cap on timeout_seconds is not mentioned.
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?
Four short, front-loaded sentences with no filler. The core behavior comes first, then timeout semantics, then the read-only scope, then the legality caveat. Every sentence carries information an agent needs.
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?
With no output schema, the description partially compensates by describing the timeout failure shape (ready=false + last state) and the no-gameplay-action scope. However, the success return shape is only implied, and the two input parameters (mode enum, timeout) are entirely unexplained, leaving meaningful gaps for a blocking/polling tool.
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% and the description mentions neither parameter. The meaning of mode values ('singleplayer', 'multiplayer', 'auto') and especially what 'auto' detects is never explained, nor is the effect of timeout_seconds or its 0-30 bound. The tool's own text does not compensate for the schema gap.
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 states a specific verb and resource: 'Poll through enemy turns/loading until a player screen is available.' This clearly separates it from get_game_state (immediate read) and take_action (mutating), though it never names a sibling explicitly. An agent can identify the tool's role without opening the schema.
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?
Usage is implied by the polling semantics (use it while enemy turns/loading are in progress), but there is no explicit when-to-use vs get_game_state guidance and no statement of when not to call it. The 'Performs no gameplay actions' line hints at the boundary with take_action, but only obliquely.
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.
7 tool updates
v0.1.0- First observed
get_action_help - First observed
get_game_state - First observed
get_profile - First observed
health_check - First observed
search_wiki - First observed
take_action - First observed
wait_for_player
TDQS
Scored across 7 tools
Most tools are clearly distinct: state reading (get_game_state), action discovery (get_action_help), acting (take_action), waiting (wait_for_player), and reference lookups (search_wiki, get_profile) target different needs. The descriptions explicitly clarify the tricky boundary between get_action_help (syntax) and get_game_state (actual choices), though health_check and get_game_state overlap slightly since both report game status.
All tools use consistent snake_case with clear verb_noun or verb_object patterns (get_game_state, take_action, search_wiki, wait_for_player). The get_* family is predictable and no casing or verb-style mixing appears.
Seven tools is well-scoped for an agent-driven game controller, covering status, read, help, act, wait, and profile/reference lookups without redundancy. Each tool earns its place in the gameplay loop.
The core agent loop (health, state, help, action, wait) plus profile/wiki lookups is well covered. Minor gaps exist around save/load, restart, or deck-management operations, but these are workable given the bridge exposes actions through take_action.
Maintenance
Related MCP Connectors
Persistent memory, hybrid search and a goal graph for AI agents, over stdio or remote HTTP.
OpenAI-compatible LLM MCP (7 tools); chat via balance key or x402 USDC on Base
- bluffnetOAuthgg.bluffnet
Live Texas Hold'em for AI agents. The tools teach the rules; the bluffing is up to your model.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceEnables AI agents to play Slay the Spire 2 by exposing game state and actions through an MCP server, supporting combat, rewards, and run management.339-
- FlicenseNot gradedqualityCmaintenanceEnables AI-assisted gameplay for Slay the Spire by reading game state and providing strategy advice or automated actions via Claude Code.1-
- AlicenseNot gradedqualityBmaintenanceEnables an MCP agent to observe and command Slay the Spire 2 game state via HTTP, and optionally autopilot combat with a local deterministic policy, without LLM in the critical path.MIT
- AlicenseBqualityBmaintenanceGives LLMs a genuine in-game seat in Civilization V, letting them scout, settle, negotiate, fight, and manage a civilization through tool calls with the same fog-of-war information a human player sees.144MIT