mod组织者mcp
只读 主控程序 服务器 模组管理器2:阅读 modlist.txt,可选 plugins.txt / loadorder.txt,每mod meta.ini 在...之下 MO2_MODS_DIR.暴露一个完整的 mo2_profile_snapshot,轻便 mo2_profile_machine_contract (路径+归档根目录,无 mods[] /meta),可选 mo2_profile_plugin_load_order, mo2_skse_plugins (SKSE) Plugins .dll 具有MO2覆盖语义的库存),加上摘要、磁盘上的Nexus字段、松散文件冲突等。 没有写 到您的MO2或游戏目录。
需求
- 转到1.26+
- 环境变量(绝对路径)。在WSL上,Windows驱动器通常是
/mnt//...(例如。S:→/mnt/s/...).
| 变量 | 含义 |
|---|---|
MO2_PROFILE_DIR | 配置文件目录包含 modlist.txt |
MO2_MODS_DIR | MO2 mods 目录(每个mod都是一个子文件夹,通常带有 meta.ini) |
构建
go build -o mod-organizer-mcp ./cmd/serverDocker(如果您已经在Docker中运行了其他MCP,建议使用)
构建一次:
docker build -t mod-organizer-mcp:local .容器无法访问您的磁盘,直到您 绑定支架 MO2数据树。绘制你的真实地图 MO2_data (或同等) /mo2 在容器内部,然后将env变量指向路径 在...之下 /mo2:
docker run --rm -i \
-e MO2_PROFILE_DIR=/mo2/profiles/MyProfile \
-e MO2_MODS_DIR=/mo2/mods \
-v "/path/to/MO2_data:/mo2:ro" \
mod-organizer-mcp:local可选--游戏 Data 为了 mo2_skse_plugins: 使用工具参数 game_data_dir 容器内部(基线 SKSE/Plugins 来自真实游戏的提供者 GameData,最低优先级),挂载游戏 Data 将文件夹移动到以下路径 /game_data 并通过 game_data_dir": "/game_data" 在工具调用中(对此没有envvar)。
docker run --rm -i \
-e MO2_PROFILE_DIR=/mo2/profiles/MyProfile \
-e MO2_MODS_DIR=/mo2/mods \
-v "/path/to/MO2_data:/mo2:ro" \
-v "/path/to/Skyrim Special Edition/Data:/game_data:ro" \
mod-organizer-mcp:local使用 :ro 因此,即使错误回归,该过程也无法编写MO2树。
运行(stdio,用于光标)
export MO2_PROFILE_DIR="/path/to/MO2_instance/MO2_data/profiles/MyProfile"
export MO2_MODS_DIR="/path/to/MO2_instance/MO2_data/mods"
./mod-organizer-mcp可选HTTP传输(与其他Go MCP服务器相同的模式):
export MCP_TRANSPORT=http
export MCP_HTTP_ADDR=":8080"
./mod-organizer-mcp光标MCP配置示例
Docker(stdio,与nexusmods mcp的想法相同)
安装 主机 MO2_data 在 /mo2 在容器中;env变量使用 集装箱内 路径。
{
"mcpServers": {
"mod-organizer-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"MO2_PROFILE_DIR=/mo2/profiles/MyProfile",
"-e",
"MO2_MODS_DIR=/mo2/mods",
"-v",
"/path/to/MO2_data:/mo2:ro",
"-v",
"/path/to/Skyrim Special Edition/Data:/game_data:ro",
"mod-organizer-mcp:local"
]
}
}
}替换 /path/to/MO2_data 包含以下内容的目录 profiles/ 和 mods/ (在WSL上,通常类似 /mnt/s/Games/MO2_data).配置文件名称(MyProfile)必须与下的文件夹匹配 profiles/第二个 -v 行是可选的:如果不需要,请省略它 mo2_skse_plugins 和 game_data_dir": "/game_data".首先构建映像: docker build -t mod-organizer-mcp:local . 在这个回购中。
原生二进制或 go run
根据布局调整路径。带空格的路径必须在JSON中引用。
{
"mcpServers": {
"mod-organizer-mcp": {
"command": "/path/to/mod-organizer-mcp",
"env": {
"MO2_PROFILE_DIR": "/path/to/MO2_instance/MO2_data/profiles/MyProfile",
"MO2_MODS_DIR": "/path/to/MO2_instance/MO2_data/mods"
}
}
}
}如果二进制文件存在于其他地方,请使用 go build 输出路径或 "command": "go" 和 "args": ["run", "-C", "/path/to/mod-organizer-mcp", "./cmd/server"] (启动速度较慢)。
工具
| 工具 | 目的 |
|---|---|
mo2_server_info | 版本和解析的环境变量路径,或 config_error. |
mo2_list_profiles | 父项下的兄弟姐妹档案 MO2_PROFILE_DIR (每个文件夹包含 modlist.txt):名称、路径、modlist条目计数。 |
mo2_profile_summary | 计数(+/- mods、modlist中的重复项), plugins.txt / loadorder.txt 存在和行数,缺少mod文件夹。是否 不 阅读 meta.ini. |
mo2_profile_snapshot | 完整JSON快照(mods[] 可选 meta, plugin_lines, loadorder_lines).默认情况下还包括 snapshot_contract_version, profile_ini (配置文件下的白名单), profile_list_paths (绝对 plugins.txt / loadorder.txt + present), archive_search_roots (每mod mod_root 可选 data_subdir 用于档案扫描)。集 include_contract错误的 省略该块。 include_plugin_load_order:true 添加 plugins_ordered (loadorder+plugins.txt的合并);默认 错误的 (如果可用,请使用Mutagen)。其他可选参数: include_meta, include_plugin_lines, include_loadorder_lines (默认值 真 每个), only_enabled, mod_name_prefix. |
mo2_profile_machine_contract | 与默认快照块相同的合约字段, 没有 mods[]、线阵列,或 meta.ini.可选 only_enabled, mod_name_prefix (过滤器 archive_search_roots). |
mo2_profile_plugin_load_order | plugins_ordered (装载顺序+ plugins.txt 活动)和 profile_list_paths仅适用于MO2;更喜欢突变体 mutagen_list_plugins 当配置时。 |
mo2_nexus_local_index | 每个模组的紧凑型Nexus定向字段 meta.ini (nexus_mod_id, nexus_file_id、版本、游戏等)。根字段: source = "meta_ini", live_nexus_api = 错误的 -这是MO最后已知的磁盘元数据,而不是Nexus API。可选: only_enabled. |
mo2_mod_lookup | 论点 name:一个mod(精确→ 不区分大小写→ 唯一前缀)。退货 match 或 ambiguous_candidates / not_found. |
mo2_list_plugins | 结构化 plugins.txt: name + active (领导 * → 不活动)。 |
mo2_list_mod_plugins | 论点: name,可选 max_depth (默认值8), max_files (默认值为200)。列表 .esp / .esm / .esl 在该mod文件夹下(路径相对于 MO2_MODS_DIR). |
mo2_skse_plugins | SKSE插件DLL(仅限松散版): 列表 .dll 在虚拟 Data/SKSE/Plugins 通过扫描每个已启用的模块 Data/SKSE/Plugins 和 SKSE/Plugins. 优先: 与松散资产相同——mod 稍后 在 modlist.txt 胜利(plugins[] 包括 winner, providers,可选 size).可选的 game_data_dir:游戏的绝对路径 Data 文件夹;添加 /SKSE/Plugins 作为提供者 GameData 有序地 -1 (任何mod都会覆盖它)。可选的 include_pe_versionPE FileVersion / ProductVersion (速度较慢)。其他参数: only_enabled (默认为真), mod_name_prefix, max_dlls (默认值500,组 truncated), include_size (默认为真), strip_data_prefix (默认为true)。看 priority_note JSON格式。 |
mo2_asset_conflicts | 仅限松散文件 (非BSA/BA2):在中启用了行走模式 modlist.txt 订单和退货 conflicts[] 其中两个或多个mod在mod文件夹下公开相同的虚拟路径(类似于游戏 Data). 优先: mod 稍后 在 modlist.txt 胜利(更高 order JSON格式)。可选: path_prefix (例如。 textures/), max_files_total (默认值200000), max_depth, strip_data_prefix (默认为true: Data/textures/… → textures/…), include_single_winner_paths (默认为false;完整地图很大)。响应包括 priority_note, scanned_files,以及 warnings (例如截断)。在大名单上可能会很慢;窄与 path_prefix. |
安全和政策
- 此服务器 只阅读 文件夹。它不会修改
modlist.txt,meta.ini或其他任何东西。 - 更喜欢a 复制 当Mod Organizer运行时,可能会锁定文件。
- 将Skyrim/MO2树下的路径视为敏感路径:仅在以下情况下授予工具或代理的写访问权限 你 在上下文中明确允许它(此MCP不写)。
WSL:Windows驱动器不可见
如果工具因以下错误而失败 Transport endpoint is not connected 或 no such file 在...之下 /mnt/:
- 确保驱动器安装在WSL中(
/mnt/s或/mnt/c存在并列出MO2所在的文件夹)。 - 从Windows运行
wsl --mount或者在访问后打开发行版S:一次,取决于您的WSL版本和wsl.conf自动装载设置。 - 使用
mo2_server_info固定支架后,确认路径已解决。
Nexus模组
- 此MCP 暴露
mo2_nexus_local_index:存储在任何MO2中meta.ini(id、版本、文件名)。将其视为 本地缓存它可能已经过时了。 - 实时Nexus (当前文件版本、描述、依赖关系):使用 分开 与Nexus Mods API对话的MCP(您信任的任何实现)。典型流程:
mo2_nexus_local_index或mo2_mod_lookup→ 然后从磁盘中获取具有mod/file-id的MCP。
积压(此处未实施)
主控程序 资源 (mo2://… URI),可选 MO2_INSTANCE_DIR + modorganizer.ini,解析MO2 webcache, BSA/BA2 索引,更严格 USVFS 平价留给未来的工作。
代理人备注
- 更喜欢
mo2_profile_summary仅用于计数;mo2_profile_machine_contract当您需要INI/列表路径/归档根目录而无需步行时meta.ini或返回mods[](使用only_enabled/mod_name_prefix收缩archive_search_roots). - 使用
mo2_profile_plugin_load_order仅在MO2中流动;如果 诱变剂 已配置,首选mutagen_list_plugins用于订购插件+磁盘分辨率。 mo2_profile_snapshot接受与以前相同的过滤器,另外include_contract(默认打开)和include_plugin_load_order(默认关闭)。窄与include_meta,mod_name_prefix,only_enabled根据需要。- 工具 参数模式 (包括过滤器)从Go结构中推断出来,并通过以下方式暴露给MCP客户端
tools/list(jsonschema字段上的标签)。 - 对于 SKSE原生插件 (
.dll在SKSE/Plugins),呼叫mo2_skse_plugins;通行证game_data_dir作为游戏Data当您需要从磁盘获取基线DLL时(例如Docker挂载)。使用include_pe_version仅当您需要PE版本字符串时。 - 对于纹理/网格/脚本重叠,请调用
mo2_asset_conflicts带着一个path_prefix(和更低max_files_total如果需要),因此JSON保持有界。 - 上下文压缩后,重新调用
mo2_nexus_local_index而不是对磁盘上已经存在的id重复相同的Nexus API请求。
公共回购/分叉
.cursor/被忽略:IDE计划通常嵌入绝对本地路径;让他们远离git。go.mod模块路径 (github.com/.../mod-organizer-mcp)应与您发布的Git URL匹配;分叉后,更换模块路径和所有import字符串(或使用标准Go分支指南中的多步重命名)。
许可证
除非添加许可证文件,否则不包括许可证文件。
