Skip to main content
Glama
Ownership verified

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

MCP client
Glama
MCP server

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.

100% free. Your data is private.
Tool DescriptionsA

Average 4.6/5 across 35 of 35 tools scored. Lowest: 3.5/5.

Server CoherenceA
Disambiguation5/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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness5/5

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 tools
bills_get_billGet Bill DetailA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_idYesBill ID from bills_search_bills results.
max_summary_charsNoMaximum 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

ParametersJSON Schema
NameRequiredDescription
idYesBill ID
urlYesParliament URL for this bill
is_actNoWhether the bill has received Royal Assent
stagesNoLegislative stages the bill has passed through
summaryNoBill summary text, possibly truncated per max_summary_chars. Check summary_truncated and summary_original_length for full-text info.
sponsorsNoBill sponsors
long_titleNoFull long title
short_titleYesShort title of the bill
current_houseNoHouse where the bill currently sits
current_stageNoCurrent legislative stage
originating_houseNoHouse where the bill was introduced
royal_assent_dateNoDate Royal Assent was given
summary_truncatedNoTrue if summary was cut to fit max_summary_chars
summary_original_lengthNoOriginal summary length in characters before any truncation
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds behavioral context beyond annotations: it lists returned fields (sponsors, current stage, etc.), notes the summary character cap and truncation indicator, and explains adjustability of max_summary_chars. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear 'USE THIS TOOL WHEN' lead, followed by a list of return fields, a note on parameter behavior, and post-call suggestions. Every sentence adds value; no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (as noted in context signals), the description does not need to detail return values. It covers the tool's purpose, usage context, parameter specifics, and follow-up actions. It is complete for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, yet the description adds significant meaning: bill_id's origin is clarified, and max_summary_chars includes detailed guidance on default value (5000), adjustment for large bills, and how to check truncation. This provides context beyond the schema's properties.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear directive 'USE THIS TOOL WHEN you have a bill_id... and want the full detail.' It specifies the verb (get), resource (bill detail), and distinguishes from sibling tools by noting the source of the bill_id. The tool is properly named and scoped.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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 ('when you have a bill_id from bills_search_bills and want the full detail') and provides post-call recommendations: use parliament_search_hansard for debates or bills_search_bills for adjacent bills. This gives clear guidance on alternatives.

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 BillsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
houseNoFilter by originating house. Omit for all houses.
limitNoMaximum bills to return in this call. Default 20 keeps responses focused; raise up to 100 for bulk exports.
queryYesSearch term for bill titles and descriptions, e.g. 'online safety' or 'financial services'.
stageNoFilter by current legislative stage.
offsetNoNumber 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.
sessionNoNumeric 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

ParametersJSON Schema
NameRequiredDescription
billsNoMatching bills. Use the integer `id` field from any bill to call bills_get_bill for full detail.
limitYesMaximum results requested in this call
queryYesThe search term that was used
totalNoTotal results matching the query across all pages, if the upstream API reported it. None if unknown.
offsetYesNumber of results skipped before this page
has_moreYesTrue if more results exist beyond this page. Re-call with offset=offset+returned to fetch the next page.
returnedYesNumber of results actually on this page
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds that it returns paginated bill summaries with fields like title, current stage, and whether it became an Act, plus it claims authority. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. The first sentence front-loads the purpose. No unnecessary words; every sentence adds value. Ideal length for an agent to quickly grasp.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the return format (paginated summaries), hints at the workflow (use bills_get_bill for details), and provides filter dimensions. With an output schema assumed present, this is fully adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The tool description adds valuable usage tips: the session parameter nuance (numeric ID, not year string) and pagination via offset. This extra context aids correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'USE THIS TOOL WHEN searching UK parliamentary bills by keyword, session, house, or legislative stage.' It clearly identifies the resource (bills) and action (search), and distinguishes from sibling tools like bills_get_bill.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: when to search bills and suggests following up with bills_get_bill for full detail. It does not explicitly state exclusions, but the workflow guidance is sufficient.

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 JudgmentA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesTNA judgment slug, e.g. 'uksc/2024/12' or 'ewca/civ/2023/450'.
patternYesRegex pattern (or plain substring) to search within paragraph text. If the pattern doesn't compile as regex, falls back to literal substring match.
max_hitsNoCap on number of hits returned.
case_insensitiveNoDefault true. Set false for case-sensitive matching.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hitsYesMatching paragraphs in document order
slugYesThe judgment slug that was searched
patternYesThe pattern that was searched for
truncatedYesTrue if hit count reached max_hits and more matches may exist
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that pattern is regex with fallback to literal substring, return format (list of {eId, snippet, match}), and that results are small snippets. Annotations already indicate read-only, idempotent, non-destructive; description adds valuable behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with 'USE THIS TOOL WHEN', brief yet comprehensive. Every sentence is purposeful, no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers return format, workflow (use with judgment_get_paragraph), search behavior, and parameter details. Output schema exists, but description independently explains enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all parameters with descriptions (100% coverage). The description adds context about regex fallback for pattern and clarifies the purpose of eId in combination with other tools, but does not significantly expand on parameter meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'USE THIS TOOL WHEN you have a judgment slug and want to find paragraphs whose text matches a pattern.' It distinguishes from siblings like judgment_get_index and judgment_get_paragraph.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use, provides alternatives, and gives examples like 'negligence', 'test for foreseeability'. It also explains the workflow of reading full paragraphs after searching.

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 StringA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNo'raw' from citations_resolve. Used as-is for EU retained law — the original text preserves the Regulation/Directive distinction.
pageNo'page' from citations_resolve (starting page in the law report).
yearNo'year' from citations_resolve.
courtNo'court' from citations_resolve, e.g. 'UKSC', 'EWCA CIV', 'EWHC (KB)'.
numberNo'number' from citations_resolve (judgment number within the year).
volumeNo'volume' from citations_resolve (law report volume, if any).
sectionNo'section' from citations_resolve, e.g. '47', '12', '20A'.
si_yearNo'si_year' from citations_resolve.
si_numberNo'si_number' from citations_resolve.
confidenceYes'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_urlNo'resolved_url' from citations_resolve. Must be non-null for neutral citations.
citation_typeYes'type' field from citations_resolve result.
report_seriesNo'report_series' from citations_resolve, e.g. 'WLR', 'AC', 'QB'.
legislation_titleNo'legislation_title' from citations_resolve, e.g. 'Companies Act 2006'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds details about refusal conditions (confidence=0.0, missing resolved_url), the fact that it's authoritative with no network call, and its role as a guard against citation fabrication.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (about 120 words) and well-structured: usage instruction, behavior explanation, warnings. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (14 parameters, 5 citation types) and the presence of an output schema, the description covers all essential aspects: when to use, how it behaves, refusal conditions, and guardrails. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3). The description adds meaning by emphasizing that inputs must come from citations_resolve, explains the special handling of 'raw' for EU retained law, and clarifies the refusal logic for confidence and resolved_url. This exceeds the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool formats OSCOLA citation strings after using citations_resolve, distinguishing it from siblings like citations_resolve and citations_parse. The purpose is clear and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit use instructions: 'USE THIS TOOL AFTER citations_resolve', warns against constructing input manually, and specifies what to do when it refuses. Alternatives and context for when-not-to-use are provided.

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 NetworkA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_uriYesTNA 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

