UK Business Tools - Ledgerhall
Server Details
Once connected, your AI agent can:
Check any UK company — directors, shareholders, filing history, disqualified officers
Research property — comparable sales, EPC ratings, Rightmove listings, rental yields, stamp duty
Search case law and legislation — court judgments, Acts, Hansard debates, HMRC guidance
Query GOV.UK — search 700k+ pages, resolve postcodes to councils, find policy documents
Run due diligence — cross-reference Companies House, Charity Commission, Land Registr- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.4/5 across 70 of 70 tools scored. Lowest: 2.8/5.
Tools are well-grouped by domain prefixes (dd_, gov_, law_, prop_) with clear descriptions that differentiate them. However, there is minor overlap, e.g., dd_search could be used instead of individual searches, and dd_fetch versus dedicated profile tools might cause confusion.
All tools follow a consistent verb_noun pattern with domain-specific prefixes (dd_, gov_, law_, prop_). Names are descriptive and predictable, e.g., dd_charity_search, gov_govuk_search, law_bills_search_bills.
70 tools is high but justified by the broad scope covering due diligence, government, legal, and property domains. Each domain has a reasonable number of tools (about 15-20 each). The count is on the upper end but still manageable.
The tool set is comprehensive across all domains: full CRUD for companies and charities, detailed legal research (cases, legislation, parliament, citations), property data (EPC, planning, price paid, rentals), and government information. No obvious gaps for the intended use cases.
Available Tools
72 toolsdd_charity_profileGet Charity ProfileARead-onlyIdempotentInspect
Fetch the full Charity Commission profile for a charity number.
Returns trustees, latest income/expenditure, insolvency flags, governing document type, classifications, and countries of operation. Use charity_search first to find the charity number.
| Name | Required | Description | Default |
|---|---|---|---|
| charity_number | Yes | Charity Commission registration number (e.g. '1234567'). Returned by charity_search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| address | No | Registered address of the charity (joined address lines). |
| insolvent | No | True if the charity is flagged as insolvent. |
| reg_status | No | Registration status code ('R', 'RM'). |
| charity_name | No | Registered charity name. |
| charity_type | No | Charity type. |
| latest_income | No | Latest filed annual income in GBP. |
| trustee_names | No | Trustees on record. Truncated to 30 entries. |
| charity_number | Yes | Charity registration number. |
| who_what_where | No | Who/What/Where classification entries. The list may be truncated truncated to 50 entries. |
| reg_status_label | No | Human-readable registration status. |
| in_administration | No | True if the charity is in administration. |
| latest_expenditure | No | Latest filed annual expenditure in GBP. |
| trustee_names_total | No | Total trustees upstream before truncation. |
| date_of_registration | No | Date of first registration. |
| who_what_where_total | No | Total classification entries upstream before truncation. |
| charity_co_reg_number | No | Companies House number for charities also registered as companies (Charitable Incorporated Organisations, etc.). |
| countries_of_operation | No | Countries the charity operates in (capped at 10 upstream). |
| trustee_names_truncated | No | True if the trustee list was truncated. |
| who_what_where_truncated | No | True if the classification list was truncated. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, and non-destructive, so the description is not required to repeat that. It adds useful context about the data fields (e.g., insolvency flags) but does not disclose potential edge-case behaviors like missing data or rate limits. This is adequate but not rich beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the core purpose and then listing returns and usage guidance. Every sentence earns its place with no fluff or repetition of schema/annotation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only lookup, the description provides enough context: it names the data source, lists returned content, and gives the prerequisite workflow. An output schema exists, so detailed return formatting is not needed here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter, and the schema description already explains what charity_number is and where it comes from. The tool description adds no further parameter-specific detail beyond the implied meaning of 'charity number', so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Fetch the full Charity Commission profile for a charity number', using a specific verb and resource. It also lists the key data returned (trustees, income/expenditure, insolvency flags, etc.), which distinguishes it from sibling tools like dd_charity_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs 'Use charity_search first to find the charity number', which establishes the correct workflow and distinguishes when to use this tool vs. the search tool. This is direct, actionable guidance on usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_charity_searchSearch Charity Commission RegisterARead-onlyIdempotentInspect
Search the Charity Commission register of England and Wales by name or keyword.
Returns matching charities with registration number, status, and
registration date. Use charity_profile for full details once you
have the charity number. The upstream searchCharityName endpoint
returns the full list in one shot — pagination is applied
client-side via offset/limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items to return in this page. Default 20; raise to 100 for bulk views. | |
| query | Yes | Charity name or keyword to search for | |
| offset | No | Number of items to skip before this page. Default 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | Yes | Max items requested for this page. |
| query | Yes | Search term applied. |
| total | Yes | Total matches returned by upstream. |
| offset | Yes | Number of items skipped before this page (client-side). |
| has_more | Yes | True if more items may exist beyond this page. Re-call with offset=offset+returned to continue. |
| returned | Yes | Items actually returned on this page. |
| charities | No | Matching charity records. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds valuable behavioral context by explaining that the upstream endpoint returns the full list in one shot and pagination is applied client-side via offset/limit. It also discloses the fields returned (registration number, status, registration date), going 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, with the purpose front-loaded, followed by return fields, a usage alternative, and a pagination note. Every sentence contributes distinct information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a full output schema, annotations, and 100% schema coverage for parameters, the description is remarkably complete. It covers the query scope, return fields, an alternative tool for follow-up, and a non-obvious pagination behavioral trait, leaving no significant gaps for an agent to mis-invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description needs to add little. It does mention 'offset/limit' in the pagination note, which reinforces the schema but does not provide any additional meaning beyond what the parameter descriptions already offer. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb and resource: 'Search the Charity Commission register of England and Wales by name or keyword.' It distinguishes itself from the sibling dd_charity_profile by noting that profile is for full details once you have the charity number.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs users to use dd_charity_profile as an alternative when full details are needed after obtaining the charity number. This provides clear when-to-use guidance and names the alternative tool, satisfying the highest bar for this dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_company_officersGet Company OfficersARead-onlyIdempotentInspect
Fetch active officers for a Companies House company number.
Returns directors, secretaries, and other active officers with appointment dates, nationality, and country of residence. Resigned officers are excluded. Pagination is handled internally — do NOT pass items_per_page or start_index; this tool takes only company_number.
| Name | Required | Description | Default |
|---|---|---|---|
| start_index | No | Ignored — all officers are returned in one call. | |
| company_number | Yes | Companies House company number (8 digits, e.g. '03782379'). Returned by company_search. | |
| items_per_page | No | Ignored — pagination is handled internally. Only accepted to avoid call failures. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Total officers returned (filtered by include_resigned). |
| officers | No | Officer records. |
| company_number | Yes | Companies House company number. |
| include_resigned | Yes | Whether resigned officers were included in this result. |
| high_appointment_count_flag | No | Number of active officers with 10+ total appointments, or null if appointment counts were not fetched. Non-zero values are a nominee/phoenix director risk signal. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond annotations: 'Resigned officers are excluded' clarifies data scope, and 'Pagination is handled internally' plus the explicit warning not to pass pagination params discloses important call behavior. This complements the readOnly and idempotent hints well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first sentence states the purpose, the second enumerates return content, and the third delivers a critical usage warning. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and complete schema descriptions, the description need not detail return fields beyond what it gives. It covers purpose, data scope (active vs resigned), and pagination behavior, making it fully adequate for this 1-required-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description reinforces that only company_number is meaningful and warns against pagination params, but this adds no new meaning beyond what each parameter's description already states ('Ignored — all officers are returned in one call' and 'Ignored — pagination is handled internally.').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Fetch active officers for a Companies House company number', a specific verb+resource+scope statement. It clearly distinguishes from sibling tools like dd_company_profile or dd_company_psc by focusing on officers and explicitly noting 'active officers' and 'Resigned officers are excluded.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it requires only company_number, and explicitly warns 'do NOT pass items_per_page or start_index; this tool takes only company_number.' However, it does not name alternative tools for when to use this tool vs. others, so it lacks explicit when-not guidance at the tool-selection level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_company_profileGet Company ProfileARead-onlyIdempotentInspect
Fetch the full Companies House profile for a company number.
Returns status, registered address, SIC codes, filing compliance (overdue accounts and confirmation statement flags), and whether the company has outstanding charges. Use company_search first to find the company number.
| Name | Required | Description | Default |
|---|---|---|---|
| company_number | Yes | Companies House company number (8 digits, e.g. '03782379'). Returned by company_search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| accounts | No | Accounts filing status and due dates. |
| sic_codes | No | Standard Industrial Classification codes. |
| has_charges | No | True if the company has outstanding registered charges (secured debt), derived from the /charges endpoint. A due diligence signal. |
| company_name | No | Registered company name. |
| company_type | No | Companies House company type code. |
| company_number | Yes | Companies House company number. |
| company_status | No | Current status (active, dissolved, in liquidation, etc.). |
| date_of_creation | No | Incorporation date (ISO YYYY-MM-DD). |
| confirmation_statement | No | Confirmation statement filing status and next due date. |
| registered_office_address | No | Registered office address as returned by Companies House. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description doesn't need to restate safety. It adds value by disclosing the return fields and the dependency on company_search, offering 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, followed by return details and a usage note. Every sentence earns its place; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, full schema coverage, and annotations covering safety, the description provides all necessary selection and invocation context. The return contents are explicitly listed, and the prerequisite is covered, so the tool is fully contextualized.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers the company_number parameter 100%, including format and relation to company_search. The description only reiterates 'company number' and the search prerequisite, so it adds little semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Fetch the full Companies House profile for a company number,' which combines a specific verb and resource. It enumerates the profile contents (status, address, SIC codes, compliance flags, charges), clearly differentiating it from siblings like dd_company_officers and dd_company_psc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states 'Use company_search first to find the company number,' establishing a clear prerequisite and workflow context. It doesn't explicitly list alternative tools or when not to use it, so it falls slightly short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_company_pscGet Persons with Significant ControlARead-onlyIdempotentInspect
Fetch Persons with Significant Control (beneficial ownership) for a company.
Returns PSC entries with natures of control, nationality, and country of residence. Flags overseas corporate PSC entries as a beneficial ownership risk signal. Returns an explanatory note for widely-held PLCs with no registrable PSC.
| Name | Required | Description | Default |
|---|---|---|---|
| company_number | Yes | Companies House company number (8 digits, e.g. '03782379'). Returned by company_search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| psc | No | Persons with Significant Control records. |
| note | No | Explanatory note when total=0. Typical for widely-held listed PLCs where no single person or entity holds 25%+ of shares or voting rights. |
| total | Yes | Total PSC entries returned for this company. |
| company_number | Yes | Companies House company number. |
| overseas_corporate_psc_flag | No | Number of corporate PSCs registered outside the UK. Non-zero values indicate an offshore beneficial ownership chain. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds valuable behavioral context: it details return fields (natures of control, nationality, residence), flags overseas corporate PSC entries as a risk signal, and explains special handling for widely-held PLCs. This goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the action, and every sentence adds unique value: what is fetched, what it returns, and special cases. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema present), the description covers all essential aspects: the data returned, the risk-flagging behavior, and the PLC edge case. The presence of an output schema means return-value details need not be enumerated in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description covers 100% of the single parameter, company_number, with format and example. The description does not add additional parameter semantics beyond this, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Fetch Persons with Significant Control (beneficial ownership) for a company.' This clearly identifies the tool's purpose and distinguishes it from sibling tools like company profile or officers, which focus on different corporate data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context (use this for PSC data on a company) but does not explicitly mention when not to use it or name alternatives. It implies the scope without giving exclusions, which fits the 'clear context, no exclusions' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_company_searchSearch Companies HouseARead-onlyIdempotentInspect
Search the Companies House register by company name or keyword.
Returns a paginated list of matching companies with name, number, status, SIC codes, incorporation date, and registered address. Use company_profile for the full record once you have the company number. Re-call with start_index=start_index+items_per_page to fetch the next page.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Company name or keyword to search for | |
| start_index | No | Pagination offset. Default 0. | |
| company_type | No | Filter by company type (e.g. 'ltd', 'llp'). Omit to search all. | |
| company_status | No | Filter by company status (e.g. 'active', 'dissolved'). Omit to search all. | |
| items_per_page | No | Number of results to return (max 100). Default 20. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | Matching companies. Use the `company_number` field to call company_profile, company_officers, or company_psc for full detail. |
| query | Yes | The query string that was searched. |
| has_more | Yes | True if more results exist beyond this page. Re-call with start_index=start_index+items_per_page to fetch the next page. |
| returned | Yes | Number of items actually returned on this page. |
| start_index | Yes | Number of results skipped before this page (upstream start_index). |
| total_results | Yes | Total matching companies in Companies House (server-side). |
| items_per_page | Yes | Page size requested from the API for this call. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by specifying that results are paginated and listing the returned fields (name, number, status, SIC codes, incorporation date, registered address). This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary purpose, and every sentence earns its place. The first sentence states what it does and what it returns; the second provides alternative tool guidance and pagination instructions. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description does not need to enumerate return types. It covers the core search purpose, pagination behavior, and directs to company_profile for full records. This is sufficient for an agent to select and invoke the tool correctly in the context of its sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with descriptions. The description adds meaning beyond the schema by explicitly teaching the pagination relationship between start_index and items_per_page. It also re-emphasizes that 'query' is a company name or keyword, reinforcing the schema's semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search the Companies House register by company name or keyword.' It clearly differentiates from siblings by advising 'Use company_profile for the full record once you have the company number,' which distinguishes this tool from the related profile tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit alternative guidance: 'Use company_profile for the full record once you have the company number.' It also gives explicit pagination instructions with 'Re-call with start_index=start_index+items_per_page to fetch the next page,' telling the agent how to retrieve additional results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_disqualified_profileGet Disqualified Director ProfileARead-onlyIdempotentInspect
Fetch the full disqualification record for a director by officer ID.
Returns all disqualification orders: reason, Act/section cited, disqualification period, and associated company names. Use disqualified_search first to find the officer ID.
| Name | Required | Description | Default |
|---|---|---|---|
| officer_id | Yes | Companies House officer ID. Returned by disqualified_search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | Officer name. |
| surname | No | Family name, if split upstream. |
| forename | No | Given name, if split upstream. |
| officer_id | Yes | Companies House officer ID looked up. |
| nationality | No | Declared nationality. |
| officer_kind | Yes | Which CH endpoint returned the record: 'natural' (individual) or 'corporate' (legal entity). |
| date_of_birth | No | Date of birth on record. |
| disqualifications | No | All disqualification orders attached to this officer. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds useful behavioral detail about the return content (reason, Act/section, period, company names), which goes beyond annotations. It doesn't mention auth/rate limits, but those are not critical given the read-only, simple nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences: purpose, return details, and usage guidance. Every sentence adds distinct value, and the most important action is front-loaded. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only lookup with an output schema, the description covers all essential aspects: what it does, what data it returns, and how to get the required ID. No significant gaps for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for officer_id with a clear description (Companies House officer ID, returned by disqualified_search). The description repeats this information without adding new semantic meaning, so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a full disqualification record for a director by officer ID. It distinguishes itself from sibling tools like dd_disqualified_search (which searches) and dd_charity_profile (which handles charities). The verb 'Fetch' and resource are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs 'Use disqualified_search first to find the officer ID', establishing a clear prerequisite and directing the user to the correct sibling tool. This provides both when-to-use context and an alternative, leaving no ambiguity about the required prior step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_disqualified_searchSearch Disqualified DirectorsARead-onlyIdempotentInspect
Check whether a named individual is banned from acting as a UK company director.
Use this tool when asked to check disqualified, banned, or barred directors. Query must be an individual's name (e.g. "Richard Howson") — NOT a company name, which always returns zero results.
Returns names, dates of birth, disqualification period snippets, and officer IDs that can be used with disqualified_profile for full details.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Alias for query — the person's name. | |
| query | No | Person's name to search for, e.g. query='Richard Howson'. NOT a company name. | |
| start_index | No | Pagination offset (0-based). Default 0. | |
| items_per_page | No | Results per page (max 100). Default 20. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | Matching disqualified officer records. |
| query | Yes | Search query applied. |
| has_more | Yes | True if more items may exist beyond this page. Re-call with start_index=start_index+items_per_page to continue. |
| returned | Yes | Items actually returned on this page. |
| start_index | Yes | Pagination offset for this page. |
| total_results | Yes | Total matching records upstream at Companies House. |
| items_per_page | Yes | Page size requested. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds valuable behavioral context: returns specific fields (names, DOBs, disqualification snippets, officer IDs) and the zero-result behavior for company names. This goes beyond annotations, though it does not exhaustively describe pagination edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short paragraphs, front-loaded with the core purpose, followed by usage guidance and return-value summary. Every sentence earns its place with no padding or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with an output schema and comprehensive annotations, the description covers purpose, usage, limitations (company name returns zero), and return fields. It also cross-references a related tool for deeper details, making it contextually complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter well-documented (e.g., query explicitly says 'NOT a company name'). The tool description reinforces the individual-name requirement but does not add substantial new meaning beyond the schema. Therefore baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+scope: 'Check whether a named individual is banned from acting as a UK company director.' This clearly distinguishes the tool from sibling search tools (e.g., company, charity, or property searches) by targeting disqualified directors specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use this tool when asked to check disqualified, banned, or barred directors.' It further states when not to use it: 'NOT a company name, which always returns zero results.' It also points to a complementary tool, disqualified_profile, for full details, effectively differentiating search vs. profile use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_fetchFetch Full Record from UK Due Diligence RegisterARead-onlyIdempotentInspect
Fetch the full record for an ID returned by search.
Routes by prefix to the appropriate register:
company:{number} → Companies House full profile
charity:{number} → Charity Commission full profile
disqualification:{officer_id} → Disqualified director full record
notice:{notice_id} → Gazette notice full legal text
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Prefixed record ID returned by search. Format: company:{number}, charity:{number}, disqualification:{officer_id}, or notice:{notice_id} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds beyond this by disclosing the routing behavior across different registers and the exact ID format required. This helps the agent understand that one tool serves multiple backends, which is not inferable from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a concise bullet list of four route mappings. Every element earns its place: the first sentence states the action, and the list provides essential routing rules in a scannable format. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is a single parameter, a rich output schema, and detailed annotations, the description covers the critical operational nuance—the prefix-based routing—that could otherwise be ambiguous. It is complete for an agent to correctly select and invoke the tool for any of the listed ID types.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the input schema already fully documents the 'id' parameter with the same format examples. The description's routing list essentially repeats the schema's parameter description, adding no new semantic detail. Thus the baseline of 3 is appropriate since the schema carries the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetch the full record for an ID returned by search' and then details the routing by prefix, which both specifies the action and distinguishes it from the sibling-specific fetchers like dd_company_profile and dd_charity_profile. The explicit list of prefix mappings makes the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: after a search, with IDs in a specific prefixed format. It does not explicitly state alternatives or exclusions, but the routing list implies which IDs are valid and that this is a unified entry point. It could be stronger by mentioning when to prefer dedicated sibling tools, but it is not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_gazette_insolvencySearch Gazette Corporate Insolvency NoticesARead-onlyIdempotentInspect
Search The Gazette's insolvency notice index by entity name.
Searches the Gazette's insolvency endpoint which covers corporate notice codes: winding-up orders (2443), administration orders (2448), liquidator appointments (2452), striking-off notices (2460), and more. Results are sorted by severity — winding-up orders and administration orders appear first.
Each result includes a notice_numeric_id. Read the full legal wording via the notice://{notice_numeric_id} resource.
The Gazette is the official UK public record. A notice here means the event has been formally published and is legally effective.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Company or individual name to search for in Gazette insolvency notices | |
| query | No | Alias for name. | |
| end_date | No | Filter notices up to this date (YYYY-MM-DD) | |
| start_date | No | Filter notices from this date (YYYY-MM-DD) | |
| entity_name | No | Deprecated alias for name. | |
| max_notices | No | Cap on notices returned, applied after severity/date sort. Default 20. The Gazette insolvency feed returns up to 100 results per search — raise to 100 to see the full set. | |
| notice_type | No | Filter by notice code (e.g. '2441' winding-up petition, '2443' winding-up order, '2448' administration order, '2460' striking-off). Omit to search all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notices | No | Matching notices, sorted by severity (desc) then date (desc). |
| end_date | No | Upper bound of the date range filter, if any. |
| start_date | No | Lower bound of the date range filter, if any. |
| entity_name | Yes | Entity name that was searched. |
| total_notices | Yes | Total notices returned after deduplication, sorting, and cap. |
| max_notices_cap | Yes | The max_notices cap applied. Upstream may have more matching notices. |
| notice_type_filter | No | Notice code filter applied, or null if all codes searched. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is clear. The description adds valuable behavioral context: results are sorted by severity, the Gazette is an official UK public record where publication is legally effective, and the endpoint covers specific notice codes. This goes beyond annotation coverage without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: the first sentence states the core purpose, then it provides essential details about notice codes, sorting, and follow-up actions. Every sentence adds value, and there is no redundant or filler content. It is slightly longer than two sentences but remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations, the description is reasonably complete. It explains the legal significance of the Gazette, identifies covered notice codes, describes sorting behavior, and directs users to the notice resource for full wording. Minor gaps exist (e.g., no mention of rate limits or how open-world results might affect completeness), but these are not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already well-documented. The description adds some context around result behavior (severity sorting affecting max_notices) and mention of notice codes, but it mostly restates or complements what is in the schema rather than adding substantial new parameter semantics. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource statement: 'Search The Gazette's insolvency notice index by entity name.' It further clarifies scope by listing corporate notice codes and explicitly distinguishes from the notice resource for full legal wording, making it easy to differentiate from sibling tools like dd_gazette_notice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: searching for insolvency notices. It also points to the notice://{notice_numeric_id} resource for reading full legal wording, which suggests an alternative for a related task. However, it does not explicitly state exclusions or compare with other search tools beyond the notice resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_gazette_noticeGet Gazette Notice Full TextARead-onlyIdempotentInspect
Fetch the full legal wording of a Gazette notice by numeric notice ID.
Returns the complete JSON-LD linked-data record for the notice: parties, legal basis, court, and full text. Use gazette_insolvency first to find notice_numeric_id values.
| Name | Required | Description | Default |
|---|---|---|---|
| notice_id | Yes | Numeric Gazette notice ID. Returned as notice_numeric_id by gazette_insolvency. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds useful context about the return format (JSON-LD linked-data record with parties, legal basis, court, full text), going beyond annotation basics. Minor gap: no mention of error conditions or auth, but annotations lower the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the purpose front-loaded. The first sentence states the action, the second describes the return value and prerequisite workflow. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter) with rich annotations, an output schema, and a clear workflow instruction. The description covers purpose, return content, and how to obtain the required ID, making it complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, and the schema description already explains notice_id as the numeric Gazette notice ID returned by gazette_insolvency. The description's mention of 'numeric notice ID' adds little beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches the full legal wording of a Gazette notice by numeric notice ID, with a specific verb and resource. It distinguishes itself from the sibling gazette_insolvency tool by focusing on full text vs. listing, and mentions the linked-data record content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use gazette_insolvency first to find notice_numeric_id values, providing clear workflow guidance and effectively differentiating this tool from its sibling listing tool. This is a direct when-to-use instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_get_promptAInspect
Get a prompt by name with optional arguments.
Returns the rendered prompt as JSON with a messages array. Arguments should be provided as a dict mapping argument names to values.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the prompt to get | |
| arguments | No | Optional arguments for the prompt |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It does disclose the return format ('JSON with a messages array') and how arguments should be structured, but it doesn't mention error handling, permissions, or side effects. Since this is a read-only 'get' operation, the lack of side-effect disclosure is less critical, but more detail would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each adding essential information: the action, the return type, and the argument format. There is no filler or redundancy, and it is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is reasonably complete for this tool's simplicity. It explains the purpose, return structure, and argument format, and the output schema already exists to define return values. It lacks some context about when to use this over listing tools, but that gap is more about usage guidelines. Overall, it is adequate for an AI agent to understand the tool's basic functionality.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers both parameters with 100% description coverage. The description adds meaningful clarity by specifying that arguments should be a dict mapping names to values, which is not explicitly stated in the schema. This goes beyond the schema's simple 'Optional arguments for the prompt'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a prompt by name' with a specific verb and resource. It distinguishes itself from siblings like dd_list_prompts by focusing on retrieving a specific prompt rather than listing all prompts. The mention of optional arguments further clarifies the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide when-to-use guidance or mention alternatives. It doesn't explain when to use this tool versus dd_list_prompts or law_get_prompt, or any prerequisites or exclusions. The only context is the tool's basic function, which is implied by its purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_land_title_searchSearch Price Paid Transactions by PostcodeARead-onlyIdempotentInspect
Search HM Land Registry Price Paid Index by postcode or address.
Returns up to 10 recent sale transactions for the postcode: price, date, address, property type, and tenure (Freehold/Leasehold). Covers England and Wales only. Postcode gives the most reliable results — a full address is also accepted and the postcode is extracted automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| address_or_postcode | Yes | UK property address or postcode. Postcode is most reliable: e.g. 'NG1 1AB'. Full address also accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Number of Price Paid transactions returned. Capped at 10 by the upstream SPARQL query. |
| postcode | Yes | Normalised UK postcode extracted from the input. |
| transactions | No | Recent Price Paid transactions for the postcode, sorted newest first. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond the readOnlyHint and idempotentHint annotations, such as the explicit limit of 10 recent transactions, the returned fields, and the automatic postcode extraction from full addresses. It also discloses the England/Wales scope, enriching the agent's understanding of expected behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise, information-dense sentences that front-load the core purpose, then detail outputs and usage guidance. Every sentence adds value with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the input format, output contents, geographic scope, and data source, making it self-sufficient for an agent to select and invoke the tool correctly. The presence of an output schema relieves the description from detailing return structure, and annotations cover safety aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a detailed description of the sole parameter, including examples and reliability notes. The tool description largely repeats this information without adding new semantic meaning, so it does not exceed the baseline for 100% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Search') and a specific resource ('HM Land Registry Price Paid Index'), and distinguishes it from generic property tools by naming the exact dataset and coverage (England and Wales). It also outlines the returned fields, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on how to use the tool, including geographic coverage ('Covers England and Wales only') and reliability tips ('Postcode gives the most reliable results — a full address is also accepted'). However, it does not explicitly mention alternatives or when not to use this tool, which prevents a higher score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_list_promptsAInspect
List all available prompts.
Returns JSON with prompt metadata including name, description, and optional arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return format (JSON) and the metadata fields (name, description, optional arguments). It does not explicitly declare read-only status or pagination, but for a list operation this is mostly sufficient. Minor ambiguity about scope ('all available' vs domain-specific) remains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action, and contains no filler. It efficiently states what the tool does and what it returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with no parameters and an output schema. The description provides the essential return information. However, the phrase 'all available prompts' is slightly ambiguous regarding domain scope (dd_* vs all prompts), and a brief note about pagination or relationship to law_list_prompts would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty input schema. The 0-params baseline is 4. The description correctly implies no inputs are required and adds no misleading parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all available prompts' with a specific verb and resource. It distinguishes from siblings like dd_get_prompt (single prompt) and law_list_prompts (domain-specific) by saying 'all available' and using the dd_ prefix.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit usage guidance is provided. The description implies this tool is for discovering available prompts, but it does not contrast with alternatives like dd_get_prompt or law_list_prompts, nor does it state prerequisites or 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.
dd_sanctions_screenScreen a Name Against Sanctions ListsARead-onlyIdempotentInspect
Screen a name against the UK (OFSI), US (OFAC), EU and UN consolidated sanctions lists.
Returns every list entry whose primary name or alias matches, with the regime, source reference and listing date. Use it to check whether a counterparty — or its officers / persons with significant control — appears on a sanctions list.
MATCHING is deterministic: normalised exact + alias match (case-, accent- and punctuation-insensitive). A company/entity legal name matches reliably; PERSON names with transliteration variants may not (e.g. 'Mohammed' vs 'Muhamad'). An empty result is therefore NOT a guarantee of clearance, and a hit on a common name may be a false positive to disambiguate. This is a screening aid, not a compliance determination.
lists_screened reports which of OFSI/OFAC/EU/UN were actually loaded — if
any is missing the result is partial. as_at is when the lists were last
refreshed on this server.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Person or company/entity name to screen against the consolidated sanctions lists. | |
| entity_type | No | Optional filter: 'person' or 'entity'. Omit to screen both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | Matching list entries. An empty list means no exact/alias match on the screened lists — NOT a guarantee of clearance (see the tool description on matching limits). |
| as_at | No | When this server last refreshed the loaded lists (ISO timestamp). Provenance for the screen — the lists update on designation. |
| query | Yes | The name that was screened. |
| match_count | Yes | Number of list entries that matched the query. |
| lists_screened | No | Which consolidated lists were loaded and actually screened for this call. A list absent here failed to load and was NOT screened — treat the result as partial if any of OFSI/OFAC/EU/UN is missing. |
| normalized_query | Yes | The normalised form used for matching (upper-cased, accent- and punctuation-stripped, whitespace-collapsed). |
| entity_type_filter | No | entity_type filter applied to the screen ('person'/'entity'), or null. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, idempotent, and non-destructive behavior. The description goes beyond by explaining matching normalization, false positive/negative risks, partial results when lists are missing, and the meaning of lists_screened and as_at. This adds substantive behavioral context that structured annotations alone do not convey, with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into focused paragraphs: purpose, matching semantics and caveats, and output field explanations. Every sentence provides essential information for a compliance screening tool. It is front-loaded with the main purpose and does not waste words on repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex due to compliance implications, but the description thoroughly covers return values (regime, source reference, listing date), data freshness, and partial-result indicators. Even though an output schema exists, the description's explication of lists_screened and as_at is valuable. Combined with the detailed matching caveats, the description is complete for an agent to invoke and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra meaning for the 'name' parameter by explaining normalization (case/accent/punctuation-insensitive) and transliteration pitfalls, which helps users interpret results. It does not add much for 'entity_type', but the existing schema description suffices. Overall, the added matching semantics justify a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool screens names against UK OFSI, US OFAC, EU, and UN consolidated sanctions lists. This specific verb+resource+scope distinguishes it from all sibling tools, which are general search/profile tools. No ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use it to check whether a counterparty or associated persons appear on sanctions lists. It also provides critical usage caveats: matching is deterministic, person-name transliteration variants may not match, empty results are not a guarantee, and hits may be false positives. This gives clear when-to-use and when-to-be-cautious guidance, with no competing alternatives in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_searchSearch UK Due Diligence RegistersARead-onlyIdempotentInspect
Search across all UK due diligence registers simultaneously.
Searches Companies House, Charity Commission, disqualified directors, and Gazette insolvency notices in parallel. Returns a list of result IDs — use fetch with each ID to retrieve the full record.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Company name, charity name, director name, or keyword to search for across all UK due diligence registers |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds crucial behavioral detail beyond annotations: it returns a list of result IDs (not full records) and searches in parallel across specific registers. This informs the agent that a second fetch call is required, which is essential for correct invocation. Slight gap: no mention of potential pagination or rate limits, but the provided behavior is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core purpose, and each sentence serves a distinct function: what it does and what the output format is. No filler or repetition of schema details, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the essential workflow: it searches a known set of registers, returns IDs, and directs the next step (fetch). Given that an output schema exists and annotations indicate read-only behavior, nothing else is needed for an agent to select and invoke the tool correctly. The description is complete for this moderately complex multi-register search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, query, and the schema description covers it with 100% clarity ('Company name, charity name, director name, or keyword to search for across all UK due diligence registers'). The tool description adds no additional meaning beyond what the schema already provides. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Search' and resource 'all UK due diligence registers simultaneously', listing the four named registers. This clearly differentiates the aggregate search from sibling tools like dd_company_search or dd_charity_search which target individual registers. The scope and intent are immediately obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that it searches across all registers in parallel and instructs the agent to 'use fetch with each ID to retrieve the full record', providing clear follow-up usage. It does not explicitly mention when not to use this tool or name alternatives, but the context is sufficient for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dd_vat_validateValidate UK VAT Number (HMRC)ARead-onlyIdempotentInspect
Validate a UK (GB) VAT number against the HMRC register. UK numbers only.
Returns the trading name and address as registered with HMRC for VAT purposes. The VAT-registered trading address often differs from the Companies House registered address — that discrepancy is a due diligence signal worth noting.
Non-UK (EU) VAT numbers cannot be validated here — use the EU VIES service for other member states.
| Name | Required | Description | Default |
|---|---|---|---|
| vat_number | Yes | UK (GB) VAT registration number — this tool validates UK numbers only. Accepts: 'GB123456789', '123456789', 'GB 123 456 789'. GB prefix and spaces normalised automatically. |
Output Schema
| Name | Required | Description |
|---|---|---|
| valid | Yes | True if HMRC confirmed the VAT number is currently registered. False means HMRC returned 404 (not registered / deregistered). |
| vat_number | Yes | Canonical VAT number in 'GB<9 digits>' format. |
| trading_name | No | Trading name registered with HMRC for VAT. Compare with the Companies House name — discrepancies are a due diligence signal. |
| registered_address | No | VAT-registered trading address. May differ from the Companies House registered office address. |
| consultation_number | No | HMRC consultation reference number for this lookup. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent, non-destructive), the description discloses the return payload (trading name and address) and adds the notable behavioral trait that the trading address often differs from Companies House. It does not mention rate limits or error handling, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise paragraphs: purpose, return value with due diligence note, and exclusion with alternative. Every sentence contributes meaning, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only lookup tool with an output schema, the description covers scope, return content, and alternatives. It lacks nothing essential for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter is fully documented in the schema (formats, normalization, UK-only). The main description adds minimal param-specific detail beyond repeating 'UK numbers only.' The baseline of 3 applies since the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Validate a UK (GB) VAT number against the HMRC register.' It clearly distinguishes from sibling tools by specifying UK-only scope and the HMRC register, which is different from company search or VAT rate tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'Non-UK (EU) VAT numbers cannot be validated here — use the EU VIES service for other member states.' It also provides contextual value by explaining the due diligence signal of address discrepancies, which implies when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gov_govuk_get_contentGet GOV.UK PageARead-onlyIdempotentInspect
Get metadata and navigable section index for a GOV.UK page.
Returns the page title, document type, publication dates, and a list of sections with their anchor IDs and headings. Use govuk_get_section to read the body of a specific section, or govuk_grep_content to search within the page body.
| Name | Required | Description | Default |
|---|---|---|---|
| base_path | Yes | GOV.UK base_path, e.g. '/universal-credit' or 'universal-credit' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds value by specifying the exact return content (title, document type, publication dates, section list) and explicitly what it does not do (return page body), steering users to sibling tools. This is useful behavioral context beyond the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: purpose, return values, and alternative tools. It is concise, front-loaded with the key verb and resource, and every sentence adds necessary information without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter, informative schema, and existing output schema, the description fully covers what the tool does, what it returns, and how it relates to sibling tools. The agent has enough context to select and invoke it correctly without needing further detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with a clear description and example for base_path. The tool description itself does not add parameter semantics beyond what the schema already provides, so the baseline of 3 for high schema coverage applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('GOV.UK page'), and clearly states what is returned (metadata and navigable section index). It explicitly distinguishes from sibling tools by noting that govuk_get_section reads a section body and govuk_grep_content searches within the page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool vs alternatives: 'Use govuk_get_section to read the body of a specific section, or govuk_grep_content to search within the page body.' This clearly indicates the tool's scope (metadata/index) and points to alternatives 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.
gov_govuk_get_organisationGet GOV.UK OrganisationARead-onlyIdempotentInspect
Get the profile of a UK government organisation by its slug.
Returns name, acronym, type, status, web URL, and parent/child organisations. Use govuk_list_organisations to browse all organisations and discover slugs.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Organisation slug, e.g. 'hm-revenue-customs'. Find slugs via govuk_list_organisations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| slug | No | Organisation slug, e.g. 'hm-revenue-customs'. Usable with govuk_search filters. |
| type | No | Organisation type, e.g. 'ministerial_department', 'executive_agency', 'non_ministerial_department', 'public_corporation'. |
| state | No | GOV.UK status, e.g. 'live', 'closed', 'transitioning'. |
| title | No | Full organisation title. |
| acronym | No | Organisation acronym, if set. |
| web_url | No | Absolute https://www.gov.uk URL for the organisation page. |
| contact_details | No | Contact details block from GOV.UK (phone, email, address) when available. |
| child_organisations | No | Titles of child organisations / agencies under this body. |
| parent_organisations | No | Titles of parent organisations this body reports into. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive. The description adds a list of returned fields, but an output schema exists, so this is redundant. It provides no additional behavioral context beyond what annotations and schema already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the core function, the second lists return fields and points to the sibling for slug discovery. Every sentence earns its place; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool with both input and output schemas, the description is complete. It covers what the tool does, what it returns, and how to obtain valid input (slugs). No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description already includes an example ('hm-revenue-customs') and a pointer to govuk_list_organisations for finding slugs. The tool description's mention of 'slug' and 'discover slugs' merely repeats schema content, adding no new semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('profile of a UK government organisation by its slug'), immediately distinguishing it from list-style siblings like govuk_list_organisations. It also lists return fields, making the tool's function unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use govuk_list_organisations for browsing/discovering slugs, which tells the agent when NOT to use this tool. This clear alternative makes the usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gov_govuk_get_sectionGet GOV.UK Page SectionARead-onlyIdempotentInspect
Get the HTML content of one named section of a GOV.UK page.
Use govuk_get_content first to get the list of available section anchors, then call this with the anchor of the section you want to read.
| Name | Required | Description | Default |
|---|---|---|---|
| anchor | Yes | Section anchor ID from govuk_get_content sections list | |
| base_path | Yes | GOV.UK base_path, e.g. '/universal-credit' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is known. The description adds little beyond that—it confirms the read operation and the dependency on govuk_get_content, but does not describe return format, pagination, or error behavior. With annotations covering mutation risks, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The purpose is front-loaded, and the usage note is directly actionable. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with rich annotations and an output schema, the description fully captures the workflow: get anchors first, then fetch a section. No additional context is needed for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters fully described. The description reinforces the role of 'anchor' but adds no new semantic detail beyond what the schema already provides. Baseline 3 is correct when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the HTML content of one named section of a GOV.UK page', specifying the exact resource and scope. It distinguishes from siblings by emphasizing 'one named section', and the usage note explicitly references govuk_get_content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequential guidance: 'Use govuk_get_content first to get the list of available section anchors, then call this with the anchor'. This names the alternative tool and provides clear when-to-use context, leaving no ambiguity about the required prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gov_govuk_grep_contentSearch within a GOV.UK content bodyARead-onlyIdempotentInspect
Find body sections in a GOV.UK content item matching a pattern.
Returns a list of {anchor, heading, snippet, match} hits — small per-section
snippets centred on the match — so the LLM can decide which full sections to
read via govuk_get_section.
Use this when answering content-based questions ("what does this guide say about X?", "find the bit about eligibility") rather than navigating by section number.
Pattern is regex; if it doesn't compile, falls back to literal substring.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Regex or literal substring to search for within the page body, e.g. 'payment' or 'eligible.*income' | |
| max_hits | No | Maximum number of matching sections to return (1–100) | |
| base_path | Yes | GOV.UK base_path, e.g. '/guidance/register-for-vat' or '/universal-credit' | |
| case_insensitive | No | If true (default), match case-insensitively |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | Yes | Matching sections in document order |
| pattern | Yes | The pattern that was searched for |
| base_path | Yes | The content item that was searched |
| truncated | Yes | True if hit count reached max_hits and more matches may exist |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, indicating a safe read operation. The description adds valuable behavioral context beyond annotations: the return format ('{anchor, heading, snippet, match} hits') and the regex fallback behavior ('if it doesn't compile, falls back to literal substring'), which are not inferable from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states the core purpose, the second explains the return format and when to use, and the third covers the regex fallback. Every sentence earns its place with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with an output schema, the description covers purpose, return format, usage guidance, fallback behavior, and relationship to sibling tools (govuk_get_section). No critical information is missing for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter descriptions already explain each field thoroughly. The description adds marginal value by explaining the fallback from regex to literal substring, which is partially reflected in the schema's 'Regex or literal substring' wording, but it doesn't provide significant additional semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb+resource+scope: 'Find body sections in a GOV.UK content item matching a pattern.' It also distinguishes itself from sibling tools by explicitly noting this is for content-based questions 'rather than navigating by section number,' referencing govuk_get_section as the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: 'Use this when answering content-based questions... rather than navigating by section number' and explains that the returned snippets help the LLM decide 'which full sections to read via govuk_get_section.' This clearly states when to use and names the alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gov_govuk_list_organisationsList GOV.UK OrganisationsARead-onlyIdempotentInspect
List all UK government organisations registered on GOV.UK.
Returns a paginated list of organisations including their slug, acronym, type, and status. Use this to browse the full government structure or discover slugs for use with govuk_get_organisation or govuk_search filters.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| per_page | No | Results per page (1–50) |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | 1-based page number requested. |
| total | No | Total number of organisations across all pages, if reported by GOV.UK. |
| has_more | Yes | True if more organisations exist beyond this page. Re-call with page=page+1 to fetch the next page. |
| per_page | Yes | Max organisations requested per page. |
| returned | Yes | Number of organisations returned in this response. |
| total_pages | No | Total number of pages available, if reported by GOV.UK. |
| organisations | No | Organisations on this page, in the order returned by GOV.UK. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral context about pagination ('Returns a paginated list') and the specific fields returned (slug, acronym, type, status), which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and every sentence adds value—no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple pagination tool with full schema coverage, output schema present, and strong annotations, the description is complete. It covers purpose, return content, pagination, and usage guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'page' and 'per_page' clearly described. The description does not add extra parameter meaning beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'List all UK government organisations registered on GOV.UK', which is a specific verb+resource combination. It also distinguishes itself from siblings by noting it helps 'discover slugs for use with govuk_get_organisation or govuk_search filters'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it: 'Use this to browse the full government structure or discover slugs for use with govuk_get_organisation or govuk_search filters.' This names specific alternative tools and clarifies the use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gov_govuk_lookup_postcodeLook Up UK PostcodeARead-onlyIdempotentInspect
Look up a UK postcode to retrieve its local authority, region, constituency, and other administrative geography.
Useful for determining which council area, parliamentary constituency, or NHS region a postcode falls within. Commonly used to direct users to the correct local service on GOV.UK (e.g. council tax, planning, waste).
Uses the postcodes.io public API (no key required).
| Name | Required | Description | Default |
|---|---|---|---|
| postcode | Yes | UK postcode, e.g. 'SW1A 2AA' or 'NG1 1AA'. Spaces optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| codes | No | GSS codes for all administrative geographies covering this postcode. |
| region | No | ONS region, e.g. 'East Midlands'. |
| country | No | Country, e.g. 'England', 'Scotland', 'Wales', 'Northern Ireland'. |
| latitude | No | Latitude in decimal degrees (WGS84). |
| postcode | No | Canonicalised postcode as returned by postcodes.io. |
| longitude | No | Longitude in decimal degrees (WGS84). |
| admin_county | No | Administrative county, where applicable (null in unitary areas). |
| local_authority | No | Local authority / council covering the postcode. |
| nhs_integrated_care_board | No | NHS Integrated Care Board, where available. |
| parliamentary_constituency | No | Parliamentary constituency (pre-2025 boundary). |
| parliamentary_constituency_2025 | No | Parliamentary constituency under the 2025 boundaries. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds valuable context beyond annotations by disclosing the external API dependency: 'Uses the postcodes.io public API (no key required).' This informs the agent about network reliance and lack of authentication requirements, exceeding the baseline for annotated tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states the core purpose, the second gives use cases, the third provides an implementation detail. Every sentence contributes original value with no repetition of schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only lookup with one parameter, an output schema, and comprehensive annotations, the description fully covers the essentials: what it does, when to use it, what it returns, and external API details. No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including a descriptive example and length constraints. The description itself only refers to 'UK postcode' without adding new parameter syntax or format details. Baseline 3 is appropriate; the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Look up a UK postcode to retrieve its local authority, region, constituency, and other administrative geography.' This specific verb+resource+output combination unambiguously distinguishes it from all sibling tools, none of which perform postcode lookups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage context: 'Useful for determining which council area, parliamentary constituency, or NHS region a postcode falls within. Commonly used to direct users to the correct local service on GOV.UK.' While it does not explicitly mention alternatives or when-not-to-use, the context makes the intended use clear, and no sibling tools offer postcode lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gov_govuk_searchSearch GOV.UKARead-onlyIdempotentInspect
Search GOV.UK's 700k+ content items using the official Search API.
Returns a list of matching content items with title, description, link, format, owning organisation(s), and last updated timestamp.
Use filter_format to narrow to specific content types (e.g. 'transaction' for citizen-facing services, 'guide' for guidance, 'publication' for official documents). Use filter_organisations to restrict to a department.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results to return (1–50) | |
| order | No | Sort order. Use '-public_timestamp' for newest-first (default relevance). | |
| query | Yes | Free-text search query, e.g. 'universal credit eligibility' or 'MOT check' | |
| start | No | Offset for pagination, e.g. 10 for the second page of 10 results | |
| filter_format | No | Filter by document format. Common values: 'guide', 'answer', 'transaction', 'publication', 'news_article', 'detailed_guide', 'hmrc_manual_section', 'travel_advice', 'organisation'. Leave blank to search all types. | |
| filter_organisations | No | Filter by organisation slug, e.g. 'hm-revenue-customs', 'department-for-work-pensions', 'driver-and-vehicle-standards-agency'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Max results requested for this page. |
| query | Yes | The free-text query that was searched. |
| start | Yes | Offset used for this page (zero-based). |
| total | Yes | Total matching results across all pages on GOV.UK. |
| results | No | Matching pages. Use the `link` field of any result as the `base_path` input to govuk_get_content for the full item. |
| has_more | Yes | True if more results exist beyond this page. Re-call with start=start+returned to fetch the next page. |
| returned | Yes | Number of results actually returned in this response. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds beneficial context (returns list with specific fields, official API) but does not disclose rate limits, authentication needs, or pagination behavior beyond the schema's start parameter. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences: first states purpose and source, second summarizes return fields, third gives filtering guidance. Every sentence earns its place, and the key verb 'Search' is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and annotations, the description sufficiently covers purpose, return shape, and filter usage. It lacks explicit guidance on when to use this tool versus sibling tools, but that is addressed in the usage dimension and does not significantly hinder completeness for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description enriches parameter semantics by providing concrete examples for filter_format (transaction, guide, publication) and filter_organisations (with departmental slugs), which is not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (search), resource (GOV.UK content items), and method (official Search API). It also distinguishes itself from siblings like gov_govuk_get_content (retrieval of specific items) and gov_govuk_grep_content (grep-style search) by emphasizing the API-based search over the broader content set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context, noting how to narrow with filter_format and filter_organisations, including practical examples for content types. It does not explicitly name alternative tools or exclusion criteria, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_bills_get_billGet Bill DetailARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a bill_id (from bills_search_bills) and want the full detail.
Returns sponsors, current stage, long title, summary, and Royal Assent date if enacted. Summary text is capped per max_summary_chars — check summary_truncated in the response.
AFTER calling, use parliament_search_hansard(query=bill_short_title) to find the bill's parliamentary debates, or bills_search_bills with a related keyword for adjacent bills.
| Name | Required | Description | Default |
|---|---|---|---|
| bill_id | Yes | Bill ID from bills_search_bills results. | |
| max_summary_chars | No | Maximum characters of the bill summary text to return. Default 5,000 (~1,250 tokens) covers most bills. Raise for substantive government bills (Finance Act, Levelling-up) whose summary runs longer. Check summary_truncated in the response to see if it was cut. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Bill ID |
| url | Yes | Parliament URL for this bill |
| is_act | No | Whether the bill has received Royal Assent |
| stages | No | Legislative stages the bill has passed through |
| summary | No | Bill summary text, possibly truncated per max_summary_chars. Check summary_truncated and summary_original_length for full-text info. |
| sponsors | No | Bill sponsors |
| long_title | No | Full long title |
| short_title | Yes | Short title of the bill |
| current_house | No | House where the bill currently sits |
| current_stage | No | Current legislative stage |
| originating_house | No | House where the bill was introduced |
| royal_assent_date | No | Date Royal Assent was given |
| summary_truncated | No | True if summary was cut to fit max_summary_chars |
| summary_original_length | No | Original summary length in characters before any truncation |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive. The description adds important behavioral context: summary text is capped per max_summary_chars and users should 'check summary_truncated in the response.' It also specifies the Royal Assent field is included 'if enacted,' clarifying conditional data presence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly organized into three purposeful sections: when to use, what it returns, and next steps. Every sentence provides actionable information with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, output schema present), the description fully covers usage context, return contents, truncation behavior, and downstream actions. No gap in understanding remains for the agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and parameter descriptions are already detailed (e.g., bill_id source, max_summary_chars default/range/truncation). The tool description reinforces that max_summary_chars caps summary length but adds no new semantic info beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'USE THIS TOOL WHEN you have a bill_id (from bills_search_bills) and want the full detail,' which clearly states the verb (get), resource (bill detail), and prerequisite source of the ID. It further lists specific returned fields (sponsors, current stage, long title, summary, Royal Assent date), distinguishing it from the sibling search tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE THIS TOOL WHEN' identifies the exact condition for use. It also provides post-call guidance: 'AFTER calling, use parliament_search_hansard... or bills_search_bills... for adjacent bills,' effectively indicating alternatives and when not to use this tool (when seeking debates or related bills).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_bills_search_billsSearch Parliamentary BillsARead-onlyIdempotentInspect
USE THIS TOOL WHEN searching UK parliamentary bills by keyword, session, house, or legislative stage.
Returns a paginated page of bill summaries (title, current stage, whether it became an Act). AFTER calling, pass a bill_id into bills_get_bill for full detail (sponsors, long title, Royal Assent date).
Authoritative source for UK parliamentary bill status.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Filter by originating house. Omit for all houses. | |
| limit | No | Maximum bills to return in this call. Default 20 keeps responses focused; raise up to 100 for bulk exports. | |
| query | Yes | Search term for bill titles and descriptions, e.g. 'online safety' or 'financial services'. | |
| stage | No | Filter by current legislative stage. | |
| offset | No | Number of results to skip before this page. Default 0 for the first page. Re-call with offset=offset+returned while has_more is true to paginate. | |
| session | No | Numeric parliamentary session ID (e.g. 40 = 2024-25, 39 = 2023-24). NOT a year string like '2025'. If you only know the year, omit this and filter the results instead. Omit to search all sessions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bills | No | Matching bills. Use the integer `id` field from any bill to call bills_get_bill for full detail. |
| limit | Yes | Maximum results requested in this call |
| query | Yes | The search term that was used |
| total | No | Total results matching the query across all pages, if the upstream API reported it. None if unknown. |
| offset | Yes | Number of results skipped before this page |
| has_more | Yes | True if more results exist beyond this page. Re-call with offset=offset+returned to fetch the next page. |
| returned | Yes | Number of results actually on this page |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, but the description adds behavioral context by mentioning pagination ('paginated page of bill summaries') and the nature of the returned data. It also gives a clear follow-up action, which is useful beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each serving a distinct purpose: when to use, what it returns, what to do next, and why to trust it. The 'USE THIS TOOL WHEN' prefix is a clear and efficient trigger. No superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality, pagination, and a clear pointer to a complementary tool for deeper details. With an output schema present, it does not need to enumerate return fields. The tool is a straightforward search operation, and this description fully equips the agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with detailed descriptions, so the description does not need to add much. It does mention the filter dimensions (keyword, session, house, stage) that correspond to parameters, but this adds little beyond the schema. Baseline 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: searching UK parliamentary bills by keyword, session, house, or legislative stage. It also distinguishes itself from the sibling tool law_bills_get_bill by explicitly directing users to use that tool for full detail after this search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'USE THIS TOOL WHEN searching UK parliamentary bills...' which explicitly states when to use it. It also provides guidance on when to use an alternative: 'AFTER calling, pass a bill_id into bills_get_bill for full detail' and notes that it is the authoritative source for bill status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_case_law_grep_judgmentSearch within a UK Court JudgmentARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a judgment slug and want to find paragraphs whose text matches a pattern.
Returns a list of {eId, snippet, match} hits — small per-paragraph
snippets centred on the match. AFTER calling, read full paragraphs via
judgment_get_paragraph(slug, eId) or the judgment://{slug}/para/{eId}
resource.
Use case: content search within one judgment (e.g. "negligence", "test for foreseeability", "Donoghue"). For paragraph-number navigation by eId, call judgment_get_index instead.
Pattern is regex; if it doesn't compile, falls back to literal substring search.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | TNA judgment slug, e.g. 'uksc/2024/12' or 'ewca/civ/2023/450'. | |
| pattern | Yes | Regex pattern (or plain substring) to search within paragraph text. If the pattern doesn't compile as regex, falls back to literal substring match. | |
| max_hits | No | Cap on number of hits returned. | |
| case_insensitive | No | Default true. Set false for case-sensitive matching. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | Yes | Matching paragraphs in document order |
| slug | Yes | The judgment slug that was searched |
| pattern | Yes | The pattern that was searched for |
| truncated | Yes | True if hit count reached max_hits and more matches may exist |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond the annotations (readOnlyHint, idempotentHint) by disclosing the exact return shape ({eId, snippet, match}), the 'small per-paragraph snippets' behavior, and the regex fallback to literal substring matching. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured and front-loaded with the trigger condition. Every sentence adds value: return format, use case, alternatives, and regex behavior. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with an existing output schema, the description covers the key usage scenario, distinguishes from related tools, explains the regex behavior, and points to the next step for reading full paragraphs. This is complete and self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter is already described. The description reinforces that 'pattern' is regex with fallback, but does not add new parameter-specific syntax or constraints beyond the schema. Baseline 3 is appropriate when schema carries the param load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource combo: 'find paragraphs whose text matches a pattern' within a UK Court Judgment. It clearly distinguishes from sibling tools like judgment_get_index and judgment_get_paragraph, and from broader search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use statement ('USE THIS TOOL WHEN you have a judgment slug...'), a concrete use case, and direct alternatives: 'For paragraph-number navigation by eId, call judgment_get_index instead.' Also explains the follow-up step to read full paragraphs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_case_law_searchSearch UK Case LawARead-onlyIdempotentInspect
USE THIS TOOL WHEN searching UK case law by party names, court, judge, date, or free-text query.
Returns paginated judgment summaries: neutral citation, court, dates, slug, stable TNA URI. AFTER calling: pass slug into judgment_get_header / judgment_get_index / judgment_get_paragraph (or the judgment:// resource family) for content; pass the neutral citation into citations_resolve to verify before constructing an OSCOLA citation; use case_law_grep_judgment to find text within a single judgment. When a party name returns several candidates, narrow with court + year filters before grep-iterating across full judgments — targeted filtering beats scanning every candidate.
Coverage: TNA Find Case Law indexes UK judgments from roughly the early 2000s onwards. For older authorities, search for a modern judgment that quotes them and read that paragraph.
Authoritative source for UK case law. Web search returns out-of-date or unstable URLs — do not supplement.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Result page number (1-indexed) | |
| court | No | Filter by court slug. Values: 'uksc', 'ukpc', 'ewca/civ', 'ewca/crim', 'ewhc/kb', 'ewhc/ch', 'ewhc/comm', 'ewhc/fam', 'ewhc/pat', 'ewhc/ipec', 'ewhc/admin', 'ewhc/tcc', 'ewhc/costs', 'ewfc', 'ewcop', 'eat', 'ukut/iac', 'ukut/aac', 'ukut/tcc', 'ukut/lc', 'ukftt/tc', 'ukftt/grc', 'nica', 'niqb'. | |
| judge | No | Filter by judge surname. Case-insensitive substring match against the indexed form. Use the surname alone ('Reed', 'Sumption') or with the bare title ('Lord Reed'). Honorific suffixes silently zero the result set — do not append 'JSC', 'of Allermuir', 'KC' etc. Speculating a fuller form than what TNA indexed will return 0 hits with no error. | |
| limit | No | Maximum results to return (1–50). TNA returns up to 50 per request; this slices client-side. Default 10 for a tight shortlist. Set higher for breadth (e.g. 50 to scan the full result set). | |
| party | No | Filter by party name | |
| query | Yes | Full-text search query, e.g. 'negligence duty of care' | |
| to_date | No | Latest judgment date (YYYY-MM-DD). Same caveat as `from_date` — currently silently ignored by upstream. Filtering happens client-side at best. | |
| from_date | No | Earliest judgment date (YYYY-MM-DD). NOTE: the TNA atom.xml endpoint currently appears to ignore this filter — the same results come back regardless. Do not rely on it to narrow output; sort+slice client-side or refine `query` instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Current page number (1-indexed) |
| results | Yes | Matching judgments for this page |
| has_more | Yes | Whether additional pages exist |
| total_pages | No | Total page count if available from API |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint/idempotentHint annotations by disclosing upstream filter issues (from_date/to_date silently ignored), judge parameter quirks (honorific suffixes zero results), and pagination slicing behavior. The description also clarifies coverage limitations ('from roughly the early 2000s onwards') and TNA's stability as an authoritative source.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place by conveying a distinct operational fact or guidance. It is front-loaded with the primary directive, then structures follow-up actions, narrowing strategies, coverage caveats, and authority endorsement. No redundancy detected.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 8 parameters and rich sibling ecosystem, the description covers all essential context: return payload, downstream workflow, filter pitfalls, coverage scope, and comparison with non-specialized search. The presence of an output schema does not reduce the need for this descriptive completeness, and the description delivers fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds crucial parameter-level semantics: it warns that judge suffix forms fail, demonstrates correct usage ('Reed' or 'Lord Reed'), explains limit slicing client-side, and advises refinement strategy for date filters. This significantly exceeds schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear directive: 'USE THIS TOOL WHEN searching UK case law by party names, court, judge, date, or free-text query.' It identifies the specific resource (UK case law) and differentiates from sibling tools by listing what to do after calling (e.g., judgment_get_header, citations_resolve). No ambiguity about tool purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool and provides alternatives: 'use case_law_grep_judgment to find text within a single judgment' and 'pass the neutral citation into citations_resolve.' It also warns against using web search and describes fallback strategy for older authorities. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_citations_format_oscolaFormat OSCOLA Citation StringARead-onlyIdempotentInspect
USE THIS TOOL AFTER citations_resolve to produce the correctly formatted OSCOLA citation string.
Pass the parsed fields returned by citations_resolve directly into this tool. Formats per OSCOLA 4th edition rules for each citation type.
Refuses (status: upstream_validation) if confidence is 0.0 — TNA confirmed the document does not exist — or if a neutral citation has no resolved_url (ambiguous court code, e.g. bare EWHC without a division). In either case, do NOT manufacture a citation; surface the failure and ask the user for the source URL or better identifying details.
DO NOT construct the input fields yourself. The structured input must come from citations_resolve — guessing fields is the primary citation-fabrication route and this tool is the guard against it.
Authoritative OSCOLA formatting for UK legal citations (no network call).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | 'raw' from citations_resolve. Used as-is for EU retained law — the original text preserves the Regulation/Directive distinction. | |
| page | No | 'page' from citations_resolve (starting page in the law report). | |
| year | No | 'year' from citations_resolve. | |
| court | No | 'court' from citations_resolve, e.g. 'UKSC', 'EWCA CIV', 'EWHC (KB)'. | |
| number | No | 'number' from citations_resolve (judgment number within the year). | |
| volume | No | 'volume' from citations_resolve (law report volume, if any). | |
| section | No | 'section' from citations_resolve, e.g. '47', '12', '20A'. | |
| si_year | No | 'si_year' from citations_resolve. | |
| si_number | No | 'si_number' from citations_resolve. | |
| confidence | Yes | 'confidence' from citations_resolve. Refuses to format if 0.0 — that means TNA confirmed the document does not exist. Pass only the value citations_resolve returned; do not guess. | |
| resolved_url | No | 'resolved_url' from citations_resolve. Must be non-null for neutral citations. | |
| citation_type | Yes | 'type' field from citations_resolve result. | |
| report_series | No | 'report_series' from citations_resolve, e.g. 'WLR', 'AC', 'QB'. | |
| legislation_title | No | 'legislation_title' from citations_resolve, e.g. 'Companies Act 2006'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly and non-destructive behavior, so the description adds critical behavioral context: refusal conditions (confidence 0.0, missing resolved_url), the 'no network call' property, and the strong prohibition against constructing inputs manually to prevent citation fabrication. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although somewhat long, every sentence delivers essential operational guidance: ordering, input provenance, refusal triggers, and anti-fabrication policy. The bold 'USE THIS TOOL AFTER' and 'DO NOT construct' warnings are prominent, and the text is well-structured for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the full invocation context: pipeline position, input requirements, failure modes, and authoritative formatting behavior. With an output schema present, return-value details are unnecessary. The tool's high-stakes nature (citation fabrication) justifies the thorough guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described as coming from citations_resolve, so the schema carries the parameter details. The description enhances this by mandating that fields must be passed directly from citations_resolve and never guessed, adding provenance semantics that reduce fabrication risk.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'produce the correctly formatted OSCOLA citation string' and 'Formats per OSCOLA 4th edition rules for each citation type.' It also distinguishes itself from sibling tools by explicitly saying 'USE THIS TOOL AFTER citations_resolve,' positioning it as the formatting step in a two-tool pipeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'USE THIS TOOL AFTER citations_resolve' and instructs to pass parsed fields directly. It also provides exclusions: refuses when confidence is 0.0 or when neutral citations lack a resolved_url, and tells the agent to surface the failure rather than fabricate a citation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_citations_networkGet Case Citation NetworkARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a judgment slug and want to map every citation it makes — cases cited, legislation referenced, SIs, retained EU law.
Fetches the judgment XML from TNA and parses all OSCOLA citations within. Returns citations grouped by type, deduplicated and sorted. AFTER calling, pass any individual citation through citations_resolve to confirm it resolves and to retrieve its canonical URL.
Useful for authority-network analysis (what did this judgment rely on?) and for surfacing the legislative landscape a case sits inside.
| Name | Required | Description | Default |
|---|---|---|---|
| case_uri | Yes | TNA judgment URI slug, e.g. 'uksc/2024/12' or 'ewca/civ/2023/450'. Use the 'uri' field from case_law_search results — not the full URL. Do not include the 'https://caselaw.nationalarchives.gov.uk/' prefix. |
Output Schema
| Name | Required | Description |
|---|---|---|
| eu_refs | No | Retained EU law references, e.g. 'Regulation (EU) 2016/679' |
| si_refs | No | Statutory Instrument references, e.g. 'SI 2018/1234' |
| case_uri | Yes | The judgment URI that was fetched and parsed |
| law_report_refs | No | Law report citations, e.g. '[2020] 1 WLR 100' |
| total_citations | Yes | Sum of all de-duplicated citations across every bucket |
| legislation_refs | No | Legislation section references, e.g. 's.47 Companies Act 2006' |
| neutral_citations | No | Neutral citations referenced, e.g. '[2020] UKSC 14' |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds concrete behavioral details: it fetches the judgment XML from TNA, parses OSCOLA citations, and returns grouped, deduplicated, and sorted results. This significantly extends transparency beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise: an upfront usage trigger, a brief process explanation, a follow-up instruction, and two high-level use cases. Every sentence earns its place, and the content is front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a single parameter, a detailed schema, an output schema, and helpful annotations, the description fully covers input, process, follow-up, and use cases. It leaves no significant gaps for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single parameter case_uri, including format, examples, and a prefix exclusion instruction. The description only uses the synonymous term 'judgment slug' and does not add new semantic information beyond the schema's rich definition, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool maps every citation a judgment makes, enumerating categories such as cases, legislation, SIs, and retained EU law. It is distinguished from siblings like law_citations_parse by focusing on the citation network extracted from a judgment's XML, with a specific verb+resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'USE THIS TOOL WHEN you have a judgment slug and want to map every citation,' which is an explicit usage condition. It also tells the agent to pass individual citations through citations_resolve afterward, providing clear follow-up guidance and alternative interaction via a sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_citations_parseParse OSCOLA CitationsARead-onlyInspect
USE THIS TOOL WHEN you have free text (a memo, an email, a clause) and want every OSCOLA-style citation it contains extracted and classified.
Identifies: neutral citations ([2024] UKSC 12), law reports ([2024] 1 WLR 100), legislation sections (s.47 Companies Act 2006), SIs (SI 2018/1234), retained EU law (Regulation (EU) 2016/679).
Parsing is pure regex by default. Ambiguous citations (e.g. bare [2024] EWHC without division) can OPTIONALLY be disambiguated by setting disambiguate=True, which asks the CONNECTED CLIENT's own model (not this server) to resolve the division via MCP sampling — off by default. Citations resolve to TNA / legislation.gov.uk URLs when possible.
AFTER calling, pass each citation through citations_resolve to verify it points at a real document before quoting or formatting it — the parser recognises the SHAPE of a citation but does not confirm the document exists.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Free text containing OSCOLA citations to extract. Supported: neutral citations ([2024] UKSC 12), law reports ([2024] 1 WLR 100), legislation sections (s.47 Companies Act 2006), SIs (SI 2018/1234), retained EU law (Regulation (EU) 2016/679). Max 50,000 chars. | |
| disambiguate | No | Default False — pure-regex parsing, no model in the loop. If True, ambiguous citations (e.g. bare EWHC without a division) are sent to the connected client's own LLM, via MCP sampling, to resolve the division. Opt in only when you want best-effort division resolution and accept that a model shapes the result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ambiguous | Yes | Citations with confidence < 0.7; may have been partially disambiguated via sampling |
| citations | Yes | All successfully parsed citations (confidence >= 0.7) |
| text_length | Yes | Character length of the input text |
| parse_duration_ms | Yes | Time taken to parse, in milliseconds |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=true annotation, the description discloses important behaviors: pure-regex default, optional MCP sampling for disambiguation with implications (model shapes result), URL resolution to TNA/legislation.gov.uk, and the important limitation that the parser recognizes shape but does not confirm existence. The description also mentions it connects to the client's model, which is beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (use case, supported types, behavior, follow-up). It is longer than average but every sentence adds relevant information. The 'USE THIS TOOL WHEN' directive is front-loaded. Minor redundancy with schema description keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description needn't explain return values. It covers input requirements, parsing behavior, optional disambiguation, URL resolution, and a recommended follow-up action. The combination of annotations, schema, and description leaves no significant gaps 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both parameters (text and disambiguate). The description does restate some parameter context (e.g., disambiguate triggers MCP sampling), but it does not add meaning beyond what the detailed parameter descriptions already provide. Baseline 3 is appropriate because the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: extracting and classifying OSCOLA-style citations from free text. It explicitly lists supported citation types (neutral citations, law reports, legislation sections, SIs, retained EU law), which distinguishes it from sibling tools like law_citations_format_oscola and law_citations_resolve.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'USE THIS TOOL WHEN you have free text...' establishing the exact trigger scenario. It also provides explicit post-condition guidance: 'AFTER calling, pass each citation through citations_resolve to verify' — this gives the agent a clear workflow and indirectly distinguishes this tool from the resolve tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_citations_resolveResolve Single OSCOLA CitationARead-onlyIdempotentInspect
USE THIS TOOL BEFORE constructing an OSCOLA citation string from known fields, OR to confirm a citation points at a real document.
Parses + resolves a single citation (neutral citation, SI, legislation section, retained EU law) and returns parsed fields plus resolved_url. For neutral citations, performs a live TNA HEAD check — non-200 sets confidence to 0.0 (document absent). Do NOT format or quote a confidence-0.0 citation.
If the TNA HEAD check fails (timeout, connection error), raises ToolError with {"error_category": "transient", "is_retryable": true}. One retry is attempted — retry this call or proceed without TNA verification.
Formatting a citation from "known" fields without prior resolution is the most common fabrication route. If this tool raises or returns no resolved_url, do NOT manufacture a citation — surface the failure and ask the user for the source URL.
Authoritative source for UK legal-citation resolution.
| Name | Required | Description | Default |
|---|---|---|---|
| citation | Yes | A single OSCOLA citation to parse and resolve. E.g. '[2024] UKSC 12', 'SI 2018/1234', 's.47 Companies Act 2006' |
Output Schema
| Name | Required | Description |
|---|---|---|
| raw | Yes | Original citation text as found in the source |
| page | No | Starting page in the law report |
| type | Yes | Classification of the citation type |
| year | No | Year component of the citation |
| court | No | Court code: UKSC, UKPC, EWCA Civ, EWCA Crim, EWHC (KB), EWHC (Ch), EWHC (Comm), EWHC (Fam), EWHC (Pat), EWHC (IPEC), UKUT (IAC), UKUT (TCC), UKUT (AAC), UKUT (LC), EAT, UKFTT (TC), UKFTT (GRC) |
| number | No | Judgment number within the year |
| volume | No | Report volume number (for law reports) |
| section | No | Section number referenced |
| si_year | No | SI year (for SI YYYY/NNN citations) |
| si_number | No | SI number |
| confidence | Yes | Parse confidence 0.0–1.0. Citations below 0.7 are ambiguous and may have been sent for LLM disambiguation. |
| resolved_url | No | TNA Find Case Law or legislation.gov.uk URL if successfully resolved |
| report_series | No | Law report series abbreviation: WLR, AC, QB, KB, Ch, All ER, EWCA Civ, etc. |
| legislation_title | No | Title of legislation (for s.NN Act YYYY citations) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, the description adds substantial context: live TNA HEAD check, confidence set to 0.0 on non-200, transient error retry behavior, and the instruction to surface failures rather than fabricate citations. This far exceeds the annotation baseline and provides critical operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is about 180 words but every sentence delivers essential information: primary use, behavior, failure modes, and critical cautions. It is front-loaded with a prominent uppercase usage directive and structured with clear paragraphs. No filler or redundancy; it earns its length for a tool with network-dependent behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema covering return values, so the description focuses on behaviors, errors, retries, confidence semantics, and anti-fabrication rules. It covers failure modes (timeout, connection error), retry policy, and user guidance on what to do if resolution fails. Given the complexity of live TNA checks and confidence scores, this is admirably complete without needing further elaboration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter `citation` is fully described in the input schema with explicit examples and length constraints, achieving 100% schema coverage. The description mentions citation types (neutral citation, SI, legislation section, retained EU law) which overlaps with the schema but does not add additional parameter-level syntax or format details. Schema carries the burden, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Parses + resolves') and resource ('a single citation') and immediately distinguishes itself by explaining the use case: 'USE THIS TOOL BEFORE constructing an OSCOLA citation string from known fields, OR to confirm a citation points at a real document.' This clearly differentiates it from siblings like law_citations_parse and law_citations_format_oscola.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance ('USE THIS TOOL BEFORE constructing...') and strong when-not-to-use warnings ('Do NOT format or quote a confidence-0.0 citation', 'do NOT manufacture a citation'). However, it does not explicitly name sibling alternatives, only implies that formatting from known fields is a different route. This is clear and actionable but stops short of named alternatives, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_committees_get_committeeGet Committee DetailARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a committee_id and want the metadata + current membership.
Fetches committee detail and member list in parallel. AFTER calling, pass committee_id into committees_search_evidence to see what evidence has been submitted to this committee on what topics.
| Name | Required | Description | Default |
|---|---|---|---|
| committee_id | Yes | Committee ID from committees_search_committees results. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Committee ID |
| url | No | Parliament URL for this committee |
| name | Yes | Committee name |
| No | Contact email | |
| house | No | Commons, Lords, or Joint |
| phone | No | Contact phone number |
| members | No | Current committee members |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations by disclosing that the tool fetches committee detail AND member list in parallel, setting expectations for response composition. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first front-loads the trigger condition, the second states the action, and the third provides actionable next-step guidance. The ALL-CAPS emphasis on 'USE THIS TOOL WHEN' and 'AFTER calling' highlights the most decision-relevant text. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-parameter tool with full annotation coverage and an output schema, so the description need not explain return values. It covers what the tool does, when to use it, and the next step in the workflow, which is complete guidance for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the schema already documents committee_id as coming from committees_search_committees results. The description reinforces this source and shows the parameter's role in the follow-up workflow, but it does not add significant new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'Fetches committee detail and member list in parallel.' The trigger condition 'when you have a committee_id' clearly distinguishes this from sibling search tools like law_committees_search_committees, and the mention of 'metadata + current membership' defines the exact scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with an explicit when-to-use directive ('USE THIS TOOL WHEN you have a committee_id'), and it names a related alternative ('pass committee_id into committees_search_evidence') with a clear workflow instruction. The when-not-to-use is strongly implied by the conditional phrasing, making this a model of usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_committees_search_committeesSearch Parliamentary CommitteesARead-onlyIdempotentInspect
USE THIS TOOL WHEN searching or listing UK parliamentary select committees by name, house, or active status.
Returns committee summaries (name, house, active status, ID). AFTER calling, pass committee_id into committees_get_committee for current membership, or into committees_search_evidence to retrieve oral and written evidence submitted to that committee.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Filter by house. | |
| limit | No | Maximum committees to return. Default 100 comfortably covers all currently-active UK select committees. Raise only for historical sweeps. | |
| query | No | Search term for committee names, e.g. 'defence' or 'treasury'. Filtered client-side against committee names. Omit to list all committees. | |
| active_only | No | If true, only return currently active committees. |
Output Schema
| Name | Required | Description |
|---|---|---|
| house | No | House filter applied, or None |
| query | No | Name substring filter applied, or None |
| total | Yes | Number of committees returned in this call |
| committees | No | Matching committees. Use committees_get_committee for membership detail. |
| active_only | Yes | Whether results were restricted to currently active committees |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context: it returns 'committee summaries (name, house, active status, ID)' and explicitly describes the follow-up actions, which tells the agent what to expect from the output and how to chain tools. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. The first line is a clear imperative ('USE THIS TOOL WHEN...'), immediately followed by the return summary and downstream steps. Every sentence earns its place: purpose, output, and usage flow. No fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (so return values are already structured) and annotations cover safety and idempotence, the description provides sufficient context for decision-making. It explains what the tool does, what it returns, and how to proceed with the results. It does not cover edge cases like empty results or error behavior, but these are not critical for a simple read-only search tool; the overall guidance is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%—all four parameters (house, limit, query, active_only) have detailed descriptions with defaults, bounds, and examples in the schema itself. The tool description does not add additional parameter-level meaning; it only mentions 'name, house, or active status' in the purpose, which maps to existing schema fields. Per the rubric, a baseline of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'searching or listing UK parliamentary select committees by name, house, or active status.' It names the specific resource (UK parliamentary select committees), the actions (searching/listing), and the filtering dimensions. It also distinguishes itself from sibling tools by directing the user to pass committee_id to committees_get_committee or committees_search_evidence afterward, thereby clarifying its unique 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'USE THIS TOOL WHEN searching or listing...' which is an explicit when-to-use directive. It also provides downstream usage guidance ('AFTER calling, pass committee_id into...'), which helps the agent choose the next tool. However, it does not explicitly state when NOT to use this tool or name direct alternatives for the same search task, which would elevate it to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_committees_search_evidenceSearch Committee EvidenceARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a committee_id and want the oral and written evidence submitted to it.
Returns ONE PAGE of evidence (default 20). Free-text titles are capped per max_title_chars; witness lists are capped at 10 per item. For committees with many submissions, re-call with offset=offset+returned while has_more is true.
Authoritative source for parliamentary committee evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum evidence items to return. Default 20. When evidence_type='both' the limit is split across oral and written (roughly half each). | |
| offset | No | Number of evidence items to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true. | |
| committee_id | Yes | Committee ID from committees_search_committees results. | |
| evidence_type | No | Type of evidence to search. | both |
| max_title_chars | No | Per-item cap on the free-text title field. Default 300 prevents context blow-up from verbose inquiry titles. Raise to 1000+ only when you need the full title text. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | Yes | Max evidence items requested for this page |
| offset | Yes | Number of evidence items skipped before this page |
| evidence | No | Evidence items in this page. Titles are capped per max_title_chars; witness lists are capped at 10 per item. |
| has_more | Yes | True if there may be more evidence beyond this page. Re-call with offset=offset+returned to fetch the next page. Conservative: when evidence_type='both', True if either oral or written upstream page came back full. |
| returned | Yes | Number of evidence items actually returned in this call |
| committee_id | Yes | Committee ID this page belongs to |
| evidence_type | Yes | Evidence type filter applied to this query |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context beyond this: pagination behavior ('Returns ONE PAGE of evidence'), caps on title lengths and witness lists, and the authoritative-source note. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the use condition, and every sentence carries meaningful information (when to use, pagination, caps, authority). No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated list tool with a 100% schema coverage and an output schema present, the description covers the essential operational details: pagination, per-item caps, and the authoritative nature of the source. It does not need to describe return values since an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed parameter descriptions (e.g., limit split across oral/written, offset behavior, max_title_chars intent). The description itself adds minimal parameter-specific information beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with an explicit, conditional imperative: 'USE THIS TOOL WHEN you have a committee_id and want the oral and written evidence submitted to it.' This clearly identifies the verb (search), resource (committee evidence), and scope (oral/written), and distinguishes it from siblings like law_committees_search_committees and law_committees_get_committee.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the condition for use (having a committee_id) and provides concrete pagination guidance ('re-call with offset=offset+returned while has_more is true'). It does not explicitly name alternatives or when-not-to-use scenarios, but the intended use case is unambiguous and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_get_promptARead-onlyIdempotentInspect
Get a prompt by name with optional arguments.
Returns the rendered prompt as JSON with a messages array. Arguments should be provided as a dict mapping argument names to values.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the prompt to get | |
| arguments | No | Optional arguments for the prompt |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context by stating that it returns a rendered prompt as JSON with a messages array and that arguments should be a dict mapping names to values, which goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences long, front-loaded with the core action, and contains no filler. Every sentence provides value: the first states the purpose, the second clarifies output and argument format. Excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, strong annotations, and the presence of an output schema, the description sufficiently covers the key behavioral aspects: what it does, how arguments are passed, and the output shape. No critical information is missing for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, so the schema already documents each parameter. The description reinforces the arguments format ('dict mapping argument names to values') but adds little beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a prompt by name' with a specific verb and resource, making the core purpose unambiguous. However, it does not explicitly differentiate itself from sibling tools like 'law_list_prompts' or the similarly named 'dd_get_prompt', so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use this tool when you have a prompt name and want the rendered prompt. There is no explicit mention of alternatives or when not to use it, such as pointing to 'law_list_prompts' for discovery, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_hmrc_check_mtd_statusCheck MTD VAT StatusARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a 9-digit VAT Registration Number and need that business's Making Tax Digital VAT mandate status.
Returns whether the business is mandated for MTD, effective date, and trading name.
Connects to the HMRC sandbox by default. Set HMRC_API_BASE to 'https://api.service.hmrc.gov.uk' for production. Requires HMRC_CLIENT_ID + HMRC_CLIENT_SECRET environment variables (OAuth 2.0). Raises if credentials are not configured — do not infer status.
| Name | Required | Description | Default |
|---|---|---|---|
| vrn | Yes | VAT Registration Number: 9 digits, e.g. '123456789'. GB prefix accepted and stripped automatically. |
Output Schema
| Name | Required | Description |
|---|---|---|
| vrn | Yes | VAT Registration Number queried |
| mandated | Yes | Whether this business is mandated for MTD VAT |
| trading_name | No | Registered trading name if available |
| effective_date | No | Date from which MTD obligation applies |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent hints in annotations, the description adds crucial operational context: the default to HMRC sandbox, the production URL via HMRC_API_BASE, and the need for HMRC_CLIENT_ID/SECRET credentials. It also discloses that the tool raises an error if credentials are missing, and explicitly warns not to infer status. This is exactly the kind of behavioral detail that annotations don't capture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with the most important 'when to use' statement first. It covers purpose, return values, and setup in just a few lines without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool with an output schema and annotations, this description covers all essential aspects: trigger condition, return fields, environment configuration, and error behavior. The existence of an output schema means detailed return-value structure need not be in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions the VRN and its format in the trigger sentence, but the schema itself already provides full coverage with min/max lengths, an example, and the note about GB prefix stripping. No additional parameter meaning is added beyond the schema, so the baseline score for high coverage applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with an explicit trigger: 'USE THIS TOOL WHEN you have a 9-digit VAT Registration Number and need that business's Making Tax Digital VAT mandate status.' This clearly specifies the verb (check), the resource (MTD VAT status), and the starting condition. It distinguishes from sibling VAT tools such as law_hmrc_get_vat_rate which handles rates, not mandate status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool is explicitly scoped to a scenario involving a VRN and the MTD mandate status. It also states environment and credential prerequisites, implying that this tool is not usable without proper configuration. However, it doesn't explicitly name alternate tools to use instead in other scenarios, so it falls just short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_hmrc_get_vat_rateGet VAT Rate for CommodityARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a UK commodity or service description and want its VAT rate category.
Returns the rate (standard 20%, reduced 5%, zero 0%, exempt), effective date, and any relevant conditions or exceptions.
IMPORTANT: Uses a static lookup table current as of 22 Nov 2023 (Autumn Statement). Rates may have changed in subsequent Budgets — for time-sensitive advice, verify against GOV.UK via hmrc_search_guidance.
| Name | Required | Description | Default |
|---|---|---|---|
| commodity_code | Yes | Commodity code or plain-English description. E.g. 'food', 'domestic fuel', 'software', 'financial services', 'new build residential' |
Output Schema
| Name | Required | Description |
|---|---|---|
| rate | Yes | VAT rate category |
| notes | No | Any additional notes or conditions on this rate |
| commodity_code | Yes | Commodity code or description queried |
| effective_from | Yes | Date from which this rate applies |
| rate_percentage | Yes | Applicable rate as percentage: 20.0 (standard), 5.0 (reduced), 0.0 (zero/exempt) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses that the data comes from a static lookup table current as of 22 Nov 2023, that rates may have changed, and that results include effective date and conditions. This adds valuable behavioral context about data freshness and scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a usage directive, a clear statement of return value, and an important caveat about static data with an alternative. Every sentence adds meaningful information without redundancy, and it is front-loaded with the primary use case.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description sufficiently covers the core purpose, return expectations, and a critical limitation (static data). It also points to an alternative for verification, making it complete for the tool's complexity and context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the single parameter (commodity_code) with a detailed description and examples. The tool description adds only the 'UK' qualifier and switches 'code' to 'description,' which is minimal additional semantic value. The baseline of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: to get the VAT rate category for a UK commodity or service, with a specific verb ('get') and resource ('VAT rate'). It distinguishes itself from sibling tools by focusing on VAT rate lookup and explicitly mentions the return fields (rate, effective date, conditions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description begins with 'USE THIS TOOL WHEN you have a UK commodity or service description and want its VAT rate category,' providing a clear usage condition. It also names an alternative tool (hmrc_search_guidance) for time-sensitive advice, thus offering both 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.
law_hmrc_search_guidanceSearch HMRC GuidanceARead-onlyIdempotentInspect
USE THIS TOOL WHEN searching GOV.UK for HMRC tax guidance on a topic (VAT, income tax, corporation tax, etc.).
Returns matching guidance titles, URLs, summaries, and last-updated dates. Searches the official GOV.UK content API filtered to HMRC publications.
Authoritative source for current HMRC tax guidance. Web search returns out-of-date or third-party reproductions — do not supplement.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum guidance results to return (1–25). Passed to the GOV.UK search count param. | |
| query | Yes | Search query for HMRC guidance, e.g. 'VAT digital services', 'R&D tax relief SME' |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | The search query that was run |
| total | Yes | Number of guidance documents returned in this call |
| results | No | Matching HMRC guidance pages. Each entry's `summary` is capped per the max_summary_chars input parameter. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description only needs to add context. It adds the return values (titles, URLs, summaries, last-updated dates) and specifies the source (official GOV.UK content API), which goes beyond the annotations. It does not mention rate limits or authentication, but for a read-only search this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences long, front-loaded with the usage directive, and contains no fluff. Each sentence serves a distinct purpose: when to use, what it returns, where it searches, and why it's authoritative. It is exceptionally concise and well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and only two parameters (one required), the description provides sufficient context: the purpose, the data source, the return fields, and a warning about alternatives. It is fully adequate for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for both query and limit parameters. The description does not add any parameter-specific semantics beyond what the schema already provides. Baseline 3 is appropriate because the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: searching GOV.UK for HMRC tax guidance. It specifies the verb 'search', the resource 'HMRC tax guidance', and the scope (GOV.UK content API filtered to HMRC publications), distinguishing it from sibling tools like gov_govuk_search and other HMRC-specific tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'USE THIS TOOL WHEN searching GOV.UK for HMRC tax guidance' and warns against web search with 'do not supplement', providing clear when-not guidance. However, it does not name sibling tools as explicit alternatives, so it falls just short of a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_judgment_get_headerGet Judgment HeaderARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a judgment slug and need metadata (parties, judges, neutral citation, court, dates).
Call case_law_search FIRST to get the slug. AFTER calling, use judgment_get_index to discover paragraphs, then judgment_get_paragraph to read specific ones. Authoritative source for UK judgment metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Judgment slug, e.g. 'uksc/2024/12' or 'ewca/civ/2023/450' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, setting the safety baseline. The description adds value by labeling the tool an 'Authoritative source for UK judgment metadata,' providing data reliability context beyond the schema. It doesn't contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, with the most important usage instruction front-loaded in the first sentence. Every sentence serves a purpose—purpose, workflow, and authority—with no redundant or irrelevant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with an output schema and strong annotations, the description fully covers when to use it, how to obtain the slug, and how it fits into a larger workflow. It leaves no significant gaps for the agent to resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'slug' fully described and examples provided. The description only references 'judgment slug' without adding new format or syntax details, so it adds minimal value beyond the schema, warranting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving judgment metadata (parties, judges, neutral citation, court, dates) given a slug. It distinguishes from sibling tools like judgment_get_index (paragraphs) and judgment_get_paragraph (individual paragraphs) by specifying the metadata focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'USE THIS TOOL WHEN' statement provides a clear precondition (having a slug) and the need for metadata. It also outlines the workflow: call case_law_search first to get the slug, then judgment_get_index, then judgment_get_paragraph, which guides the agent on sequencing and when alternatives are appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_judgment_get_indexGet Judgment Paragraph IndexARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a judgment slug and want the paragraph navigation index (eId + preview line for every paragraph).
Call case_law_search FIRST to get the slug. AFTER calling, pass an eId from the returned list into judgment_get_paragraph to read that paragraph's full text, or use case_law_grep_judgment for content search across all paragraphs.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Judgment slug, e.g. 'uksc/2024/12' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint, idempotentHint, and destructiveHint=false, the description adds useful behavioral context by specifying that the output contains eId and preview line per paragraph. It also clues the agent that this is a list/index operation rather than full-text retrieval, which supports correct follow-up tool selection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose and keeps all sentences purposeful. It packs workflow, tool interrelationships, and output expectations into three concise lines without unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has one fully documented parameter, includes an output schema, and benefits from complete annotation coverage. The description supplies the necessary contextual glue by linking to preceding and follow-up tools, making it sufficiently complete for accurate agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the single parameter with a clear example ('uksc/2024/12'), and the description reinforces the meaning by saying the tool is used when you have a judgment slug and instructs you to get it from case_law_search. This adds practical guidance beyond the schema's bare definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool returns a paragraph navigation index with 'eId + preview line for every paragraph.' It names the specific resource (judgment paragraphs) and distinguishes itself from sibling tools like case_law_search, judgment_get_paragraph, and case_law_grep_judgment by positioning it as the index lookup step 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description begins with 'USE THIS TOOL WHEN you have a judgment slug,' providing an explicit trigger condition. It also prescribes the workflow: call case_law_search first to obtain the slug, then use this tool, and afterward feed eIds into judgment_get_paragraph or case_law_grep_judgment, thereby clarifying when to use this tool versus its alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_judgment_get_paragraphGet Judgment ParagraphARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a judgment slug + LegalDocML eId and want that paragraph's full text.
Call judgment_get_index FIRST to discover available eIds (or use case_law_grep_judgment to locate paragraphs by content). Returns the paragraph XML content (400–1,700 tokens typical).
| Name | Required | Description | Default |
|---|---|---|---|
| eId | Yes | Paragraph eId from judgment_get_index, e.g. 'para_12'. Numeric strings like '12' are accepted and normalized to 'para_12'. | |
| slug | Yes | Judgment slug, e.g. 'uksc/2024/12' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds value by disclosing the return type (paragraph XML content) and typical token range (400–1,700 tokens), which is not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the triggering condition, and no unnecessary words. Each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the availability of an output schema and comprehensive annotations, the description covers prerequisites (get_index first), alternatives (grep), return format, and expected size. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed parameter descriptions and examples, including normalization of numeric eIds. The description adds minimal extra semantic value beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'USE THIS TOOL WHEN' and specifies the exact scope: full text of a paragraph given a judgment slug and LegalDocML eId. This clearly distinguishes it from sibling tools like law_judgment_get_index and law_judgment_get_header.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to call judgment_get_index FIRST to discover eIds and mentions case_law_grep_judgment as an alternative for locating paragraphs by content. This provides clear when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_legislation_get_sectionGet Legislation SectionARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a known Act / SI and want the parsed text of a specific section, with extent and in-force metadata.
Returns full section text, territorial extent, in-force status, and prospective flag. Content capped per max_chars (default 10,000, ~2,500 tokens) — raise for unusually long definition sections; check content_truncated in the response.
ALWAYS check extent — a section may apply to England & Wales but not
Scotland or Northern Ireland. Reciting a section without checking
extent is a recurring legal-research error.
Alternative: call read_resource(uri="legislation://{type}/{year}/{number}/ section/{section}") for raw CLML XML; use this tool when you want the parsed structured response instead.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Legislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results. | |
| year | Yes | Year of enactment | |
| number | Yes | Chapter or SI number | |
| section | Yes | Section number, e.g. '47' or '12A'. Use the numeric part only — not 'section-47'. Schedules are not currently supported. | |
| max_chars | No | Maximum characters of section content to return. Default 10,000 (~2,500 tokens) covers almost every section. Raise to 50,000+ only for unusually long Finance Act definition sections. Check content_truncated in the response to see if it was cut. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | Section title or heading |
| extent | No | Territorial extent: list of 'England', 'Wales', 'Scotland', 'Northern Ireland'. Empty list means unknown — do not assume full UK extent. |
| content | Yes | Plain text content of the section, possibly truncated per max_chars. Check content_truncated and original_length for full-text information. |
| in_force | No | False if the section is explicitly marked repealed in CLML. True only when an InForce element is present in the section body (rare). Null for most sections — the data.xml endpoint does not carry a per-section current in-force boolean; null does not mean repealed. |
| warnings | No | Non-fatal retrieval or parsing warnings the caller should disclose where relevant. |
| prospective | No | True if this section has not yet come into force; None if unknown |
| version_date | No | Date of the version retrieved |
| source_format | No | Source parsed for this response. html_fallback means CLML XML was unavailable and text was parsed from the public HTML page. |
| section_number | Yes | Section number, e.g. '47', '12A', 'Schedule 2' |
| original_length | No | Original plain-text length in characters before any truncation |
| content_truncated | No | True if content was cut to fit max_chars |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses significant behavioral traits beyond annotations: content truncation via max_chars, the need to check content_truncated, and the warning about extent applicability. These are not visible from the readOnlyHint/idempotentHint annotations, and the description proactively warns about a common legal-research error. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an immediate use-case directive, followed by return-value details, truncation warning, extent caution, and an alternative. Every sentence serves a purpose; the content is dense yet readable, and the key usage instruction is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description does not need to enumerate all return fields, but it covers the essential return components (text, extent, in-force status, prospective flag), the truncation mechanism, and the alternative tool. It is complete for a moderately complex tool with 5 parameters and rich annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the max_chars parameter's practical use (raising for long definition sections, checking content_truncated) and clarifying the default token estimate. It does not describe the path parameters, but the schema already does this comprehensively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieving parsed text of a specific legislation section with extent and in-force metadata. It distinguishes itself from law_read_resource by explicitly positioning this tool as the parsed structured response alternative to raw XML, which also differentiates it from sibling tools like law_legislation_get_toc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('USE THIS TOOL WHEN you have a known Act / SI and want the parsed text of a specific section') and provides a named alternative (read_resource for raw CLML XML). It also includes a critical usage reminder to check extent, which adds practical guidance beyond simple triggering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_legislation_get_tocGet Legislation Table of ContentsARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a known Act / SI and want the structural table of contents (parts, chapters, sections, schedules).
Returns structural elements with XML id and title, e.g. 'section-47: Definitions'. AFTER calling, pass the numeric section identifier (use '47', NOT 'section-47') into legislation_get_section for full text.
Large statutes (Companies Act 2006 has many hundreds of items) are paginated via offset/limit. Check has_more and total_items.
Alternative: call read_resource(uri="legislation://{type}/{year}/{number}/
toc") for the full TOC as a newline-separated id: title string (no
pagination). Use this tool when you need the structured response with
offset / limit / has_more for stepping through large statutes.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Legislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results. | |
| year | Yes | Year of enactment | |
| limit | No | Maximum items to return in this call (default 200, max 1000). Raise only when you need a larger slice in one response. Check has_more and total_items to know if further pages exist. | |
| number | Yes | Chapter or SI number | |
| offset | No | Number of items to skip from the flattened TOC. Use with limit to page through very large statutes like the Companies Act 2006 (1300+ items). |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | Legislation type code echoed from the request |
| year | Yes | Year of enactment echoed from the request |
| items | No | TOC entries in XML document order, formatted as '<id>: <title>', e.g. 'section-47: Definitions'. When calling legislation_get_section pass only the numeric part ('47', not 'section-47'). |
| limit | Yes | Page size applied after offset |
| number | Yes | Chapter or SI number echoed from the request |
| offset | Yes | Offset applied to the full TOC item list |
| has_more | Yes | True if more items remain beyond offset+returned |
| returned | Yes | Number of items in this response |
| total_items | Yes | Total structural items parsed from the XML, before offset/limit. Compare to `returned` and `has_more` to decide whether to paginate. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only/idempotent safety, but the description adds concrete behavior: the return format ('XML id and title'), pagination semantics with offset/limit and has_more/total_items, and the specific example of Companies Act 2006. It also clarifies the id format ('section-47' vs '47'), which is valuable beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four neatly separated paragraphs front-load the core purpose, then add return details, pagination guidance, and an alternative. Every sentence carries meaningful information; there is no filler or repetition, making it appropriately sized for a tool with 5 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values need no further explanation. The description covers key operational aspects: pagination with has_more/total_items, the alternative read_resource path, and chaining to legislation_get_section. This is comprehensive for a TOC retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description supplements by explaining how offset/limit paginate through large statutes, and that the type code comes from legislation_search results. While not essential given the rich schema descriptions, it adds practical usage context without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'USE THIS TOOL WHEN you have a known Act / SI and want the structural table of contents', clearly specifying the action (get TOC) and resource (known Act/SI). It distinguishes from the sibling tool law_legislation_get_section and the alternative via read_resource, making its unique purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('when you have a known Act / SI') and provides a direct alternative (read_resource) with a comparison of structured vs. string output. Also instructs the agent to pass the numeric section identifier to legislation_get_section after calling, giving clear next steps and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_legislation_searchSearch UK LegislationARead-onlyIdempotentInspect
USE THIS TOOL WHEN searching UK Acts and Statutory Instruments by title, phrase, or full-text.
Returns ranked results: title, type, year, number, legislation.gov.uk URL, and next_steps hints (toc URI, section template). AFTER calling, chain to legislation_get_toc then legislation_get_section for structural drill-in.
Filter discipline: type and year are exact-match. Use only when you
already know the value. For currency-driven searches ("the recent
Renters' Rights Act"), query by phrase alone and read the year from the
results — guessing a year and filtering by it zeroes results when wrong.
For broader concept queries across content, set fulltext=True.
Authoritative source for UK primary and secondary legislation (legislation.gov.uk).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by type: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Exact-match — omit if you don't already know whether you're looking for an Act vs an SI. | |
| year | No | Filter by year of enactment (exact-match — a single integer, not a range). Omit unless you already know the Act's year. Speculating a year (e.g. 'this is recent so it must be 2026') and getting it wrong will zero out the result set. Better workflow: query without `year`, then read the year from the returned results. | |
| limit | No | Maximum results to return (1–50). Passed to the upstream results-count param. | |
| query | Yes | Search query, e.g. 'Housing Act 1988' or 'data protection personal data' | |
| fulltext | No | Default false → searches Act/SI titles only (best for finding a named Act, e.g. 'Housing Act 1988' returns ukpga/1988/50 first). Set true to search the full text of every Act/SI for the query (returns SIs and regulations that cite the term — e.g. 'rental deposits' would return many implementing instruments). |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Total number of matches |
| results | Yes | Matching legislation items |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/destructive=false, and the description adds non-obvious behaviors: ranked results with next_steps hints, and the warning that guessing a year will zero out results. It also clarifies the `fulltext` switch from title-only to full-text search.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet dense, front-loaded with the use case in caps. Each paragraph addresses a distinct aspect: scope, returns/workflow, filter discipline, and source authority—no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Combined with the detailed input schema and output schema, the description fully covers: what to search, how to filter safely, what results look like, and how to drill into sections. No important aspects of searching UK legislation are left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of params, but description adds strategic parameter usage beyond schema: exact-match semantics for `type`/`year` and the advice to omit them when unsure. It gives concrete examples for `fulltext` (e.g., 'rental deposits').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'USE THIS TOOL WHEN searching UK Acts and Statutory Instruments by title, phrase, or full-text,' which names the specific verb and resource scope. It distinguishes from sibling tools like law_case_law_search by explicitly limiting to UK Acts and SIs on legislation.gov.uk.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear 'when to use' instructions and filter discipline, including exact-match warnings for `type` and `year`, and when to omit them. It also names the chaining workflow to legislation_get_toc and legislation_get_section, giving explicit alternatives for structural drill-in.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_list_promptsARead-onlyIdempotentInspect
List all available prompts.
Returns JSON with prompt metadata including name, description, and optional arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare safe read-only/idempotent behavior. Description adds that it returns JSON with prompt metadata including name, description, and optional arguments, which is useful. But it doesn't disclose any potential limitations or additional behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, information-dense, no filler. Perfectly front-loaded with the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with an output schema, the description is minimally sufficient. It could clarify domain ('law') but the name implies it. It doesn't explain the 'prompt' concept, but sibling existence suggests it's a known entity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description correctly omits parameter details, and the schema coverage is 100% with no params to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' with resource 'all available prompts', which is clear. However, it doesn't distinguish from sibling dd_list_prompts or state the law domain, so sibling differentiation is missing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this vs law_get_prompt or law_list_resources. No mention of alternatives or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_list_resourcesARead-onlyIdempotentInspect
List all available resources and resource templates.
Returns JSON with resource metadata. Static resources have a 'uri' field, while templates have a 'uri_template' field with placeholders like {name}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the annotations: it clarifies the return format ('Returns JSON with resource metadata') and explains the distinction between static resources ('uri' field) and templates ('uri_template' field with placeholders like {name}). This is useful context not covered by the readOnlyHint, openWorldHint, or idempotentHint annotations, and it does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence conveys the core purpose, and the second provides essential output details. Every word contributes value, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no parameters and an output schema, the description is complete. It covers the primary action, the output format, and the key distinction between resource types. There are no significant gaps in what an agent needs to know to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema coverage is 100% by default. The description appropriately focuses on output semantics rather than parameter details. Baseline 4 is appropriate when no parameters exist and the description compensates by explaining returned data structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'List all available resources and resource templates' – a specific verb and resource that clearly identifies the tool's function. It distinguishes itself from sibling tools like law_read_resource (which fetches a specific resource) and law_get_prompt (which gets a prompt) by focusing on the enumeration of all resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention discovery workflows, prerequisites, or alternatives such as law_read_resource. Usage context is only implied by the tool's name and listing behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_parliament_find_memberFind Member of ParliamentARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a member's name and need their integer member_id.
Returns all members matching the name query, each with the integer id,
party, constituency, house, and current-sitting status. Disambiguates
common-name matches (e.g. "Lord Smith" returns multiple peers).
CALL THIS BEFORE any tool that filters by member_id — including parliament_get_debate_contributions, parliament_member_debates, and parliament_member_interests. Name → ID first; ID-based filtering second. Skipping this step and text-searching by name returns unrelated results (see parliament_search_hansard's anti-bypass note for the Pannick case).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name or partial name, e.g. 'Starmer', 'Baroness Hale' |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | The name that was searched |
| total | Yes | Number of members matching the query |
| members | No | Matching members. Use the integer `id` field from any member to call parliament_member_debates or parliament_member_interests. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds valuable behavioral context: it returns all matching members (not just one), includes current-sitting status, and disambiguates common-name matches. This goes beyond the annotations, though minor details like exact matching rules are not fully specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the most important usage directive. It is divided into three concise paragraphs: when to use, what it returns, and the call-order relationship with other tools. Every sentence carries useful information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the tool's role within the broader toolset, including why it must be called before member_id-filtered tools and the consequence of skipping it. It also summarizes the return fields, which is sufficient given that an output schema exists. No critical information is missing for effective tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage for the single 'name' parameter, including an example and length constraints. The description aligns with this by referencing a 'name query' but adds little extra meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: given a member's name, return their integer member_id and related details (party, constituency, house, sitting status). It distinguishes itself from sibling tools by positioning it as the name-to-ID lookup step before ID-based tools, and explicitly contrasts it with text-searching by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance ('USE THIS TOOL WHEN you have a member's name and need their integer member_id'), and states to call it before any tool that filters by member_id, naming specific sibling tools. It also advises against skipping it and text-searching by name, with a concrete example of the failure mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_parliament_get_debate_contributionsGet Contributions In A DebateARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a debate_ext_id and want verbatim contributions, optionally filtered to one member.
Canonical path for "everything a member said in this debate" regardless of vocabulary — text-search tools (parliament_member_debates, parliament_search_hansard) filter by contribution TEXT, dropping members who spoke without using your phrase verbatim. This tool filters by MemberId on the debate's Items list, so vocabulary doesn't matter.
Typical chain: parliament_find_member(name) → member_id, then parliament_search_hansard or parliament_lookup_by_column → debate_ext_id, then this tool. The parliament module's instructions describe the full composition pattern.
Without member_id, returns every contribution (~100-200 for a long debate).
If the wire returns no contributions for a member you expect to have spoken, report the empty result honestly — do NOT reconstruct quotes from training data. Authoritative source for member contributions.
| Name | Required | Description | Default |
|---|---|---|---|
| member_id | No | Optional integer Members API ID. When given, only that member's contributions in this debate are returned — regardless of which words they used. Resolves via parliament_find_member. When omitted, every contribution in the debate is returned (typical debate: 100-200 items). | |
| debate_ext_id | Yes | Debate GUID (DebateSectionExtId). Chain from parliament_search_hansard top_debates[].debate_ext_id, parliament_lookup_by_column matches[].debate_ext_id, or any tool that surfaces a debate identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | Page size requested |
| topic | No | Topic phrase filter applied, if any |
| total | Yes | Number of contributions returned in this call |
| offset | No | Skip applied to this page |
| has_more | No | True if a full page was returned (more may exist) |
| member_id | Yes | Parliament Members API member ID |
| contributions | No | Hansard contributions for the member. Each `text` field is capped at 3000 characters. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds behavioral nuance beyond that: it states the typical result size without member_id (~100-200 for long debate), and explicitly instructs to report empty results honestly without reconstructing quotes from training data. This is valuable additional context that aligns with and enriches the annotation profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is rich but every sentence earns its place. It leads with a clear usage directive, contrasts with alternatives, outlines a typical chain, describes default behavior, and includes a critical anti-hallucination warning. It is front-loaded and well-structured, with no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return value details are covered there. The description covers the full usage lifecycle: when to use, how to obtain parameters (chain), default pagination-like behavior (~100-200 items), and edge-case handling (empty results, no reconstruction). It is complete for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter is already thoroughly documented in the input schema (e.g., member_id is described as 'Optional integer Members API ID... regardless of which words they used'). The description reinforces these semantics but does not add new parameter-level detail beyond what the schema already provides. A baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear directive: 'USE THIS TOOL WHEN you have a debate_ext_id and want verbatim contributions, optionally filtered to one member.' This specifies the verb (get), resource (contributions in a debate), and scope (optional member filter). It also distinguishes itself from text-search tools by explaining the filtering mechanism (MemberId on Items list vs. text-based search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance and contrasts with alternatives: 'text-search tools (parliament_member_debates, parliament_search_hansard) filter by contribution TEXT... This tool filters by MemberId... so vocabulary doesn't matter.' It also gives a typical tool chain (parliament_find_member → search → this tool), leaving no ambiguity about invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_parliament_get_debate_divisionsGet Divisions Held In A DebateARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a debate_ext_id and want the divisions (formal votes) held within it.
Most debates contain no divisions — Business of the House sittings, statements, urgent questions, debates without a vote. A populated list typically appears around bill stages, motions, and contested amendments. Empty list is the honest result, not a failure mode.
Each returned division carries TWO IDs:
id— Hansard-side reference. Useful for cross-referencing in Hansard.votes_id— Lords/Commons Votes API ID (cross-resolved by date+number). AFTER calling, passvotes_idasdivision_idinto votes_get_division for the full member-by-member voting record.
The two upstreams use distinct ID-spaces (Hansard Number=3 might be
Votes-API divisionId=3392). The cross-resolve runs once per (date, house)
group — typically one extra HTTP per debate. votes_id is None when the
cross-resolve found no match.
| Name | Required | Description | Default |
|---|---|---|---|
| debate_ext_id | Yes | Debate GUID (DebateSectionExtId). Chain from parliament_search_hansard contribution.debate_ext_id, top_debates[].debate_ext_id, or parliament_policy_position_summary top_debates[].debate_ext_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| divisions | No | Divisions held in this debate, in chronological order. Empty when no divisions occurred. Each element's `id` chains to votes_get_division. |
| debate_ext_id | Yes | Echo of the input debate GUID. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses that an empty list is a normal result, the cross-resolve runs once per (date, house) group with an extra HTTP call, and votes_id may be None. These are non-obvious behavioral details that enrich the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a usage clause, expectation-setting, bullet-point ID explanations, and behavioral notes. Every sentence contributes value; length is justified by the complexity of the cross-referencing behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations are comprehensive, the description covers the non-obvious aspects: the two ID spaces, the empty-list semantics, and the cross-resolve overhead. It fully prepares an agent to invoke the tool and chain its output correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter debate_ext_id is fully described in the schema with field type, minLength, and chaining sources. The description adds only that you need to have the ID, not new semantics. With 100% schema coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets divisions (formal votes) held within a debate, with a specific verb+resource. It distinguishes itself from siblings by noting the two ID types and the follow-up call to votes_get_division, and the 'USE THIS TOOL WHEN' clause clarifies the exact precondition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'USE THIS TOOL WHEN you have a debate_ext_id and want the divisions'. Also gives context on when divisions are absent (most debates) and directs users to call votes_get_division after passing votes_id, effectively mapping the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_parliament_lookup_by_columnResolve A Hansard Column CitationARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have an OSCOLA-style Hansard citation (column + volume + house) and need the debate.
Example input: 'HL Deb 14 Oct 2025, vol 849, col 200'. AFTER calling, read the contribution at the cited column via read_resource(uri="hansard://debate/{debate_ext_id}/header") — or, equivalently, call parliament_get_debate_contributions(debate_ext_id) for the full list as a structured tool response.
Each match carries:
contribution_count— real contribution count from the debate's Itemssource/source_code— citation finality (1=Rolling, 2=Daily, 3=BoundVolume, 4=Historic). Resolution is NOT gated on publication state.
Empty matches typically means the volume_number is wrong (opposing
counsel sometimes cites running-volume rather than bound-volume) or the
column is in a Written Statement (use the 'W'-suffixed column as-is).
It does NOT mean the citation is fabricated — surface the failure.
Authoritative source for OSCOLA Hansard column resolution.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Restrict to one House. Default 'both' searches across both Houses. | both |
| column_number | Yes | Hansard column number from an OSCOLA footnote, e.g. '200' for 'HL Deb 14 Oct 2025, vol 849, col 200'. String (not integer) to accommodate column suffixes like '1162W' for written answers. | |
| volume_number | Yes | Hansard volume number (the 'vol 849' part of an OSCOLA citation). Required — the endpoint only resolves citations when given the volume; sitting date is NOT a substitute (verified live 2026-05-29). |
Output Schema
| Name | Required | Description |
|---|---|---|
| house | Yes | House filter applied. |
| matches | No | Debate sections containing the cited column, in upstream relevance order. Each element's `debate_ext_id` chains to hansard://debate/{debate_ext_id}/header, and carries `source`/`source_code` for the citation's publication state. Resolution is NOT gated on publication state — Daily Part, Bound Volume, and Historic columns all resolve. Empty matches typically mean the volume number is wrong (running-volume vs bound-volume number), the column is a Written Answer/Statement needing its suffix (e.g. '1162W'), or a very recent column not yet indexed upstream. |
| column_number | Yes | Echo of the requested column number. |
| total_results | Yes | Number of debate matches found. |
| volume_number | Yes | Echo of the requested volume number. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavioral details beyond annotations: resolution is not gated on publication state, empty matches mean a likely incorrect volume or written statement (not fabrication), and the tool surfaces failures as instructed. This complements the readOnlyHint and idempotentHint by explaining edge-case behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the usage trigger, includes a concrete example, and is logically organized: usage, follow-up instructions, match fields, failure modes, and authoritative source. Every sentence contributes distinct value—no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having a rich schema and annotations, the description additionally covers output fields, next-step tool usage, interpretation of empty results, and the tool's authority. This makes the description complete and self-contained for an agent to invoke and act on the result reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three parameters thoroughly (100% coverage), so the baseline is 3. The description goes further by noting that column_number is a string to accommodate suffixes like 'W', and that volume_number was 'verified live 2026-05-29', plus explains how incorrect volume numbers cause empty matches. This adds interpretive value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: resolving OSCOLA Hansard column citations. It gives an explicit example input and distinguishes itself from sibling tools by directing the user to read_resource or parliament_get_debate_contributions as follow-up steps, making the tool's role very specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'USE THIS TOOL WHEN' and specifies the exact citation format required. It also explains when not to worry about empty matches (wrong volume or written statement) and suggests alternative actions, providing strong contextual guidance for tool selection and next steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_parliament_member_debatesGet Member DebatesARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a member_id and want contributions where THAT member used a specific topic phrase verbatim (text-body search).
CALL parliament_find_member(name) FIRST to obtain the integer member_id.
This is a name-based text-body search — it matches contributions whose TEXT contains the topic phrase. A member who spoke in a debate but didn't use your phrase verbatim is filtered out. For verbatim retrieval of every contribution by a member in a known debate (regardless of vocabulary), use parliament_get_debate_contributions(debate_ext_id, member_id=...) instead.
Each contribution's text field is capped at 3000 characters.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum contributions to return. Default 20. | |
| topic | No | Optional phrase to find in THIS member's contribution text bodies. Hansard searches the words the member actually said, NOT the topic or title of the debate. Pass tokens this member would have spoken — distinctive arguments ('disproportionate sanction'), statutory references ('section 21'), or motion numbers ('Motion C1') — not the bill's name (members rarely say e.g. 'Renters\' Rights Bill' verbatim in their speeches). If you want 'every contribution this member made in a specific debate' regardless of words used, find the debate_ext_id then use parliament_get_debate_contributions(debate_ext_id, member_id=...). | |
| offset | No | Number of contributions to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true. | |
| member_id | Yes | Parliament Members API integer ID. Obtain from parliament_find_member. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | Page size requested |
| topic | No | Topic phrase filter applied, if any |
| total | Yes | Number of contributions returned in this call |
| offset | No | Skip applied to this page |
| has_more | No | True if a full page was returned (more may exist) |
| member_id | Yes | Parliament Members API member ID |
| contributions | No | Hansard contributions for the member. Each `text` field is capped at 3000 characters. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, but the description adds valuable context: matches contributions whose TEXT contains the phrase, filters out speakers who didn't use the phrase, and caps text at 3000 characters. It also clarifies that topic searches the words actually spoken, not debate titles—beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a directive, then provides a prerequisite, matching semantics, an alternative, and a truncation note—each sentence earns its place. It is appropriately sized for a tool with nuanced search behavior and contains no repetition of schema details that are already obvious.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Combined with the rich schema (which covers pagination via offset/limit/has_more) and an output schema, the description covers the essential context: prerequisite lookup, text-search semantics, behavioral constraints, and when to use an alternative. Nothing critical is missing for an agent to correctly invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant semantic meaning to the 'topic' parameter with concrete examples ('disproportionate sanction', 'section 21', 'Motion C1') and a warning against using bill names. This is practical guidance that prevents misuse and goes well beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'USE THIS TOOL WHEN you have a member_id and want contributions where THAT member used a specific topic phrase verbatim (text-body search),' which is a specific verb+resource+scope statement. It distinguishes itself from sibling law_parliament_get_debate_contributions by contrasting the text-body search approach.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance says to call parliament_find_member FIRST, and provides clear exclusions: '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.' This tells both when and when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_parliament_member_interestsGet Member Financial InterestsARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a member_id and need their registered financial interests (donations, directorships, land, gifts).
CALL parliament_find_member(name) FIRST to obtain the integer member_id.
Returns ONE PAGE of interests (default 20, caller controls via limit). For prolific members (big donors, many directorships, extensive land holdings), re-call with offset=offset+returned while has_more is true to paginate. Description text is capped per max_description_chars; raise it for forensic provenance work that needs the full narrative.
This is the authoritative source for UK MP and peer financial-interest declarations (via the Members API). Web search returns stale snapshots.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max interests per call. Hard-capped at 20 by the upstream interests-api.parliament.uk (verified live 2026-05-29: Take=100 still returns 20). For prolific members, paginate via offset; total size is in totalResults on the response. | |
| offset | No | Number of interests to skip before this page. Default 0 for the first page. To paginate prolific members (100+ interests), re-call with offset=offset+returned while the previous response had has_more=true. | |
| category | No | Filter by interest category. Common categories: 'donations' (donations and support), 'gifts_uk' (gifts/hospitality from UK), 'employment' (employment and earnings), 'land' (land and property), 'shareholdings', 'overseas_visits'. Omit for all categories. | |
| member_id | Yes | Parliament Members API integer ID. Get from parliament_find_member. | |
| max_description_chars | No | Per-entry cap on the free-text description field. Default 500 prevents context blow-up on members with lengthy donation or directorship narratives. Raise to 2000+ only for forensic provenance work. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | Yes | Max interests requested for this page |
| offset | Yes | Number of interests skipped before this page |
| category | No | Category filter applied to this query, or None for all categories |
| has_more | Yes | True if there may be more interests beyond this page. Re-call with offset=offset+returned to fetch the next page. |
| returned | Yes | Number of interests actually returned in this call |
| interests | No | The interests in this page. `description` text is capped per the max_description_chars input parameter. |
| member_id | Yes | Parliament Members API member ID |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds substantial beyond annotations: pagination semantics (one page, default 20, offset pattern), hard-capped limit of 20, per-entry description truncation, and the fact that web search returns stale snapshots. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the use-case trigger, then prerequisite, then pagination, then authority note. Every sentence earns its place; it is detailed yet tightly written with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the main flow (member_id from find_member), pagination for large result sets, parameter limits, description truncation trade-off, and the authoritative source. Given the tool's complexity (5 params, pagination, large result sets), this description is fully adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters with clear meanings (member_id, limit, offset, category, max_description_chars). The description adds pragmatic context on how to use these parameters together, especially the pagination loop and when to raise the character cap. This exceeds the baseline of 3 but does not reinvent the wheel.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'USE THIS TOOL WHEN you have a member_id and need their registered financial interests' – a specific verb+resource+condition. It clearly distinguishes from web search by declaring itself the authoritative API source for MP/peer financial-interest declarations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call parliament_find_member(name) first to obtain the member_id. Provides detailed pagination guidance for prolific members (re-call with offset while has_more is true) and advises raising max_description_chars for forensic work. No ambiguity about when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_parliament_policy_position_summaryHansard Policy Position Summary (deterministic facets)ARead-onlyIdempotentInspect
USE THIS TOOL WHEN you want debate-level corpus signals on a topic — by_house, by_year, by_section breakdowns — without reading every contribution.
Aggregates Hansard debate-level signals on a topic. Pure counts — no LLM, no editorial labels. Sweeps /search/Debates.json with pagination (up to max_debates_scanned), then aggregates by_house, by_section, by_year, by_month, and top_debates from debate metadata. Also captures the corpus-wide envelope counts (total_contributions, total_written_statements, total_divisions, etc.) from /search.json for cross-section scope.
AFTER calling, pick a debate from top_debates and pass its debate_ext_id into parliament_get_debate_contributions to drill into who said what.
Note on member-level facets: Hansard's search API exposes debate metadata, not per-contribution member identifiers, at the corpus level. by_party and top_contributors are therefore omitted from this deterministic summary. To see who spoke in a specific debate, read hansard://debate/{debate_ext_id}/header for an ordered contribution index, or call parliament_member_debates for one named member.
This is the authoritative source for UK Hansard corpus-level signals.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Restrict to one House. Default 'both'. | both |
| topic | Yes | Phrase to find in Hansard contribution text bodies for the facet aggregation. Same semantics as parliament_search_hansard.query: tokens that appear in members' actual speeches, not bill titles or topic metadata. The aggregator sweeps top_debates[] returned by /search/Debates.json — those debates are matched on the phrase appearing in titles or contribution text, so passing a Bill title (e.g. 'Renters\' Rights Bill') usually works for THIS tool even though it wouldn't for member-level text search, because debate-level matching uses metadata in addition to body text. | |
| to_date | No | End date (YYYY-MM-DD) | |
| from_date | No | Start date (YYYY-MM-DD) | |
| max_debates_scanned | No | Hard cap on debates sampled from /search/Debates.json to compute facets. Default 200 issues ≤4 upstream calls (take=50 each). Raise to 2000 (≤40 calls) for an exhaustive sweep on a heavily-debated topic. Hansard rate limit: 1000 req/5min. |
Output Schema
| Name | Required | Description |
|---|---|---|
| house | Yes | House filter applied |
| topic | Yes | Phrase searched in Hansard |
| by_year | No | Counts of debates by sitting year, desc by year |
| to_date | No | End date filter applied |
| by_house | No | Counts of debates by house (Commons vs Lords) |
| by_party | No | Counts by party. ALWAYS EMPTY in this summary — Hansard's search API only exposes member identifiers at the per-debate level, not the corpus level. For party breakdown within one debate, read hansard://debate/{ext_id}/header. For one member's contributions across the corpus, use parliament_member_debates. |
| from_date | No | Start date filter applied |
| by_section | No | Counts of debates by Hansard section bucket (Chamber / Westminster Hall / Written Answers / Written Statements) |
| top_debates | No | Top 20 debates ranked by upstream relevance_rank, with debate_ext_id for hansard://debate/{debate_ext_id}/header drill-down. contribution_count is null in this preview shape (would require a secondary call per debate). |
| total_debates | Yes | Total distinct debates touching this topic (TotalDebates) |
| debates_scanned | Yes | Number of debates pulled from /search/Debates.json for the facet breakdown (≤ max_debates_scanned) |
| total_divisions | Yes | TotalDivisions upstream count. Non-zero → consider votes_search_divisions. |
| top_contributors | No | ALWAYS EMPTY in this summary — see by_party note. Use parliament_member_debates after picking a debate from top_debates. |
| by_month_recent_12 | No | Counts of debates by YYYY-MM for the most recent 12 months in the sample, desc by month |
| total_contributions | Yes | Total contributions in Hansard matching topic+filters (TotalContributions) |
| total_written_answers | Yes | TotalWrittenAnswers upstream count |
| total_written_statements | Yes | TotalWrittenStatements upstream count |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and the description adds valuable context: 'Pure counts — no LLM, no editorial labels' and the deterministic nature. It also transparently discloses API limitations (no per-contribution member identifiers, by_party/top_contributors omitted) and why, going beyond annotation-provided information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the use case, then systematically covers aggregation mechanics, post-processing workflow, limitations, and authority. Though length is above average, every sentence adds value—no fluff or repetition. The structure with clear sections (USE, AFTER, Note) makes it easy to parse despite its density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex aggregation tool with 5 parameters and an output schema, the description fully covers expected return facets (by_house, by_section, by_year, by_month, top_debates, envelope counts), explains how to chain with sibling tools, and addresses edge cases around topic matching and member-level facets. It effectively bridges the tool's position within the sibling ecosystem.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds substantial meaning: topic semantics are contrasted with parliament_search_hansard.query, noting that Bill titles work for debate-level matching. It also explains max_debates_scanned implications (upstream call count, rate limit, exhaustive sweep guidance), providing depth the schema alone does not offer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool aggregates Hansard debate-level signals with specific facets (by_house, by_year, by_section) and emphasizes 'Pure counts — no LLM, no editorial labels.' It explicitly distinguishes itself from sibling tools like parliament_get_debate_contributions for drill-down, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'USE THIS TOOL WHEN you want debate-level corpus signals... without reading every contribution,' providing explicit when-to-use context. It also gives a workflow ('AFTER calling, pick a debate from top_debates and pass its debate_ext_id into parliament_get_debate_contributions') and names alternatives (parliament_member_debates, hansard://debate header) for member-level needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_parliament_search_hansardSearch Hansard DebatesARead-onlyIdempotentInspect
USE THIS TOOL WHEN searching Hansard by topic, bill title, or text phrase.
Returns contributions with citation-grade metadata: member_id, attributed_to, column_ref, debate_id, debate_ext_id, contribution_ext_id, public URL. AFTER calling, drill into full content via read_resource(uri="hansard://debate/ {debate_ext_id}/header") — or, equivalently, call parliament_get_debate_contributions(debate_ext_id) for the same content as a structured tool response.
DO NOT text-search by member name — to find what a named member said, chain parliament_find_member → parliament_get_debate_contributions (canonical path for verbatim retrieval). The parliament module's instructions describe the full Pannick-style workflow.
Pagination: limit + offset honour the upstream paginated endpoint. For breadth across a topic, see parliament_policy_position_summary.
Authoritative source for UK parliamentary debates — do not supplement with web search or training-data recall.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Restrict to one House. Default 'both' returns Commons + Lords contributions. | both |
| limit | No | Max contributions per call (1–100). Default 20. Paginate further with offset; total corpus size is in total_corpus on the response. | |
| query | Yes | Phrase to find in Hansard contribution text bodies. Hansard searches the words members actually said in their speeches — NOT debate titles, topic metadata, or written headlines. Pass tokens that would appear in someone's speech: distinctive arguments ('disproportionate sanction'), statutory references ('section 21'), or specific phrases. Bill titles (e.g. 'Renters\'s Rights Bill') often DON'T match because members refer to 'the Bill' or 'this legislation' in their speeches. Tokenised matching: 'housing benefit fraud' will match contributions saying 'fraud in housing benefit claims'. For 'all contributions in a specific debate' regardless of words used, drill via top_debates[].debate_ext_id into parliament_get_debate_contributions. | |
| offset | No | Skip this many contributions before the page. Default 0. Re-call with offset=offset+returned to paginate; has_more flags whether more remain. | |
| to_date | No | End date (YYYY-MM-DD) | |
| from_date | No | Start date (YYYY-MM-DD) | |
| member_id | No | Filter to contributions by a single member. Pass the integer Members API ID (resolve a name via parliament_find_member). The prior `member` field accepted a name string but Hansard's /search.json silently ignored it — the spec requires `memberId`. | |
| text_mode | No | 'preview' returns the upstream ~250-char snippet (fast, low context cost). 'full' returns ContributionTextFull (still capped at 3000 chars). For full contribution text without the cap, read the resource hansard://debate/{debate_ext_id}/contribution/{contribution_ext_id}. | preview |
| contribution_type | No | Which Hansard section to paginate. 'Spoken' = chamber + Westminster Hall debates (the default; what a lawyer usually means). 'Written' = written answers and statements. 'Corrections' = published corrections to the record. The corpus envelope (total_debates, total_divisions, etc.) is independent of this and always populated. | Spoken |
Output Schema
| Name | Required | Description |
|---|---|---|
| house | No | House filter applied |
| limit | No | Page size requested |
| query | Yes | The phrase that was searched in Hansard |
| total | Yes | Number of contributions returned in this call |
| offset | No | Skip applied to this page (Hansard API: skip) |
| to_date | No | End date filter applied, if any |
| has_more | No | True if a full page was returned (more may exist; re-call with offset=offset+limit) |
| from_date | No | Start date filter applied, if any |
| member_id | No | Members API integer ID filter applied, if any (echoed from input). |
| text_mode | No | Whether contribution `text` carries the upstream preview or full body (still capped). |
| date_range | No | (min, max) SittingDate of returned contributions, or None if empty |
| top_debates | No | Top-ranked debates touching this topic (from upstream Debates[] preview, capped at 4 by Hansard's /search.json). Each entry's `debate_ext_id` chains to hansard://debate/{debate_ext_id}/header. |
| total_corpus | No | Total contributions in Hansard matching this query (TotalContributions). Use to decide whether to paginate further or escalate to parliament_policy_position_summary. |
| contributions | No | Matching Hansard contributions with full citation metadata. |
| top_divisions | No | Top-ranked divisions touching this topic (from upstream Divisions[] preview, capped at 4). Each entry's `id` chains to votes_get_division; `debate_section_ext_id` chains back to the parent debate. |
| total_debates | No | TotalDebates — distinct debates touching this topic. |
| total_members | No | TotalMembers — member-name matches in the corpus. |
| house_breakdown | No | Counts by house across the returned page |
| party_breakdown | No | Counts by party across the returned page |
| total_divisions | No | TotalDivisions. Non-zero → consider `top_divisions` previews below or chain to votes_search_divisions. |
| total_petitions | No | TotalPetitions. |
| total_committees | No | TotalCommittees. |
| total_corrections | No | TotalCorrections — published corrections to the Hansard record. |
| total_written_answers | No | TotalWrittenAnswers. |
| total_written_statements | No | TotalWrittenStatements. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already indicating read-only, idempotent, and non-destructive behavior, the description adds substantial behavioral detail: tokenised matching based on speech text (not titles), bill titles often failing to match, upstream pagination behavior, the member_id parameter replacing a silently ignored name field, and drill-down paths to read_resource or parliament_get_debate_contributions. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear labels (USE THIS TOOL WHEN, AFTER calling, DO NOT, Pagination) and every sentence earns its place. It is longer but appropriately so given the complexity of the tool and the need to convey usage nuances, follow-up actions, and exclusions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, an output schema, and rich annotations, the description is complete. It covers when to use, when not to use, how to chain with other tools, pagination details, and post-call drill-down options. The output schema and description together provide sufficient context for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, so the baseline is 3. The main description adds no new parameter semantics beyond the schema; it merely reinforces pagination behavior and suggests an alternative tool for topic breadth. The schema itself provides rich context for query, member_id, text_mode, and contribution_type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Hansard by topic, bill title, or text phrase and returns contributions with citation-grade metadata. It distinguishes itself from sibling tools like parliament_get_debate_contributions and parliament_policy_position_summary, and explicitly warns against using it for member-name searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'USE THIS TOOL WHEN' and provides explicit DO NOT guidance for member-name searches, pointing to a canonical alternative chain (parliament_find_member → parliament_get_debate_contributions). It also directs to parliament_policy_position_summary for breadth and advises against supplementing with web search or training-data recall.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_parliament_search_petitionsSearch UK Parliament PetitionsARead-onlyIdempotentInspect
USE THIS TOOL WHEN searching UK Parliament petitions by keyword or topic.
Returns petition title, state, signature count, and dates for government response or parliamentary debate if applicable. Filter by state (open, closed, debated, etc.) to narrow to live or historical petitions.
This is the authoritative source for UK Parliament petitions (petition.parliament.uk).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum petitions to return. Default 20. | |
| query | Yes | Search term for petition titles, e.g. 'ban trophy hunting' or 'NHS funding'. | |
| state | No | Filter by petition state. | all |
| offset | No | Number of petitions to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | Page size requested |
| query | Yes | The term that was searched in petitions |
| state | Yes | Petition state filter applied to this query |
| total | Yes | Number of petitions returned in this call |
| offset | No | Skip applied to this page |
| has_more | No | True if a full page was returned (more may exist) |
| petitions | No | Matching petitions (title, state, signature count, key dates, URL). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. However, the description falsely claims users can filter by 'open, closed, debated, etc.' while the input schema only allows 'open', 'closed', and 'all'. This is a misleading behavioral disclosure that could cause invalid calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with every sentence serving a purpose: usage trigger, return fields, filtering guidance, and authoritative source. Despite the state inaccuracy, the structure is efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema and comprehensive annotations, so the description does not need to explain returns or safety. However, the misleading 'debated' filter option creates a gap in completeness, as the agent cannot reliably know the valid state values without cross-referencing the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description actively misleads on the 'state' parameter by suggesting 'debated' is a valid filter value, which contradicts the enum definition. It adds no other meaningful semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'searching UK Parliament petitions by keyword or topic.' It clearly distinguishes itself from sibling tools like law_parliament_search_hansard and law_bills_search_bills by focusing exclusively on petitions and naming the authoritative source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'USE THIS TOOL WHEN searching UK Parliament petitions,' providing explicit use context. It does not explicitly name alternatives or exclusions, but the scope is narrow and clear, making it obvious when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_read_resourceARead-onlyIdempotentInspect
Read a resource by its URI.
For static resources, provide the exact URI. For templated resources, provide the URI with template parameters filled in.
Returns the resource content as a string. Binary content is base64-encoded.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | The URI of the resource to read |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful behavioral details beyond annotations: it returns content as a string, and binary content is base64-encoded. This explains the response format for a read operation. It does not mention authentication, rate limits, or error behavior, but with annotations present, the bar is lower and the added context is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, each earning its place. It front-loads the core purpose ('Read a resource by its URI'), then adds needed detail about URI formats and the return format. No filler or redundant repetition with schema or annotations. This is an appropriately sized and well-structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no nested objects) and the existence of an output schema, the description covers everything essential: what the tool does, how to provide the URI for both static and templated resources, and the return format including binary handling. The annotations handle safety and idempotency. No critical gaps remain, making this complete for its context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameter description ('The URI of the resource to read'), so the baseline is 3. The description goes beyond the schema by explaining the distinction between static and templated resources, clarifying how to supply the URI in each case. This adds meaningful semantic context that the schema alone does not provide, justifying a score of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read a resource by its URI,' using a specific verb and resource. It explains static vs templated resources, adding clarity about the tool's scope. However, it does not explicitly differentiate from sibling tools like law_legislation_get_section or law_judgment_get_paragraph, so it misses the 'distinguishes from siblings' criterion for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on how to use the tool: 'For static resources, provide the exact URI. For templated resources, provide the URI with template parameters filled in.' This gives practical guidance but does not state when to use this tool versus alternatives (e.g., when you have a URI from law_list_resources), nor does it mention exclusions. It implies usage a generic resource reader but lacks explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_votes_get_divisionGet Division DetailARead-onlyIdempotentInspect
USE THIS TOOL WHEN you have a division_id + house and want the full member-by-member voting record.
Voter lists are truncated to 100 per side to fit response limits; total voter counts are always accurate regardless of truncation. Chain from votes_search_divisions or parliament_get_debate_divisions (which cross-resolves Hansard division refs into votes-API division_ids).
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Which house this division belongs to. | Commons |
| division_id | Yes | Division ID from votes_search_divisions results. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Division ID |
| date | Yes | Date of the division |
| house | Yes | Commons or Lords |
| title | Yes | Division title / motion text |
| passed | Yes | Whether the motion passed |
| truncated | No | Whether voter lists were truncated to fit response limits |
| aye_voters | No | Members who voted Aye (may be truncated) |
| ayes_count | Yes | Total Aye votes |
| noe_voters | No | Members who voted No (may be truncated) |
| noes_count | Yes | Total No votes |
| total_aye_voters | No | Total number of Aye voters before truncation |
| total_noe_voters | No | Total number of No voters before truncation |
| is_government_win | No | Whether the government won (Lords only) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses an important behavioral trait beyond the annotations: voter lists are truncated to 100 per side but total voter counts remain accurate. This is critical context for interpreting results and goes beyond what the annotations (readOnlyHint, openWorldHint, etc.) already convey. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with a clear directive. It uses only three sentences, each earning its place: the usage trigger, the truncation caveat, and the chaining context. No wasted words or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, complete schema descriptions, and presence of an output schema, the description covers all necessary contextual needs. It explains truncation behavior, emphasizes accuracy of counts, and provides chaining sources, making it fully 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (division_id source and house enum). The description adds little new semantic meaning; it merely reaffirms the inputs and points to chaining sources, which the schema already mentions for division_id. The baseline of 3 for high schema coverage is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving the full member-by-member voting record for a given division. It specifies the required inputs (division_id + house) and distinguishes it from sibling tools like law_votes_search_divisions and law_parliament_get_debate_divisions by focusing on the detail retrieval rather than search or cross-resolution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly begins with 'USE THIS TOOL WHEN you have a division_id + house' and provides clear chaining guidance from related tools (votes_search_divisions or parliament_get_debate_divisions). This tells the agent exactly when to invoke this tool and where to obtain the necessary IDs, which is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_votes_search_divisionsSearch Parliamentary DivisionsARead-onlyIdempotentInspect
USE THIS TOOL WHEN searching Commons or Lords formal votes by topic, date, or member.
Returns division summaries (title, date, vote counts, pass/fail). AFTER calling, pass division_id + house into votes_get_division for the full member-by-member voter lists.
Authoritative source for UK parliamentary vote records.
| Name | Required | Description | Default |
|---|---|---|---|
| house | No | Which house to search. | Commons |
| limit | No | Maximum divisions to return. Default 25 (Commons API max-per-page). | |
| query | No | Search term for division titles, e.g. 'Rwanda' or 'Online Safety Bill'. Omit to browse recent divisions. | |
| offset | No | Number of divisions to skip before this page. Default 0. Re-call with offset=offset+returned while has_more is true. | |
| to_date | No | End date (YYYY-MM-DD). | |
| from_date | No | Start date (YYYY-MM-DD). | |
| member_id | No | Filter to divisions where this member voted. Get the member ID from parliament_find_member. |
Output Schema
| Name | Required | Description |
|---|---|---|
| house | Yes | Commons or Lords |
| limit | No | Page size requested |
| query | No | The search term, if any (None = browse recent) |
| total | Yes | Number of divisions returned in this call |
| offset | No | Skip applied to this page |
| has_more | No | True if a full page was returned (more may exist) |
| divisions | No | Matching divisions. Use the integer `id` field with votes_get_division to fetch the full voter list. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds value by disclosing the scope of results (summaries only, not full voter lists) and the authoritative nature of the source ('Authoritative source for UK parliamentary vote records'). This helps the agent set expectations and avoid assuming full detail is present. The description does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only three sentences, each with a distinct job: directive, output summary, and follow-up instruction. It front-loads the trigger condition with an all-caps 'USE THIS TOOL WHEN' and wastes no words. The structure is ideal for an agent scanning quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema, annotations, and output schema, the description covers the essential extra context: what the tool returns, the workflow to get full details, and the authoritative status. The optional browse behavior (omitting query) is already in the schema. No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with each parameter explained meaningfully (e.g., limit mentions 'Commons API max-per-page', offset explains pagination with 'has_more', member_id directs to parliament_find_member). The tool description itself only restates the search dimensions (topic, date, member) which are already evident from the schema. Per the baseline for high schema coverage, this is a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource combination: 'searching Commons or Lords formal votes by topic, date, or member.' It clearly distinguishes itself from the sibling tool votes_get_division by explaining that it returns division summaries while the full voter lists require a subsequent call to that tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It opens with 'USE THIS TOOL WHEN searching Commons or Lords formal votes by topic, date, or member,' giving explicit conditions. It also tells the agent exactly what to do next: 'AFTER calling, pass division_id + house into votes_get_division for the full member-by-member voter lists,' effectively setting boundaries and directing to an alternative. No exclusions are needed beyond this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_company_searchBRead-onlyInspect
Search Companies House for a company by name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation, and the description's 'Search' action is consistent. However, the description adds no additional behavioral context (e.g., result limits, matching behavior, or required authorities) beyond the annotation, so it meets the baseline but does not go further.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that directly states the tool's core function. Every word earns its place, and it is front-loaded with the verb and resource. It is appropriately concise for a simple search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single parameter, a read-only annotation, and an output schema present, the description is adequate for a basic search tool. However, it lacks any mention of limitations, regional scope, or differentiation from sibling tools, making it incomplete for agents choosing among many similar search tools in the larger context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no description coverage for the 'name' parameter. The description only says 'by name,' which maps the parameter to a company name but does not specify exact vs. fuzzy matching, required format, or whether it is the registered name or trading name. This minimal compensation is insufficient given the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search'), resource ('Companies House'), and object ('company by name'). However, it does not distinguish between this tool and the sibling dd_company_search, which likely performs a similar search, so it misses the sibling differentiation required for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as dd_company_search, dd_company_profile, or other Company House tools. It does not mention exclusions, alternatives, or specific contexts, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_epc_certificateARead-onlyInspect
Fetch a single EPC certificate by its lmk_key (certificate hash).
Use after property_epc_search has identified the correct cert — this is faster than property_epc(postcode, address) as it makes a direct lookup with no fuzzy matching or postcode re-fetch.
lmk_key is returned in every property_epc_search result.
Returns the full EPC certificate or None if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| lmk_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare readOnlyHint=true, the description adds valuable context: the tool returns the full certificate or None if not found, and performs a direct lookup. These are meaningful behavioral details beyond the annotation, with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: purpose first, then usage guidance, then return behavior. Every sentence adds necessary information with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool, the description covers purpose, usage, prerequisites, and return behavior. The presence of an output schema further fills any remaining gaps, making the tool fully understandable without additional detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no description for lmk_key (0% coverage), but the description fully compensates by explaining it as a certificate hash and noting that it is returned in every property_epc_search result. This completely clarifies the parameter's meaning and origin.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('EPC certificate by its lmk_key'), clearly distinguishing this from the sibling search and postcode-based tools. The purpose is immediately obvious and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('Use after property_epc_search has identified the correct cert'), contrasts it with an alternative (property_epc(postcode, address)), and explains the advantage (faster, no fuzzy matching). This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_planning_searchARead-onlyInspect
Find the council planning portal URL for a postcode.
| Name | Required | Description | Default |
|---|---|---|---|
| postcode | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares this is a safe read operation. The description adds that it returns a URL, but no deeper behavior (e.g., whether it returns multiple results, if the postcode must be formatted a certain way). Given the annotation, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no redundancy. It conveys the essential action and input with maximum efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one required parameter, read-only, output schema present). The description fully covers what the tool does and the input needed. With an output schema, no return-value details are necessary. It is complete for the given complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so the description must clarify the parameter. It does state 'for a postcode', which tells the agent the parameter is a postcode string. However, it does not specify expected format (e.g., with/without space, case) or any validation rules, leaving some gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Find') and resource ('council planning portal URL') with a clear parameter ('for a postcode'). It distinguishes from siblings like prop_epc_certificate or prop_ppd_transactions by specifying the exact output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use: whenever a council planning portal URL is needed for a postcode. It provides context but does not explicitly mention alternatives or exclusions, yet the purpose is narrow enough that no ambiguity exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_ppd_transactionsBRead-onlyInspect
Raw Land Registry Price Paid transactions for a postcode.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| postcode | Yes | ||
| property_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation covers the safety profile, and the description is consistent with it. However, the description adds minimal behavioral context beyond the annotation—it doesn't mention data volume, ordering, pagination, or what 'raw' implies. It doesn't contradict the annotation, but it offers little extra transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler. It front-loads the core information (data source and filter) and is maximally concise. No unnecessary words or redundant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although the tool has an output schema and readOnlyHint annotation which help, the description fails to explain the optional parameters (especially property_type) and gives no usage context. Given the many similar property tools, the description is insufficient for an agent to confidently select and call this tool without additional assumptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify parameter meanings. It only mentions the postcode filter, leaving 'limit' and especially 'property_type' unexplained. property_type lacks an enum or description of allowed values, making correct invocation uncertain for an AI agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning Raw Land Registry Price Paid transactions filtered by postcode. It names the specific dataset and scope, which helps distinguish it from siblings like prop_rightmove_search. However, it lacks an explicit verb like 'retrieves' or 'lists', but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternative property tools (e.g., prop_property_blocks, prop_rental_analysis). There are no exclusions, prerequisites, or mention of suitable scenarios, leaving the agent to infer usage from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_property_blocksBRead-onlyInspect
Property block analysis — identify buildings with multiple flat sales (block-buy opportunities).
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | ||
| postcode | Yes | ||
| search_level | No | sector |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already establishes the safe read-only nature, so the description does not need to repeat that. However, the description adds no behavioral details beyond the core purpose—no mention of data sources, how 'multiple flat sales' is determined, or that the months parameter controls the lookback period. It is minimally informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the tool's purpose. Every word contributes meaning, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, but the description is incomplete because it does not explain the input parameters, especially the required postcode. Without parameter semantics, the agent cannot reliably invoke the tool. The description provides no guidance on expected inputs or how to interpret results beyond the vague 'block-buy opportunities'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the three parameters (postcode, months, search_level). An agent has no guidance on what 'postcode' refers to, what 'months' controls, or what 'search_level' means. The description fails to compensate for the lack of schema parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('identify') and a clear resource ('buildings with multiple flat sales'), with an explicit use case ('block-buy opportunities'). This distinguishes it from sibling tools by focusing on block-buy analysis rather than general property searches or comparisons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for identifying block-buy opportunities, but it does not explicitly state when to use this tool versus alternatives like prop_property_comps or prop_property_yield. There are no exclusion criteria or alternative tool names mentioned, so guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_property_compsARead-onlyInspect
Comparable sales from Land Registry Price Paid Data.
Defaults return the standard residential set:
property_type=None means residential (F+D+S+T). Pass "F"/"D"/"S"/"T"/"O" for a single type, or "ALL" to disable type filtering (firehose).
transaction_category defaults to "A" (standard sales). Pass None to include category-B (bulk transfers, non-standard conveyances).
filter_outliers=False by default; set True for IQR-trimmed stats AND transaction list (1.5*IQR rule, needs >=4 prices).
limit caps returned transactions (max 200). enrich_epc attaches EPC floor area and price-per-sqft to each transaction — slower but richer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| months | No | ||
| address | No | ||
| postcode | Yes | ||
| enrich_epc | No | ||
| search_level | No | sector | |
| property_type | No | ||
| filter_outliers | No | ||
| transaction_category | No | A |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses IQR filtering behavior ('1.5*IQR rule, needs >=4 prices'), the max limit of 200 transactions, and the slower/richer trade-off of enrich_epc.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points, no redundant sentences, and front-loads the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides sufficient context for a 9-parameter tool with output schema, covering defaults, key parameter semantics, and performance trade-offs. It omits a few parameter explanations (months, search_level) but overall enables correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given 0% schema coverage, the description adds essential semantics for property_type (codes F/D/S/T/O/ALL), transaction_category (A vs B), filter_outliers (IQR rule), limit (max 200), and enrich_epc. It does not explain months, address, or search_level, but these are either self-evident or less critical.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Comparable sales from Land Registry Price Paid Data.' and details default behaviors, distinguishing it from sibling tools like prop_ppd_transactions by focusing on the comparable sales use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear defaults ('Defaults return the standard residential set') and explains how to modify property_type, transaction_category, filter_outliers, limit, and enrich_epc. However, it does not explicitly name alternative tools or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_property_epcARead-onlyInspect
Energy Performance Certificate data for a UK property or postcode area.
With address: returns the matched EPC certificate for that specific property. Without address: returns an aggregated summary of every certificate at the postcode — count, rating distribution, property-type breakdown, floor-area range — plus a hint to call again with an address for single-property detail.
Returns None if no certificates exist for the postcode at all.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | ||
| postcode | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, so the description's job is lighter. It still adds value by specifying the two return shapes, the aggregated fields (count, rating distribution, property-type breakdown, floor-area range), and the None case. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with purpose, then uses short labeled paragraphs for the two modes and the edge case. Every sentence conveys necessary behavior without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers both modes and the no-certificate edge case, and an output schema exists to define the return structure. It leaves a minor ambiguity about what happens if an address is supplied but no exact match is found within an existing postcode, but overall it is sufficient for selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the parameters. It does clarify that postcode is the primary lookup and address is optional, and that providing an address switches the result from an aggregate to a single certificate. It doesn't specify address format, but the mode-based semantics are helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear statement that this tool provides Energy Performance Certificate data for a UK property or postcode area, and then details two distinct modes (with/without address). This specific resource and scope distinguishes it from sibling tools like prop_epc_certificate or prop_property_epc_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains exactly when to include an address versus omit it, and says to call again with an address for single-property detail. It does not name alternative sibling tools or explicitly state when not to use this tool, but the conditional guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_property_epc_searchARead-onlyInspect
Browse all EPC certificates at a postcode — use when you have no house number.
Returns a slim list of every certificate at the postcode. Each entry contains: address, rating, score, floor_area (sqm), property_type, floor_level, habitable_rooms, inspection_date, lmk_key.
Workflow for Rightmove listings where the house number is not shown:
Call rightmove_listing to obtain floor_area_sqm, property_type, and any floor-level signals in the description (e.g. "top floor", "ground floor").
Call property_epc_search(postcode) to retrieve the full cert list.
You MUST cross-reference each cert's floor_area against the listing's floor_area_sqm (accept within ±5 sqm) AND property_type must match. Also use floor_level and habitable_rooms where available.
If a single cert matches, call epc_certificate(lmk_key) for the full detail.
If multiple certs match equally, present all candidates — do not guess. If floor_area is unavailable on the listing, filter by property_type only and return all candidates.
Returns None if no certificates exist for the postcode.
| Name | Required | Description | Default |
|---|---|---|---|
| postcode | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses return behavior (slim list, None if no certificates), required matching logic, and the ethical constraint 'do not guess.' This gives the agent a complete picture of expected behavior and edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then organized into a clear workflow. Every section adds value, and the complexity of matching logic justifies the length. No filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description still goes beyond by detailing the return format (slim list with specific fields), handling of no results, and a complete decision procedure. This is fully sufficient for an agent to select and use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter `postcode` is clearly identified and used throughout the description (e.g., 'property_epc_search(postcode)'). Despite 0% schema coverage, the description compensates by explaining the parameter's role and context, making its purpose and format unambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Browse all EPC certificates at a postcode' and explicitly notes the use case 'when you have no house number.' This distinguishes it from sibling tools like prop_property_epc or epc_certificate, which handle individual properties or full certificate retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'use when you have no house number' and a detailed workflow with steps for cross-referencing Rightmove listings, matching criteria (±5 sqm, property type), and fallback instructions when multiple candidates match. Also indicates alternative tools (epc_certificate) for full detail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_property_yieldARead-onlyInspect
Gross rental yield for a UK postcode.
Combines Land Registry sale comps (median sale price) with Rightmove rental listings (median monthly rent) to produce a gross yield percentage.
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | PPD sale lookback period (default 24). | |
| postcode | Yes | UK postcode (e.g. "NG1 2NS"). | |
| search_level | No | PPD search granularity — "postcode", "sector" (default), or "district". | sector |
| auto_escalate | No | Widen the PPD search area on thin markets — postcode→ sector→district. Default True. Set False for strict-locality only. | |
| property_type | No | Filter sales by type. None (default) = residential set (F+D+S+T). Pass "F"/"D"/"S"/"T"/"O" for one type, "ALL" for firehose. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds meaningful context about data sources (Land Registry, Rightmove) and the calculation logic (median sale price vs median rent to derive gross yield). This goes beyond the annotation's simple safety indicator, though it omits potential edge-case behavior such as handling of thin markets or data availability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and immediately followed by a concise explanation of the data combination. Every sentence earns its place without any redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the schema fully documents all parameters and an output schema exists, the description covers the essential purpose and methodology. The tool's complexity is well handled by the combination of a clear description and rich structured metadata, leaving no critical information gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% descriptive coverage for all five parameters (postcode, months, search_level, auto_escalate, property_type). The description adds no additional parameter semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Gross rental yield for a UK postcode.' It also explains the unique methodology (combining Land Registry sale comps with Rightmove rental listings), which distinguishes it from sibling tools like prop_property_comps or prop_rental_analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you need gross yield for a UK postcode) but does not explicitly mention when to prefer this tool over alternatives or any exclusions. Sibling tools exist for related but distinct purposes, and no direct comparison or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_rental_analysisBRead-onlyInspect
Rental market analysis and achievable rent estimate.
auto_escalate widens the search area when fewer than 5 listings are found (thin market). Response includes thin_market, escalated_from, escalated_to fields when escalation occurs.
| Name | Required | Description | Default |
|---|---|---|---|
| radius | No | ||
| postcode | Yes | ||
| auto_escalate | No | ||
| purchase_price | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint already covering the safe read-only nature, the description adds meaningful behavioral context: it explains the auto_escalate mechanism (widening search when fewer than 5 listings) and discloses specific response fields (thin_market, escalated_from, escalated_to). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one line for purpose and two lines for escalation behavior. Every sentence provides value, with no redundant phrases, and the most important information (purpose) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 4 parameters and a potentially rich output, but the description only hints at the escalation fields. It fails to describe the main output structure, how purchase_price affects the estimate, or what the response contains when no escalation occurs. Despite an output schema existing, the description itself leaves major gaps for an agent to infer behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify parameters. It explains auto_escalate's effect but leaves radius and purchase_price unexplained, and postcode is only clear by name. The purpose of purchase_price is particularly ambiguous, and radius units are not specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides 'Rental market analysis and achievable rent estimate,' which distinguishes it from sibling property tools focused on sales, EPC, or transactions. However, 'analysis' is somewhat broad, lacking a specific list of metrics, so it doesn't fully define the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like prop_property_yield or prop_rightmove_search. The only usage context is the auto_escalate behavior, which describes internal behavior rather than selection criteria, leaving the agent without explicit decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_rightmove_listingARead-onlyInspect
Full detail for a single Rightmove listing (URL or numeric ID).
include_images fetches and embeds photos and floorplans as MCP image content. max_images caps the number of property photos (default 3); floorplans always included.
| Name | Required | Description | Default |
|---|---|---|---|
| max_images | No | ||
| include_images | No | ||
| property_url_or_id | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds behavior beyond that: include_images fetches and embeds photos/floorplans as MCP content, max_images caps property photos, and floorplans are always included. This provides useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loaded with the main purpose, and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool, the description covers the purpose and key parameters, but it does not describe the structure of the returned listing detail. This is acceptable given the lack of an output schema, yet a brief note on return content would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clearly explains include_images and max_images with defaults, but property_url_or_id is only described as 'URL or numeric ID' without examples or format details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Full detail for a single Rightmove listing (URL or numeric ID)', specifying the verb, resource, and scope. This distinguishes it from prop_rightmove_search, which focuses on finding listings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a specific listing is known, and the sibling tool prop_rightmove_search provides an implicit alternative, but no explicit when-to-use or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_rightmove_searchCRead-onlyInspect
Fetch Rightmove listings for a postcode.
listing_type: "sale" or "rent". sort_by: "newest", "most_reduced", "price_asc", "price_desc". Images are excluded from results.
| Name | Required | Description | Default |
|---|---|---|---|
| radius | No | ||
| sort_by | No | ||
| postcode | Yes | ||
| max_pages | No | ||
| max_price | No | ||
| listing_type | No | sale | |
| min_bedrooms | No | ||
| property_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds one behavioral detail: 'Images are excluded from results.' This is useful and consistent with the annotation, but no other behavioral traits (e.g., pagination, rate limits, default behavior) are disclosed. The bar is lower due to annotations, and the description adds some context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the main purpose. It wastes no words, but the inline parameter lists could be better structured. Overall, it is concise without unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with zero schema description coverage, the description only touches on 2 parameters and lacks detail on behavior like pagination (max_pages), radius, and filtering. It also fails to clarify the relationship with the sibling prop_rightmove_listing. An output schema exists, but the description itself is still incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains values for listing_type and sort_by, but the other 6 parameters (radius, max_pages, max_price, min_bedrooms, property_type) are not elaborated. The partial coverage is insufficient for a tool with 8 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the main purpose with a specific verb ('Fetch'), a resource ('Rightmove listings'), and a scope ('for a postcode'). However, it does not differentiate from the sibling tool prop_rightmove_listing, which likely serves a similar or related purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like prop_rightmove_listing. The description only lists parameter value options, not usage context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prop_stamp_dutyARead-onlyInspect
UK Stamp Duty Land Tax (SDLT) calculation with full breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| price | Yes | ||
| non_resident | No | ||
| first_time_buyer | No | ||
| additional_property | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds 'full breakdown' which hints at the output's detail level, but it does not disclose any edge cases, limitations, or specifics of the calculation beyond what the annotations provide. The description is not contradictory and offers minimal added 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence of nine words, with no wasted wording. It is front-loaded and efficiently communicates the tool's core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has four input parameters and a moderately complex calculation logic, but the description gives no context about the SDLT rules, thresholds, or how the boolean flags affect the result. Although an output schema exists, the description is too sparse to guide correct invocation without additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no parameter-specific guidance. While the parameter names (price, non_resident, first_time_buyer, additional_property) are somewhat self-explanatory, the description does not explain units (e.g., GBP), how booleans interact, or the effect of each flag. This fails to compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'UK Stamp Duty Land Tax (SDLT) calculation with full breakdown' clearly states the tool's verb ('calculation') and resource (UK Stamp Duty Land Tax). It distinguishes itself from sibling property tools by naming the specific tax calculation, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a UK stamp duty calculation is needed, but it provides no explicit guidance on when to use this tool versus alternatives or when not to use it. No sibling tool is mentioned, and there is no exclusions or prerequisite context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- AlicenseAqualityAmaintenanceGTM signal intelligence suite for AI agents. Six tools: hiring signals, tech stack detection, company-to-LinkedIn resolution, ICP scoring, job board scanning, and a combined signals aggregator. Built for outbound sales workflows.117371MIT

industrylens-mcpofficial
Flicense-qualityCmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
Sociality MCPofficial
Alicense-qualityDmaintenanceSocial media analytics, post insights, and competitor benchmarking for AI agents.6MIT- AlicenseAqualityAmaintenanceDetects hiring intent signals by scanning job boards for specific companies. Returns structured role data for outbound sales targeting.1761MIT