Hansard Policy Position Summary (deterministic facets)
parliament_policy_position_summaryAggregate UK Hansard debate coverage on any policy topic. Get counts by house, year, month, and top debates, plus corpus-wide envelope totals, without reading every contribution.
Instructions
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
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes | PolicyPositionSummaryInput with topic, optional date range, house, max_debates_scanned. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Phrase searched in Hansard | |
| from_date | No | Start date filter applied | |
| to_date | No | End date filter applied | |
| house | Yes | House filter applied | |
| total_contributions | Yes | Total contributions in Hansard matching topic+filters (TotalContributions) | |
| total_debates | Yes | Total distinct debates touching this topic (TotalDebates) | |
| total_written_statements | Yes | TotalWrittenStatements upstream count | |
| total_written_answers | Yes | TotalWrittenAnswers upstream count | |
| total_divisions | Yes | TotalDivisions upstream count. Non-zero → consider votes_search_divisions. | |
| debates_scanned | Yes | Number of debates pulled from /search/Debates.json for the facet breakdown (≤ max_debates_scanned) | |
| 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. | |
| by_house | No | Counts of debates by house (Commons vs Lords) | |
| by_section | No | Counts of debates by Hansard section bucket (Chamber / Westminster Hall / Written Answers / Written Statements) | |
| by_year | No | Counts of debates by sitting year, desc by year | |
| by_month_recent_12 | No | Counts of debates by YYYY-MM for the most recent 12 months in the sample, desc by month | |
| top_contributors | No | ALWAYS EMPTY in this summary — see by_party note. Use parliament_member_debates after picking a debate from top_debates. | |
| 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). |