Comprehensive guide to using all 61 MCP tools
Real-world examples, best practices, and query patterns
The European Parliament MCP Server provides 61 specialized tools for accessing parliamentary data through the Model Context Protocol โ organized into 7 core tools, 3 advanced tools, 15 OSINT intelligence tools, 1 statistics tool, 21 EP API v2 endpoint tools, 1 procedure event detail tool, and 13 EP API v2 feed tools. Each tool is designed for specific data queries with input validation, caching, and rate limiting.
Currently, the server does not require authentication for tool access. Future versions may introduce OAuth 2.0 or API key authentication.
| Tool | Purpose | Key Parameters | Response Type |
|---|---|---|---|
get_meps |
List MEPs with filters | country, group, committee | Paginated list |
get_mep_details |
MEP details | id | Single object |
get_current_meps |
Currently active MEPs | limit, offset | Paginated list |
get_incoming_meps |
Newly arriving MEPs | limit, offset | Paginated list |
get_outgoing_meps |
Departing MEPs | limit, offset | Paginated list |
get_homonym_meps |
MEPs with identical names | limit, offset | Paginated list |
get_mep_declarations |
MEP financial declarations | docId, year | Paginated list |
| Tool | Purpose | Key Parameters | Response Type |
|---|---|---|---|
get_plenary_sessions |
List plenary sessions | dateFrom, dateTo, eventId | Paginated list |
get_voting_records |
Aggregate voting data | sessionId, topic, dateFrom | Paginated list |
get_speeches |
Plenary speeches | speechId, dateFrom, dateTo | Paginated list |
get_events |
EP events | eventId, dateFrom, dateTo | Paginated list |
get_meeting_activities |
Meeting activities | sittingId (required) | Paginated list |
get_meeting_decisions |
Meeting decisions | sittingId (required) | Paginated list |
get_meeting_foreseen_activities |
Planned agenda items | sittingId (required) | Paginated list |
get_meeting_plenary_session_documents |
Meeting session documents | sittingId (required) | Paginated list |
get_meeting_plenary_session_document_items |
Meeting session doc items | sittingId (required) | Paginated list |
| Tool | Purpose | Key Parameters | Response Type |
|---|---|---|---|
get_committee_info |
Committee data | id, abbreviation | Single object |
get_committee_documents |
Committee documents | docId, year | Paginated list |
| Tool | Purpose | Key Parameters | Response Type |
|---|---|---|---|
search_documents |
Find documents | keyword, documentType | Paginated list |
get_adopted_texts |
Adopted texts | docId, year | Paginated list |
get_plenary_documents |
Plenary documents | docId, year | Paginated list |
get_plenary_session_documents |
Session documents | docId | Paginated list |
get_plenary_session_document_items |
Session document items | limit, offset | Paginated list |
get_external_documents |
External documents | docId, year | Paginated list |
get_parliamentary_questions |
Q&A data | author, dateFrom | Paginated list |
| Tool | Purpose | Key Parameters | Response Type |
|---|---|---|---|
get_procedures |
Legislative procedures | processId, year | Paginated list |
get_procedure_events |
Procedure timeline events | processId (required) | Paginated list |
get_procedure_event_by_id |
Single procedure event | processId, eventId (both required) | Single object |
get_controlled_vocabularies |
Classification terms | vocId | Paginated list |
| Tool | Purpose | Key Parameters | Response Type |
|---|---|---|---|
analyze_voting_patterns |
Voting analysis | mepId, dateFrom | Analysis object |
track_legislation |
Track procedure | procedureId | Procedure object |
generate_report |
Create reports | reportType, subjectId | Report object |
get_all_generated_stats |
Precomputed EP stats (2004-2026) + 30 OSINT metrics | yearFrom, yearTo, category | Statistics object |
| Tool | Purpose | Key Parameters | Response Type |
|---|---|---|---|
assess_mep_influence |
MEP influence scoring | mepId (required), includeDetails | Influence scorecard |
analyze_coalition_dynamics |
Coalition cohesion analysis | groupIds, dateFrom, minimumCohesion | Coalition metrics |
detect_voting_anomalies |
Anomaly detection | mepId, groupId, sensitivityThreshold | Anomaly report |
compare_political_groups |
Cross-group comparison | groupIds (required), dimensions | Comparison matrix |
analyze_legislative_effectiveness |
Legislative scoring | subjectType (required), subjectId (required) | Effectiveness score |
monitor_legislative_pipeline |
Pipeline monitoring | committee, status, limit | Pipeline status |
analyze_committee_activity |
Committee workload & engagement | committeeId (required) | Activity report |
track_mep_attendance |
MEP attendance patterns | mepId, country, groupId, limit | Attendance report |
analyze_country_delegation |
Country delegation analysis | country (required) | Delegation analysis |
generate_political_landscape |
Parliament-wide landscape | dateFrom, dateTo | Landscape overview |
network_analysis |
MEP relationship network mapping | mepId, analysisType, depth | Network metrics |
sentiment_tracker |
Political group positioning scores | groupId, timeframe | Sentiment report |
early_warning_system |
Detect emerging political shifts | sensitivity, focusArea | Warning alerts |
comparative_intelligence |
Cross-reference MEP activities | mepIds (required), dimensions | Comparison matrix |
correlate_intelligence |
Cross-tool OSINT correlation | mepIds (required), groups, sensitivityLevel | Intelligence alerts |
| Tool | Purpose | Key Parameters | Response Type |
|---|---|---|---|
get_meps_feed |
Recently updated MEPs | timeframe, startDate | Feed list |
get_events_feed |
Recently updated events | timeframe, activityType | Feed list |
get_procedures_feed |
Recently updated procedures | timeframe, processType | Feed list |
get_adopted_texts_feed |
Recently updated adopted texts | timeframe, workType | Feed list |
get_mep_declarations_feed |
Recently updated MEP declarations | timeframe, workType | Feed list |
get_documents_feed |
Recently updated documents | timeframe, startDate | Feed list |
get_plenary_documents_feed |
Recently updated plenary documents | timeframe, startDate | Feed list |
get_committee_documents_feed |
Recently updated committee documents | timeframe, startDate | Feed list |
get_plenary_session_documents_feed |
Recently updated plenary session docs | timeframe, startDate | Feed list |
get_external_documents_feed |
Recently updated external documents | timeframe, workType | Feed list |
get_parliamentary_questions_feed |
Recently updated questions | timeframe, startDate | Feed list |
get_corporate_bodies_feed |
Recently updated corporate bodies | timeframe, startDate | Feed list |
get_controlled_vocabularies_feed |
Recently updated vocabularies | timeframe, startDate | Feed list |
Description: Retrieve Members of the European Parliament with optional filters for country, political group, committee membership, and active status.
โ ๏ธ EP API Note: The
get_mepstool uses the EP API/mepsendpoint which supports server-side filtering but does not returncountryorpoliticalGroupin responses. Results will showcountry: "Unknown"andpoliticalGroup: "Unknown". For country and political group data, useget_current_mepsinstead. All OSINT intelligence tools automatically useget_current_mepsfor accurate MEP metadata.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| country | string | No | - | ISO 3166-1 alpha-2 country code (e.g., "SE", "FR", "DE") |
| group | string | No | - | Political group identifier (e.g., "EPP", "S&D", "Greens/EFA") |
| committee | string | No | - | Committee identifier (e.g., "ENVI", "AGRI") |
| active | boolean | No | true | Filter by active status |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
{
"content": [{
"type": "text",
"text": "{
\"data\": [
{
\"id\": \"MEP-124810\",
\"name\": \"Anna Lindberg\",
\"country\": \"SE\",
\"politicalGroup\": \"S&D\",
\"committees\": [\"ENVI\", \"AGRI\"],
\"email\": \"anna.lindberg@europarl.europa.eu\"
}
],
\"total\": 1,
\"limit\": 50,
\"offset\": 0
}"
}]
}
Claude Desktop - Natural Language:
Get me a list of Swedish MEPs in the S&D political group
VS Code/MCP Client - TypeScript:
const result = await client.callTool('get_meps', {
country: 'SE',
group: 'S&D',
limit: 20
});
const response = JSON.parse(result.content[0].text);
console.log(`Found ${response.total} Swedish S&D MEPs`);
Python MCP Client:
result = await client.call_tool('get_meps', {
'country': 'SE',
'group': 'S&D',
'limit': 20
})
data = json.loads(result['content'][0]['text'])
print(f"Found {data['total']} Swedish S&D MEPs")
| Error | Cause | Solution |
|---|---|---|
ValidationError: country |
Invalid country code format | Use 2-letter ISO code (e.g., "SE" not "Sweden") |
RateLimitError |
Too many requests | Wait 15 minutes or implement request throttling |
APIError: 500 |
European Parliament API down | Check EP API status, implement retry logic |
limit and offset for large result setsDescription: Retrieve comprehensive information about a specific MEP including biography, contact details, committee memberships, and voting statistics.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | MEP identifier (e.g., "MEP-124810") |
{
"content": [{
"type": "text",
"text": "{
\"id\": \"MEP-124810\",
\"name\": \"Anna Lindberg\",
\"country\": \"SE\",
\"politicalGroup\": \"S&D\",
\"committees\": [\"ENVI\", \"AGRI\"],
\"email\": \"anna.lindberg@europarl.europa.eu\",
\"biography\": \"Anna Lindberg has been an MEP since 2019...\",
\"votingStatistics\": {
\"totalVotes\": 1250,
\"votesFor\": 850,
\"votesAgainst\": 200,
\"abstentions\": 200,
\"attendanceRate\": 92.5
}
}"
}]
}
Claude Desktop:
Get detailed information about MEP with ID MEP-124810
TypeScript:
const result = await client.callTool('get_mep_details', {
id: 'MEP-124810'
});
const mep = JSON.parse(result.content[0].text);
console.log(`${mep.name} from ${mep.country}`);
console.log(`Attendance: ${mep.votingStatistics.attendanceRate}%`);
| Error | Cause | Solution |
|---|---|---|
ValidationError: id required |
Missing ID parameter | Provide MEP ID (get from get_meps) |
NotFoundError |
Invalid MEP ID | Verify ID exists in get_meps results |
ValidationError: id format |
Empty or invalid ID format | Use non-empty string ID |
Description: Retrieve European Parliament plenary sessions with optional date range filtering.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| dateFrom | string | No | - | Start date (YYYY-MM-DD format) |
| dateTo | string | No | - | End date (YYYY-MM-DD format) |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
{
"content": [{
"type": "text",
"text": "{
\"data\": [
{
\"id\": \"PLENARY-2024-05\",
\"date\": \"2024-05-15\",
\"location\": \"Strasbourg\",
\"agenda\": \"Climate change debate, budget vote\",
\"documents\": [\"DOC-2024-001\", \"DOC-2024-002\"]
}
],
\"total\": 12,
\"limit\": 50,
\"offset\": 0
}"
}]
}
Claude Desktop:
Show me plenary sessions from January to March 2024
TypeScript:
const result = await client.callTool('get_plenary_sessions', {
dateFrom: '2024-01-01',
dateTo: '2024-03-31',
limit: 20
});
const sessions = JSON.parse(result.content[0].text);
console.log(`Found ${sessions.data.length} sessions`);
| Error | Cause | Solution |
|---|---|---|
ValidationError: dateFrom |
Invalid date format | Use YYYY-MM-DD format |
ValidationError: dateTo before dateFrom |
Date range invalid | Ensure dateTo >= dateFrom |
Description: Retrieve voting records with filters for MEP, session, topic, and date range.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| mepId | string | No | - | Filter by specific MEP |
| sessionId | string | No | - | Filter by plenary session |
| topic | string | No | - | Filter by topic/keyword |
| dateFrom | string | No | - | Start date (YYYY-MM-DD) |
| dateTo | string | No | - | End date (YYYY-MM-DD) |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
{
"content": [{
"type": "text",
"text": "{
\"data\": [
{
\"voteId\": \"VOTE-2024-001\",
\"sessionId\": \"PLENARY-2024-05\",
\"date\": \"2024-05-15\",
\"subject\": \"Climate Action Directive\",
\"mepVote\": \"FOR\",
\"result\": \"ADOPTED\",
\"votesFor\": 450,
\"votesAgainst\": 120,
\"abstentions\": 30
}
],
\"total\": 1250,
\"limit\": 50,
\"offset\": 0
}"
}]
}
Claude Desktop:
Show voting records for MEP-124810 on climate topics from 2024
TypeScript:
const result = await client.callTool('get_voting_records', {
mepId: 'MEP-124810',
topic: 'climate',
dateFrom: '2024-01-01',
limit: 100
});
Description: Search European Parliament legislative documents with keyword and type filters.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| docId | string | No | - | Document ID for single document lookup (bypasses keyword search) |
| keyword | string | No | - | Search keyword or phrase (alphanumeric, spaces, hyphens, underscores) |
| documentType | string | No | - | Document type: REPORT, RESOLUTION, DECISION, DIRECTIVE, REGULATION, OPINION, AMENDMENT |
| dateFrom | string | No | - | Start date (YYYY-MM-DD) |
| dateTo | string | No | - | End date (YYYY-MM-DD) |
| committee | string | No | - | Committee identifier |
| limit | number | No | 20 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Note: Provide
docIdfor single document lookup, orkeywordfor search. At least one is recommended for targeted results. If neither is provided, the tool runs a search with default parameters, which may return a broad set of documents.
{
"content": [{
"type": "text",
"text": "{
\"data\": [
{
\"id\": \"A9-0123/2024\",
\"title\": \"Report on Climate Action Directive\",
\"type\": \"REPORT\",
\"author\": \"MEP-124810\",
\"date\": \"2024-05-10\",
\"committee\": \"ENVI\",
\"summary\": \"Report on proposed climate legislation...\"
}
],
\"total\": 45,
\"limit\": 20,
\"offset\": 0
}"
}]
}
Claude Desktop:
Search for documents about renewable energy from the ENVI committee
TypeScript:
const result = await client.callTool('search_documents', {
keyword: 'renewable energy',
documentType: 'REPORT',
dateFrom: '2024-01-01',
limit: 25
});
| Error | Cause | Solution |
|---|---|---|
ValidationError: keyword |
Invalid characters | Use only alphanumeric, spaces, hyphens, underscores |
SearchError: missing search parameters |
Neither keyword nor docId provided | Provide a search term or use docId for direct lookup |
Description: Retrieve detailed information about a European Parliament committee including composition, members, chair, and areas of responsibility.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | No* | - | Committee identifier |
| abbreviation | string | No* | - | Committee abbreviation (e.g., "ENVI", "AGRI") |
*At least one parameter required
{
"content": [{
"type": "text",
"text": "{
\"id\": \"COMM-ENVI\",
\"name\": \"Committee on Environment, Public Health and Food Safety\",
\"abbreviation\": \"ENVI\",
\"chair\": \"MEP-124820\",
\"viceChairs\": [\"MEP-124821\", \"MEP-124822\"],
\"members\": [\"MEP-124810\", \"MEP-124811\"],
\"responsibilities\": [
\"Environmental policy\",
\"Public health\",
\"Food safety\"
]
}"
}]
}
Claude Desktop:
Get information about the ENVI committee
TypeScript:
const result = await client.callTool('get_committee_info', {
abbreviation: 'ENVI'
});
const committee = JSON.parse(result.content[0].text);
console.log(`${committee.name} has ${committee.members.length} members`);
Description: Retrieve parliamentary questions (written and oral) with filters for author, topic, and date range.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| author | string | No | - | Question author MEP ID |
| topic | string | No | - | Question topic/keyword |
| questionType | string | No | - | Type: WRITTEN or ORAL |
| dateFrom | string | No | - | Start date (YYYY-MM-DD) |
| dateTo | string | No | - | End date (YYYY-MM-DD) |
| answered | boolean | No | - | Filter by answered status |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
{
"content": [{
"type": "text",
"text": "{
\"data\": [
{
\"questionId\": \"Q-2024-001\",
\"author\": \"MEP-124810\",
\"type\": \"WRITTEN\",
\"subject\": \"Climate change adaptation funding\",
\"question\": \"What measures is the Commission taking...\",
\"date\": \"2024-03-15\",
\"answered\": true,
\"answerDate\": \"2024-04-10\",
\"answer\": \"The Commission has allocated...\"
}
],
\"total\": 328,
\"limit\": 50,
\"offset\": 0
}"
}]
}
Claude Desktop:
Show me written questions about climate change from 2024
TypeScript:
const result = await client.callTool('get_parliamentary_questions', {
topic: 'climate change',
questionType: 'WRITTEN',
dateFrom: '2024-01-01',
answered: true,
limit: 50
});
Description: Analyze MEP voting behavior including political group alignment, cross-party voting, attendance rates, and topic-based voting patterns.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| mepId | string | Yes | - | MEP identifier to analyze |
| dateFrom | string | No | - | Analysis start date (YYYY-MM-DD) |
| dateTo | string | No | - | Analysis end date (YYYY-MM-DD) |
| compareWithGroup | boolean | No | true | Compare with political group average |
{
"content": [{
"type": "text",
"text": "{
\"mepId\": \"MEP-124810\",
\"mepName\": \"Anna Lindberg\",
\"period\": {
\"from\": \"2024-01-01\",
\"to\": \"2024-12-31\"
},
\"statistics\": {
\"totalVotes\": 1250,
\"votesFor\": 850,
\"votesAgainst\": 200,
\"abstentions\": 200,
\"attendanceRate\": 92.5
},
\"groupAlignment\": {
\"politicalGroup\": \"S&D\",
\"alignmentRate\": 87.5,
\"divergentVotes\": 156
},
\"topTopics\": [
{ \"topic\": \"Climate Change\", \"voteCount\": 45 },
{ \"topic\": \"Agriculture Policy\", \"voteCount\": 38 }
],
\"crossPartyVoting\": {
\"withOtherGroups\": 125,
\"rate\": 10.0
}
}"
}]
}
Claude Desktop:
Analyze voting patterns for MEP-124810 in 2024, compare with their political group
TypeScript:
const result = await client.callTool('analyze_voting_patterns', {
mepId: 'MEP-124810',
dateFrom: '2024-01-01',
dateTo: '2024-12-31',
compareWithGroup: true
});
const analysis = JSON.parse(result.content[0].text);
console.log(`Attendance: ${analysis.statistics.attendanceRate}%`);
console.log(`Group alignment: ${analysis.groupAlignment.alignmentRate}%`);
Description: Track European Parliament legislative procedure progress including status, timeline, committees, amendments, and voting records.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| procedureId | string | Yes | - | Legislative procedure identifier (e.g., "2024/0001(COD)") |
{
"content": [{
"type": "text",
"text": "{
\"procedureId\": \"2024/0001(COD)\",
\"title\": \"Climate Action and Renewable Energy Directive\",
\"type\": \"Ordinary legislative procedure (COD)\",
\"status\": \"PLENARY\",
\"currentStage\": \"Awaiting plenary vote\",
\"timeline\": [
{
\"date\": \"2024-01-15\",
\"stage\": \"Commission Proposal\",
\"description\": \"Legislative proposal submitted\"
}
],
\"committees\": [
{
\"abbreviation\": \"ENVI\",
\"role\": \"LEAD\",
\"rapporteur\": \"MEP-124810\"
}
],
\"amendments\": {
\"proposed\": 156,
\"adopted\": 89,
\"rejected\": 67
},
\"voting\": [...],
\"documents\": [...],
\"nextSteps\": [
\"Plenary debate scheduled for 2024-06-15\"
]
}"
}]
}
Claude Desktop:
Track the progress of legislative procedure 2024/0001(COD)
TypeScript:
const result = await client.callTool('track_legislation', {
procedureId: '2024/0001(COD)'
});
const procedure = JSON.parse(result.content[0].text);
console.log(`Status: ${procedure.status}`);
console.log(`Current stage: ${procedure.currentStage}`);
console.log(`Next: ${procedure.nextSteps[0]}`);
Description: Generate comprehensive analytical reports on European Parliament data. Supports four report types: MEP activity, committee performance, voting statistics, and legislation progress.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| reportType | string | Yes | - | Report type: MEP_ACTIVITY, COMMITTEE_PERFORMANCE, VOTING_STATISTICS, LEGISLATION_PROGRESS |
| subjectId | string | No | - | Subject identifier (MEP ID, Committee ID) - optional for aggregate reports |
| dateFrom | string | No | - | Report period start (YYYY-MM-DD) |
| dateTo | string | No | - | Report period end (YYYY-MM-DD) |
{
"content": [{
"type": "text",
"text": "{
\"reportType\": \"MEP_ACTIVITY\",
\"subject\": \"Anna Lindberg\",
\"period\": {
\"from\": \"2024-01-01\",
\"to\": \"2024-12-31\"
},
\"generatedAt\": \"2024-12-31T23:59:59Z\",
\"summary\": \"Activity report for Anna Lindberg...\",
\"sections\": [
{
\"title\": \"Voting Activity\",
\"content\": \"Participated in 1250 votes...\"
}
],
\"statistics\": {
\"totalVotes\": 1250,
\"attendanceRate\": 92.5,
\"questionsSubmitted\": 28
},
\"recommendations\": [
\"Continue active participation...\"
]
}"
}]
}
Claude Desktop:
Generate an MEP activity report for MEP-124810 covering 2024
TypeScript:
// MEP Activity Report
const result = await client.callTool('generate_report', {
reportType: 'MEP_ACTIVITY',
subjectId: 'MEP-124810',
dateFrom: '2024-01-01',
dateTo: '2024-12-31'
});
// Committee Performance Report
const committeReport = await client.callTool('generate_report', {
reportType: 'COMMITTEE_PERFORMANCE',
subjectId: 'COMM-ENVI',
dateFrom: '2024-01-01',
dateTo: '2024-12-31'
});
// Parliament-wide Voting Statistics (no subjectId needed)
const votingStats = await client.callTool('generate_report', {
reportType: 'VOTING_STATISTICS',
dateFrom: '2024-01-01',
dateTo: '2024-12-31'
});
MEP_ACTIVITY: Individual MEP performance and activity
COMMITTEE_PERFORMANCE: Committee productivity analysis
VOTING_STATISTICS: Parliament-wide voting analysis
LEGISLATION_PROGRESS: Legislative activity overview
Description: Compute a comprehensive MEP influence score using a 5-dimension model: voting activity, legislative output, committee engagement, parliamentary oversight, and coalition building.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| mepId | string | Yes | - | MEP identifier |
| dateFrom | string | No | - | Start date (YYYY-MM-DD) |
| dateTo | string | No | - | End date (YYYY-MM-DD) |
| includeDetails | boolean | No | false | Include detailed breakdown per dimension |
Assess the influence of MEP with ID "124810" over the past year
Description: Analyze coalition cohesion and stress indicators across political groups, detecting voting alliances, defection rates, and fragmentation signals.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| groupIds | string[] | No | - | Political group identifiers to analyze (omit for all groups, 1-10 items) |
| dateFrom | string | No | - | Analysis start date (YYYY-MM-DD) |
| dateTo | string | No | - | Analysis end date (YYYY-MM-DD) |
| minimumCohesion | number | No | 0.5 | Minimum cohesion threshold for alliance detection (0-1) |
Analyze coalition dynamics between EPP and S&D over the last 6 months
Description: Detect unusual voting patterns including party defections, sudden alignment shifts, abstention spikes, and other anomalies.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| mepId | string | No | - | MEP identifier (omit for broad analysis) |
| groupId | string | No | - | Political group to analyze |
| dateFrom | string | No | - | Analysis start date (YYYY-MM-DD) |
| dateTo | string | No | - | Analysis end date (YYYY-MM-DD) |
| sensitivityThreshold | number | No | 0.3 | Anomaly sensitivity (0-1, lower = more anomalies detected) |
โ ๏ธ Note: Cannot specify both
mepIdandgroupIdโ use one or neither.
Detect voting anomalies in the EPP group over the past 3 months
Description: Cross-group comparative analysis of voting discipline, activity levels, policy focus areas, and internal cohesion.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| groupIds | string[] | Yes | - | Political group identifiers to compare (minimum 2, maximum 10) |
| dateFrom | string | No | - | Analysis start date (YYYY-MM-DD) |
| dateTo | string | No | - | Analysis end date (YYYY-MM-DD) |
| dimensions | string[] | No | all | Comparison dimensions: voting_discipline, activity_level, legislative_output, attendance, cohesion |
Compare EPP, S&D, and Renew Europe on voting cohesion and legislative output
Description: Score MEP or committee legislative effectiveness โ bills passed, amendments adopted, report quality, and overall impact.
| Parameter | Type | Required | Description |
|---|---|---|---|
| subjectType | string | Yes | Subject type: MEP or COMMITTEE |
| subjectId | string | Yes | Subject identifier (MEP ID or committee abbreviation) |
| dateFrom | string | No | Start date (YYYY-MM-DD) |
| dateTo | string | No | End date (YYYY-MM-DD) |
Analyze the legislative effectiveness of the ENVI committee
Description: Monitor real-time legislative pipeline status with bottleneck detection, timeline forecasting, and procedure progress tracking.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| committee | string | No | - | Filter by committee |
| status | string | No | ACTIVE | Pipeline status filter: ALL, ACTIVE, STALLED, COMPLETED |
| dateFrom | string | No | - | Analysis start date (YYYY-MM-DD) |
| dateTo | string | No | - | Analysis end date (YYYY-MM-DD) |
| limit | number | No | 20 | Maximum results to return (1-100) |
Show the current legislative pipeline status and identify bottlenecks
Description: Analyze committee workload, document production, meeting frequency, and member engagement metrics. Provides intelligence on committee operational efficiency and policy focus areas.
| Parameter | Type | Required | Description |
|---|---|---|---|
| committeeId | string | Yes | Committee identifier (e.g., "ENVI", "ITRE") |
| dateFrom | string | No | Start date (ISO 8601) |
| dateTo | string | No | End date (ISO 8601) |
Analyze the ENVI committee's activity, document output, and member engagement over the last 6 months
Description: Track MEP plenary attendance patterns with trend detection, engagement scoring, and participation rate analysis. Supports both individual MEP queries and high-level overviews by country or political group.
| Parameter | Type | Required | Description |
|---|---|---|---|
| mepId | string | No | MEP identifier for individual attendance analysis |
| country | string | No | ISO 3166-1 alpha-2 country code for delegation overview |
| groupId | string | No | Political group identifier for group-level overview |
| limit | number | No | Maximum number of MEPs to include in overview queries |
| dateFrom | string | No | Start date (ISO 8601) |
| dateTo | string | No | End date (ISO 8601) |
At least one of mepId, country, or groupId is typically provided to scope the analysis.
Track attendance patterns and engagement trends for MEP-124810 over the current parliamentary term
Description: Analyze a country's MEP delegation composition, political group distribution, voting behavior, committee representation, and national cohesion metrics.
| Parameter | Type | Required | Description |
|---|---|---|---|
| country | string | Yes | ISO 3166-1 alpha-2 country code (e.g., "SE", "DE", "FR") |
| dateFrom | string | No | Start date (ISO 8601) |
| dateTo | string | No | End date (ISO 8601) |
Analyze the Swedish delegation's composition, voting behavior, and committee representation
Description: Generate a comprehensive political landscape overview of the European Parliament, including group composition, power dynamics, coalition thresholds, bloc analysis, and fragmentation metrics.
| Parameter | Type | Required | Description |
|---|---|---|---|
| dateFrom | string | No | Start date (ISO 8601) |
| dateTo | string | No | End date (ISO 8601) |
Generate a current political landscape overview including group sizes, coalition possibilities, and bloc dynamics
Description: MEP relationship network mapping using committee co-membership. Computes centrality scores, cluster assignments, bridging MEPs, and network density metrics. Identifies informal power structures and cross-party collaboration pathways.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| mepId | number | No | - | Focus on ego network for a specific MEP |
| analysisType | string | No | combined | Analysis type: committee, voting, or combined |
| depth | number | No | 2 | Network depth (1-3 hops from focal node) |
Claude Desktop - Natural Language:
Map the relationship network for MEP 124810 using committee co-membership data
MCP Client - TypeScript:
const result = await client.callTool('network_analysis', {
mepId: 124810,
analysisType: 'committee',
depth: 2
});
Example Response (abbreviated):
{
"content": [{
"type": "text",
"text": "{\"networkMetrics\":{\"density\":0.34,\"avgCentrality\":0.45,\"clusters\":5},\"centralNodes\":[{\"mepId\":124810,\"centralityScore\":0.82,\"clusterAssignment\":1,\"bridgingScore\":0.67}],\"crossPartyEdges\":42}"
}]
}
EP API Endpoints:
/meps,/corporate-bodies
Description: Track political group institutional-positioning scores based on seat-share proxy. Computes scores (-1 to +1), polarization index, and identifies consensus and divisive topics.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| groupId | string | No | - | Political group identifier (e.g., "EPP", "S&D"). Omit for all groups |
| timeframe | string | No | last_quarter | Time window: last_month, last_quarter, or last_year |
Claude Desktop - Natural Language:
Track the institutional positioning sentiment for the EPP group over the last quarter
MCP Client - TypeScript:
const result = await client.callTool('sentiment_tracker', {
groupId: 'EPP',
timeframe: 'last_quarter'
});
Example Response (abbreviated):
{
"content": [{
"type": "text",
"text": "{\"groupScores\":[{\"groupId\":\"EPP\",\"positioningScore\":0.72,\"trend\":\"stable\"}],\"polarizationIndex\":0.38,\"consensusTopics\":[\"defense\",\"trade\"],\"divisiveTopics\":[\"migration\",\"climate\"]}"
}]
}
EP API Endpoints:
/corporate-bodies
Description: Detect emerging political shifts, coalition fracture signals, and unusual patterns. Generates warnings with severity levels (CRITICAL/HIGH/MEDIUM/LOW), computes stability score (0-100).
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| sensitivity | string | No | medium | Detection sensitivity: low, medium, or high |
| focusArea | string | No | all | Focus area: coalitions, attendance, or all |
Claude Desktop - Natural Language:
Run the early warning system with high sensitivity focused on coalition dynamics
MCP Client - TypeScript:
const result = await client.callTool('early_warning_system', {
sensitivity: 'high',
focusArea: 'coalitions'
});
Example Response (abbreviated):
{
"content": [{
"type": "text",
"text": "{\"stabilityScore\":72,\"warnings\":[{\"severity\":\"HIGH\",\"type\":\"coalition_fracture\",\"description\":\"Unusual voting divergence detected in EPP-Renew bloc\",\"confidence\":0.85}],\"overallAssessment\":\"Moderate instability signals detected\"}"
}]
}
EP API Endpoints:
/meps,/meetings
Description: Cross-reference 2-10 MEP activities across voting, committee, legislative, and attendance dimensions. Returns ranked profiles, correlation matrix, outlier detection, and cluster analysis.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| mepIds | array of numbers | Yes | - | List of 2-10 MEP identifiers to compare |
| dimensions | array of strings | No | all | Dimensions to compare: voting, committee, legislative, attendance |
Claude Desktop - Natural Language:
Compare MEPs 124810, 124811, and 124812 across voting and committee dimensions
MCP Client - TypeScript:
const result = await client.callTool('comparative_intelligence', {
mepIds: [124810, 124811, 124812],
dimensions: ['voting', 'committee']
});
Example Response (abbreviated):
{
"content": [{
"type": "text",
"text": "{\"rankedProfiles\":[{\"mepId\":124810,\"overallScore\":0.87,\"rank\":1}],\"correlationMatrix\":[[1.0,0.65,0.42],[0.65,1.0,0.71],[0.42,0.71,1.0]],\"outliers\":[],\"clusters\":[{\"members\":[124811,124812],\"label\":\"high-committee-engagement\"}]}"
}]
}
EP API Endpoints:
/meps,/meetings
Description: Cross-tool OSINT intelligence correlation engine. Combines outputs from assess_mep_influence + detect_voting_anomalies (ELEVATED_ATTENTION alerts), early_warning_system + analyze_coalition_dynamics (COALITION_FRACTURE alerts), and optionally network_analysis + comparative_intelligence (COMPREHENSIVE_PROFILE alerts). Returns consolidated intelligence alerts with evidence chains and recommendations.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| mepIds | array of strings | Yes | - | MEP identifiers to cross-correlate (minimum 1, maximum 5) |
| groups | array of strings | No | - | Political groups for coalition fracture analysis (max 8, omit to use all major groups) |
| sensitivityLevel | string | No | MEDIUM | Alert sensitivity: HIGH, MEDIUM, or LOW โ HIGH surfaces more signals, LOW reduces noise |
| includeNetworkAnalysis | boolean | No | false | Run network centrality analysis (increases response time) |
Claude Desktop - Natural Language:
Run intelligence correlation for MEPs 124810 and 124811 with high sensitivity
MCP Client - TypeScript:
const result = await client.callTool('correlate_intelligence', {
mepIds: ['124810', '124811'],
groups: ['EPP', 'S&D'],
sensitivityLevel: 'HIGH',
includeNetworkAnalysis: true
});
Example Response (abbreviated):
{
"content": [{
"type": "text",
"text": "{\"alerts\":[{\"severity\":\"HIGH\",\"type\":\"cross_tool_correlation\",\"sources\":[\"early_warning_system\",\"analyze_coalition_dynamics\"],\"finding\":\"Coalition stress between EPP and S&D on migration policy\",\"evidenceChain\":[\"Voting divergence: 34%\",\"Attendance drop in joint committee sessions\"],\"confidence\":0.78}],\"summary\":{\"totalAlerts\":3,\"criticalCount\":0,\"highCount\":1}}"
}]
}
EP API Endpoints: Multiple (orchestrates other tools)
These tools provide direct access to all European Parliament Open Data API v2 endpoints.
Description: Get currently active Members of European Parliament (today's date). Returns only MEPs with active mandates. Unlike get_meps, this tool uses the EP API /meps/show-current endpoint which returns accurate country and politicalGroup data in responses.
โ Recommended for use when you need MEP country or political group information. All OSINT intelligence tools use this endpoint internally.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Claude Desktop - Natural Language:
Show me all currently active MEPs
MCP Client - TypeScript:
const result = await client.callTool('get_current_meps', { limit: 50 });
Description: Get incoming Members of European Parliament for the current parliamentary term. Returns MEPs who are newly joining.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
List the newly arriving MEPs for the current parliamentary term
MCP Client - TypeScript:
const result = await client.callTool('get_incoming_meps', { limit: 20 });
Description: Get outgoing Members of European Parliament for the current parliamentary term. Returns MEPs who are leaving parliament.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Which MEPs are leaving the European Parliament this term?
MCP Client - TypeScript:
const result = await client.callTool('get_outgoing_meps', { limit: 20 });
Description: Get homonym Members of European Parliament (MEPs with identical names) for the current parliamentary term. Useful for name disambiguation.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Are there any MEPs with identical names in the current parliament?
MCP Client - TypeScript:
const result = await client.callTool('get_homonym_meps', { limit: 50 });
Description: Get European Parliament plenary speeches and debate contributions. Supports single speech lookup by speechId or list with date range filtering.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| speechId | string | No | - | Specific speech ID for single lookup |
| dateFrom | string | No | - | Start date filter (YYYY-MM-DD) |
| dateTo | string | No | - | End date filter (YYYY-MM-DD) |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Claude Desktop - Natural Language:
Get plenary speeches from January 2024
MCP Client - TypeScript:
// List speeches in a date range
const result = await client.callTool('get_speeches', {
dateFrom: '2024-01-01',
dateTo: '2024-01-31',
limit: 20
});
// Get a specific speech
const speech = await client.callTool('get_speeches', {
speechId: 'SPEECH-12345'
});
Description: Get European Parliament legislative procedures. Supports single procedure lookup by processId or list with year filter.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| processId | string | No | - | Specific procedure ID (YYYY-NNNN format) for single lookup |
| year | number | No | - | Filter by year |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Claude Desktop - Natural Language:
Show me legislative procedures from 2024
MCP Client - TypeScript:
// List procedures by year
const result = await client.callTool('get_procedures', { year: 2024, limit: 20 });
// Get a specific procedure
const procedure = await client.callTool('get_procedures', {
processId: '2024-0006'
});
Description: Get events linked to a specific EP legislative procedure (hearings, debates, votes). Returns the timeline of events for a procedure.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| processId | string | Yes | - | Procedure ID (YYYY-NNNN format) |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Show me the timeline of events for procedure 2024-0006
MCP Client - TypeScript:
const result = await client.callTool('get_procedure_events', {
processId: '2024-0006',
limit: 50
});
Description: Get European Parliament adopted texts including legislative resolutions, positions, and non-legislative resolutions. Supports single document lookup by docId or list with year filter.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| docId | string | No | - | Specific document ID for single lookup |
| year | number | No | - | Filter by year |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Claude Desktop - Natural Language:
Get adopted texts from 2024
MCP Client - TypeScript:
const result = await client.callTool('get_adopted_texts', { year: 2024, limit: 20 });
Description: Get European Parliament events including hearings, conferences, seminars, and institutional events. Supports single event lookup by eventId or list with date range filtering.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| eventId | string | No | - | Specific event ID for single lookup |
| dateFrom | string | No | - | Start date filter (YYYY-MM-DD) |
| dateTo | string | No | - | End date filter (YYYY-MM-DD) |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Show me European Parliament events scheduled for March 2024
MCP Client - TypeScript:
const result = await client.callTool('get_events', {
dateFrom: '2024-03-01',
dateTo: '2024-03-31',
limit: 20
});
Description: Get activities linked to a specific EP plenary sitting (debates, votes, presentations). Requires a sitting ID.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| sittingId | string | Yes | - | Plenary sitting ID |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
What activities took place during plenary sitting MTG-PL-2024-01-15?
MCP Client - TypeScript:
const result = await client.callTool('get_meeting_activities', {
sittingId: 'MTG-PL-2024-01-15',
limit: 50
});
Description: Get decisions made in a specific EP plenary sitting. Returns adopted decisions and voting outcomes. Requires a sitting ID.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| sittingId | string | Yes | - | Plenary sitting ID |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
What decisions were made in plenary sitting MTG-PL-2024-01-15?
MCP Client - TypeScript:
const result = await client.callTool('get_meeting_decisions', {
sittingId: 'MTG-PL-2024-01-15',
limit: 50
});
Description: Get foreseen (planned) activities for a specific EP meeting/plenary sitting. Returns scheduled agenda items.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| sittingId | string | Yes | - | Plenary sitting ID |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
What is planned for the upcoming plenary sitting MTG-PL-2024-03-11?
MCP Client - TypeScript:
const result = await client.callTool('get_meeting_foreseen_activities', {
sittingId: 'MTG-PL-2024-03-11',
limit: 50
});
Description: Get plenary session documents for a specific EP meeting/plenary sitting. Returns session documents associated with the meeting. Data source: European Parliament Open Data Portal.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| sittingId | string | Yes | - | Meeting / sitting identifier |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Claude Desktop - Natural Language:
Get plenary session documents for sitting MTG-PL-2024-03-11
MCP Client - TypeScript:
const result = await client.callTool('get_meeting_plenary_session_documents', {
sittingId: 'MTG-PL-2024-03-11',
limit: 50
});
Description: Get plenary session document items for a specific EP meeting/plenary sitting. Returns individual agenda item documents for the meeting. Data source: European Parliament Open Data Portal.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| sittingId | string | Yes | - | Meeting / sitting identifier |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Claude Desktop - Natural Language:
Get individual agenda item documents for plenary sitting MTG-PL-2024-03-11
MCP Client - TypeScript:
const result = await client.callTool('get_meeting_plenary_session_document_items', {
sittingId: 'MTG-PL-2024-03-11',
limit: 50
});
Description: Get MEP declarations of financial interests filed under the Rules of Procedure. Supports single declaration lookup by docId or list with year filter. GDPR: Access is audit-logged.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| docId | string | No | - | Specific declaration document ID for single lookup |
| year | number | No | - | Filter by year |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Claude Desktop - Natural Language:
Get MEP financial declarations from 2024
MCP Client - TypeScript:
const result = await client.callTool('get_mep_declarations', { year: 2024, limit: 20 });
Description: Get European Parliament plenary documents. Supports single document lookup by docId or list with year filter.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| docId | string | No | - | Specific document ID for single lookup |
| year | number | No | - | Filter by year |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
List plenary documents from 2024
MCP Client - TypeScript:
const result = await client.callTool('get_plenary_documents', { year: 2024, limit: 20 });
Description: Get European Parliament committee documents. Supports single document lookup by docId or list with year filter.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| docId | string | No | - | Specific document ID for single lookup |
| year | number | No | - | Filter by year |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Get committee documents from 2024
MCP Client - TypeScript:
const result = await client.callTool('get_committee_documents', { year: 2024, limit: 20 });
Description: Get European Parliament plenary session documents (agendas, minutes, voting lists). Supports single document lookup by docId.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| docId | string | No | - | Specific document ID for single lookup |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Get plenary session documents including agendas and minutes
MCP Client - TypeScript:
const result = await client.callTool('get_plenary_session_documents', { limit: 20 });
Description: Get European Parliament plenary session document items. Returns individual items within plenary session documents.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Get individual items from plenary session documents
MCP Client - TypeScript:
const result = await client.callTool('get_plenary_session_document_items', {
limit: 50,
offset: 0
});
Description: Get European Parliament controlled vocabularies (standardized classification terms). Supports single vocabulary lookup by vocId.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| vocId | string | No | - | Specific vocabulary ID for single lookup |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Get the controlled vocabularies used by the European Parliament
MCP Client - TypeScript:
// List all vocabularies
const result = await client.callTool('get_controlled_vocabularies', { limit: 50 });
// Get a specific vocabulary
const vocab = await client.callTool('get_controlled_vocabularies', {
vocId: 'COMMITTEE_TYPE'
});
Description: Get external documents (non-EP documents such as Council positions, Commission proposals) from the European Parliament data portal. Supports single document lookup by docId.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| docId | string | No | - | Specific document ID for single lookup |
| year | number | No | - | Filter by year |
| limit | number | No | 50 | Maximum results (1-100) |
| offset | number | No | 0 | Pagination offset |
Get external documents like Council positions and Commission proposals from 2024
MCP Client - TypeScript:
const result = await client.callTool('get_external_documents', { year: 2024, limit: 20 });
Description: Get a specific event linked to a legislative procedure. Returns a single event for the specified procedure and event identifiers.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| processId | string | Yes | - | Legislative procedure identifier (e.g., "2024-0006") |
| eventId | string | Yes | - | Event identifier within the procedure |
Claude Desktop - Natural Language:
Get event EVT-001 from legislative procedure 2024-0006
MCP Client - TypeScript:
const result = await client.callTool('get_procedure_event_by_id', {
processId: '2024-0006',
eventId: 'EVT-001'
});
Example Response (abbreviated):
{
"content": [{
"type": "text",
"text": "{\"event\":{\"eventId\":\"EVT-001\",\"processId\":\"2024-0006\",\"type\":\"COMMITTEE_VOTE\",\"date\":\"2024-03-15\",\"title\":\"Committee vote on amendments\",\"outcome\":\"ADOPTED\",\"details\":{\"votesFor\":42,\"votesAgainst\":12,\"abstentions\":3}}}"
}]
}
Description: Retrieve precomputed European Parliament activity statistics covering parliamentary terms EP6โEP10 (2004โ2026), including monthly activity breakdowns, category rankings with percentiles, statistical analysis, political landscape history (group composition, fragmentation index, coalition dynamics), 30 OSINT-derived intelligence metrics (legislative efficiency, engagement indices, political concentration, 3-axis political compass, institutional stability, year-over-year dynamics), analytical commentary, and average-based predictions for 2027โ2031. Static data refreshed weekly by agentic workflow โ no live API calls.
๐ Visual Dashboard: See EP Political Landscape for comprehensive Mermaid chart visualizations of all statistics, political compass analysis, coalition scenarios, and derived intelligence metrics.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| yearFrom | number | No | 2004 | Start year for filtering (2004โ2031) |
| yearTo | number | No | 2026 | End year for filtering (2004โ2031) |
| category | string | No | all | Activity category: all, plenary_sessions, legislative_acts, roll_call_votes, committee_meetings, parliamentary_questions, resolutions, speeches, adopted_texts, political_groups, procedures, events, documents, mep_turnover, declarations |
| includePredictions | boolean | No | true | Include trend-based predictions for 2027โ2031 |
| includeMonthlyBreakdown | boolean | No | false | Include month-by-month activity data |
| includeRankings | boolean | No | true | Include percentile rankings and statistical analysis |
Get European Parliament activity statistics for 2019-2023 with predictions
MCP Client - TypeScript:
const result = await client.callTool('get_all_generated_stats', {
yearFrom: 2019,
yearTo: 2023,
category: 'all',
includePredictions: true,
includeRankings: true
});
The response includes:
| Field | Description |
|---|---|
coveragePeriod |
Underlying dataset range (always { from: 2004, to: 2026 }) |
requestedPeriod |
User-supplied year filter ({ from: yearFrom, to: yearTo }) |
yearlyStats |
Annual statistics per year with 13 activity metrics, political landscape, and derived intelligence |
yearlyStats[].derivedIntelligence |
30 OSINT metrics: legislative efficiency, engagement, concentration, 3-axis political compass, stability, YoY dynamics |
yearlyStats[].politicalLandscape |
Group composition, fragmentation index, coalition dynamics, quadrant distribution |
categoryRankings |
Per-category percentile rankings recomputed for the filtered range |
predictions |
Average-based extrapolations for 2027โ2031 with term-cycle adjustments |
analysisSummary |
Trend analysis, peak/lowest years, OSINT key findings, coverage note |
methodology |
Description of the statistical approach and data sources |
| Category | Description | Corresponding Tools |
|---|---|---|
plenary_sessions |
Plenary sessions held | get_plenary_sessions |
legislative_acts |
Legislative acts adopted | get_adopted_texts |
roll_call_votes |
Roll-call votes conducted | get_voting_records |
committee_meetings |
Committee meetings | get_committee_info |
parliamentary_questions |
Questions tabled | get_parliamentary_questions |
resolutions |
Resolutions adopted | get_adopted_texts |
speeches |
Speeches delivered | get_speeches |
adopted_texts |
Adopted texts | get_adopted_texts |
political_groups |
Political group composition | compare_political_groups |
procedures |
Legislative procedures | get_procedures |
events |
Parliamentary events | get_events |
documents |
Documents produced | search_documents |
mep_turnover |
MEP arrivals/departures | get_incoming_meps, get_outgoing_meps |
declarations |
MEP declarations | get_mep_declarations |
These tools provide access to European Parliament Open Data API v2 feed endpoints. Feed endpoints return recently updated records within a specified timeframe, enabling change-tracking and incremental data synchronization workflows.
All feed tools share these common parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date in YYYY-MM-DD format. Required when timeframe is custom |
Description: Get recently updated MEPs from the European Parliament feed endpoint. Returns MEP records that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
Claude Desktop - Natural Language:
Show me MEPs updated in the last week
MCP Client - TypeScript:
const result = await client.callTool('get_meps_feed', {
timeframe: 'one-week'
});
Description: Get recently updated events from the European Parliament feed endpoint. Returns event records that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
| activityType | string | No | - | Filter by activity type |
Claude Desktop - Natural Language:
Show me EP events updated today
MCP Client - TypeScript:
const result = await client.callTool('get_events_feed', {
timeframe: 'today'
});
Description: Get recently updated legislative procedures from the European Parliament feed endpoint. Returns procedure records that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
| processType | string | No | - | Filter by procedure/process type |
Claude Desktop - Natural Language:
What legislative procedures were updated this month?
MCP Client - TypeScript:
const result = await client.callTool('get_procedures_feed', {
timeframe: 'one-month'
});
Description: Get recently updated adopted texts from the European Parliament feed endpoint. Returns adopted text records that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
| workType | string | No | - | Filter by work type |
Claude Desktop - Natural Language:
Show me adopted texts updated in the past week
MCP Client - TypeScript:
const result = await client.callTool('get_adopted_texts_feed', {
timeframe: 'one-week'
});
Description: Get recently updated MEP declarations from the European Parliament feed endpoint. Returns MEP declaration records that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
| workType | string | No | - | Filter by work type |
Claude Desktop - Natural Language:
Show me MEP declarations updated this month
MCP Client - TypeScript:
const result = await client.callTool('get_mep_declarations_feed', {
timeframe: 'one-month'
});
Description: Get recently updated documents from the European Parliament feed endpoint. Returns document records that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
Claude Desktop - Natural Language:
What documents were updated in the last day?
MCP Client - TypeScript:
const result = await client.callTool('get_documents_feed', {
timeframe: 'one-day'
});
Description: Get recently updated plenary documents from the European Parliament feed endpoint. Returns plenary document records that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
Claude Desktop - Natural Language:
Show me plenary documents updated this week
MCP Client - TypeScript:
const result = await client.callTool('get_plenary_documents_feed', {
timeframe: 'one-week'
});
Description: Get recently updated committee documents from the European Parliament feed endpoint. Returns committee document records that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
Claude Desktop - Natural Language:
Get committee documents updated in the past week
MCP Client - TypeScript:
const result = await client.callTool('get_committee_documents_feed', {
timeframe: 'one-week'
});
Description: Get recently updated plenary session documents from the European Parliament feed endpoint. Returns plenary session document records that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
Claude Desktop - Natural Language:
Show plenary session documents updated today
MCP Client - TypeScript:
const result = await client.callTool('get_plenary_session_documents_feed', {
timeframe: 'today'
});
Description: Get recently updated external documents from the European Parliament feed endpoint. Returns external document records (Council positions, Commission proposals) that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
| workType | string | No | - | Filter by work type |
Claude Desktop - Natural Language:
Show me external documents updated in the last month
MCP Client - TypeScript:
const result = await client.callTool('get_external_documents_feed', {
timeframe: 'one-month'
});
Description: Get recently updated parliamentary questions from the European Parliament feed endpoint. Returns parliamentary question records that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
Claude Desktop - Natural Language:
What parliamentary questions were updated this week?
MCP Client - TypeScript:
const result = await client.callTool('get_parliamentary_questions_feed', {
timeframe: 'one-week'
});
Description: Get recently updated corporate bodies (committees, delegations, inter-parliamentary delegations) from the European Parliament feed endpoint. Returns corporate body records that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
Claude Desktop - Natural Language:
Show me corporate bodies updated in the last month
MCP Client - TypeScript:
const result = await client.callTool('get_corporate_bodies_feed', {
timeframe: 'one-month'
});
Description: Get recently updated controlled vocabularies from the European Parliament feed endpoint. Returns controlled vocabulary records that have been modified within the specified timeframe.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| timeframe | string | No | one-week | Time window: today, one-day, one-week, one-month, or custom |
| startDate | string | Conditional | - | Start date (YYYY-MM-DD). Required when timeframe is custom |
Claude Desktop - Natural Language:
Have any controlled vocabularies been updated recently?
MCP Client - TypeScript:
const result = await client.callTool('get_controlled_vocabularies_feed', {
timeframe: 'one-week'
});
Pre-built intelligence analysis prompt templates for common parliamentary research workflows. For the exact argument schemas, refer to the prompt definitions in src/prompts/index.ts.
| Prompt | Description | Arguments |
|---|---|---|
mep_briefing |
Comprehensive MEP intelligence briefing with voting record, committee work, and influence assessment | mepId (required), period? |
coalition_analysis |
Coalition dynamics and voting bloc analysis across political groups | policyArea?, period? |
legislative_tracking |
Legislative procedure tracking report with timeline and status | procedureId?, committee? |
political_group_comparison |
Multi-dimensional comparison of political groups | groups? |
committee_activity_report |
Committee workload, engagement, and document production report | committeeId (required) |
voting_pattern_analysis |
Voting pattern trend detection and anomaly identification | topic?, mepId? |
country_delegation_analysis |
Country delegation composition, voting cohesion, and cross-party dynamics | country (required), period? |
// Request a pre-built prompt template
const prompt = await client.getPrompt('mep_briefing', { mepId: 'MEP-124810' });
// Returns structured messages for LLM consumption
Direct data access via European Parliament resource URIs using the ep:// scheme.
| Resource URI | Description |
|---|---|
ep://meps |
List of all current MEPs |
ep://meps/{mepId} |
Individual MEP profile and details |
ep://committees/{committeeId} |
Committee information and membership |
ep://plenary-sessions |
Recent plenary session listing |
ep://votes/{sessionId} |
Voting records for a specific session |
ep://political-groups |
Political group listing with seat counts |
ep://procedures/{procedureId} |
Legislative procedure details (YYYY-NNNN format) |
ep://plenary/{plenaryId} |
Specific plenary session details |
ep://documents/{documentId} |
Legislative document details |
// Read a resource directly
const meps = await client.readResource('ep://meps');
const mepDetails = await client.readResource('ep://meps/MEP-124810');
const committee = await client.readResource('ep://committees/ENVI');
const procedure = await client.readResource('ep://procedures/2024-0006');
const document = await client.readResource('ep://documents/DOC-12345');
const plenary = await client.readResource('ep://plenary/MTG-PL-2024-01-15');
// Step 1: Find MEP by country
const meps = await client.callTool('get_meps', {
country: 'SE',
limit: 10
});
// Step 2: Get detailed information
const mepDetails = await client.callTool('get_mep_details', {
id: 'MEP-124810'
});
// Step 3: Analyze voting patterns
const votingAnalysis = await client.callTool('analyze_voting_patterns', {
mepId: 'MEP-124810',
dateFrom: '2024-01-01',
compareWithGroup: true
});
// Step 4: Generate activity report
const report = await client.callTool('generate_report', {
reportType: 'MEP_ACTIVITY',
subjectId: 'MEP-124810',
dateFrom: '2024-01-01',
dateTo: '2024-12-31'
});
// Step 1: Search for climate-related documents
const documents = await client.callTool('search_documents', {
keyword: 'climate change renewable',
documentType: 'REPORT',
dateFrom: '2024-01-01',
limit: 50
});
// Step 2: Track specific legislation
const tracking = await client.callTool('track_legislation', {
procedureId: '2024/0001(COD)'
});
// Step 3: Get voting records on climate topics
const votes = await client.callTool('get_voting_records', {
topic: 'climate',
dateFrom: '2024-01-01',
limit: 100
});
// Step 1: Get committee information
const committee = await client.callTool('get_committee_info', {
abbreviation: 'ENVI'
});
// Step 2: List committee members
const members = await client.callTool('get_meps', {
committee: 'ENVI',
active: true,
limit: 100
});
// Step 3: Generate committee report
const report = await client.callTool('generate_report', {
reportType: 'COMMITTEE_PERFORMANCE',
subjectId: 'COMM-ENVI',
dateFrom: '2024-01-01',
dateTo: '2024-12-31'
});
// Step 1: Get all MEPs from political group
const groupMEPs = await client.callTool('get_meps', {
group: 'S&D',
active: true,
limit: 100
});
// Step 2: Analyze each MEP's voting patterns
for (const mep of groupMEPs.data) {
const analysis = await client.callTool('analyze_voting_patterns', {
mepId: mep.id,
dateFrom: '2024-01-01',
compareWithGroup: true
});
// Process analysis...
}
// Step 3: Generate voting statistics
const stats = await client.callTool('generate_report', {
reportType: 'VOTING_STATISTICS',
dateFrom: '2024-01-01',
dateTo: '2024-12-31'
});
// Good: Reasonable page size with pagination
async function getAllMEPs() {
const meps = [];
let offset = 0;
const limit = 50; // Optimal page size
while (true) {
const result = await client.callTool('get_meps', {
limit,
offset,
active: true
});
const data = JSON.parse(result.content[0].text);
meps.push(...data.data);
if (data.data.length < limit) break; // No more pages
offset += limit;
}
return meps;
}
// Implement exponential backoff
async function callToolWithRetry(toolName, params, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await client.callTool(toolName, params);
} catch (error) {
if (error.message.includes('Rate limit')) {
const delay = Math.pow(2, i) * 1000; // Exponential backoff
await new Promise(resolve => setTimeout(resolve, delay));
} else {
throw error;
}
}
}
throw new Error('Max retries exceeded');
}
// Validate inputs before calling tools
function validateCountryCode(code: string): boolean {
return /^[A-Z]{2}$/.test(code);
}
function validateDateFormat(date: string): boolean {
return /^\d{4}-\d{2}-\d{2}$/.test(date);
}
// Use validation
if (!validateCountryCode(countryInput)) {
throw new Error('Invalid country code format. Use ISO 3166-1 alpha-2 (e.g., "SE")');
}
const meps = await client.callTool('get_meps', {
country: countryInput,
limit: 50
});
// Comprehensive error handling
async function safeFetchMEP(mepId: string) {
try {
const result = await client.callTool('get_mep_details', { id: mepId });
return JSON.parse(result.content[0].text);
} catch (error) {
if (error instanceof Error) {
if (error.message.includes('ValidationError')) {
console.error('Invalid MEP ID format:', mepId);
} else if (error.message.includes('NotFoundError')) {
console.error('MEP not found:', mepId);
} else if (error.message.includes('RateLimitError')) {
console.error('Rate limit exceeded, retry later');
} else {
console.error('Unexpected error:', error.message);
}
}
return null;
}
}
// Implement client-side caching for frequently accessed data
class MEPCache {
private cache = new Map<string, { data: any, timestamp: number }>();
private readonly TTL = 15 * 60 * 1000; // 15 minutes
async getMEP(client: any, mepId: string) {
const cached = this.cache.get(mepId);
if (cached && Date.now() - cached.timestamp < this.TTL) {
return cached.data; // Return cached data
}
// Fetch fresh data
const result = await client.callTool('get_mep_details', { id: mepId });
const data = JSON.parse(result.content[0].text);
this.cache.set(mepId, { data, timestamp: Date.now() });
return data;
}
}
// Query data in manageable chunks
async function getVotesForYear(mepId: string, year: number) {
const months = [];
for (let month = 1; month <= 12; month++) {
const dateFrom = `${year}-${String(month).padStart(2, '0')}-01`;
const dateTo = `${year}-${String(month).padStart(2, '0')}-${getDaysInMonth(month, year)}`;
const result = await client.callTool('get_voting_records', {
mepId,
dateFrom,
dateTo,
limit: 100
});
months.push(JSON.parse(result.content[0].text));
}
return months;
}
Cause: Invalid input parameters
Example:
{
"error": "ValidationError: country must match pattern ^[A-Z]{2}$"
}
Solution:
Cause: Exceeded 100 requests per 15 minutes
Example:
{
"error": "RateLimitError: Rate limit exceeded, retry in 300 seconds"
}
Solution:
Cause: Resource doesn't exist
Example:
{
"error": "NotFoundError: MEP with ID 'MEP-999999' not found"
}
Solution:
Cause: European Parliament API issues
Example:
{
"error": "APIError: Failed to fetch data from European Parliament API"
}
Solution:
async function robustToolCall(toolName: string, params: any) {
try {
const result = await client.callTool(toolName, params);
return {
success: true,
data: JSON.parse(result.content[0].text)
};
} catch (error) {
if (error instanceof Error) {
// Log error details
console.error(`Tool ${toolName} failed:`, error.message);
// Categorize error
let errorType = 'UNKNOWN';
if (error.message.includes('ValidationError')) errorType = 'VALIDATION';
else if (error.message.includes('RateLimitError')) errorType = 'RATE_LIMIT';
else if (error.message.includes('NotFoundError')) errorType = 'NOT_FOUND';
else if (error.message.includes('APIError')) errorType = 'API_ERROR';
return {
success: false,
error: errorType,
message: error.message
};
}
return {
success: false,
error: 'UNKNOWN',
message: 'An unexpected error occurred'
};
}
}
Personal Data Handling:
Best Practices:
// Don't store MEP personal data long-term
const mep = await client.callTool('get_mep_details', { id: mepId });
// Use data immediately
displayMEPInfo(mep);
// Don't persist in database without explicit purpose
This MCP server complies with:
For complete security documentation, see SECURITY.md.
Limits:
Headers (when available):
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 85
X-RateLimit-Reset: 1640995200
This MCP server powers Hack23's political intelligence ecosystem โ disrupting journalism with AI-generated news coverage and real-time analysis of democratic governments.
| Project | Integration | Use Case |
|---|---|---|
| EU Parliament Monitor | MCP tools + prompts | Automated MEP activity tracking, voting pattern dashboards, committee workload monitoring |
| Riksdagsmonitor (GitHub) | Riksdag MCP + this server | Cross-parliament comparison between EU and Swedish Parliament data |
| Citizen Intelligence Agency | Full OSINT tool suite | Comprehensive political intelligence analysis across institutions |
// Step 1: Get Swedish MEPs from EU Parliament
const swedishMEPs = await epClient.callTool('get_meps', { country: 'SE' });
// Step 2: Analyze Swedish delegation cohesion
const delegation = await epClient.callTool('analyze_country_delegation', { country: 'SE' });
// Step 3: Score individual MEP influence
const influence = await epClient.callTool('assess_mep_influence', { mepId: 'MEP-124810' });
// Step 4: Compare with riksdagsmonitor.com data for full picture
// โ Cross-reference EU voting patterns with national parliament positions
The European Parliament MCP Server is the most feature-rich political MCP server in a growing global ecosystem of 35+ government and parliamentary open data MCP servers spanning 15+ countries.
| Country | Server | Key Capabilities |
|---|---|---|
| ๐ช๐บ EU | European Parliament MCP | 61 tools โ MEP profiling, coalition analysis, anomaly detection, political landscape, longitudinal statistics |
| ๐บ๐ธ USA | Congress.gov API MCP | Bills, members, votes, committees |
| ๐ฌ๐ง UK | Parliament MCP | Hansard, members, debates, divisions |
| ๐ธ๐ช Sweden | Riksdag & Regering MCP | Parliament & government data |
| ๐ณ๐ฑ Netherlands | OpenTK MCP | Tweede Kamer documents |
| ๐ต๐ฑ Poland | Sejm MCP | Parliament data + legislation |
| ๐ฎ๐ฑ Israel | Knesset MCP | Knesset parliament API |
| ๐ง๐ท Brazil | Senado BR MCP | Federal Senate data |
| Country | Server | Data Portal |
|---|---|---|
| ๐ซ๐ท France | data.gouv.fr MCP | data.gouv.fr |
| ๐ฎ๐ฑ Israel | Data.gov.il MCP | data.gov.il |
| ๐ฎ๐ณ India | Data.gov.in MCP | data.gov.in |
| ๐ธ๐ฌ Singapore | Gahmen MCP | data.gov.sg |
| ๐ฆ๐บ Australia | ABS MCP | abs.gov.au |
| ๐ Global | CKAN MCP Server | Any CKAN portal |
| ๐ Global | OpenGov MCP Server | Socrata portals |
๐ See README.md for the complete 35+ server directory with OSINT capability comparison.
Issues & Questions:
Security Issues:
Built with โค๏ธ by Hack23 AB
ISMS-compliant open source demonstrating security excellence