mcpField
F
FIDE Laws of Chess

FIDE Laws of Chess

远程服务
github.com游戏娱乐02 周前更新

关于 FIDE Laws of Chess

FIDE Laws of Chess 是基于 2023 年 FIDE Laws 的固定版本可执行模型,附有虚构裁判案例和可检查的答案。它面向教学与研究,覆盖部分裁决问题,并将未解决的判断留给裁判。

主要功能

  1. 01基于 2023 年 FIDE Laws 的模型
  2. 02保留十个虚构案例
  3. 03明确事实与所需裁判判断
  4. 04可检查的规则证据
  5. 05Node.js SDK 与原生 MCP 封装

适用场景

  1. 01研究非法着法与旗落案例
  2. 02比较快棋和闪电棋处罚
  3. 03识别需要裁判判断的问题

MCP 相关

独立的 `@arxo/[email protected]` 封装通过 stdio 将同一固定版本模型作为 MCP 服务运行,要求 Node.js 20+。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.arxo.io/mcp/fide-chess
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
npm@arxo/mcp-fide-chess0.1.1

工具

16
参数类型必填说明
kindsarray否缩小候选项类型范围
limitinteger否候选项数量(8,最多 25 个)
querystring是用自己的话提出问题或描述概念
packagestring否仅在此文书内搜索

详细介绍

Arxo 上的 FIDE 国际象棋规则

Arxo 上的 FIDE 国际象棋规则

Smithery

通过固定版本的模型、明确的事实和可检查的答案,探究国际象棋裁判的判定。 十个保留的虚构案例涵盖非法着法、超时、快棋/闪电战例外、记录和裁判判断。

Node.js 20+ · ESM · canon package 0.1.0 · model 0.1.1 · 自 2023 年 1 月 1 日起生效的 FIDE 版本

在 Node.js 中开始 · 案例 · 证据 · 形式化深度 · 提交案例 · 源代码仓库

这是一个独立的开源教学与研究演示。对于实际的国际象棋裁决,请参考正版 FIDE 国际象棋规则,并咨询有管辖权的裁判。源文本和模型范围均已固定;该软件包不声称具备通用的国际象棋引擎能力或完整的形式化能力。

在 Node.js 中开始

要求:Node.js 20+。示例使用 ES 模块;请保留 .mjs 扩展名。本步骤已于 2026 年 10 月 14 日在搭载 Node.js 20.20.2 的 macOS arm64 上验证。此方式无需全局 CLI、Git 克隆或 MCP 客户端。

创建一个新目录,在其中打开终端,然后运行:

npm init -y
npm install --ignore-scripts @arxo/[email protected] @arxo/[email protected]

将其保存为 example.mjs,然后运行 node example.mjs:

import { open } from '@arxo/law';
import { loadModel } from '@arxo/canon-fide-chess/chess';
import { game, white, getCaseInput } from '@arxo/canon-fide-chess/examples/arbiter';

const model = await loadModel();
const chess = await open(model.spec, {
  offline: true,
  local: { packages: { [model.spec]: model.package } },
});

const input = getCaseInput('SecondIllegal');
const loss = await chess.truth('game_lost_by', [game, white], input);
const draw = await chess.truth('game_drawn', [game], input);
console.log(loss.evaluationStatus, loss.truthStatus); // COMPUTED, TRUE_ONLY
console.log(draw.evaluationStatus, draw.truthStatus); // COMPUTED, NEITHER

两行输出依次为负方获胜,然后是和棋:

COMPUTED TRUE_ONLY
COMPUTED NEITHER

COMPUTED 表示查询已求值。TRUE_ONLY 表示该查询有正向支持,且没有负向支持。NEITHER 表示两种极性都没有支持;这并不能证明命题为假。

现在只将 getCaseInput('SecondIllegal') 替换为 getCaseInput('SecondIllegalNoMate'),然后再次运行 node example.mjs:

REQUIRES_JUDGMENT NEITHER
COMPUTED TRUE_ONLY

第二行现在可以确定为和棋。此案例提供了这样一条事实:对手无法通过任何合法着法序列将对方将死。单独的负方获胜查询仍要求裁判作出评估,因为其他可能导致负方获胜的依据尚未解决。请同时查看两个状态字段;REQUIRES_JUDGMENT 表示该评估并非由模型自行判定。

