# Lex-Ray > Lex-Ray publishes EU legislation, UK legislation, UK-retained EU law and the > FCA Handbook as structured data: one stable URL per provision, parsed text > rather than scraped HTML, and an explicit statement of the currency limits on > the day you ask. 260 instruments carry full parsed text > (70 EU, 38 UK/UK-retained, > 152 FCA Handbook); several hundred more carry bibliographic > metadata only. If you are a language model or an agent acting for one, read this file rather than scraping the reader. Everything below is a stable contract. ## How a provision is addressed An act is addressed by its CELEX id or by a short acronym: `https://lexray.simmons-simmons.com/32024R1689` and `https://lexray.simmons-simmons.com/aia` are the same act. A provision is the act path plus a token — `a6` (article 6), `r2` (recital 2), `anx3` (annex III), `s5` / `sch2` for UK sections and schedules: - `https://lexray.simmons-simmons.com/aia/a6` — human-readable page - `https://lexray.simmons-simmons.com/aia/a6.md` — the same provision as Markdown - `https://lexray.simmons-simmons.com/aia/a6.json` — the same provision as structured JSON - `https://lexray.simmons-simmons.com/aia.json` — the whole act: metadata, structure, currency Anchors inside a payload (`#art_6.1`) are the anchors the rendered document uses, derived from each node's full structural path. Quote them; they resolve. ## How to judge currency Entry into force and application are different legal events and are routinely years apart. Every machine rendering carries a `currency` block with: - `as_at` — the date the status was derived for, in the act's own legal frame (Brussels for EU acts, London for UK and FCA material) - `status` — one of `not_yet_in_force`, `in_force_not_yet_applying`, `partially_applying`, `applying`, `expired`, `unknown` - `subject` — **whom that status is about**: `you` (the act applies directly) or `member_states` (a directive, whose status describes the transposition timetable). Read with `reach` (`direct` / `via_national_law`) and the boolean `applies_directly`. - `status_basis` — `commencement_record` when the act's commencement has been resolved from the official notice (deterministic), or `dates_only` when it was derived from the date columns alone. A `dates_only` status is indicative: for an act that commences in stages, the recorded entry-into-force date can be one of the later application dates. FCA Handbook rows with no temporal model use `not_modelled` and publish `applies_directly: null`; do not infer commencement, history, future changes or direct applicability for them. - `version` — the corpus version the text was materialised from, if the act has more than one **`status` never means anything on its own — always read it with `subject`.** A directive binds Member States to legislate; the obligations reach a regulated party through national implementing law, which Lex-Ray does not hold. So `{"status": "applying", "subject": "member_states"}` says the transposition timetable is applying, **not** that anyone owes a duty under the directive directly. Only `subject: "you"` (equivalently `applies_directly: true`) licenses that reading. Two limits of the `dates_only` basis worth knowing before you quote one: - On a directive it answers from the recorded application date without consulting the transposition timetable, and reports `unknown` where there is no such date. `unknown` there is a real answer — a directive's status comes from its timetable or it is not known — and is never a reason to fall back on `date_entry_into_force`. - `partially_applying` is only ever reached from a resolved `commencement_record`; the date columns alone cannot see a tranche. `partially_applying` is not a rounding error: the AI Act applies in four tranches. Do not answer "is this in force" from `date_entry_into_force` alone, and do not reuse a `currency` block across days — re-fetch it. ## What requires an account The metadata, the structure and the currency of every act are open. Article and recital text, definitions, and resolved cross-references are the paid corpus. An open payload says so in its `entitlement` block and carries no article bodies — it is never silently truncated text. The public `.json` and `.md` routes return `200` with this projected payload. Full-content REST endpoints guarded by `lexray_content_required` instead return `401 authentication_required` or `402 lexray_access_required`, with `preview_available: true`. MCP refusals are in-band tool errors with stable `code` values such as `authentication_required`, `entitlement_required`, and `forbidden`. ## The structured route in - [MCP server](https://lexray.simmons-simmons.com/mcp) — JSON-RPC over HTTP, OAuth-protected. It is dual-era and stateless: clients that open with the `initialize` handshake (MCP 2025-03-26 to 2025-11-25) are served without a session, and a request carrying MCP 2026-07-28 metadata — `params._meta` (`io.modelcontextprotocol/protocolVersion`, `io.modelcontextprotocol/clientCapabilities`) plus the `MCP-Protocol-Version` and `Mcp-Method` headers (and `Mcp-Name` for `tools/call` and `prompts/get`) — is served by that revision. Discovery is `initialize` (or `server/discover` for a 2026-07-28 client) followed by `tools/list`; both are available before a client has selected a credential. A 2026-07-28 client may declare the MCP Tasks extension (`io.modelcontextprotocol/tasks`) in its per-request `clientCapabilities`: `request_coverage` (ask for an instrument the corpus lacks) then answers with a task to poll with `tasks/get` (`Mcp-Name` set to the `taskId`) until it completes with the retrieval step. Every other client gets the request record at once and reads it with `get_coverage_request`. Public/free Lex-Ray tools are: `about_this_server`, `search_instruments`, `get_legislation`, `get_toc`, `get_article`, `list_fca_sourcebooks`, `list_articles`, `get_licence`. `get_article` resolves definitions and cross-references server-side, so a definition reads as its meaning rather than as a pointer to another instrument. Lex-Ray-only full-content tools include: `get_legislation_text`, `request_coverage`, `get_coverage_request`, `submit_feedback`. - [OAuth metadata](https://lexray.simmons-simmons.com/.well-known/oauth-protected-resource) - [Sitemap](https://lexray.simmons-simmons.com/sitemap.xml) — every indexed act and provision - [Pricing](https://lexray.simmons-simmons.com/pricing) — what an account costs and what it opens - [About](https://lexray.simmons-simmons.com/about) — what Lex-Ray is, who sells it, and the key facts ## Reporting a problem If a call exposes a gap — a bug, a missing feature, or a task you could not complete — report it where you hit it. Reports reach the same triage queue as feedback from the web app; one that makes sense becomes a GitHub issue, where a fix is drafted and a human approves it. - [Feedback schema](https://lexray.simmons-simmons.com/api/feedback/schema) — the report's fields, where to send it and the rate limit; no credential needed to read it. - `POST https://lexray.simmons-simmons.com/api/feedback/report` with any API key (`Authorization: Bearer lr_…`) and a JSON body: `category` (`bug`, `feature`, `task_failure`, `other`), `summary`, `details`, and optionally `attempted`, `expected`, `actual`, `surface`, `error_code`, `request_id`, `identifier`, `client`. Unknown fields are refused with `invalid_arguments` naming the accepted ones. - MCP: the `submit_feedback` tool takes the same fields (Lex-Ray credential). ## Optional - [AI transparency notice](https://lexray.simmons-simmons.com/ai-transparency) — where this site uses AI, and how AI-assisted content is marked - [Privacy notice](https://lexray.simmons-simmons.com/privacy)