minecraft-mcp
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., "@minecraft-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-mcp
MCP (Model Context Protocol) servers for AI-assisted Minecraft development. Lets tools like Claude Code interact directly with a running Minecraft server and client — viewing logs, running commands, installing plugins, taking screenshots, controlling the player, and calling arbitrary Bukkit/Paper/Minecraft API methods via reflection.
Repository layout
minecraft-mcp/
├── packages/
│ ├── shared/ TypeScript protocol types + WebSocket connection class
│ ├── mcp-server-paper/ MCP server (stdio) ↔ Paper/Spigot plugin
│ └── mcp-server-fabric/ MCP server (stdio) ↔ Fabric client mod
└── minecraft/
├── paper-plugin/ Paper/Spigot plugin (Java 21, Gradle)
└── fabric-mod/ Fabric client mod for MC 26.1.2 (Java 25, Gradle 9.4, fabric-loom 1.16)Architecture
┌──────────────────────┐ stdio ┌────────────────────────────┐
│ Claude Code / LLM │ ◄──────────────────► │ mcp-server-paper (Node) │
└──────────────────────┘ └──────────┬─────────────────┘
│ WebSocket
┌──────────▼─────────────────┐
│ Paper plugin (Java) │
│ ws://localhost:25575 │
└────────────────────────────┘
┌──────────────────────┐ stdio ┌────────────────────────────┐
│ Claude Code / LLM │ ◄──────────────────► │ mcp-server-fabric (Node) │
└──────────────────────┘ └──────────┬─────────────────┘
│ WebSocket
┌──────────▼─────────────────┐
│ Fabric mod (Java) │
│ ws://localhost:25576 │
└────────────────────────────┘The Minecraft side (plugin / mod) runs a local WebSocket server. The Node.js MCP servers connect to it as clients. Claude Code (or any MCP host) runs the Node.js processes and talks to them over stdio.
Quick start
Prerequisites
Tool | Version |
Node.js | ≥ 20 |
tsx | any ( |
Java | 21 (Paper plugin) / 25 (Fabric mod – MC 26.1.2 ships Java 25 bytecode) |
Gradle | 8.8+ for the Paper plugin wrapper. The Fabric mod has its own checked-in wrapper pinned to 9.4. |
1. Install Node packages
npm install2. Build the Paper plugin
cd minecraft/paper-plugin
gradle wrapper --gradle-version 8.8 # once only
./gradlew shadowJar
# Output: build/libs/minecraft-mcp-paper-0.1.0.jarCopy the jar into your Paper server's plugins/ directory and start the server.
3. Build the Fabric mod
cd minecraft/fabric-mod
./gradlew build # uses the bundled wrapper (Gradle 9.4) – needs Java 25 on JAVA_HOME
# Output: build/libs/minecraft-mcp-fabric-0.1.0.jarCopy the jar into your Fabric client's mods/ directory and launch Minecraft.
4. Configure Claude Code (.claude/mcp.json)
{
"mcpServers": {
"minecraft-paper": {
"command": "node",
"args": ["--import", "tsx/esm", "/path/to/packages/mcp-server-paper/src/index.ts"],
"env": {
"PAPER_WS_URL": "ws://localhost:25575"
}
},
"minecraft-fabric": {
"command": "node",
"args": ["--import", "tsx/esm", "/path/to/packages/mcp-server-fabric/src/index.ts"],
"env": {
"FABRIC_WS_URL": "ws://localhost:25576"
}
}
}
}Available tools
Paper / Spigot server (mcp-server-paper)
Tool | Description |
| Tail |
| Push future log lines to the MCP client |
| Run a console command, capture output |
| List online players |
| List loaded plugins |
| Copy a jar into |
| Disable + re-enable a named plugin |
| Restart or stop the server |
| Call any server-side method via reflection |
| Read a field value via reflection |
| Set a field value via reflection |
| Construct a new object instance |
| List declared methods and fields of a class |
| Manage named variables across calls |
| Search Paper/Folia/Velocity javadoc index |
| Fetch and strip HTML from a javadoc page |
Fabric client mod (mcp-server-fabric)
Tool | Description |
| Recent chat HUD messages |
| Send chat text or |
| Position, health, inventory, game mode |
| Teleport player to coordinates |
| Set yaw/pitch or look toward a world point |
| Trigger a jump |
| Break block at coordinates |
| Place held item against a block face |
| Right-click a block |
| Block type and state at coordinates |
| Entities within a radius |
| Capture client view as base64 PNG |
| Call any client-side method via reflection |
| Read a client-side field |
| Set a client-side field |
| List methods/fields of a Minecraft class |
| Variable management |
Reflection & variable system
The reflection tools let you call any method on any allowed class and chain results together using named variables:
# Get the overworld World object and store it as $overworld
reflect_invoke(
class_name="org.bukkit.Bukkit",
method_name="getWorld",
args=[{type:"java.lang.String", value:"world"}],
assign_to="overworld"
)
# Use $overworld to get the player list
reflect_invoke(
class_name="org.bukkit.World",
target="$overworld",
method_name="getPlayers",
assign_to="players"
)
# Read a field on a non-serialisable object returned as an opaque handle
# (the handle ID looks like "obj_42")
reflect_get_field(
class_name="org.bukkit.entity.Player",
field_name="exp",
target="obj_42"
)Non-serialisable return values are stored in an in-memory registry and returned as:
{"__type": "object_ref", "__id": "obj_42", "__class": "org.bukkit.World"}Pass "__id" or "$varName" back as a target or argument value in subsequent calls.
Configuration
Paper plugin (plugins/MinecraftMcp/config.yml)
websocket:
host: "0.0.0.0"
port: 25575
reflection:
allowed-packages:
- "org.bukkit.*"
- "io.papermc.*"
- "net.kyori.adventure.*"
- "net.minecraft.*"
- "java.util.*"
- "java.lang.*"
blocked-packages:
- "java.lang.Runtime"
- "java.lang.ProcessBuilder"
max-object-refs: 1000Fabric mod (.minecraft/config/mcp.json)
{
"websocket": { "host": "127.0.0.1", "port": 25576 },
"reflection": {
"allowedPackages": ["net.minecraft.*", "com.mojang.*", "net.fabricmc.*"],
"blockedPackages": ["java.lang.Runtime"],
"maxObjectRefs": 1000
}
}Security notes
The WebSocket servers bind to
127.0.0.1by default (Fabric) and0.0.0.0(Paper — change to127.0.0.1if the MCP server runs on the same host).Reflection is gated behind configurable package allow/block lists.
java.lang.Runtimeandjava.lang.ProcessBuilderare blocked by default.The Paper plugin's command sender runs with OP-level permissions; restrict MCP bridge access on shared servers.
Development
# Run Paper MCP server (connects to ws://localhost:25575)
npm run dev:paper
# Run Fabric MCP server (connects to ws://localhost:25576)
npm run dev:fabric
# Override the WebSocket URL
PAPER_WS_URL=ws://192.168.1.10:25575 npm run dev:paperThis server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/InventivetalentDev/minecraft-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server