uk-parliament-mcp 1.1.0__py3-none-any.whl → 1.2.0__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.
- uk_parliament_mcp/__init__.py +1 -1
- uk_parliament_mcp/config.py +1 -0
- uk_parliament_mcp/server.py +2 -0
- uk_parliament_mcp/tools/hansard.py +133 -0
- uk_parliament_mcp/tools/written_questions.py +213 -0
- {uk_parliament_mcp-1.1.0.dist-info → uk_parliament_mcp-1.2.0.dist-info}/METADATA +58 -30
- {uk_parliament_mcp-1.1.0.dist-info → uk_parliament_mcp-1.2.0.dist-info}/RECORD +9 -8
- {uk_parliament_mcp-1.1.0.dist-info → uk_parliament_mcp-1.2.0.dist-info}/WHEEL +0 -0
- {uk_parliament_mcp-1.1.0.dist-info → uk_parliament_mcp-1.2.0.dist-info}/entry_points.txt +0 -0
uk_parliament_mcp/__init__.py
CHANGED
uk_parliament_mcp/config.py
CHANGED
|
@@ -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
|
uk_parliament_mcp/server.py
CHANGED
|
@@ -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,6 +26,9 @@ 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.
|
|
@@ -34,6 +40,133 @@ def register_tools(mcp: FastMCP) -> None:
|
|
|
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.
|
|
3
|
+
Version: 1.2.0
|
|
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
|
|
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
|
-
-
|
|
205
|
-
-
|
|
206
|
-
-
|
|
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
|
-
-
|
|
210
|
-
-
|
|
211
|
-
-
|
|
212
|
-
-
|
|
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
|
-
-
|
|
214
|
+
- What early day motions has member 1471 signed?
|
|
215
215
|
- Get the constituency election results for member 4129
|
|
216
|
-
- Show me
|
|
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
|
|
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
|
-
-
|
|
234
|
-
- Get the RSS feed
|
|
235
|
-
- Get the RSS feed for public bills
|
|
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
|
-
-
|
|
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
|
-
-
|
|
247
|
-
-
|
|
248
|
-
- How many
|
|
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
|
-
-
|
|
270
|
+
- What committee meetings are scheduled this month?
|
|
257
271
|
- Show me details of committee 789
|
|
258
|
-
- What
|
|
272
|
+
- What hearings has committee 789 held?
|
|
259
273
|
- Who are the members of committee 789?
|
|
260
|
-
-
|
|
261
|
-
-
|
|
262
|
-
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
278
|
-
- When
|
|
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
|
|
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
|
|
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=
|
|
1
|
+
uk_parliament_mcp/__init__.py,sha256=UT7kmW7PwBHfUp2MjOr1EpeIDK3_Vh5Om5-GXM-72J0,106
|
|
2
2
|
uk_parliament_mcp/__main__.py,sha256=BnSPIX1Nap5YjESCRVujsE6UyKOAGq_KmQ0bj45jS-o,551
|
|
3
|
-
uk_parliament_mcp/config.py,sha256=
|
|
3
|
+
uk_parliament_mcp/config.py,sha256=g5NMdj8rAeYFp9QGF2hxjypBArLtJHZZzOha0KqdSfg,1067
|
|
4
4
|
uk_parliament_mcp/http_client.py,sha256=-lVsEzL9PYm0ORqzSuHhjUz_02j0gVEX677wAR-mRCU,7545
|
|
5
|
-
uk_parliament_mcp/server.py,sha256=
|
|
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=
|
|
14
|
+
uk_parliament_mcp/tools/hansard.py,sha256=XmTvudbIuJsQ6fZa_n9z06CWJXo_vRW_dp4J0esYjRI,6474
|
|
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
|
|
24
|
-
uk_parliament_mcp-1.
|
|
25
|
-
uk_parliament_mcp-1.
|
|
26
|
-
uk_parliament_mcp-1.
|
|
23
|
+
uk_parliament_mcp/tools/written_questions.py,sha256=lRk5YWjB6LzOFhxbpQI1eLBB01cfAuoODcEamUc07KQ,9723
|
|
24
|
+
uk_parliament_mcp-1.2.0.dist-info/METADATA,sha256=7WeDjQtaAwlZSabe6UZzt5OCLe_RjXoBYFSRKO-Ano8,15018
|
|
25
|
+
uk_parliament_mcp-1.2.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
26
|
+
uk_parliament_mcp-1.2.0.dist-info/entry_points.txt,sha256=KMWbvQHZnZ7b18mlcCpTQ-k9XciquJ7_TeULFOmUZis,70
|
|
27
|
+
uk_parliament_mcp-1.2.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|