5eMCP
Enables D&D 5e game masters and players to access complete game reference data, search spells, monsters, items, and calculate encounter difficulty, all through natural language.
README
<h1><picture><source media="(prefers-color-scheme: dark)" srcset="assets/icon-dark.png"><source media="(prefers-color-scheme: light)" srcset="assets/icon-light.png"><img src="assets/icon-light.png" width="40" height="40" alt="D20"></picture> 5eMCP</h1>
A complete D&D 5e reference and utility MCP server backed by live 5etools data.
Quick Start
Claude Desktop — One-Click Install (recommended)
- Download
5eMCP.mcpbfrom the latest release - Open the file — Claude Desktop will prompt you to install it, or go to Settings → Extensions → Install Extension and select the file
- Enter your GitHub personal access token when prompted (required — create a free one at github.com/settings/tokens with
public_reposcope or read-only access to public repos) - Choose your default ruleset (
2024or2014) - Restart Claude Desktop
Your token is stored securely in the OS keychain (macOS Keychain / Windows Credential Manager) — never in plain text.
Developers (Claude Code, Cursor, manual config)
Requirements: Node.js ≥ 24, optional GitHub personal access token (read-only, public repos)
git clone https://github.com/jazzsequence/5eMCP.git
cd 5eMCP
npm install
npm run build
Claude Code
Add to ~/.claude.json:
{
"mcpServers": {
"5etools": {
"command": "node",
"args": ["/path/to/5eMCP/dist/index.js"],
"env": {
"GITHUB_TOKEN": "ghp_your_token_here",
"DEFAULT_RULESET": "2024"
}
}
}
}
Cursor
Add to .cursor/mcp.json in your project (or ~/.cursor/mcp.json globally):
{
"mcpServers": {
"5etools": {
"command": "node",
"args": ["/path/to/5eMCP/dist/index.js"],
"env": {
"GITHUB_TOKEN": "ghp_your_token_here",
"DEFAULT_RULESET": "2024"
}
}
}
}
Claude Desktop (manual config) {#claude-desktop-manual-config}
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"5etools": {
"command": "node",
"args": ["/path/to/5eMCP/dist/index.js"],
"env": {
"GITHUB_TOKEN": "ghp_your_token_here",
"DEFAULT_RULESET": "2024"
}
}
}
}
Replace /path/to/5eMCP with the absolute path to your clone. DEFAULT_RULESET can be "2024" (default) or "2014" for legacy rules. GITHUB_TOKEN is optional but strongly recommended — unauthenticated requests are rate-limited to 60/hr.
How It Works
5e.tools is fully client-side. When spells.html loads, the browser fetches data/spells/spells-phb.json directly from GitHub and renders it in JavaScript. This server replicates that pattern server-side:
GitHub Contents API
→ manifest: { spells: [...], bestiary: [...], book: [...], ... }
→ SHA-keyed disk/Redis cache
→ raw.githubusercontent.com (fetch on miss)
→ translation layer (resolve {@tags}, merge fluff, normalize)
→ MCP tool response
The manifest is schema-agnostic and self-updating. When 5etools adds a new content type, the next manifest refresh picks it up automatically — no code change required. Unknown types run through the passthrough handler (tags resolved, internal fields stripped) and return clean JSON. Nothing is ever inaccessible.
Available Tools
Meta Tools
| Tool | Description |
|---|---|
manifest_status |
Build time, file counts by type, unknown types discovered. |
list_sources |
All source abbreviations with content types. |
fetch_content |
Fetch and translate any file in the manifest by content type + file name. Universal fallback for any content type. |
Search Tools (*_search)
All search tools accept query (name substring), ruleset ("2024" or "2014"), limit, fields (optional list of field names to include in each result — default is all fields, e.g. ["name","cr","source"]), and include_homebrew (boolean, default false — when true also searches TheGiddyLimit/homebrew alongside official results). Results match on name, source abbreviation, pantheon/setting, and any top-level array-of-strings field in the data (e.g. damageInflict, conditionInflict, environment, property tags like "Vst|EGW").
Selected tools support additional structured filter parameters:
| Tool | Extra Parameters |
|---|---|
spell_search |
level (int 0–9), school (full name: evocation, necromancy, etc.) |
monster_search |
type (beast, humanoid, undead…), cr_max (max CR inclusive: "1/4", "1/2", "5"…), environment (habitat substring: "underdark", "forest", "nine hells"…) |
item_search |
rarity (common, uncommon, rare, very rare, legendary, artifact), type (weapon, armor, wondrous…) |
| Tool | Content |
|---|---|
spell_search |
Spells |
monster_search |
Monsters and creatures |
item_search |
Magic and mundane items |
race_search |
Playable species / races |
background_search |
Character backgrounds |
feat_search |
Feats |
condition_search |
Conditions and diseases |
vehicle_search |
Vehicles and vessels |
object_search |
Objects |
trap_search |
Traps and hazards |
psionic_search |
Psionic powers and disciplines |
deck_search |
Decks (e.g. Deck of Many Things) |
reward_search |
Supernatural gifts and boons |
optfeature_search |
Optional class features and invocations |
table_search |
Random tables |
variantrule_search |
Variant rules |
deity_search |
Deities and gods (searchable by pantheon/setting) |
language_search |
Languages |
skill_search |
Skills |
sense_search |
Senses (darkvision, tremorsense, etc.) |
book_search |
Sourcebooks (name, ID, source, publication date) |
adventure_search |
Published adventures |
class_search |
Character classes (official + homebrew) |
subclass_search |
Subclasses and archetypes |
Get Tools (*_get)
Exact lookup by name with full fluff/description merged in. Accept name, optional source, and ruleset.
| Tool | Content |
|---|---|
spell_get |
Full spell entry with description |
monster_get |
Full stat block with lore |
item_get |
Full item entry with description |
race_get |
Full race entry with traits and fluff |
background_get |
Full background entry with fluff |
feat_get |
Full feat entry |
book_get |
Sourcebook metadata by name |
adventure_get |
Adventure metadata by name |
class_get |
Full class entry by name |
subclass_get |
Full subclass entry by name |
Sourcebook & Adventure Content
| Tool | Description |
|---|---|
book_content_get |
Retrieve full prose from a sourcebook or adventure by source abbreviation (e.g. SCC, EGW, SCC-CK). Without section: returns a table of contents. With section: returns that section's text rendered as clean markdown. Supports deep nested section search (case-insensitive substring match). |
Omnisearch
| Tool | Description |
|---|---|
omnisearch |
Search all 24 content types at once. Returns results tagged with entityType. Accepts include_homebrew (default true — homebrew is included by default). |
DM Calculator Tools
All calculators are purely local — no network calls, no API key needed.
| Tool | Description |
|---|---|
cr_calculate |
Calculate a monster's Challenge Rating from its stats (HP, AC, DPR, attack bonus). Applies DMG Appendix B algorithm. Supports damage immunity (effective HP ×2), resistance (×1.5), and vulnerability (×0.5). Returns final CR, XP, and the defensive/offensive sub-CRs. |
cr_scale |
Look up the expected stat ranges (HP, AC, attack bonus, DPR, save DC, proficiency bonus) for a given CR from the DMG reference table. Useful for designing or adjusting homebrew monsters. |
encounter_build |
Evaluate encounter difficulty for a party vs a set of monsters. Supports both 2014 (easy/medium/hard/deadly, with monster-count XP multiplier) and 2024 (low/moderate/high, no multiplier) rulesets. Returns adjusted XP, difficulty label, and full threshold breakdown. |
loot_generate |
Generate individual treasure loot for a monster by CR, using the DMG individual treasure tables. Returns all possible outcomes for the CR bracket with probability percentages and average coin amounts. |
Environment Variables
| Variable | Default | Description |
|---|---|---|
GITHUB_TOKEN |
— | Read-only GitHub PAT. Strongly recommended. |
DEFAULT_RULESET |
"2024" |
Which ruleset to use ("2024" or "2014"). |
MANIFEST_TTL_SECONDS |
3600 |
How often to rebuild the manifest (seconds). |
CACHE_DIR |
~/.cache/5eMCP |
Disk cache location (local stdio mode). |
REDIS_URL |
— | Redis connection URL (e.g. redis://localhost:6379). When set and reachable, Redis is used instead of disk cache. Falls back to disk on connection failure. |
Ruleset Support
All tools accept ruleset: "2024" | "2014":
"2024"→5etools-mirror-3/5etools-src(current rules)"2014"→5etools-mirror-3/5etools-2014-src(legacy rules)
Development
npm run dev # Run without compile step (tsx)
npm run build # Compile TypeScript
npm run typecheck # Type-check without emitting
npm test # Run tests (Vitest)
npm run lint # ESLint
This project uses TDD. Tests are written before implementation. See AGENTS.md for the full workflow including mandatory reviewer agent approval before commits.
# First-time setup: install git hooks
./.githooks/install.sh
Architecture
flowchart TD
Client["MCP Client\n(Claude Desktop / Claude Code / Cursor)"]
Server["MCP Server (Node.js)"]
Manifest["Manifest Layer\n1-hour TTL refresh"]
Cache["Cache Layer\nSHA-keyed disk or Redis"]
Translation["Translation Layer\ntag resolver · typed handlers · passthrough"]
Calculators["Calculators\nCR · encounter · loot · scaling"]
GH["GitHub Contents API"]
Raw["raw.githubusercontent.com"]
Redis[("Redis / Disk")]
Client -->|stdio| Server
Server --> Manifest
Server --> Cache
Server --> Translation
Server --> Calculators
Manifest -->|"index all files"| GH
Cache -->|"fetch on miss"| Raw
Cache <-->|"read / write"| Redis
Legal
5etools data is fetched live from public GitHub repositories. This server does not store or redistribute any content. The GitHub API rate limit applies. A GitHub token is required for sustained use.
Calculator logic is ported from 5etools' MIT-licensed JavaScript source.
Credits
D20 icon by Delapouite via game-icons.net, licensed CC BY 3.0.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。