ParametersJSON Schema
NameRequiredDescription
eu_refsNoRetained EU law references, e.g. 'Regulation (EU) 2016/679'
si_refsNoStatutory Instrument references, e.g. 'SI 2018/1234'
case_uriYesThe judgment URI that was fetched and parsed
law_report_refsNoLaw report citations, e.g. '[2020] 1 WLR 100'
total_citationsYesSum of all de-duplicated citations across every bucket
legislation_refsNoLegislation section references, e.g. 's.47 Companies Act 2006'
neutral_citationsNoNeutral citations referenced, e.g. '[2020] UKSC 14'
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description details behavior beyond annotations: fetches judgment XML from TNA, parses OSCOLA citations, returns grouped by type, deduplicated, and sorted. Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint false, and description adds context without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is seven sentences, all providing essential information. Front-loaded with purpose, no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single parameter, clear schema, and annotations, the description fully covers usage context, workflow (fetch, parse, group, sort), and the next step (citations_resolve). Output schema exists, so return values need not be detailed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter case_uri, whose schema description already provides comprehensive guidance (slug format, source field, prefix exclusion). The tool description doesn't add significant meaning beyond what the schema offers, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool maps every citation in a judgment, including cases, legislation, SIs, and retained EU law. It specifies the verb 'map' and resource 'citations network', and distinguishes from siblings like citations_resolve.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description begins with 'USE THIS TOOL WHEN you have a judgment slug', clearly indicating when to use it. It also instructs to pass citations to citations_resolve after calling, providing a clear workflow. No explicit when-not conditions, but the context implies this is the first step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

citations_parseParse OSCOLA CitationsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesFree 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.
disambiguateNoDefault 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

ParametersJSON Schema
NameRequiredDescription
ambiguousYesCitations with confidence < 0.7; may have been partially disambiguated via sampling
citationsYesAll successfully parsed citations (confidence >= 0.7)
text_lengthYesCharacter length of the input text
parse_duration_msYesTime taken to parse, in milliseconds
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true. The description adds that parsing is pure regex by default, and optional disambiguation uses MCP sampling (model in loop). It also states that citations resolve to TNA URLs when possible. This provides behavioral context 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear 'USE THIS TOOL WHEN' opening, a list of citation types, an explanation of disambiguation, and a post-call advice. It is slightly verbose but every sentence is informative and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description adequately covers the tool's scope, limitations (regex by default, optional disambiguation), and workflow integration with 'citations_resolve'. It references sibling tools and provides actionable guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds value by explaining the purpose of each parameter: 'text' is free text with supported citation types, and 'disambiguate' is a boolean for optional model-based resolution. This goes beyond the schema's minimal descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: extracting and classifying OSCOLA-style citations from free text. It lists specific citation types (neutral citations, law reports, etc.) and distinguishes itself from the sibling 'citations_resolve' by advising to use that for verification after parsing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'USE THIS TOOL WHEN you have free text...' and provides a follow-up action ('pass each citation through citations_resolve'). It also explains when to opt into disambiguation. However, it does not explicitly mention when not to use the tool or compare with other siblings like 'citations_network'.

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 CitationA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
citationYesA single OSCOLA citation to parse and resolve. E.g. '[2024] UKSC 12', 'SI 2018/1234', 's.47 Companies Act 2006'

Output Schema

ParametersJSON Schema
NameRequiredDescription
rawYesOriginal citation text as found in the source
pageNoStarting page in the law report
typeYesClassification of the citation type
yearNoYear component of the citation
courtNoCourt 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)
numberNoJudgment number within the year
volumeNoReport volume number (for law reports)
sectionNoSection number referenced
si_yearNoSI year (for SI YYYY/NNN citations)
si_numberNoSI number
confidenceYesParse confidence 0.0–1.0. Citations below 0.7 are ambiguous and may have been sent for LLM disambiguation.
resolved_urlNoTNA Find Case Law or legislation.gov.uk URL if successfully resolved
report_seriesNoLaw report series abbreviation: WLR, AC, QB, KB, Ch, All ER, EWCA Civ, etc.
legislation_titleNoTitle of legislation (for s.NN Act YYYY citations)
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes live TNA HEAD check, confidence-0.0 behavior, transient error handling with ToolError and retryable flag. Adds context beyond annotations (readOnlyHint, idempotentHint). No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with imperative first line, then details and warnings. Every sentence adds value, though slightly verbose. Front-loaded with key usage instruction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a tool with live checking and error handling. Covers success, failure, retry, ethical warnings. Output schema exists, so return values not needed in description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter with 100% schema coverage. The example in description adds context but does not significantly expand beyond schema's description. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb 'parses + resolves' and the resource 'a single citation', listing exact types (neutral citation, SI, legislation section, retained EU law). It distinguishes from siblings like citations_format_oscola (formatting) and citations_parse (parsing without resolution).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'BEFORE constructing an OSCOLA citation string' or 'to confirm a citation points at a real document'. Provides exclusions: 'Do NOT format or quote a confidence-0.0 citation'. Mentions alternatives: retry or proceed without TNA verification on transient errors. Warns against fabrication.

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 DetailA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
committee_idYesCommittee ID from committees_search_committees results.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesCommittee ID
urlNoParliament URL for this committee
nameYesCommittee name
emailNoContact email
houseNoCommons, Lords, or Joint
phoneNoContact phone number
membersNoCurrent committee members
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare safe read-only, open-world, idempotent behavior. The description adds behavioral detail about parallel fetching and the composite output (detail + member list), which is not captured by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences plus a third for next steps. No filler, every sentence earns its place. Usage instruction is front-loaded as requested.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter, extensive annotations, and an output schema, the description covers purpose, usage, behavioral traits, and parameter origin completely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already describes committee_id as integer. Description adds crucial context: committee_id comes from 'committees_search_committees results', linking tools and preventing misuse.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns 'metadata + current membership' for a committee given its ID, using verbs 'Fetches committee detail and member list'. It distinguishes itself from sibling 'committees_search_evidence' by suggesting a follow-up action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'USE THIS TOOL WHEN you have a committee_id', provides a clear use case, and tells the agent what to do after calling, implicitly excluding the sibling tool for evidence search.

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 CommitteesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
houseNoFilter by house.
limitNoMaximum committees to return. Default 100 comfortably covers all currently-active UK select committees. Raise only for historical sweeps.
queryNoSearch term for committee names, e.g. 'defence' or 'treasury'. Filtered client-side against committee names. Omit to list all committees.
active_onlyNoIf true, only return currently active committees.

