Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

FIDE Laws of Chess

REMOTE · MCP.ARXO.IO · 2 COMPONENTS

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

60 Trust /100

Last scanned (6 hours ago)

Scores higher than 45% of remote servers

Reachable. Last reached 18 Oct 2026.

Category Education and Research

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security57
Transport & Reachability100
Schema Quality & AI Usability46
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 6683 tokens (~417/item across 16 items; 16 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management13
  • Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage92
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 71% of tool parameters carry a description.Partial
  • Structured output schemas are declared (50% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 17 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 17 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Oct 26 +1
    • Stability: unverified → 0.03 ▲ functional
  • 14 Oct 26 58

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 18 Oct 2026 · Probed https://mcp.arxo.io/mcp/fide-chess

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=mcp.arxo.io CN=YR1,O=Let's Encrypt,C=US 31 Aug 2026 29 Nov 2026 RSA 4096 SHA256-RSA 5e0f2774d85239e907973db54e105bd5ae5
SANs: mcp.arxo.io
CN=YR1,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA a20253f15f2691c05dc1ce13b9bcca4e
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.arxo.io. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
io. present 57355 8 Verified
arxo.io. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.arxo.io/mcp/fide-chess Verified 200
http (plaintext) http://mcp.arxo.io/mcp/fide-chess HTTPS enforced 302 https://mcp.arxo.io/mcp/fide-chess
MCP tools · 16 exposed · ~5,304 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
law_answer_capabilities ~50

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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

law_ask ~1,472

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. BEFORE THE FIRST call obtain the predicate names through law_search (a question in your own words → addresses) or law_packages (the signatures of a known instrument) — an invented name will be rejected. If the tool returned an error or "not established", THAT IS THE ANSWER: pass it to the user and do not substitute general knowledge about the law of some other country. But "I found no suitable instrument" is NOT an answer until law_search has been asked: silence of the catalogue is a property of searching by title, not a conclusion about the corpus. kind='truth' — whether a fact is established; kind='collect' — enumerate the records; kind='deadline' — compute a time limit on the official calendar; kind='positions' — which DUTIES arose from the facts and what their statuses are; kind='why_not' — the why_not report on the same goal, whatever the status of the answer. The answer carries the rules applied, the warnings and the provenance with hashes; truth/collect also carry a signature block for presentation. The server does not guess: where a norm is not formalised, the answer is "not established" or an error.

NameTypeReqDescription
afterstring–deadline: the date of the event
afterTimestring–deadline: the time of filing
argsarray–the arguments of the predicate in the order of its signature; with kind='collect' exactly one of them is the selection variable ?name (for example ['urn:x:water', 'urn:x:mix', '?value']), the rest ar…
calc––kind='calc': a tree {op,left,right}, op ∈ add|sub|mul|div|le|lt|ge|gt|eq|ne (the synonyms divide/multiply/plus/minus and the signs are accepted); the leaves are 5 | '3932 KZT' | '2 mrp' | {lookup: 'm…
contextobject–Explicit temporal context: timezone is an IANA name; decisionTime and knowledgeTime are complete Instants with UTC or an offset, preserved unchanged. legalTime is also required with context; a profil…
cutoffstring–deadline: the hour operations close
daysinteger–deadline: the length of the period
deadlinePolicystring|object–the policy for counting time limits expressed in days: the StableId of a deadline policy declared in the world of the question (e.g. 'urn:kz:corpus:clir:administrative-code#AC_WORKING_DAY_TERMS'), or…
evidencearray–case documents, section 74, evidence_item nodes. One document is referenced from provenance.evidence of many facts. payload.confidence is data for the EvidencePolicy; the engine does not evaluate the…
evidencePolicystring–StableId of an evidence_policy node, section 78.2. Without it, previous calls keep their behaviour. The confidence threshold is a rule of that policy, not an argument of the call
factsarray–facts of the case: [{predicate, args, provenance, negated?, package?, judgment?}]. provenance is required and must be an object; {} is allowed. Its fields are optional: {origin?, evidence?: StableId,…
focusedboolean–kind='truth': ask as focused_truth — the same answer as the full truth, but the proof and the warnings cover only the cone of the question; the answer carries evaluationKind and the slice hashes (foc…
kind––the kind of question (truth by default)
legalTimestring–the date of the law (YYYY-MM-DD)
packagestring–narrow the question to one package of law
predicatestring–what is being asked, e.g. 'duty_amount'
proofboolean–return the evaluation field with the proof graph in the answer — a ready-made input for law_explain (kind truth|collect; by default a summary without the graph)
responseMode––full (default) — the complete answer. compact is accepted for compatibility: this server builds no short reply and returns the same complete answer in both modes; there is no fullAnswer reference and…
selectedInterpretationsarray–named readings; for an exactly_one group choose exactly one StableId out of law_packages/law_rules
supportEdgesarray–support edges, section 75, support_edge nodes: from is the document id, to is the fact literal, relation is supports or refutes. Admission is decided by the package EvidencePolicy, not by the host
unit–––
versionstring–the exact package version pinned by the client (open('name@version')); if it differs from the profile composition the host refuses instead of answering with another version

No output schema declared.

No examples provided.

law_capture_answer ~55

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.

NameTypeReqDescription
producerstringyes–
requestobjectyes–

No output schema declared.

No examples provided.

law_case_ask ~433

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 question is JSON per query.schema.json (query), an evaluate string (evaluate + queryId), a saved queryId without query, or card + args. A refusal to prepare is an error with an LDC-* code, never an empty answer.

NameTypeReqDescription
argsobject–the card parameters: name → string expression of the language
cardstring–the id of a card of an installed catalog
casestring–the name of the case declaration from [[cases]]; optional when there is only one case
evaluatestring–the string `evaluate <expression>;`; requires queryId
packagestringyesthe path to the case package (the directory holding law.toml) from the root of the repository
proofboolean–true — the full document with the proof graph (the same as responseMode full); false — the projection. The same form as in law_ask.
queryobject–the question as JSON per query.schema.json; queryId is a URN in the namespace of the package, or a short name given in queryId
queryIdstring–without query/evaluate — the choice of a saved queries/*.json by short name or full URN; with evaluate — the id of the question being run
responseMode––compact — a projection for an agent: results, positions, conflicts, the manifest, issues above info and every hash are kept, proofGraph is replaced by its hash, roots and node count (field proof), th…

No output schema declared.

No examples provided.

law_explain ~224

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 anything changed it refuses explicitly. Alternatively pass the evaluation from law_ask(proof=true). answerResource=fullAnswer.uri explains a stored compact snapshot without recomputing and without the client loading pages; by default only the proofRef chain. nodeId selects one node and all of its premises (up to 24 KB, otherwise an explicit refusal). proofHash refers to the whole graph; scope marks the part selected.

NameTypeReqDescription
answerResourcestring–the fullAnswer.uri of a stored answer taken with proof=true
codeHashstring––
evaluationobject–the evaluation document from law_ask
nodeIdstring––
questionobject–the original law_ask arguments
resultHashstring––
NameTypeReqDescription
proofHashstring––
stepsarrayyes–

No examples provided.

law_inspect ~210

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, values, names resolved against the snapshot; diff — what changed between two documents on the context, result and justification levels; locate — the declaration by StableId. Nothing is evaluated or recomputed: the source is evaluation from law_ask(proof=true) or an answerResource. Missing data is a limit state (limits), never a negation.

NameTypeReqDescription
againstobject––
answerResourcestring––
bundleobject––
contextobject––
evaluationobject––
indexobject––
operation–yes–
pageobject––
selectobject––
snapshotobject––
sourcesobject––

Structured output declared, but exposes no named fields.

No examples provided.

law_packages ~690

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, and the title of an instrument rarely matches the words of a question ("Newton's laws of motion" contains no word "physics"). A question in your own words goes to law_search first, which returns addresses; the catalogue is for the exact signature of what you found. With no arguments — the overview: one line per instrument (key, title, legal order, counters of rules, facts, signatures, norms, constants); a whole instrument — package="kz-gpk"; a search over the signatures, labels and constants of every instrument — query="substring". All three modes are PAGED: limit and offset, with the remainder named in the text (`showing a–b of N; k more`) and in structuredContent (total, truncated, next — a ready-made continuation call). The unit of a page is named by pageUnit: the overview and query page over INSTRUMENTS (20 and 20 by default), package=… pages over the SIGNATURES of one instrument (20 by default, 300 at most) — large codes carry thousands. package=… together with catalog=… pages a separate list of the instrument: "questions" — the CATALOGUE OF QUESTIONS: which enquiries are provided for (a question in words, a form, a predicate or norms) and what the instrument does NOT answer, with the type of reason; a card is a template of an enquiry, not an answer, and not every instrument has one; "norms" — the NORMS of the instrument, "constants" — the CONSTANTS (names of declarations). "task-guides" — TASK GUIDES: the order of applying a canon to a document — what to gather, which cards to ask and how to read the answers; a guide answers nothing. catalog="task-guides" is allowed without package too — every guide of the profile; guide=… — the detail of one guide; the walkthrough — MCP Prompts under t…

NameTypeReqDescription
catalogstring–together with package: page the catalogue of questions, the norms, the constants or the task guides of the instrument instead of its signatures; "task-guides" also without package: every task guide o…
guidestring–together with catalog="task-guides": the detail of one guide — a name <package>/<id> (as in prompts/list) or an id together with package
limitinteger–how many per page: instruments (overview 20, query 20), signatures of an instrument (20, at most 300) or elements of a catalog list (questions 20, norms 20, constants 100, task guides 20)
offsetinteger–from which element of the page (0); the unit is the pageUnit of the answer
packagestring–the full signatures of this instrument
querystring–a substring filter over signatures, labels and constants (case-insensitive)

No output schema declared.

No examples provided.

law_passport ~93

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.

NameTypeReqDescription
contentHashstringyes–
limitinteger––
namestringyes–
offsetinteger––
sectionsarray––
versionstringyes–

No output schema declared.

No examples provided.

law_prepare_answer ~187

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 executing afresh. A divergence in any input, in the law, in a resource, in the server code, in the engine library or in the result rejects the document as a whole.

NameTypeReqDescription
assistantobject––
calculationsarray––
documentVersion––Version of the immutable document; 0.1 is kept for transitional compatibility, 0.2 includes all native results and the common reader.
language–––
producerRunsarray–Runs of registered producers with control/0.2; mutually exclusive with calculations.
questionstringyes–
NameTypeReqDescription
calculationCountintegeryes–
contentHashstringyes–
documentHashstringyes–
expiresAtintegeryes–
preparationIdstringyes–
previewUrlstringyes–
resultCountinteger––

No examples provided.

law_publish_answer ~45

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

NameTypeReqDescription
preparationIdstringyes–
NameTypeReqDescription
publicIdstringyes–
publicUrlstringyes–
publishedAtintegeryes–
revokeSecretstringyes–
revokedbooleanyes–

No examples provided.

law_query ~789

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 lists: `law query --schema`. Functions (9): anchor/1, labels/1..2, short/1, contains/2, overlaps/2, starts_with/2, ends_with/2, position/2, derivation/2. exists/not exists over a bound variable; equality and membership only, no arithmetic and no ordering comparisons. Scope: corpus by package.name (for example kz.corpus.labour_code, not a file name) or a glob; without corpus, the whole profile slice; a scope outside the profile is empty (CORPUS_EMPTY). Examples: `from r in rules where r.head_predicate == "urn:…#eligible" select r.id as producer, r.strength as strength, anchor(r.id) as anchors` — who produces; `from l in literals where l.predicate == "urn:…#eligible" select l.node as reader, l.context as context` — who reads; `query eligible over "pkg" { for x: Person; where applicant(x); select eligible(x); }` — inference by the core. This is orchestration over the CLIR and the core; no new legal semantics is implemented here. Instead of text, a question from the catalog with arguments: anchors-of, imports-of, links-of, producers, readers, type-step (see `law query --list` for the set) (predicate/node/type parameters are URNs, pkg is a package.name or a glob). A structural answer is a queryPage: resultHash of the full queryResult, snapshot (hash of the scope package list), rowCount, rows by rowLimit (20, at most 5000) and rowOffset, next with the snapshot for continuation; full: true returns the full queryResult when the scope is one package. Every row carries provenance (CLIR nodes); an empty answer carries the explain funnel (emptyAt names the clause); errors carry LDC-Qxxxx codes with hints; a source product too wide is refused before execution (QUERY_TOO_BROAD), a continuation on another…

NameTypeReqDescription
argumentsobject–the question parameters: an object of name → string (predicate, node, type — URNs; pkg — a package.name or a glob)
caseobject–the case for query-over; it replaces the case clause
corpusstring–the snapshot scope: a package.name (for example kz.corpus.labour_code) or a glob over package.name; without corpus, the whole profile slice
engine––there is one engine — the core; the reference implementation is called by its own command
fullboolean–return the full queryResult instead of a page; only when the scope is one package
limitinteger–an explicit cap on eval() materialisations (it does NOT bound the rows — see rowLimit)
querystring–inline LawQL
questionstring–the name of a question from the named-query catalog (producers, readers, anchors-of, imports-of, links-of, type-step) or of a lint; instead of query
rowLimitinteger–how many rows in structuredContent (20; the budget may lower it)
rowOffsetinteger–from which row (0); continuation comes from next together with snapshot; structural queries only
snapshotstring–the snapshot hash from next.snapshot of the previous page: a continuation on another snapshot is refused (SNAPSHOT_CHANGED)

No output schema declared.

No examples provided.

law_revoke_answer ~57

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.

NameTypeReqDescription
publicIdstringyes–
revokeSecretstringyes–
NameTypeReqDescription
publicIdstringyes–
revoked–yes–

No examples provided.

law_rules ~266

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 contents; the full text comes from predicate=…. The listing by package is paged: limit (20 by default, 500 at most) and offset; the remainder is named in the text (`showing a–b of N; k more`) and in structuredContent (total, truncated, next — a ready-made continuation call).

NameTypeReqDescription
contractboolean–Return a machine input contract over the same import/dependency world as law_ask. No case evaluation.
inputLimitinteger–Machine contract: leaf declarations per page (50).
inputOffsetinteger–Machine contract: offset of leaf declarations.
lang––the language the rules are put into
limitinteger–package: how many rules per page (20; the budget may lower it)
offsetinteger–package: from which rule (0)
packagestring–every rule of the instrument
predicatestring–the rules that derive this predicate
NameTypeReqDescription
compactboolean––
factsTemplatearray––
inputContractobject––
limitinteger––
nextobject––
offsetinteger––
packagestringyes–
ruleCountinteger––
rulesarrayyes–
totalinteger––
truncatedboolean––
verbalizationGapsinteger––

No examples provided.

law_screen ~250

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 engine, with a proof graph, on the same snapshot of the data. The binding is passed as a pinnable object; sourceSchemaContentHash is the actual hash of the source schema and is compared loudly with the pin. Case facts that carry provenance (origin, document, quote, extractor) are supplied to law_ask, not here. The confidence figure is read by the package EvidencePolicy, not by this tool and not by the engine.

NameTypeReqDescription
bindingobjectyesa law.screen.binding/0.1 artefact
goalstringyesa StableId or a unique short name of the goal
legalTimestring–the date of the law YYYY-MM-DD; without it every window of every rule is taken into account
packagestringyesthe package key from law_packages
sourceSchemaContentHashstringyesthe actual sha256 of the source schema
NameTypeReqDescription
conditionobjectyes–
disclaimerstringyes–
manifestobjectyes–
schemaVersion–yes–

No examples provided.

law_search ~187

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_sources) and establishes neither a fact nor a norm. The ranking is a deterministic lexical embedder, and similarity of text is not applicability of a norm. If you know the exact name, go straight to law_packages/law_ask; an empty result does NOT mean the norm does not exist.

NameTypeReqDescription
kindsarray–narrow the kinds of candidate
limitinteger–how many candidates (8, at most 25)
packagestring–search inside this instrument only
querystringyesa question or a notion in your own words
NameTypeReqDescription
candidatesarrayyes–
corpusFingerprintstringyes–
fallbackbooleanyes–
indexUnitsinteger––
jurisdictionstringyes–
modelobject––
querystringyes–

No examples provided.

law_sources ~296

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 characters, fragments[].next is the continuation with a contentHash. The hash refers to the WHOLE source, not to the excerpt or the part. textOffset/textLimit require fragment; a continuation requires contentHash. Lists are paged with offset/limit; the answer budget may shrink a page.

NameTypeReqDescription
contentHashstring–the hash of the full text taken from the previous part
fragmentstring–the StableId of a fragment
languagestring–the language of the variant, as given on the source card
limitinteger–how many texts: summary 5, full 1 (the budget may lower it)
offsetinteger–from which fragment (0)
packagestring–the package key — every fragment of that instrument
statusstring–the status of the variant, as given on the source card
textLimitinteger–the maximum number of Unicode characters in a part of the text (also ≤8000 bytes of UTF-8)
textOffsetinteger––
view–––

No output schema declared.

No examples provided.

Install

How do I install the FIDE Laws of Chess MCP server?

FIDE Laws of Chess is a hosted endpoint at https://mcp.arxo.io/mcp/fide-chess, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.arxo.io

# add to Claude Code
claude mcp add --transport http io-arxo-fide-chess 'https://mcp.arxo.io/mcp/fide-chess'
Common questions

What is the FIDE Laws of Chess MCP server?

FIDE Laws of Chess is an MCP server listed in the public MCP registry as io.arxo/fide-chess. FIDE Laws of Chess (2023) as an executable model: arbiter cases, answers with rules and judgments. This page covers its hosted endpoint (https://mcp.arxo.io/mcp/fide-chess).

Is the FIDE Laws of Chess MCP server safe to use?

FIDE Laws of Chess scores 60 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the FIDE Laws of Chess MCP server expose?

FIDE Laws of Chess exposes 16 tools: law_search, law_passport, law_answer_capabilities, law_capture_answer, law_prepare_answer, and 11 more. Their descriptions and schemas cost roughly 5,304 tokens of context every time the server is loaded.

Does the FIDE Laws of Chess MCP server require authentication?

No. We connected to FIDE Laws of Chess without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the FIDE Laws of Chess MCP server still maintained?

FIDE Laws of Chess is still listed as active in the MCP registry. We last reached this channel on 18 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.