uk-parliament-mcp 1.1.0__py3-none-any.whl → 1.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  """UK Parliament MCP Server - bridges AI assistants with UK Parliament APIs."""
2
2
 
3
- __version__ = "1.1.0"
3
+ __version__ = "1.2.1"
@@ -6,7 +6,7 @@ BILLS_API_BASE = "https://bills-api.parliament.uk/api/v1"
6
6
  COMMONS_VOTES_API_BASE = "http://commonsvotes-api.parliament.uk/data"
7
7
  LORDS_VOTES_API_BASE = "https://lordsvotes-api.parliament.uk/data"
8
8
  COMMITTEES_API_BASE = "https://committees-api.parliament.uk/api"
9
- HANSARD_API_BASE = "https://hansard-api.parliament.uk/api/v1"
9
+ HANSARD_API_BASE = "https://hansard-api.parliament.uk"
10
10
  INTERESTS_API_BASE = "https://interests-api.parliament.uk/api/v1"
11
11
  NOW_API_BASE = "https://now-api.parliament.uk/api"
12
12
  WHATSON_API_BASE = "https://whatson-api.parliament.uk/calendar"
@@ -14,6 +14,7 @@ STATUTORY_INSTRUMENTS_API_BASE = "https://statutoryinstruments-api.parliament.uk
14
14
  TREATIES_API_BASE = "https://treaties-api.parliament.uk/api"
15
15
  ERSKINE_MAY_API_BASE = "https://erskinemay-api.parliament.uk/api"
16
16
  ORAL_QUESTIONS_API_BASE = "https://oralquestionsandmotions-api.parliament.uk"
17
+ WRITTEN_QUESTIONS_API_BASE = "https://writtenquestions-api.parliament.uk/api"
17
18
 
18
19
  # Common constants
19
20
  HOUSE_COMMONS = 1
@@ -18,6 +18,7 @@ from uk_parliament_mcp.tools import (
18
18
  statutory_instruments,
19
19
  treaties,
20
20
  whatson,
21
+ written_questions,
21
22
  )
22
23
  from uk_parliament_mcp.tools.core import SYSTEM_PROMPT
23
24
 
@@ -42,6 +43,7 @@ def create_server() -> FastMCP:
42
43
  statutory_instruments.register_tools(mcp)
43
44
  treaties.register_tools(mcp)
44
45
  erskine_may.register_tools(mcp)
46
+ written_questions.register_tools(mcp)
45
47
 
46
48
  # Register prompts (agent skills)
47
49
  core.register_prompts(mcp)
@@ -15,6 +15,9 @@ def register_tools(mcp: FastMCP) -> None:
15
15
  start_date: str,
16
16
  end_date: str,
17
17
  search_term: str,
18
+ member_id: int | None = None,
19
+ skip: int = 0,
20
+ take: int = 20,
18
21
  ) -> str:
19
22
  """Search Hansard (official parliamentary record) for speeches and debates. Use when researching what was said in Parliament on specific topics, by specific members, or in specific time periods. House: 1=Commons, 2=Lords.
20
23
 
@@ -23,17 +26,147 @@ def register_tools(mcp: FastMCP) -> None:
23
26
  start_date: Start date in YYYY-MM-DD format.
24
27
  end_date: End date in YYYY-MM-DD format.
25
28
  search_term: Search term for speeches or debates (e.g. 'climate change', 'NHS').
29
+ member_id: Optional member ID to filter results to a specific MP/Lord.
30
+ skip: Number of results to skip for pagination (default 0).
31
+ take: Number of results to return (default 20, max varies by endpoint).
26
32
 
27
33
  Returns:
28
34
  Hansard records matching the search criteria.
29
35
  """