若要试用其他保留案例,请从案例表中选择名称。若要提交自己的案例,请新建 issue,附上案例事实、适用日期、查询、软件包/运行时版本、输出,以及你认为应产生不同答案的 FIDE 条款或模型规则。请使用虚构或匿名化案例。

SDK 通过 @arxo/[email protected] 执行规则。仅安装并不会在 SDK 的自动 canon 解析器中注册此发行包:请保留上文明确的 local.packages 传递步骤。加载器不实现任何国际象棋判定或公式。

模型、要回答的案例及证明

用作 MCP 服务

独立的原生 MCP 封装会通过 stdio 运行同一固定版本的模型:

npx -y @arxo/[email protected]

Node.js 20+,Linux x64 或 macOS arm64。客户端配置、HTTP 端点、输入项和限制 · OCI 配方 · npm 配方 · 已接受的交付版本。此 MCP 交付与上文的 Node.js 使用方式相互独立。

选择案例

getCaseInput(name)局面已检验的问题和结果
TouchIntentUnknown可移动的己方棋子;未裁定是否故意触子must_move_first_touched_piece:REQUIRES_JUDGMENT / NEITHER
FirstIllegal完成了一步非法着法判负:REQUIRES_JUDGMENT / NEITHER;和棋:COMPUTED / NEITHER
SecondIllegal按模型指定的闭包,出现两步非法着法判负:COMPUTED / TRUE_ONLY
SecondIllegalNoMate出现两步非法着法;已确定无法将死和棋:COMPUTED / TRUE_ONLY
FlagFall观察到超时,时限尚未结束,仍有可能将死判负:COMPUTED / TRUE_ONLY
FlagFallNoMate同样的超时情况;已确定无法将死和棋:COMPUTED / TRUE_ONLY
RapidFirstIllegal快棋 15+10;第一步非法着法对手获得 60 秒;关于 120 秒的查询结果为 NEITHER
BlitzFirstIllegalCompetitive按竞技规则 B.2 进行的闪电棋 3+2对手获得 120 秒;关于 60 秒的查询结果为 NEITHER
ShortOfTimeRecording标准棋,无加秒,剩余 240 秒must_record_moves:COMPUTED / FALSE_ONLY
DeviceWarning发现电子设备;裁判已给予警告判负和不同处罚查询:COMPUTED / TRUE_ONLY

所有 18 项原始案例/查询预期均予以保留并进行检验。测试样例导出提供 caseNames、game、white、black、king、CaseName 和 getCaseInput(name)。每次调用都会返回独立副本;名称未知时会抛出 RangeError。

判负及明确规定的无法将死例外

事实与裁判判断

getCaseInput 保留 CLI 的规范断言、常量、上下文和选项。加载器不会补充缺失的事实或裁定。模型明确声明的闭包属于其规则;这并不意味着可以普遍假设缺失的事实为假。

对于触子规则,请使用声明的两个参数——棋手和棋子:

import { open } from '@arxo/law';
import { loadModel } from '@arxo/canon-fide-chess/chess';
import { white, king, getCaseInput } from '@arxo/canon-fide-chess/examples/arbiter';

const model = await loadModel();
const chess = await open(model.spec, {
  offline: true, local: { packages: { [model.spec]: model.package } },
});
const answer = await chess.truth(
  'must_move_first_touched_piece', [white, king], getCaseInput('TouchIntentUnknown'),
);
const document = JSON.parse(new TextDecoder().decode(answer.document));
console.log(answer.evaluationStatus, answer.truthStatus); // REQUIRES_JUDGMENT, NEITHER
console.log(document.results[0].judgmentRequests);

肯定且明确标记为 adjudicated 的故意触子断言,足以确立本模型中的义务;该路径会单独检验。原始的缺失裁判判断测试样例保持不变。

缺失的经验事实、否定事实和相互矛盾的支持分别保留 NEITHER、FALSE_ONLY 和 BOTH。对于已检验的经验事实冲突,SDK 0.4.3 返回 COMPUTED / BOTH:查询已计算,且正反两方均有支持。请读取两个字段;不要将它们合并为布尔值。精确的 Decimal 输入(例如记录的分数)以字符串表示('0.75')。

