D&D角色管理服务器

一个用于管理《龙与地下城》第五版角色的MCP服务器,提供角色加载、骰子投掷、技能检定、能力检定、豁免检定和角色状态管理等功能。

  • by Sdernbach
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 Sdernbach/DND-MCP

使用说明

D&D角色MCP服务器

用于管理《龙与地下城》第5版角色的MCP(模型上下文协议)服务器。此服务器提供用于加载角色、执行掷骰子、技能检查、能力检查、保存投掷和管理角色状态的工具。

服务器使用 dnd53_json_schema 定义用于保存和加载字符。

示例

用户:
我们来玩DND吧。你的角色可以是Thorin。他的角色表在 examples\characters\thorin.json.

LLM玩家:
我很想和你一起玩d&d!让我加载Thorin的角色表,这样我就可以正确地扮演他了。

load_character
Request
{
  "file_path": "examples\\characters\\thorin.json"
}

Response
Successfully loaded character: Thorin Ironforge (Level 5)
get_character_info
Request
{}

Response
{
  "name": "Thorin Ironforge",
  "nickname": null,
  "race": "Dwarf",
  "level": 5,
  "classes": ["Fighter 5"],
  "alignment": "lawful good",
  "hit_points": { "max": 52, "current": 52 },
  "armor_class": 18,
  "ability_scores": {
    "str": 16, "dex": 10, "con": 16, "int": 12, "wis": 14, "cha": 10
  },
  "proficiency_bonus": 3
}

杰出的!我已经准备好扮演Thorin Ironforge,一个坚定的5级矮人战士。
调整我闪闪发光的链甲,举起我值得信赖的战锤
“你好,朋友!我是铁山的索林·铁炉堡,是所有威胁这片土地和平的人的无辜者和敌人的坚定捍卫者。我的锤子尝过许多兽人和妖精的血,我的盾牌已经抵挡住了无数对我同伴的打击。”
若有所思地抚摸着我的辫子胡子
“今天我们面临什么样的冒险?你是DM,还是你想让我也扮演这个角色?我已经准备好迎接任何等待我们的故事了!”


DM:
你醒来后发现自己身处一个未知的地方。你似乎在地下一个被发光的蓝色水晶照亮的大洞穴里。你的背包和武器就在你身边,但你不知道它们或你是怎么到这里的。您当前所在的房间只有一个入口。请进行感知检查。

LLM玩家:
索林的眼睛猛地睁开,本能地伸手去拿战锤,看着周围奇怪的环境
“借着莫拉丁的胡子……我在九地狱的哪里?”
他慢慢地坐起来,打量着闪闪发光的水晶洞,他经验丰富的战士本能开始发挥作用
“这些水晶……我以前从未见过这样的水晶。我是怎么带着所有的装备完好无损地来到这里的?”
索林小心地收拾好装备,系上盾牌,举起战锤,然后集中注意力更彻底地检查洞穴

roll_skill_check
Request
{
  "skill": "perception"
}
Response
{
  "roll_name": "Perception Check",
  "d20_roll": {
    "result": 18,
    "rolls": [18],
    "type": "normal",
    "used_roll": 18
  },
  "base_modifier": 5,
  "flat_modifiers": [],
  "dice_modifiers": [],
  "total": 23,
  "breakdown": "18 (d20) + 5 (base) = 23",
  "skill": "Perception",
  "ability": "WIS",
  "ability_modifier": 2,
  "proficiency_bonus": 3,
  "is_proficient": true
}

索林敏锐的眼睛以熟练的精确度扫视着洞穴,他的矮人血统在这些地下深处对他很有帮助。
“嗯……确实不错——总共23个。即使在这个陌生的地方,我的眼睛也一如既往地敏锐。”
他说话声音低沉而谨慎
“这里有些不对劲。这些晶体在蓝光中脉动的方式……几乎有节奏,就像心跳一样。空气的味道也不一样。古老,但并不陈旧。我敢打赌,这里有魔法在起作用。”
朋友,我对这个神秘水晶洞的敏锐感知揭示了什么?我是否发现了入口、隐藏通道、其他生物的迹象或我可能是如何到达这里的线索的任何细节?