30
36
  url = build_url(
31
- f"{HANSARD_API_BASE}/search.json",
37
+ f"{HANSARD_API_BASE}/search/debates.json",
32
38
  {
33
39
  "queryParameters.house": house,
34
40
  "queryParameters.startDate": start_date,
35
41
  "queryParameters.endDate": end_date,
36
42
  "queryParameters.searchTerm": search_term,
43
+ "queryParameters.memberId": member_id,
44
+ "queryParameters.skip": skip,
45
+ "queryParameters.take": take,
46
+ },
47
+ )
48
+ return await get_result(url)
49
+
50
+ @mcp.tool()
51
+ async def get_debate_by_id(debate_section_id: str) -> str:
52
+ """Get full debate transcript | Hansard, speeches, contributions |
53
+ Use after search_hansard to get complete debate with all member speeches.
54
+ Returns debate title, date, house, and all contributions.
55
+
56
+ Args:
57
+ debate_section_id: External ID from search_hansard results.
58
+
59
+ Returns:
60
+ Full debate with all member contributions.
61
+ """
62
+ url = f"{HANSARD_API_BASE}/debates/debate/{debate_section_id}.json"
63
+ return await get_result(url)
64
+
65
+ @mcp.tool()
66
+ async def get_member_hansard_contributions(
67
+ member_id: int,
68
+ debate_section_id: str,
69
+ ) -> str:
70
+ """Get all speeches by a specific MP/Lord in a debate | Hansard, member speeches |
71
+ Use to extract just one member's contributions from a debate.
72
+ Returns all contributions by that member in the specified debate.
73
+
74
+ Args:
75
+ member_id: Parliament member ID (from members API).
76
+ debate_section_id: External ID of debate section (from search_hansard).
77
+
78
+ Returns:
79
+ All contributions by that member in the debate.
80
+ """
81
+ url = f"{HANSARD_API_BASE}/debates/memberdebatecontributions/{member_id}.json?debateSectionExtId={debate_section_id}"
82
+ return await get_result(url)
83
+
84
+ @mcp.tool()
85
+ async def get_debate_divisions(debate_section_id: str) -> str:
86
+ """Get votes that occurred during a debate | Hansard, divisions, voting |
87
+ Use to find divisions (votes) that took place in a specific debate.
88
+ Returns list of divisions with aye/noe counts.
89
+
90
+ Args:
91
+ debate_section_id: External ID of debate section (from search_hansard).
92
+
93
+ Returns:
94
+ List of divisions with vote counts.
95
+ """
96
+ url = f"{HANSARD_API_BASE}/debates/divisions/{debate_section_id}.json"
97
+ return await get_result(url)
98
+
99
+ @mcp.tool()
100
+ async def get_division_details(
101
+ division_id: str,
102
+ is_evel: bool = False,
103
+ ) -> str:
104
+ """Get full division details including how each member voted | Hansard, division, voting records |
105
+ Use to see individual voting records for a specific division.
106
+ Returns division with debate title, counts, and member voting records.
107
+
108
+ Args:
109
+ division_id: External ID of division (from get_debate_divisions).
110
+ is_evel: Filter to EVEL (English Votes for English Laws) voters only.
111
+
112
+ Returns:
113
+ Division details with member voting records.
114
+ """
115
+ url = build_url(
116
+ f"{HANSARD_API_BASE}/debates/division/{division_id}.json",
117
+ {"isEvel": is_evel if is_evel else None},
118
+ )
119
+ return await get_result(url)
120
+
121
+ @mcp.tool()
122
+ async def get_hansard_sitting_day(
123
+ sitting_date: str,
124
+ house: int,
125
+ ) -> str:
126
+ """Get full agenda/sections for a sitting day | Hansard, daily business, agenda |
127
+ Use to see all debates and business for a specific day.
128
+ Returns all debate sections for that day.
129
+
130
+ Args:
131
+ sitting_date: Date in YYYY-MM-DD format.
132
+ house: House number: 1 for Commons, 2 for Lords.
133
+
134
+ Returns:
135
+ All debate sections for that day.
136
+ """
137
+ url = build_url(
138
+ f"{HANSARD_API_BASE}/overview/sectionsforday.json",
139
+ {
140
+ "date": sitting_date,
141
+ "house": house,
142
+ },
143
+ )
144
+ return await get_result(url)
145
+
146
+ @mcp.tool()
147
+ async def get_hansard_calendar(
148
+ year: int,
149
+ month: int,
150
+ house: int,
151
+ ) -> str:
152
+ """Get all sitting dates for a month | Hansard, calendar, sitting days |
153
+ Use to discover which days have Hansard records available.
154
+ Returns list of sitting dates with Hansard available.
155
+
156
+ Args:
157
+ year: Year (e.g. 2024).
158
+ month: Month number (1-12).
159
+ house: House number: 1 for Commons, 2 for Lords.
160
+
161
+ Returns:
162
+ List of sitting dates for the month.
163
+ """
164
+ url = build_url(
165
+ f"{HANSARD_API_BASE}/overview/calendar.json",
166
+ {
167
+ "year": year,
168
+ "month": month,
169
+ "house": house,
37
170
  },
38
171
  )