Output Schema

ParametersJSON Schema
NameRequiredDescription
houseNoHouse filter applied, or None
queryNoName substring filter applied, or None
totalYesNumber of committees returned in this call
committeesNoMatching committees. Use committees_get_committee for membership detail.
active_onlyYesWhether results were restricted to currently active committees
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, idempotentHint, etc. The description adds return fields and parameter nuances (e.g., limit covers active committees, query filtered client-side), adding value without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: one sentence for purpose, one for returns, one for next steps. Front-loaded with imperative, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given moderate complexity and existing output schema, the description covers essential information: what it does, what it returns, and how to chain to related tools. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds context beyond the schema, like explaining default limit coverage and client-side filtering, enhancing understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear imperative: 'USE THIS TOOL WHEN searching or listing UK parliamentary select committees by name, house, or active status.' It identifies the specific resource and verbs, and distinguishes from siblings by mentioning follow-up tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use ('USE THIS TOOL WHEN...') and provides guidance on next steps, but does not explicitly contrast with other search tools among siblings.

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 EvidenceA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum evidence items to return. Default 20. When evidence_type='both' the limit is split across oral and written (roughly half each).
offsetNoNumber of evidence items to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true.
committee_idYesCommittee ID from committees_search_committees results.
evidence_typeNoType of evidence to search.both
max_title_charsNoPer-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

ParametersJSON Schema
NameRequiredDescription
limitYesMax evidence items requested for this page
offsetYesNumber of evidence items skipped before this page
evidenceNoEvidence items in this page. Titles are capped per max_title_chars; witness lists are capped at 10 per item.
has_moreYesTrue 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.
returnedYesNumber of evidence items actually returned in this call
committee_idYesCommittee ID this page belongs to
evidence_typeYesEvidence type filter applied to this query
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the description's job is to add context. It does so by disclosing the one-page behavior, caps on titles and witness lists, and the authoritative source. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using three sentences to convey all necessary information. It front-loads the use-case with 'USE THIS TOOL WHEN' and then efficiently covers pagination, caps, and authority. Every sentence is purposeful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (indicated by context signals), the description doesn't need to explain return values. It covers pagination mechanics, caps, and the authoritative nature. For a search tool with clear parameters, this provides complete context for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, providing descriptions for all 5 parameters. The description adds value by explaining the rationale behind the max_title_chars cap (prevents context blow-up) and confirming the pagination pattern. This goes beyond the schema, justifying a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool searches for oral and written evidence by committee_id. It distinguishes from sibling tools like committees_search_committees and committees_get_committee by specifying the evidence focus. The verb 'search' and resource 'evidence' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to use the tool when you have a committee_id. It provides detailed pagination guidance, including how to handle multiple pages with offset and has_more. This is actionable and makes the tool's usage clear without confusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_promptA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the prompt to get
argumentsNoOptional arguments for the prompt

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds context beyond annotations by specifying the return format (JSON with messages array) and the argument format (dict). It aligns with annotations and provides useful behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with three sentences that front-load the core purpose, then explain return type and arguments. No extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with annotations and output schema, the description adequately covers purpose, return type, and argument structure. Missing error handling or edge cases, but acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, the description adds only minor clarification about argument format. It does not significantly enhance understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a prompt by name with optional arguments, distinguishing it from listing tools. However, the term 'prompt' is not defined, leaving some ambiguity about what exactly is being retrieved.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but does not provide explicit guidance on when to use it versus alternatives like list_prompts, nor when not to use it.

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 StatusA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
vrnYesVAT Registration Number: 9 digits, e.g. '123456789'. GB prefix accepted and stripped automatically.

Output Schema

ParametersJSON Schema
NameRequiredDescription
vrnYesVAT Registration Number queried
mandatedYesWhether this business is mandated for MTD VAT
trading_nameNoRegistered trading name if available
effective_dateNoDate from which MTD obligation applies
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations: it connects to HMRC sandbox by default, requires environment variables, and raises error if unconfigured. Annotations already indicate readOnly, idempotent, and non-destructive, and description aligns perfectly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is composed of four concise sentences, each providing unique value: purpose/usage, return fields, environment setup, and error handling. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single parameter, detailed annotations, and existence of an output schema, the description covers purpose, usage, return values, and operational notes. It is complete for a straightforward check tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'vrn' has 100% schema coverage with detailed description (format, length, GB prefix handling). The description only mentions it as '9-digit VAT Registration Number' without adding new semantic meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Check' and the resource 'MTD VAT Status', specifying it checks Making Tax Digital mandate status for a business given a VRN. It is distinct from sibling 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description starts with 'USE THIS TOOL WHEN' and provides clear conditions (having a 9-digit VAT Registration Number). It also mentions sandbox vs production and credential requirements. However, it does not explicitly state when not to use or list alternatives.

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 CommodityA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
commodity_codeYesCommodity code or plain-English description. E.g. 'food', 'domestic fuel', 'software', 'financial services', 'new build residential'

Output Schema

