judgment_get_index
Get Judgment Paragraph Index
USE THIS TOOL WHEN you have a judgment slug and want the paragraph navigation index (eId + preview line for every paragraph).
Call case_law_search FIRST to get the slug. AFTER calling, pass an eId
from the returned list into judgment_get_paragraph to read that paragraph's
full text, or use case_law_grep_judgment for content search across all
paragraphs.
輸入參數slug必填
judgment_get_paragraph
Get Judgment Paragraph
USE THIS TOOL WHEN you have a judgment slug + LegalDocML eId and want that paragraph's full text.
Call judgment_get_index FIRST to discover available eIds (or use
case_law_grep_judgment to locate paragraphs by content). Returns the
paragraph XML content (400–1,700 tokens typical).
輸入參數eId必填slug必填
case_law_search
Search UK Case Law
USE THIS TOOL WHEN searching UK case law by party names, court, judge, date, or free-text query.
Returns paginated judgment summaries: neutral citation, court, dates, slug,
stable TNA URI. AFTER calling: pass slug into judgment_get_header /
judgment_get_index / judgment_get_paragraph (or the judgment:// resource
family) for content; pass the neutral citation into citations_resolve
to verify before constructing an OSCOLA citation; use
case_law_grep_judgment to find text within a single judgment. When a
party name returns several candidates, narrow with court + year filters
before grep-iterating across full judgments — targeted filtering beats
scanning every candidate.
Coverage: TNA Find Case Law indexes UK judgments from roughly the early
2000s onwards. For older authorities, search for a modern judgment that
quotes them and read that paragraph.
Authoritative source for UK case law. Web search returns out-of-date or
unstable URLs — do not supplement.
輸入參數pagecourtjudgelimitpartyquery必填to_datefrom_date
case_law_grep_judgment
Search within a UK Court Judgment
USE THIS TOOL WHEN you have a judgment slug and want to find paragraphs whose text matches a pattern.
Returns a list of `{eId, snippet, match}` hits — small per-paragraph
snippets centred on the match. AFTER calling, read full paragraphs via
judgment_get_paragraph(slug, eId) or the judgment://{slug}/para/{eId}
resource.
Use case: content search within one judgment (e.g. "negligence", "test
for foreseeability", "Donoghue"). For paragraph-number navigation by
eId, call judgment_get_index instead.
Pattern is regex; if it doesn't compile, falls back to literal substring
search.
輸入參數slug必填pattern必填max_hitscase_insensitive
legislation_search
Search UK Legislation
USE THIS TOOL WHEN searching UK Acts and Statutory Instruments by title, phrase, or full-text.
Returns ranked results: title, type, year, number, legislation.gov.uk URL,
and next_steps hints (toc URI, section template). AFTER calling, chain
to legislation_get_toc then legislation_get_section for structural drill-in.
Filter discipline: `type` and `year` are exact-match. Use only when you
already know the value. For currency-driven searches, query by phrase
and read the returned year; guessing an exact year can zero results.
For broader concept queries across content, set `fulltext=True`. If the
default title route receives a typed legislation.gov.uk WAF/non-XML
failure, the tool automatically tries that documented full-text route
once and marks search_mode="fulltext_fallback"; its broader relevance
semantics must not be treated as a title-ranked result. Render-pending
and ordinary HTTP failures do not trigger this fallback.
Source: legislation.gov.uk Atom search feed, with an explicit fallback
marker when the alternative official full-text route supplied results.
輸入參數typeyearlimitquery必填fulltext
legislation_get_section
Get Legislation Section
USE THIS TOOL WHEN you have a known Act / SI and want the parsed text of a specific section, regulation, or article, with extent and in-force metadata.
Returns the provision's own text and heading, never a neighbouring
Part/Chapter. Also returns extent, in-force/prospective data, and
truncation metadata. Pass the bare number: the tool handles Act
sections and SI regulations/articles. A missing provision raises
not_found rather than returning a plausible neighbouring node.
AFTER calling, check `extent` before relying on the provision and
inspect content_truncated for long text. Call legislation_get_toc to
discover valid numbers, or read_resource with a legislation:// URI
when raw CLML XML is required.
Source: legislation.gov.uk CLML, with an explicitly marked public-HTML
fallback only when CLML is unavailable.
輸入參數type必填year必填number必填section必填max_chars
legislation_get_toc
Get Legislation Table of Contents
USE THIS TOOL WHEN you have a known Act / SI and want the structural table of contents (parts, chapters, individual sections/regulations/articles).
Returns XML ids and titles in document order, including Parts,
chapters, crossheadings, and provisions; a rare untitled provision is
retained as its bare id. Results are paginated with offset/limit.
AFTER calling, pass a provision's bare number (for example `47`, not
`section-47`) to legislation_get_section. Check has_more and
total_items for large statutes. Use read_resource with the
legislation:// toc URI for the full raw listing.
Source: legislation.gov.uk CLML table of contents.
輸入參數type必填year必填limitnumber必填offset
parliament_search_hansard
Search Hansard Debates
USE THIS TOOL WHEN searching Hansard by topic, bill title, or text phrase.
Returns source-backed contributions with citation-grade metadata: member_id,
attributed_to, column_ref, debate_id, debate_ext_id, contribution_ext_id,
and public URL. The independent corpus envelope is optional enrichment:
if it cannot be retrieved after one bounded retry, contributions still
return with enrichment_status="degraded" and an explicit warning; omitted
corpus totals and previews must not be inferred. AFTER calling, drill into
full content via read_resource(uri="hansard://debate/{debate_ext_id}/header")
— or call parliament_get_debate_contributions(debate_ext_id) for the same
content as a structured tool response.
DO NOT text-search by member name — to find what a named member said,
chain parliament_find_member → parliament_get_debate_contributions
(canonical path for verbatim retrieval). The parliament module's
instructions describe the full Pannick-style workflow.
Pagination: limit + offset honour the upstream paginated endpoint. For
breadth across a topic, see parliament_policy_position_summary.
Source: UK Parliament Hansard API. Contributions remain the authoritative
retrieval result; envelope fields are source-backed only when complete.
輸入參數houselimitquery必填offsetto_datefrom_datemember_idtext_modecontribution_type
parliament_policy_position_summary
Hansard Policy Position Summary (deterministic facets)
USE THIS TOOL WHEN you want debate-level corpus signals on a topic — by_house, by_year, by_section breakdowns — without reading every contribution.
Aggregates Hansard debate-level signals on a topic. Pure counts — no LLM,
no editorial labels. Sweeps /search/Debates.json with pagination (up to
max_debates_scanned), then aggregates by_house, by_section, by_year,
by_month, and top_debates from debate metadata. Also captures the
corpus-wide envelope counts (total_contributions, total_written_statements,
total_divisions, etc.) from /search.json for cross-section scope.
AFTER calling, pick a debate from top_debates and pass its debate_ext_id
into parliament_get_debate_contributions to drill into who said what.
Note on member-level facets: Hansard's search API exposes debate
metadata, not per-contribution member identifiers, at the corpus
level. by_party and top_contributors are therefore omitted from this
deterministic summary. To see who spoke in a specific debate, read
hansard://debate/{debate_ext_id}/header for an ordered contribution
index, or call parliament_member_debates for one named member.
This is the authoritative source for UK Hansard corpus-level signals.
輸入參數housetopic必填to_datefrom_datemax_debates_scanned
parliament_find_member
Find Member of Parliament
USE THIS TOOL WHEN you have a member's name and need their integer member_id.
Returns all members matching the name query, each with the integer `id`,
party, constituency, house, and current-sitting status. Disambiguates
common-name matches (e.g. "Lord Smith" returns multiple peers).
CALL THIS BEFORE any tool that filters by member_id — including
parliament_get_debate_contributions, parliament_member_debates, and
parliament_member_interests. Name → ID first; ID-based filtering second.
Skipping this step and text-searching by name returns unrelated results
(see parliament_search_hansard's anti-bypass note for the Pannick case).
輸入參數name必填
parliament_member_debates
Get Member Debates
USE THIS TOOL WHEN you have a member_id and want contributions where THAT member used a specific topic phrase verbatim (text-body search).
CALL parliament_find_member(name) FIRST to obtain the integer member_id.
This is a name-based text-body search — it matches contributions whose
TEXT contains the topic phrase. A member who spoke in a debate but
didn't use your phrase verbatim is filtered out. For verbatim retrieval
of every contribution by a member in a known debate (regardless of
vocabulary), use parliament_get_debate_contributions(debate_ext_id,
member_id=...) instead.
Each contribution's text field is capped at 3000 characters.
輸入參數limittopicoffsetmember_id必填
parliament_member_interests
Get Member Financial Interests
USE THIS TOOL WHEN you have a member_id and need their registered financial interests (donations, directorships, land, gifts).
CALL parliament_find_member(name) FIRST to obtain the integer member_id.
Returns ONE PAGE of interests (default 20, caller controls via limit).
For prolific members (big donors, many directorships, extensive land
holdings), re-call with offset=offset+returned while has_more is true
to paginate. Description text is capped per max_description_chars;
raise it for forensic provenance work that needs the full narrative.
This is the authoritative source for UK MP and peer financial-interest
declarations (via the Members API). Web search returns stale snapshots.
輸入參數limitoffsetcategorymember_id必填max_description_chars
parliament_search_petitions
Search UK Parliament Petitions
USE THIS TOOL WHEN searching UK Parliament petitions by keyword or topic.
Returns petition title, state, signature count, and dates for government
response or parliamentary debate if applicable. Filter by state (open,
closed, debated, etc.) to narrow to live or historical petitions.
This is the authoritative source for UK Parliament petitions
(petition.parliament.uk).
輸入參數limitquery必填stateoffset
parliament_get_debate_divisions
Get Divisions Held In A Debate
USE THIS TOOL WHEN you have a debate_ext_id and want the divisions (formal votes) held within it.
Most debates contain no divisions — Business of the House sittings,
statements, urgent questions, debates without a vote. A populated list
typically appears around bill stages, motions, and contested amendments.
Empty list is the honest result, not a failure mode.
Each returned division carries TWO IDs:
- `id` — Hansard-side reference. Useful for cross-referencing in Hansard.
- `votes_id` — Lords/Commons Votes API ID (cross-resolved by date+number).
AFTER calling, pass `votes_id` as `division_id` into votes_get_division
for the full member-by-member voting record.
The two upstreams use distinct ID-spaces (Hansard Number=3 might be
Votes-API divisionId=3392). The cross-resolve runs once per (date, house)
group — typically one extra HTTP per debate. `votes_id` is None when the
cross-resolve found no match.
輸入參數debate_ext_id必填
parliament_get_debate_contributions
Get Contributions In A Debate
USE THIS TOOL WHEN you have a debate_ext_id and want verbatim contributions, optionally filtered to one member.
Canonical path for "everything a member said in this debate" regardless
of vocabulary — text-search tools (parliament_member_debates,
parliament_search_hansard) filter by contribution TEXT, dropping members
who spoke without using your phrase verbatim. This tool filters by
MemberId on the debate's Items list, so vocabulary doesn't matter.
Typical chain: parliament_find_member(name) → member_id, then
parliament_search_hansard or parliament_lookup_by_column → debate_ext_id,
then this tool. The parliament module's instructions describe the full
composition pattern.
Without member_id, returns every contribution (~100-200 for a long debate).
If the wire returns no contributions for a member you expect to have
spoken, report the empty result honestly — do NOT reconstruct quotes
from training data. Authoritative source for member contributions.
輸入參數member_iddebate_ext_id必填
parliament_lookup_by_column
Resolve A Hansard Column Citation
USE THIS TOOL WHEN you have an OSCOLA-style Hansard citation (column + volume + house) and need the debate.
Example input: 'HL Deb 14 Oct 2025, vol 849, col 200'. AFTER calling, read
the contribution at the cited column via
read_resource(uri="hansard://debate/{debate_ext_id}/header") — or,
equivalently, call parliament_get_debate_contributions(debate_ext_id) for
the full list as a structured tool response.
Each match carries:
- `contribution_count` — real contribution count from the debate's Items
- `source` / `source_code` — citation finality (1=Rolling, 2=Daily,
3=BoundVolume, 4=Historic). Resolution is NOT gated on publication state.
Empty `matches` typically means the volume_number is wrong (opposing
counsel sometimes cites running-volume rather than bound-volume) or the
column is in a Written Statement (use the 'W'-suffixed column as-is).
It does NOT mean the citation is fabricated — surface the failure.
Authoritative source for OSCOLA Hansard column resolution.
輸入參數housecolumn_number必填volume_number必填
bills_search_bills
Search Parliamentary Bills
USE THIS TOOL WHEN searching UK parliamentary bills by keyword, session, house, or legislative stage.
Returns a paginated page of bill summaries (title, originating and current
house, current stage, whether it became an Act). AFTER calling, pass a bill_id into bills_get_bill for
full detail (sponsors, long title, Royal Assent date).
Authoritative source for UK parliamentary bill status.
輸入參數houselimitquery必填stageoffsetsession
bills_get_bill
Get Bill Detail
USE THIS TOOL WHEN you have a bill_id (from bills_search_bills) and want the full detail.
Returns sponsors, current stage, long title, summary, and Royal Assent
date if enacted. Summary text is capped per max_summary_chars — check
summary_truncated in the response.
AFTER calling, use parliament_search_hansard(query=bill_short_title) to
find the bill's parliamentary debates, or bills_search_bills with a
related keyword for adjacent bills.
輸入參數bill_id必填max_summary_chars
votes_search_divisions
Search Parliamentary Divisions
USE THIS TOOL WHEN searching Commons or Lords formal votes by topic, date, or member.
Returns one page of division summaries (title, date, vote counts,
pass/fail) plus `total`, the source's count of all matching divisions.
While `has_more` is true, re-call with offset=offset+returned. AFTER
calling, pass division_id + house into votes_get_division for the full
member-by-member voter lists.
Authoritative source for UK parliamentary vote records.
輸入參數houselimitqueryoffsetto_datefrom_datemember_id
votes_get_division
Get Division Detail
USE THIS TOOL WHEN you have a division_id + house and want the full member-by-member voting record.
Voter lists are truncated to 100 per side to fit response limits; total
voter counts are always accurate regardless of truncation. Chain from
votes_search_divisions or parliament_get_debate_divisions (which
cross-resolves Hansard division refs into votes-API division_ids).
輸入參數housedivision_id必填
committees_search_committees
Search Parliamentary Committees
USE THIS TOOL WHEN searching or listing UK parliamentary select committees by name, house, or active status.
Returns committee summaries (name, house, active status, ID). AFTER
calling, pass committee_id into committees_get_committee for current
membership, or into committees_search_evidence to retrieve oral and
written evidence submitted to that committee.
輸入參數houselimitqueryactive_only
committees_get_committee
Get Committee Detail
USE THIS TOOL WHEN you have a committee_id and want the metadata + current membership.
Fetches committee detail and member list in parallel. AFTER calling,
pass committee_id into committees_search_evidence to see what evidence
has been submitted to this committee on what topics.
輸入參數committee_id必填
committees_search_businesses
Search Committee Inquiries and Business
USE THIS TOOL WHEN identifying a committee inquiry or business before evidence retrieval.
Returns official business IDs, titles, types, dates, and report/status metadata.
AFTER calling, use an exact ID as committee_business_id in committees_search_evidence.
Source: UK Parliament Committees API CommitteeBusiness endpoint.
輸入參數limitquerycommittee_id必填
committees_search_evidence
Search Committee Evidence
USE THIS TOOL WHEN retrieving committee evidence, especially for an identified inquiry.
Returns ONE PAGE of evidence (default 20) plus `total`, the source's
count of matching items. evidence_type='both' lists all oral evidence
first, then all written evidence, each newest-published first as the
source orders it. Free-text titles are capped per max_title_chars;
witness lists are capped at 10 per item. An organisation witness (no
named individual) is rendered as '<Organisation> (<Role>)'; a null
entry means the source gave no name for that witness at all. For
committees with many submissions, re-call with offset=offset+returned
while has_more is true. For inquiry-specific research, first call
committees_search_businesses and pass its exact committee_business_id;
this filters at the authoritative source before pagination.
Source: UK Parliament Committees API oral and written evidence endpoints.
輸入參數limitoffsetcommittee_id必填published_toevidence_typepublished_frommax_title_charscommittee_business_id
citations_parse
Parse OSCOLA Citations
USE THIS TOOL WHEN you have free text (a memo, an email, a clause) and want every OSCOLA-style citation it contains extracted and classified.
Identifies: neutral citations ([2024] UKSC 12), law reports ([2024] 1 WLR
100), legislation sections (s.47 Companies Act 2006), SIs (SI 2018/1234),
retained EU law (Regulation (EU) 2016/679).
Parsing is pure regex by default. Ambiguous citations (e.g. bare [2024]
EWHC without division) can OPTIONALLY be disambiguated by setting
disambiguate=True, which asks the CONNECTED CLIENT's own model (not this
server) to resolve the division via MCP sampling — off by default.
Citations resolve to TNA / legislation.gov.uk URLs when possible.
AFTER calling, pass each citation through citations_resolve to verify it
points at a real document before quoting or formatting it — the parser
recognises the SHAPE of a citation but does not confirm the document
exists.
輸入參數text必填disambiguate
citations_resolve
Resolve Single OSCOLA Citation
USE THIS TOOL BEFORE constructing an OSCOLA citation string from known fields, OR to confirm a citation points at a real document.
Parses + resolves a single citation (neutral citation, SI, legislation
section, retained EU law) and returns parsed fields plus resolved_url.
For neutral citations, performs a live TNA HEAD check — non-200 sets
confidence to 0.0 (document absent). Do NOT format or quote a
confidence-0.0 citation.
If the TNA HEAD check fails (timeout, connection error), raises ToolError
with {"error_category": "transient", "is_retryable": true}. One retry is
attempted — retry this call or proceed without TNA verification.
Formatting a citation from "known" fields without prior resolution is the
most common fabrication route. If this tool raises or returns no
resolved_url, do NOT manufacture a citation — surface the failure and ask
the user for the source URL.
Authoritative source for UK legal-citation resolution.
輸入參數citation必填
citations_network
Get Case Citation Network
USE THIS TOOL WHEN you have a judgment slug and want to map every citation it makes — cases cited, legislation referenced, SIs, retained EU law.
Fetches the judgment XML from TNA and parses all OSCOLA citations
within. Returns citations grouped by type, deduplicated and sorted.
AFTER calling, pass any individual citation through citations_resolve
to confirm it resolves and to retrieve its canonical URL.
Useful for authority-network analysis (what did this judgment rely on?)
and for surfacing the legislative landscape a case sits inside.
輸入參數case_uri必填
citations_format_oscola
Format OSCOLA Citation String
USE THIS TOOL AFTER citations_resolve to produce the correctly formatted OSCOLA citation string.
Pass the parsed fields returned by citations_resolve directly into this
tool. Formats per OSCOLA 4th edition rules for each citation type.
Refuses (status: upstream_validation) if confidence is 0.0 — TNA confirmed
the document does not exist — or if a neutral citation has no resolved_url
(ambiguous court code, e.g. bare EWHC without a division). In either case,
do NOT manufacture a citation; surface the failure and ask the user for
the source URL or better identifying details.
DO NOT construct the input fields yourself. The structured input must come
from citations_resolve — guessing fields is the primary citation-fabrication
route and this tool is the guard against it.
Authoritative OSCOLA formatting for UK legal citations (no network call).
輸入參數rawpageyearcourtnumbervolumesectionsi_yearsi_numberconfidence必填resolved_urlcitation_type必填另有 2 個
hmrc_get_vat_rate
Get VAT Rate for Commodity
USE THIS TOOL WHEN you know the UK VAT category name for a good or service and want its VAT treatment.
Exact named-category lookup, not a free-text VAT classifier or tax
advice. The query must equal a category name, ignoring only case,
spacing, hyphens and apostrophe style. Extra qualifying words are never
discarded: 'pet food' is its own category, and 'baby food' is not
'food'.
A match returns `rate` (standard, reduced, zero or exempt),
`rate_percentage` (None for exempt), conditions in `notes`, the GOV.UK
`source_url`, and that entry's `verified_on` date.
An unresolved query returns no rate: `matched_category`, `rate`,
`rate_percentage` and `verified_on` are all null, never a default.
Its `notes` list the category names. AFTER an unresolved result, retry
with a listed name or call hmrc_search_guidance.
輸入參數commodity_code必填
hmrc_check_mtd_status
Check MTD VAT Status
USE THIS TOOL WHEN you have a 9-digit VAT Registration Number and need that business's Making Tax Digital VAT mandate status.
Returns whether the business is mandated for MTD, effective date, and
trading name.
Connects to the HMRC sandbox by default. Set HMRC_API_BASE to
'https://api.service.hmrc.gov.uk' for production. Requires
HMRC_CLIENT_ID + HMRC_CLIENT_SECRET environment variables (OAuth 2.0).
Raises if credentials are not configured — do not infer status.
輸入參數vrn必填
hmrc_search_guidance
Search HMRC Guidance
USE THIS TOOL WHEN discovering HMRC GOV.UK guidance on a topic.
Returns official-search titles, URLs, descriptions, and published dates;
descriptions do not establish the contents of a cited page. AFTER calling,
use hmrc_get_manual_page when a result is an HMRC internal-manual URL.
Source: GOV.UK's HMRC-filtered content search API.
輸入參數limitquery必填
hmrc_get_manual_page
Read HMRC Internal Manual Page
USE THIS TOOL WHEN a cited HMRC internal-manual page must be read.
Returns bounded source-order text, canonical URL, manual reference,
source metadata, and retrieval provenance. AFTER calling, cite or analyse
only returned text; if retrieval fails, do not infer the page's contents.
Source: the allowlisted official GOV.UK HMRC internal-manual page.
輸入參數max_charsreferencemanual_urlmanual_family
List all available prompts.
Returns JSON with prompt metadata including name, description,
and optional arguments.
無需輸入參數。
Get a prompt by name with optional arguments.
Returns the rendered prompt as JSON with a messages array.
Arguments should be provided as a dict mapping argument names
to values.
輸入參數name必填arguments
List all available resources and resource templates.
Returns JSON with resource metadata. Static resources have a
'uri' field, while templates have a 'uri_template' field with
placeholders like {name}.
無需輸入參數。
Read a registered server resource URI, not an ordinary web URL.
USE WHEN you have a judgment://, legislation://, hansard://, or
server:// URI returned by this server. Do not use for https:// URLs;
use the source-specific tool instead (for a canonical GOV.UK HMRC
internal-manual URL, call hmrc_get_manual_page).
Returns the resource content as a string. Binary content is
base64-encoded.
AFTER calling, use the returned primary-source content and URI in
citations; if the URI is rejected, follow the named source-specific
tool rather than treating the URL as retrieved evidence.
Source: registered UK Legal MCP resource providers.
輸入參數uri必填