D&D 5E MCP Server
# D&D 5E MCP Server
An MCP (Model Context Protocol) server that provides access to D&D 5th Edition content via the Open5e REST API. This server enables AI assistants and other MCP clients to retrieve comprehensive D&D 5E information including spells, classes, races, monsters, and equipment.
## Available Tools
### Universal Search
- **`unified_search`** - Search across all D&D content types with intelligent ranking
- Required `query` parameter for search terms
- Optional `content_types` filter for specific content (spells, monsters, races, etc.)
- Optional `fuzzy_threshold` for matching sensitivity
- Returns ranked results across all content types
### Spell Tools
- **`search_spells`** - Search for spells by name or retrieve all spells
- Optional `query` parameter for filtering by spell name
- Returns basic spell information (name, level, school, casting time, etc.)
- **`get_spell_details`** - Get comprehensive details about a specific spell
- Requires `spell_name` parameter
- Returns full spell description, components, duration, and class lists
- **`get_spell_by_level`** - Get all spells of a specific level (0-9)
- Requires `level` parameter (0 for cantrips, 1-9 for spell levels)
- **`get_spells_by_class`** - Get all spells available to a specific class
- Requires `class_name` parameter (e.g., "wizard", "cleric", "bard")
### Class Tools
- **`search_classes`** - Get a list of all available D&D 5E classes
- Returns basic information for all core classes
- **`get_class_details`** - Get detailed information about a specific class
- Requires `class_name` parameter
- Returns hit die, saving throws, description, and available subclasses
### Race Tools
- **`search_races`** - Get a list of all available D&D 5E races
- Returns basic race information from the lineage page
- **`get_race_details`** - Get detailed information about a specific race
- Requires `race_name` parameter
- Returns size, speed, ability score increases, traits, and description
### Monster Tools
- **`search_monsters`** - Search for monsters with filtering options
- Optional `query` parameter for monster names
- Optional `challenge_rating` filter
- Returns monster stats and basic information
- **`get_monsters_by_cr`** - Get all monsters of a specific challenge rating
- **`get_monsters_by_cr_range`** - Get monsters within a CR range for encounter planning
### Equipment Tools
- **`search_weapons`** - Search for weapons with property filtering
- Optional filters for martial/finesse weapons
- **`search_armor`** - Search for armor with AC and category filtering
- **`search_magic_items`** - Search for magic items with rarity filtering
- **`get_magic_item_details`** - Get detailed magic item information
### Character Building Tools
- **`search_feats`** - Search for character feats
- **`get_feat_details`** - Get detailed feat information
- **`search_backgrounds`** - Search for character backgrounds
- **`get_background_details`** - Get detailed background information
- **`generate_character_build`** - Generate optimized character builds
- **`compare_character_builds`** - Compare multiple character build options
- **`get_build_recommendations`** - Get build recommendations for party composition
### Dungeon Master Tools
- **`build_encounter`** - Build balanced encounters for specified party
- Requires `party_size`, `party_level`, and `difficulty`
- Optional filters for environment, monster types, CR range
- Returns balanced encounter with XP calculations
- **`calculate_encounter_difficulty`** - Calculate difficulty of custom encounters
- Requires party info and list of monsters with counts
- Returns encounter difficulty rating and XP breakdown
### Rules & Reference Tools
- **`search_conditions`** - Search for status conditions and effects
- **`get_condition_details`** - Get detailed condition information
- **`get_all_conditions`** - Get all conditions for quick reference
- **`search_sections`** - Search rules sections for quick rule lookups
- **`get_section_details`** - Get detailed rules section information
- **`search_spell_lists`** - Search spell lists by class
- **`get_spell_list_details`** - Get detailed spell list for specific classes
## Installation
1. Clone this repository:
```bash
git clone <repository-url>
cd dnd-mcp
```
2. Install dependencies:
```bash
npm install
```
3. Build the project:
```bash
npm run build
```
## Usage
### Running the Server
```bash
npm start
```
### Development Mode
```bash
npm run dev
```
### MCP Client Configuration
Add to your MCP client configuration (e.g., `mcp.json`):
```json
{
"mcpServers": {
"dnd-5e": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "/path/to/dnd-mcp"
}
}
}
```
### Example MCP Tool Usage
The server implements the Model Context Protocol, exposing tools that can be called by MCP clients. Here are some example tool calls:
#### Universal Search
```json
{
"name": "unified_search",
"arguments": {
"query": "fireball",
"content_types": ["spells", "magic-items"]
}
}
```
#### Build Encounter
```json
{
"name": "build_encounter",
"arguments": {
"party_size": 4,
"party_level": 5,
"difficulty": "medium",
"environment": "dungeon"
}
}
```
#### Generate Character Build
```json
{
"name": "generate_character_build",
"arguments": {
"playstyle": "damage",
"preferred_class": "fighter",
"campaign_type": "combat"
}
}
```
## Technical Features
- **Intelligent Caching**: 1-hour TTL cache to minimize requests to source website
- **Rate Limiting**: 1-second delays between requests to respect server resources
- **Error Handling**: Comprehensive error handling for network issues and missing content
- **TypeScript**: Fully typed implementation for better development experience
- **MCP Protocol**: Full compliance with Model Context Protocol specifications
- **Comprehensive Testing**: Full test coverage for Open5e API functionality and scraping operations
## Architecture
- **Open5e API Integration**: Uses Axios for REST API communication with Open5e
- **Content Processing**: Structured data handling from Open5e JSON responses
- **MCP Server**: Standard MCP protocol implementation with stdio transport
- **Caching Layer**: NodeCache for efficient content storage
## Development
### Available Scripts
- `npm run build` - Compile TypeScript to JavaScript
- `npm run dev` - Run in development mode with hot reload
- `npm start` - Run the built server
- `npm run lint` - Run ESLint
- `npm test` - Run Jest tests (includes comprehensive Open5e API tests)
### Project Structure
```
src/
├── index.ts # MCP server implementation and tool handlers
├── scraper.ts # Open5e API integration and data fetching
tsconfig.json # TypeScript configuration
mcp.json # MCP client configuration example
```
## Data Sources
This server uses the [Open5e REST API](https://open5e.com/api/v1/) to access D&D 5th Edition content. The implementation:
- Leverages the Open5e API for comprehensive D&D 5E data
- Implements intelligent caching to minimize API requests
- Uses appropriate rate limiting and error handling
- Provides structured JSON responses from the API
## Recent Updates
- **Open5e Migration**: Migrated from web scraping to Open5e REST API for better reliability
- **Comprehensive Tool Suite**: Added 40+ tools covering all D&D 5E content types
- **Unified Search**: Intelligent search across all content with fuzzy matching
- **DM Tools**: Encounter building, difficulty calculation, and party balancing
- **Character Building**: Automated character optimization and build comparison
- **Full Test Coverage**: Comprehensive testing for all API functionality
## License
MIT LicenseTDQS
Scored across 37 tools
Most tools have distinct purposes, but there is some overlap that could cause confusion. For example, get_spells_by_class and get_spells_for_class appear very similar, and get_all_sections vs. search_sections might be ambiguous. However, the majority of tools target specific resources and actions clearly.
Tool names follow a highly consistent verb_noun pattern throughout, such as get_*_details, search_*, and build_*. There are no deviations in style, making the set predictable and easy to understand at a glance.
With 37 tools, the count is borderline high for a D&D 5E server, which might feel heavy and overwhelming. While the domain is broad, some tools could potentially be consolidated or streamlined to reduce complexity without losing functionality.
The tool surface provides comprehensive coverage of the D&D 5E domain, including CRUD-like operations for characters, encounters, spells, monsters, items, and rules. It supports detailed lookups, searches, and advanced features like encounter building and character optimization, leaving no obvious gaps for agent workflows.