39
172
  return await get_result(url)
@@ -0,0 +1,213 @@
1
+ """Written Questions API tools for questions and ministerial statements."""
2
+
3
+ from urllib.parse import quote
4
+
5
+ from mcp.server.fastmcp import FastMCP
6
+
7
+ from uk_parliament_mcp.config import WRITTEN_QUESTIONS_API_BASE
8
+ from uk_parliament_mcp.http_client import build_url, get_result
9
+
10
+
11
+ def register_tools(mcp: FastMCP) -> None:
12
+ """Register written questions tools with the MCP server."""
13
+
14
+ @mcp.tool()
15
+ async def search_written_questions(
16
+ search_term: str | None = None,
17
+ asking_member_id: int | None = None,
18
+ answering_body_id: int | None = None,
19
+ answered: str | None = None,
20
+ tabled_from: str | None = None,
21
+ tabled_to: str | None = None,
22
+ house: str | None = None,
23
+ skip: int = 0,
24
+ take: int = 20,
25
+ ) -> str:
26
+ """Search written parliamentary questions with comprehensive filtering | written questions, PQs, parliamentary questions, questions to ministers, government accountability | Use for researching MP activity, tracking government responses, analyzing ministerial accountability, or finding questions on specific topics | Returns questions with asking member, answering body, dates, and response status
27
+
28
+ Args:
29
+ search_term: Text to search for in question content.
30
+ asking_member_id: Filter by the member ID who asked the question.
31
+ answering_body_id: Filter by the government department that answered.
32
+ answered: Filter by answer status: "Any", "Answered", or "Unanswered".
33
+ tabled_from: Start date for when question was tabled (YYYY-MM-DD).
34
+ tabled_to: End date for when question was tabled (YYYY-MM-DD).
35
+ house: Filter by house: "Commons", "Lords", or "Bicameral".
36
+ skip: Number of records to skip for pagination. Default: 0.
37
+ take: Number of records to return. Default: 20.
38
+
39
+ Returns:
40
+ Written questions matching the search criteria with member, department, and answer details.
41
+ """
42
+ url = build_url(
43
+ f"{WRITTEN_QUESTIONS_API_BASE}/writtenquestions/questions",
44
+ {
45
+ "searchTerm": search_term,
46
+ "askingMemberId": asking_member_id,
47
+ "answeringBodyId": answering_body_id,
48
+ "answered": answered,
49
+ "tabledWhenFrom": tabled_from,
50
+ "tabledWhenTo": tabled_to,
51
+ "house": house,
52
+ "skip": skip,
53
+ "take": take,
54
+ },
55
+ )
56
+ return await get_result(url)
57
+
58
+ @mcp.tool()
59
+ async def get_written_question(
60
+ question_id: int,
61
+ expand_member: bool = True,
62
+ ) -> str:
63
+ """Get a specific written question by ID | written question details, PQ lookup, question by ID | Use when you have a question ID and need full details including the question text, answer, and member information | Returns complete question with asking member, answering body, question text, and answer
64
+
65
+ Args:
66
+ question_id: The unique ID of the written question.
67
+ expand_member: Whether to include full member details. Default: True.
68
+
69
+ Returns:
70
+ Complete written question details including question text, answer, and member information.
71
+ """
72
+ url = build_url(
73
+ f"{WRITTEN_QUESTIONS_API_BASE}/writtenquestions/questions/{question_id}",
74
+ {"expandMember": expand_member},
75
+ )
76
+ return await get_result(url)
77
+
78
+ @mcp.tool()
79
+ async def get_written_question_by_uin(
80
+ date: str,
81
+ uin: str,
82
+ expand_member: bool = True,
83
+ ) -> str:
84
+ """Get a written question by date and UIN (Unique Identification Number) | question by reference, UIN lookup, official question number | Use when you have a question's official UIN reference number to retrieve the full question details | Returns complete question with asking member, answering body, question text, and answer
85
+
86
+ Args:
87
+ date: Date the question was tabled in YYYY-MM-DD format.
88
+ uin: The Unique Identification Number (UIN) of the question.
89
+ expand_member: Whether to include full member details. Default: True.
90
+
91
+ Returns:
92
+ Complete written question details including question text, answer, and member information.
93
+ """
94
+ url = build_url(
95
+ f"{WRITTEN_QUESTIONS_API_BASE}/writtenquestions/questions/{quote(date)}/{quote(uin)}",
96
+ {"expandMember": expand_member},
97
+ )
98
+ return await get_result(url)
99
+
100
+ @mcp.tool()
101
+ async def search_written_statements(
102
+ search_term: str | None = None,
103
+ member_id: int | None = None,
104
+ answering_body_id: int | None = None,
105
+ made_from: str | None = None,
106
+ made_to: str | None = None,
107
+ house: str | None = None,
108
+ skip: int = 0,
109
+ take: int = 20,
110
+ ) -> str:
111
+ """Search written ministerial statements | written statements, ministerial statements, government announcements, policy statements | Use for tracking government announcements, researching policy statements, or finding ministerial communications on specific topics | Returns statements with minister, department, dates, and statement content
112
+
113
+ Args:
114
+ search_term: Text to search for in statement content.
115
+ member_id: Filter by the minister ID who made the statement.
116
+ answering_body_id: Filter by government department.
117
+ made_from: Start date for when statement was made (YYYY-MM-DD).
118
+ made_to: End date for when statement was made (YYYY-MM-DD).
119
+ house: Filter by house: "Commons", "Lords", or "Bicameral".
120
+ skip: Number of records to skip for pagination. Default: 0.
121
+ take: Number of records to return. Default: 20.
122
+
123
+ Returns:
124
+ Written statements matching the search criteria with minister, department, and content.
125
+ """
126
+ url = build_url(
127
+ f"{WRITTEN_QUESTIONS_API_BASE}/writtenstatements/statements",
128
+ {
129
+ "searchTerm": search_term,
130
+ "memberId": member_id,
131
+ "answeringBodyId": answering_body_id,
132
+ "madeWhenFrom": made_from,
133
+ "madeWhenTo": made_to,
134
+ "house": house,
135
+ "skip": skip,
136
+ "take": take,
137
+ },
138
+ )
139
+ return await get_result(url)
140
+
141
+ @mcp.tool()
142
+ async def get_written_statement(
143
+ statement_id: int,
144
+ expand_member: bool = True,
145
+ ) -> str:
146
+ """Get a specific written statement by ID | written statement details, statement lookup, ministerial statement by ID | Use when you have a statement ID and need full details including the statement text and minister information | Returns complete statement with minister, department, and full statement content
147
+
148
+ Args:
149
+ statement_id: The unique ID of the written statement.
150
+ expand_member: Whether to include full member details. Default: True.
151
+
152
+ Returns:
153
+ Complete written statement details including statement text and minister information.
154
+ """
155
+ url = build_url(
156
+ f"{WRITTEN_QUESTIONS_API_BASE}/writtenstatements/statements/{statement_id}",
157
+ {"expandMember": expand_member},
158
+ )
159
+ return await get_result(url)
160
+
161
+ @mcp.tool()
162
+ async def get_written_statement_by_uin(
163
+ date: str,
164
+ uin: str,
165
+ expand_member: bool = True,
166
+ ) -> str:
167
+ """Get a written statement by date and UIN (Unique Identification Number) | statement by reference, UIN lookup, official statement number | Use when you have a statement's official UIN reference number to retrieve the full statement details | Returns complete statement with minister, department, and full statement content
168
+
169
+ Args:
170
+ date: Date the statement was made in YYYY-MM-DD format.
171
+ uin: The Unique Identification Number (UIN) of the statement.
172
+ expand_member: Whether to include full member details. Default: True.
173
+
174
+ Returns:
175
+ Complete written statement details including statement text and minister information.
176
+ """
177
+ url = build_url(
178
+ f"{WRITTEN_QUESTIONS_API_BASE}/writtenstatements/statements/{quote(date)}/{quote(uin)}",
179
+ {"expandMember": expand_member},
180
+ )
181
+ return await get_result(url)
182
+
183
+ @mcp.tool()
184
+ async def get_daily_reports(
185
+ date_from: str | None = None,
186
+ date_to: str | None = None,
187
+ house: str | None = None,
188
+ skip: int = 0,
189
+ take: int = 20,
190
+ ) -> str:
191
+ """Get daily reports of written questions and answers | daily reports, question reports, answer summaries, daily digest | Use for getting overview of parliamentary question activity on specific dates or date ranges | Returns daily reports with question and answer summaries
192
+
193
+ Args:
194
+ date_from: Start date for reports (YYYY-MM-DD).
195
+ date_to: End date for reports (YYYY-MM-DD).
196
+ house: Filter by house: "Commons", "Lords", or "Bicameral".
197
+ skip: Number of records to skip for pagination. Default: 0.
198
+ take: Number of records to return. Default: 20.
199
+
200
+ Returns:
201
+ Daily reports with question and answer activity summaries.
202
+ """
203
+ url = build_url(
204
+ f"{WRITTEN_QUESTIONS_API_BASE}/dailyreports/dailyreports",
205
+ {
206
+ "dateFrom": date_from,
207
+ "dateTo": date_to,
208
+ "house": house,
209
+ "skip": skip,
210
+ "take": take,
211
+ },
212
+ )
213
+ return await get_result(url)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uk-parliament-mcp
3
- Version: 1.1.0
3
+ Version: 1.2.1
4
4
  Summary: UK Parliament MCP Server - bridges AI assistants with UK Parliament APIs
