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 34 of 34 tools scored.

Server CoherenceA
Disambiguation5/5

Every tool has a clearly distinct purpose with detailed descriptions that prevent ambiguity. Overlapping tools like the three Hansard search variants are distinguished by their specific use cases (verbatim text search vs. member-attributed retrieval vs. corpus signals).

Naming Consistency4/5

Tools follow a mostly consistent `verb_noun` pattern (e.g., `bills_get_bill`, `legislation_search`). Minor deviations like `hmrc_check_mtd_status` (acronym) and `votes_get_division` (verb before noun) are understandable given domain conventions, but slightly break uniformity.

Tool Count4/5

34 tools is a large number, but the domain (UK legal research) is broad and each tool addresses a specific need. The count feels justified for the comprehensive coverage of legislation, case law, parliament, and HMRC.

Completeness4/5

The tool set covers major areas: bills, case law, legislation, parliamentary debates, committees, petitions, votes, citations, and HMRC guidance. Minor gaps like tribunal-specific searches or older case law coverage are noted but acceptable given the stated scope.

Available Tools

34 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
paramsYesBillDetailInput.

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 indicate readOnlyHint, idempotentHint, etc. The description adds value by specifying returned fields (sponsors, stage, summary, royal assent) and explaining summary truncation behavior with max_summary_chars and the summary_truncated check, 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?

The description is concise, structured with clear sections (USE THIS TOOL WHEN, AFTER calling), and no redundant sentences. Every sentence provides essential guidance.

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 appropriately covers key return fields and truncation behavior. All necessary context for tool selection and usage is present.

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?

With 100% schema description coverage, the description still adds meaningful context: bill_id originates from bills_search_bills, and max_summary_chars has practical advice on raising for substantive bills 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 explicitly states the tool's purpose: to get full bill detail when you have a bill_id from bills_search_bills. This clearly distinguishes it from sibling tools like bills_search_bills.

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 provides explicit when-to-use context (having bill_id from search results) and suggests follow-up actions like parliament_search_hansard for debates and bills_search_bills for adjacent bills, effectively guiding the agent on when to use 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
paramsYesBillSearchInput.

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=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds that it returns a paginated page of bill summaries (title, current stage, Act status), which is useful behavioral context. It does not contradict annotations.

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

Conciseness5/5

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

The description is concise, consisting of four sentences that are front-loaded with the usage instruction, then output summary, next step, and authority statement. Every sentence adds value with no waste.

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?

Given the tool has an output schema and nested objects, the description covers purpose, output format (summaries), follow-up action, and authority. It omits pagination details (handled in schema) and error handling, but is sufficiently complete for an AI agent to use effectively.

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% with decent descriptions for each parameter. The description merely lists the filter types (keyword, session, house, legislative stage) that map to schema parameters, adding little beyond what the schema already provides. Baseline score 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 starts with 'USE THIS TOOL WHEN searching UK parliamentary bills by keyword, session, house, or legislative stage,' which provides a specific verb, resource, and filtering criteria. It explicitly distinguishes from the sibling 'bills_get_bill' for detailed follow-up, and asserts authority, leaving no ambiguity about its purpose.

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 clearly states when to use the tool (searching bills) and directs users to call 'bills_get_bill' with a bill_id for full detail. While it does not explicitly mention when not to use it or contrast with other search tools like 'legislation_search', the guidance is sufficient and context-rich.

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

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
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that the tool returns a list of {eId, snippet, match} hits, small per-paragraph snippets centred on the match, and explains the pattern fallback behavior (regex to literal substring). This provides useful additional 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.

Conciseness5/5

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

The description is concise and well-structured: it starts with the usage directive, explains what is returned, gives use cases, and contrasts with a sibling tool. 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?

