MineCode MCP
MineCode MCP gives AI assistants version-aware Minecraft data, documentation, bug tracker search, datapack presets, and local log access.
Search and read Minecraft Wiki pages, full page content, command lists/details, and category listings.
Search Mojira issues by project, status, resolution, and query text.
Query Spyglass for Java versions, registry entries by version, block state properties/defaults, command trees, and mcdoc symbols.
Query Misode for datapack generator links, vanilla preset IDs and full preset JSON, loot tables, recipes, and available versions.
Read local Minecraft logs from default, Prism, or TLauncher installs with configurable line count, tail/first mode, and Prism instance selection.
Provides search capabilities for Mojira, the Minecraft bug tracker running on Jira, allowing querying of bug reports by project, status, and resolution.
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., "@MineCode MCP search the wiki for how to summon a custom mob"
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.
MineCode MCP
Version-accurate Minecraft data for AI assistants
MineCode is a local Model Context Protocol (MCP) server that gives AI assistants like GitHub Copilot and Claude real-time access to version-accurate Minecraft data, documentation, vanilla presets, and your Minecraft logs.
Written for a hackathon about MCP sponsored by dust, alpic, and others. Prototyped using the worst ai model ;-; (note I rewrote it now it is actually viable). Please star if you'd like to help out, and open issues for anything broken.