ParametersJSON Schema
NameRequiredDescription
rateYesVAT rate category
notesNoAny additional notes or conditions on this rate
commodity_codeYesCommodity code or description queried
effective_fromYesDate from which this rate applies
rate_percentageYesApplicable rate as percentage: 20.0 (standard), 5.0 (reduced), 0.0 (zero/exempt)
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable context: it uses a static lookup table current as of 22 Nov 2023, and notes that rates may have changed, advising verification for time-sensitive cases. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise and well-structured: a bold usage instruction, a clear list of return fields, and an important caveat about data freshness. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single parameter, output schema present, comprehensive annotations), the description is complete. It covers purpose, usage, return values, data source limitations, and provides an alternative for time-sensitive queries.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has one parameter 'commodity_code' with a detailed description and examples, achieving 100% schema description coverage. The tool description does not add additional meaning beyond what the schema already provides for this parameter, so baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 for a UK commodity or service description. It distinguishes itself from sibling tools like hmrc_search_guidance by specifying its scope and directing users to alternative tools for time-sensitive advice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage guidance: 'USE THIS TOOL WHEN you have a UK commodity or service description and want its VAT rate category.' It also clarifies when not to use it (for time-sensitive advice, use hmrc_search_guidance instead).

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 GuidanceA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum guidance results to return (1–25). Passed to the GOV.UK search count param.
queryYesSearch query for HMRC guidance, e.g. 'VAT digital services', 'R&D tax relief SME'

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYesThe search query that was run
totalYesNumber of guidance documents returned in this call
resultsNoMatching HMRC guidance pages. Each entry's `summary` is capped per the max_summary_chars input parameter.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds value beyond the annotations by specifying the source (GOV.UK content API filtered to HMRC publications), noting the authoritative nature, and warning about out-of-date third-party information. Annotations already indicate readOnly, idempotent, non-destructive, but the description provides essential behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—four sentences with no fluff. The first sentence is directive and front-loaded with the core purpose. Every sentence adds value (usage guidance, return format, source, warnings).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 parameters, no nested objects, output schema exists), the description covers all necessary context: what it searches, what it returns, its authoritative nature, and limitations. No gaps for the agent to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions. The description compensates by providing example queries (e.g., 'VAT digital services') and explaining that `limit` is passed to GOV.UK search count param, adding context beyond the schema while maintaining conciseness.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's specific verb ('searching') and resource ('GOV.UK for HMRC tax guidance'), lists example tax types (VAT, income tax), and distinguishes it from sibling search tools by specifying the domain (HMRC guidance) and source (GOV.UK API).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'USE THIS TOOL WHEN searching GOV.UK for HMRC tax guidance', providing clear context. It also warns against using web search for this purpose, implying when not to use it (third-party sources). However, it does not explicitly name alternative tools for other search needs.

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 HeaderA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesJudgment slug, e.g. 'uksc/2024/12' or 'ewca/civ/2023/450'

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint. The description adds behavioral context beyond annotations by specifying the kind of metadata returned and its authoritative nature, without contradicting 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with 'USE THIS TOOL WHEN', no redundant words. Every sentence provides essential information about purpose, usage, and workflow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter, rich annotations, and an output schema, the description is complete. It covers when to use, prerequisites (slug from case_law_search), and relationship to sibling tools. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides a detailed description of the slug parameter with examples (100% coverage). The description adds value by explaining where to obtain the slug (from case_law_search), enhancing usage context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it retrieves metadata (parties, judges, neutral citation, court, dates) given a judgment slug. It distinguishes from sibling tools like judgment_get_index and judgment_get_paragraph by specifying its role in the workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs when to use ('USE THIS TOOL WHEN you have a judgment slug and need metadata'), provides a clear workflow (call case_law_search first, then judgment_get_index, then judgment_get_paragraph), and notes it is the authoritative source for UK judgment metadata.

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 IndexA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesJudgment slug, e.g. 'uksc/2024/12'

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint false. The description adds behavioral context: returns a navigation index with eId and preview line per paragraph. This is sufficient beyond annotations but lacks detail on 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise (two sentences), front-loaded with 'USE THIS TOOL WHEN', and structured in logical steps. Every sentence provides essential guidance with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 parameter, clear annotations, output schema present), the description sufficiently covers what the tool does, inputs, outputs, and usage workflow. No gaps identified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (slug) with 100% schema coverage and a clear schema description. The description does not add meaning beyond 'the slug is used to get the index', which is already implied. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states the verb 'get' and resource 'judgment paragraph index', and specifies the output 'eId + preview line for every paragraph'. It clearly differentiates from siblings by mentioning judgment_get_paragraph and case_law_grep_judgment as subsequent steps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'USE THIS TOOL WHEN' condition (having a judgment slug wanting navigation index), instructs to call case_law_search first, and describes what to do with the returned eIds (use judgment_get_paragraph or case_law_grep_judgment). This gives clear when-to-use and when-not-to-use guidance.

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 ParagraphA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
eIdYesParagraph eId from judgment_get_index, e.g. 'para_12'. Numeric strings like '12' are accepted and normalized to 'para_12'.
slugYesJudgment slug, e.g. 'uksc/2024/12'

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already confirm safe read operation; description adds typical output token range (400–1700) and that it returns XML content. Could mention potential errors but sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with usage guidance. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists and annotations cover safety, description provides essential input context, prerequisites, alternatives, and typical output size. Complete for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters fully. Description adds practical context on obtaining eId from judgment_get_index, which helps users provide correct parameter values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool retrieves a judgment paragraph given slug and eId. Differentiates from siblings by referencing judgment_get_index and case_law_grep_judgment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly specifies when to use (have slug + eId) and provides prerequisite (call judgment_get_index) and alternative (case_law_grep_judgment).

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 SectionA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesLegislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results.
yearYesYear of enactment
numberYesChapter or SI number
sectionYesSection number, e.g. '47' or '12A'. Use the numeric part only — not 'section-47'. Schedules are not currently supported.
max_charsNoMaximum 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

ParametersJSON Schema
NameRequiredDescription
titleYesSection title or heading
extentNoTerritorial extent: list of 'England', 'Wales', 'Scotland', 'Northern Ireland'. Empty list means unknown — do not assume full UK extent.
contentYesPlain text content of the section, possibly truncated per max_chars. Check content_truncated and original_length for full-text information.
in_forceNoFalse 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.
warningsNoNon-fatal retrieval or parsing warnings the caller should disclose where relevant.
prospectiveNoTrue if this section has not yet come into force; None if unknown
version_dateNoDate of the version retrieved
source_formatNoSource parsed for this response. html_fallback means CLML XML was unavailable and text was parsed from the public HTML page.
section_numberYesSection number, e.g. '47', '12A', 'Schedule 2'
original_lengthNoOriginal plain-text length in characters before any truncation
content_truncatedNoTrue if content was cut to fit max_chars
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnly, idempotent, and non-destructive hints. Description adds details about content truncation (max_chars default and adjustment) and response fields to check (content_truncated).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise (9 sentences), front-loaded with purpose, and every sentence adds value without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists, description need not detail return format; it covers usage, behavioral notes, and parameter specifics adequately. Warning about extent completes the context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds concrete usage details: for section parameter, 'Use the numeric part only' and schedules not supported; for max_chars, specific guidance about Finance Act sections and checking truncation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves parsed text of a legislation section with extent and in-force metadata, and differentiates from siblings like legislation_search 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (known Act/SI, want parsed structured response), provides alternative (read_resource for raw XML), and includes a strong warning about checking extent.

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 ContentsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesLegislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results.
yearYesYear of enactment
limitNoMaximum 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.
numberYesChapter or SI number
offsetNoNumber 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