Despite the complexity of a regex search tool with multiple parameters and an output schema, the description covers all essential aspects: when to use, what it returns, how to follow up, and the fallback behavior. The presence of an output schema reduces the need to detail return values, but the description still concisely summarizes the key fields.

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%, so the baseline is 3. The description adds context like the return format and usage pattern, but does not substantially enhance parameter meaning beyond the thorough schema descriptions (e.g., slug format, pattern behavior). The fallback behavior is already in the schema's pattern description.

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 judgment slug and want to find paragraphs whose text matches a pattern,' clearly stating the verb (search) and resource (within a UK court judgment). It distinguishes from sibling tool judgment_get_index by noting that the latter is for paragraph-number navigation by eId.

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 when-to-use guidance ('USE THIS TOOL WHEN you have a judgment slug'), provides use cases like searching for 'negligence', and instructs users to read full paragraphs via judgment_get_paragraph after calling. It also specifies when not to use it (for paragraph navigation, use judgment_get_index instead).

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
paramsYesCitationsNetworkInput with case_uri (TNA slug, e.g. 'uksc/2024/12').

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'
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idlempotentHint=true, and destructiveHint=false. The description adds value by explaining the tool fetches XML, parses OSCOLA citations, and returns grouped, deduplicated, sorted results. It does not contradict annotations.

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

Conciseness5/5

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

The description is concise with no wasted words. It front-loads the purpose with 'USE THIS TOOL WHEN', then provides process details and follow-up instructions in a well-structured manner.

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 (not shown but mentioned in context), the description does not need to detail return values. It covers input requirements, process logic, and post-call actions, making it 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.

Parameters4/5

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

Schema coverage is 100% for the single parameter case_uri, so baseline is 3. The description adds extra context: 'Use the 'uri' field from case_law_search results — not the full URL. Do not include the 'https://caselaw.nationalarchives.gov.uk/' prefix.' This enhances clarity 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 judgment slug and want to map every citation it makes', providing a specific verb and resource. It distinguishes the tool from siblings like citations_resolve and citations_parse by stating its comprehensive citation mapping role.

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 (with a judgment slug) and instructs the agent to pass individual citations to citations_resolve afterwards for confirmation and canonical URL retrieval. This provides clear chaining guidance and differentiation.

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

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
Behavior5/5

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

The description discloses key behaviors: pure regex parsing by default, optional LLM-based disambiguation, URL resolution when possible, and the limitation that it does not confirm document existence. This adds value beyond annotations.

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

Conciseness5/5

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

The description is well-structured with a clear opening, bullet-like list of citation types, concise explanations of parsing and disambiguation, and a concluding instruction. 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?

Given the tool's complexity and the presence of an output schema, the description covers purpose, input, behavior, and post-processing steps. It also references the sibling tool for resolution, making it fully informative for an AI agent.

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 description adds meaning to the input schema parameters: it explains the disambiguate parameter with clear guidance on when to use it, and reiterates supported citation types. This compensates for the schema's concise 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 citations from free text. It lists specific citation types and distinguishes itself from the sibling tool citations_resolve by noting that parsing does not verify document existence.

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 the tool ('USE THIS TOOL WHEN you have free text...') and provides guidance on using disambiguate optionally. It also instructs to follow up with citations_resolve for verification, offering clear usage context.

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 when you have a citation and want to confirm it points at a real document.

Parses + resolves a single citation (neutral citation, SI, legislation section, retained EU law) and returns the parsed fields plus a resolved_url. Raises ValueError if nothing recognisable is found.

For neutral citations, performs a live HTTP HEAD check against TNA Find Case Law to confirm the judgment exists. If TNA returns non-200, confidence is set to 0.0 — the citation parsed successfully but the document does not exist at the constructed URL. DO NOT format or quote a citation with confidence 0.0 as verified; surface the failure and ask the user for the source URL or better identifying details.

Formatting a citation from "known" fields (year, court, number) without prior resolution is the most common citation-fabrication route — the formatter accepts whatever you give it and produces plausible-looking output for invented inputs. 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 or better identifying details.

Authoritative source for UK legal-citation resolution.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYesCitationsResolveInput.

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?

Annotations already declare readOnlyHint=true and idempotentHint=true, but the description adds significant detail: live HTTP HEAD check for neutral citations, confidence=0.0 on TNA non-200, ValueError on unrecognized input, and a strong warning against using low-confidence results. 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 a capitalized directive. All sentences are substantive, covering purpose, behavior, failure modes, and warnings. While longer than minimal, it efficiently conveys essential information without verbosity.

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 complexity (1 param, output schema present, annotations covering safety), the description is complete. It addresses when to use, how it works (including live HTTP check), failure modes, and user guidance. No gaps remain for an agent to misuse the 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?

