面向 NetEase Minecraft / Bedrock 开发场景的通用 MCP Server。
概览
面向 NetEase Minecraft / Bedrock 开发场景的通用 MCP Server。
README
MCDK-ASSISTANT
面向 NetEase Minecraft / Bedrock 开发场景的通用 MCP Server。
聚合文档检索、原版资源搜索、参考速查、项目分析与代码审查能力,使 AI 能以更工程化的方式参与 Minecraft 开发流程。
MCDK-ASSISTANT 不直接替代编辑器或 AI Agent,而是作为一个面向 Minecraft 工程语境的能力层:把知识库、原版资产、JSON UI、NBT、模型、动画、Python2 Addon 项目分析与代码审查能力整理成稳定的 MCP 工具,让 Agent 在“查资料、理解结构、定位文件、生成修改、审查回改、回读验证”的闭环里少猜测、多验证。
MCP Tool 暴露面采用分层式设计:顶层只保留少量能力族入口,细粒度教程、子命令和操作参数延迟到 /help 或具体 command 调用时展开,从而减少 AI 客户端在 tools/list 阶段被迫接收的初始上下文。
🧠 解决方案启发(尚且测试实验阶段,暂未开放)
⚠️ 该能力仍处于测试实验阶段,暂未开放。以下内容描述的是设计目标与预期形态,实际行为可能变动。
文档检索能告诉 AI"某个接口长什么样",却答不了"怎么把这些接口拼成一个能跑的功能"——调用顺序、参数来源、端侧边界、常见坑,资料里都没有。解决方案层补的正是这一层:一个经实测、端到端、拿来即用的开发范式库,在检索时按需浮现相关范式与踩坑,让 AI 从"查到接口却盲猜用法"变成"照着可运行范式写";范式之间还能按依赖从接口级组装成功能级。
预编译成高性能索引,命中才现、不打扰纯资料检索。内容与写作规范见 solutions/README.md。
生态项目
- QuMod:QuMod 主站点,汇总文档、资源、项目动态与相关内容
- MCDK:轻量化网易 MOD 开发调试工具,支持后端内核与 VS Code 插件两种形态
- MCDevTools for VSCode:MCDK 的 VS Code 插件形态,便于在编辑器内完成调试与开发辅助
✨ 核心能力
| 能力 | 说明 |
|---|---|
| 🔎 智能文档检索 | 支持知识库、网易教程、ModAPI、QuMod、Bedrock Wiki、BedrockDev 等资料搜索 |
| 🧭 原版资源搜索 | 模糊搜索行为包 / 资源包原版资产,支持按文件名和内容定位 |
| 📘 参考速查 | 快速获取网易版差异、JSON UI / 动画 / 模型参考资料 |
| 🐍 Python MOD 分析与审查 | minecraft_py 支持行为包架构分析、引用链追踪和 Python2 Addon 结构性代码审查 |
| 🧩 JSON UI 分析 | 支持控件结构查询、属性搜索与问题诊断;涉及资源修改的能力仅在完整版提供 |
| 🧠 解决方案层 | 检索时自动命中「可运行组合范式 + 踩坑」清单;任务或实现路径不明确时保持启用,仅在目标明确且只需原始资料时使用 --no-solution(需预编译 bin) |
默认分发以
LITE为主,聚焦检索、搜索、参考、项目分析与代码审查能力。
🐍 Python AI 代码审查
minecraft_py 除了 arch / imports 项目分析外,还提供 review 子命令,用于让 AI 在写完或改完 Python2 MOD 代码后自查,再按报告回改。
它适合作为 Agent 修改代码后的自检步骤:优先审查刚改动的包或模块,输出按规则分组的结构性问题与可执行建议。
诊断范围
审查规则以低误报、可复核和可执行为目标,覆盖 Python2 Addon 中容易导致运行失败、维护成本上升或 AI 生成代码退化的结构性问题。
| 类别 | 覆盖规则 | 检查重点 |
|---|---|---|
| 运行硬错误 | encoding.missing-utf8-declaration、encoding.unicode-default-encoding |
非 ASCII Python2 文件缺少 PEP263 编码声明;单参数 unicode(value) 依赖 ModSDK 魔改解释器与原生 Linux Py2 不一致的默认编码 |
| 平台安全 | platform.restricted-module-import、platform.dynamic-code-execution、platform.reflective-security-bypass |
导入受限模块、动态执行代码,或出现通过函数全局命名空间反射取得敏感解释器能力的绕过特征;提示结合实际行为审查 |
| 异常与状态 | try.masking.*、implicit-global.* |
吞异常、可变默认参数累积修改、公开全局重绑定 |
| 占位与假实现 | stub.placeholder、stub.shallow-impl |
未实现桩、多行逻辑却只返回固定值的疑似假实现 |
| 复杂度与重复 | signature.too-many-params、logic-blob.*、duplicate-function.cross-module |
参数过多、函数/文件过大、跨模块重复函数 |
| 维护信号 | comment-doc.unowned-todo |
无 owner 的 TODO / FIXME / HACK / XXX |
报告按严重级别、可执行性和规则 tier 标注结果;默认跳过 QuModLibs 等三方库,不因项目外或游戏引擎 API 无法解析而报错,并使用稳定 finding_key 支持反复审查与闭环回改。
🎯 适用场景
- 查询网易版独占资料、原版资源、组件和接口参考
- 让 AI 辅助分析 JSON UI 结构与常见问题
- 让 AI 在修改 Python2 Addon 后运行结构性代码审查,按明确报告闭环回改
- 分析行为包入口、注册链、引用关系和目录职责
- 获取模型、动画与 JSON UI 的参考信息
- 快速说明网易版与国际版差异
📦 版本与分发策略
项目当前提供三个可执行目标:
| 能力版本 | 可执行文件 | 说明 |
|---|---|---|
| LITE 版 | mcdk-asst-lite |
默认发布版本,聚焦资料检索、原版资源搜索、参考说明、Python 项目分析与代码审查,不包含本地文件修改能力 |
| 完整版 | mcdk-assistant |
提供 JSON UI、NBT、模型、动画、像素画等本地资源读写与编辑能力;相关能力涉及敏感操作,但会占用更多初始上下文,建议仅在确认需要的情况下使用。 |
| Server 版 | mcdk-asst-server |
在 LITE 能力基础上扩展后台请求记录与统计接口,适合服务化部署 |
默认端口为 18766(HTTP 模式)。
- SSE 地址:
http://127.0.0.1:18766/sse
🏗️ 编译与测试状态
| 操作系统 | 架构 | 编译器 | 测试状态 | 备注 |
|---|---|---|---|---|
| Windows 11 | x86_64 | MSVC v143 | ✅ Passing | VS 2022+ / CMake 3.29+ |
| Ubuntu 24.04 | x86_64 | GCC 13.3.0 | ✅ Passing | WSL2 (Kernel 6.6+) |
🚀 快速开始
方式一:stdio 模式(推荐,无需 Node.js)
LITE 版和完整版支持 --stdio 参数,直接以 stdio 传输模式启动,AI 客户端通过 spawn 子进程建立连接,无需额外部署。
VSCode / Roo / Copilot
在项目根目录的 .roo/mcp.json 中配置(Roo 扩展专用):
{
"mcpServers": {
"mcdk_assistant_stdio": {
"command": "/path/to/mcdk-asst-lite.exe",
"args": ["--stdio"],
"alwaysAllow": ["*"],
"timeout": 30
}
}
}
Codex
Codex 的 MCP 配置写在用户目录的 config.toml 中。Windows 默认路径:
C:\Users\\.codex\config.toml
也可以在 Codex IDE 扩展右上角齿轮菜单中选择 Codex Settings > Open config.toml 打开同一个文件。
Windows 下可直接运行:
notepad $env:USERPROFILE\.codex\config.toml
在文件末尾追加以下配置。下面示例使用 LITE 版;如果需要 JSON UI、NBT、模型、动画、像素画等本地读写能力,把 command 改成完整版 mcdk-assistant.exe。
[mcp_servers.mcdk-asst-lite]
command = "D:/Zero123/CPP/CMAKE/mcdk-assistant/build/x64-msvc-release/mcdk-asst-lite.exe"
args = ["--stdio"]
enabled = true
startup_timeout_sec = 30
tool_timeout_sec = 120
# 可选:完整版,默认关闭。需要本地资源编辑能力时再启用。
[mcp_servers.mcdk-assistant]
command = "D:/Zero123/CPP/CMAKE/mcdk-assistant/build/x64-msvc-release/mcdk-assistant.exe"
args = ["--stdio"]
enabled = false
startup_timeout_sec = 30
tool_timeout_sec = 120
保存后重启 Codex,或开启新会话。在 Codex CLI/TUI 中可用 /mcp 查看连接状态。通常只启用 LITE 版和完整版中的一个,避免重复暴露同类工具。
Claude Desktop / 其他支持 stdio 的客户端
{
"mcpServers": {
"mcdk_assistant_stdio": {
"command": "/path/to/mcdk-asst-lite.exe",
"args": ["--stdio"]
}
}
}
方式二:HTTP / SSE 模式
直接运行可执行文件,不带 --stdio 参数,默认以 HTTP 模式启动。
支持 SSE 的客户端
{
"mcpServers": {
"minecraft_mod_assistant": {
"url": "http://127.0.0.1:18766/sse",
"name": "Minecraft Mod Assistant MCP Server (MCDK)",
"alwaysAllow": ["*"],
"timeout": 30
}
}
}
VSCode / Copilot(通过 mcp-remote 桥接)
{
"servers": {
"minecraft_mod_assistant": {
"command": "npx",
"args": [
"mcp-remote",
"http://127.0.0.1:18766/sse",
"--transport",
"sse-only"
]
}
}
}
这一步依赖本地 Node.js 环境。
验证连接
可在 AI 客户端中输入类似指令:
- 搜索
minecraft:food组件用法 - 搜索网易版和国际版 JSON UI 的主要差异
- 查找某个原版资源文件或动画资源
- 分析 Python 行为包结构:
minecraft_py(command="arch D:/mc/addons/MyAddon/behavior_pack --depth 2") - 审查刚修改的 Python 模块:
minecraft_py(command="review D:/mc/addons/MyAddon/behavior_pack --scope my_mod/client --format summary")
如果能返回对应资料或搜索结果,说明 MCP Server 已连接成功。
📁 目录要求
dicts/:分词词典knowledge/:可选的资料目录,用于提供知识库、教程、原版资产及参考资料- 索引缓存:支持使用预生成的二进制索引文件启动,以减少对原始资料目录的依赖并提升加载速度
程序按“可执行文件所在目录”寻找这些资源;在提供索引缓存的情况下,不强制依赖完整的原始资料目录。
🔗 第三方依赖
项目当前主要依赖以下第三方库:
cpp-mcpMCP 通信框架,仓库内位于libs/cpp-mcp/nlohmann/jsonJSON 解析与序列化cppjieba中文分词与检索支持limonpcppjieba依赖stb_image/stb_image_writePNG 读写与像素画处理cpp-httplib由cpp-mcp间接使用的 HTTP 能力tree-sitter通用语法分析与结构树构建tree-sitter-pythonPython 语言的 Tree-sitter 语法定义,用于解析 Python 代码tree-sitter-typescriptTypeScript 的 Tree-sitter 语法定义,用于解析 SAPI.d.ts声明文件并构建符号索引pocketPyPython脚本引擎使用的三方解释器,服务于轻量级插件系统tomlplusplusToml配置文件解析使用。
🛠️ 关于 cpp-mcp
这里使用的不是纯上游原版,而是项目内维护的定制版本。 已针对本项目的本地服务场景做过适配和改造,升级、替换或同步时不应按上游原版直接无差异处理。
安装
npx mcp-remote http://127.0.0.1:18766/sse --transport sse-only配置
{
"mcpServers": {
"mcdk_assistant_stdio": {
"command": "/path/to/mcdk-asst-lite.exe",
"args": ["--stdio"],
"alwaysAllow": ["*"],
"timeout": 30
}
}
}