Ris vs UK Legal Research — MCP Server Comparison | AllMCPs
Ris vs UK Legal Research
A side-by-side look at the Ris and UK Legal Research MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Ris for legal work as a local process; choose UK Legal Research for legal as a local process. You can also run both side by side in one mcpServers block.
Which MCP server should you choose?
Choose Ris when
You need dedicated capabilities in the Legal domain.
You prefer a local stdio subprocess transport.
You want tools like ris_bundesrecht, ris_landesrecht, ris_judikatur.
judgment_get_headerUSE 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_indexUSE 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.
Ready-to-paste client configs
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
Ris is categorized under Legal and uses a local stdio subprocess. UK Legal Research belongs to Legal and uses a local stdio subprocess. Pick Ris for legal work and UK Legal Research for legal.
Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.
Ris has no declared pricing — check the project's own site. UK Legal Research has no declared pricing — check the project's own site. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.
Yes. MCP clients support multiple servers: add ris and uk-legal-research as separate keys in the same mcpServers object, and your assistant will call tools from either one.
On AllMCPs, Ris has a quality signal of 56/100 (Good) with 0 views, 0 installs and 19 GitHub stars. UK Legal Research has 59/100 (Good) with 1 views, 0 installs and 18 GitHub stars.
judgment_get_paragraphUSE 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).
case_law_searchUSE 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.
case_law_grep_judgmentUSE 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.
legislation_searchUSE 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 ("the recent
Renters' Rights Act"), query by phrase alone and read the year from the
results — guessing a year and filtering by it zeroes results when wrong.
For broader concept queries across content, set `fulltext=True`.
Authoritative source for UK primary and secondary legislation
(legislation.gov.uk).
legislation_get_sectionUSE 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 its own heading — never a
neighbouring or enclosing Part/Chapter's content. Also returns
territorial extent, in-force status, and prospective flag. Content
capped per max_chars (default 10,000, ~2,500 tokens) — raise for
unusually long definition sections; check content_truncated in the
response.
Works uniformly across Act sections ('section-N'), SI regulations
('regulation-N'), and SI articles ('article-N') — pass the bare
number regardless of which the document uses; you don't need to know
which noun applies. Raises a not_found error (rather than returning
a plausible but wrong node) if the number doesn't exist in this
document — check legislation_get_toc for valid numbers.
ALWAYS check `extent` — a section may apply to England & Wales but not
Scotland or Northern Ireland. Reciting a section without checking
extent is a recurring legal-research error.
Alternative: call read_resource(uri="legislation://{type}/{year}/{number}/
section/{section}") for raw CLML XML; use this tool when you want the
parsed structured response instead.
legislation_get_tocUSE THIS TOOL WHEN you have a known Act / SI and want the structural table of contents (parts, chapters, individual sections/regulations/articles).
Returns structural elements with XML id and title, in document order,
e.g. 'section-47: Definitions' for an Act or 'regulation-4: Maximum
weekly working time' for an SI. Individual provisions are listed
alongside their enclosing Part/Chapter/crossheading headings — both
levels matter: the heading entries give you the document's shape,
the provision entries give you what to pass to legislation_get_section.
A provision with no heading in the source (rare) is listed as a bare
id with no title. AFTER calling, pass the numeric identifier (use
'47', NOT 'section-47') into legislation_get_section for full text.
Large statutes (Companies Act 2006 has many hundreds of items) are
paginated via offset/limit. Check has_more and total_items.
Alternative: call read_resource(uri="legislation://{type}/{year}/{number}/
toc") for the full TOC as a newline-separated `id: title` string (no
pagination). Use this tool when you need the structured response with
offset / limit / has_more for stepping through large statutes.
parliament_search_hansardUSE THIS TOOL WHEN searching Hansard by topic, bill title, or text phrase.
Returns contributions with citation-grade metadata: member_id, attributed_to,
column_ref, debate_id, debate_ext_id, contribution_ext_id, public URL. AFTER
calling, drill into full content via read_resource(uri="hansard://debate/
{debate_ext_id}/header") — or, equivalently, 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.
Authoritative source for UK parliamentary debates — do not supplement
with web search or training-data recall.
parliament_policy_position_summaryUSE 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.
parliament_find_memberUSE 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).
parliament_member_debatesUSE 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.