Schema coverage is 100% with a clear description and example for the citation parameter. The tool description repeats this but adds context about resolution behavior. Since schema does most of the work, baseline is 3; description adds minimal extra semantic 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 verb 'resolve' and the resource 'single OSCOLA citation'. It provides specific context: 'USE THIS TOOL BEFORE constructing an OSCOLA citation string... OR when you have a citation and want to confirm it points at a real document.' This distinguishes it from siblings like citations_parse (likely parse only) and emphasises the resolution aspect.

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 when-to-use guidance is given (before formatting, for verification). It also tells when NOT to use: if the tool fails, do not manufacture a citation. It warns against common fabrication errors and advises to ask for source URL. This is comprehensive and actionable.

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

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

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
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds that it fetches detail and member list in parallel, a key behavioral trait 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?

Three sentences, no fluff, front-loaded with the usage instruction. Every sentence provides necessary information.

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?

With only one parameter, output schema present, and rich annotations, the description adds relevant context about parallel fetching and follow-up action, making it complete for a simple getter 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?

Schema description already covers the parameter source ('Committee ID from committees_search_committees results.'). Description does not add additional meaning beyond that.

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 to use when having a committee_id to get metadata and current membership. Distinguishes from sibling tools like committees_search_committees and committees_search_evidence.

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 you have a committee_id') and provides a clear next step (use committees_search_evidence). No exclusion of alternatives needed as context is clear.

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

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 indicate readOnlyHint, idempotentHint, openWorldHint, and non-destructive. The description adds that it returns committee summaries with specific fields (name, house, active status, ID) and includes a note about the default limit covering all active committees. This is sufficient 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 two sentences long, front-loaded with the usage trigger, and contains zero wasted words. It efficiently conveys purpose, return, and next steps.

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 a complete output schema (not shown but indicated), the description adequately explains the return value (committee summaries) and connects to related tools. No gaps are evident for the tool's intended use.

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 input schema has 100% description coverage for all parameters. The description only briefly mentions 'by name, house, or active status', which aligns with parameters query, house, and active_only. This adds marginal value beyond the schema, so a 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 searches or lists UK parliamentary select committees by name, house, or active status. It distinguishes itself from sibling tools like committees_get_committee and committees_search_evidence by specifying that it returns summaries and should be used first for discovery.

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 ('USE THIS TOOL WHEN searching or listing...') and provides explicit follow-up steps: pass committee_id to committees_get_committee or committees_search_evidence. This gives clear guidance on workflow and alternatives.

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

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
Behavior4/5

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

Adds behavioral details beyond annotations: returns one page, caps on titles and witness lists, and pagination logic. Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description supplements with useful operational behavior.

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 highly informative paragraphs. Every sentence adds value: first sentence states purpose, second sentence explains pagination and caps, third sentence reinforces pagination, fourth establishes authority. No redundancy.

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?

Covers pagination, caps, and data source. With an output schema present, return value details are not needed. Lacks error handling or rate limits, but for a read-only paginated tool with annotations, it is sufficiently complete.

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 all 5 parameters with 100% coverage. Description adds context: explains that limit splits when evidence_type='both' and that max_title_chars default prevents context blow-up. 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 when to use this tool ('when you have a committee_id and want the oral and written evidence submitted to it'), specifies the verb 'search' and resource 'evidence', and is distinguishable from sibling tools like committees_search_committees.

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 the condition for use (having a committee_id) and provides clear pagination instructions ('re-call with offset=offset+returned while has_more is true'). No explicit when-not-to-use, but context from sibling names implies differentiation.

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?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds behavioral context about the return format (JSON with messages array) and that arguments are a dict, which is 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 concise (3 sentences) and front-loaded with the main action. Every sentence adds necessary information 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 the presence of an output schema, the description sufficiently covers the tool's behavior: what it does, input parameters, and the structure of the return value. No gaps remain.

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 adds value by specifying that arguments should be provided as a dict mapping names to values. It also clarifies that arguments are optional, reinforcing 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 'Get a prompt by name' and specifies the return format (rendered prompt as JSON with messages array). It distinguishes from sibling 'list_prompts' which likely lists prompts, so purpose is unambiguous.

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 provides clear usage context (get a prompt by name with optional arguments) but does not explicitly state when not to use it or mention alternatives. The sibling 'list_prompts' exists, but no direct guidance is given.

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

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
Behavior4/5

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

Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses that the tool connects to the HMRC sandbox by default, requires HMRC_CLIENT_ID and HMRC_CLIENT_SECRET env vars, and raises an error if credentials are missing. It also warns against inferring status. 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 concise (6 sentences) and well-structured. The first sentence provides immediate usage guidance, followed by return fields, then setup instructions. Every sentence adds value with no repetition or 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 simplicity (single parameter, output schema exists), the description covers all necessary context: usage trigger, return fields, environment configuration, and error conditions. It is complete for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