ParametersJSON Schema
NameRequiredDescription
typeYesLegislation type code echoed from the request
yearYesYear of enactment echoed from the request
itemsNoTOC 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').
limitYesPage size applied after offset
numberYesChapter or SI number echoed from the request
offsetYesOffset applied to the full TOC item list
has_moreYesTrue if more items remain beyond offset+returned
returnedYesNumber of items in this response
total_itemsYesTotal structural items parsed from the XML, before offset/limit. Compare to `returned` and `has_more` to decide whether to paginate.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations: it indicates the output contains structural elements with XML id and title, explains pagination behavior with has_more/total_items, and instructs to pass numeric section identifiers to legislation_get_section. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with usage guidance, then explains output and pagination, followed by an alternative. It is structured and each sentence adds value, though slightly verbose but still concise enough.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 appropriately covers usage context, pagination, and alternatives without needing to detail return values. It provides complete guidance for an agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage. The description adds usage context for limit and offset (e.g., 'Raise only when you need a larger slice', 'Use with limit to page through very large statutes') and clarifies that type comes from search results, enhancing understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'USE THIS TOOL WHEN you have a known Act / SI and want the structural table of contents', providing a specific verb and resource. It distinguishes from sibling tools like legislation_get_section and read_resource by stating alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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 and provides an alternative (read_resource URI) for a different representation. It also explains pagination usage with offset/limit for large statutes, but lacks explicit 'when not to use' exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_promptsA
Read-onlyIdempotent
Inspect

List all available prompts.

Returns JSON with prompt metadata including name, description, and optional arguments.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and idempotent behavior. Description adds return format details (JSON with metadata), but no additional behavioral traits 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states purpose, second states output. No wasted words, efficiently front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description appropriately explains the return structure. No critical gaps for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters in schema (0 params), so baseline of 4 applies. Description does not need to add param info as none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'List all available prompts' with a specific verb and resource. While it distinguishes from the sibling tool `get_prompt`, it does not explicitly contrast them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like `get_prompt`. The context lacks when-not or context for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_resourcesA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds value by detailing the return format (JSON with resource metadata) and explaining the difference between static resources and templates, which goes 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences, each essential. It front-loads the main purpose and adds structural details about resource types without unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters), the description provides sufficient context about the purpose and output format, especially with an output schema presumably covering return fields. The explanation of static vs template resources ensures completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so schema coverage is 100%. The description does not need to add parameter info; the baseline is 4 for zero parameters. No further clarification required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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, distinguishing between static resources and templates with specific field details ('uri' vs 'uri_template'). This differentiates it from siblings like 'list_prompts' 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for exploring available resources but does not explicitly state when to use this tool versus alternatives like 'read_resource'. No exclusion or when-not guidance is provided, relying on sibling context.

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 ParliamentA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName or partial name, e.g. 'Starmer', 'Baroness Hale'

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYesThe name that was searched
totalYesNumber of members matching the query
membersNoMatching members. Use the integer `id` field from any member to call parliament_member_debates or parliament_member_interests.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds that it returns all matches, disambiguates common names, and returns specific fields (id, party, constituency, etc.). 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, well-structured description with a clear action directive, bullet-like return info, and workflow context. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Completely covers the tool's role in the workflow, return fields, disambiguation, and usage consequences. Given the output schema exists, the description provides sufficient context for an AI agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description provides examples ('Starmer', 'Baroness Hale') and constraints (maxLength, minLength) beyond the schema, adding practical value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: convert a member's name to an integer member_id. It specifies the return fields and disambiguation of common names, making it very distinct from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to use this tool before any ID-based filtering tools, listing specific tools and warning against skipping this step with a concrete example (Pannick case). Provides clear workflow guidance.

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 DebateA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
member_idNoOptional 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_idYesDebate 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

ParametersJSON Schema
NameRequiredDescription
limitNoPage size requested
topicNoTopic phrase filter applied, if any
totalYesNumber of contributions returned in this call
offsetNoSkip applied to this page
has_moreNoTrue if a full page was returned (more may exist)
member_idYesParliament Members API member ID
contributionsNoHansard contributions for the member. Each `text` field is capped at 3000 characters.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behaviors: it returns verbatim contributions, when member_id is omitted it returns all contributions (~100-200 items), and it warns against reconstructing quotes from training data if the wire returns empty. The annotations already declare readOnlyHint, idempotentHint, and non-destructive; the description adds useful behavioral context 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three paragraphs plus a closing instruction. It is front-loaded with the primary usage directive. While it is somewhat lengthy, every sentence adds value—paraphrasing schema details, providing chains, and warning against hallucination. Minor redundancy could be trimmed, but overall well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description appropriately omits return value details. It covers usage context, parameter relationships, behavior with and without member_id, and troubleshooting (empty results). The tool's complexity is low (2 params, no enums, simple return), and the description is fully self-contained within that scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for both parameters. The description enhances these by explaining the practical significance of member_id (filtering by MemberId vs text) and debate_ext_id (chain from other tools). It adds meaning beyond the schema's mechanical descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title 'Get Contributions In A Debate' and opening sentence clearly specify that the tool retrieves verbatim contributions given a debate_ext_id, optionally filtered by member. It distinguishes itself from sibling tools like parliament_member_debates and parliament_search_hansard by explaining the difference in filtering logic (by MemberId vs text).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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 WHEN you have a debate_ext_id'), explains the typical chain of tools (find_member → search/debate_ext_id → this tool), and contrasts with text-search tools that filter by vocabulary. It also advises on handling cases with no contributions, providing clear contextual guidance.

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 DebateA
Read-onlyIdempotent
Inspect

USE THIS TOOL WHEN you have a debate_ext_id and want the divisions (formal votes) held within it.

Most debates contain no divisions — Business of the House sittings, statements, urgent questions, debates without a vote. A populated list typically appears around bill stages, motions, and contested amendments. Empty list is the honest result, not a failure mode.

