A Model Context Protocol server for UK Parliamentary data, providing access to Hansard records, parliamentary questions, committees, and member information
Parliament MCP Server demonstrates solid domain expertise with 15 well-organized parliamentary research tools. Naming is consistently verb-first and clear (search_*, get_*, list_*). However, there are notable gaps: parameter descriptions are sparse or generic in several tools, output schemas are not documented anywhere in the provided code, and error handling is minimal. The server implements a coherent tool composition strategy (search tools chain well with detail tools), but lacks LLM-optimized descriptions that would help agents understand when to use each tool.
Find the most relevant parliamentary contributors and their contributions for a given query. Returns a list of contributor groups, each containing the member's contributions. Common use cases: - Provide a query to search for relevant contributors and their contributions for a specific topic - Provide a query, date range, and house to search for relevant contributors and their contributions for a specific topic in a specific date range and house
Get committee business including inquiries and other open business
Get details of a specific committee including business, events, members, oral evidence, written evidence, and publications
Get events for a committee
Get current members of a committee
Get oral evidence sessions for a committee
Output schemas not documented for any tool. The provided code shows input parameter schemas but no return type documentation, making it impossible for LLMs to plan downstream tool calls or extract correct fields from responses.
Generic one-sentence descriptions for 'get_committee_*' tools (e.g., 'Get committee business including inquiries and other open business'). These lack context about when to call each tool instead of alternatives, and do not state whether results are paginated or have size limits.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 65 | 2026-07-28+ | v2 |
| 2026-03-09 | B | 72 | - | v1 |
Get publications from a committee
Get written evidence submitted to a committee
Get detailed information about a specific parliamentary member
Get a publication document from a committee
List all committees Args: committee_status: The status of the committee (Current, Former, All) house: The house of the committee (Commons, Lords, Joint) Returns: A list of committees Each committee is a dictionary with the following keys: - id: The ID of the committee - name: The name of the committee - purpose: The purpose of the committee - category: The category of the committee - subCommittees: A list of sub-committees
Search Hansard parliamentary records for contributions using searching within the actual spoken words A contribution is something a member said in the houses of parliament during a debate. With no query provided, this function will return the most recent contributions matching the other filters. Common use cases: - Search what was actually said: Use query="climate change" to find mentions in speeches - Member-specific search: Add memberId to find contributions by a specific member - Search by topic for a given memberId to find contributions on a specific topic by a specific member - Time-bounded search: Add date_from/date_to to search within a specific period For the best results, you probably want to use a large max_results.
Search through the titles of debates for a given query, or by date range, and house. Only returns the debate ID, title, and date, not the content of the debate. Useful for finding relevant debates, but must be used in conjunction with search_contributions to get the full text of the debate. Use date_from and date_to to search for debates in a specific date range. Use query to search for debates with a keyword or phrase in the title. Returns a list of debate details (ID, title, date) in order the most recent first. Common use case for this function: - Provide a query to search for debates on a specific topic - Provide the date for date_from and date_to to search for debates within a specific date range - Provide a query and date range to search for debates on a specific topic in a specific date range
Search for parliamentary members by various criteria
Search Parliamentary Written Questions (sometimes known as PQs) With no query provided, this function will return the most recent written questions matching the other filters. Written questions allow MPs and Members of the House of Lords to ask for information on the work, policy and activities of Government departments, related bodies, and the administration of Parliament. Common use case for this function: - Provide a query to search for written questions on a specific topic for all time - Provide a query and date range to search for written questions on a specific topic in a specific date range - Provide a query, date range, party and member name to search for written questions on a specific topic in a specific date range by a specific member of a specific party - Provide a member name to search for all written questions by a specific member for all time - Provide a member id to search for all written questions by a specific member for all time - Provide an answering body name to search for all questions answered by a specific body or department such as 'Department for Transport' or 'Cabinet Office'
Multiple 'get_committee_*' tools share identical one-line descriptions and similar responsibilities. 'get_committee_details' vs 'get_committee_business' vs 'get_committee_oral_evidence' are not clearly distinguished, LLMs will struggle to choose the right tool.
Parameters lack descriptions or have only generic descriptions. For example, 'upcoming_only' in get_committee_events has a description, but 'committee_id' parameters across all committee tools lack context about whether IDs come from list_all_committees or another source.
No error handling guidance visible in tool definitions. If a committee_id is invalid or a search returns no results, the LLM has no recovery path documented in the tool definition.
search_* tools accept 'max_results' but descriptions do not state default values or hard limits. An agent might pass 10000 expecting paginated results; unbounded limits can blow context windows.
Tool composition risk: search_debate_titles returns only 'debate ID, title, and date' per description, but get_committee_details and related tools operate on committee_id, not debate_id. It is unclear how the debate_id from search_debate_titles chains to other tools (e.g., search_contributions accepts debate_id, but no tool explicitly consumes debate results to feed into downstream calls).