Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

FIDE Laws of Chess

by arxohqversion 0.1.1i★ –iComputer or cloud
Registry nameio.arxo/fide-chess

Install

Overview

Description from the maker (original English)

FIDE Laws of Chess (2023) as an executable model: arbiter cases, answers with rules and judgments

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

Install

Pick the AI app you use, then copy the settings.

Before you install

You need

  • Runs in the cloudNothing to install; it connects over the internet
  • npmNode.js installed (for the npx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Works in Claude on the web, desktop and mobile:

  1. Open Settings → Connectors
  2. Press Add custom connector
  3. Paste the address below and press Add
  4. If it asks you to sign in, sign in with the maker
SettingsConnectors1+ Add2https://…3
https://mcp.arxo.io/mcp/fide-chess

Or run it on your computer

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "fide-chess": {
      "command": "npx",
      "args": [
        "-y",
        "@arxo/mcp-fide-chess"
      ],
      "env": {
        "FIDE_CHESS_MCP_CALL_TIMEOUT": "your-value"
      }
    }
  }
}

Run this in your terminal

claude mcp add --transport http fide-chess https://mcp.arxo.io/mcp/fide-chess

Or run it on your computer

claude mcp add fide-chess --env FIDE_CHESS_MCP_CALL_TIMEOUT=your-value -- npx -y @arxo/mcp-fide-chess

Fill in the empty values before running it.

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "fide-chess": {
      "url": "https://mcp.arxo.io/mcp/fide-chess"
    }
  }
}

Or run it on your computer

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "fide-chess": {
      "command": "npx",
      "args": [
        "-y",
        "@arxo/mcp-fide-chess"
      ],
      "env": {
        "FIDE_CHESS_MCP_CALL_TIMEOUT": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "fide-chess": {
      "type": "http",
      "url": "https://mcp.arxo.io/mcp/fide-chess"
    }
  }
}