SecondIllegal 的完整规范输入
{
  "legalTime": "2023-06-01",
  "assertions": [
    {
      "contentHash": "sha256:696ba690ec316ad1654c94c94886b3d6e9764573460a0ed89f76280496c904fa",
      "evidence": [],
      "id": "urn:law:examples:chess:arbiter#player",
      "kind": "assertion",
      "literal": {
        "args": [
          {
            "id": "urn:example:chess:game",
            "kind": "entity_ref"
          },
          {
            "id": "urn:example:chess:white",
            "kind": "entity_ref"
          }
        ],
        "kind": "literal",
        "polarity": "positive",
        "predicate": "urn:fide:laws:clir:chess#player_of"
      },
      "origin": "case_input",
      "package": "urn:law:examples:chess:arbiter"
    },
    {
      "contentHash": "sha256:9f7706ed8482cd04f869afdd849b90eea3c2e42ca246bf932c8a20f77a1fcc15",
      "evidence": [],
      "id": "urn:law:examples:chess:arbiter#complete-mate-facts",
      "kind": "assertion",
      "literal": {
        "args": [
          {
            "id": "urn:example:chess:white",
            "kind": "entity_ref"
          }
        ],
        "kind": "literal",
        "polarity": "positive",
        "predicate": "urn:fide:laws:clir:chess#checked_player"
      },
      "origin": "case_input",
      "package": "urn:law:examples:chess:arbiter"
    },
    {
      "contentHash": "sha256:cd688c83624c70688f10ead443e5c46c32ad7d3310696caf6dad9b80be7c1cb0",
      "evidence": [],
      "id": "urn:law:examples:chess:arbiter#illegal-count",
      "kind": "assertion",
      "literal": {
        "args": [
          {
            "id": "urn:example:chess:white",
            "kind": "entity_ref"
          },
          {
            "kind": "value",
            "type": {
              "name": "urn:law:std#Integer"
            },
            "value": 2
          }
        ],
        "kind": "literal",
        "polarity": "positive",
        "predicate": "urn:fide:laws:clir:chess#completed_illegal_move_count"
      },
      "origin": "case_input",
      "package": "urn:law:examples:chess:arbiter"
    }
  ],
  "context": {
    "decisionTime": "2026-09-08T12:00:00Z",
    "knowledgeTime": "2026-09-08T12:00:00Z",
    "legalTime": "2023-06-01",
    "timezone": "UTC"
  },
  "options": {}
}

此输入由已发布的 CLI 0.2.3 从保留的 .lawcase 中捕获;测试样例生成器不会复现国际象棋语义。测试样例字节 · 捕获来源。

## 检查证据

将 answer.document 保留为 Arxo 返回的规范字节。在运行时版本、固定模型和依赖项相同的情况下,对完全相同的完整输入(查询、事实、判断、时间上下文和选项)重复执行,会得到相同的字节及其哈希值。answer.proof.nodes 标识所应用的规则及其前提。

对于这些查询,当前 SDK 的 answer.sources 和证明节点的来源锚点数组为空。下方的来源链接是将已执行的生产者 ID 与经哈希校验的模型中的锚点进行的显式静态关联;它们不是评估器额外生成的引文。固定版本的出版物为 FIDE 手册,《2023 年国际象棋规则》。

此完整示例会保存关于认输的答案,并打印其模型锚点链接:

import { writeFile } from 'node:fs/promises';
import { open } from '@arxo/law';
import { loadModel } from '@arxo/canon-fide-chess/chess';
import { game, white, getCaseInput } from '@arxo/canon-fide-chess/examples/arbiter';

const model = await loadModel();
const chess = await open(model.spec, {
  offline: true, local: { packages: { [model.spec]: model.package } },
});
const answer = await chess.truth('game_lost_by', [game, white], getCaseInput('SecondIllegal'));
await writeFile('answer.json', answer.document);
const nodes = new Map(model.package.ir.nodes.map(node => [node.id, node]));
const sourceLinks = answer.proof.nodes.filter(node => node.rule).map(node => ({
  rule: node.rule,
  anchors: (nodes.get(node.rule)?.anchors ?? []).map(id => ({
    id, locator: nodes.get(id)?.locator,
  })),
}));
console.log(answer.hashes, sourceLinks); // includes SecondIllegalMoveLoses → article/7
模型所知:原生触摸走子生产者树

原生触摸走子生产者树

由 chess.unfold('must_move_first_touched_piece', { depth: 2, lang: 'en', quote: 0 }) 生成,未选择任何案例。完整原生树和文本。递归深度与形式化深度相互独立。

