关于 packwarden
PackWarden 是用于构建和维护 Thunderstore 模组包的 MCP 服务,覆盖各游戏社区。它可搜索模组、解析依赖、检查模组包状态,并导出供 r2modman 或 Thunderstore Mod Manager 使用的配置文件。
主要功能
- 01按社区和条件搜索模组
- 02解析传递性软件包依赖
- 03检查冲突和过期模组
- 04导出供模组管理器使用的 .r2z 配置
- 05缓存软件包数据并处理 API 退避
适用场景
- 01查找 Thunderstore 游戏社区的模组
- 02检查模组包中的缺失或冲突依赖
- 03审查模组清单中的已移除或过期版本
- 04导出配置文件以导入模组管理器
MCP 相关
它向 MCP 客户端提供 Thunderstore 社区、搜索、依赖、审查和配置导出工具。可通过 stdio 运行,也可作为无状态 Streamable HTTP 服务运行。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
5收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| filter | string | 否 |
详细介绍
PackWarden — Thunderstore 模组包 MCP 服务(v0.1.0)
PackWarden 与 Thunderstore 无关联,也未获得其认可。“Thunderstore”仅用于说明兼容性。 模组数据来自 Thunderstore 公共 API(https://thunderstore.io)。
一个 MCP 服务,可帮助 AI 助手构建和维护 Thunderstore 模组包 (Lethal Company、Risk of Rain 2、Valheim,以及其他所有 Thunderstore 社区)。
工具
| 工具 | 功能 |
|---|---|
list_communities | 列出 Thunderstore 游戏社区(标识符 + 名称)。 |
search_mods | 按名称/所有者/描述/类别搜索社区;可按相关性、下载量、评分和更新时间排序。 |
resolve_dependencies | 解析一个或多个包/版本的完整传递依赖闭包;提供最终安装集、缺失依赖、多版本锁定项,以及可选的依赖树。 |
check_pack_health | 审核模组列表:检查未找到、版本已移除、已弃用、过时、缺失依赖、依赖版本冲突、重复项和 NSFW 内容。 |
export_r2modman_profile | 写入 .r2z 配置文件(在 r2modman / Thunderstore Mod Manager 中选择“Import profile → From file”),可选包含依赖和配置文件。不会上传任何内容。 |
模组引用格式为 Owner-Name(最新版)或 Owner-Name-1.2.3。
安装
需要 Node.js ≥ 18.17。
git clone <repo> thunderstore-mcp && cd thunderstore-mcp
npm install && npm run build
Claude Desktop
编辑 claude_desktop_config.json(macOS:~/Library/Application Support/Claude/,Windows:%APPDATA%\Claude\):
{
"mcpServers": {
"thunderstore": {
"command": "node",
"args": ["/absolute/path/to/thunderstore-mcp/dist/main.js"],
"env": { "TSMCP_EXPORT_DIR": "/absolute/path/for/profiles" }
}
}
}
重启 Claude Desktop。
Cursor
~/.cursor/mcp.json(全局)或 .cursor/mcp.json(项目):
{
"mcpServers": {
"thunderstore": {
"command": "node",
"args": ["/absolute/path/to/thunderstore-mcp/dist/main.js"]
}
}
}
Streamable HTTP(远程/可自托管)
npm run start:http # http://127.0.0.1:3333/mcp
PORT=8080 HOST=0.0.0.0 node dist/main.js --http
Cursor:{ "mcpServers": { "thunderstore": { "url": "http://127.0.0.1:3333/mcp" } } }。
HTTP 模式为无状态模式(仅 POST,返回 JSON),且没有身份验证。对外开放前,请将其置于带有 TLS 和身份验证的反向代理之后。
配置(环境变量)
| 变量 | 默认值 | 含义 |
|---|---|---|
TSMCP_CACHE_DIR | ~/.cache/thunderstore-mcp | 精简包索引缓存 |
TSMCP_LIST_TTL_MS | 3600000 (1h) | 包列表的缓存有效期 |
TSMCP_MIN_INTERVAL_MS | 1000 | 出站请求之间的最小间隔 |
TSMCP_EXPORT_DIR | ./exports | .r2z 文件的写入位置 |
TSMCP_CONTACT | [email protected] | User-Agent 中使用的联系地址。运行自己的副本时,请覆盖此值。 |
TSMCP_BRAND | PackWarden | 服务名称/User-Agent 中的品牌 |
TSMCP_BASE_URL | https://thunderstore.io | API 基础 URL |
做一个友善的 API 使用者
- 每个社区在每个 TTL 内只完整下载一次包列表,之后使用条件请求(
If-Modified-Since)。结果会作为精简索引缓存到磁盘。 - 出站请求会串行发送(并发数为 1),且间隔至少 1s。遇到 429/5xx 时,客户端会退避并遵循
Retry-After。 - 使用带有联系地址的标识性 User-Agent。
- 网络故障时,服务会继续提供过期缓存。
测试(实时 API)
npm test # default community: valheim
TEST_COMMUNITY=valheim npm test
测试针对实时 Thunderstore API,覆盖 stdio 和 Streamable HTTP 端到端流程。
局限性
- 大型社区的数据量很大。首次加载 Lethal Company 约需处理 330 MB JSON,耗时约 14 s,并使用约 1.4 GB RAM。此后从缓存加载约需 3 s。
- 依赖解析遵循 r2modman 的行为(优先选择请求的最高版本)。由于 Thunderstore 固定使用精确版本,因此不会进行 semver 范围求解。
- 不支持共享配置文件 代码,因为这需要上传到 Thunderstore。仅支持导出文件。
- 搜索采用本地关键词评分,不使用 Thunderstore 自身的搜索排名。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。