Or run it on your computer

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "fide-chess": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@arxo/mcp-fide-chess"
      ],
      "env": {
        "FIDE_CHESS_MCP_CALL_TIMEOUT": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

ChatGPT connects only to servers on the internet:

  1. Open ChatGPT on the web → Settings → Connectors (Apps)
  2. Press Create or Add (some plans need Developer mode under Advanced first)
  3. Paste the address below, give it a name and save
  4. If it asks you to sign in, sign in with the maker
SettingsConnectors1+ Create2https://…3
https://mcp.arxo.io/mcp/fide-chess

Menu names can differ slightly by plan and over time.

Your choice stays on this device in a cookie; no account needed.

Values you fill in

  • FIDE_CHESS_MCP_CALL_TIMEOUT env
    Per-call timeout in seconds for the local host (optional)

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Tool names and descriptions exactly as the server reported them on Nov 8, 2026. The maker wrote them, not us; we show them as plain text.

  • law_search

    A semantic SEARCH over formalised law: a question or a notion in your own words → candidates with addresses — predicates with signatures, rules, article fragments. This is the layer of DISCOVERY, not of the answer: the result says WHAT to ask next (law_ask by signature, law_rules

  • law_passport

    Passport of an exact release: purpose, interface, boundaries, checks and performance. The reports section holds the history of measurements, failures included. Entries are paged by JSON Pointer; next continues the answer.

  • law_answer_capabilities

    A machine-readable matrix of the Lens producers that are actually installed, of replay/projection checks, profiles, limits and the contract tests that confirm them. declared_only means a schema with no executable witness.

  • law_capture_answer

    Run a registered producer and obtain producerControl/0.2 for a later verifiable preparation of a Lens. The producer is chosen only from the shipped registry.

  • law_prepare_answer

    At the explicit request of the user, repeat between 1 and 12 earlier law_ask or law_process_run calls, compare their replayControl strictly, and prepare a non-public frozen document for 24 hours. The client never supplies the machine answer: the server obtains it only by executin

  • law_publish_answer

    Publish a prepared document. Repeating it with the same preparationId idempotently returns the same URL and the same separate revocation secret.

  • law_revoke_answer

    Revoke a published document using its separate secret. The public id alone grants no control; revocation closes the HTML page, the API and the download.

  • law_packages

    The catalogue of formalised law: instruments, predicates with signatures, the boundaries of coverage. This is where the NAMES of predicates come from — they must never be guessed. But do NOT start from the catalogue when looking for the right instrument: the overview is large, an

  • law_ask

    Put a question to formalised law. When the answer is "not established" it carries whyNot — the engine's why_not report: the candidate rules and the state of every conjunct (satisfied / not satisfied / undetermined); the missing facts are visible there and need not be guessed. BEF

  • law_screen

    Build a necessary condition — a superset — for the preliminary selection of rows from an external source. This is NOT a legal answer and NOT SQL: the result is a typed tree and a manifest of the extensions up to TRUE. Every row that passes must then be computed in full by the eng

  • law_rules

    The rules of formalised law put into words: exactly how a predicate is derived (premises, source articles). Call this BEFORE supplying facts to law_ask — the rules say which facts are needed instead of leaving them to be guessed. For large instruments package=… returns a table of

  • law_explain

    Unfold the proof of a law_ask answer into a chain "rule ← premises → conclusion". The compact input: question (the original law_ask arguments, truth/collect), resultHash and codeHash from the provenance of the answer. The server repeats the computation and compares the hashes; if

  • law_inspect

    Evaluation inspector over a SAVED evaluation document: summary — the origin card, resultHash and snapshot verification, listings of results, positions and issues; slice — the closure of proof nodes for a query, rule, position or node with addresses, both sides of BOTH, defeats, v

  • law_case_ask

    The ask operation: run a registered case of a case package over its pinned dependencies and return the answer: by default a projection of the evaluation document without the proof graph, on responseMode full or proof: true the canonical document with a proof and a manifest. The q

  • law_sources

    Sources: by default short excerpts (view=summary), 5 texts per page, with the address of the full text in fragments[].full. Either package or fragment is required (a StableId from law_search/law_rules). view=full returns exact parts of the text: textRange sets a range of Unicode

  • law_query

    A deterministic LawQL query over the CLIR of a formalization: a question about the model of the act itself, not about a case. Relations (14): anchors, edges, fields, imports, interpretations, labels, links, literals, nodes, norms, positions, rules, variables, windows. Full field

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified against the domain arxo.io (the registry checks domain ownership)

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • ✓ Pass

    Endpoint responds

    Responded in 539 ms (HTTP 200)

  • – Not applicable

    Sign-in with OAuth

    No sign-in needed

  • ✓ Pass

    No hidden instructions in tool descriptions

    Read 16 tool descriptions and found no hidden instructions to the AI

Compared with others in Law & government datai

  • More stars than 0% of the other 1746 servers in this category
  • Published to the registry more recently than 56% of the other 1746 servers in this category
  • Basic checks equal to or better than 100% of the other 1746 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is FIDE Laws of Chess safe?

It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

The registry does not list a required key, though some servers ask you to sign in on first use.

Does it run on my computer or in the cloud?

Either way works: install it on your computer or connect to the cloud version.

Is it still maintained?

The GitHub repo last changed –, and the latest version (0.1.1) reached the registry 24 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.

What can I use instead?

In the same category: SOS.city public record, USVI Public Records, Korean Government Documents (HWPX)

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

SOS.city public record

Public records for every city: permits, alerts, wildfires, laws and funding, linked to the source.

by Proof-LayerEarlyUpdated today

Runs in the cloud

USVI Public Records

Search and read U.S. Virgin Islands public records: laws, court records, audits, hearings, reports.

by usvipublicrecords.comEarlyUpdated today

Runs in the cloud✓ usvipublicrecords.com

Korean Government Documents (HWPX)

Turns a draft into a Korean government report or press release as HWPX in each ministry's format

by UpstageAIVery new↓ 103/wkUpdated today

Runs on your computer

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

FIDE Laws of Chess on Arxo

Explore a chess arbiter's decision through a pinned model, explicit facts and an inspectable answer. Ten retained fictional cases cover illegal moves, flag fall, rapid/blitz exceptions, recording and arbiter judgment.

Node.js 20+ · ESM · canon package 0.1.0 · model 0.1.1 · FIDE edition effective 1 January 2023

Start in Node.js · Cases · Evidence · Depth · Submit a case · Source repository

This is an independent open-source teaching and research demonstration. For an actual chess ruling, use the authentic FIDE Laws and the competent arbiter. Source text and model scope are pinned; the package does not claim general chess-engine capability or complete formalization.

Start in Node.js

Requirements: Node.js 20+. The example uses ES modules; keep the .mjs extension. This recipe was checked on macOS arm64 with Node.js 20.20.2 on 14 October 2026. No global CLI, Git clone or MCP client is needed for this route.

Create a fresh directory, open a terminal there, then run:

npm init -y

npm install --ignore-scripts @arxo/canon-fide-chess@0.1.0 @arxo/law@0.4.3

Save this as example.mjs, then run 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

The two output lines are loss, then draw:

COMPUTED TRUE_ONLY

COMPUTED NEITHER

COMPUTED means the query was evaluated. TRUE_ONLY means it has positive support and no negative support. NEITHER means neither polarity is supported; it does not establish that the proposition is false.

Now replace only getCaseInput('SecondIllegal') with getCaseInput('SecondIllegalNoMate') and run node example.mjs again:

REQUIRES_JUDGMENT NEITHER

COMPUTED TRUE_ONLY

The second line now establishes a draw. This case supplies the fact that the opponent cannot checkmate by any legal series. The separate loss query still requests an arbiter's assessment because other reachable loss grounds remain unresolved. Read both status fields; REQUIRES_JUDGMENT identifies an assessment the model does not decide on its own.

To try another retained episode, choose a name from the case table. To propose your own episode, open an issue with the case facts, legal date, query, package/runtime versions, output and the FIDE clause or model rule you think should give a different answer. Use a fictional or anonymized case.

The SDK executes the rules through @arxo/law-engine@0.5.3. Installation alone does not register this distribution in the SDK's automatic canon resolver: keep the explicit local.packages handoff above. The loader implements no chess decisions or formulas.

Use as an MCP server

The separate native MCP wrapper runs the same pinned model over stdio:

npx -y @arxo/mcp-fide-chess@0.1.0

Node.js 20+, Linux x64 or macOS arm64. Client configuration, HTTP endpoint, inputs and limitations · OCI recipe · npm recipe · Accepted delivery. This MCP delivery is separate from the Node.js route above.

Choose a case

getCaseInput(name)EpisodeChecked question and result
TouchIntentUnknownA movable own piece; intentional touch not adjudicatedmust_move_first_touched_piece: REQUIRES_JUDGMENT / NEITHER
FirstIllegalOne completed illegal moveLoss: REQUIRES_JUDGMENT / NEITHER; draw: COMPUTED / NEITHER
SecondIllegalTwo illegal moves under the model's specified closureLoss: COMPUTED / TRUE_ONLY
SecondIllegalNoMateTwo illegal moves; inability to checkmate establishedDraw: COMPUTED / TRUE_ONLY
FlagFallFlag observed, time control not completed, mate possibleLoss: COMPUTED / TRUE_ONLY
FlagFallNoMateThe same flag; inability to checkmate establishedDraw: COMPUTED / TRUE_ONLY
RapidFirstIllegalRapid 15+10; first illegal moveOpponent receives 60 seconds; 120-second query is NEITHER
BlitzFirstIllegalCompetitiveBlitz 3+2 under competitive rules B.2Opponent receives 120 seconds; 60-second query is NEITHER
ShortOfTimeRecordingStandard chess, no increment, 240 seconds leftmust_record_moves: COMPUTED / FALSE_ONLY
DeviceWarningElectronic device evident; arbiter gave a warningLoss and differing-penalty queries: COMPUTED / TRUE_ONLY

All 18 original case/query expectations are retained and checked. The fixture export provides caseNames, game, white, black, king, CaseName and getCaseInput(name). Each call returns an independent copy; an unknown name throws RangeError.

Facts and arbiter judgments

getCaseInput preserves the CLI's canonical assertions, constants, context and options. The loader supplies neither absent facts nor adjudications. The model's explicitly declared closures are part of its rules; they are not a general assumption that a missing fact is false.

For touch-move, use the two declared arguments — player and piece:

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);

A positive, explicitly adjudicated intentional-touch assertion establishes this model's obligation; that path is checked separately. The original missing-judgment fixture stays unchanged.

Missing empirical facts, negative facts and contradictory support retain NEITHER, FALSE_ONLY and BOTH. For the checked empirical conflict, SDK 0.4.3 returns COMPUTED / BOTH: the query was computed and both polarities are supported. Read both fields; do not collapse them to a Boolean. Exact Decimal inputs, such as recorded points, are strings ('0.75').

Complete canonical input for 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": {} }

This input was captured by released CLI 0.2.3 from the retained .lawcase; the fixture generator does not reproduce chess semantics. Fixture bytes · Capture provenance.

Inspect the evidence

Preserve answer.document as the canonical bytes returned by Arxo. With the same runtime version, pinned model and dependencies, repeated executions of identical complete inputs (query, facts, judgments, temporal context and options) reproduce those bytes and their hashes. answer.proof.nodes identifies the applied rules and their premises.

The current SDK's answer.sources and proof-node source-anchor arrays are empty for these queries. Source links below are an explicit static join of executed producer IDs with anchors in the hash-checked model; they are not additional citations emitted by the evaluator. The pinned publication is the FIDE Handbook, Laws 2023.

This complete example saves the loss answer and prints its model anchor links:

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

What the model knows: native touch-move producer tree

![Native touch-move producer tre

Only the beginning is shown; read the rest in the repo

Ask PopNx