The single parameter (vrn) is fully described in the input schema (100% coverage), including format, length, and GB prefix handling. The description reiterates the 9-digit requirement and prefix stripping but does not add 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 tool's purpose: to check a business's Making Tax Digital VAT mandate status using a 9-digit VAT Registration Number. It specifies the resource ('MTD status') and the action ('check'), and distinguishes from sibling tools like hmrc_get_vat_rate and hmrc_search_guidance by focusing on MTD compliance.

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 the tool ('when you have a 9-digit VAT Registration Number and need that business's Making Tax Digital VAT mandate status'). It also provides setup guidance (sandbox vs production, required env vars) and warns about credential errors. It does not explicitly mention when not to use or name alternatives, but the context is sufficient.

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

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)
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, establishing safety. The description adds value by revealing the tool uses a static lookup table with a specific date, and warns that rates may have changed, which is helpful 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.

Conciseness5/5

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

Three short sentences: the first gives a clear usage directive, the second lists return values, the third provides a critical caveat. No redundant information, every sentence serves a purpose.

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, the description covers usage criteria, return format (rates, date, conditions), critical temporal limitation, and a fallback behavior. An output schema exists, so return value explanation is not needed. Completely sufficient for an agent to select and invoke correctly.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter 'commodity_code', including examples and constraints. The description does not add new semantic information beyond the schema, so it meets the baseline 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' and clearly states the tool's purpose: to get the VAT rate category for a UK commodity or service description. It specifies the exact rates returned and distinguishes from the sibling tool hmrc_search_guidance for verification.

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 the tool (when you have a commodity/service description) and provides a clear alternative (hmrc_search_guidance) for time-sensitive or updated advice. The limitation about the static lookup table current as of Nov 2023 is highlighted.

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

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.
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint. The description adds return fields (titles, URLs, summaries, dates) and asserts authority as 'Authoritative source for current HMRC tax guidance', which is useful 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.

Conciseness5/5

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

The description is concise (3 sentences), front-loaded with purpose, and every sentence adds value. No wasted words.

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?

Given the output schema exists and parameter count is low, the description is sufficiently complete. It covers what is searched, what is returned, and why it's authoritative.

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 description only adds minor context (e.g., 'filtered to HMRC publications', example queries). Baseline 3 applies; no significant added semantics.

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 verb 'search' and the resource 'HMRC tax guidance on GOV.UK', and distinguishes it from siblings by specifying HMRC-specific content.

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?

It provides clear when-to-use guidance ('USE THIS TOOL WHEN searching GOV.UK for HMRC tax guidance') and explicitly warns against using web search for this purpose ('do not supplement'), offering clear alternatives.

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

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 declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds critical behavioral details: content truncation at max_chars with a content_truncated response field, a warning to check extent, and note that schedules are not supported. 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 bullet points and front-loaded purpose. While slightly verbose for a simple tool, every sentence earns its place by providing actionable guidance or caveats. 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 complexity (legislation types, extent, truncation) and the presence of an output schema, the description fully covers what the tool returns (text, extent, in-force status, prospective flag), mentions truncation behavior, explicitly warns about checking extent, and notes unsupported schedules. It is complete for effective use.

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 meaningful context beyond the schema: for 'type' it instructs to use value from legislation_search results, for 'section' it clarifies to use numeric part only, and for 'max_chars' it gives usage guidance (raise for definition sections). This adds 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 begins with 'USE THIS TOOL WHEN you have a known Act / SI and want the parsed text of a specific section' which clearly states the verb (get parsed text) and resource (section of an Act/SI). It also distinguishes itself from the sibling tool 'read_resource' by contrasting parsed structured response vs raw XML.

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 (when you have a known Act/SI and want parsed text with metadata) and provides an alternative (read_resource for raw XML). It also includes a strong directive to always check 'extent' to avoid legal research errors, but does not exhaustively list 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.

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

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?

