关于 charactercheck
CharacterCheck 是面向人类或 AI 控制的 DM、PC 和 NPC 的只读编译器,可处理 D&D Beyond 角色卡的部分字段。它生成带来源和信任状态的确定性机制上下文,不负责验证完整规则集。
主要功能
- 01提取指定角色字段
- 02追踪来源与信任状态
- 03创建隐私过滤快照
- 04通过差异比较观测结果
- 05生成报告与接入上下文
适用场景
- 01在游戏前准备角色上下文
- 02使用字段前检查其信任状态
- 03将角色与已保存快照比较
MCP 相关
README 将 CharacterCheck 描述为 MCP 服务,但没有说明其 MCP 工具或面向客户端的接口。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
11收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| ref | string | 是 | DDB 角色 URL 或 id |
详细介绍
CharacterCheck
Agent 从这里开始 → SKILL.md — 了解何时调用、示例以及必须遵守/禁止事项。系列约定:FAMILY.md。
CharacterCheck 是一款实验性的只读编译器,可处理 D&D Beyond 角色卡中的指定字段。它会将公开分享内容、保存的角色服务 JSON 或带版本的快照转换为带来源信息和命名发现项的确定性机制上下文。
当前版本:0.7.0。 如需确保安装可复现,请固定使用
charactercheck==0.7.0。请验证已安装的软件包版本及各字段的信任状态;仅凭版本字符串无法证明某个值受支持。
它不是完整或具有规则权威性的角色验证器。其输出不是遭遇、世界或游戏场次状态,也不能证明某项行动是否合法。上游未知字段和不受支持的限制可能影响结果;使用某个值前,请先查看信任数据和发现项数据。
离线运行 0.7.0
需要 Python 3.9 或更高版本。运行时没有第三方依赖。
git clone https://github.com/chaoz23/charactercheck
cd charactercheck
python3 -m charactercheck selftest
python3 -m charactercheck derive examples/sample-character.json --brief
随附示例是项目编写的合成数据。冒烟测试会检查此检出版本及指定推导结果;它不能证明 D&D 规则已得到完整正确的实现。
要将已发布的软件包安装到虚拟环境中,以使用控制台入口点:
python3 -m venv .venv
.venv/bin/python -m pip install charactercheck==0.7.0
.venv/bin/charactercheck derive examples/sample-character.json --brief
从克隆版本直接运行 python3 -m charactercheck 无需安装运行时依赖。如果环境未提供 setuptools 构建前端,可编辑式 pip 安装可能会引导安装它。将 0.7.0 的输出或 MCP 接口与 0.6.x 进行比较前,请参阅 MIGRATING.md。
对于明确公开的角色:
python3 -m charactercheck derive https://www.dndbeyond.com/characters/<id>
公开分享允许在当时检索内容;但这并不代表同意发布、定期测试、持久化、模型训练,或重用角色设定及第三方叙事内容。
CharacterCheck 不请求凭据。对于私人角色卡,请通过本地 CLI 或库使用经授权保存的角色服务 JSON 文件;不要传入 Cookie、令牌或会话数据。
产品与权威边界
CharacterCheck 目前支持为人类或 AI 控制的 DM、PC 或 NPC 进行只读的机制准备。它会读取角色来源,并输出上下文或待协调候选项。它不提供任何修改工具,也不会成为 HP、状态、专注、已消耗资源、装备声明、DM 裁定、遭遇状态或世界状态的权威来源。
人类主体仍须对访问和使用负责。AI 行为者不得根据角色卡内容或工具参数推断权限、角色或可见范围。如果某个值标记为 confirm、unsupported、unknown 或 invalid,Agent 应询问指定的人类权威,或拒绝使用该值。若不使用 CharacterCheck,手动进行游戏仍是备用方案。
生态系统与计算边界
CharacterCheck 正在开发为一个有版本管理的 D&D Beyond 到 Agent 编译器和符合性门面,而非一套全新的完整 5e 规则引擎。严格的来源/快照/隐私/信任层仍在本地运行。适配器词汇表以固定版本的离线 DDB 配置注册表为种子,并通过独立观察及与 MIT 许可的 DDB Importer 回退方案交叉核对。生产运行时绝不会获取该配置端点。分发的注册表是一个用途受限的允许列表,供当前评估器分支使用,并非 DDB 完整配置或第三方目录词汇表的副本。
注册表成员资格仅表示观察到某个上游 ID/名称,并不证明 CharacterCheck 实现了其机制。有限范围内的未知 ID 会作为不透明的适配器证据保留;固定的语义缺口代码可防止默认计算,并会省略不安全的公式/属性描述。因此,即使可以渲染临时攻击行,当前武器熟练项/手部状态以及尚未实现的属性语义仍明确不受支持。
下一步的机制工作是开展差分符合性验证,使用精确的 SRD 修订版本、范围有限且兼容 MIT 许可的 DDB Importer 证据,以及 Foundry dnd5e 作为有版本管理的模型/行为基准。DDB/显示值和第三方计算值均属于归因声明,不可视为绝对事实;出现分歧时必须标记为不可信冲突。请参阅 ECOSYSTEM_CONFORMANCE.md SOURCE_FIELD_ROUTING.md, 以及 THIRD_PARTY_NOTICES.md。
观察到的 DDB 服务/配置接口仍未作为公共 API 公开文档或提供支持。技术上能够访问,并不意味着获得商业访问权限、内容权利、稳定性保障或许可。商业版本需要采用获得许可或经法律顾问批准的输入/更新途径;在此之前,应优先使用经授权的用户/主机导出。
输入
输入解析器仅接受以下内容:
- 不带前导零的 1–20 位正整数角色 ID;
- 指向
dndbeyond.com或www.dndbeyond.com,且路径恰好为/characters/<id>的 HTTPS URL; - 调用界面允许文件时,直接指定的本地常规 JSON 文件;或
CharacterSnapshotV1JSON 文件。
拒绝本地符号链接。缺失的路径不会被重新解释为 ID。本地原始角色文件和 HTTP 响应均限制为 8 MiB;本地 CharacterSnapshotV1 信封可达 16 MiB,以便最大尺寸的筛选后来源数据及其元数据能够往返传递。JSON 也设有深度、节点、字符串、集合、物品栏、修正值和容器遍历限制。
命令
| 命令 | 当前约定 |
|---|---|
derive <ref> | 选定的派生字段、来源、发现和信任路由 |
derive <ref> --brief | 确定性的、适合聊天的摘要;仍受发现项约束 |
derive <ref> --table-evaluation | 无值、确定性、自我声明的 table.evaluation/1.0 评估封套 |
stance <ref> | 包含立场、规范评估、信任、字段和观测元数据的封套 |
report <ref> | 规范字段/信任评估,以及发现项和已识别的特性名称 |
qa <ref> [--full] | 包含 100 个问题的 覆盖清单,将每个答案与一个封闭字段状态配对;不是有效性评分 |
seatpack <ref> | 隐私最小化的只读角色上下文 |
intake <ref> | 会前上下文,以及问题和权限边界 |
quiz <ref> | 结算和角色卡专属的发现项问题;非可信值永远不会成为答案键 |
snapshot <ref> | 导出带版本且经过完整性检查的观测 |
diff <ref> --baseline snapshot.json | 对受支持的变更进行分类;将省略来源的比较标记为不确定 |
doctor [ref] [--json] | 诊断运行时/网络/来源访问情况,不回显 ref |
selftest | 离线安装和选定派生的冒烟测试 |
--pipe 会从标准输入读取 ref。charactercheck --schema 会输出
机器可读的 CLI 约定。
report 也接受 --table-evaluation。它会投射规范字段状态和来源/策略摘要,绝不包含角色值。可信字段计为已评估;不受支持、未知、无效以及非权威确认状态均会采用失败关闭处理。可变的玩家权限字段不在评估器范围内,会成为需要玩家/会话主持人协调的建议项。封套始终为 self_attested;它不能证明来源身份、新鲜度、桌面角色、遭遇状态或行动合法性。
问题目录
覆盖清单会将其 100 个答案分别与对应的、面向用户的 D&D 2024 角色卡查询问题配对。结构化行包含 number、field、question、state、value 和 content_trust。问题目录是一项组织约定,并不意味着已实现所提供的 JSON Schema 中的值类型或完整的 2024 规则。当某行状态为 unsupported、unknown 或 invalid 时,答案仍不可用;可变的 confirm 行仍由玩家/会话主持人负责确认。
结算 quiz 还会恰好包含每个角色卡专属的 lint 问题一次。当受影响的类别不可信时,这些提示不会获得预期答案。默认输出会出于隐私考虑省略账号身份和角色扮演/人物设定问题。
快照与差异比较
捕获基线并与后续观测进行比较:
python3 -m charactercheck snapshot examples/sample-character.json > baseline.json
python3 -m charactercheck diff examples/sample-character.json --baseline baseline.json
CharacterSnapshotV1 记录适配器、源 ID、源架构指纹(其内容涵盖固定版本的适配器注册表和语义缺口约定)、观测时间、引擎/规则配置、隐私分类、哈希、覆盖情况和快照 ID。规范化的派生元数据也会直接公开适配器注册表指纹。账户标识符和关联图像始终会被移除。
默认不包含角色设定。快照不会静默迁移;遇到不支持的版本时会报错 snapshot_schema。观测时间采用规范的 UTC RFC 3339(...Z)语法;它表示调用方/来源的观测顺序,而非可信时间戳或新鲜度证明。
这些哈希的含义有意区分:
source.normalized_data_hash是默认隐私过滤后机械角色数据的规范哈希。投影将其用作source_revision;它有意排除角色设定和所有已省略字段。source.snapshot_character_hash对快照中存储的、经过精确过滤的character进行哈希,因此,明确包含角色设定的快照可能与默认机械版本不同。meta.snapshot_id覆盖完整的快照封装,但不包括 ID 字段本身;其中包括观测元数据、隐私声明、覆盖情况和存储的角色数据。
这些哈希是确定性的完整性/内容标识符,并非签名、证明或来源真实性凭证。能够编辑快照的一方可以重新计算无密钥哈希。请将基线保存在可信存储中,并由经过身份验证的会话主机将其绑定到主体和审计历史。
快照过滤在顶层和受支持的嵌套对象中均采用封闭策略。source.coverage 包含三个布尔值:
unclassified_top_level_omitted、unclassified_nested_omitted 和 semantic_values_omitted,以及一个按字母顺序排列的规范族名称列表 scoped_mechanical_omissions。它绝不会包含已省略的来源名称或值。经过审查的展示/来源信息省略项不影响信任;经过审查的机械字段省略项会添加 source:scoped-fields-omitted,并仅将列出的类别路由到 unsupported。前两个布尔值的机械影响范围未知;derive 会添加静态发现项 source:unclassified-fields-omitted,并将所有机械类别路由到 unknown。第三个布尔值表示:保留固定的、按字段限定的 _semanticGaps 代码后,移除了不安全的语义文本;项目语义台账会在不复制文本的情况下,将受影响的类别路由到 unsupported。同一覆盖信息也会出现在 meta.source_coverage 中;下游视图不得将任何不完整的观测重新标记为 trusted。
差异比较有意采用部分比较。其 coverage.classified 列表列出可比较的粗粒度来源类别。当两个不同快照中的任一个表明存在未分类字段、省略的经审查限定字段或不安全语义值,或者任一个包含因有意省略文本而无法显示的私有修饰符限制语义时,diff 会输出 $ unsupported_changes 记录,将 comparison_complete 设为 false,并将关系报告为 indeterminate;完全相同的快照仍可判定为 unchanged。机械版本相同但存在明确命名的角色设定/非机械差异时,不同快照会被判定为 mechanically_unchanged,而非 unchanged。发生变化的机械版本如果未匹配任何分类器,也会回退到 $。
Diff 只报告候选变更或不确定性,绝不会应用变更。
如需开展受控的 D&D Beyond UI 研究,请遵循人工差分测试协议 A → B → A中的隐私与回滚门槛。
信任与规范字段语义
trust 块会将每个已知统计数据族路由到一个互斥通道:
trusted:在此版本的文档覆盖范围内,没有检测到任何发现影响该字段。这并不代表对整体安全性或规则有效性的声明。ask_player:已知歧义需要确认;问题由asks承载。unsupported:观察到的内容没有适用于该数据族的处理器。unknown:观察到的内容的目标范围未知,因此派生数据族会采取失败关闭处理。invalid:已知处理器收到格式错误或相互矛盾的源数据。
每个重要值在 fields 中也有一项规范评估,包含 value、state、formula、inputs、sources、rules_profile、findings、confidence、authority、as_of、stale 和 sensitivity。字段状态为封闭集合:trusted、confirm、unsupported、unknown、invalid 和 not_applicable。族状态 ask_player 映射为字段状态 confirm。当某字段对角色不存在时使用 not_applicable,例如非施法者的施法字段。
失败关闭优先级为 invalid > unknown > unsupported > confirm > trusted;投影可以保留或降低状态,但不能提升状态。可变的 HP、已消耗法术位、资源和装备仍由玩家/会话主持方掌控。meta.aggregate_state 是重要字段中最差的状态,而 meta.autonomous_ready 目前始终为 false。同一观察中的值共享相同的默认机制 source_revision 和 as_of。
视图必须保留或降低信任状态;不得移除重要发现。使用方应读取 meta、fields、trust、lint 和 unhandled,而不是将聚合状态视为完整性的证明。请参阅 SUPPORT.md。
报告架构 v2 中表示的 D&D Beyond 机制
- 通过稳定的机制 ID 将构建器选择行与修正值关联起来。即使 D&D Beyond 将修正值的
isGranted标志设为 false,这也能还原所选技能、语言和标准工具。不会保留构建器标签和未选选项目录。 - 经过审核的直接事实现在包括种族步行速度和黑暗视觉、魔法睡眠免疫、封闭的魅惑豁免条件,以及数值型法术组治疗加值。它们会保留处理器/来源溯源信息;只要有其他未纳入的来源机制影响同一数据族,就仍不会标记为可信。
- 护甲和盾牌 AC 需要满足
equipped: true。combat.weapons仍是库存视图;combat.active_attacks是面向动作的视图,并包含 2024 年的徒手打击。武器精通属性会单独报告,不会与masteries_known混为一谈,也绝不会被当作角色已习得该精通的证明。 - 普通的
slots_max来自固定的 SRD 进程表,slots_current则扣除 D&D Beyond 的used计数器。只要来源提供相关信息,来源感知型spell_profiles就会保留可用性和施法模式。 - 即使已登录的角色卡显示了职业/子职业的常备法术,公开的匿名角色负载也可能省略这些法术集合。CharacterCheck 接受经过补充的
alwaysPreparedSpells、alwaysKnownSpells和cantrips集合,但不会根据特性说明臆造缺失的领域/种族/专长法术授予。在获得直接来源证据或固定的、感知版本的解析器之前,该通道仍不受支持。 - 死亡豁免计数器会区分
active与latent;来源中的isStabilized和规则推导出的三次成功稳定状态仍彼此独立。力竭状态读取自 D&D Beyond 状态 ID 4,而不是读取任何碰巧带有等级的状态。
隐私与不可信文本
默认情况下,CLI 和 MCP 的机械化输出会省略 D&D Beyond 用户名、账户标识符、关联图片、外观、笔记、背景故事、组织,以及特质/理想/羁绊/缺点的原文。自定义的机械属性名称仍可能包含在内,应视为用户编写的内容。
受信任的本地 CLI/库允许通过 seatpack、intake 或 snapshot 明确选择包含角色信息(CLI 中使用 --include-persona)。返回的角色信息文本长度有限,标记为 sensitivity: persona 和 content_trust: untrusted_source_text,绝不能将其解读为指令。未经身份验证的 MCP 服务既不提供包含角色信息的选项,也不能访问主机本地文件。此前的 for_dm 参数不代表授权,也不构成角色权限边界。在受信任的本地 seatpack/intake 调用中,--for-dm 会用明确标记替换所有重复的玩家权限实时值——当前 HP/法术位、姿态、资源和物品栏;它不会授予 DM 访问权限。
本仓库中的 CharacterCheck 没有托管服务、账户数据库、遥测、缓存或服务器端持久化。调用方负责控制导出的文件、日志、模型传输和删除操作。请参阅 PRIVACY.md 和 SECURITY.md。
退出状态与错误约定
退出状态因命令而异:
| 命令 | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
derive、report | 无 lint 错误,也无未处理记录 | 有 lint 错误,但无未处理记录 | 存在一条或多条未处理记录,包括未知/无效/不支持的状态 | 结构化输入、检索、验证或内部错误 |
diff | 比较完整,未检测到变更 | 存在任何已命名的变更,或因省略源数据/限制而导致比较结果不确定 | — | 结构化输入、快照、检索或内部错误 |
stance、qa、snapshot、quiz、seatpack、intake | 已生成投影;请检查内嵌字段/检查结果 | — | — | 结构化输入、检索、验证或内部错误 |
selftest | 冒烟测试通过 | 冒烟测试失败 | — | — |
doctor | 所有检查均通过 | — | — | 至少一项诊断检查失败 |
显式使用 --table-evaluation 时,适用共享约定中的退出代码:
0 检查干净,1 检查完整但包含建议/发现,2 检查不完整、不支持、无效或发生内部错误。不指定该标志时,原生命令行为不变。--brief 和 --table-evaluation 不能同时使用。
CLI 会以结构化的 bad_flag 错误和退出状态 2 拒绝所有不支持的命令/标志组合;尤其是 --for-dm 仅适用于 seatpack 和 intake。缺少参数、未知命令/选项,以及未指定 --baseline 的 diff,会使用 argparse 的纯文本用法错误并以状态 2 退出。投影返回退出状态 0,并不表示所有规范字段都可信,也不表示可以安全地自主使用。
对于可识别的运行时/输入错误,返回包含 error、message、action、retryable 和 exit_code 字段的结构化结果,不会序列化引用、路径本地信息、源值或原始异常详情。意外的进程边界错误会返回 internal_error 及关联 ID,日志中只记录该 ID 和异常类。库调用方会收到类型化的 CharacterCheckError 实例。
包级库接口有意保持规范化:derive(ref) 和 stance(ref) 会保留信任/覆盖范围上下文。只有在不会丢失省略覆盖范围信号的情况下,fetch(ref) 才会返回经过隐私过滤的普通角色数据;否则会抛出类型化的 source_coverage 错误。原始算术工作区构建器属于内部接口,不会从 charactercheck 导出。如果源数据报告架构漂移,请勿将普通的已获取字典组合成新的推导结果;请使用 derive、snapshot 或其他基于规范引用的视图。
MCP
在检出目录中运行 python3 -m charactercheck.mcp(或安装该检出版本后运行
charactercheck-mcp),通过 stdio 使用。它提供
derive、stance、qa、diff、snapshot、seatpack、quiz、report、
intake、selftest 和 doctor。它是只读的,接受公开的 D&D Beyond
引用,而不接受服务器本地路径;不包含 persona,并以保守方式处理可变的玩家状态。它不会对人类主体进行身份验证,也不会强制执行桌上角色权限;在开始实际游戏前,可信主机必须提供这些能力。
stdio 服务实现 MCP 协议 2025-11-25,请求行最大为 8 MiB,JSON-RPC 响应最大为
4 MiB。工具域故障会以 isError: true 和结构化错误约定返回。成功的工具数据位于
structuredContent 中;文本块有意使用简短的通用提示,而不重复字符对象,以减少隐私暴露,并降低支持结构化结果的客户端的上下文占用。
开发与 CI
python3 -m unittest discover -s tests -v
CI 的产品测试和已安装 wheel 的运行时冒烟测试仅使用本地合成夹具或模拟的网络边界,并将 HTTP(S) 请求路由到已关闭的本地端口,以确保意外的角色服务请求会失败。GitHub Actions 的 checkout/setup 以及打包前端的安装仍需要常规的 GitHub/PyPI 引导访问,因此整个工作流并非气隙构建。没有任何真实玩家角色会作为永久测试或宣传示例。兼容性说明请参阅 CHANGELOG.md 和 MIGRATING.md。
致谢与商标
D&D Beyond 角色服务负载的架构语义,部分参考了对 MrPrimate/ddb-importer(MIT)的研读。初始适配器注册表经独立观察,并与其回退注册表交叉核对;部分特定映射信息以及快照/回退设计在注明出处的基础上进行了改编。请参阅 NOTICE 和 THIRD_PARTY_NOTICES.md。
D&D Beyond 和 Dungeons & Dragons 是 Wizards of the Coast 的商标。 CharacterCheck 是一个非官方、独立的项目,未获 Wizards of the Coast 背书,也与其无关联。
mcp-name: io.github.chaoz23/charactercheck
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。