UK Legal Research
UK legal research — case law, legislation, Hansard, bills, votes, committees, HMRC, citations
Connector by paulieb89 · GitHub account verified by the MCP Registry
Install
Works with Claude Code, VS Code, Codex, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/paulieb89-uk-legal-mcp
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Remote endpoint
https://uk-legal-mcp.fly.dev/mcpRemote (HTTP)
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: legal-compliance, deep-research
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 37 read · 0 write · 0 deleteRead-only
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Tools by what they do 37
From the running server's own tool list (tools/list) on Oct 25, 2026.
Read 37 · Look things up without changing anything.
bills_get_billbills_search_billscase_law_grep_judgmentcase_law_searchcitations_format_oscolacitations_networkcitations_parsecitations_resolvecommittees_get_committeecommittees_search_businessescommittees_search_committeescommittees_search_evidence
Show 25 more tools
get_prompthmrc_check_mtd_statushmrc_get_manual_pagehmrc_get_vat_ratehmrc_search_guidancejudgment_get_headerjudgment_get_indexjudgment_get_paragraphlegislation_get_sectionlegislation_get_toclegislation_searchlist_promptslist_resourcesparliament_find_memberparliament_get_debate_contributionsparliament_get_debate_divisionsparliament_lookup_by_columnparliament_member_debatesparliament_member_interestsparliament_policy_position_summaryparliament_search_hansardparliament_search_petitionsread_resourcevotes_get_divisionvotes_search_divisions
Network hosts it talks to 25
a9.com· found in codeapi.service.hmrc.gov.uk· found in codebills-api.parliament.uk· found in codebills.parliament.uk· found in codebouch.dev· found in codecaselaw.nationalarchives.gov.uk· found in codecommittees-api.parliament.uk· found in codecommittees.parliament.uk· found in codecommonsvotes-api.parliament.uk· found in codedocs.oasis-open.org· found in codegithub.com· found in codeglama.ai· found in codegofastmcp.com· found in codegov.uk· found in codehansard-api.parliament.uk· found in codehansard.parliament.uk· found in codeinterests-api.parliament.uk· found in codelegislation.gov.uk· found in codelordsvotes-api.parliament.uk· found in codemembers-api.parliament.uk· found in codeparliament.uk· found in codepetition.parliament.uk· found in codequestions-statements-api.parliament.uk· found in codetest-api.service.hmrc.gov.uk· found in codeuk-legal-mcp.fly.dev· found in remote endpoint, install command, code
Files it touches
/home/bch/dev/mcpfleet/uk-legal-fleet/references/home/bch/dev/mcpfleet/uk-legal-mcp/probes/probe_c_results.json
Tools (37)
As the server listed them on Oct 25, 2026. Descriptions are the server’s own words; hidden characters are shown as [U+…].
bills_get_billGet Bill Detailread-onlyUSE 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.
bills_search_billsSearch Parliamentary Billsread-onlyUSE 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.
case_law_grep_judgmentSearch within a UK Court Judgmentread-onlyUSE 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.
case_law_searchSearch UK Case Lawread-onlyUSE 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-iteratin…
citations_format_oscolaFormat OSCOLA Citation Stringread-onlyUSE 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 t…
citations_networkGet Case Citation Networkread-onlyUSE 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.
citations_parseParse OSCOLA Citationsread-onlyUSE 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 — of…
citations_resolveResolve Single OSCOLA Citationread-onlyUSE 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…
committees_get_committeeGet Committee Detailread-onlyUSE 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.
committees_search_businessesSearch Committee Inquiries and Businessread-onlyUSE 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.
committees_search_committeesSearch Parliamentary Committeesread-onlyUSE 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.
committees_search_evidenceSearch Committee Evidenceread-onlyUSE 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, r…
get_promptread-onlyGet 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.
hmrc_check_mtd_statusCheck MTD VAT Statusread-onlyUSE 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.
hmrc_get_manual_pageRead HMRC Internal Manual Pageread-onlyUSE 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.
Show 22 more tools
hmrc_get_vat_rateGet VAT Rate for Commodityread-onlyUSE 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 ra…
hmrc_search_guidanceSearch HMRC Guidanceread-onlyUSE 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.
judgment_get_headerGet Judgment Headerread-onlyUSE THIS TOOL WHEN you have a judgment slug and need metadata (parties, judges, neutral citation, court, dates). Call case_law_search FIRST to get the slug. AFTER calling, use judgment_get_index to discover paragraphs, then judgment_get_paragraph to read specific ones. Authoritative source for UK judgment metadata.
judgment_get_indexGet Judgment Paragraph Indexread-onlyUSE 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.
judgment_get_paragraphGet Judgment Paragraphread-onlyUSE 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).
legislation_get_sectionGet Legislation Sectionread-onlyUSE 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 legislati…
legislation_get_tocGet Legislation Table of Contentsread-onlyUSE 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: legi…
legislation_searchSearch UK Legislationread-onlyUSE 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 t…
list_promptsread-onlyList all available prompts. Returns JSON with prompt metadata including name, description, and optional arguments.
list_resourcesread-onlyList 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}.
parliament_find_memberFind Member of Parliamentread-onlyUSE 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 ant…
parliament_get_debate_contributionsGet Contributions In A Debateread-onlyUSE 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…
parliament_get_debate_divisionsGet Divisions Held In A Debateread-onlyUSE 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 `div…
parliament_lookup_by_columnResolve A Hansard Column Citationread-onlyUSE 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=Hi…
parliament_member_debatesGet Member Debatesread-onlyUSE 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 contributio…
parliament_member_interestsGet Member Financial Interestsread-onlyUSE 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…
parliament_policy_position_summaryHansard Policy Position Summary (deterministic facets)read-onlyUSE 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 debat…
parliament_search_hansardSearch Hansard Debatesread-onlyUSE 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") — o…
parliament_search_petitionsSearch UK Parliament Petitionsread-onlyUSE 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).
read_resourceread-onlyRead 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: registere…
votes_get_divisionGet Division Detailread-onlyUSE 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).
votes_search_divisionsSearch Parliamentary Divisionsread-onlyUSE 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.
Compare and alternatives
Featured in
Signals
- Stars
- 20
- Forks
- 6
- Open issues
- 3
- Contributors
- 2
- Weekly downloads
- 170
- Last commit
- Oct 23, 2026 (5 days ago)
- Last release
- Oct 23, 2026 (5 days ago)
- Last package publish
- Oct 23, 2026 (5 days ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.paulieb89/uk-legal-mcp- Version
- 0.6.1
- Auth
- Auth not stated
- Packages
- pypi uk-legal-mcp
- License
- MIT
- Repository
- github.com/paulieb89/uk-legal-mcp
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
More from paulieb89
- 0.632score
UK Due Diligence
paulieb89
UK due diligence — Companies House, Charity Commission, Land Registry, Gazette, HMRC VAT
ConnectorAFreshness: ARemoteLocalRead-only★ 3↓ 122/wkClaude Code +5 - 0.602score
UK Property Data
paulieb89
UK property data — Land Registry comps, EPC, Rightmove, rental yields, stamp duty, Companies House
ConnectorBFreshness: BRemoteLocalRead-only★ 18↓ 66/wkClaude Code +5 - 0.553score
Pine Script v6 Documentation
paulieb89
Pine Script v6 documentation lookup, function validation, and linting for AI code generation
ConnectorCFreshness: CRemoteLocalRead-only★ 9↓ 116/wkClaude Code +5 - 0.527score
BAILII UK Case Law
paulieb89
Search UK case law on BAILII — court judgments with section extraction.
ConnectorCFreshness: CLocalRead-only★ 6↓ 35/wkClaude Code +5
Cite this page
UK Legal Research MCP server. Agent Mart. https://agentmart.dev/connectors/paulieb89-uk-legal-mcp (last updated 2026-10-24)