Back to Directory/Testing & Quality

VitaminMCP

Test Minecraft plugins end to end: drive a real Paper server and real protocol bots.

Testing & QualityJavav3.2.0

VitaminMCP

Test your plugins with an AI agent — on a real running server, with real players.

VitaminMCP demo — an AI agent driving a real Minecraft server

Documentation · Modrinth · npm · Issues

VitaminMCP is a Paper/Purpur plugin that opens an MCP (Model Context Protocol) endpoint from inside your running server. Connect an AI agent — Claude Code, Cursor, Codex, Gemini CLI, any MCP client — and it can drive the server and read back what happened, while real bot clients join over the actual Minecraft protocol.

Nothing about the plugin you are testing changes. No test framework to adopt, no source to instrument, no mock server: the plugin under test runs on a real server through its real lifecycle. That also means it works on plugins you did not write — anything installed is testable.

What the agent can do

  • Spawn and control test players — real protocol clients, not mock Player objects
  • Execute commands as the console or as a player
  • Open, read, click and assert on inventories and plugin GUIs
  • Right-click NPCs and villagers, the way a shop or quest giver is actually triggered
  • Move players, break and use blocks, chat
  • Wait for events and conditions instead of sleeping
  • Read the player's whole screen: menus, chat, action bar, titles, boss bars, scoreboard
  • Read live server state: events, logs, exceptions, permissions
  • Drive several servers at once — one session per backend of a BungeeCord network

MCP tools

ToolWhat it does
session_startConnect to a running server; several sessions at once for proxied networks
session_resetDisconnect every bot, or close a session
server_infoImplementation, version, TPS, online players, installed plugins
logs_querySearch server logs by severity and regular expression
events_summaryCount captured Bukkit events by type over a time window
events_queryRead individual captured events, filtered by type and player
exceptions_recentDistinct exceptions with counts; full stack trace on demand
state_queryLive server state — player (including permission checks), block, inventory (the only place a plugin GUI's contents exist), plugin (commands, permissions, live config)
command_execRun a command as the console or as any player, permissions and all
wait_forBlock until a condition holds — ticks, block_is, block_is_not, event, player_online, player_offline, player_near, player_state, inventory_open, inventory_contains, log_matches
bot_spawnConnect a real Minecraft protocol client as a test player
bot_inspectEverything the bot's client was sent: chat, action bar, titles, boss bars, scoreboard, health, effects, open menu
bot_run_scenarioRun a whole scripted test in one call; a failure reports the failing step and what the server was doing at that moment
bot_viewLive localhost viewer for one bot — the world, or the menu it has open

Scenario steps

bot_run_scenario scripts a whole test from these steps — a failure reports the failing step and what the server was doing at that moment:

CategoryStepWhat it does
World & movementspawnConnect the bot and wait until it is standing in the world
despawnDisconnect the bot
move_toWalk there through real physics — pressure plates and move listeners fire; teleport mode for setup
look_atFace a block or position
jumpJump
sneakStart or stop sneaking
sprintStart or stop sprinting
Blocks & itemsbreak_blockBreak a block, through real digging
place_blockPlace a block from the hand
use_blockRight-click a block — buttons, doors, chests
hold_itemPut an item into the main hand
drop_itemDrop the held item
Interactionuse_entityRight-click an entity — the way a shop or quest NPC is actually triggered
attack_entityAttack an entity
click_slotClick a slot in the open menu or GUI
close_menuClose the open menu
chatSend a chat message as the bot
commandSend a command as the bot, permissions and all
consoleRun a console command mid-scenario
Waitingwait_forBlock until a condition holds — every wait_for condition is available as a step
Assertionsassert_blockAssert what a block is
assert_playerAssert a player's live state — position, game mode, op, health
assert_eventAssert that an event fired on the server
assert_inventoryAssert the slots of the open GUI or an inventory
assert_messageAssert what the bot's client was told — chat, action bar, title
assert_reachableAssert a position can actually be walked to

How the three pieces fit together, what every tool and step accepts, and an example scenario are in docs/reference.md.

Version support

Minecraft versionWindowsLinuxmacOSStatus
1.18 – 1.20.6🟡🟡🟡Planned; below the current agent floor (1.21)
1.21 – 1.21.11🟢🟢🟢Supported and live-tested
26.1 – 26.1.2🟢🟢🟢Supported and live-tested; the server needs Java 25
26.2 and later🟡🟡🟡Released; each needs a compatibility run before it is added
Runner support by operating system
Operating systemNode source runnerNative runner assetMeaning
Windows x64🟢🟢Published, and the platform the matrix is run on
Linux x64 / arm64🟢🟢Published since 3.0.0
macOS Intel / Apple Silicon🟢🟢Published since 3.0.0, ad-hoc signed

Legend: 🟢 supported · 🟡 planned or requires the stated runtime · 🔴 unsupported.

Requirements, where each claim comes from, and how the version matrix is run are in docs/reference.md.

Setup

1. Install the plugin — download VitaminMCP.jar from the latest release (or from Modrinth), drop it into plugins/, and start the server.

2. Add the MCP server to your AI client — it runs on your machine, not on the server:

Claude Code

claude mcp add vitaminmcp -- npx -y vitaminmcp

Claude Desktop, Cursor, or any client with a JSON MCP config:

{
  "mcpServers": {
    "vitaminmcp": {
      "command": "npx",
      "args": ["-y", "vitaminmcp"]
    }
  }
}

It is also on the official MCP registry as io.github.Backas03/vitaminmcp, so clients with a registry catalogue can add it from there.

3. Let the agent wire itself up — ask it to run the setup prompt (in Claude Code: /mcp__vitaminmcp__setup). It finds the running server, checks the plugin, and connects.

That is enough for a server on this machine. The Claude Code plugin (which also brings the testing skill), other clients, installing from the jars, config.yml defaults, bot setup, and reaching a server behind SSH or TLS are all in INSTALL.md.

Full installation and usage docs: backas03.github.io/VitaminMCP — every tool, scenario runs, multi-server sessions, and remote-server setup are covered in docs/usage.md.

Contributing and building

Contribution rules are in CONTRIBUTING.md, building from source in docs/reference.md, and release steps in docs/publishing.md.

License

MIT — see LICENSE. The third-party code bundled in the jars, and its licenses, are listed in docs/reference.md.

Installation

Source-derived launch command. Check the maintainer’s required arguments and credentials before running:

bash
npx -y vitaminmcp

Set up in your AI client

Merge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.

json
{
  "mcpServers": {
    "io-github-backas03-vitaminmcp": {
      "command": "npx",
      "args": [
        "-y",
        "vitaminmcp"
      ]
    }
  }
}

Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.

Claude Desktop setup reference

Package

vitaminmcpnpm

Compatible MCP Clients

VitaminMCP works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.

  • Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.
  • Cursor~/.cursor/mcp.jsonRestart Cursor for changes to take effect.
  • VS Code.vscode/mcp.jsonReload VS Code window for changes to take effect.
  • Windsurf~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect.
  • Claude Code.mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.

Learn More