5
5
  Author: Chris Brooksbank
6
6
  License: MIT
@@ -51,7 +51,7 @@ Access official UK Parliament data through AI assistants. Query MPs, Lords, bill
51
51
  - Use the `/parliament` slash command (in Claude Desktop or compatible MCP clients)
52
52
  - Or say "Hello Parliament" to initialize the session
53
53
 
54
- This gives your AI assistant the context it needs to effectively use the 92 available tools.
54
+ This gives your AI assistant the context it needs to effectively use the 105 available tools.
55
55
 
56
56
  ## Claude Desktop Setup
57
57
 
@@ -201,26 +201,26 @@ Show me the JSON returned from the last MCP call.
201
201
  <summary><strong>Members of Parliament</strong> (14 examples)</summary>
202
202
 
203
203
  - Show me the interests of Sir Keir Starmer
204
- - Who is Boris Johnson?
205
- - Who is the member with ID 1471?
206
- - Get the biography of member 172
204
+ - Tell me about Boris Johnson's parliamentary career
205
+ - Look up the MP with ID 1471
206
+ - Show me the biography for member 172
207
207
  - Show me contact details for member 4129
208
208
  - What are the registered interests of member 3743?
209
- - Show recent contributions from member 172
210
- - What is the Commons voting record for member 4129?
211
- - What is the Lords voting record for member 3743?
212
- - Show the professional experience of member 1471
209
+ - What speeches has member 172 made recently?
210
+ - Show me how member 4129 has voted in the Commons
211
+ - Show me how member 3743 has voted in the Lords
212
+ - What was member 1471's career before Parliament?
213
213
  - What policy areas does member 172 focus on?