特性

  • 角色管理:从JSON文件加载并保存D&D 5e字符
  • 高级骰子滚动:灵活的修改器系统,支持优势、劣势和自定义修改器
  • 技能检查:所有18种D&D 5e技能,包括熟练度和能力修正计算
  • 能力检查:使用修饰语直接检查能力得分
  • 法术和豁免:在适用的情况下,通过熟练度奖金节省投掷次数
  • 攻击骰:武器攻击滚带熟练度加成
  • 复杂改性剂:支持骰子修改器(bardic灵感、指导、祝福)和扁平奖金
  • 字符信息:访问角色统计数据、法术、装备等
  • 热点管理:更新和跟踪角色命中点

修改器系统

服务器使用灵活的修饰符字符串系统,支持:

  • 优势/劣势: "advantage" 或 "disadvantage"
  • 扁平改性剂: "+2", "-1", "+3"
  • 骰子修饰剂: "guidance:1d4", "bardic:1d8", "bless:1d4"
  • 组合: "advantage +2 bardic:1d6 guidance:1d4"

示例:

# Simple advantage
roll_skill_check("perception", "advantage")

# Complex combination
roll_skill_check("athletics", "advantage +2 bardic:1d8 guidance:1d4")

# Multiple dice bonuses
roll_saving_throw("wis", "bless:1d4")

安装

  1. 安装所需的依赖项:
pip install -r requirements.txt
  1. 运行服务器:
python main.py

要将服务器与Claude桌面一起使用,请将以下内容添加到Claude_desktop_config.json中

{
  "mcpServers": {
    "dnd": {
      "command": "python",
      "args": [
        "[Path to server.py]"
      ]
    }
  }
}

可用工具

角色管理

  • load_character(file_path) -从JSON文件加载字符
  • get_character_info() -获取基本字符信息
  • save_character(file_path) -将当前字符保存到JSON文件
  • update_hit_points(new_current) -更新角色的当前命中点

骰子滚动和检查

  • roll_skill_check(skill, modifiers="") -使用灵活的修饰符滚动技能检查
  • roll_ability_check(ability, modifiers="") -使用灵活的修改器滚动能力检查
  • roll_saving_throw(ability, modifiers="") -使用灵活的修改器进行节省投掷
  • roll_attack(weapon_name="", modifiers="") -用熟练的武器发起攻击
  • list_common_modifiers() -常见D&D修饰符参考
  • create_custom_modifier(name, dice="", flat=0, description="") -创建自定义修改器

字符信息

  • get_character_spells() -按级别组织所有角色法术
  • get_character_equipment() -获取武器、装备和宝藏
  • list_available_skills() -列出所有D&D 5e技能及其相关能力

使用示例

加载角色

load_character("gandalf.json")

滚动技能检查

# Normal skill check
roll_skill_check("perception")

# Skill check with advantage
roll_skill_check("stealth", "advantage")

# Skill check with disadvantage and flat modifier
roll_skill_check("athletics", "disadvantage -2")

# Complex combination
roll_skill_check("persuasion", "advantage +1 bardic:1d8 guidance:1d4")

滚动能力检查

# Strength check with flat bonus
roll_ability_check("str", "+3")

# Dexterity check with advantage and guidance
roll_ability_check("dex", "advantage guidance:1d4")

滚动保存投掷

# Wisdom saving throw with advantage
roll_saving_throw("wis", "advantage")

# Constitution saving throw with multiple bonuses
roll_saving_throw("con", "bless:1d4 +2")

攻击骰

# Basic weapon attack
roll_attack("Longsword")

# Attack with advantage and bless
roll_attack("Longbow", "advantage bless:1d4")

支持的技能

该服务器支持所有18种D&D 5e技能:

  • 力量:田径
  • 灵巧:杂技、手滑、潜行
  • 智能:阿卡纳,历史,调查,自然,宗教
  • 智慧:动物处理、洞察力、医学、感知、生存
  • 魅力:欺骗、恐吓、表演、说服

字符JSON格式

字符应按照D&D 5e模式以JSON格式保存。看 gandalf.json 例如字符文件。

必填字段:

  • player -玩家信息
  • race -角色种族信息

可选字段包括能力分数、课程、技能、法术、装备等。

测试

运行测试脚本以查看服务器的运行情况:

python test_server.py

这将加载甘道夫角色示例,并演示各种服务器功能。

字符类

底层 Character 类提供:

  • JSON序列化/反序列化
  • 从多类级别计算级别
  • 能力修正计算
  • 基于级别的熟练度奖金计算
  • 全面的字符数据管理

许可证

GNU通用公共许可证 有关详细信息,请参阅LICENSE文件。