Annotations already indicate readOnly, idempotent, non-destructive. Description adds pagination behavior (offset/limit, has_more, total_items), example output, and correct usage of numeric identifiers. 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?

Description is well-structured with use-case, output description, example, pagination, and alternative. Slightly long but front-loaded and organized. Could be slightly more concise.

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 presence of output schema, description covers required context: when to use, what is returned (structural elements, example), pagination, and alternative approach. No gaps identified.

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 has 100% description coverage, so baseline is 3. Description adds context: explains type derivation from search results, usage of offset/limit with example, and warning about numeric ID format. 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 returns structural table of contents for known Acts/SIs, distinguishes from 'legislation_get_section' by specifying full text retrieval, and provides an example. The purpose is 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?

Explicitly says 'USE THIS TOOL WHEN you have a known Act / SI and want the structural table of contents'. Provides an alternative (read_resource) and explains when to use each. Also mentions pagination for large statutes.

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
Behavior4/5

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

Annotations already provide readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false. The description adds that it returns JSON with metadata, which is useful context 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?

Two sentences, front-loaded with the main action, no wasted words. Efficient and clear.

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?

With no parameters, rich annotations, and an output schema, the description fully covers the needed context. It is complete for this simple 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 exist, so schema coverage is 100%. The description adds no parameter info, which is appropriate because none is needed. Baseline 4 applies.

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 'List all available prompts' with a specific verb and resource. It effectively distinguishes from the sibling 'get_prompt' by implying a collection versus a single item.

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 when to use (to list all prompts) but lacks explicit guidance on alternatives. It does not mention when not to use or compare with 'get_prompt' or 'list_resources'.

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 indicate read-only, idempotent, non-destructive behavior. The description adds value by explaining the response format (JSON with 'uri' for static resources and 'uri_template' for templates), which is beyond what annotations provide.

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

Conciseness5/5

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

The description is concise, comprising two clear sentences. The key action and resource are front-loaded, with no unnecessary information.

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 zero parameters and the presence of an output schema, the description fully covers the tool's purpose and distinguishes between resource types. It provides sufficient context for an AI agent to understand what the tool does and what it returns.

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 input schema has zero parameters, so schema description coverage is 100%. The description does not need to explain parameters; it adds value by describing the output structure, which is relevant for tool usage.

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 'List all available resources and resource templates,' specifying the verb (list) and resource type. It distinguishes between static resources and templates, differentiating from sibling tools like list_prompts which list prompts instead.

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 does not explicitly state when to use this tool versus alternatives. While it implies use for obtaining a full list of resources, it lacks guidance on when not to use it or mention of sibling tools like search functions.

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
paramsYesFindMemberInput with the name (full or partial).

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 provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds behavioral context beyond annotations: it returns all matching members (multiple results), not just one; includes disambiguation example ('Lord Smith' returns multiple peers). 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 well-structured: starts with a bold instruction ('USE THIS TOOL WHEN'), then lists return fields, then provides usage guidance. No wasted words, every sentence adds value. Concisely covers purpose, usage, and disambiguation.

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 (1 parameter, low complexity), the description is complete. It explains the return value, workflow (call before ID-based filters), and disambiguation. An output schema exists (mentioned in context signals), so description doesn't need to detail return structure. All necessary information is present.

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 description coverage is 100% (the 'name' parameter has a clear description with examples). The description adds meaning beyond schema: it explains that the result includes an integer id, party, constituency, etc., and that partial names are valid. It also shows disambiguation behavior.

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: given a member's name, return their integer member_id. It specifies the return fields (id, party, constituency, house, current-sitting status) and disambiguation for common names. This is specific and distinguishes it from siblings like 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?