214
- - Show early day motions submitted by member 1471
214
+ - What early day motions has member 1471 signed?
215
215
  - Get the constituency election results for member 4129
216
- - Show me the portrait and thumbnail images for member 172
216
+ - Show me photos of member 172
217
217
 
218
218
  </details>
219
219
 
220
220
  <details>
221
221
  <summary><strong>Bills and Legislation</strong> (14 examples)</summary>
222
222
 
223
- - What recent bills are about fishing?
223
+ - What bills about fishing are currently before Parliament?
224
224
  - What bills were updated recently?
225
225
  - Show me details of bill 425
226
226
  - What stages has bill 425 been through?
@@ -230,9 +230,9 @@ Show me the JSON returned from the last MCP call.
230
230
  - What news articles are there about bill 425?
231
231
  - Show me all bill types available
232
232
  - What are the different stages a bill can go through?
233
- - Search for bills containing the word "environment"
234
- - Get the RSS feed for all bills
235
- - Get the RSS feed for public bills only
233
+ - Find bills related to the environment
234
+ - Get the RSS feed to track all bills
235
+ - Get the RSS feed for public bills
236
236
  - Get the RSS feed for bill 425
237
237
 
238
238
  </details>
@@ -240,12 +240,26 @@ Show me the JSON returned from the last MCP call.
240
240
  <details>
