Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

UK Legal Research

REMOTE · UK-LEGAL-MCP.FLY.DEV · 2 COMPONENTS · SCANNED AUG 3

UK legal research — case law, legislation, Hansard, bills, votes, committees, HMRC, citations

+6 this week 74 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security74
Transport & Reachability100
Schema Quality & AI Usability75
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 9280 tokens (~257/item across 36 items; 35 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · uk-legal-mcp.fly.dev

# add to Claude Code
claude mcp add --transport http paulieb89-uk-legal-mcp https://uk-legal-mcp.fly.dev/mcp
# ~/.codex/config.toml
[mcp_servers.paulieb89-uk-legal-mcp]
url = "https://uk-legal-mcp.fly.dev/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "paulieb89-uk-legal-mcp": {
      "type": "remote",
      "url": "https://uk-legal-mcp.fly.dev/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add paulieb89-uk-legal-mcp --url https://uk-legal-mcp.fly.dev/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  paulieb89-uk-legal-mcp:
    url: "https://uk-legal-mcp.fly.dev/mcp"
// mcp.json
{
  "mcpServers": {
    "paulieb89-uk-legal-mcp": {
      "type": "http",
      "url": "https://uk-legal-mcp.fly.dev/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 1 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 +2
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

  • 28 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 67

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://uk-legal-mcp.fly.dev/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=*.fly.dev CN=YE2,O=Let's Encrypt,C=US 21 Jun 2026 19 Sept 2026 ECDSA 256 ECDSA-SHA384 503153e73302e4a0c89ebb83c4a741aac04
SANs: *.fly.dev
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd
DNSSEC insecure

Validation of uk-legal-mcp.fly.dev. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
dev. present 60074 8 Verified
fly.dev. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://uk-legal-mcp.fly.dev/mcp Verified 200
http (plaintext) http://uk-legal-mcp.fly.dev/mcp HTTPS enforced 301 https://uk-legal-mcp.fly.dev/mcp
MCP tools — 35 exposed · ~8,938 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
bills_get_bill ~189

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.

NameTypeReqDescription
bill_idintegeryesBill ID from bills_search_bills results.
max_summary_charsintegerMaximum characters of the bill summary text to return. Default 5,000 (~1,250 tokens) covers most bills. Raise for substantive government bills (Finance Act, Levelling-up) whose summary runs longer. C…
NameTypeReqDescription
current_houseHouse where the bill currently sits
current_stageCurrent legislative stage
idintegeryesBill ID
is_actbooleanWhether the bill has received Royal Assent
long_titleFull long title
originating_houseHouse where the bill was introduced
royal_assent_dateDate Royal Assent was given
short_titlestringyesShort title of the bill
sponsorsarrayBill sponsors
stagesarrayLegislative stages the bill has passed through
summaryBill summary text, possibly truncated per max_summary_chars. Check summary_truncated and summary_original_length for full-text info.
summary_original_lengthintegerOriginal summary length in characters before any truncation
summary_truncatedbooleanTrue if summary was cut to fit max_summary_chars
urlstringyesParliament URL for this bill

No examples provided.

bills_search_bills ~267

USE THIS TOOL WHEN searching UK parliamentary bills by keyword, session, house, or legislative stage. Returns a paginated page of bill summaries (title, 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.

NameTypeReqDescription
houseFilter by originating house. Omit for all houses.
limitintegerMaximum bills to return in this call. Default 20 keeps responses focused; raise up to 100 for bulk exports.
offsetintegerNumber of results to skip before this page. Default 0 for the first page. Re-call with offset=offset+returned while has_more is true to paginate.
querystringyesSearch term for bill titles and descriptions, e.g. 'online safety' or 'financial services'.
sessionNumeric parliamentary session ID (e.g. 40 = 2024-25, 39 = 2023-24). NOT a year string like '2025'. If you only know the year, omit this and filter the results instead. Omit to search all sessions.
stageFilter by current legislative stage.
NameTypeReqDescription
billsarrayMatching bills. Use the integer `id` field from any bill to call bills_get_bill for full detail.
has_morebooleanyesTrue if more results exist beyond this page. Re-call with offset=offset+returned to fetch the next page.
limitintegeryesMaximum results requested in this call
offsetintegeryesNumber of results skipped before this page
querystringyesThe search term that was used
returnedintegeryesNumber of results actually on this page
totalTotal results matching the query across all pages, if the upstream API reported it. None if unknown.

No examples provided.

case_law_grep_judgment ~255

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.

NameTypeReqDescription
case_insensitivebooleanDefault true. Set false for case-sensitive matching.
max_hitsintegerCap on number of hits returned.
patternstringyesRegex pattern (or plain substring) to search within paragraph text. If the pattern doesn't compile as regex, falls back to literal substring match.
slugstringyesTNA judgment slug, e.g. 'uksc/2024/12' or 'ewca/civ/2023/450'.
NameTypeReqDescription
hitsarrayyesMatching paragraphs in document order
patternstringyesThe pattern that was searched for
slugstringyesThe judgment slug that was searched
truncatedbooleanyesTrue if hit count reached max_hits and more matches may exist

No examples provided.

case_law_search ~631

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.

NameTypeReqDescription
courtFilter by court slug. Values: 'uksc', 'ukpc', 'ewca/civ', 'ewca/crim', 'ewhc/kb', 'ewhc/ch', 'ewhc/comm', 'ewhc/fam', 'ewhc/pat', 'ewhc/ipec', 'ewhc/admin', 'ewhc/tcc', 'ewhc/costs', 'ewfc', 'ewcop',…
from_dateEarliest judgment date (YYYY-MM-DD). NOTE: the TNA atom.xml endpoint currently appears to ignore this filter — the same results come back regardless. Do not rely on it to narrow output; sort+slice cl…
judgeFilter by judge surname. Case-insensitive substring match against the indexed form. Use the surname alone ('Reed', 'Sumption') or with the bare title ('Lord Reed'). Honorific suffixes silently zero t…
limitintegerMaximum results to return (1–50). TNA returns up to 50 per request; this slices client-side. Default 10 for a tight shortlist. Set higher for breadth (e.g. 50 to scan the full result set).
pageintegerResult page number (1-indexed)
partyFilter by party name
querystringyesFull-text search query, e.g. 'negligence duty of care'
to_dateLatest judgment date (YYYY-MM-DD). Same caveat as `from_date` — currently silently ignored by upstream. Filtering happens client-side at best.
NameTypeReqDescription
has_morebooleanyesWhether additional pages exist
pageintegeryesCurrent page number (1-indexed)
resultsarrayyesMatching judgments for this page
total_pagesTotal page count if available from API

No examples provided.

citations_format_oscola ~512

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).

NameTypeReqDescription
citation_typestringyes'type' field from citations_resolve result.
confidencenumberyes'confidence' from citations_resolve. Refuses to format if 0.0 — that means TNA confirmed the document does not exist. Pass only the value citations_resolve returned; do not guess.
court'court' from citations_resolve, e.g. 'UKSC', 'EWCA CIV', 'EWHC (KB)'.
legislation_title'legislation_title' from citations_resolve, e.g. 'Companies Act 2006'.
number'number' from citations_resolve (judgment number within the year).
page'page' from citations_resolve (starting page in the law report).
raw'raw' from citations_resolve. Used as-is for EU retained law — the original text preserves the Regulation/Directive distinction.
report_series'report_series' from citations_resolve, e.g. 'WLR', 'AC', 'QB'.
resolved_url'resolved_url' from citations_resolve. Must be non-null for neutral citations.
section'section' from citations_resolve, e.g. '47', '12', '20A'.
si_number'si_number' from citations_resolve.
si_year'si_year' from citations_resolve.
volume'volume' from citations_resolve (law report volume, if any).
year'year' from citations_resolve.

Structured output declared, but exposes no named fields.

No examples provided.

citations_network ~190

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.

NameTypeReqDescription
case_uristringyesTNA judgment URI slug, e.g. 'uksc/2024/12' or 'ewca/civ/2023/450'. Use the 'uri' field from case_law_search results — not the full URL. Do not include the 'https://caselaw.nationalarchives.gov.uk/' p…
NameTypeReqDescription
case_uristringyesThe judgment URI that was fetched and parsed
eu_refsarrayRetained EU law references, e.g. 'Regulation (EU) 2016/679'
law_report_refsarrayLaw report citations, e.g. '[2020] 1 WLR 100'
legislation_refsarrayLegislation section references, e.g. 's.47 Companies Act 2006'
neutral_citationsarrayNeutral citations referenced, e.g. '[2020] UKSC 14'
si_refsarrayStatutory Instrument references, e.g. 'SI 2018/1234'
total_citationsintegeryesSum of all de-duplicated citations across every bucket

No examples provided.

citations_parse ~396

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.

NameTypeReqDescription
disambiguatebooleanDefault False — pure-regex parsing, no model in the loop. If True, ambiguous citations (e.g. bare EWHC without a division) are sent to the connected client's own LLM, via MCP sampling, to resolve the…
textstringyesFree text containing OSCOLA citations to extract. Supported: neutral citations ([2024] UKSC 12), law reports ([2024] 1 WLR 100), legislation sections (s.47 Companies Act 2006), SIs (SI 2018/1234), re…
NameTypeReqDescription
ambiguousarrayyesCitations with confidence < 0.7; may have been partially disambiguated via sampling
citationsarrayyesAll successfully parsed citations (confidence >= 0.7)
parse_duration_msintegeryesTime taken to parse, in milliseconds
text_lengthintegeryesCharacter length of the input text

No examples provided.

citations_resolve ~260

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.

NameTypeReqDescription
citationstringyesA single OSCOLA citation to parse and resolve. E.g. '[2024] UKSC 12', 'SI 2018/1234', 's.47 Companies Act 2006'
NameTypeReqDescription
confidencenumberyesParse confidence 0.0–1.0. Citations below 0.7 are ambiguous and may have been sent for LLM disambiguation.
courtCourt code: UKSC, UKPC, EWCA Civ, EWCA Crim, EWHC (KB), EWHC (Ch), EWHC (Comm), EWHC (Fam), EWHC (Pat), EWHC (IPEC), UKUT (IAC), UKUT (TCC), UKUT (AAC), UKUT (LC), EAT, UKFTT (TC), UKFTT (GRC)
legislation_titleTitle of legislation (for s.NN Act YYYY citations)
numberJudgment number within the year
pageStarting page in the law report
rawstringyesOriginal citation text as found in the source
report_seriesLaw report series abbreviation: WLR, AC, QB, KB, Ch, All ER, EWCA Civ, etc.
resolved_urlTNA Find Case Law or legislation.gov.uk URL if successfully resolved
sectionSection number referenced
si_numberSI number
si_yearSI year (for SI YYYY/NNN citations)
typestringyesClassification of the citation type
volumeReport volume number (for law reports)
yearYear component of the citation

No examples provided.

committees_get_committee ~80

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.

NameTypeReqDescription
committee_idintegeryesCommittee ID from committees_search_committees results.
NameTypeReqDescription
emailContact email
houseCommons, Lords, or Joint
idintegeryesCommittee ID
membersarrayCurrent committee members
namestringyesCommittee name
phoneContact phone number
urlParliament URL for this committee

No examples provided.

committees_search_committees ~170

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.

NameTypeReqDescription
active_onlybooleanIf true, only return currently active committees.
houseFilter by house.
limitintegerMaximum committees to return. Default 100 comfortably covers all currently-active UK select committees. Raise only for historical sweeps.
querySearch term for committee names, e.g. 'defence' or 'treasury'. Filtered client-side against committee names. Omit to list all committees.
NameTypeReqDescription
active_onlybooleanyesWhether results were restricted to currently active committees
committeesarrayMatching committees. Use committees_get_committee for membership detail.
houseHouse filter applied, or None
queryName substring filter applied, or None
totalintegeryesNumber of committees returned in this call

No examples provided.

committees_search_evidence ~238

USE THIS TOOL WHEN you have a committee_id and want the oral and written evidence submitted to it. Returns ONE PAGE of evidence (default 20). Free-text titles are capped per max_title_chars; witness lists are capped at 10 per item. For committees with many submissions, re-call with offset=offset+returned while has_more is true. Authoritative source for parliamentary committee evidence.

NameTypeReqDescription
committee_idintegeryesCommittee ID from committees_search_committees results.
evidence_typestringType of evidence to search.
limitintegerMaximum evidence items to return. Default 20. When evidence_type='both' the limit is split across oral and written (roughly half each).
max_title_charsintegerPer-item cap on the free-text title field. Default 300 prevents context blow-up from verbose inquiry titles. Raise to 1000+ only when you need the full title text.
offsetintegerNumber of evidence items to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true.
NameTypeReqDescription
committee_idintegeryesCommittee ID this page belongs to
evidencearrayEvidence items in this page. Titles are capped per max_title_chars; witness lists are capped at 10 per item.
evidence_typestringyesEvidence type filter applied to this query
has_morebooleanyesTrue if there may be more evidence beyond this page. Re-call with offset=offset+returned to fetch the next page. Conservative: when evidence_type='both', True if either oral or written upstream page…
limitintegeryesMax evidence items requested for this page
offsetintegeryesNumber of evidence items skipped before this page
returnedintegeryesNumber of evidence items actually returned in this call

No examples provided.

get_prompt ~66

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.

NameTypeReqDescription
argumentsOptional arguments for the prompt
namestringyesThe name of the prompt to get
NameTypeReqDescription
resultstringyes

No examples provided.

hmrc_check_mtd_status ~147

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.

NameTypeReqDescription
vrnstringyesVAT Registration Number: 9 digits, e.g. '123456789'. GB prefix accepted and stripped automatically.
NameTypeReqDescription
effective_dateDate from which MTD obligation applies
mandatedbooleanyesWhether this business is mandated for MTD VAT
trading_nameRegistered trading name if available
vrnstringyesVAT Registration Number queried

No examples provided.

hmrc_get_vat_rate ~146

USE THIS TOOL WHEN you have a UK commodity or service description and want its VAT rate category. Returns the rate (standard 20%, reduced 5%, zero 0%, exempt), effective date, and any relevant conditions or exceptions. IMPORTANT: Uses a static lookup table current as of 22 Nov 2023 (Autumn Statement). Rates may have changed in subsequent Budgets — for time-sensitive advice, verify against GOV.UK via hmrc_search_guidance.

NameTypeReqDescription
commodity_codestringyesCommodity code or plain-English description. E.g. 'food', 'domestic fuel', 'software', 'financial services', 'new build residential'
NameTypeReqDescription
commodity_codestringyesCommodity code or description queried
effective_fromstringyesDate from which this rate applies
notesAny additional notes or conditions on this rate
ratestringyesVAT rate category
rate_percentagenumberyesApplicable rate as percentage: 20.0 (standard), 5.0 (reduced), 0.0 (zero/exempt)

No examples provided.

hmrc_search_guidance ~149

USE THIS TOOL WHEN searching GOV.UK for HMRC tax guidance on a topic (VAT, income tax, corporation tax, etc.). Returns matching guidance titles, URLs, summaries, and last-updated dates. Searches the official GOV.UK content API filtered to HMRC publications. Authoritative source for current HMRC tax guidance. Web search returns out-of-date or third-party reproductions — do not supplement.

NameTypeReqDescription
limitintegerMaximum guidance results to return (1–25). Passed to the GOV.UK search count param.
querystringyesSearch query for HMRC guidance, e.g. 'VAT digital services', 'R&D tax relief SME'
NameTypeReqDescription
querystringyesThe search query that was run
resultsarrayMatching HMRC guidance pages. Each entry's `summary` is capped per the max_summary_chars input parameter.
totalintegeryesNumber of guidance documents returned in this call

No examples provided.

judgment_get_header ~110

USE 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.

NameTypeReqDescription
slugstringyesJudgment slug, e.g. 'uksc/2024/12' or 'ewca/civ/2023/450'

Structured output declared, but exposes no named fields.

No examples provided.

judgment_get_index ~111

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.

NameTypeReqDescription
slugstringyesJudgment slug, e.g. 'uksc/2024/12'

Structured output declared, but exposes no named fields.

No examples provided.

judgment_get_paragraph ~136

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).

NameTypeReqDescription
eIdstringyesParagraph eId from judgment_get_index, e.g. 'para_12'. Numeric strings like '12' are accepted and normalized to 'para_12'.
slugstringyesJudgment slug, e.g. 'uksc/2024/12'

Structured output declared, but exposes no named fields.

No examples provided.

legislation_get_section ~342

USE THIS TOOL WHEN you have a known Act / SI and want the parsed text of a specific section, with extent and in-force metadata. Returns full section text, 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. 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.

NameTypeReqDescription
max_charsintegerMaximum characters of section content to return. Default 10,000 (~2,500 tokens) covers almost every section. Raise to 50,000+ only for unusually long Finance Act definition sections. Check content_tr…
numberintegeryesChapter or SI number
sectionstringyesSection number, e.g. '47' or '12A'. Use the numeric part only — not 'section-47'. Schedules are not currently supported.
typestringyesLegislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results.
yearintegeryesYear of enactment
NameTypeReqDescription
contentstringyesPlain text content of the section, possibly truncated per max_chars. Check content_truncated and original_length for full-text information.
content_truncatedbooleanTrue if content was cut to fit max_chars
extentarrayTerritorial extent: list of 'England', 'Wales', 'Scotland', 'Northern Ireland'. Empty list means unknown — do not assume full UK extent.
in_forceFalse if the section is explicitly marked repealed in CLML. True only when an InForce element is present in the section body (rare). Null for most sections — the data.xml endpoint does not carry a pe…
original_lengthintegerOriginal plain-text length in characters before any truncation
prospectiveTrue if this section has not yet come into force; None if unknown
section_numberstringyesSection number, e.g. '47', '12A', 'Schedule 2'
source_formatstringSource parsed for this response. html_fallback means CLML XML was unavailable and text was parsed from the public HTML page.
titlestringyesSection title or heading
version_dateDate of the version retrieved
warningsarrayNon-fatal retrieval or parsing warnings the caller should disclose where relevant.

No examples provided.

legislation_get_toc ~335

USE THIS TOOL WHEN you have a known Act / SI and want the structural table of contents (parts, chapters, sections, schedules). Returns structural elements with XML id and title, e.g. 'section-47: Definitions'. AFTER calling, pass the numeric section 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.

NameTypeReqDescription
limitintegerMaximum items to return in this call (default 200, max 1000). Raise only when you need a larger slice in one response. Check has_more and total_items to know if further pages exist.
numberintegeryesChapter or SI number
offsetintegerNumber of items to skip from the flattened TOC. Use with limit to page through very large statutes like the Companies Act 2006 (1300+ items).
typestringyesLegislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results.
yearintegeryesYear of enactment
NameTypeReqDescription
has_morebooleanyesTrue if more items remain beyond offset+returned
itemsarrayTOC entries in XML document order, formatted as '<id>: <title>', e.g. 'section-47: Definitions'. When calling legislation_get_section pass only the numeric part ('47', not 'section-47').
limitintegeryesPage size applied after offset
numberintegeryesChapter or SI number echoed from the request
offsetintegeryesOffset applied to the full TOC item list
returnedintegeryesNumber of items in this response
total_itemsintegeryesTotal structural items parsed from the XML, before offset/limit. Compare to `returned` and `has_more` to decide whether to paginate.
typestringyesLegislation type code echoed from the request
yearintegeryesYear of enactment echoed from the request

No examples provided.

legislation_search ~441

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 ("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).

NameTypeReqDescription
fulltextbooleanDefault false → searches Act/SI titles only (best for finding a named Act, e.g. 'Housing Act 1988' returns ukpga/1988/50 first). Set true to search the full text of every Act/SI for the query (return…
limitintegerMaximum results to return (1–50). Passed to the upstream results-count param.
querystringyesSearch query, e.g. 'Housing Act 1988' or 'data protection personal data'
typeFilter by type: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Exact-match — omit if you don't already know whether you're looking for an Act vs an SI.
yearFilter by year of enactment (exact-match — a single integer, not a range). Omit unless you already know the Act's year. Speculating a year (e.g. 'this is recent so it must be 2026') and getting it wr…
NameTypeReqDescription
resultsarrayyesMatching legislation items
totalintegeryesTotal number of matches

No examples provided.

list_prompts ~28

List all available prompts. Returns JSON with prompt metadata including name, description, and optional arguments.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

list_resources ~49

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}.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultstringyes

No examples provided.

parliament_find_member ~173

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).

NameTypeReqDescription
namestringyesName or partial name, e.g. 'Starmer', 'Baroness Hale'
NameTypeReqDescription
membersarrayMatching members. Use the integer `id` field from any member to call parliament_member_debates or parliament_member_interests.
querystringyesThe name that was searched
totalintegeryesNumber of members matching the query

No examples provided.

parliament_get_debate_contributions ~319

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.

NameTypeReqDescription
debate_ext_idstringyesDebate GUID (DebateSectionExtId). Chain from parliament_search_hansard top_debates[].debate_ext_id, parliament_lookup_by_column matches[].debate_ext_id, or any tool that surfaces a debate identifier.
member_idOptional integer Members API ID. When given, only that member's contributions in this debate are returned — regardless of which words they used. Resolves via parliament_find_member. When omitted, eve…
NameTypeReqDescription
contributionsarrayHansard contributions for the member. Each `text` field is capped at 3000 characters.
has_morebooleanTrue if a full page was returned (more may exist)
limitintegerPage size requested
member_idintegeryesParliament Members API member ID
offsetintegerSkip applied to this page
topicTopic phrase filter applied, if any
totalintegeryesNumber of contributions returned in this call

No examples provided.

parliament_get_debate_divisions ~284

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.

NameTypeReqDescription
debate_ext_idstringyesDebate GUID (DebateSectionExtId). Chain from parliament_search_hansard contribution.debate_ext_id, top_debates[].debate_ext_id, or parliament_policy_position_summary top_debates[].debate_ext_id.
NameTypeReqDescription
debate_ext_idstringyesEcho of the input debate GUID.
divisionsarrayDivisions held in this debate, in chronological order. Empty when no divisions occurred. Each element's `id` chains to votes_get_division.

No examples provided.

parliament_lookup_by_column ~393

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.

NameTypeReqDescription
column_numberstringyesHansard column number from an OSCOLA footnote, e.g. '200' for 'HL Deb 14 Oct 2025, vol 849, col 200'. String (not integer) to accommodate column suffixes like '1162W' for written answers.
housestringRestrict to one House. Default 'both' searches across both Houses.
volume_numberintegeryesHansard volume number (the 'vol 849' part of an OSCOLA citation). Required — the endpoint only resolves citations when given the volume; sitting date is NOT a substitute (verified live 2026-05-29).
NameTypeReqDescription
column_numberstringyesEcho of the requested column number.
housestringyesHouse filter applied.
matchesarrayDebate sections containing the cited column, in upstream relevance order. Each element's `debate_ext_id` chains to hansard://debate/{debate_ext_id}/header, and carries `source`/`source_code` for the…
total_resultsintegeryesNumber of debate matches found.
volume_numberintegeryesEcho of the requested volume number.

No examples provided.

parliament_member_debates ~348

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.

NameTypeReqDescription
limitintegerMaximum contributions to return. Default 20.
member_idintegeryesParliament Members API integer ID. Obtain from parliament_find_member.
offsetintegerNumber of contributions to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true.
topicOptional phrase to find in THIS member's contribution text bodies. Hansard searches the words the member actually said, NOT the topic or title of the debate. Pass tokens this member would have spoken…
NameTypeReqDescription
contributionsarrayHansard contributions for the member. Each `text` field is capped at 3000 characters.
has_morebooleanTrue if a full page was returned (more may exist)
limitintegerPage size requested
member_idintegeryesParliament Members API member ID
offsetintegerSkip applied to this page
topicTopic phrase filter applied, if any
totalintegeryesNumber of contributions returned in this call

No examples provided.

parliament_member_interests ~397

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.

NameTypeReqDescription
categoryFilter by interest category. Common categories: 'donations' (donations and support), 'gifts_uk' (gifts/hospitality from UK), 'employment' (employment and earnings), 'land' (land and property), 'share…
limitintegerMax interests per call. Hard-capped at 20 by the upstream interests-api.parliament.uk (verified live 2026-05-29: Take=100 still returns 20). For prolific members, paginate via offset; total size is i…
max_description_charsintegerPer-entry cap on the free-text description field. Default 500 prevents context blow-up on members with lengthy donation or directorship narratives. Raise to 2000+ only for forensic provenance work.
member_idintegeryesParliament Members API integer ID. Get from parliament_find_member.
offsetintegerNumber of interests to skip before this page. Default 0 for the first page. To paginate prolific members (100+ interests), re-call with offset=offset+returned while the previous response had has_more…
NameTypeReqDescription
categoryCategory filter applied to this query, or None for all categories
has_morebooleanyesTrue if there may be more interests beyond this page. Re-call with offset=offset+returned to fetch the next page.
interestsarrayThe interests in this page. `description` text is capped per the max_description_chars input parameter.
limitintegeryesMax interests requested for this page
member_idintegeryesParliament Members API member ID
offsetintegeryesNumber of interests skipped before this page
returnedintegeryesNumber of interests actually returned in this call

No examples provided.

parliament_policy_position_summary ~512

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.

NameTypeReqDescription
from_dateStart date (YYYY-MM-DD)
housestringRestrict to one House. Default 'both'.
max_debates_scannedintegerHard cap on debates sampled from /search/Debates.json to compute facets. Default 200 issues ≤4 upstream calls (take=50 each). Raise to 2000 (≤40 calls) for an exhaustive sweep on a heavily-debated to…
to_dateEnd date (YYYY-MM-DD)
topicstringyesPhrase to find in Hansard contribution text bodies for the facet aggregation. Same semantics as parliament_search_hansard.query: tokens that appear in members' actual speeches, not bill titles or top…
NameTypeReqDescription
by_housearrayCounts of debates by house (Commons vs Lords)
by_month_recent_12arrayCounts of debates by YYYY-MM for the most recent 12 months in the sample, desc by month
by_partyarrayCounts by party. ALWAYS EMPTY in this summary — Hansard's search API only exposes member identifiers at the per-debate level, not the corpus level. For party breakdown within one debate, read hansard…
by_sectionarrayCounts of debates by Hansard section bucket (Chamber / Westminster Hall / Written Answers / Written Statements)
by_yeararrayCounts of debates by sitting year, desc by year
debates_scannedintegeryesNumber of debates pulled from /search/Debates.json for the facet breakdown (≤ max_debates_scanned)
from_dateStart date filter applied
housestringyesHouse filter applied
to_dateEnd date filter applied
top_contributorsarrayALWAYS EMPTY in this summary — see by_party note. Use parliament_member_debates after picking a debate from top_debates.
top_debatesarrayTop 20 debates ranked by upstream relevance_rank, with debate_ext_id for hansard://debate/{debate_ext_id}/header drill-down. contribution_count is null in this preview shape (would require a secondar…
topicstringyesPhrase searched in Hansard
total_contributionsintegeryesTotal contributions in Hansard matching topic+filters (TotalContributions)
total_debatesintegeryesTotal distinct debates touching this topic (TotalDebates)
total_divisionsintegeryesTotalDivisions upstream count. Non-zero → consider votes_search_divisions.
total_written_answersintegeryesTotalWrittenAnswers upstream count
total_written_statementsintegeryesTotalWrittenStatements upstream count

No examples provided.

parliament_search_hansard ~692

USE 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.

NameTypeReqDescription
contribution_typestringWhich Hansard section to paginate. 'Spoken' = chamber + Westminster Hall debates (the default; what a lawyer usually means). 'Written' = written answers and statements. 'Corrections' = published corr…
from_dateStart date (YYYY-MM-DD)
housestringRestrict to one House. Default 'both' returns Commons + Lords contributions.
limitintegerMax contributions per call (1–100). Default 20. Paginate further with offset; total corpus size is in total_corpus on the response.
member_idFilter to contributions by a single member. Pass the integer Members API ID (resolve a name via parliament_find_member). The prior `member` field accepted a name string but Hansard's /search.json sil…
offsetintegerSkip this many contributions before the page. Default 0. Re-call with offset=offset+returned to paginate; has_more flags whether more remain.
querystringyesPhrase to find in Hansard contribution text bodies. Hansard searches the words members actually said in their speeches — NOT debate titles, topic metadata, or written headlines. Pass tokens that woul…
text_modestring'preview' returns the upstream ~250-char snippet (fast, low context cost). 'full' returns ContributionTextFull (still capped at 3000 chars). For full contribution text without the cap, read the resou…
to_dateEnd date (YYYY-MM-DD)
NameTypeReqDescription
contributionsarrayMatching Hansard contributions with full citation metadata.
date_range(min, max) SittingDate of returned contributions, or None if empty
from_dateStart date filter applied, if any
has_morebooleanTrue if a full page was returned (more may exist; re-call with offset=offset+limit)
housestringHouse filter applied
house_breakdownobjectCounts by house across the returned page
limitintegerPage size requested
member_idMembers API integer ID filter applied, if any (echoed from input).
offsetintegerSkip applied to this page (Hansard API: skip)
party_breakdownobjectCounts by party across the returned page
querystringyesThe phrase that was searched in Hansard
text_modestringWhether contribution `text` carries the upstream preview or full body (still capped).
to_dateEnd date filter applied, if any
top_debatesarrayTop-ranked debates touching this topic (from upstream Debates[] preview, capped at 4 by Hansard's /search.json). Each entry's `debate_ext_id` chains to hansard://debate/{debate_ext_id}/header.
top_divisionsarrayTop-ranked divisions touching this topic (from upstream Divisions[] preview, capped at 4). Each entry's `id` chains to votes_get_division; `debate_section_ext_id` chains back to the parent debate.
totalintegeryesNumber of contributions returned in this call
total_committeesTotalCommittees.
total_corpusTotal contributions in Hansard matching this query (TotalContributions). Use to decide whether to paginate further or escalate to parliament_policy_position_summary.
total_correctionsTotalCorrections — published corrections to the Hansard record.
total_debatesTotalDebates — distinct debates touching this topic.
total_divisionsTotalDivisions. Non-zero → consider `top_divisions` previews below or chain to votes_search_divisions.
total_membersTotalMembers — member-name matches in the corpus.
total_petitionsTotalPetitions.
total_written_answersTotalWrittenAnswers.
total_written_statementsTotalWrittenStatements.

No examples provided.

parliament_search_petitions ~166

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).

NameTypeReqDescription
limitintegerMaximum petitions to return. Default 20.
offsetintegerNumber of petitions to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true.
querystringyesSearch term for petition titles, e.g. 'ban trophy hunting' or 'NHS funding'.
statestringFilter by petition state.
NameTypeReqDescription
has_morebooleanTrue if a full page was returned (more may exist)
limitintegerPage size requested
offsetintegerSkip applied to this page
petitionsarrayMatching petitions (title, state, signature count, key dates, URL).
querystringyesThe term that was searched in petitions
statestringyesPetition state filter applied to this query
totalintegeryesNumber of petitions returned in this call

No examples provided.

read_resource ~70

Read a resource by its URI. For static resources, provide the exact URI. For templated resources, provide the URI with template parameters filled in. Returns the resource content as a string. Binary content is base64-encoded.

NameTypeReqDescription
uristringyesThe URI of the resource to read
NameTypeReqDescription
resultstringyes

No examples provided.

votes_get_division ~119

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).

NameTypeReqDescription
division_idintegeryesDivision ID from votes_search_divisions results.
housestringWhich house this division belongs to.
NameTypeReqDescription
aye_votersarrayMembers who voted Aye (may be truncated)
ayes_countintegeryesTotal Aye votes
datestringyesDate of the division
housestringyesCommons or Lords
idintegeryesDivision ID
is_government_winWhether the government won (Lords only)
noe_votersarrayMembers who voted No (may be truncated)
noes_countintegeryesTotal No votes
passedbooleanyesWhether the motion passed
titlestringyesDivision title / motion text
total_aye_votersintegerTotal number of Aye voters before truncation
total_noe_votersintegerTotal number of No voters before truncation
truncatedbooleanWhether voter lists were truncated to fit response limits

No examples provided.

votes_search_divisions ~217

USE THIS TOOL WHEN searching Commons or Lords formal votes by topic, date, or member. Returns division summaries (title, date, vote counts, pass/fail). 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.

NameTypeReqDescription
from_dateStart date (YYYY-MM-DD).
housestringWhich house to search.
limitintegerMaximum divisions to return. Default 25 (Commons API max-per-page).
member_idFilter to divisions where this member voted. Get the member ID from parliament_find_member.
offsetintegerNumber of divisions to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true.
querySearch term for division titles, e.g. 'Rwanda' or 'Online Safety Bill'. Omit to browse recent divisions.
to_dateEnd date (YYYY-MM-DD).
NameTypeReqDescription
divisionsarrayMatching divisions. Use the integer `id` field with votes_get_division to fetch the full voter list.
has_morebooleanTrue if a full page was returned (more may exist)
housestringyesCommons or Lords
limitintegerPage size requested
offsetintegerSkip applied to this page
queryThe search term, if any (None = browse recent)
totalintegeryesNumber of divisions returned in this call

No examples provided.