The description explicitly says 'USE THIS TOOL WHEN you have a member's name and need their integer member_id.' It instructs to call this before tools that filter by member_id, listing specific sibling tools (parliament_get_debate_contributions, parliament_member_debates, parliament_member_interests). It warns against skipping this step and mentions the Pannick case to emphasize the need.

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
paramsYesGetDebateContributionsInput with debate_ext_id (required) and optional member_id filter.

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 already provide readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable behavioral context: without member_id returns all contributions (~100-200 items), and instructs to report empty results honestly without reconstructing quotes. This goes beyond annotations without contradicting them.

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

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, canonical path explanation, typical chain, and notes on empty results. While slightly verbose, every sentence earns its place and the most critical information is front-loaded. Minor redundancy in the chain description reduces conciseness slightly.

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 complexity (optional filtering, integration with other parliamentary tools), the description is comprehensive. It covers when to use, when not to use, typical usage patterns, and error handling (empty results). With full schema coverage and annotations, no significant gaps remain.

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 meaning: explains that member_id filters by member regardless of vocabulary, typical debate size, and the origin of debate_ext_id from other tools. This enriches the schema's descriptions and aids correct parameter usage.

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 you have a debate_ext_id and want verbatim contributions, optionally filtered to one member.' It uses a specific verb ('get') and resource ('contributions in a debate'), and distinguishes from siblings by contrasting with text-search tools like parliament_member_debates 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 you have a debate_ext_id...') and provides alternatives: text-search tools for text-based filtering vs. this tool for member-based filtering regardless of vocabulary. Includes a typical chain for tool composition, giving clear guidance on integration with other tools.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYesGetDebateDivisionsInput with the debate_ext_id GUID (chain from parliament_search_hansard contribution.debate_ext_id or 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.
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint, and openWorldHint. The description adds valuable context beyond these: it explains that empty results are honest and expected, and describes typical scenarios where divisions occur. This enhances transparency about the tool's behavior without contradicting 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 front-loaded with the key usage instruction in the first sentence, followed by concise context about when divisions occur and the meaning of empty results. It contains no wasted words and is efficiently structured for quick understanding.

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 tool with one parameter and an output schema (not shown but indicated), the description covers all necessary context: when to use, what to expect, typical cases, and how to interpret empty results. It is complete for an AI agent to use correctly.

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% with a detailed description for the single parameter debate_ext_id (including chaining instructions). The description does not add additional semantic meaning beyond what is already in the schema, which is thorough. Therefore, baseline score 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: 'USE THIS TOOL WHEN you have a debate_ext_id and want the divisions (formal votes) held within it.' It specifies the verb 'Get Divisions' and the resource 'Debate', distinguishing it clearly from sibling tools like 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?

The description explicitly provides when-to-use guidance: 'USE THIS TOOL WHEN you have a debate_ext_id and want the divisions...' and also explains when not to expect results: 'Most debates contain no divisions — Business of the House sittings, statements, urgent questions, debates without a vote.' It further clarifies that an empty list is not a failure.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYesLookupByColumnInput with column_number, volume_number, house.

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?

The description adds behavioral context beyond the annotations (readOnlyHint, idempotentHint, etc.). It explains that the tool resolves citations and requires the volume number, and clarifies that the date is not an alternative. There is no contradiction with annotations.

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

Conciseness5/5

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

The description is very concise: two short paragraphs. The first gives a clear imperative usage directive with an example. The second provides technical nuance about the volume requirement. No 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 that annotations cover safety and output schema exists, the description is complete: it covers purpose, usage, parameters, and post-call actions. No gaps remain.

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 schema has 100% description coverage for parameters, but the description adds significant meaning: it explains the OSCOLA format, column suffix (e.g., 'W' for written answers), and the necessity of volume number. This adds value 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 tool's purpose: resolving an OSCOLA-style Hansard citation (column + volume + house) to find the debate. It provides an example and distinguishes itself from sibling tools like parliament_get_debate_contributions by specifying that after calling this tool, one should use another tool to read 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?

The description explicitly says 'USE THIS TOOL WHEN' and gives an example. It also provides crucial guidance that the sitting date is NOT a substitute for volume number, which is verified live. Furthermore, it advises on subsequent steps (using read_resource or parliament_get_debate_contributions).

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
paramsYesMemberDebatesInput with member_id and optional topic filter.

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.
Behavior5/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds behavioral context: text-body search matches contributions containing the phrase, member must have used the phrase verbatim, text field capped at 3000 characters. 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 well-structured with bold headings and bullet-like clarity, front-loading the core use case. Every sentence adds value, but it is somewhat long. Minor deduction for length, but overall 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 an output schema, the description does not need to explain return values. It fully covers purpose, guidelines, parameter semantics, and behavioral details including the text cap. It also differentiates from sibling tools, making the documentation complete.

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% (all params described). Description provides extensive guidance beyond schema: for topic param, explains what phrases work (distinctive arguments, statutory references) and what doesn't (bill names), and how to paginate with offset. The description adds significant 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: 'USE THIS TOOL WHEN you have a member_id and want contributions where THAT member used a specific topic phrase verbatim (text-body search).' It identifies verb, resource, and scope, and distinguishes from sibling tools like 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?

Explicitly states when to use (text-body search for member's phrase), when not to use (verbatim retrieval of all contributions in a debate), and provides prerequisite (call parliament_find_member first). Also names an alternative tool for other use cases.

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
paramsYesmember_id, optional category filter, pagination (offset/limit), and max_description_chars content cap.

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?

Annotations declare readOnlyHint, idempotentHint, destructiveHint false. Description adds key behavioral details: hard-capped limit at 20 (verified live), pagination via offset, text truncation via max_description_chars, and authoritative status vs web search.

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?

Description is front-loaded with usage guidance and well-structured. However, it is somewhat lengthy; could trim minor details like the exact date of verification without losing clarity. Still, 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 tool's complexity (pagination, categories, content caps, authoritative source), the description covers all important aspects. It references response fields (totalResults, has_more) for pagination, and explains output schema implications without needing to replicate it.

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% with detailed descriptions for each parameter (limit, offset, category, member_id, max_description_chars). Description adds context like live verification of cap, pagination mechanics, and when to raise max_description_chars.

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 registered financial interests for a UK MP or peer using a member_id. It lists categories (donations, directorships, etc.) and distinguishes from siblings like parliament_find_member by being the authoritative source for financial declarations.

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 says 'USE THIS TOOL WHEN you have a member_id' and instructs to call parliament_find_member first. Provides pagination guidance for prolific members and notes to avoid web search for stale data.

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
paramsYesPolicyPositionSummaryInput with topic, optional date range, house, max_debates_scanned.

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?

The description details the tool's behavior: it aggregates Hansard debate-level signals with pure counts (no LLM), uses pagination up to max_debates_scanned, sweeps /search/Debates.json, and captures envelope counts. It also explains limitations regarding member-level facets. This adds significant context beyond the annotations (readOnlyHint, idempotentHint).

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 opening directive, then explains the aggregation process, post-call instructions, limitations, and cross-references. Every sentence is informative and earns its place. Despite length, it is efficient and front-loaded.

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 tool's outputs (by_house, by_year, etc., and envelope counts), explains why certain facets are missing (member-level), and provides guidance on next steps. Considering the nested input schema and the fact that an output schema exists (mentioned in context), the description is comprehensive and leaves no critical 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?

All parameters have descriptions in the input schema (100% coverage). The tool description for parameters adds extra context: e.g., for 'topic', it clarifies the semantics and differences from sibling tools; for 'max_debates_scanned', it explains defaults, maximum, and rate limits. This greatly enhances 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' and clearly defines the tool's purpose: providing debate-level corpus signals (by_house, by_year, by_section breakdowns) without reading every contribution. It distinguishes from sibling tools by noting that member-level facets are not included and directing to other tools for those needs.

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 and provides post-call guidance ('AFTER calling, pick a debate...'). It also explains what the tool does not do (member-level facets) and suggests alternative tools for such cases.

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

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 declare readOnlyHint, idempotentHint, destructiveHint, openWorldHint. Description adds valuable context: pagination behavior (limit+offset), citation-grade metadata, authoritative source, and drill-down workflow. 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?

Well-structured with clear sections and front-loaded purpose. Slightly lengthy due to rich explanations, but every sentence adds value. Could be more concise by removing some redundancy with schema descriptions.

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 complexity and the presence of an output schema, the description covers all necessary aspects: workflow, pagination, alternatives, and parameter details. It is complete and self-contained for effective use.

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 description adds significant value beyond schema: explains that query searches speech text (not titles), gives examples of effective queries, clarifies preview vs full text modes, and details contribution_type and member_id nuances (e.g., deprecation of old field).

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 'USE THIS TOOL WHEN searching Hansard by topic, bill title, or text phrase', providing a specific verb and resource. It distinguishes from siblings like parliament_get_debate_contributions and parliament_find_member by outlining their distinct uses.

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 when-to-use (topic/bill/text search) and when-not-to-use (do not text-search by member name). Offers clear alternatives: chain find_member then get_debate_contributions for member remarks, or policy_position_summary for breadth. Also warns against supplementing with web search.

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
paramsYesPetitionSearchInput with query and optional state filter.

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 beyond this by stating what the response includes: 'title, state, signature count, and dates for government response or parliamentary debate if applicable', which is useful 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 only 4 sentences, each purposeful. It is front-loaded with the action and resource, no redundancy, and uses clear imperative language.

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?

Given 4 parameters and an output schema, the description covers the essential aspects: what the tool does, what data it returns, and its authoritative source. It is complete enough 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.

Parameters3/5

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

Schema coverage is 100% (all parameters have descriptions). The description reinforces the 'keyword or topic' for query and 'Filter by state' for state parameter, but adds minimal new meaning beyond the schema. 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 explicitly states 'USE THIS TOOL WHEN searching UK Parliament petitions by keyword or topic', clearly identifying the verb (search) and resource (petitions). It distinguishes from sibling tools like parliament_search_hansard and bills_search_bills by specifying 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?

The description provides clear context: 'searching UK Parliament petitions by keyword or topic' and suggests filtering by state. It does not explicitly state when not to use or list alternatives, but the context is sufficient for an agent to decide.

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
Behavior5/5

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

Annotations already declare readOnly, openWorld, idempotent, and non-destructive. The description adds valuable context: returns string content, with binary base64-encoded, 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?

Three sentences, front-loaded with purpose, no unnecessary words, each sentence adds essential information.

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 output schema exists (context signal), the description doesn't need to detail return format; it covers input, behavior, and encoding fully.

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% for the single 'uri' parameter, and the description adds meaning by explaining static vs templated URIs, which goes beyond the schema's description.

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 verb+resource statement ('Read a resource by its URI') and distinguishes between static and templated resources, which differentiates it from sibling tools like 'list_resources'.

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?

It provides guidance on providing URIs for static vs templated resources, but lacks explicit when-not-to-use or alternatives, though the simplicity and sibling names make usage clear.

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

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)
Behavior4/5

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

Annotations already provide readOnlyHint, idempotentHint, destructiveHint, and openWorldHint. The description adds important behavioral context: voter lists are truncated to 100 per side, but total voter counts are always accurate. This enhances transparency 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?

The description is extremely concise: only 3 sentences, all essential. The first sentence is imperative and immediately states when to use the tool. 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 the tool's simplicity and the presence of an output schema, the description is complete. It explains the truncation limitation, usage scenario, and how to obtain the required parameter. No gaps remain.

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 descriptions. The description adds value by noting that division_id comes from votes_search_divisions results, which provides provenance context. This compensates for the lack of additional parameter details.

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 purpose: 'USE THIS TOOL WHEN you have a division_id + house and want the full member-by-member voting record.' It clearly identifies the verb (get), resource (division detail), and distinguishes from siblings by mentioning chaining from votes_search_divisions or parliament_get_debate_divisions.

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 provides clear when-to-use guidance (when you have division_id and house) and explicitly mentions alternative tools for obtaining the division_id: votes_search_divisions or parliament_get_debate_divisions. This helps the agent choose correctly.

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

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, openWorldHint, idempotentHint, destructiveHint. The description adds that it returns division summaries with title, date, vote counts, pass/fail, and notes the authoritative nature. This adds value but does not detail pagination or response structure beyond schema.

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 succinct sentences, all essential. It uses bold for key phrases and has no filler. 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 tool has 7 parameters and an output schema, the description is complete: it states the purpose, input scope, output summary, and next step. Schema covers parameter details. No gaps for an agent.

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?

All parameters have descriptions in the input schema (100% coverage). The description does not add new parameter-level details but provides context about the output (division_id used in next step). 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 searches Commons or Lords formal votes by topic, date, or member. It distinguishes from sibling tools like votes_get_division by describing it as the initial search step.

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 starts with 'USE THIS TOOL WHEN' and provides follow-up guidance to use votes_get_division with division_id+house. Mentions it is the authoritative source, giving clear context for use.

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.