241
241
  <summary><strong>Voting and Divisions</strong> (6 examples)</summary>
242
242
 
243
- - Search Commons Divisions for the keyword "refugee"
243
+ - How have MPs voted on refugee-related issues?
244
244
  - Show details of Commons division 1234
245
245
  - Show details of Lords division 5678
246
- - Get Commons divisions grouped by party for keyword "climate"
247
- - Get Lords divisions grouped by party for member 3743
248
- - How many divisions match the search term "brexit"?
246
+ - Show how parties voted on climate issues in the Commons
247
+ - How did Lords vote by party on issues involving member 3743?
248
+ - How many votes have there been on Brexit?
249
+
250
+ </details>
251
+
252
+ <details>
253
+ <summary><strong>Written Questions & Statements</strong> (8 examples)</summary>
254
+
255
+ - What written questions have MPs asked about climate change?
256
+ - Show me unanswered written questions to the Home Office
257
+ - Find written questions about the NHS from the last month
258
+ - Get details of written question 12345
259
+ - What written ministerial statements were made about the budget?
260
+ - Search for written statements about housing policy
261
+ - Show me the daily report of written questions for this week
262
+ - Has any MP asked written questions about artificial intelligence?
249
263
 
250
264
  </details>
251
265
 
@@ -253,29 +267,43 @@ Show me the JSON returned from the last MCP call.
253
267
  <summary><strong>Committees and Inquiries</strong> (9 examples)</summary>
254
268
 
255
269
  - Which committees are focused on women's issues?
256
- - List committee meetings scheduled for November 2024
270
+ - What committee meetings are scheduled this month?
257
271
  - Show me details of committee 789
258
- - What events has committee 789 held?
272
+ - What hearings has committee 789 held?
259
273
  - Who are the members of committee 789?
260
- - Search for committee publications about healthcare
261
- - Show me written evidence submitted to committee 789
262
- - Show me oral evidence from committee 789 hearings
274
+ - Find committee reports on healthcare
275
+ - What written evidence was submitted to committee 789?
276
+ - What oral evidence was given to committee 789?
263
277
  - What are all the committee types?
264
278
 
265
279
  </details>
266
280
 
