Skip to main content
Glama

Hansard Policy Position Summary (deterministic facets)

parliament_policy_position_summary
Read-onlyIdempotent

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
houseNoRestrict to one House. Default 'both'.both
topicYesPhrase to find in Hansard contribution text bodies for the facet aggregation. Same semantics as parliament_search_hansard.query: tokens that appear in members' actual speeches, not bill titles or topic metadata. The aggregator sweeps top_debates[] returned by /search/Debates.json — those debates are matched on the phrase appearing in titles or contribution text, so passing a Bill title (e.g. 'Renters\' Rights Bill') usually works for THIS tool even though it wouldn't for member-level text search, because debate-level matching uses metadata in addition to body text.
to_dateNoEnd date (YYYY-MM-DD)
from_dateNoStart date (YYYY-MM-DD)
max_debates_scannedNoHard cap on debates sampled from /search/Debates.json to compute facets. Default 200 issues ≤4 upstream calls (take=50 each). Raise to 2000 (≤40 calls) for an exhaustive sweep on a heavily-debated topic. Hansard rate limit: 1000 req/5min.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
houseYesHouse filter applied
topicYesPhrase searched in Hansard
by_yearNoCounts of debates by sitting year, desc by year
to_dateNoEnd date filter applied
by_houseNoCounts of debates by house (Commons vs Lords)
by_partyNoCounts by party. ALWAYS EMPTY in this summary — Hansard's search API only exposes member identifiers at the per-debate level, not the corpus level. For party breakdown within one debate, read hansard://debate/{ext_id}/header. For one member's contributions across the corpus, use parliament_member_debates.
from_dateNoStart date filter applied
by_sectionNoCounts of debates by Hansard section bucket (Chamber / Westminster Hall / Written Answers / Written Statements)
top_debatesNoTop 20 debates ranked by upstream relevance_rank, with debate_ext_id for hansard://debate/{debate_ext_id}/header drill-down. contribution_count is null in this preview shape (would require a secondary call per debate).
total_debatesYesTotal distinct debates touching this topic (TotalDebates)
debates_scannedYesNumber of debates pulled from /search/Debates.json for the facet breakdown (≤ max_debates_scanned)
total_divisionsYesTotalDivisions upstream count. Non-zero → consider votes_search_divisions.
top_contributorsNoALWAYS EMPTY in this summary — see by_party note. Use parliament_member_debates after picking a debate from top_debates.
by_month_recent_12NoCounts of debates by YYYY-MM for the most recent 12 months in the sample, desc by month
total_contributionsYesTotal contributions in Hansard matching topic+filters (TotalContributions)
total_written_answersYesTotalWrittenAnswers upstream count
total_written_statementsYesTotalWrittenStatements upstream count

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint), the description discloses pagination behavior ('Sweeps /search/Debates.json with pagination'), the API rate limit ('1000 req/5min'), and a key data limitation ('Hansard's search API exposes debate metadata, not per-contribution member identifiers'). It also explains why certain facets are omitted (by_party, top_contributors), providing valuable context for the agent.

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

Conciseness4/5

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

The description is relatively long but well-structured with a clear 'USE THIS TOOL WHEN' opener and separate paragraphs for behavior, follow-up, and limitations. Each section serves a distinct purpose, though the final sentence ('This is the authoritative source...') adds marginal value and could be considered redundant. Still, it is appropriately sized for the tool's complexity.

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

Completeness5/5

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

The description is exceptionally complete for a complex tool. It explains the input semantics, processing pipeline, output facets, data limitations, and how to proceed after calling. It also references related resources (hansard://debate/...) and alternative tools. With an output schema present, the description does not need to enumerate return fields, but it still gives a clear picture of what the tool returns.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds significant semantic nuance beyond the schema. It explains the `topic` parameter's relationship to parliament_search_hansard.query and clarifies why Bill titles work for this tool despite not working for text search, due to debate-level metadata matching. It also maps max_debates_scanned to upstream call counts and rate limits, enriching the schema.

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

Purpose5/5

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

The description opens with a clear directive ('USE THIS TOOL WHEN you want debate-level corpus signals on a topic') and specifies the exact aggregations ('by_house, by_year, by_section breakdowns'). It distinguishes itself from siblings by stating it provides 'Pure counts — no LLM, no editorial labels' and explicitly contrasts with tools like parliament_get_debate_contributions that drill into contributions.

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

Usage Guidelines5/5

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

The description explicitly says when to use this tool ('when you want debate-level corpus signals... without reading every contribution') and gives follow-up actions ('AFTER calling, pick a debate from top_debates and pass its debate_ext_id into parliament_get_debate_contributions'). It also names alternatives for member-level queries ('call parliament_member_debates' or read the debate header).

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.4/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose, with detailed descriptions that prevent ambiguity. Tools covering similar domains (e.g., multiple parliament search tools) are carefully differentiated by their search approach and input requirements.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (e.g., bills_get_bill, case_law_search, citations_resolve). Even generic tools adhere to this style. No mixing of conventions.

Tool Count4/5

With 35 tools, the count is on the higher side but appropriate for the wide-ranging domain of UK legal research. Each tool contributes to specific sub-domains (bills, case law, citations, committees, HMRC, legislation, parliament, votes) without unnecessary duplication.

Completeness5/5

The tool surface covers nearly all essential aspects of UK legal research: searching and retrieving bills, case law, and legislation; parsing and resolving citations; exploring committee evidence; accessing Hansard debates and member interests; and checking HMRC guidance and VAT rates. Gaps like full judgment text retrieval are mitigated by paragraph-level access and indexing.