Native MC Mapping MCP Server
This server lets you search Minecraft obfuscated ↔ deobfuscated name mappings for classes, methods, and fields across 38 Minecraft versions (1.7.10 – 1.20.1).
Search mappings — Translate obfuscated names (e.g.,
aed,func_70091_d) to readable ones (e.g.,EntityPlayer,getAbsorptionAmount) and vice versa.Boolean expression search — Combine terms with AND (
&), OR (|), and grouping ({}) for powerful queries (e.g.,Entity&Player,{Block|Item}&client).Column-targeted search — Restrict searches using modifiers:
classname,package,method,field,desc,modifier,side, and more. Supports substring (term:modifier) and exact (term::modifier) matching.Paginated results — Browse large result sets with configurable
pageandlimit(up to 100 per page).Custom output formatting — Define output templates using
%variable%placeholders (e.g.,%deobf_class%,%srg_name%,%obf_name%) with automatic deduplication.Auto-caching — Mapping data is automatically downloaded from NeoForge Maven and Mojang servers and cached locally for fast subsequent lookups.
Cross-version support — Track renamed or moved APIs across versions when porting mods.
Broad ecosystem compatibility — Useful for Forge/NeoForge, Fabric, Spigot/Paper, Mixin/Access Transformer configs, reflection-based code, and scripting engines.
Enables AI agents using Codeium (Windsurf) to search Minecraft obfuscated name mappings, assisting with modding, plugin development, and reflection-based code by resolving obfuscated class, method, and field names.
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., "@Native MC Mapping MCP ServerFind the deobfuscated name for func_70091_d in 1.12.2"
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.
Native MC Mapping MCP Server
An MCP (Model Context Protocol) server that provides Minecraft obfuscated name mapping lookups. Helps AI coding agents work with Minecraft's obfuscated Java internals — for modding, plugin development, Mixin, Access Transformers, reflection-based scripting, and more.
What It Does
Minecraft's Java code is obfuscated at runtime — class, method, and field names are replaced with short meaningless identifiers (aed, func_70091_d, m_91087_). This MCP server lets your AI agent:
Search obfuscated ↔ deobfuscated mappings across 38 Minecraft versions (1.7.10 – 1.20.1)
Auto-build mapping caches on first use — downloads from NeoForge Maven and Mojang servers
Boolean expression search —
Entity&Player,{Block|Item}&client,func_149645
Use Cases
Scenario | How This Helps |
Forge / NeoForge modding | Look up obfuscated method/field names when writing mixins or AT configs |
Fabric modding | Find intermediary ↔ named mappings for access wideners |
Spigot / Paper plugins | Resolve NMS (net.minecraft.server) class names across versions |
Mixin / Access Transformers | Discover the exact obfuscated name to target |
Reflection-based code | Find field/method names for |
Scripting engines | Resolve native Minecraft API names (CustomNPCs, CraftTweaker, etc.) |
Porting mods | Compare mappings between MC versions to find renamed APIs |
MCP Tools
Tool | Description |
| Search Minecraft obfuscated class/method/field name mappings |
Related MCP server: modforge
Quick Install (MCP Client)
Prerequisites
Node.js ≥ 18
Step 1: Clone & Build
git clone https://github.com/SaltfishSheep/AI-MCP-NativeMinecraftAccess.git
cd AI-MCP-NativeMinecraftAccess
npm install
npm run buildStep 2: Add to Your MCP Client
Add the following to your MCP client configuration:
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"native-mc-access": {
"command": "node",
"args": ["/absolute/path/to/AI-MCP-NativeMinecraftAccess/dist/index.js"]
}
}
}OpenCode (opencode.json):
{
"mcp": {
"native-mc-access": {
"type": "local",
"command": ["node", "/absolute/path/to/AI-MCP-NativeMinecraftAccess/dist/index.js"],
"enabled": true
}
}
}Cursor (.cursor/mcp.json):
{
"mcpServers": {
"native-mc-access": {
"command": "node",
"args": ["/absolute/path/to/AI-MCP-NativeMinecraftAccess/dist/index.js"]
}
}
}Windsurf (~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"native-mc-access": {
"command": "node",
"args": ["/absolute/path/to/AI-MCP-NativeMinecraftAccess/dist/index.js"]
}
}
}Replace
/absolute/path/to/with the actual path where you cloned the repo.
Usage
Once configured, your AI agent can call the search tool:
search(mc_version="1.12.2", expression="Entity&Player")Tool Parameters
Parameter | Type | Required | Default | Description |
| string | Yes | - | Minecraft version (e.g. "1.12.2", "1.20.1") |
| string | Yes | - | Boolean search expression |
| number | No | 1 | Page number (1-indexed) |
| number | No | 20 | Results per page (max 100) |
| string | No | default template | Output format template using |
Output template variables: %type%, %obf_class%, %deobf_class%, %obf_name%, %deobf_name%, %srg_name%, %obf_desc%, %deobf_desc%, %access%, %is_static%, %sideonly%, %match%, %mismatch%
Example queries:
Query | Description |
| Entries containing both "Entity" AND "Player" |
| Class name exactly "Entity" |
| Methods with "walk" in name |
| is_static exactly "static" |
| Class name "Potion", name "Duration" |
| Client-side Block or Item entries |
| Find a specific SRG method name by ID |
| All entries mentioning KeyBinding |
| Deduplicated class list |
Expression syntax:
Syntax | Meaning | Example |
| Case-insensitive substring match (exact case scores higher) |
|
| Restrict search to specific columns |
|
| Strong modifier — exact match required |
|
| Dot notation — matches |
|
| AND (both must match, higher precedence) |
|
| OR (either must match) |
|
| Grouping |
|
Modifiers:
Modifier | Searches | Description |
| all columns | Default — searches all text columns (excludes sideonly) |
| obf_class, deobf_class | Full class path (e.g. |
| deobf_class (after last | Class name only (e.g. |
| deobf_class (before last | Package only (e.g. |
| obf_name, deobf_name, srg_name | Field/method names (methods+fields only) |
| obf_name, deobf_name, srg_name | Method names only (filters type=method) |
| obf_name, deobf_name, srg_name | Field names only (filters type=field) |
| obf_desc, deobf_desc | Method/field descriptors |
| access, is_static | Access level and static status (note: |
| sideonly | Side filter (common/server/client) |
Tips: Use Player&Entity instead of PlayerEntity for cross-version compatibility, as naming conventions differ across MC versions.
Supported Versions
38 Minecraft versions across 4 workflow types:
Workflow | Versions | Data Sources |
Legacy SRG | 1.7.10, 1.8, 1.8.8–1.9.4, 1.10.2–1.11.2 | SRG ZIP + MCP Stable CSV + static_methods |
Legacy TSRGv1 | 1.12.2–1.14.4, 1.15–1.15.2 | TSRGv1 + MCP Stable CSV + static_methods + constructors |
Legacy ProGuard | 1.16.1–1.16.5 | TSRGv1 + Mojang ProGuard + static_methods |
Modern | 1.17–1.17.1, 1.18–1.18.2, 1.19–1.19.4, 1.20–1.20.1 | TSRGv2 + Mojang ProGuard |
How It Works
On first search for a given MC version, the server downloads mapping data from NeoForge Maven and Mojang
It parses SRG/TSRG/ProGuard formats and merges them with MCP CSV data
The merged cache is stored as
.mapping-caches/<version>.csvSubsequent searches use the cached data (validated against
package.jsonversion)Boolean expressions are parsed into an AST and evaluated against all CSV rows
Output Format
Format: [type] obf_class/obf_name -> deobf_class deobf_name srg_name obf_desc deobf_desc access is_static sideonly
Found 382 results for "Entity&Player" in MC 1.12.2 (page 1/39)
1. [method] aed/cD -> net/minecraft/entity/player/EntityPlayer.getAbsorptionAmount func_110139_bj ()F non-static common
2. [method] aed/bM -> net/minecraft/entity/player/EntityPlayer.applyEntityAttributes func_110147_ax ()V non-static common
...Project Structure
AI-MCP-NativeMinecraftAccess/
├── package.json
├── tsconfig.json
├── src/
│ ├── index.ts # MCP server entry point
│ ├── types.ts # TypeScript type definitions
│ ├── util.ts # Shared utilities (CSV parsing, package version)
│ ├── version-table.ts # URL mapping table for 38 MC versions
│ ├── builder/
│ │ ├── index.ts # buildMappingCache entry point
│ │ ├── download.ts # HTTP fetch + minimal ZIP reader
│ │ ├── parsers.ts # SRG, TSRGv1, TSRGv2, ProGuard, CSV parsers
│ │ ├── workflows.ts # 4 merge workflow builders
│ │ └── cache.ts # CSV cache writer + mapping-info update
│ └── search/
│ ├── index.ts # Barrel exports
│ ├── expression.ts # Boolean expression parser (AND/OR/braces)
│ └── csv-reader.ts # CSV reader + scoring + in-memory cache
├── dist/ # Built JavaScript (entry: dist/index.js)
└── .mapping-caches/ # Generated cache files (gitignored)License
MIT License — see LICENSE.
Third-Party Data
Mojang mappings — Provided under Mojang's custom license. This server fetches them at runtime; it does NOT redistribute them.
MCP mappings — Maintained by the Mod Coder Pack community, distributed via NeoForge Maven.
Available Tools
1 toolsearchSearch Native MC AccessARead-onlyIdempotent
Search Minecraft obfuscated↔deobfuscated name mappings (classes/methods/fields).
expression syntax: term — case-insensitive substring term:modifier — substring match in column; term::modifier — exact match in column a&b (AND) | a|b (OR) | {expr} (grouping). & has higher precedence than |. "net.minecraft.Entity" auto-expands to "/" and "$" paths. Cross-version tip: "Player&Entity" works better than "EntityPlayer".
Modifiers: all (default) — all columns class — obf_class, deobf_class (full path) classname — class name after last '/' package — package before last '/' name — obf_name, deobf_name, srg_name (methods+fields) method — same columns, methods only field — same columns, fields only desc — obf_desc, deobf_desc modifier — access, is_static side — sideonly (common/server/client)
Scoring: exact case hit = 1.0, case-insensitive = 0.5, then by mismatch (less unmatched chars ranks higher).
Common patterns: "Entity::classname" → exact class name only "Gui:classname" → all classes containing "Gui" "net/minecraft/inventory:package" → all classes under a package "health:field" → fields only, no methods "()Z:desc" → methods returning boolean "get:method&static::modifier" → static methods containing "get" output="%deobf_class%" → deduplicated class list
| Name | Required | Description | Default |
|---|---|---|---|
| mc_version | Yes | Minecraft version to search (e.g. "1.12.2", "1.20.1"). Supported: 1.10.2, 1.11, 1.11.2, 1.12.2, 1.13, 1.13.1, 1.13.2, 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.15, 1.15.1, 1.15.2, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.7.10, 1.8, 1.8.8, 1.8.9, 1.9, 1.9.4 | |
| expression | Yes | Boolean search expression (case-insensitive, exact case match scores higher). Syntax: term, term:modifier (substring match in column), term::modifier (exact match in column), a&b (AND), a|b (OR), {expr} (grouping with braces). Modifiers: all, class, classname, package, name, method, field, desc, modifier, side. & has higher precedence than |. Examples: "Entity::classname", "walk:method&static::modifier", "net/minecraft/entity:package" | |
| page | No | Page number (1-indexed). Default: 1 | |
| limit | No | Number of results per page (default: 20, max: 100) | |
| output | No | Output format template using %variable% syntax (case-insensitive). Variables: %type%, %obf_class%, %obf_name%, %deobf_class%, %deobf_name%, %srg_name%, %obf_desc%, %deobf_desc%, %access%, %is_static% (static/non-static), %sideonly%, %match%, %mismatch%. Consecutive spaces collapsed. Identical outputs deduplicated. | [%type%] %obf_class%/%obf_name% -> %deobf_class% %deobf_name% %srg_name% %obf_desc% %deobf_desc% %access% %is_static% %sideonly% |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description adds rich behavioral details: scoring algorithm, deduplication, output format variables, and expression semantics. No contradictions; the description significantly augments understanding beyond 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?
The description is lengthy but well-organized into sections (syntax, modifiers, scoring, common patterns, output). It is front-loaded with the main purpose. Every part adds value given the tool's complexity, though some minor trimming might be possible.
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 explains return values via scoring, deduplication, and output format templates. It covers search behavior, syntax, and common patterns comprehensively. However, it doesn't explicitly describe the exact structure of a result item beyond the template, so slightly incomplete.
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 100%, so baseline is 3. The description provides additional context for parameters like expression syntax and output template variables with examples, which enhances understanding without being essential. It adds value but not critical new semantics.
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 searches 'Minecraft obfuscated↔deobfuscated name mappings (classes/methods/fields)', providing a specific verb and resource. Since there are no sibling tools, differentiation is not needed, but the purpose is unmistakable.
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 includes extensive syntax guidance, modifiers, scoring details, and common patterns, effectively showing how to use the tool. It offers cross-version tips and template usage. However, it does not explicitly state when not to use it or compare to alternatives, though no siblings exist.
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. Dates show when Glama detected each change.
1 tool update
v1.0.0- First observed
search
TDQS
Only one tool exists, so there is no possibility of confusion between tools. The tool's purpose is clearly delineated.
With a single tool named 'search', naming is trivially consistent. The verb-only name is appropriate for its action.
One tool is slightly below the typical range of 3-15, but the search tool is highly capable and expressive, covering a broad search domain. It earns its place.
The search tool provides comprehensive coverage for querying Minecraft mappings: it supports classes, methods, fields, multiple modifiers, boolean expressions, and scoring. No obvious gaps for a search-only server.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
An MCP server that gives your AI access to the source code and docs of all public github repos
Search a curated directory of 300+ verified AI agents, MCP servers, and agentic tools.
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA 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.8535MIT
- AlicenseNot gradedqualityCmaintenanceProvides deterministic, audit-chain-backed Minecraft symbol migration and version-truth queries over MCP for AI assistants, enabling grounded rename resolution and API diffs without hallucination.461MIT
- AlicenseAqualityDmaintenanceEnables exploration and decompilation of Minecraft source code, allowing users to list versions, search classes, and decompile .class files on-the-fly.32MIT
- AlicenseAqualityCmaintenanceEnables AI agents to search CustomNPCs JavaDoc for methods, fields, and class hierarchies across multiple Minecraft versions and forks.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/SaltfishSheep/AI-MCP-NativeMinecraftAccess'
If you have feedback or need assistance with the MCP directory API, please join our Discord server