Each returned division carries TWO IDs:

  • id — Hansard-side reference. Useful for cross-referencing in Hansard.

  • votes_id — Lords/Commons Votes API ID (cross-resolved by date+number). AFTER calling, pass votes_id as division_id into votes_get_division for the full member-by-member voting record.

The two upstreams use distinct ID-spaces (Hansard Number=3 might be Votes-API divisionId=3392). The cross-resolve runs once per (date, house) group — typically one extra HTTP per debate. votes_id is None when the cross-resolve found no match.

ParametersJSON Schema
NameRequiredDescriptionDefault
debate_ext_idYesDebate 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

ParametersJSON Schema
NameRequiredDescription
divisionsNoDivisions held in this debate, in chronological order. Empty when no divisions occurred. Each element's `id` chains to votes_get_division.
debate_ext_idYesEcho of the input debate GUID.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds context about empty lists not being failures, explains the two ID spaces (Hansard and Votes API) and the cross-resolve mechanism with an extra HTTP call, which goes beyond annotation hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (usage statement, notes on emptiness, two IDs, cross-resolve). Each sentence adds value without redundancy, and it is concise given the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the two returned IDs and their purposes, handles edge cases (empty list), and mentions the extra HTTP call. It is complete for a tool that has an output schema, and no explanation of return values is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (debate_ext_id) with 100% schema description coverage. The description adds extra context beyond the schema by explaining where to chain the ID from (parliament_search_hansard, etc.), raising it above the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'USE THIS TOOL WHEN you have a debate_ext_id and want the divisions (formal votes) held within it.' It clearly specifies the verb 'get divisions' and the resource 'debate', distinguishing it from siblings like votes_get_division and parliament_search_hansard.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use ('USE THIS TOOL WHEN...'), notes that most debates contain no divisions and that an empty list is honest, and provides downstream instructions ('AFTER calling, pass votes_id as division_id into votes_get_division').

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 CitationA
Read-onlyIdempotent
Inspect

USE THIS TOOL WHEN you have an OSCOLA-style Hansard citation (column + volume + house) and need the debate.

Example input: 'HL Deb 14 Oct 2025, vol 849, col 200'. AFTER calling, read the contribution at the cited column via read_resource(uri="hansard://debate/{debate_ext_id}/header") — or, equivalently, call parliament_get_debate_contributions(debate_ext_id) for the full list as a structured tool response.

Each match carries:

  • contribution_count — real contribution count from the debate's Items

  • source / source_code — citation finality (1=Rolling, 2=Daily, 3=BoundVolume, 4=Historic). Resolution is NOT gated on publication state.

Empty matches typically means the volume_number is wrong (opposing counsel sometimes cites running-volume rather than bound-volume) or the column is in a Written Statement (use the 'W'-suffixed column as-is). It does NOT mean the citation is fabricated — surface the failure.

Authoritative source for OSCOLA Hansard column resolution.

ParametersJSON Schema
NameRequiredDescriptionDefault
houseNoRestrict to one House. Default 'both' searches across both Houses.both
column_numberYesHansard 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_numberYesHansard 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

ParametersJSON Schema
NameRequiredDescription
houseYesHouse filter applied.
matchesNoDebate 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_numberYesEcho of the requested column number.
total_resultsYesNumber of debate matches found.
volume_numberYesEcho of the requested volume number.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behaviors: resolution is not gated on publication state, interpretation of source codes, and common failure reasons. All align with annotations (readOnly, idempotent). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with example, bullet points, and clear sections. Slightly long but justified by the complexity; could trim minor redundancies.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Fully explains output fields (contribution_count, source_code), failure modes, and post-resolution steps. Output schema exists but description provides practical context. Completeness is high.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds critical context: column_number as string to allow suffixes, volume_number as required and date not a substitute, house enum default behavior. Adds value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool resolves OSCOLA-style Hansard citations with a specific input example. It distinguishes from sibling tools like parliament_search_hansard by focusing on column resolution rather than search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'USE THIS TOOL WHEN' followed by the citation format. Provides guidance on when to use complementary tools (read_resource, parliament_get_debate_contributions) and what empty matches mean, including instructions to surface failures.

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 DebatesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum contributions to return. Default 20.
topicNoOptional 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=...).
offsetNoNumber of contributions to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true.
member_idYesParliament Members API integer ID. Obtain from parliament_find_member.

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitNoPage size requested
topicNoTopic phrase filter applied, if any
totalYesNumber of contributions returned in this call
offsetNoSkip applied to this page
has_moreNoTrue if a full page was returned (more may exist)
member_idYesParliament Members API member ID
contributionsNoHansard contributions for the member. Each `text` field is capped at 3000 characters.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare the tool as read-only, idempotent, non-destructive. The description adds important behavioral details: the text-body search is verbatim, contributions are filtered by the exact topic phrase, and each contribution's text is capped at 3000 characters. This goes beyond annotations but does not mention rate limits or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with clear sections for usage, prerequisites, behavior, and alternatives. Every sentence adds value, and the critical information is presented upfront.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the availability of a detailed input schema, annotations, and an output schema, the description covers all necessary context: when to use, prerequisites, behavior, limitations, and alternatives. It is complete and leaves no ambiguity for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters have detailed descriptions in the schema (100% coverage). The tool description adds extra context for the topic parameter (e.g., examples of what to search) and reiterates the prerequisite for member_id. This adds value beyond the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 contributions where a specific member used a particular topic phrase verbatim. It distinguishes itself from the sibling tool parliament_get_debate_contributions by specifying that this tool performs a text-body search, not a retrieval of all contributions in a debate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use this tool (when you have a member_id and want verbatim text-body search) and what prerequisite action to take (call parliament_find_member first). It also provides a clear alternative (parliament_get_debate_contributions) for retrieving all contributions regardless of phrasing.

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 InterestsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 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.
offsetNoNumber 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.
categoryNoFilter 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_idYesParliament Members API integer ID. Get from parliament_find_member.
max_description_charsNoPer-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

