战锤40K规则查询服务

一个提供全面战锤40K第十版规则数据访问的MCP服务器,支持单位查询、策略搜索、单位比较和名单验证等功能。

  • by Emeier2
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Emeier2/40k-mcp-server

使用说明

40k MCP服务器

一 MCP(模型上下文协议) 允许LLM访问的服务器 所有战锤40000第10版 用于游戏决策和列表构建的派系规则数据。

使用TypeScript、本地向量嵌入和零外部API依赖项构建。

特性

5个MCP工具 对于所有派系的全面40k规则访问:

工具 说明
get_unit 完整的数据表查找,包括统计数据、武器、能力、积分和关键字。支持模糊名称匹配和可选派系过滤
search_rules 使用向量嵌入对所有规则进行语义搜索(RAG)。问一些自然语言的问题,比如“最好的反坦克武器”或“可以深度打击的单位”。按派系或规则类型筛选。
list_stratagems 按派系、分离、类型或关键字浏览和过滤策略。
compare_units 两个单位在属性、武器、能力和点数效率方面的并排比较。跨派系工作。
validate_list 根据点数限制和构造规则(EPIC HERO重复,有效单位大小)验证军队名单。

数据覆盖范围: 1665个单位,1469个策略,776个增强,189个分遣队,6个派系规则,以及24个派系的7个核心规则部分。

支持的派系

帝国 混沌 Xenos
阿登普塔·索罗里塔斯。混沌守护者。艾尔达。
《Adeptus Custones》 《混沌骑士》 Drukhari
机械爱好者 混沌太空海军陆战队 基因窃贼崇拜
Adeptus Titanicus 死亡守卫 沃坦联盟
Astra Militarum 皇帝的孩子们 Necrons
灰骑士 千子 Orks
帝国特工 世界食客 唐帝国
帝国骑士团
太空海军陆战队

太空海军陆战队包括所有章节特定的内容(黑圣殿骑士、血天使、黑暗天使、死亡守望、太空狼)。

建筑

MCP Client (Claude Desktop / Claude Code)
          |
          | stdio (JSON-RPC)
          v
    MCP Server (TypeScript)
    @modelcontextprotocol/sdk
          |
    +-----+------+
    |             |
Structured    Vector DB
  JSON         (Vectra)
 Lookups    Semantic Search
  • 结构化工具 (get_unit, list_stratagems, compare_units, validate_list)对启动时加载的JSON数据进行精确/过滤查找
  • 语义搜索 (search_rules)将查询嵌入到本地转换器模型中,并搜索预先构建的向量索引
  • 嵌入 使用本地生成 all-MiniLM-L6-v2 通过 @huggingface/transformers -不需要API密钥
  • 矢量存储 用途 维克特拉,一个具有JSON文件存储的轻量级JS原生矢量数据库

多派别数据加载

启动时,服务器进行扫描 data/ 用于派系子目录,并并行加载所有JSON文件。每个派系的数据被合并为一个 GameData 对象,每个项目上都保留了派系元数据。

RAG区块链战略

为了准确检索,游戏数据被拆分为语义上有意义的块。每个块都包括用于过滤的派系元数据:

块类型 内容
unit_overview 姓名、统计数据、关键字、积分、派系
unit_weapons 所有带有关键字的武器配置文件
unit_abilities 核心、派系和独特能力
unit_composition 型号计数、作战装备选项、领导者信息
stratagem 每个策略的完整时间/目标/效果文本
enhancement 效果文本、限制、要点
detachment_rule 分离能力文本
faction_rule 全派系规则
core_rule 核心游戏规则(阶段、概念)

每个块都以上下文作为前缀(例如。, [Unit: Fire Dragons] (aeldari) Weapons:)因此嵌入捕获了内容及其来源。

快速开始

先决条件

  • Node.js 18+
  • npm

安装和构建

git clone https://github.com/Emeier2/40k-mcp-server.git
cd 40k-mcp-server
npm install
npm run build

构建矢量索引

必需的 search_rules 工具(首次运行下载嵌入模型,约80MB):

npm run build-index

配置Claude桌面

