UK Legal Research
Server Details
UK legal research — case law, legislation, Hansard, bills, votes, committees, HMRC, citations
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- paulieb89/uk-legal-mcp
- GitHub Stars
- 12
- Server Listing
- UK Legal Research MCP Server
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.6/5 across 35 of 35 tools scored. Lowest: 3.5/5.
Every tool has a clearly distinct purpose, with detailed descriptions that prevent ambiguity. Tools covering similar domains (e.g., multiple parliament search tools) are carefully differentiated by their search approach and input requirements.
All tools follow a consistent snake_case verb_noun pattern (e.g., bills_get_bill, case_law_search, citations_resolve). Even generic tools adhere to this style. No mixing of conventions.
With 35 tools, the count is on the higher side but appropriate for the wide-ranging domain of UK legal research. Each tool contributes to specific sub-domains (bills, case law, citations, committees, HMRC, legislation, parliament, votes) without unnecessary duplication.
The tool surface covers nearly all essential aspects of UK legal research: searching and retrieving bills, case law, and legislation; parsing and resolving citations; exploring committee evidence; accessing Hansard debates and member interests; and checking HMRC guidance and VAT rates. Gaps like full judgment text retrieval are mitigated by paragraph-level access and indexing.
Available Tools
35 toolsbills_get_billGet Bill DetailARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bill_id | Yes | Bill ID from bills_search_bills results. | |
| max_summary_chars | No | Maximum 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. Check summary_truncated in the response to see if it was cut. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Bill ID |
| url | Yes | Parliament URL for this bill |
| is_act | No | Whether the bill has received Royal Assent |
| stages | No | Legislative stages the bill has passed through |
| summary | No | Bill summary text, possibly truncated per max_summary_chars. Check summary_truncated and summary_original_length for full-text info. |
| sponsors | No | Bill sponsors |
| long_title | No | Full long title |
| short_title | Yes | Short title of the bill |
| current_house | No | House where the bill currently sits |
| current_stage | No | Current legislative stage |
| originating_house | No | House where the bill was introduced |
| royal_assent_date | No | Date Royal Assent was given |
| summary_truncated | No | True if summary was cut to fit max_summary_chars |
| summary_original_length | No | Original summary length in characters before any truncation |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent, and non-destructive. The description adds concrete behavioral detail about summary truncation and the summary_truncated response flag, which helps the agent anticipate output limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, roughly four sentences, with a clear 'USE THIS TOOL WHEN' lead and no redundant filler. Each segment (condition, returns, follow-up) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a comprehensive output schema, read-only annotations, and full parameter documentation, the description covers the essential context: when to call, what it returns, truncation behavior, and suggested subsequent actions. It's complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters comprehensively (source of bill_id, default and bounds for max_summary_chars), so the description's mention of truncation adds a minor cross-reference to the response flag but doesn't materially expand on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves full bill detail including sponsors, current stage, long title, summary, and Royal Assent date, and specifies the trigger condition (having a bill_id from bills_search_bills). This distinguishes it from the sibling search tool by framing it as the detail-fetching follow-up.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with an explicit conditional: 'USE THIS TOOL WHEN you have a bill_id (from bills_search_bills) and want the full detail.' It also provides a clear follow-up action (parliament_search_hansard) and alternative search suggestion, though it doesn't explicitly name competing tools to exclude.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bills_search_billsSearch Parliamentary BillsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Filter by originating house. Omit for all houses. | |
| limit | No | Maximum bills to return in this call. Default 20 keeps responses focused; raise up to 100 for bulk exports. | |
| query | Yes | Search term for bill titles and descriptions, e.g. 'online safety' or 'financial services'. | |
| stage | No | Filter by current legislative stage. | |
| offset | No | Number 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. | |
| session | No | Numeric 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bills | No | Matching bills. Use the integer `id` field from any bill to call bills_get_bill for full detail. |
| limit | Yes | Maximum results requested in this call |
| query | Yes | The search term that was used |
| total | No | Total results matching the query across all pages, if the upstream API reported it. None if unknown. |
| offset | Yes | Number of results skipped before this page |
| has_more | Yes | True if more results exist beyond this page. Re-call with offset=offset+returned to fetch the next page. |
| returned | Yes | Number of results actually on this page |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, lowering the bar for behavioral disclosure. The description adds useful context beyond annotations: results are a paginated page of bill summaries containing title, current stage, and Act status, and the tool is an authoritative source. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the usage trigger, and every sentence earns its place: what the tool searches, what it returns, and what to do next. There is no filler or redundant repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values need no further explanation. The description covers search scope, result shape (paginated summaries with key fields), and the follow-up workflow to bills_get_bill, making it complete for a search tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter already well described in the input schema. The description only lightly reinforces that query/session/house/stage are the filter dimensions and adds no new parameter-level semantics. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'USE THIS TOOL WHEN searching UK parliamentary bills' and names the exact resource (parliamentary bills) and filter dimensions (keyword, session, house, legislative stage). It clearly distinguishes itself from the sibling bills_get_bill by positioning search as the precursor and pointing to the get tool for full detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit trigger ('USE THIS TOOL WHEN') and clear context: searching UK parliamentary bills with optional filters. It also gives follow-up guidance to call bills_get_bill with a bill_id for full detail, which serves as an alternative. It does not explicitly state when not to use it relative to broader legislation_search, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
case_law_grep_judgmentSearch within a UK Court JudgmentARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | TNA judgment slug, e.g. 'uksc/2024/12' or 'ewca/civ/2023/450'. | |
| pattern | Yes | Regex pattern (or plain substring) to search within paragraph text. If the pattern doesn't compile as regex, falls back to literal substring match. | |
| max_hits | No | Cap on number of hits returned. | |
| case_insensitive | No | Default true. Set false for case-sensitive matching. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | Yes | Matching paragraphs in document order |
| slug | Yes | The judgment slug that was searched |
| pattern | Yes | The pattern that was searched for |
| truncated | Yes | True if hit count reached max_hits and more matches may exist |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering safety. The description adds valuable behavioral context: it returns only small snippets (not full paragraphs), and it discloses the regex fallback to literal substring search if compilation fails. This goes beyond the annotations and is helpful for setting expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with a directive usage trigger, followed by concise notes on return format, post-processing, and fallback behavior. It contains no redundant filler, though the 'AFTER calling' clause could be seen as slightly verbose but is still informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, output schema present), the description covers purpose, usage, output format, and follow-up actions, which is sufficient for tool selection. It does not mention max_hits or case_insensitive defaults, but those are already well-documented in the schema, so the description need not repeat them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add new parameter-level meaning beyond the schema; it only restates the regex fallback already present in the pattern property description. The schema itself documents all four parameters well, so no extra benefit is derived from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool searches paragraphs within a specific UK court judgment matching a pattern, using a specific verb and resource. It also distinguishes from siblings by explicitly mentioning judgment_get_index for paragraph-number navigation and judgment_get_paragraph for reading full paragraphs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'USE THIS TOOL WHEN you have a judgment slug and want to find paragraphs whose text matches a pattern', providing a clear trigger condition. It also gives a concrete use case, an explicit alternative for index navigation, and follow-up guidance to retrieve full paragraphs, making usage guidance explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
case_law_searchSearch UK Case LawARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Result page number (1-indexed) | |
| court | No | Filter 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', 'eat', 'ukut/iac', 'ukut/aac', 'ukut/tcc', 'ukut/lc', 'ukftt/tc', 'ukftt/grc', 'nica', 'niqb'. | |
| judge | No | Filter 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 the result set — do not append 'JSC', 'of Allermuir', 'KC' etc. Speculating a fuller form than what TNA indexed will return 0 hits with no error. | |
| limit | No | Maximum 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). | |
| party | No | Filter by party name | |
| query | Yes | Full-text search query, e.g. 'negligence duty of care' | |
| to_date | No | Latest judgment date (YYYY-MM-DD). Same caveat as `from_date` — currently silently ignored by upstream. Filtering happens client-side at best. | |
| from_date | No | Earliest 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 client-side or refine `query` instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Current page number (1-indexed) |
| results | Yes | Matching judgments for this page |
| has_more | Yes | Whether additional pages exist |
| total_pages | No | Total page count if available from API |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important quirks beyond the annotations: from_date and to_date are silently ignored by the upstream endpoint, judge honorifics zero the result set, and coverage only starts from the early 2000s. These details complement the read-only/idempotent hints and give the agent realistic expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: a direct usage directive, a clear post-call workflow, and focused caveats. Every sentence contributes practical guidance, and the length is justified by the tool's complexity and the number of quirks it must convey.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers return value shape (neutral citation, court, dates, slug, TNA URI), integration with sibling tools, coverage limitations, and a note on authoritative sources. This gives the agent a complete operational picture beyond what the schema and annotations provide.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description adds essential parameter behavior: the date filters are unreliable, the judge parameter needs a bare surname to avoid silent zero results, and limit slices client-side. This meaningfully extends the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear directive: 'USE THIS TOOL WHEN searching UK case law by party names, court, judge, date, or free-text query.' This names the specific resource and lists the search criteria, clearly distinguishing it from sibling tools that retrieve judgment components or resolve citations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance and names alternatives: pass slug into judgment_get_header / judgment_get_index / judgment_get_paragraph for content, use case_law_grep_judgment for text within a single judgment, and citations_resolve to verify citations. It also advises against using web search as a supplement, giving a clear exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
citations_format_oscolaFormat OSCOLA Citation StringARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | 'raw' from citations_resolve. Used as-is for EU retained law — the original text preserves the Regulation/Directive distinction. | |
| page | No | 'page' from citations_resolve (starting page in the law report). | |
| year | No | 'year' from citations_resolve. | |
| court | No | 'court' from citations_resolve, e.g. 'UKSC', 'EWCA CIV', 'EWHC (KB)'. | |
| number | No | 'number' from citations_resolve (judgment number within the year). | |
| volume | No | 'volume' from citations_resolve (law report volume, if any). | |
| section | No | 'section' from citations_resolve, e.g. '47', '12', '20A'. | |
| si_year | No | 'si_year' from citations_resolve. | |
| si_number | No | 'si_number' from citations_resolve. | |
| confidence | Yes | '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. | |
| resolved_url | No | 'resolved_url' from citations_resolve. Must be non-null for neutral citations. | |
| citation_type | Yes | 'type' field from citations_resolve result. | |
| report_series | No | 'report_series' from citations_resolve, e.g. 'WLR', 'AC', 'QB'. | |
| legislation_title | No | 'legislation_title' from citations_resolve, e.g. 'Companies Act 2006'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses refusal behavior: 'Refuses (status: upstream_validation) if confidence is 0.0... or if a neutral citation has no resolved_url.' It also states 'no network call' and warns against manufacturing citations. This adds significant behavioral context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the critical workflow instruction and is organized into short, purposeful sentences. There is some repetition ('do NOT construct the input fields yourself' and 'do not guess'), but it is a safety-critical guardrail that benefits from emphasis. Overall, every sentence earns its place, though minor tightening could remove redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 parameters, multiple citation types) and the existence of an output schema, the description fully covers what an agent needs: the pipeline sequence, refusal conditions, the anti-fabrication rule, and the authoritative format. It does not explain return values, but the output schema covers that. The description is complete for its role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully explains each parameter. The description adds an overarching rule that all parameters must come from citations_resolve, but this is more of a usage guideline than parameter semantics. The schema already covers details like confidence refusal and the EU-retained-law raw handling, so the description adds no new per-parameter meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'produce the correctly formatted OSCOLA citation string.' It also distinguishes from siblings by explicitly saying 'USE THIS TOOL AFTER citations_resolve,' placing it clearly in the pipeline relative to citations_parse and citations_resolve.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'USE THIS TOOL AFTER citations_resolve' and 'Pass the parsed fields returned by citations_resolve directly into this tool.' It also gives strong exclusions and failure-handling instructions: 'DO NOT construct the input fields yourself,' 'surface the failure and ask the user for the source URL or better identifying details.' This is comprehensive and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
citations_networkGet Case Citation NetworkARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| case_uri | Yes | TNA 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/' prefix. |
Output Schema
| Name | Required | Description |
|---|---|---|
| eu_refs | No | Retained EU law references, e.g. 'Regulation (EU) 2016/679' |
| si_refs | No | Statutory Instrument references, e.g. 'SI 2018/1234' |
| case_uri | Yes | The judgment URI that was fetched and parsed |
| law_report_refs | No | Law report citations, e.g. '[2020] 1 WLR 100' |
| total_citations | Yes | Sum of all de-duplicated citations across every bucket |
| legislation_refs | No | Legislation section references, e.g. 's.47 Companies Act 2006' |
| neutral_citations | No | Neutral citations referenced, e.g. '[2020] UKSC 14' |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly/idempotent/non-destructive. The description adds valuable behavior details: fetching judgment XML from TNA, parsing OSCOLA citations, grouping by type, deduplicating, and sorting. It also discloses that the tool does not resolve citations, which is a key behavioral limitation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the usage condition and is organized into three focused paragraphs. All sentences contribute useful context, though the format is slightly more verbose than necessary for the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the input precondition (judgment slug), what the tool does (parse TNA XML for OSCOLA citations), output characteristics (grouped, deduplicated, sorted), and follow-up action (use citations_resolve). With an output schema present, it is fully complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description for case_uri is thorough (slug format, use 'uri' field, no prefix), providing 100% coverage. The description only reiterates the concept of a 'judgment slug' without adding new parameter-level semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool maps all citations a judgment makes, including cases, legislation, SIs, and retained EU law. It distinguishes itself from sibling tools by emphasizing the network-wide mapping and integration with citations_resolve.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly starts with 'USE THIS TOOL WHEN you have a judgment slug and want to map every citation it makes' and directs the user to pass citations through citations_resolve after. This provides clear when-to-use and a follow-up alternative, aligning with the sibling tool's purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
citations_parseParse OSCOLA CitationsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Free 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), retained EU law (Regulation (EU) 2016/679). Max 50,000 chars. | |
| disambiguate | No | Default 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 division. Opt in only when you want best-effort division resolution and accept that a model shapes the result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ambiguous | Yes | Citations with confidence < 0.7; may have been partially disambiguated via sampling |
| citations | Yes | All successfully parsed citations (confidence >= 0.7) |
| text_length | Yes | Character length of the input text |
| parse_duration_ms | Yes | Time taken to parse, in milliseconds |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description adds critical behavioral context: parsing is pure regex by default, optional disambiguation invokes the client's own LLM via MCP sampling, and recognition of citation shape does not guarantee document existence. This meaningfully informs the agent of limitations and side effects (model-in-the-loop) that annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: a bolded usage trigger, a list of supported citation types, parsing behavior, and a follow-up instruction. It is front-loaded with the most important 'when to use' information and every sentence contributes operational value without redundancies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 parameters, an output schema, and rich sibling context, the description fully covers the essential operational details: input type, output scope, disambiguation behavior, URL resolution, and the requirement to verify via citations_resolve. It clearly differentiates itself from the resolve and format siblings, so an agent can select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the parameter descriptions already fully explain the text and disambiguate parameters. The tool description repeats the supported citation types and the disambiguation behavior, adding little new semantic value beyond the schema. It does hint at URL resolution as output, but that is not a parameter-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('extract and classify every OSCOLA-style citation') and identifies the target resource (free text). It lists concrete citation types and explicitly separates itself from sibling tools like citations_resolve by stating what it does not do (confirm existence). The verb and scope are precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use the tool ('USE THIS TOOL WHEN you have free text... and want every OSCOLA-style citation... extracted and classified') and explicitly directs the agent to follow up with citations_resolve for verification. It does not explicitly say when not to use it, but the alternative/next-step guidance is strong and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
citations_resolveResolve Single OSCOLA CitationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| citation | Yes | A single OSCOLA citation to parse and resolve. E.g. '[2024] UKSC 12', 'SI 2018/1234', 's.47 Companies Act 2006' |
Output Schema
| Name | Required | Description |
|---|---|---|
| raw | Yes | Original citation text as found in the source |
| page | No | Starting page in the law report |
| type | Yes | Classification of the citation type |
| year | No | Year component of the citation |
| court | No | Court 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) |
| number | No | Judgment number within the year |
| volume | No | Report volume number (for law reports) |
| section | No | Section number referenced |
| si_year | No | SI year (for SI YYYY/NNN citations) |
| si_number | No | SI number |
| confidence | Yes | Parse confidence 0.0–1.0. Citations below 0.7 are ambiguous and may have been sent for LLM disambiguation. |
| resolved_url | No | TNA Find Case Law or legislation.gov.uk URL if successfully resolved |
| report_series | No | Law report series abbreviation: WLR, AC, QB, KB, Ch, All ER, EWCA Civ, etc. |
| legislation_title | No | Title of legislation (for s.NN Act YYYY citations) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly discloses behavior beyond annotations: it performs a live TNA HEAD check, sets confidence to 0.0 on non-200, raises ToolError with a transient error category and retryable flag, and attempts one retry. These details are not present in the annotations and are critical for agent decision-making.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a bold imperative, followed by concise actionable sections covering resolution behavior, error handling, and anti-fabrication guidance. Every sentence adds value; there is no repetition of schema/annotation content or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a network-dependent resolution tool, the description covers the full context: live verification, failure semantics, retry behavior, and the safe fallback when resolution fails. The presence of an output schema means return-value details need not be spelled out, and the description still provides enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the single parameter with examples. The description adds further semantic context by enumerating citation types ('neutral citation, SI, legislation section, retained EU law') beyond the schema examples, and explains the resolution behavior tied to the parameter, adding value over the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'Parses + resolves a single citation ... and returns parsed fields plus resolved_url.' It clearly distinguishes itself from siblings by instructing to use this tool BEFORE constructing an OSCOLA citation string from known fields, separating it from formatting and parsing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('USE THIS TOOL BEFORE constructing an OSCOLA citation string from known fields, OR to confirm a citation points at a real document') and when not to ('Do NOT format or quote a confidence-0.0 citation'). It warns against fabrication but does not explicitly name alternative sibling tools, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
committees_get_committeeGet Committee DetailARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| committee_id | Yes | Committee ID from committees_search_committees results. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Committee ID |
| url | No | Parliament URL for this committee |
| name | Yes | Committee name |
| No | Contact email | |
| house | No | Commons, Lords, or Joint |
| phone | No | Contact phone number |
| members | No | Current committee members |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, lowering the burden. The description adds valuable behavioral context by noting that committee detail and member list are fetched in parallel, and it reveals the intended follow-up workflow. This goes beyond simple safety disclosure, though it doesn't detail response structure or pagination (which are covered by the output schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the key usage condition, followed by the action and a next-step suggestion. Every sentence provides distinct value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter get-by-ID tool with rich annotations and an output schema, the description fully covers the necessary context: when to use it, what it returns, and what to do next. The workflow hint to committees_search_evidence completes the contextual picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter committee_id is already well-described in the schema as coming from committees_search_committees results. The description does not add additional semantic meaning beyond that, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool fetches committee detail and member list, with an explicit 'USE THIS TOOL WHEN...' condition. It distinguishes itself from sibling search tools by requiring a committee_id and focusing on metadata + membership.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance ('when you have a committee_id and want metadata + current membership') and adds a workflow pointer to committees_search_evidence. However, it does not explicitly state when not to use it or name alternative tools for lookup scenarios, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
committees_search_committeesSearch Parliamentary CommitteesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Filter by house. | |
| limit | No | Maximum committees to return. Default 100 comfortably covers all currently-active UK select committees. Raise only for historical sweeps. | |
| query | No | Search term for committee names, e.g. 'defence' or 'treasury'. Filtered client-side against committee names. Omit to list all committees. | |
| active_only | No | If true, only return currently active committees. |
Output Schema
| Name | Required | Description |
|---|---|---|
| house | No | House filter applied, or None |
| query | No | Name substring filter applied, or None |
| total | Yes | Number of committees returned in this call |
| committees | No | Matching committees. Use committees_get_committee for membership detail. |
| active_only | Yes | Whether results were restricted to currently active committees |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful context about the return values ('committee summaries (name, house, active status, ID)') and the recommended next steps, but it does not disclose any non-obvious behaviors (e.g., client-side filtering, pagination details) that are not already in the schema. Given the annotations, the description adds moderate value beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and efficient, with only two sentences. It front-loads the primary purpose in the first sentence and packs follow-up guidance into the second, avoiding any fluff or redundant repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a robust input schema (100% coverage), output schema, and comprehensive annotations (readOnlyHint, idempotentHint, destructiveHint), the description only needs to clarify the tool's role and workflow. It does so effectively, including the critical downstream step of passing committee_id to other tools, making it complete for the given complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, meaning every parameter (house, limit, query, active_only) has a description in the input schema. The tool description does not add any additional parameter-specific semantics beyond what the schema already provides, so it meets the baseline of 3 without elevating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('searching or listing') and resource ('UK parliamentary select committees'), with clear filtering dimensions ('by name, house, or active status'). It also distinguishes itself by referencing downstream tools (committees_get_committee, committees_search_evidence), clearly separating its role from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening instruction 'USE THIS TOOL WHEN' explicitly marks the intended use case. It also provides clear context by describing the follow-up workflow ('AFTER calling, pass committee_id into...'), but it does not explicitly name alternatives when this tool should NOT be used, though sibling tool differentiation is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
committees_search_evidenceSearch Committee EvidenceARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum evidence items to return. Default 20. When evidence_type='both' the limit is split across oral and written (roughly half each). | |
| offset | No | Number of evidence items to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true. | |
| committee_id | Yes | Committee ID from committees_search_committees results. | |
| evidence_type | No | Type of evidence to search. | both |
| max_title_chars | No | Per-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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | Yes | Max evidence items requested for this page |
| offset | Yes | Number of evidence items skipped before this page |
| evidence | No | Evidence items in this page. Titles are capped per max_title_chars; witness lists are capped at 10 per item. |
| has_more | Yes | True 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 came back full. |
| returned | Yes | Number of evidence items actually returned in this call |
| committee_id | Yes | Committee ID this page belongs to |
| evidence_type | Yes | Evidence type filter applied to this query |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations (readOnly, idempotent, non-destructive) by disclosing pagination behavior (returns one page, default 20), caps on title length per max_title_chars, witness list cap at 10 per item, and the offset/has_more pagination pattern. These are valuable operational details not present in the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with the directive 'USE THIS TOOL WHEN' front-loaded. Each sentence delivers a distinct piece of information: when to use, page size, caps, pagination loop, and authority. No filler or redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, pagination, caps), the description covers all essential behavioral aspects: pagination loop, cap behavior, and authoritative status. The presence of an output schema removes the need to describe return structure, and annotations already cover safety traits. Overall, the description is complete for effective tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 is appropriate. The description adds meaningful supplemental context by directly referencing max_title_chars for title capping and offset for pagination, explaining the split between oral and written evidence in the 'both' case, and reinforcing the limit/offset behavior. This adds value beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieving oral and written evidence submitted to a committee given a committee_id. It uses a specific verb ('search') and resource ('committee evidence'), and distinguishes it from sibling tools like committees_get_committee and committees_search_committees by focusing on evidence retrieval rather than committee metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with an explicit 'USE THIS TOOL WHEN' condition, providing clear context for when to invoke it. It also includes pagination guidance (re-call with offset while has_more) and notes the 'authoritative source' aspect. However, it does not explicitly mention alternatives or when not to use it, which prevents a top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_promptARead-onlyIdempotentInspect
Get a prompt by name with optional arguments.
Returns the rendered prompt as JSON with a messages array. Arguments should be provided as a dict mapping argument names to values.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the prompt to get | |
| arguments | No | Optional arguments for the prompt |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds value by disclosing the return format (JSON with a messages array) and the argument mapping requirement, which is beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with the main action. No redundancy or filler; each sentence provides useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a good annotations set and an output schema (mentioned in context), the description covers the essential aspects: what it does, how arguments are provided, and the return shape. Minor omission: no mention of error behavior (e.g., prompt not found), but not critical for a simple get operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful semantics by clarifying that arguments should be a dict mapping names to values, which is more specific than the schema's 'Optional arguments for the prompt'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets a prompt by name with optional arguments, using the specific verb 'get' and naming the resource. It distinguishes itself from sibling tools like list_prompts by focusing on retrieving a single named prompt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call it when you know the prompt's name and need its rendered content. It doesn't explicitly mention alternatives or exclusions, but the context is clear enough that users would understand it's for targeted retrieval, not listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hmrc_check_mtd_statusCheck MTD VAT StatusARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| vrn | Yes | VAT Registration Number: 9 digits, e.g. '123456789'. GB prefix accepted and stripped automatically. |
Output Schema
| Name | Required | Description |
|---|---|---|
| vrn | Yes | VAT Registration Number queried |
| mandated | Yes | Whether this business is mandated for MTD VAT |
| trading_name | No | Registered trading name if available |
| effective_date | No | Date from which MTD obligation applies |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly and idempotent, and the description adds valuable behavioral context: default sandbox connection, production override via HMRC_API_BASE, required OAuth credentials, and that it raises if credentials are missing. This goes beyond the structured fields without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose, followed by return details and environment notes. Every sentence provides value, though the environment configuration section could be trimmed without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers the main use case, return fields, environment defaults, and error behavior. The presence of an output schema further reduces the need to explain return format, making this complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the only parameter (vrn) with format and example, and the description does not add new parameter information. With schema coverage at 100%, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'USE THIS TOOL WHEN you have a 9-digit VAT Registration Number and need that business's Making Tax Digital VAT mandate status.' It clearly explains the return value (mandated status, effective date, trading name) and distinguishes from other HMRC tools like hmrc_get_vat_rate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit trigger: 'USE THIS TOOL WHEN you have a 9-digit VAT Registration Number and need that business's Making Tax Digital VAT mandate status.' It also gives environment setup and warns against inferring status without credentials, though it does not name alternative tools for when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hmrc_get_vat_rateGet VAT Rate for CommodityARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| commodity_code | Yes | Commodity code or plain-English description. E.g. 'food', 'domestic fuel', 'software', 'financial services', 'new build residential' |
Output Schema
| Name | Required | Description |
|---|---|---|
| rate | Yes | VAT rate category |
| notes | No | Any additional notes or conditions on this rate |
| commodity_code | Yes | Commodity code or description queried |
| effective_from | Yes | Date from which this rate applies |
| rate_percentage | Yes | Applicable rate as percentage: 20.0 (standard), 5.0 (reduced), 0.0 (zero/exempt) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint), the description discloses a critical behavioral trait: the tool uses a static lookup table current as of Nov 2023 and may be outdated. This is valuable context that helps the agent assess reliability and decide whether to cross-verify.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the key usage instruction. Each sentence provides distinct value: purpose, return contents, and caveat about data recency. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with rich annotations and an output schema, the description is thorough. It covers what the tool does, when to use it, what it returns, and a crucial limitation. No important context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with a clear description and examples for commodity_code. The tool description adds no additional parameter-level semantics, so the baseline of 3 applies as the schema carries the explanation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to get the VAT rate category for a UK commodity or service description. It specifies the exact output (standard/reduced/zero/exempt rates, effective date, conditions) and distinguishes itself from sibling tools like hmrc_search_guidance, which is for general guidance lookups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description begins with 'USE THIS TOOL WHEN' to explicitly define the intended use case. It also provides an alternative for time-sensitive advice, directing users to hmrc_search_guidance, which qualifies as explicit when/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hmrc_search_guidanceSearch HMRC GuidanceARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum guidance results to return (1–25). Passed to the GOV.UK search count param. | |
| query | Yes | Search query for HMRC guidance, e.g. 'VAT digital services', 'R&D tax relief SME' |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | The search query that was run |
| total | Yes | Number of guidance documents returned in this call |
| results | No | Matching HMRC guidance pages. Each entry's `summary` is capped per the max_summary_chars input parameter. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds value by disclosing that it queries the official GOV.UK content API filtered to HMRC publications and that it returns titles, URLs, summaries, and last-updated dates. This goes beyond the safety annotations to clarify the data source and return payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the key when-to-use directive. Every sentence serves a purpose: the search scope, the return fields, the data source, and the authoritative nature. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema is present and annotations declare the safety profile, the description is complete for an agent to select and invoke the tool correctly. It covers the source, scope, return contents, and even warns against using web search as an alternative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'query' and 'limit' having descriptive definitions and example values. The description itself adds minimal parameter semantics, but the schema fully covers parameter meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool searches GOV.UK for HMRC tax guidance on specific topics like VAT and income tax. It clearly identifies the resource (HMRC guidance) and the action (search), separating it from sibling search tools for legislation or parliament.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It begins with 'USE THIS TOOL WHEN searching GOV.UK for HMRC tax guidance' and explicitly warns against web search, stating it returns out-of-date or third-party reproductions. This provides clear when-to-use and when-not-to-use guidance, and implicitly distinguishes it from other search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
judgment_get_headerGet Judgment HeaderARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Judgment slug, e.g. 'uksc/2024/12' or 'ewca/civ/2023/450' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive. Description adds useful context about being the authoritative source for UK judgment metadata, and the workflow context. No contradiction or hidden behavior disclosed, but adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with 'USE THIS TOOL WHEN', each sentence earns its place: usage trigger, workflow, authority. No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter, full schema coverage, output schema present, and strong annotations, the description covers the workflow, tool distinction, and metadata scope. Complete for a simple read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description and examples for the 'slug' parameter. The description adds the context of needing a slug from case_law_search but doesn't provide new parameter-level semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'get metadata' for a judgment header, with explicit list of metadata types (parties, judges, neutral citation, court, dates). Clearly distinguishes from siblings judgment_get_index and judgment_get_paragraph by focusing on header metadata vs paragraphs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'when you have a judgment slug and need metadata'. Provides workflow: call case_law_search first, then use judgment_get_index/paragraph. Naming alternatives and prerequisite tools makes usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
judgment_get_indexGet Judgment Paragraph IndexARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Judgment slug, e.g. 'uksc/2024/12' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so safety is covered. The description adds that the tool returns an eId and preview line for every paragraph, which is useful behavioral context beyond the annotations. It does not mention error handling or pagination, but the output schema likely covers return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the usage trigger. Every sentence provides necessary information: what it does, when to use it, and how it fits with other tools. No wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with rich annotations and an output schema, the description fully covers purpose, usage, and relationships to related tools. It even includes the output format (eId + preview line), making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the single 'slug' parameter with an example. The description adds value by explaining how to obtain the slug ('Call case_law_search FIRST to get the slug'), which is not in the schema. Since schema coverage is 100%, the baseline is 3, and the workflow hint lifts it to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'get the paragraph navigation index (eId + preview line for every paragraph)' with a specific verb and resource. It clearly distinguishes from siblings by mentioning judgment_get_paragraph for full text and case_law_grep_judgment for content search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'USE THIS TOOL WHEN you have a judgment slug and want the paragraph navigation index', and provides a clear workflow: call case_law_search first to get the slug, then pass an eId to judgment_get_paragraph or use case_law_grep_judgment. This gives both when-to-use and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
judgment_get_paragraphGet Judgment ParagraphARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| eId | Yes | Paragraph eId from judgment_get_index, e.g. 'para_12'. Numeric strings like '12' are accepted and normalized to 'para_12'. | |
| slug | Yes | Judgment slug, e.g. 'uksc/2024/12' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description adds value by stating it returns paragraph XML content and a typical token range. It could mention error handling or what happens if eId is invalid, but the key behavior is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no fluff. The purpose is front-loaded, and each sentence adds crucial navigational or return-value information. Perfectly sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full annotations, the description still manages to provide essential workflow (call judgment_get_index first) and alternative search method. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and includes a detailed eId description with normalization rule. The description itself doesn't add new parameter details beyond referencing them, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets a judgment paragraph's full text given a slug and eId. It distinguishes from siblings by explicitly routing users to judgment_get_index for eIds and case_law_grep_judgment for content-based search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use criteria ('when you have a judgment slug + LegalDocML eId and want that paragraph's full text') and names alternatives (judgment_get_index, case_law_grep_judgment). This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legislation_get_sectionGet Legislation SectionARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Legislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results. | |
| year | Yes | Year of enactment | |
| number | Yes | Chapter or SI number | |
| section | Yes | Section number, e.g. '47' or '12A'. Use the numeric part only — not 'section-47'. Schedules are not currently supported. | |
| max_chars | No | Maximum 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_truncated in the response to see if it was cut. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | Section title or heading |
| extent | No | Territorial extent: list of 'England', 'Wales', 'Scotland', 'Northern Ireland'. Empty list means unknown — do not assume full UK extent. |
| content | Yes | Plain text content of the section, possibly truncated per max_chars. Check content_truncated and original_length for full-text information. |
| in_force | No | False 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 per-section current in-force boolean; null does not mean repealed. |
| warnings | No | Non-fatal retrieval or parsing warnings the caller should disclose where relevant. |
| prospective | No | True if this section has not yet come into force; None if unknown |
| version_date | No | Date of the version retrieved |
| source_format | No | Source parsed for this response. html_fallback means CLML XML was unavailable and text was parsed from the public HTML page. |
| section_number | Yes | Section number, e.g. '47', '12A', 'Schedule 2' |
| original_length | No | Original plain-text length in characters before any truncation |
| content_truncated | No | True if content was cut to fit max_chars |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive. The description adds valuable behavioral context beyond annotations: content truncation via max_chars, the content_truncated response field, and the extent-check warning. It also mentions the 'prospective flag' as an output trait, so the agent knows what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a bolded 'USE THIS TOOL WHEN' and organized into clear paragraphs. It is somewhat wordier than necessary (e.g., repeating default token count), but every section serves a distinct purpose—purpose, return details, warning, alternative—making it efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a read tool with an output schema: it covers the intended use case, key output fields (extent, in-force, prospective flag), truncation behavior, a critical legal-research caution, and an explicit alternative. It also tells the user to get type/year/number from legislation_search, which is helpful. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for every parameter, including max_chars default and guidance to check content_truncated. The description adds minimal extra meaning beyond schema, mostly reiterating the max_chars behavior. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: '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.' This specific verb+resource+outcome distinguishes it from siblings like legislation_get_toc and read_resource, and it explicitly contrasts with the raw XML alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: when to use the tool ('when you have a known Act / SI'), what to check ('ALWAYS check extent'), and names the alternative ('call read_resource(uri=...) for raw CLML XML'). This is a clear when/when-not with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legislation_get_tocGet Legislation Table of ContentsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Legislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results. | |
| year | Yes | Year of enactment | |
| limit | No | Maximum 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. | |
| number | Yes | Chapter or SI number | |
| offset | No | Number of items to skip from the flattened TOC. Use with limit to page through very large statutes like the Companies Act 2006 (1300+ items). |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | Legislation type code echoed from the request |
| year | Yes | Year of enactment echoed from the request |
| items | No | TOC 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'). |
| limit | Yes | Page size applied after offset |
| number | Yes | Chapter or SI number echoed from the request |
| offset | Yes | Offset applied to the full TOC item list |
| has_more | Yes | True if more items remain beyond offset+returned |
| returned | Yes | Number of items in this response |
| total_items | Yes | Total structural items parsed from the XML, before offset/limit. Compare to `returned` and `has_more` to decide whether to paginate. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context: pagination via offset/limit, has_more/total_items fields, and a note about stripping the 'section-' prefix when passing IDs to legislation_get_section.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with an explicit use case and is well-structured into purpose, return elements, pagination, and alternative. It is longer than strictly necessary, but each sentence adds value and the structure helps an agent parse it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, pagination, output schema), the description covers the essential context: when to use it, how pagination works, what the returned elements look like, and how the output relates to sibling tool legislation_get_section. With annotations and output schema present, this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some pragmatic guidance (e.g., 'Use the value from legislation_search results' for type, and check has_more/total_items for pagination), but these mostly reinforce the schema rather than providing new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: retrieving the structural table of contents for a known Act/SI, enumerating parts, chapters, sections, schedules. It clearly distinguishes this from sibling tools like legislation_get_section and read_resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'USE THIS TOOL WHEN you have a known Act / SI and want the structural table of contents'. It also provides an alternative (read_resource) and explains when to choose this tool over that alternative (when structured response with pagination is needed).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legislation_searchSearch UK LegislationARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter 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. | |
| year | No | Filter 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 wrong will zero out the result set. Better workflow: query without `year`, then read the year from the returned results. | |
| limit | No | Maximum results to return (1–50). Passed to the upstream results-count param. | |
| query | Yes | Search query, e.g. 'Housing Act 1988' or 'data protection personal data' | |
| fulltext | No | Default 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 (returns SIs and regulations that cite the term — e.g. 'rental deposits' would return many implementing instruments). |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Total number of matches |
| results | Yes | Matching legislation items |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly=true, openWorld=true, idempotent=true, destructive=false; the description adds concrete behavioral details: ranked results with fields (title, type, year, number, URL), next_steps hints, and the zeroing-out risk when filtering by a guessed year. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured, front-loading the purpose in the first sentence and using bolded warnings and examples. Every sentence provides actionable guidance, and no filler or redundancy is present, despite its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers what an agent needs to select and invoke the tool: when to use it, how to filter, what to expect in results, and how to chain it with sibling tools. With an output schema also present and comprehensive annotations, the description is contextually complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description enriches parameter semantics with strategic guidance: 'guessing a year and filtering by it zeroes results when wrong', the phrase-plus-read-year workflow, and clear guidance on when to set fulltext=True. This adds real decision-making value beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'USE THIS TOOL WHEN searching UK Acts and Statutory Instruments by title, phrase, or full-text,' which specifies a concrete verb, resource, and scope. It clearly differentiates from sibling tools like case_law_search and bills_search_bills by targeting UK legislation, and from legislation_get_toc/section by focusing on search rather than drill-down.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit usage guidance: 'USE THIS TOOL WHEN...', a chaining workflow ('AFTER calling, chain to legislation_get_toc then legislation_get_section'), and filter discipline ('Use only when you already know the value' for exact-match filters). It also offers alternative strategies for currency-driven and full-text queries, making when-to-use vs. alternatives clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_promptsARead-onlyIdempotentInspect
List all available prompts.
Returns JSON with prompt metadata including name, description, and optional arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that the tool returns JSON with prompt metadata, but provides no additional behavioral details such as pagination or rate limits. Minimal added value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action 'List all available prompts', and includes a brief note on return format. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with comprehensive annotations and an available output schema, the description is complete. It states the purpose and the general shape of the return value, without needing to list fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so the schema fully documents parameters. Per the rubric, 0 params yields a baseline of 4. The description needs no further parameter explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'all available prompts', which distinguishes it from sibling get_prompt. It also specifies the return format (JSON with metadata), leaving no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'List all available prompts' provides clear context: use this when you need to enumerate all prompts. It does not explicitly mention alternatives like get_prompt, but the scope is unambiguous for a simple list operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_resourcesARead-onlyIdempotentInspect
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}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds valuable contextual detail by specifying that the output is JSON with metadata, and that static resources have a 'uri' field while templates use a 'uri_template' field with placeholders. This goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with the primary action in the first sentence and a concise elaboration of the return format in the second. Every word adds value, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool, the description is complete. It covers the resource types (static vs. templates) and the field naming convention. The presence of an output schema handles detailed return structure, and annotations cover behavioral traits, so no other context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter semantics are trivially satisfied by the schema. According to the baseline for 0 params, a score of 4 is appropriate. The description does not attempt to document nonexistent parameters, but it does clarify the output structure, which is not parameter-related.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all available resources and resource templates, using the specific verb 'List' and naming the resource type. It distinguishes from sibling tools like read_resource by the broader scope of 'all available resources and templates'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for enumerating resources, but it does not explicitly provide when-to-use or when-not-to-use guidance, nor does it mention alternatives such as read_resource or list_prompts. The context is clear but no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parliament_find_memberFind Member of ParliamentARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a member's name and need their integer member_id.
Returns all members matching the name query, each with the integer id,
party, constituency, house, and current-sitting status. Disambiguates
common-name matches (e.g. "Lord Smith" returns multiple peers).
CALL THIS BEFORE any tool that filters by member_id — including parliament_get_debate_contributions, parliament_member_debates, and parliament_member_interests. Name → ID first; ID-based filtering second. Skipping this step and text-searching by name returns unrelated results (see parliament_search_hansard's anti-bypass note for the Pannick case).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name or partial name, e.g. 'Starmer', 'Baroness Hale' |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | The name that was searched |
| total | Yes | Number of members matching the query |
| members | No | Matching members. Use the integer `id` field from any member to call parliament_member_debates or parliament_member_interests. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive hints, and the description adds valuable behavioral context: returns all matches with listed fields, handles common-name disambiguation (e.g., 'Lord Smith'), and does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the critical usage directive, then concisely details return behavior, disambiguation, and prerequisite relationships. Every sentence earns its place; there is no fluff despite the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists, the description enriches the context by explaining the tool's role in the broader workflow, return content, and disambiguation behavior. It sufficiently covers all details needed for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the single parameter with a clear description and examples ('Starmer', 'Baroness Hale'). The tool description adds no additional parameter semantics beyond reinforcing the name-to-ID purpose, so the high schema coverage baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool resolves a member's name to an integer member_id, with a clear verb and resource. It distinguishes it from sibling tools by framing it as a prerequisite lookup for member_id-based filtering, unlike direct search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit 'USE THIS TOOL WHEN' instruction and names specific alternatives to call before (parliament_get_debate_contributions, etc.). It also gives a negative example (text-searching by name returns unrelated results) and references the Pannick case, making when/when-not boundaries very clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parliament_get_debate_contributionsGet Contributions In A DebateARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| member_id | No | Optional 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, every contribution in the debate is returned (typical debate: 100-200 items). | |
| debate_ext_id | Yes | Debate 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | Page size requested |
| topic | No | Topic phrase filter applied, if any |
| total | Yes | Number of contributions returned in this call |
| offset | No | Skip applied to this page |
| has_more | No | True if a full page was returned (more may exist) |
| member_id | Yes | Parliament Members API member ID |
| contributions | No | Hansard contributions for the member. Each `text` field is capped at 3000 characters. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds valuable behavioral context: without member_id it returns ~100-200 contributions, and it explicitly warns to report empty results honestly rather than reconstructing quotes from training data. This goes beyond the annotations and helps the agent set expectations correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence earns its place: usage trigger, differentiation, canonical chain, default behavior, and integrity warning. It is front-loaded with the key instruction and structured logically, so the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two parameters and an output schema present, the description covers all necessary context: when to use, how to chain, default output size, member filtering behavior, and a critical honesty constraint. Nothing essential is missing; it fully equips the agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description further adds meaning beyond the schema. It clarifies that member_id filtering works 'regardless of which words they used' and how debate_ext_id is obtained via chaining from search tools. The parameter semantics are fully enriched.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'get debate contributions' with optional member filter. It explicitly distinguishes itself from sibling tools like parliament_member_debates and parliament_search_hansard by emphasizing 'verbatim contributions' and filtering by MemberId rather than text. This makes the tool's unique purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Directly states 'USE THIS TOOL WHEN you have a debate_ext_id and want verbatim contributions,' and explains when not to use text-search alternatives: 'text-search tools filter by contribution TEXT, dropping members who spoke without using your phrase verbatim.' It also provides a typical chain with other tools, offering clear context and exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parliament_get_debate_divisionsGet Divisions Held In A DebateARead-onlyIdempotentInspect
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, passvotes_idasdivision_idinto 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.
| Name | Required | Description | Default |
|---|---|---|---|
| debate_ext_id | Yes | Debate 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| divisions | No | Divisions held in this debate, in chronological order. Empty when no divisions occurred. Each element's `id` chains to votes_get_division. |
| debate_ext_id | Yes | Echo of the input debate GUID. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations indicating safe read-only behavior, the description adds valuable behavioral details: empty list is an honest result, cross-resolve happens once per (date, house) group with an extra HTTP, votes_id can be None, and the two ID spaces are distinct. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the usage condition and contains well-structured bullet points for the two IDs. It is longer than minimal but every sentence adds meaningful context; no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description focuses on critical nuances: the possibility of an empty list, the meaning of votes_id, the cross-resolve behavior, and the None case. This provides a complete mental model for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter debate_ext_id, which already includes a detailed description with chaining sources. The tool description itself adds no additional parameter semantics beyond the usage line, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves divisions (formal votes) held within a debate. It distinguishes itself from siblings like parliament_get_debate_contributions and votes_get_division by focusing on the debate-level divisions list and explicitly referencing the votes_id linkage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'USE THIS TOOL WHEN you have a debate_ext_id and want the divisions'. Also provides when-not-to-use context (most debates have no divisions) and directs users to votes_get_division with the votes_id, giving clear alternative and follow-up guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parliament_lookup_by_columnResolve A Hansard Column CitationARead-onlyIdempotentInspect
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 Itemssource/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.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Restrict to one House. Default 'both' searches across both Houses. | both |
| column_number | Yes | Hansard 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. | |
| volume_number | Yes | Hansard 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). |
Output Schema
| Name | Required | Description |
|---|---|---|
| house | Yes | House filter applied. |
| matches | No | Debate 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 citation's publication state. Resolution is NOT gated on publication state — Daily Part, Bound Volume, and Historic columns all resolve. Empty matches typically mean the volume number is wrong (running-volume vs bound-volume number), the column is a Written Answer/Statement needing its suffix (e.g. '1162W'), or a very recent column not yet indexed upstream. |
| column_number | Yes | Echo of the requested column number. |
| total_results | Yes | Number of debate matches found. |
| volume_number | Yes | Echo of the requested volume number. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the bar is lower. The description adds meaningful behavioral context: resolution is not gated on publication state, empty matches typically indicate a volume-number issue or written statement rather than a fabricated citation, and the failure should be surfaced. This goes well beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and well-structured with clear sections, and most sentences earn their place. The closing 'Authoritative source' line is somewhat rhetorical and the 'Each match carries' section may duplicate output schema details, making it slightly longer than necessary while still being coherent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and rich annotations, the description is complete: it tells the agent exactly when to invoke, how to interpret matches, what empty results mean, and what follow-up actions to take. It also differentiates itself from sibling tools well enough for correct selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by providing a concrete OSCOLA example, emphasizing that volume_number is required and a sitting date is not a substitute, and explaining that column_number is a string to accommodate suffixes like '1162W'. This goes beyond the schema's field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and opening line clearly define the tool's purpose: resolving an OSCOLA-style Hansard citation to the corresponding debate. It explicitly distinguishes this from search-oriented siblings like parliament_search_hansard by naming the exact input form (column + volume + house).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use the tool ('USE THIS TOOL WHEN you have an OSCOLA-style Hansard citation') and provides specific follow-up alternatives (read_resource or parliament_get_debate_contributions). However, it does not explicitly enumerate when-not-to-use cases relative to sibling search tools, so it doesn't reach the maximum.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parliament_member_debatesGet Member DebatesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum contributions to return. Default 20. | |
| topic | No | Optional 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 — distinctive arguments ('disproportionate sanction'), statutory references ('section 21'), or motion numbers ('Motion C1') — not the bill's name (members rarely say e.g. 'Renters\' Rights Bill' verbatim in their speeches). If you want 'every contribution this member made in a specific debate' regardless of words used, find the debate_ext_id then use parliament_get_debate_contributions(debate_ext_id, member_id=...). | |
| offset | No | Number of contributions to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true. | |
| member_id | Yes | Parliament Members API integer ID. Obtain from parliament_find_member. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | Page size requested |
| topic | No | Topic phrase filter applied, if any |
| total | Yes | Number of contributions returned in this call |
| offset | No | Skip applied to this page |
| has_more | No | True if a full page was returned (more may exist) |
| member_id | Yes | Parliament Members API member ID |
| contributions | No | Hansard contributions for the member. Each `text` field is capped at 3000 characters. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only, idempotent, non-destructive behavior, but the description adds valuable context: text-body search semantics, filtering of members who didn't use the phrase, the 3000-character cap on contribution text, and the prerequisite of obtaining member_id. This goes beyond the annotations to explain real behavioral constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear usage directive, followed by a prerequisite, then semantic clarification and an alternative. Each sentence serves a distinct purpose; the length is justified by the tool's complexity and the need to prevent misuse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, well-annotated tool with a rich output schema, the description covers all necessary context: when to use, prerequisites, search semantics, limitations (3000-char cap), and the alternative for complete retrieval. No gaps are evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 100%, the description adds significant meaning, especially for the 'topic' parameter: it clarifies that the search targets the member's actual spoken words, not debate titles, and gives examples of effective search tokens. It also explains offset pagination behavior, enriching the schema's basic parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: retrieving contributions where a specific member used a specific topic phrase verbatim in a text-body search. It distinguishes from the sibling tool parliament_get_debate_contributions by clarifying this is a name-based text-body search, not a full debate retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('USE THIS TOOL WHEN you have a member_id and want contributions where THAT member used a specific topic phrase verbatim'), requires calling parliament_find_member first, and names the alternative tool for retrieving all contributions regardless of vocabulary. This is explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parliament_member_interestsGet Member Financial InterestsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max 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 in totalResults on the response. | |
| offset | No | Number 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=true. | |
| category | No | Filter by interest category. Common categories: 'donations' (donations and support), 'gifts_uk' (gifts/hospitality from UK), 'employment' (employment and earnings), 'land' (land and property), 'shareholdings', 'overseas_visits'. Omit for all categories. | |
| member_id | Yes | Parliament Members API integer ID. Get from parliament_find_member. | |
| max_description_chars | No | Per-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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | Yes | Max interests requested for this page |
| offset | Yes | Number of interests skipped before this page |
| category | No | Category filter applied to this query, or None for all categories |
| has_more | Yes | True if there may be more interests beyond this page. Re-call with offset=offset+returned to fetch the next page. |
| returned | Yes | Number of interests actually returned in this call |
| interests | No | The interests in this page. `description` text is capped per the max_description_chars input parameter. |
| member_id | Yes | Parliament Members API member ID |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations (readOnlyHint, idempotentHint) by detailing pagination behavior (one page of 20, has_more flag), the hard upstream cap on limit (verified live), and the max_description_chars truncation behavior. It also notes that web search returns stale snapshots, adding value. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the key usage signal ('USE THIS TOOL WHEN'), then provides necessary operational detail in clearly separated paragraphs. Every sentence serves a purpose—no filler, tautology, or repetition of schema. It is long but information-dense and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately complex with 5 parameters and pagination behavior, but the description fully covers when to use it, prerequisite steps, pagination, limits, and the authoritative nature of the data. An output schema exists, so return values needn't be detailed. This is complete for the agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% parameter coverage with rich descriptions, so the baseline is 3. The description adds practical semantics like how to paginate (offset=offset+returned while has_more is true) and when to raise max_description_chars for forensic work. This is additional guiding context beyond the schema, so a 4 is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves registered financial interests for a given member_id, listing specific categories (donations, directorships, land, gifts). It distinguishes from siblings by positioning as the authoritative source for MP/peer financial-interest declarations, and explicitly instructs to call parliament_find_member first, which differentiates it from that lookup tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is explicitly conditioned: 'USE THIS TOOL WHEN you have a member_id and need their registered financial interests.' It provides a clear prerequisite (call parliament_find_member first), directs away from web search due to stale data, and gives pagination guidance for prolific members. This is excellent when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parliament_policy_position_summaryHansard Policy Position Summary (deterministic facets)ARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Restrict to one House. Default 'both'. | both |
| topic | Yes | Phrase 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 topic metadata. The aggregator sweeps top_debates[] returned by /search/Debates.json — those debates are matched on the phrase appearing in titles or contribution text, so passing a Bill title (e.g. 'Renters\' Rights Bill') usually works for THIS tool even though it wouldn't for member-level text search, because debate-level matching uses metadata in addition to body text. | |
| to_date | No | End date (YYYY-MM-DD) | |
| from_date | No | Start date (YYYY-MM-DD) | |
| max_debates_scanned | No | Hard 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 topic. Hansard rate limit: 1000 req/5min. |
Output Schema
| Name | Required | Description |
|---|---|---|
| house | Yes | House filter applied |
| topic | Yes | Phrase searched in Hansard |
| by_year | No | Counts of debates by sitting year, desc by year |
| to_date | No | End date filter applied |
| by_house | No | Counts of debates by house (Commons vs Lords) |
| by_party | No | Counts 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://debate/{ext_id}/header. For one member's contributions across the corpus, use parliament_member_debates. |
| from_date | No | Start date filter applied |
| by_section | No | Counts of debates by Hansard section bucket (Chamber / Westminster Hall / Written Answers / Written Statements) |
| top_debates | No | Top 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 secondary call per debate). |
| total_debates | Yes | Total distinct debates touching this topic (TotalDebates) |
| debates_scanned | Yes | Number of debates pulled from /search/Debates.json for the facet breakdown (≤ max_debates_scanned) |
| total_divisions | Yes | TotalDivisions upstream count. Non-zero → consider votes_search_divisions. |
| top_contributors | No | ALWAYS EMPTY in this summary — see by_party note. Use parliament_member_debates after picking a debate from top_debates. |
| by_month_recent_12 | No | Counts of debates by YYYY-MM for the most recent 12 months in the sample, desc by month |
| total_contributions | Yes | Total contributions in Hansard matching topic+filters (TotalContributions) |
| total_written_answers | Yes | TotalWrittenAnswers upstream count |
| total_written_statements | Yes | TotalWrittenStatements upstream count |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint), the description discloses pagination behavior ('Sweeps /search/Debates.json with pagination'), the API rate limit ('1000 req/5min'), and a key data limitation ('Hansard's search API exposes debate metadata, not per-contribution member identifiers'). It also explains why certain facets are omitted (by_party, top_contributors), providing valuable context for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-structured with a clear 'USE THIS TOOL WHEN' opener and separate paragraphs for behavior, follow-up, and limitations. Each section serves a distinct purpose, though the final sentence ('This is the authoritative source...') adds marginal value and could be considered redundant. Still, it is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is exceptionally complete for a complex tool. It explains the input semantics, processing pipeline, output facets, data limitations, and how to proceed after calling. It also references related resources (hansard://debate/...) and alternative tools. With an output schema present, the description does not need to enumerate return fields, but it still gives a clear picture of what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds significant semantic nuance beyond the schema. It explains the `topic` parameter's relationship to parliament_search_hansard.query and clarifies why Bill titles work for this tool despite not working for text search, due to debate-level metadata matching. It also maps max_debates_scanned to upstream call counts and rate limits, enriching the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear directive ('USE THIS TOOL WHEN you want debate-level corpus signals on a topic') and specifies the exact aggregations ('by_house, by_year, by_section breakdowns'). It distinguishes itself from siblings by stating it provides 'Pure counts — no LLM, no editorial labels' and explicitly contrasts with tools like parliament_get_debate_contributions that drill into contributions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool ('when you want debate-level corpus signals... without reading every contribution') and gives follow-up actions ('AFTER calling, pick a debate from top_debates and pass its debate_ext_id into parliament_get_debate_contributions'). It also names alternatives for member-level queries ('call parliament_member_debates' or read the debate header).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parliament_search_hansardSearch Hansard DebatesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Restrict to one House. Default 'both' returns Commons + Lords contributions. | both |
| limit | No | Max contributions per call (1–100). Default 20. Paginate further with offset; total corpus size is in total_corpus on the response. | |
| query | Yes | Phrase 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 would appear in someone's speech: distinctive arguments ('disproportionate sanction'), statutory references ('section 21'), or specific phrases. Bill titles (e.g. 'Renters\'s Rights Bill') often DON'T match because members refer to 'the Bill' or 'this legislation' in their speeches. Tokenised matching: 'housing benefit fraud' will match contributions saying 'fraud in housing benefit claims'. For 'all contributions in a specific debate' regardless of words used, drill via top_debates[].debate_ext_id into parliament_get_debate_contributions. | |
| offset | No | Skip this many contributions before the page. Default 0. Re-call with offset=offset+returned to paginate; has_more flags whether more remain. | |
| to_date | No | End date (YYYY-MM-DD) | |
| from_date | No | Start date (YYYY-MM-DD) | |
| member_id | No | Filter 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 silently ignored it — the spec requires `memberId`. | |
| text_mode | No | '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 resource hansard://debate/{debate_ext_id}/contribution/{contribution_ext_id}. | preview |
| contribution_type | No | Which Hansard section to paginate. 'Spoken' = chamber + Westminster Hall debates (the default; what a lawyer usually means). 'Written' = written answers and statements. 'Corrections' = published corrections to the record. The corpus envelope (total_debates, total_divisions, etc.) is independent of this and always populated. | Spoken |
Output Schema
| Name | Required | Description |
|---|---|---|
| house | No | House filter applied |
| limit | No | Page size requested |
| query | Yes | The phrase that was searched in Hansard |
| total | Yes | Number of contributions returned in this call |
| offset | No | Skip applied to this page (Hansard API: skip) |
| to_date | No | End date filter applied, if any |
| has_more | No | True if a full page was returned (more may exist; re-call with offset=offset+limit) |
| from_date | No | Start date filter applied, if any |
| member_id | No | Members API integer ID filter applied, if any (echoed from input). |
| text_mode | No | Whether contribution `text` carries the upstream preview or full body (still capped). |
| date_range | No | (min, max) SittingDate of returned contributions, or None if empty |
| top_debates | No | Top-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. |
| total_corpus | No | Total contributions in Hansard matching this query (TotalContributions). Use to decide whether to paginate further or escalate to parliament_policy_position_summary. |
| contributions | No | Matching Hansard contributions with full citation metadata. |
| top_divisions | No | Top-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. |
| total_debates | No | TotalDebates — distinct debates touching this topic. |
| total_members | No | TotalMembers — member-name matches in the corpus. |
| house_breakdown | No | Counts by house across the returned page |
| party_breakdown | No | Counts by party across the returned page |
| total_divisions | No | TotalDivisions. Non-zero → consider `top_divisions` previews below or chain to votes_search_divisions. |
| total_petitions | No | TotalPetitions. |
| total_committees | No | TotalCommittees. |
| total_corrections | No | TotalCorrections — published corrections to the Hansard record. |
| total_written_answers | No | TotalWrittenAnswers. |
| total_written_statements | No | TotalWrittenStatements. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false; the description is fully consistent with these. It adds valuable behavioral context: tokenized matching behavior, the fact that bill titles often don't match, pagination semantics (limit/offset, has_more), text_mode character caps, and the corpus envelope being independent of contribution_type. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but each sentence serves a purpose: usage scope, return metadata, drill-down, exclusions, pagination, alternatives, and authority. It is front-loaded with the key directive and structured with clear separations. Slight redundancy exists (e.g., 'USE THIS TOOL WHEN' restates the title), but overall it is well-organized and earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, rich annotations, an output schema, and multiple related siblings, the description covers all critical contexts: when to use, when not to use, how to paginate, how to retrieve full text, what each contribution_type means, and the authoritative nature of the data. It also points to the workflow for member-specific queries. This is fully complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description enriches the query parameter with practical guidance (e.g., 'Pass tokens that would appear in someone's speech', 'Bill titles often DON'T match'). It also clarifies member_id (integer ID, not name string, with explanation of the old field), text_mode, and contribution_type semantics. This is high-value elaboration beyond bare schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific directive: 'USE THIS TOOL WHEN searching Hansard by topic, bill title, or text phrase.' It clearly identifies the resource (Hansard debates) and the action (search), and distinguishes from sibling tools by contrasting with parliament_get_debate_contributions and parliament_find_member. The stated purpose is unambiguous and technically accurate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'DO NOT' guidance ('DO NOT text-search by member name') and names the correct alternative workflow (parliament_find_member → parliament_get_debate_contributions). It also mentions parliament_policy_position_summary for broad topic scans and gives a concrete drill-down path via read_resource. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parliament_search_petitionsSearch UK Parliament PetitionsARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum petitions to return. Default 20. | |
| query | Yes | Search term for petition titles, e.g. 'ban trophy hunting' or 'NHS funding'. | |
| state | No | Filter by petition state. | all |
| offset | No | Number of petitions to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | Page size requested |
| query | Yes | The term that was searched in petitions |
| state | Yes | Petition state filter applied to this query |
| total | Yes | Number of petitions returned in this call |
| offset | No | Skip applied to this page |
| has_more | No | True if a full page was returned (more may exist) |
| petitions | No | Matching petitions (title, state, signature count, key dates, URL). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the bar is lower. The description adds valuable context about return fields (title, state, signature count, dates) and the authoritative source, but does not disclose behavioral details like pagination or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized, with the key usage directive front-loaded. Each sentence serves a purpose: usage, returned data, filtering, and authoritative source. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a rich output schema and fully described parameters, the description covers the essential usage context well. It does not explain pagination, but the offset parameter schema already handles that, and the output schema likely documents the return shape. Slight gap on the debated state discrepancy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description mentions filtering by state but inconsistently lists 'debated' as an option while the schema enum only allows 'open', 'closed', and 'all', which could mislead. It does not add significant meaning beyond the schema's already descriptive parameter fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('search') and resource ('UK Parliament petitions') with clear scope ('by keyword or topic'). It distinguishes itself from sibling tools like parliament_search_hansard and bills_search_bills by focusing on petitions specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'USE THIS TOOL WHEN searching UK Parliament petitions by keyword or topic,' providing explicit usage context. However, it does not explicitly mention when not to use it or name alternative tools, falling short of the highest bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_resourceARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | The URI of the resource to read |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as read-only and idempotent. The description adds value by specifying the return type (string), base64 encoding for binary content, and how templated URIs should be handled. It does not disclose error behavior, but that is not required given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action ('Read a resource by its URI'), followed by necessary usage nuance and return format. Every sentence earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter, full schema coverage, and an output schema, the description is sufficient. It explains how to invoke for both resource types and what to expect in the response. The output schema is provided separately, so no need to duplicate that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the 'uri' parameter, so the baseline is 3. The description enriches this by explaining static vs templated resource usage and the need to fill in template parameters, adding semantics beyond the schema's one-line description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('a resource by its URI'), clearly distinguishing it from sibling tools that target specific domains (e.g., bills_get_bill). It is generic but unambiguous, making its purpose immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use the tool: when you have a URI and need its content. It distinguishes between static and templated resources, which is useful practical guidance, though it does not explicitly name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
votes_get_divisionGet Division DetailARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Which house this division belongs to. | Commons |
| division_id | Yes | Division ID from votes_search_divisions results. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Division ID |
| date | Yes | Date of the division |
| house | Yes | Commons or Lords |
| title | Yes | Division title / motion text |
| passed | Yes | Whether the motion passed |
| truncated | No | Whether voter lists were truncated to fit response limits |
| aye_voters | No | Members who voted Aye (may be truncated) |
| ayes_count | Yes | Total Aye votes |
| noe_voters | No | Members who voted No (may be truncated) |
| noes_count | Yes | Total No votes |
| total_aye_voters | No | Total number of Aye voters before truncation |
| total_noe_voters | No | Total number of No voters before truncation |
| is_government_win | No | Whether the government won (Lords only) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, idempotent), the description discloses a critical behavioral trait: voter lists are truncated to 100 per side while total counts remain accurate. This level of transparency helps agents set expectations and avoid misinterpreting truncated data. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise, front-loaded with an explicit 'USE THIS TOOL WHEN' directive, and packs essential information (purpose, input prerequisites, truncation caveat, chaining) into two sentences. Every sentence adds value, and the capitalization draws appropriate attention.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two parameters and an existing output schema, the description covers all critical aspects: what the tool does, when to use it, key limitations (truncation), and how to obtain inputs. No additional context is needed for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full coverage (100%) with descriptions for both parameters, including the source of division_id. The description only restates 'division_id + house' without adding further semantic detail, so it meets the baseline but does not elevate parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action—retrieving the full member-by-member voting record for a division—and immediately distinguishes itself from sibling search and debate tools. The resource (division_id + house) is explicit, and the chaining reference to votes_search_divisions and parliament_get_debate_divisions further differentiates it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells agents when to use this tool ('USE THIS TOOL WHEN you have a division_id + house'), and provides guidance on how to obtain the ID via sibling tools. It also clarifies the chaining workflow, though it could be more explicit about when not to use it; still, the guidance is strong and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
votes_search_divisionsSearch Parliamentary DivisionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Which house to search. | Commons |
| limit | No | Maximum divisions to return. Default 25 (Commons API max-per-page). | |
| query | No | Search term for division titles, e.g. 'Rwanda' or 'Online Safety Bill'. Omit to browse recent divisions. | |
| offset | No | Number of divisions to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true. | |
| to_date | No | End date (YYYY-MM-DD). | |
| from_date | No | Start date (YYYY-MM-DD). | |
| member_id | No | Filter to divisions where this member voted. Get the member ID from parliament_find_member. |
Output Schema
| Name | Required | Description |
|---|---|---|
| house | Yes | Commons or Lords |
| limit | No | Page size requested |
| query | No | The search term, if any (None = browse recent) |
| total | Yes | Number of divisions returned in this call |
| offset | No | Skip applied to this page |
| has_more | No | True if a full page was returned (more may exist) |
| divisions | No | Matching divisions. Use the integer `id` field with votes_get_division to fetch the full voter list. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds useful context beyond annotations: the output contains summaries (title, date, vote counts, pass/fail) and that it is the authoritative source for UK parliamentary vote records.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the usage directive. Every sentence adds value: search scope, return summary, downstream handoff, and authoritative source, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with a complete schema, rich annotations, and an output schema, the description sufficiently covers when to use it, what it returns, and how to proceed with results. It provides the necessary context for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well-documented. The description reinforces the mapping of 'topic, date, or member' to query/date/member_id, but adds no new parameter-level details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool searches Commons or Lords formal votes by topic, date, or member, and clarifies it returns division summaries. It distinguishes itself from the sibling votes_get_division by noting the downstream call for full voter lists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It leads with 'USE THIS TOOL WHEN' and specifies the exact search dimensions. It also explicitly instructs the agent to pass division_id and house into votes_get_division afterward, providing clear complementary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables searching and retrieval of UK legislation (Acts, Statutory Instruments) from legislation.gov.uk with persistent identifiers and verifiable citations.8Apache 2.0
- Flicense-qualityCmaintenanceEnables searching and retrieving UK case law from The National Archives, including full judgments with filtering by court, legal area, and date range.26
- Alicense-qualityBmaintenanceProvides programmatic access to UK legal documents with hybrid semantic search and Model Context Protocol integration for AI assistants.63MIT
- AlicenseAqualityCmaintenanceEnables searching UK case law on BAILII and retrieving judgments with automatic section extraction (summary, conclusions, etc.). Runs locally to avoid BAILII's cloud IP blocks.34Apache 2.0
Your Connectors
Sign in to create a connector for this server.