ParametersJSON Schema
NameRequiredDescription
limitYesMax interests requested for this page
offsetYesNumber of interests skipped before this page
categoryNoCategory filter applied to this query, or None for all categories
has_moreYesTrue if there may be more interests beyond this page. Re-call with offset=offset+returned to fetch the next page.
returnedYesNumber of interests actually returned in this call
interestsNoThe interests in this page. `description` text is capped per the max_description_chars input parameter.
member_idYesParliament Members API member ID
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint, idempotentHint, openWorldHint), the description discloses pagination behavior, a hard cap of 20 per call, a default limit, and a max_description_chars cap. Also notes data authoritativeness and freshness differences vs web search. This adds significant value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections and front-loaded purpose. Slightly verbose due to all-caps emphasis and extra details, but each sentence contributes necessary guidance. Could be slightly tightened without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters, pagination complexity, and an existing output schema, the description covers prerequisite, usage, pagination, data source authoritativeness, and parameter behaviors. It is sufficiently complete for an AI 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds substantial meaning: explains member_id's origin, limit's hard cap, offset for pagination, common category enums, and when to raise max_description_chars. This goes well beyond the schema's minimal descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 UK MPs and peers, with specific examples (donations, directorships, land, gifts). It distinguishes itself from sibling tools like parliament_find_member and parliament_get_debate_contributions by focusing on financial interests.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to use when a member_id is needed for financial interests and provides a prerequisite: call parliament_find_member first. Includes pagination instructions. Does not explicitly mention alternatives, but the context and 'USE THIS TOOL WHEN' provide clear direction.

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)A
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
houseNoRestrict to one House. Default 'both'.both
topicYesPhrase 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_dateNoEnd date (YYYY-MM-DD)
from_dateNoStart date (YYYY-MM-DD)
max_debates_scannedNoHard 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

ParametersJSON Schema
NameRequiredDescription
houseYesHouse filter applied
topicYesPhrase searched in Hansard
by_yearNoCounts of debates by sitting year, desc by year
to_dateNoEnd date filter applied
by_houseNoCounts of debates by house (Commons vs Lords)
by_partyNoCounts 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_dateNoStart date filter applied
by_sectionNoCounts of debates by Hansard section bucket (Chamber / Westminster Hall / Written Answers / Written Statements)
top_debatesNoTop 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_debatesYesTotal distinct debates touching this topic (TotalDebates)
debates_scannedYesNumber of debates pulled from /search/Debates.json for the facet breakdown (≤ max_debates_scanned)
total_divisionsYesTotalDivisions upstream count. Non-zero → consider votes_search_divisions.
top_contributorsNoALWAYS EMPTY in this summary — see by_party note. Use parliament_member_debates after picking a debate from top_debates.
by_month_recent_12NoCounts of debates by YYYY-MM for the most recent 12 months in the sample, desc by month
total_contributionsYesTotal contributions in Hansard matching topic+filters (TotalContributions)
total_written_answersYesTotalWrittenAnswers upstream count
total_written_statementsYesTotalWrittenStatements upstream count
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds significant behavioral context: 'Pure counts — no LLM, no editorial labels', 'Sweeps /search/Debates.json with pagination', 'Hansard rate limit: 1000 req/5min', and details about max_debates_scanned. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (USE THIS TOOL WHEN, aggregation description, after-calling guidance, limitations note). It front-loads the purpose in bold. While somewhat lengthy, every sentence adds value. Minor redundancy could be trimmed but overall effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (mentioned in context signals), the description does not need to detail return values. It adequately covers the tool's purpose, usage, limitations, and relationship to sibling tools. It provides complete guidance for an AI agent to correctly select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%. The description adds meaningful context for parameters, especially 'topic' which explains matching semantics and why Bill titles work, and 'max_debates_scanned' which explains default behavior and rate limit implications. This goes beyond the schema's descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Aggregates Hansard debate-level signals on a topic... Pure counts — no LLM, no editorial labels.' It distinguishes from sibling tools by specifying that it provides corpus-level breakdowns without reading every contribution, and contrasts with parliament_get_debate_contributions for drilling into specific debates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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 WHEN you want debate-level corpus signals on a topic — by_house, by_year, by_section breakdowns — without reading every contribution.' It also provides clear follow-up guidance: 'AFTER calling, pick a debate from top_debates and pass its debate_ext_id into parliament_get_debate_contributions.' Additionally, it explains what the tool does not provide (member-level facets) and directs to alternative tools for that information.

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 DebatesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
houseNoRestrict to one House. Default 'both' returns Commons + Lords contributions.both
limitNoMax contributions per call (1–100). Default 20. Paginate further with offset; total corpus size is in total_corpus on the response.
queryYesPhrase 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.
offsetNoSkip this many contributions before the page. Default 0. Re-call with offset=offset+returned to paginate; has_more flags whether more remain.
to_dateNoEnd date (YYYY-MM-DD)
from_dateNoStart date (YYYY-MM-DD)
member_idNoFilter 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_modeNo'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_typeNoWhich 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