添加到您的Claude桌面配置(claude_desktop_config.json):

{
  "mcpServers": {
    "wh40k": {
      "command": "node",
      "args": ["/absolute/path/to/40k-mcp-server/build/index.js"]
    }
  }
}

然后重新启动Claude Desktop。工具将自动显示。

配置Claude代码

添加到您的Claude Code MCP设置中:

{
  "mcpServers": {
    "wh40k": {
      "command": "node",
      "args": ["/absolute/path/to/40k-mcp-server/build/index.js"]
    }
  }
}

交互示例

“中间人擅长什么?”

克劳德打电话来 get_unit("Intercessors", faction="space-marines") 并获取包含统计数据、栓式步枪配置文件和能力的完整数据表。

“死亡守卫在射击阶段可以使用什么策略?”

克劳德打电话来 list_stratagems(faction="death-guard", keyword="shooting") 并得到滤波结果。

“将幽灵卫士与火龙进行反坦克比较”

克劳德打电话来 compare_units("Wraithguard", "Fire Dragons") 为了进行并排比较,那么 search_rules("anti-tank weapons") 以获取更多上下文。

“充电阶段的核心规则是什么?”

克劳德打电话来 search_rules("charge phase", type="core_rule") 找到相关的核心规则。

“这份2000分的名单合法吗?”

克劳德打电话来 validate_list 使用单位列表,检查积分总数,标记任何EPIC HERO重复或无效的单位大小。

项目结构

40k-mcp-server/
├── src/
│   ├── index.ts              # MCP server entry point
│   ├── tools/
│   │   ├── get-unit.ts       # Unit datasheet lookup
│   │   ├── search-rules.ts   # RAG semantic search
│   │   ├── list-stratagems.ts# Stratagem filtering
│   │   ├── compare-units.ts  # Unit comparison
│   │   └── validate-list.ts  # Army list validation
│   ├── data/
│   │   ├── loader.ts         # Multi-faction JSON loader
│   │   └── types.ts          # TypeScript interfaces
│   ├── rag/
│   │   ├── embeddings.ts     # Local embedding generation
│   │   ├── vector-store.ts   # Vectra index wrapper
│   │   └── chunker.ts        # Intelligent data chunking
│   └── utils/
│       └── formatting.ts     # LLM-optimized output formatting
├── data/
│   ├── {faction}/            # Per-faction data directories
│   │   ├── units.json        # Unit datasheets
│   │   ├── stratagems.json   # Stratagems
│   │   ├── enhancements.json # Enhancements
│   │   ├── detachments.json  # Detachment rules
│   │   └── faction-rules.json# Faction-wide rules
│   ├── core-rules.json       # Core game rules
│   └── index/                # Vector search index
├── scraper/                  # Python scraping pipeline (offline)
│   ├── scrape_all.py         # Master orchestration (all factions)
│   ├── scrape_datasheets.py  # Unit datasheet scraper
│   ├── scrape_faction_data.py# Stratagems/enhancements/detachments
│   ├── scrape_core_rules.py  # Core rules scraper
│   └── utils.py              # Shared scraping utilities
└── scripts/
    └── build-index.ts        # Vector index builder

报废数据

要重新抓取所有派系数据(需要Python 3.10+及其依赖项):

pip install -r scraper/requirements.txt
python scraper/scrape_all.py

scraper支持恢复——它跳过输出目录已经包含所有5个文件的派系。要强制重新抓取特定派系,请删除其下的目录 data/.

技术栈

技术 角色
TypeScript 服务器实现
@模型上下文协议/sdk MCP服务器框架
维克特拉 本地矢量数据库(JS原生,JSON存储)
@拥抱面/变压器 局部嵌入模型(all-MiniLM-L6-v2)
黄道带 工具输入模式验证
Python/BeautifulSoup 离线数据抓取

数据源

从中抓取游戏数据 瓦哈佩迪亚 并以结构化JSON的形式提交。scraper是一个离线工具——用户不需要Python或网络访问来运行MCP服务器。

战锤40000条规则和军队数据是Games Workshop的知识产权。这个项目是一个粉丝制作的个人使用工具。

许可证

麻省理工学院