模型和加载器 API

导入项精确模型规格导出项
@arxo/canon-fide-chess[email protected]models、loadModel(exactSpec)、错误类
@arxo/canon-fide-chess/chess[email protected]spec、loadModel()
@arxo/canon-fide-chess/examples/arbiter保留的案例输入标识符、案例名称和独立输入副本

loadModel 返回 { spec, package, descriptor, pin, questionCatalog }。根导入只读取目录和元数据。加载时会在解析所选世界及其目录之前验证原始字节,然后返回独立的模型对象。描述符保持独立:package.meta.contentHash 是关联世界的哈希值;packageContentHash 是原始包的哈希值。此版本中没有模型导入项。

未知或未指定版本的规格会触发 ModelNotFoundError.code === 'MODEL_NOT_FOUND'。模型资源缺失、损坏或不一致时,会触发 ModelIntegrityError.code === 'MODEL_INTEGRITY'。不会回退到网络。TypeScript 声明涵盖精确规格、关系名称、限定关系名称和测试样例名称;参数数量和取值类型由 SDK 在运行时验证。

形式化深度

模型固定版本测量单位 / 分母可执行其他测量级别状态
[email protected]2023 年 1 月 1 日生效en_article / 12 条规则12已解释:0、已锚定:0、仅来源:0、无:0部分

现有的 boundaries.depth 测量针对本包节点,不包括导入项,并以原始条款划分声明为准。全部 12 条规则均有推导规则;这一粗略测量并不能证明每个条款都已完整形式化。按此条款测量口径,仍有 28 个锚点引用未能解析,且已记录在报告中。

前言和附录 A–D 不计入此分母。A 和 B 中有可执行规则,快速棋和闪电战案例会用到这些规则;本演示不会执行 C 中的记号说明和 D 中的组织材料。指南不属于保留的规则出版物。这些部分未纳入条款报告的测量。

按单位划分的报告记录了分母、版本、来源 / 包 / 世界哈希值、原始测量实现哈希值和适配器哈希值。可执行、来源是否存在、完整性、声明的场景和成功运行情况是彼此独立的主张。该模型公开了制度谓词和一套流程;它未声明任何道义规范或完整的义务生命周期立场。

范围与验证

此软件包评估给定的对局。大多数棋盘/历史条件仍是明确的协议事实。它对已观察局面的有限处理范围涵盖完整且已知的四子王/后/车局面,以及一种特定的无法将死情况;其他局面不在此范围内。它不验证局面的一般可达性,不解析 PGN,也不构建锦标赛配对。等级分、棋手称号、决胜规则和瑞士制配对模型属于独立软件包,不包含在此软件包中。

Model 0.1.1 修正了四项准备缺陷,同时保留原有预期结果:测试夹具中的作用域过程谓词,以及在半分舍入前使用精确的 Decimal 中间值。所选软件包通过了 103 个源场景,其中包括 6 个新增数值边界测试,覆盖构建、重放和重建流程。已安装的演示验证了全部 18 个保留问题、加载器故障/隔离、明确与缺失的判断、缺失/负值/冲突事实、分数边界、规范化的重复性、README 示例以及严格 TypeScript 检查。

这些检查针对的是此分发版本。完整语料库:not_checked;releaseVerified: false。交付检查不能证明内容准确或完整。

来源固定与复现

来源固定记录将原始模型/描述符/世界/目录字节及用例输入固定到不可变的公开来源修订版本。来源说明另行记录语料库来源及已处理的修正。英文源文本是固定的可见文本提取内容(PINNED_UNOFFICIAL_COPY),并非声称来自官方 PDF 出版物。FIDE 署名和出版者条款保留在 NOTICE 中;Apache-2.0 适用于 Arxo 编写的代码,不取代这些条款。

要使用仓库中的固定输入重新构建封装:

git clone https://github.com/arxohq/arxo-fide-chess.git
cd arxo-fide-chess/npm
npm ci --ignore-scripts
npm run build -- --canon ..
npm test
npm run test:types
npm run candidate -- --out /absolute/new-candidate-directory

候选脚本会准备一个本地 tarball 和现有的 arxo.npm-candidate/1 清单;它不会发布。交付通过 arxo-io/law 中既有的 CI 完成。发布与验证流程 · 交付记录。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。