UK legal research — case law, legislation, Hansard, bills, votes, committees, HMRC, citations
UK legal research — case law, legislation, Hansard, bills, votes, committees, HMRC, citations
Remote endpoints: streamable-http: https://uk-legal-mcp.fly.dev/mcp
Valid MCP server (1 strong, 2 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry. Trust signals: trusted author (6/6 approved).
5 files analyzed · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Available as Local & Remote
This plugin can run on your machine or connect to a hosted endpoint. during install.
From the project's GitHub README.
A Model Context Protocol server for UK legal research. Connects AI assistants to case law, legislation, parliamentary debates, bills, votes, committees, OSCOLA citation parsing, and HMRC tax data through a single endpoint.
24 tools across 8 modules. One connection. Read-only. No API keys required for 23 of 24 tools.
MCP Client (Claude, Cursor, etc.)
|
v
uk-legal-mcp gateway (Streamable HTTP)
+----------------------------------------------------+
| |
| case_law TNA Find Case Law API |
| legislation legislation.gov.uk Atom feed |
| parliament Hansard API + Members API |
| bills Parliamentary Bills API |
| votes Commons + Lords division records |
| committees Select committees + evidence |
| citations OSCOLA regex parser (no network) |
| hmrc HMRC sandbox/prod + GOV.UK search |
| |
+----------------------------------------------------+
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"uk-legal": {
"type": "streamable-http",
"url": "https://uk-legal-mcp.fly.dev/mcp"
}
}
}
Then try:
pip install -e .
python -m src.gateway
# Server starts on http://localhost:8000/mcp
Inspect with the MCP Inspector:
npx @modelcontextprotocol/inspector http://localhost:8000/mcp
| Tool | What it does |
|---|---|
case_law_search | Full-text search of UK judgments. Filter by court, judge, party, date range. |
case_law_grep_judgment | Find paragraphs in a judgment matching a pattern. Returns {eId, snippet, match} per hit. |
Resource templates (read via resources/read or the read_resource tool generated by ResourcesAsTools):
| URI template | Returns |
|---|---|
judgment://{slug*}/header | Metadata header (parties, judges, citation). ~1k tokens. |
judgment://{slug*}/index | Paragraph eId + first-line per row. ~4k tokens. Walk this to discover paragraphs. |
judgment://{slug*}/para/{eId} | A single paragraph including its sub-paragraphs. 400–1700 tokens. |
Upstream: TNA Find Case Law (Atom/XML). Rate limit: 1,000 req/5 min. Cached 1 hour.
| Tool | What it does |
|---|---|
legislation_search | Search Acts of Parliament and Statutory Instruments on legislation.gov.uk. |
legislation_get_toc | Table of contents for an Act — parts, chapters, sections, schedules. |
legislation_get_section | Retrieve a specific section with territorial extent, in-force status, and version date. |
Resource templates (alternative to the tools above for clients that prefer URI-addressed reads):
| URI template | Returns |
|---|---|
legislation://{type}/{year}/{number} | Full Act/SI as CLML XML. |
legislation://{type}/{year}/{number}/section/{section} | A specific section as CLML XML. |
legislation://{type}/{year}/{number}/toc | Flat id: title lines for the table of contents. |
legislation://{type}/{year}/{number}/{date} | Point-in-time CLML for a YYYY-MM-DD date. |
Upstream: legislation.gov.uk (CLML XML + Atom feed). Cached 24 hours. Uses curl_cffi with Chrome impersonation to defeat CloudFront 437; Companies Act 2006 currently hits an AWS WAF JS challenge intermittently.
Note: Always check the extent field. A section may apply to England and Wales but not Scotland or Northern Ireland.
| Tool | What it does |
|---|---|
parliament_search_hansard | Search Hansard debate contributions by exact phrase. |
parliament_vibe_check | Assess parliamentary reception of a policy topic. Searches Hansard, then uses LLM sampling to classify sentiment, supporters, opponents, and concerns. |
parliament_find_member | Look up an MP or Lord by name. Returns member ID for use with member_debates. |
parliament_member_debates | Retrieve a specific member's Hansard contributions, optionally filtered by topic. |
parliament_member_interests | Get a member's registered financial interests (donations, shareholdings, etc.). |
parliament_search_petitions | Search UK Parliament petitions by keyword. |
Upstream: hansard-api.parliament.uk + members-api.parliament.uk + petition.parliament.uk. Not cached (live data).
| Tool | What it does |
|---|---|
bills_search_bills | Search current and historical parliamentary bills by keyword, session, or type. |
bills_get_bill | Get full bill detail — stages, sponsors, publications. |
Upstream: bills-api.parliament.uk. Cached 1 hour.
| Tool | What it does |
|---|---|
votes_search_divisions | Search Commons and Lords division records by keyword or date. |
votes_get_division | Get full division detail — vote counts, how each member voted. |
Upstream: commonsvotes-api.parliament.uk + lordsvotes-api.parliament.uk. Cached 24 hours.
| Tool | What it does |
|---|---|
committees_search_committees | Search parliamentary select committees by keyword. |
committees_get_committee | Get committee detail — membership, sub-committees. |
committees_search_evidence | Search oral and written evidence submissions to committees. |
Upstream: committees-api.parliament.uk. Cached 1 hour.
| Tool | What it does |
|---|---|
citations_parse | Extract all OSCOLA citations from free text. Resolves to canonical URLs. Disambiguates bare court codes via LLM sampling. |
citations_resolve | Parse and resolve a single citation string to its canonical URL. |
citations_network | Fetch a judgment from TNA and map every citation within it — cases, legislation, SIs, EU law. |
Self-contained. No external API. Zero network dependency (except citations_network which fetches the judgment XML).
Supported citation formats:
| Format | Example |
|---|---|
| Neutral citation | [2024] UKSC 12 |
| Law report (with or without volume) | [2024] 1 WLR 100, [1932] AC 562 |
| Legislation section | s.47 Companies Act 2006 |
| Statutory Instrument | SI 2018/1234 |
| Retained EU law | Regulation (EU) 2016/679 |
| Tool | What it does |
|---|---|
hmrc_get_vat_rate | VAT rate lookup for any commodity or service. Static table current as of Autumn Statement 2023. |
hmrc_check_mtd_status | Check Making Tax Digital VAT mandate status for a VRN. Requires HMRC OAuth credentials. |
hmrc_search_guidance | Search GOV.UK for HMRC guidance documents. |
hmrc_get_vat_rate and hmrc_search_guidance require no credentials. hmrc_check_mtd_status requires HMRC_CLIENT_ID and HMRC_CLIENT_SECRET — register at developer.service.hmrc.gov.uk. Defaults to sandbox; set HMRC_API_BASE=https://api.service.hmrc.gov.uk for production.
src/
gateway.py FastMCP gateway — mounts all modules, applies middleware
deps.py Shared httpx clients (lifespan-managed) + error formatting
modules/
case_law/ TNA Find Case Law (Atom/XML parsing)
legislation/ legislation.gov.uk (CLML XML + Atom feed)
parliament/ Hansard API + Members API + Petitions (JSON)
bills/ Parliamentary Bills API (JSON)
votes/ Commons + Lords division records (JSON)
committees/ Select committees + evidence (JSON)
citations/ OSCOLA regex engine (compiled once, lru_cache)
hmrc/ HMRC OAuth + GOV.UK search (JSON)
tests/
test_citations.py 35 unit tests — regex patterns, resolution, disambiguation
Each module is a standalone FastMCP instance mounted into the gateway with a namespace prefix (case_law_, legislation_, etc.). All modules share a single httpx client pool via the gateway's lifespan context.
Middleware stack (gateway level):
| Middleware | Purpose |
|---|---|
ErrorHandlingMiddleware | Catches unhandled exceptions |
StructuredLoggingMiddleware | JSON logging with duration and payload size |
DetailedTimingMiddleware | Per-tool timing logs |
ResponseLimitingMiddleware | 80,000 char cap (LegalDocML XML can exceed 200k) |
Per-module caching: ResponseCachingMiddleware with TTLs — case_law (1hr), legislation (24hr), bills (1hr), votes (24hr), committees (1hr), hmrc (90 days). Parliament and citations are not cached.
fly auth login
fly launch --name uk-legal-mcp --region lhr
fly deploy
Optional secrets:
fly secrets set HMRC_CLIENT_ID=your_id HMRC_CLIENT_SECRET=your_secret
# For production HMRC (default is sandbox):
fly secrets set HMRC_API_BASE=https://api.service.hmrc.gov.uk
docker build -t uk-legal-mcp .
docker run -p 8000:8000 uk-legal-mcp
pip install -e '.[test]' # or: pip install pytest
pytest tests/test_citations.py -v
All 35 citation tests run offline with no API credentials.
| Source | API | Licence | Auth |
|---|---|---|---|
| TNA Find Case Law | caselaw.nationalarchives.gov.uk | Open Justice Licence | None |
| legislation.gov.uk | legislation.gov.uk | OGL v3 | None |
| UK Parliament Hansard | hansard-api.parliament.uk | Open Parliament Licence | None |
| UK Parliament Members | members-api.parliament.uk | Open Parliament Licence | None |
| UK Parliament Petitions | petition.parliament.uk | Open Parliament Licence | None |
| UK Parliament Bills | bills-api.parliament.uk | Open Parliament Licence | None |
| UK Parliament Votes | commonsvotes-api.parliament.uk | Open Parliament Licence | None |
| UK Parliament Committees | committees-api.parliament.uk | Open Parliament Licence | None |
| HMRC | test-api.service.hmrc.gov.uk | OGL / commercial terms | OAuth 2.0 |
| GOV.UK Search | www.gov.uk/api/search.json | OGL v3 | None |
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace · Developer Tools
Scaffold, build, and publish TypeScript MCP servers to npm — conversationally
by mcp-marketplace · Finance
Free stock data and market news for any MCP-compatible AI assistant.