minecraft-rcon-mcp
This server provides an MCP interface for controlling a Minecraft Java Edition server via RCON, with an optional AI-powered in-game chat listener.
run_command: Execute any Minecraft server command (e.g.,list,data get entity,locate structure village) and receive its response, allowing inspection or modification of the live world.get_ai_chat_status: Check the health, history size, active AI model, log path, and memory configuration of the in-game AI chat listener.In-game AI chat: Players can type
ai <question>in chat; Claude (via Anthropic API) responds using/tellraw, with access to live world state via RCON. The agent has two git-tracked persistent memory stores (server-specific and capability-agnostic) that accumulate knowledge across sessions via aremembertool.Bundled scripts and recipes: A Python toolbox of low-level primitives (e.g.,
count_entities,find_block_entities) and higher-level recipes (e.g.,cat_spawn_check,reset_trial_spawners) can be listed and run vialist_scriptsandrun_scripttools, accessible both programmatically and through the in-game AI agent.
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., "@minecraft-rcon-mcplist all online players"
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.
minecraft-rcon-mcp
An MCP server that exposes a Minecraft Java
Edition server over RCON as a tool, plus an
optional in-game AI chat listener: players type ai <question> in chat and
Claude answers in-game, using RCON to read live world state.
It is configured entirely through environment variables, so it is independent of any particular server, world, or Minecraft version.
Features
run_commandtool — run any Minecraft server command via RCON and return the response. Use it from any MCP client (Claude Code, VS Code / Copilot, etc.) to inspect or modify the live world.In-game AI chat — a background thread tails the server log; chat messages prefixed with a configurable trigger (
aiby default) are answered by Claude via the Anthropic API, with an agentic RCON tool-use loop and a rolling context window. Responses are posted back with/tellraw.Persistent memory — the in-game agent reads two git-tracked memory files into its context each request and can append to them with a
remembertool, so it accumulates knowledge across sessions instead of relying only on the rolling chat window. See Persistent memory.get_ai_chat_statustool — report listener health, history size, model, log path, and memory configuration.
Related MCP server: Minecraft MCP Server
Requirements
Python 3.14+
A Minecraft server with RCON enabled (
enable-rcon=trueinserver.properties)An Anthropic API key (only if you use the in-game AI chat feature)
Install
pip install git+https://github.com/scotteratigan/minecraft-rcon-mcpOr, for local development / use from a sibling repo:
pip install -e path/to/minecraft-rcon-mcpRun
minecraft-rcon-mcp # console entry point
python -m minecraft_rcon_mcp # equivalentThe server speaks MCP over stdio, so it is normally launched by an MCP client
rather than by hand. Example client config (.vscode/mcp.json):
{
"servers": {
"minecraft-rcon": {
"type": "stdio",
"command": "/path/to/.venv/Scripts/python.exe",
"args": ["-m", "minecraft_rcon_mcp"],
"env": {
"RCON_HOST": "localhost",
"RCON_PORT": "25575",
"RCON_PASSWORD": "your-rcon-password",
"LOG_PATH": "/path/to/server/logs/latest.log"
}
}
}
}Provide ANTHROPIC_API_KEY in the launching environment (not in committed files)
if you want the in-game AI chat.
Configuration
Variable | Default | Purpose |
|
| RCON host |
|
| RCON port |
|
| RCON password (match |
|
| Path to the server log to tail. Set this explicitly — the default is relative to the working directory. |
|
| Set |
|
| Chat trigger prefix (case-insensitive). |
|
| Anthropic model for in-game chat. |
|
| Exchanges retained in the rolling history. |
|
| Max tokens per chat response. |
| (generic built-in) | Replace the entire system prompt. |
| (none) | Append server-specific context (Minecraft version, house rules) to the default prompt. |
|
| Set |
|
| Path to the server-specific memory file (world/player facts). Set this explicitly to a file in your server repo so it is git-tracked there, just like |
| (packaged | Path to the server-agnostic capability/script memory. Defaults to a file shipped inside this package; override only if you want it elsewhere. |
| — | World save folder (the one with |
| — | Folder of captured |
| (auto: | Server jar read for the vanilla structure catalog/sizing ( |
| — | Required for in-game AI chat. |
The run_command + remember tools are always available. Two more — list_scripts
and run_script — dispatch the Python toolbox (structure builders, world queries)
without one MCP tool per script; see Scripts & recipes. They're
also exposed to the in-game chat agent, so players can ask it to build things.
Persistent memory
The in-game AI agent keeps two separate memory stores, both intended to be version-controlled, so it accumulates knowledge across sessions. The split is deliberate — each store lives in a different repo:
Scope | What goes in it | Where it lives | Written via |
| Facts specific to this server, world, or its players — base/build coordinates, player preferences, house rules, world boundaries, ongoing projects. | The consumer (server) repo, at |
|
| Server-agnostic knowledge about this MCP — useful command patterns, what a script does, gotchas, techniques that help on any server. | This package, at |
|
How it works:
Read — on every chat request, both files are read fresh and appended to the system prompt under a
# Persistent memoryheading. Editing a file (by hand or by the agent) takes effect on the next message; no restart needed.Write — the agent has a
remembertool that takescontentand ascope(server|capability) and appends a one-line bullet to the matching file, creating it with a header if absent.
Because the capability store defaults to a path inside this package, the
agent writes into it in place. That is committable when the package is installed
editable (pip install -e), which is the intended development setup; under a
plain wheel install it would write into site-packages instead, so set
CAPABILITY_MEMORY_PATH to a writable, tracked location if you deploy that way.
Disable the whole feature with AI_MEMORY_ENABLED=0.
Scripts & recipes
The package bundles server-agnostic tooling split into two layers. They live here (not in any one server repo) because they are reusable capabilities. The aim is a toolbox of small, orthogonal primitives that compose efficiently, plus a few recipes that show how to combine them for common tasks.
Writing one? See
CLAUDE.mdfor the authoring rules (primitive vs. recipe, server-agnostic requirements, shared helpers, quality gates).
Primitives — minecraft_rcon_mcp.scripts
Low-level building blocks, each doing one general thing:
Primitive | Purpose | Needs world files? |
| Shared RCON client + CLI for running any command. | No (RCON only) |
| Run an entity selector and return the parsed count. | No (RCON only) |
| Scan region files for block entities (spawners, chests…). | Yes |
| Whether given coords are in generated chunks. | Yes |
| Nearest ungenerated region frontier to a position. | Yes |
python -m minecraft_rcon_mcp.scripts.rcon "list"
python -m minecraft_rcon_mcp.scripts.count_entities "type=minecraft:cat,distance=..48" --at Steve
python -m minecraft_rcon_mcp.scripts.find_block_entities --x 0 --z 0 --block-id minecraft:chest
python -m minecraft_rcon_mcp.scripts.check_chunk_generated 1216 237 --dimension the_nether
python -m minecraft_rcon_mcp.scripts.find_unexplored_edges 120 45Recipes — minecraft_rcon_mcp.recipes
Higher-level, task-specific tools composed from the primitives (and sometimes coupled to a particular Minecraft version's mechanics). Each is also a worked example of composition:
Recipe | Composed from | Notes |
|
| Village cat-spawn gates; thresholds are version-coupled (26.x). |
|
| Finds trial spawners near a player, resets cooldowns. |
python -m minecraft_rcon_mcp.recipes.cat_spawn_check Steve
python -m minecraft_rcon_mcp.recipes.reset_trial_spawnersConfiguration
RCON — read from
RCON_HOST/RCON_PORT/RCON_PASSWORD. As a fallback,rcon.pyreadsrcon.port/rcon.passwordfrom aserver.propertiesin the working directory (orSERVER_PROPERTIES).WORLD_DIR— tools that read save files need the world folder (the one withlevel.dat/dimensions/). This cannot be derived over RCON (no vanilla command exposes the save path), so setWORLD_DIR, or pass--world-dir.--dimension— region-reading tools default to the overworld; passthe_nether/the_end/ a namespaced id (mymod:custom) for others. Both vanilla (DIM-1/DIM1) and data-driven (dimensions/<ns>/<name>/) layouts resolve automatically.
The world data itself lives in the server deployment, not in this repo — these tools only carry the logic, and reach the world through
WORLD_DIR.
Development
This project uses uv for environment and
dependency management, Ruff for linting and
formatting, and ty for static type checking.
The pinned Python version lives in .python-version; uv installs it for you.
uv sync # create .venv and install all deps (incl. dev tools)
uv run pytest # run the test suite
uv run ruff format # auto-format
uv run ruff check # lint (add --fix to auto-fix)
uv run ty check # type-checkLicense
MIT — see LICENSE.
Available Tools
2 toolsget_ai_chat_statusA
Return the status of the in-game AI chat listener and conversation history.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations; description only says 'return', suggesting read-only. No disclosure of side effects, auth needs, or edge cases.
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 sentence, front-loaded with verb, no unnecessary words.
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?
No output schema; description mentions specific items but lacks structural detail. Adequate for a simple tool but could hint at return format.
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?
No parameters; schema coverage 100%. Description adds no param info but none 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?
Description clearly states it returns status of AI chat listener and conversation history. Distinct from sibling 'run_command' which likely executes commands.
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 guidance on when to use this tool versus alternatives. Implied as a status check but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_commandA
Run a Minecraft server command via RCON and return the response.
Examples: 'list', 'data get entity @e[type=minecraft:cat,limit=5,sort=nearest]', 'locate structure village', 'execute at @p run data get block ~ ~ ~'
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It mentions 'via RCON' and 'return the response,' but does not address whether commands can be destructive, what permissions are required, or any rate limits. This lack of safety and side-effect disclosure is a significant gap.
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 concise: one sentence stating the action and purpose, followed by four diverse examples. No superfluous information is present. It is well-structured and front-loaded with the core functionality.
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?
The tool is simple with one parameter and an output schema (not shown but present), yet the description lacks behavioral details such as potential side effects or authorization needs. The examples help, but overall completeness is adequate but not exceptional.
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?
With 0% schema description coverage, the description must compensate. It provides multiple examples that illustrate valid commands, adding meaning beyond the parameter name alone. However, it does not explicitly describe the parameter format, constraints, or expected syntax, leaving some ambiguity.
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 runs a Minecraft server command via RCON and returns the response. The examples further clarify the scope. It is distinct from the only sibling, get_ai_chat_status, which handles chat status queries.
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 implies the tool should be used to execute server commands, but does not explicitly state when to use it versus alternatives, nor does it provide any conditions or exclusions. The sibling tool is unrelated, so distinction is clear by function.
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.
2 tool updates
v0.1.0- First observed
get_ai_chat_status - First observed
run_command
TDQS
Scored across 2 tools
The two tools, get_ai_chat_status and run_command, have clear and distinct purposes. One retrieves chat status, the other executes arbitrary commands, leaving no ambiguity.
Both tool names follow a consistent verb_noun pattern (get_ai_chat_status, run_command), making them predictable and easy to differentiate.
With only 2 tools, the server is minimally functional. While run_command covers core RCON operations, the additional AI chat tool is specific; the count is low but acceptable for a narrow purpose.
The server provides basic RCON command execution and AI chat status, but lacks tools for managing AI chat (e.g., enable/disable) or more granular server interactions, leaving notable gaps.
Maintenance
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Synap (pool.linkrra.com/v1), Linkrra's OpenAI-compatible LLM API, as an MCP server.
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
One AI endpoint to search and call 22k+ MCP servers; 50+ hosted tools work instantly, no key.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI interactions with a running Minecraft server inside a Docker container using RCON, allowing models to programmatically create Minecraft builds and manage the server.10-
- FlicenseNot gradedqualityDmaintenanceEnables control of a Minecraft server through RCON commands via natural language, including game commands, chat-based AI interactions, and server management capabilities.6-
- AlicenseAqualityDmaintenanceConnects AI agents to Minecraft servers via RCON to execute commands, monitor logs, and perform read-only SQLite database queries. It is specifically designed to facilitate AI-assisted plugin development, live debugging, and automated testing workflows.611MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to interact with and manage Minecraft servers through a standardized interface, supporting server monitoring, player management, log analysis, and command execution.11MIT