π― The problem this solves
AI assistants get Minecraft syntax wrong constantly, and they do it confidently. The reason is simple: Minecraft's datapack format changed substantially and repeatedly, and every model's training data is older than the current game.
1.20.5 replaced item NBT with typed components. Old NBT is now a hard parse error.
1.21 renamed every datapack folder to singular (
advancements/βadvancement/). A pack with the old names loads with no error and no content β it silently does nothing.1.21.2 dropped the
generic.prefix from every attribute ID.1.21.4 turned
custom_model_datafrom an integer into an object.1.21.5 made text components strictly typed.
minecraft.wiki documents only the latest version, so consulting it for an older pack actively makes this worse.
MineCode attacks this from four directions:
minecraft_start_sessionβ detects the target version frompack.mcmetabefore any code is written, so nothing downstream is guessing.get_technical_changesβ returns what actually changed between two versions, from misode/technical-changes plus a curated table of the traps agents fall into most.get_command_usage/validate_commandβ command syntax compiled from the game's own Brigadier grammar, and a parser to check the agent's output against it.Honest tool descriptions β every wiki tool states up front that it covers the latest version only, and names the version-exact alternative.
Related MCP server: Minecraft Dev MCP
π Installation
Requires Python 3.10 or newer. Check with python --version (Windows: py --version).
Windows
py -m pip install --upgrade pip
py -m pip install minecode-mcpVerify:
py -m minecode.server --help 2>$null; py -c "import minecode; print('ok')"If
pyis not recognised: Python isn't installed or wasn't added to PATH. Reinstall from python.org with "Add python.exe to PATH" ticked. Avoid the Microsoft Store build β it sandboxes file access, which breaks readingpack.mcmetaand Minecraft logs from arbitrary paths.
macOS
python3 -m pip install --upgrade pip
python3 -m pip install minecode-mcpIf your Python is Homebrew-managed you'll hit error: externally-managed-environment. Use a venv (see below) or pipx:
brew install pipx && pipx install minecode-mcpLinux
python3 -m pip install --upgrade pip
python3 -m pip install minecode-mcpMost modern distributions (Arch, Debian 12+, Ubuntu 23.04+, Fedora) mark the system Python as externally managed and will refuse the command above. That protection is correct β don't override it with --break-system-packages. Use one of:
# Option A: pipx β recommended, isolated but still on PATH
sudo pacman -S python-pipx # Arch
sudo apt install pipx # Debian/Ubuntu
sudo dnf install pipx # Fedora
pipx install minecode-mcp
# Option B: user install
python3 -m pip install --user minecode-mcp
# Option C: a venv you point the client at (see Configuration)Isolated install (any platform)
Works everywhere and never touches system Python. Note the absolute path it prints β you'll need it for the client config.
# Linux / macOS
python3 -m venv ~/.minecode-venv
~/.minecode-venv/bin/pip install minecode-mcp
echo ~/.minecode-venv/bin/minecode# Windows
py -m venv $HOME\.minecode-venv
& $HOME\.minecode-venv\Scripts\pip.exe install minecode-mcp
Write-Output "$HOME\.minecode-venv\Scripts\minecode.exe"Upgrading and uninstalling
pip install --upgrade minecode-mcp # or: pipx upgrade minecode-mcp
pip uninstall minecode-mcp # or: pipx uninstall minecode-mcpUpgrading doesn't clear the response cache. That's intentional β version-pinned data can't go stale. To clear it anyway, call the cache_status tool with clear=true, or delete the directory shown by cache_status.
Which Python am I actually using?
The single most common setup failure is installing into one interpreter and pointing the client at another. When in doubt, get the absolute path and use it verbatim in your client config:
python3 -c "import sys; print(sys.executable)" # Linux/macOS
py -c "import sys; print(sys.executable)" # WindowsβΆοΈ Running the server
MineCode is an MCP server, not an app you sit in front of. It speaks JSON-RPC over stdin/stdout and is normally launched by your AI client, not by you. You rarely need to start it manually β but you do need to know how, because that's how you check the install before wiring up a client.
The two ways to launch it
minecode # console script, installed by pip
python -m minecode.server # module form β identical, works even if the script isn't on PATHOn Windows use py -m minecode.server.
What "working" looks like
Running it directly looks like a hang. That is correct:
$ minecode
[INFO] Loaded assistant preprompt from .../assistant_preprompt.txt
[INFO] Starting MineCode MCP server
[INFO] MineCode MCP server starting (stdio)
[INFO] Registered 30 tools, 1 prompts, 2 resourcesβ¦and then nothing. The server is waiting for JSON-RPC on stdin. This is a healthy server, not a freeze. Press Ctrl+C to stop it.
The line that matters is Registered 30 tools. If you see it, the install is good. Logs go to stderr, so they never corrupt the protocol stream on stdout.
Verifying the install without a client
python -c "
from minecode import tools
print(f'{len(tools.TOOLS)} tools, {len(tools.HANDLERS)} handlers')
assert {t.name for t in tools.TOOLS} == set(tools.HANDLERS)
print('registry consistent')
"To exercise a tool without any MCP client at all:
python -c "
from minecode import handlers
r = handlers.handle_get_command_usage('1.21.4', 'give')
print(r['usage'])
"Expected: ['/give <targets> <item>', '/give <targets> <item> <count>']
A full protocol handshake, if you want to be thorough:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
| python -m minecode.server 2>/dev/null | tail -1 | head -c 300Normal usage
Configure your client (next section), then restart it. The client spawns the server itself and keeps it alive for the session. From then on you just talk to your assistant β start with something like "set up my datapack and tell me what version it targets", which triggers minecraft_start_session.
Troubleshooting
Symptom | Cause and fix |
| The script isn't on PATH. Use |
| Wrong interpreter. The client's |
|
|
|
|
| You have mcp 2.x. Run |
Server starts, client shows no tools | Client config points at a different Python or a stale install. Restart the client fully β most only read MCP config at startup |
Everything hangs with no output | Expected when run directly, see above. If it happens inside a client, check the client's MCP logs |
Tools are slow the first time | Normal β first call fetches and caches upstream data. Later calls are near-instant |
Suspect stale data |
|
βοΈ Configuration
Claude Desktop / Claude Code
{
"mcpServers": {
"minecode": {
"command": "minecode"
}
}
}OS | Config path |
Windows |
|
macOS |
|
Linux |
|
VS Code (GitHub Copilot)
Add to User Settings (Ctrl+Shift+P β "MCP: Open User Configuration"), or create .vscode/mcp.json in your workspace:
{
"servers": {
"minecode": {
"type": "stdio",
"command": "minecode",
"args": []
}
},
"inputs": []
}The minecode script is installed alongside the package and already points at the right interpreter, so this form works for pipx, venv, and --user installs alike.
The module form is equivalent only if the package is importable from whichever python the client resolves:
{
"servers": {
"minecode": {
"type": "stdio",
"command": "python",
"args": ["-m", "minecode.server"]
}
},
"inputs": []
}β οΈ VS Code spawns the server with a bare
pythonfromPATHβ not your selected Python interpreter, and not a pipx or venv environment. With a pipx install this fails withNo module named minecode, since the package lives in pipx's own venv. Use"command": "minecode"above, or the absolute interpreter path from the next section.
On Windows use
"command": "py"for the module form.pyis the Windows launcher and does not exist on macOS or Linux.
If minecode isn't on PATH
Common with venv, pipx, and --user installs. Give the absolute path to the interpreter that has the package, and let it run the module:
{
"mcpServers": {
"minecode": {
"command": "/home/you/.minecode-venv/bin/python",
"args": ["-m", "minecode.server"]
}
}
}Platform | Typical interpreter path |
Linux / macOS venv |
|
Windows venv |
|
pipx (any) | run |
Linux |
|
Get the exact path with python3 -c "import sys; print(sys.executable)" from the environment where you installed it.
Windows JSON: backslashes must be escaped β
C:\\Users\\...β or use forward slashes, which also work.
Restart the client fully after editing the config. Most MCP clients read it only at startup, so a reload isn't enough.
π οΈ Tools
Start here
Tool | Description |
| Call first. Detects the target version from |
Version correctness
Tool | Description |
| What changed between two versions β the fix for outdated syntax knowledge |
| Scan a command or JSON for syntax that's wrong for a version |
| Check folder layout β catches the silent 1.21 folder rename failure |
| Read |
| Map between the two |
| Which versions have changelog coverage |
Commands
Tool | Description |
| Readable, version-exact syntax compiled from the Brigadier tree |
| Parse a command against the real grammar; reports the failing token |
Spyglass (authoritative, version-exact)
Tool | Description |
| Versions with data/resource pack formats |
| Valid IDs per registry per version |
| Block state properties and defaults |
| Command names, or one command's tree plus rendered usage |
| Find mcdoc symbol paths by keyword |
| One data structure's field-level schema |
Misode (real vanilla data)
Tool | Description |
| Real vanilla JSON for a version β the best shape reference available |
| Preset IDs for a generator type |
| Loot tables by category |
| Recipes by type |
| Web generator links to show the user |
| Versions with data available |
Minecraft Wiki β β οΈ latest version only
Tool | Description |
| Search pages |
| Page summary, or full content with |
| Prose about a command β not a syntax reference |
| Command list |
| Pages in a category |
Datapack Emulator β run the pack without the game
Backed by Datapack Emulator
(installed with MineCode from PyPI; its source is a submodule at
datapack-emulator/). It loads the pack as a server of the
chosen version would, ticks it, and reports what happened. Results carry
ok and a one-line summary; ok is false for the silent failures the game
only warns about (functions that do not parse, functions/ folders on 1.21+).
Tool | Description |
| Static: every function/tag the version refuses, ignored folders, unknown ids, missing functions |
| Load + N ticks, then console |
| Assertions: |
| One fresh world per version across a range; what breaks where |
| Does this command (and each |
| Real timings: reads the report |
Not modelled: physics, mob AI, redstone, gameplay-triggered advancements.
See the datapack-emulator skill.
Other
Tool | Description |
| Bug tracker search (filters by project, not version) |
| Local Minecraft logs, with |
| Step-by-step guides (the skills) for any MCP client |
| Inspect or clear the response cache |
Prompts and resources
Kind | Name | Description |
Instructions | (sent at initialize) | A short routing note clients place in the model's system prompt: start session first, read the guide, verify with the emulator |
Prompt |
| Loads the development methodology |
Resource |
| Same methodology, attachable as context |
Resource |
| The curated migration table as JSON |
Prompt |
| One per skill, e.g. |
Resource |
| The same guides, attachable as context |
π§ Skills
Six guides written for AI agents live in skills/, one folder
each with a SKILL.md:
Skill | Use it when |
choosing which MineCode tool answers a question, and in what order | |
implementing a feature in a datapack, from version pinning to verified hand-over | |
a pack does nothing, errors, misbehaves, lags, or broke after an upgrade | |
reviewing code against the mistakes that keep coming back | |
targeting, porting, or supporting a range of versions | |
running and testing a pack without the game |
Claude Code loads them as skills when the repository is installed as a
plugin (this also registers the MCP server from .mcp.json, so minecode
must be on PATH β see Installation):
/plugin marketplace add AnCarsenat/minecode-mcp
/plugin install minecode@minecodeEvery other MCP client gets the same text through the server: the
get_minecode_guide tool (agents call it themselves β
minecraft_start_session points at it), a guide_<name> prompt, and a
minecode://guide/<name> resource. The wheel carries skills/ inside the
package, so a plain pip install minecode-mcp has them too.
To add a guide: create skills/<name>/SKILL.md with name and
description frontmatter (the description is what an agent chooses by β say
when to use it). tests/test_guides.py checks it is found and served.
π‘ Example prompts
"Set up my datapack for 1.21.4 and tell me what changed since 1.20.4"
"Why does my datapack do nothing on 1.21?"
"What's the correct
/givesyntax with enchantments for this pack's version?"
"Convert this 1.20.4 loot table to 1.21.4"
"Check my Minecraft logs for errors"
π§ How version knowledge works
Two layers, deliberately:
The curated table (minecode/knowledge/migrations.json) holds ~16 breaking changes as concrete before/after code pairs β the ones where a model's training data actively fights the correct answer. It's small, offline, instant, and every entry carries a verify_with field naming the tool that confirms it. It is a fast first-pass signal, never an authority.
The changelog (misode/technical-changes) is exhaustive and community-maintained across every snapshot. get_technical_changes queries it live.
This split is on purpose. A hand-written document covering every version's changes would be stale the day it was written, impossible to keep current against Minecraft's snapshot cadence, and far too large to fit in context. Keeping the curated layer small and querying the maintained source for everything else is what makes it sustainable.
Adding a migration
Add an entry to migrations.json:
{
"id": "kebab-case-id",
"title": "Short description",
"changed_in": "1.21.5",
"affects": ["give", "item"],
"severity": "breaking",
"confidence": "high",
"before": "the old syntax",
"after": "the new syntax",
"explanation": "What changed and what happens if you get it wrong.",
"detect": [
{"pattern": "regex", "kind": "command|json|path|any", "message": "What to do instead"}
],
"verify_with": "get_technical_changes(from_version='1.21.4', to_version='1.21.5')"
}Then add tests to tests/test_knowledge.py β one for detection and one for the false-positive case. A checker that flags correct modern syntax trains the agent to ignore it, which is worse than having no checker at all.
π§βπ» Development
Setup
Linux / macOS
git clone --recurse-submodules https://github.com/AnCarsenat/minecode-mcp.git
cd minecode-mcp
python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ./datapack-emulator # optional: the emulator from the submodule, to change both
python -m pip install -e ".[dev]"Already cloned without --recurse-submodules: git submodule update --init.
Skipping the submodule is fine: pip install -e ".[dev]" installs the
emulator from PyPI. Install the submodule first only to work on both at once.
Windows (PowerShell)
git clone --recurse-submodules https://github.com/AnCarsenat/minecode-mcp.git
cd minecode-mcp
py -m venv venv
.\venv\Scripts\Activate.ps1
py -m pip install --upgrade pip
py -m pip install -e .\datapack-emulator
py -m pip install -e ".[dev]"If activation is blocked:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
The -e (editable) install means source edits take effect immediately β no reinstall between changes. But your MCP client must point at this venv's interpreter, not a system one, or you'll be testing the published package instead of your working copy.
Everyday workflow
pytest -m "not network" # ~0.4s β run before every commit
python -m minecode.server # smoke test; "Registered N tools" then a hang is correctpytest -m network # live API tests, hits volunteer-run services
pytest tests/test_knowledge.py -v # one file
pytest -k "migration" -v # by name
pytest -m "not network" --lf # only last-failedPlease don't run the network suite in a loop β Spyglass, misode and minecraft.wiki are volunteer-funded. The offline suite covers the logic; the network suite only checks that upstream response shapes haven't changed.
Testing against a real datapack
The most valuable check, and how the redirect and backtracking bugs were found:
python - <<'EOF'
import pathlib
from minecode import handlers
PACK = pathlib.Path("path/to/your/datapack")
info = handlers.handle_minecraft_start_session(str(PACK))
version = info["target_version"]
print("target:", version, "| multi-version:", info["multi_version"])
print("structure:", handlers.handle_check_pack_structure(str(PACK))["issue_count"], "issues")
bad = 0
for f in PACK.rglob("*.mcfunction"):
for n, line in enumerate(f.read_text(errors="ignore").splitlines(), 1):
line = line.strip()
if not line or line.startswith(("#", "$")):
continue
result = handlers.handle_validate_command(line, version)
if not result.get("valid"):
bad += 1
print(f"{f.name}:{n} {line[:80]}\n -> {result.get('error')}")
print("invalid commands:", bad)
EOFA false positive here is a bug worth reporting β a validator that cries wolf gets ignored, which is worse than having none.
Environment variables
Variable | Effect |
| Disable the disk cache. Use when testing scraper changes, and always in CI |
| Override the cache location |
Project layout
server.py is wiring only (transport, dispatch, prompts, resources). tools.py holds schemas plus the nameβhandler registry. handlers.py holds behaviour. scrappers/ talks to the outside world. Nothing else should make HTTP calls.
Adding a tool
Write
handle_<name>inhandlers.py. Return a dict withsuccess, never a bare string.Add a
TooltoTOOLSintools.py.Add the entry to
HANDLERSin the same file.pytest -m "not network"
Step 3 is not optional and not forgettable β tools.py asserts at import time that TOOLS and HANDLERS match exactly, so a missing entry fails immediately rather than months later. That assertion exists because four working changelog functions sat unreachable in misode.py for exactly that reason.
Description guidance, learned from what actually goes wrong:
Say when to call it, not just what it does. Agents match situation to description.
Put limitations first. A caveat at the end isn't read in time to change the decision.
Name the better tool when one exists β "use X instead for Y" prevents the wrong choice a neutral description invites.
Adding a version migration
See How version knowledge works. Every entry needs two tests: one proving detection fires, one proving it does not fire on correct modern syntax.
Code conventions
Handlers return dicts; the dispatcher does the JSON encoding
Every
versionparameter goes throughpackmeta.resolve_versionfirstScrapers go through
cache.cached_fetchNever return
[]for a failure β an empty list reads as a real "none found" answer. Raise insteadReport truncation explicitly. A silently capped list reads as complete
On the
mcpdependency: pinned to>=1.25.0,<2. mcp 2.0 removed the low-level decorator API this server is built on; installing 2.x raisesAttributeErrorat import. Migrating to the 2.xMCPServerAPI is open work β PRs welcome.
Contributing
Branch off main, keep commits scoped to one concern, run pytest -m "not network" before pushing. CI runs the offline suite on Python 3.10/3.11/3.12 for every PR; live tests run nightly.
π¦ PyPI publishing
Publishing uses Trusted Publishing (OIDC). There is no API token anywhere β no PYPI_API_TOKEN secret to create, paste, rotate, or leak. GitHub proves its identity to PyPI directly.
One-time setup
1. Create the GitHub environment
Repo β Settings β Environments β New environment β name it exactly pypi.
Optionally add yourself under "Required reviewers". That makes every publish need a manual click β a good safety net, since a tag push would otherwise publish immediately and a version number burned on PyPI can never be reused.
2. Register the publisher on PyPI
Log in at pypi.org.
If
minecode-mcpalready exists: go to the project β Manage β Publishing.For a brand-new project: Account settings β Publishing β Add a pending publisher.
Fill in exactly these values:
Field | Value |
PyPI Project Name |
|
Owner |
|
Repository name |
|
Workflow name |
|
Environment name |
|
The workflow filename and environment name must match character for character. This is the most common place setup goes wrong, and the resulting error is an opaque 403.
That's it. No token is generated and nothing is pasted into GitHub.
Releasing
β οΈ Step 1 is bumping the version in
pyproject.toml. Do not skip it.A version number on PyPI is permanent. Once
0.2.0is published, that number can never be reused or overwritten β even if you delete the release. A bad publish can only be followed by a new version, never a replacement. Re-tagging an already-published version fails at the upload step.
1. Bump the version. Edit version in pyproject.toml:
version = "0.2.1" # was 0.2.0Which digit to move:
Change | Bump | Example |
Bug fix, docs, internals β nothing user-visible breaks | patch |
|
New tools, new parameters β existing setups keep working | minor |
|
Tools removed or renamed, parameters removed β existing configs break | major-ish |
|
(0.2.0 was a minor bump because it removed two tools and renamed one.)
2. Commit, tag, and push. The tag must be v + the exact version:
git add pyproject.toml
git commit -m "Release 0.2.1"
git tag v0.2.1
git push origin main --tags3. Approve the deployment. The workflow builds, then pauses. Go to the
Actions tab β the running Publish to PyPI run β Review deployments
β tick pypi β Approve and deploy. GitHub also emails you an approve link.
Publishing takes about 30 seconds after approval.
What the workflow checks before it will publish
The tag matches
pyproject.tomlβ this is the safety net for a forgotten bump. Taggingv0.2.1whilepyproject.tomlstill says0.2.0fails the build withTag v0.2.1 does not match pyproject.toml version 0.2.0, and nothing is publishedOffline test suite passes
Wheel and sdist build
twine checkon the metadataThe preprompt, config, and migration table are actually inside the wheel
If any of these fail, the approval button never appears β there is nothing to approve.
If you forgot to bump
The build fails at step 1 and nothing ships. Recover by deleting the tag, bumping properly, and re-tagging:
git tag -d v0.2.1
git push origin :refs/tags/v0.2.1
# bump pyproject.toml, commit, then tag againThis is safe precisely because nothing was published.
Optional: TestPyPI first
Register a second pending publisher at test.pypi.org with the same values but environment testpypi, create a matching GitHub environment, then add this job to publish.yml:
publish-test:
needs: build
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
environment:
name: testpypi
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with: { name: dist, path: dist/ }
- uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
skip-existing: trueThis catches packaging errors before they reach real PyPI, where a version number is burned permanently β you can't re-upload 0.2.0 after a bad publish, only bump to 0.2.1.
Troubleshooting
Symptom | Cause |
| Publisher fields don't match, or |
Workflow doesn't run | Tag doesn't match |
"Tag does not match pyproject" | You tagged without bumping the version |
Publish hangs | Required reviewer is set; approve it in the Actions tab |
π Project structure
minecode-mcp/
βββ minecode/
β βββ server.py # Transport, dispatch, prompts, resources
β βββ guides.py # Serves skills/ as a tool, prompts, resources
β βββ tools.py # Tool schemas + name->handler registry
β βββ handlers.py # Tool behaviour
β βββ brigadier.py # Command tree rendering and validation
β βββ packmeta.py # pack.mcmeta reading, version resolution
β βββ cache.py # Disk cache
β βββ knowledge/
β β βββ __init__.py # Version comparison, syntax checking
β β βββ migrations.json # Curated breaking changes
β βββ preprompts/
β β βββ assistant_preprompt.txt
β βββ config/
β βββ scrappers/
β βββ spyglass.py # Version-exact registries, commands, mcdoc
β βββ misode.py # Vanilla presets + technical changelogs
β βββ minecraftwiki.py # Wiki (latest version only)
β βββ mojira.py # Bug tracker
β βββ minecraft_logs.py # Multi-launcher log reader
βββ skills/<name>/SKILL.md # Agent guides (Claude Code skills; also served over MCP)
βββ .claude-plugin/ # Claude Code plugin + marketplace manifest
βββ tests/
βββ example/crystal_dimension/
βββ pyproject.tomlπ Data sources
Source | Role |
Registries, command trees, mcdoc β version-exact | |
Vanilla presets per version | |
Per-version technical changelogs | |
Concepts and mechanics (latest version only) | |
Bug tracker |
Spyglass, misode, and the wiki are volunteer-run. MineCode caches aggressively β version-pinned data permanently, since it cannot change β to keep request volume low. Please don't disable the cache in automated setups.
π License
GPL-3.0 β see LICENSE
Available Tools
19 toolsget_logsA
Get Minecraft instance logs. Auto-detects launcher or specify 'default', 'prism', or 'tlauncher'. For Prism, optionally specify an instance name. Returns the latest log file content with configurable line count.
Inputs: launcher, instance, lines, tail.
get_wiki_categoryA
List all pages in a Minecraft Wiki category (e.g. 'Blocks', 'Items', 'Mobs', 'Commands').
Inputs: category (required), limit.
get_wiki_command_infoB
Get detailed syntax documentation for a specific Minecraft command from the wiki (arguments, permissions, examples).
Inputs: command (required).
get_wiki_commandsA
List all Minecraft commands from the wiki with their URLs. For detailed syntax of one command use get_wiki_command_info.
Inputs: limit.
get_wiki_pageA
Get a short summary and section list of a Minecraft Wiki page. For full content use get_wiki_page_content instead.
Inputs: title (required), sentences.
get_wiki_page_contentA
Get the full structured content of a Minecraft Wiki page (all sections, text, tables). Use get_wiki_page for a quick summary instead.
Inputs: title (required).
misode_get_generatorsA
List all available datapack generators from Misode (loot tables, recipes, worldgen, advancements, etc.) with their URLs.
Inputs: category.
misode_get_loot_tablesA
List vanilla loot table IDs by category (blocks, chests, entities, archaeology, gameplay). Includes per-category counts.
Inputs: version (required), category, search.
misode_get_preset_dataA
Get the full vanilla JSON for a specific preset. Use misode_get_presets first to discover available preset IDs.
Inputs: version (required), generator_type (required), preset_id (required).
misode_get_presetsA
List vanilla preset IDs for a generator type (e.g. 'loot_table', 'recipe', 'worldgen/biome'). Use search to filter. Get full JSON with misode_get_preset_data.
Inputs: version (required), generator_type (required), search.
misode_get_recipesA
List vanilla recipe IDs with optional filtering by type (crafting_shaped, smelting, stonecutting, etc.) and search query.
Inputs: version (required), recipe_type, search.
misode_list_versionsA
List all Minecraft versions available in the Misode API for datapack data lookups.
Inputs: no named parameters.
search_mojiraA
Search the Mojira bug tracker. Returns issue key, URL, summary, status, reporter, assignee, and creation date. Filter by project (MC, MCPE, etc.), status, or resolution.
Inputs: query, project, status, resolution, +1 more.
search_wikiA
Search Minecraft Wiki for pages matching a query. Use fulltext=true for snippet-based search. Returns titles, URLs, and optional snippets.
Inputs: query (required), limit, fulltext.
spyglass_get_block_statesA
Get all block state properties (e.g. facing, waterlogged, power) and their default values for a specific block ID.
Inputs: version (required), block_id (required).
spyglass_get_commandsA
Get the full command tree/syntax for a Minecraft version. Optionally pass a command name to get its specific argument tree.
Inputs: version (required), command.
spyglass_get_mcdoc_symbolsA
Get vanilla mcdoc type symbols from Spyglass. Useful for understanding NBT/datapack data structures.
Inputs: no named parameters.
spyglass_get_registriesB
Get registry entries for a Minecraft version. Supports item, block, entity_type, biome, enchantment, and many more. Use the optional search param to filter results.
Inputs: version (required), registry (required), search.
spyglass_get_versionsA
List Minecraft Java Edition versions with their data/resource pack versions. Filter by release or snapshot. Includes latest release & snapshot info.
Inputs: type_filter, limit.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogβ¦
TDQS
Scored across 19 tools
Tools are clearly grouped by prefix (get_logs, get_wiki, misode, search, spyglass) and each has a distinct purpose. Cross-references in descriptions prevent confusion between similar tools like get_wiki_page and get_wiki_page_content.
All tool names follow a consistent verb_noun pattern with snake_case and server-specific prefixes. The naming is predictable across all 19 tools, e.g., misode_get_generators, spyglass_get_versions.
With 19 tools, the set is slightly above the ideal 3-15 range but remains well-scoped for a Minecraft helper server covering logs, wiki, datapack generation, bug tracking, and game data.
The tool surface covers major Minecraft domains (logs, wiki, datapacks, bugs, game data) with reasonable depth. Minor gaps exist (e.g., no world editing or mod management) but are not central to the server's purpose.
Maintenance
Related MCP Connectors
An MCP server that gives your AI access to the source code and docs of all public github repos
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
AI tool directory MCP server, live since July 2026. Tools, agents, models, companies, services.
Official Duck Framework MCP server for AI-assisted development and project scaffolding.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that supercharges AI assistants with powerful tools for software development, enabling research, planning, code generation, and project scaffolding through natural language interaction.1169 npm102MIT
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that gives AI assistants native access to Minecraft mod development tools β decompile, remap, search, and analyze Minecraft source code directly from your AI workflow.130 npm50MIT
- AlicenseNot gradedqualityCmaintenanceProvides a local MCP server for searching and retrieving documentation from 22+ open-source projects, enabling AI coding assistants to access up-to-date docs without network dependency.9 npm3MIT
- AlicenseAqualityCmaintenanceAn MCP server that empowers AI coding agents to work effectively with Minecraft mod development, providing static analysis of decompiled source code and runtime interaction with a running Minecraft instance.3168 npm18MIT