ParametersJSON Schema
NameRequiredDescription
houseNoHouse filter applied
limitNoPage size requested
queryYesThe phrase that was searched in Hansard
totalYesNumber of contributions returned in this call
offsetNoSkip applied to this page (Hansard API: skip)
to_dateNoEnd date filter applied, if any
has_moreNoTrue if a full page was returned (more may exist; re-call with offset=offset+limit)
from_dateNoStart date filter applied, if any
member_idNoMembers API integer ID filter applied, if any (echoed from input).
text_modeNoWhether contribution `text` carries the upstream preview or full body (still capped).
date_rangeNo(min, max) SittingDate of returned contributions, or None if empty
top_debatesNoTop-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_corpusNoTotal contributions in Hansard matching this query (TotalContributions). Use to decide whether to paginate further or escalate to parliament_policy_position_summary.
contributionsNoMatching Hansard contributions with full citation metadata.
top_divisionsNoTop-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_debatesNoTotalDebates — distinct debates touching this topic.
total_membersNoTotalMembers — member-name matches in the corpus.
house_breakdownNoCounts by house across the returned page
party_breakdownNoCounts by party across the returned page
total_divisionsNoTotalDivisions. Non-zero → consider `top_divisions` previews below or chain to votes_search_divisions.
total_petitionsNoTotalPetitions.
total_committeesNoTotalCommittees.
total_correctionsNoTotalCorrections — published corrections to the Hansard record.
total_written_answersNoTotalWrittenAnswers.
total_written_statementsNoTotalWrittenStatements.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, etc. The description adds significant behavioral context: pagination via limit+offset, query tokenization behavior, bill title matching caveat, text_mode details, and response metadata (total_corpus, has_more). 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, structured in clear paragraphs, no unnecessary words. Every sentence provides value. Concise given the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a search tool with output schema: covers workflow (drill into full content via read_resource or parliament_get_debate_contributions), pagination, parameter intricacies, and sourcing. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds crucial meaning: explains query tokenization, bill title mismatches, member_id clarification (old member field issue), text_mode behavior, and offset pagination details. Significantly enriches schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'USE THIS TOOL WHEN searching Hansard by topic, bill title, or text phrase.' It specifies the verb (search) and resource (Hansard), and distinguishes it from siblings like parliament_find_member and parliament_get_debate_contributions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance on when to use (by topic/bill/text) and when not (member name), plus alternatives: chain parliament_find_member → parliament_get_debate_contributions for member search, or parliament_policy_position_summary for breadth. Also notes authoritative source.

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 PetitionsA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum petitions to return. Default 20.
queryYesSearch term for petition titles, e.g. 'ban trophy hunting' or 'NHS funding'.
stateNoFilter by petition state.all
offsetNoNumber of petitions to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitNoPage size requested
queryYesThe term that was searched in petitions
stateYesPetition state filter applied to this query
totalYesNumber of petitions returned in this call
offsetNoSkip applied to this page
has_moreNoTrue if a full page was returned (more may exist)
petitionsNoMatching petitions (title, state, signature count, key dates, URL).
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context: it returns specific fields (title, state, signature count, dates) and notes that results include government response or debate dates if applicable. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short paragraphs, each earning its place. The usage directive is front-loaded. No redundant or unnecessary sentences. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of output schema (mentioned) and annotations, the description covers all needed aspects: purpose, parameters, return fields, filtering, pagination hints (offset description explains re-call logic), and authoritative source. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema fully documents all parameters. The description adds minimal additional meaning (e.g., example search terms for query), but baseline 3 is appropriate since it doesn't introduce new semantic information beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description starts with 'USE THIS TOOL WHEN searching UK Parliament petitions by keyword or topic,' clearly specifying the exact resource (UK Parliament petitions) and action (search). It distinguishes from sibling tools like bills_search_bills by focusing exclusively on petitions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use the tool (searching petitions) and mentions filtering by state to narrow results. While it doesn't explicitly list when not to use it, the sibling context and clear scope make usage unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_resourceA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesThe URI of the resource to read

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds valuable behavioral details: returns content as string, with base64 encoding for binary data. This goes 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences, front-loaded with the core purpose, and every sentence adds distinct value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single simple parameter and an output schema that presumably details return structure, the description is complete: it covers the two resource types and mentions encoding for binary content. No gaps remain for an agent to understand usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description for the 'uri' parameter is minimal ('The URI of the resource to read'), but the tool description adds crucial context: for static resources provide exact URI, for templated resources fill in parameters. This meaningfully enhances the schema information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Read a resource by its URI' and elaborates on static vs templated resources, making the purpose unmistakable. It implicitly distinguishes from sibling tools that are specific to resource types (e.g., bills_get_bill).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use based on having a URI and handling static vs templated resources, but does not provide guidance on when to use alternative sibling tools that are more specific, such as legislation_get_section or judgment_get_paragraph.

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 DetailA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
houseNoWhich house this division belongs to.Commons
division_idYesDivision ID from votes_search_divisions results.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesDivision ID
dateYesDate of the division
houseYesCommons or Lords
titleYesDivision title / motion text
passedYesWhether the motion passed
truncatedNoWhether voter lists were truncated to fit response limits
aye_votersNoMembers who voted Aye (may be truncated)
ayes_countYesTotal Aye votes
noe_votersNoMembers who voted No (may be truncated)
noes_countYesTotal No votes
total_aye_votersNoTotal number of Aye voters before truncation
total_noe_votersNoTotal number of No voters before truncation
is_government_winNoWhether the government won (Lords only)
Behavior5/5

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 important behavioral context: voter lists are truncated to 100 per side for response limits, but total counts remain accurate. This goes beyond annotations and provides practical knowledge for agent usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences: a clear usage directive and a behavioral note. Every sentence adds value, and the structure is front-loaded for immediate understanding. No unnecessary information is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core purpose, prerequisites, and a critical behavioral detail (truncation). With an output schema existing, return formatting is not needed. Some context about potential errors or edge cases is missing, but overall it is sufficiently complete for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, so both parameters (division_id and house) are fully described in the schema. The description only mentions the parameters without adding new semantic details. Per guidelines, baseline 3 is appropriate as the schema already carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool's purpose: retrieving the full member-by-member voting record given a division_id and house. It distinguishes itself from sibling tools by directing chaining from votes_search_divisions or parliament_get_debate_divisions, making the purpose clear and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage instructions: 'USE THIS TOOL WHEN you have a division_id + house'. It also suggests chaining from specific tools to obtain the needed division_id. However, it does not explicitly state when not to use the tool or offer alternative tools for similar tasks, slightly reducing clarity.

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 DivisionsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
houseNoWhich house to search.Commons
limitNoMaximum divisions to return. Default 25 (Commons API max-per-page).
queryNoSearch term for division titles, e.g. 'Rwanda' or 'Online Safety Bill'. Omit to browse recent divisions.
offsetNoNumber of divisions to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true.
to_dateNoEnd date (YYYY-MM-DD).
from_dateNoStart date (YYYY-MM-DD).
member_idNoFilter to divisions where this member voted. Get the member ID from parliament_find_member.

Output Schema

ParametersJSON Schema
NameRequiredDescription
houseYesCommons or Lords
limitNoPage size requested
queryNoThe search term, if any (None = browse recent)
totalYesNumber of divisions returned in this call
offsetNoSkip applied to this page
has_moreNoTrue if a full page was returned (more may exist)
divisionsNoMatching divisions. Use the integer `id` field with votes_get_division to fetch the full voter list.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds that it returns division summaries (title, date, vote counts, pass/fail) and states it's the authoritative source. No behavioral contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is 4 sentences, front-loaded with the usage instruction, no filler. Each sentence adds value: purpose, return type, workflow hint, and authority claim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 optional parameters, full schema coverage, and availability of output schema, the description effectively communicates the tool's role and how it fits into a search-and-detail workflow. It mentions return fields and source authority, making it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with detailed descriptions for all 7 parameters. The tool description does not add parameter-level semantics beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool's purpose: searching Commons or Lords formal votes by topic, date, or member. It uses a clear verb (search) and resource (parliamentary divisions), and distinguishes from sibling tool votes_get_division by outlining the workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description starts with 'USE THIS TOOL WHEN' specifying the exact scenario. It also provides clear guidance on the follow-up tool (votes_get_division) for full details, effectively differentiating use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Discussions

No comments yet. Be the first to start the discussion!

Try in Browser

Your Connectors

Sign in to create a connector for this server.