281
+ <details>
282
+ <summary><strong>Hansard (Official Record)</strong> (8 examples)</summary>
283
+
284
+ - Search Hansard for recent debates on Brexit
285
+ - What was said about immigration in the Commons last month?
286
+ - Show me the full transcript of debate abc123-def456
287
+ - What did Keir Starmer say during the debate on the economy?
288
+ - Were there any votes during the NHS funding debate?
289
+ - What debates happened in the Commons on March 15th 2024?
290
+ - Which days in January 2024 had Commons sittings?
291
+ - Show me all speeches by member 4514 in debate xyz789
292
+
293
+ </details>
294
+
267
295
  <details>
268
296
  <summary><strong>Parliamentary Procedures</strong> (9 examples)</summary>
269
297
 
270
298
  - Search Erskine May for references to the Mace
271
- - Show oral question times for questions tabled in November 2024
272
- - Search Hansard for contributions on Brexit from November 2024
299
+ - What oral question times are coming up?
273
300
  - What government departments exist?
274
301
  - What are the answering bodies in Parliament?
275
302
  - What parties are represented in the House of Commons?
276
303
  - What parties are represented in the House of Lords?
277
- - Show parliamentary calendar events for Commons in December 2024
278
- - When is Parliament not sitting in January 2025?
304
+ - What's on the Commons calendar this month?
305
+ - When are the upcoming parliamentary recesses?
306
+ - What are the procedural rules for bill amendments?
279
307
 
280
308
  </details>
281
309
 
@@ -293,7 +321,7 @@ Show me the JSON returned from the last MCP call.
293
321
 
294
322
  - List all categories of members' interests
295
323
  - Get published registers of interests
296
- - Show staff interests for Lords members
324
+ - Show staff interests declared by Lords members
297
325
  - Search the register of interests for member 1471
298
326
 
299
327
  </details>
@@ -316,7 +344,7 @@ Show me the JSON returned from the last MCP call.
316
344
  - Show me the JSON returned from the last MCP call
317
345
  - Show me the API URL you just used
318
346
  - Search for bills sponsored by member 172 from the Environment department
319
- - Find all committee meetings about climate change between November and December 2024
347
+ - Find committee meetings about climate change in the last few months
320
348
 
321
349
  </details>
322
350
 
@@ -1,8 +1,8 @@
1
- uk_parliament_mcp/__init__.py,sha256=LLbj8236Pn0ZBQhfanKj7zDZNHMPMH4x-cHGP7Y3Gjs,106
1
+ uk_parliament_mcp/__init__.py,sha256=pd_TgB1aeu_qrJxaIuzBEiGV8ad9e0kyEh56BeCSkrA,106
2
2
  uk_parliament_mcp/__main__.py,sha256=BnSPIX1Nap5YjESCRVujsE6UyKOAGq_KmQ0bj45jS-o,551
3
- uk_parliament_mcp/config.py,sha256=vhP4I8Kr6rUfkXxAUa74SqLlqtOHqhgYtyMWFlgZNcM,989
3
+ uk_parliament_mcp/config.py,sha256=2pL97dfjFIYxnQUYhPyT_2dUizoRYdKeNrk54pbyZNA,1060
4
4
  uk_parliament_mcp/http_client.py,sha256=-lVsEzL9PYm0ORqzSuHhjUz_02j0gVEX677wAR-mRCU,7545
5
- uk_parliament_mcp/server.py,sha256=wYp0WP00swRKDsU5YBecNWs3lk_skbGDJH0L9dA6SXg,1284
5
+ uk_parliament_mcp/server.py,sha256=CYtazkZ2NRjKMQwRhUwtpNc2XztV5nIfUKVP0Zvbe5Y,1351
6
6
  uk_parliament_mcp/validators.py,sha256=j1oWKQ6KKrAV3TdSDEJ0rZGIVB9M2wLbLCC7GPK4xZg,1314
