mp·mcp Agent friendly UK Parliamentary data
Ref. UK‑PARL / MCP / v1 Open Parliament Licence v3.0

A Model Context Protocol for UK Parliament data.

Dear Citizen,

Parliament has worked hard to open up Westminster, making nearly every datapoint public through APIs. [Hear hear] This data spans more than ten domains, from bills to votes to questions, each with its own responsibilities, endpoints and schemas. That suits developers, but it burdens agents. Working out which endpoint to call, how to format the request, and how to parse the response costs multiple round trips and wasted tokens.

If we are to foster an inclusive environment for our agentic counterparts, we must do better. mp-mcp is a step in this direction. Agents can now replace the scattered APIs with a single interface that guides their exploration and returns clean, structured JSON, so they spend tokens on thinking, not plumbing. With mp-mcp agents can talk with Westminster and conversationally present parliamentary data to users. [Hear hear]

Tools

Fifteen tools, grouped by intent, cover the whole of an agent's business with Parliament.

Identity
parliament_find_member
Find a sitting or former member by name, constituency, or postcode.
parliament_find_constituency
Resolve a constituency or postcode to its seat and current MP.
Synthesis
parliament_member_overview
A member in one call: synopsis, committees, recent votes and contributions, registered interests.
parliament_member_voting_history
How a member has voted over time, filtered by topic or date.
parliament_search_hansard
Full-text search of debates, written answers, and ministerial statements.
parliament_get_debate
The complete text of a single Hansard debate.
parliament_search_divisions
Find Commons divisions (recorded votes) on a topic, with aye/no totals and the id to drill into a full party breakdown.
parliament_topic_tracker
A cross-Parliament round-up on one topic — bills, debates, divisions, written questions, and petitions in a single call.
Detailed lookups
parliament_get_division
One division in full: ayes and noes by party, tellers, and result.
parliament_member_interests
Entries from the Register of Members' Financial Interests.
parliament_get_committee
A committee's membership, chair, and recent work.
parliament_get_bill
A single bill in full: its current house and stage, sponsors, and whether it has become an Act.
Composition
parliament_get_state_of_parties
Seat counts by party for either House, current or on a given date.
parliament_get_ministerial_roles
Government ministers or opposition shadows, with the holder and department for each post.
parliament_get_election_results
A constituency's result: winner, party, majority, turnout, and the full candidate breakdown.

Prompts

Four prompts orchestrate the tools into finished work.

mp-report-card
A one-page profile of any MP, from a name or a postcode.
topic-tracker
A briefing on what Parliament is doing about a subject — bills, debates, votes, questions, petitions.
draft-constituent-letter
A letter to a member, grounded in their actual voting record and contributions.
vote-explainer
A plain account of a division: the motion, the result, the party breakdown, the debate around it.

On Citation

Every tool response includes a sources array of parliament.uk and hansard.parliament.uk URLs. When your agent states a fact about a member, a vote, a debate, a bill, a committee, or an election result, it cites the corresponding URL inline. The expectation is declared to the model on connection, in the server's own instructions. This is the difference between an assistant that merely sounds authoritative and one that can be checked.

To Take Your Seat

Add the server to any MCP-capable client:

Command line
$ claude mcp add mp-mcp -- npx -y @jamesmccomish/mp-mcp
Or add to config
{
  "mcpServers": {
    "mp-mcp": {
      "command": "npx",
      "args": ["-y", "@jamesmccomish/mp-mcp"]
    }
  }
}

Read the full technical documentation on GitHub.

I have the honour to be your obedient servant,the maintainers of mp-mcp

Enclosures