Lex — Temporal Luxembourg and EU Law
REMOTE · LAW.SOUFIEN.LU · SCANNED AUG 7
Temporal search and comparison for official Luxembourg and reviewed EU law, with provenance.
Available components
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 →
Endpoint Security57
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 10 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability71
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 1408 tokens (~140/item across 10 items; 10 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 Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · law.soufien.lu
claude mcp add --transport http sfhajji-lex https://law.soufien.lu/mcp
[mcp_servers.sfhajji-lex] url = "https://law.soufien.lu/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sfhajji-lex": {
"type": "remote",
"url": "https://law.soufien.lu/mcp",
"enabled": true
}
}
} openclaw mcp add sfhajji-lex --url https://law.soufien.lu/mcp --transport streamable-http
mcp_servers:
sfhajji-lex:
url: "https://law.soufien.lu/mcp" {
"mcpServers": {
"sfhajji-lex": {
"type": "http",
"url": "https://law.soufien.lu/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
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.
- 7 Aug 26 62
First indexed and scored.
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 7 Aug 2026 · Probed https://law.soufien.lu/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=law.soufien.lu | CN=GeoTrust TLS RSA CA G1,OU=www.digicert.com,O=DigiCert Inc,C=US | 1 Aug 2026 | 1 Feb 2027 | RSA 2048 | SHA256-RSA | 1b4649956763f49bf0bd523ba579a25 |
| SANs: law.soufien.lu | ||||||
| CN=GeoTrust TLS RSA CA G1,OU=www.digicert.com,O=DigiCert Inc,C=US (CA) | CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US | 2 Nov 2017 | 2 Nov 2027 | RSA 2048 | SHA256-RSA | d07782a133fc6f9a57296e131ffd179 |
| CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US (CA) | CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US | 1 Aug 2013 | 15 Jan 2038 | RSA 2048 | SHA256-RSA | 33af1e6a711a9a0bb2864b11d09fae5 |
DNSSEC insecure
Validation of law.soufien.lu. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| lu. | present | 20752 | 8 | Verified |
| soufien.lu. | 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 |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://law.soufien.lu/mcp | Verified | 200 | |
| http (plaintext) | http://law.soufien.lu/mcp | HTTPS enforced | 301 | https://law.soufien.lu/mcp |
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.
article_history ~134
Every distinct text ONE provision (article/annex) has had, as validity intervals — plus its lifecycle events (inserted/removed/renumbered, renumbering detected mechanically by identical text hash). The answer to "what did Article X say over its life / when did it change".
| Name | Type | Req | Description |
|---|---|---|---|
| anchor | string | yes | provision anchor, e.g. art_1er (find it via search or as_of mode=outline) |
| work | string | yes | Work-level lex_id (publisher:workkey), version-level lex_id (version segment ignored), or verbatim publisher identifier. Unknown document -> call search first. |
No output schema declared.
No examples provided.
as_of ~187
The state of one document as it stood on one date. Pure lookup, no ranking. mode=outline lists the provisions (articles/annexes) without text — use it first on long documents; mode=select returns only the named anchors' text; mode=full (default) returns the whole text. Every provision carries its own permalink and hash.
| Name | Type | Req | Description |
|---|---|---|---|
| anchors | string | – | comma-separated provision anchors for mode=select, e.g. art_1er,art_33 |
| date | string | yes | ISO date YYYY-MM-DD |
| language | string | – | optional language code, e.g. fr |
| mode | string | – | full | outline | select (default full) |
| work | string | yes | Work-level lex_id (publisher:workkey), version-level lex_id (version segment ignored), or verbatim publisher identifier. Unknown document -> call search first. |
No output schema declared.
No examples provided.
changes_in_period ~213
ACROSS the corpus: which works gained new versions between two dates, how many each, and when — the aggregate counterpart of diff/timeline (which cover ONE work). Use for "what changed between 2025 and 2026", "which laws changed most during the pandemic", "what moved last month". order=by_churn ranks by number of new versions; by_date (default) lists most recently changed first.
| Name | Type | Req | Description |
|---|---|---|---|
| document_type | string | – | optional type code(s), comma-separated; prefix with ! to exclude, e.g. !RECUEIL,!CODE_RECUEIL for instruments only |
| from_date | string | yes | ISO date, start of window (inclusive) |
| limit | integer | – | default 20 |
| offset | integer | – | skip this many, for paging |
| order | string | – | by_date (default) or by_churn |
| publisher | string | – | optional publisher id |
| to_date | string | yes | ISO date, end of window (inclusive) |
No output schema declared.
No examples provided.
cited_by ~129
Which ARTICLES point at this law. The reverse of the cross-references the publisher writes into its own text ("modifie par la loi du 4 juin 2020"), captured at derive time. Answers "what depends on this law", "who amended it", "is anything still referring to it" — the question legal research is actually made of, and the one a search box cannot answer.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | default 50 |
| work | string | yes | the law being cited, e.g. lu-legilux:loi-2020-06-04-a476 |
No output schema declared.
No examples provided.
coverage ~53
What we hold and what we lack, tier by tier: counts, date ranges, history_begins, known gaps. This tool exists to say what we do NOT have.
| Name | Type | Req | Description |
|---|---|---|---|
| publisher | string | – | optional publisher id |
No output schema declared.
No examples provided.
diff ~102
What changed between two dates for one work: which versions applied, and where both texts are held, retrieve them via as_of to compare.
| Name | Type | Req | Description |
|---|---|---|---|
| from_date | string | yes | ISO date |
| language | string | – | language code |
| to_date | string | yes | ISO date |
| work | string | yes | Work-level lex_id (publisher:workkey), version-level lex_id (version segment ignored), or verbatim publisher identifier. Unknown document -> call search first. |
No output schema declared.
No examples provided.
in_force_on ~102
The set of works in force on a date, computed from validity intervals at query time, deduplicated by work. Carries a mandatory population disclosure.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | yes | ISO date |
| document_type | string | – | optional type code, e.g. CODE |
| limit | integer | – | default 50 |
| offset | integer | – | pagination offset |
| publisher | string | – | optional publisher id, e.g. lu-legilux |
No output schema declared.
No examples provided.
provenance ~55
Proof chain for one lex_id: source URI, retrieval time, record/body hashes, event chain, corpus commit, index build, stamp signature.
| Name | Type | Req | Description |
|---|---|---|---|
| language | string | – | optional |
| lex_id | string | yes | full lex_id |
No output schema declared.
No examples provided.
search ~255
Filtered legal search. keyword is deterministic FTS5/BM25; hybrid adds the pinned local encoder and fixed RRF when verified vectors are mounted. No generative model participates. Returns hits WITHOUT body text; full state via as_of.
| Name | Type | Req | Description |
|---|---|---|---|
| act_form | string | – | optional legal act form |
| as_of | string | – | ISO date required when time_scope=as_of |
| binding_status | string | – | optional binding status |
| document_type | string | – | backward-compatible document type filter |
| domain | string | – | optional reviewed EU domain id |
| fuzzy | string | – | auto or off; visible fallback only |
| hierarchy | string | – | optional normalized legal hierarchy |
| jurisdiction | string | – | optional lu or eu |
| language | string | – | optional language code |
| limit | integer | – | default 10 |
| publisher | string | – | optional publisher id |
| query | string | yes | search terms |
| retrieval_mode | string | – | keyword or hybrid; default keyword until activation |
| source_class | string | – | optional source document class |
| time_scope | string | – | all_versions or as_of |
| works | string | – | optional comma-separated work ids: restrict search to these works |
No output schema declared.
No examples provided.
timeline ~86
Every state a document has been in: validity intervals and version keys, publisher-asserted.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | max versions (default 100) |
| offset | integer | – | pagination offset |
| work | string | yes | Work-level lex_id (publisher:workkey), version-level lex_id (version segment ignored), or verbatim publisher identifier. Unknown document -> call search first. |
No output schema declared.
No examples provided.