7
7
  uk_parliament_mcp/tools/__init__.py,sha256=eWxH_qVslDmAhrayJEaaTHBaVYUQbmmcxBZXTMjCarY,47
8
8
  uk_parliament_mcp/tools/bills.py,sha256=k8S0Qltah3wpjQ4xeIqmQaCsjY-ntPCxaruZAIba-1Y,15336
@@ -11,7 +11,7 @@ uk_parliament_mcp/tools/commons_votes.py,sha256=MqijsbunRZqMGinOPXkYP_68rsdOGl2P
11
11
  uk_parliament_mcp/tools/composite.py,sha256=oGowRSG2FsWmYvWgvLi4QECgN71eweopfqms8yuoH3g,12025
12
12
  uk_parliament_mcp/tools/core.py,sha256=uHli5AJVqO7apuWTLe45X8tqytFmXl89iRyXhbu0taA,37651
13
13
  uk_parliament_mcp/tools/erskine_may.py,sha256=okYdBfWqwZ5bB-VutG-FF6MKCS3nP0XHCd1jTs8m-K8,1001
14
- uk_parliament_mcp/tools/hansard.py,sha256=KWPydXeXGUTKlFf_-LgBYCD7eKbNUovWuA5J3y1jNWs,1486
14
+ uk_parliament_mcp/tools/hansard.py,sha256=h376CRkKI64u_uDZEbNd96S9-0LKRXlef32e299nvA8,6482
15
15
  uk_parliament_mcp/tools/interests.py,sha256=m3jJFIpQYikNPNOq6d38F9R9U8bjt8U7tTeVJxL1_RI,2096
16
16
  uk_parliament_mcp/tools/lords_votes.py,sha256=FwRTPfbJAN7OPGXrteyhE1LY3-qxsXVQ5ARFX-8IPOM,6489
17
17
  uk_parliament_mcp/tools/members.py,sha256=zAYbdjmUpG0C98gjb3a4DOVPwt35Iw_SCQHSEi_xKRE,20069
@@ -20,7 +20,8 @@ uk_parliament_mcp/tools/oral_questions.py,sha256=Q69zTCws-Czm75jNOewmfJKwHDLGDUP
20
20
  uk_parliament_mcp/tools/statutory_instruments.py,sha256=xGXcS94QNDWdls7Ncn3rkBdstYUFLcuPKdcTVJvVQRg,1631
21
21
  uk_parliament_mcp/tools/treaties.py,sha256=m7cv638f7JoH1JfmqDr9h2W6X7ly_QvNaOjN_UjnqNc,1205
22
22
  uk_parliament_mcp/tools/whatson.py,sha256=7gOXe_YHEmmIoNBVBkfQn4dXKELn9K7MjlxMV-8k34Y,2608
23
- uk_parliament_mcp-1.1.0.dist-info/METADATA,sha256=PQYNc-yOPeuiYlWX6jm_CisFK5M9KgwVIPkI7Vz5oPo,13987
24
- uk_parliament_mcp-1.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
25
- uk_parliament_mcp-1.1.0.dist-info/entry_points.txt,sha256=KMWbvQHZnZ7b18mlcCpTQ-k9XciquJ7_TeULFOmUZis,70
26
- uk_parliament_mcp-1.1.0.dist-info/RECORD,,
23
+ uk_parliament_mcp/tools/written_questions.py,sha256=lRk5YWjB6LzOFhxbpQI1eLBB01cfAuoODcEamUc07KQ,9723
24
+ uk_parliament_mcp-1.2.1.dist-info/METADATA,sha256=IG-ou8OdK8lN2-LsIHCCv6RBPrm-RYrqkrWsXechyUI,15018
25
+ uk_parliament_mcp-1.2.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
26
+ uk_parliament_mcp-1.2.1.dist-info/entry_points.txt,sha256=KMWbvQHZnZ7b18mlcCpTQ-k9XciquJ7_TeULFOmUZis,70
27
+ uk_parliament_mcp-1.2.1.dist-info/RECORD,,