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.pyscraper支持恢复——它跳过输出目录已经包含所有5个文件的派系。要强制重新抓取特定派系,请删除其下的目录 data/.
技术栈
| 技术 | 角色 |
|---|---|
| TypeScript | 服务器实现 |
| @模型上下文协议/sdk | MCP服务器框架 |
| 维克特拉 | 本地矢量数据库(JS原生,JSON存储) |
| @拥抱面/变压器 | 局部嵌入模型(all-MiniLM-L6-v2) |
| 黄道带 | 工具输入模式验证 |
| Python/BeautifulSoup | 离线数据抓取 |
数据源
从中抓取游戏数据 瓦哈佩迪亚 并以结构化JSON的形式提交。scraper是一个离线工具——用户不需要Python或网络访问来运行MCP服务器。
战锤40000条规则和军队数据是Games Workshop的知识产权。这个项目是一个粉丝制作的个人使用工具。
许可证
麻省理工学院
