European Parliament MCP Server API - v1.1.26
    Preparing search index...

    API Usage Guide

    Hack23 Logo

    European Parliament MCP Server - API Usage Guide

    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.

    • Type Safety: All inputs validated with Zod schemas
    • Performance: <200ms cached response times
    • Rate Limiting: 100 requests per 15 minutes per IP
    • GDPR Compliance: Privacy-first data handling
    • MCP Standard: Full compliance with MCP specification

    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_meps tool uses the EP API /meps endpoint which supports server-side filtering but does not return country or politicalGroup in responses. Results will show country: "Unknown" and politicalGroup: "Unknown". For country and political group data, use get_current_meps instead. All OSINT intelligence tools automatically use get_current_meps for 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
    1. Find MEPs by Country: Filter by country code to get national delegation
    2. Political Group Analysis: List all members of a specific political group
    3. Committee Membership: Find MEPs serving on specific committees
    4. Pagination: Use limit and offset for large result sets

    Description: 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
    1. MEP Profile: Get complete MEP information for profile pages
    2. Voting Analysis: Access voting statistics for analysis
    3. Contact Information: Retrieve email and office details
    4. Committee Work: View committee assignments

    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
    1. Session Calendar: List upcoming plenary sessions
    2. Historical Analysis: Query past sessions by date range
    3. Document Tracking: Access session documents and agendas

    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
    });
    1. MEP Accountability: Track how specific MEPs vote
    2. Topic Analysis: Find all votes on specific topics
    3. Session Votes: Get all votes from a plenary session

    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 docId for single document lookup, or keyword for 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
    1. Legislative Research: Find documents on specific topics
    2. Committee Work: Search documents by committee
    3. Author Tracking: Find documents by specific MEP

    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`);
    1. Committee Overview: Get committee structure and leadership
    2. Member Lookup: Find MEPs serving on specific committees
    3. Responsibility Mapping: Understand committee jurisdictions

    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
    });
    1. MEP Accountability: Track questions from specific MEPs
    2. Topic Research: Find questions on specific policy areas
    3. Answer Monitoring: Check if questions have been answered

    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}%`);
    1. MEP Performance: Analyze attendance and voting activity
    2. Political Alignment: Compare MEP votes with party line
    3. Cross-Party Analysis: Identify bipartisan voting patterns
    4. Topic Focus: Discover MEP's key policy areas

    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]}`);
    1. Legislation Monitoring: Track bill progress through Parliament
    2. Timeline Analysis: View complete legislative timeline
    3. Amendment Tracking: Monitor proposed and adopted amendments
    4. Committee Work: See committee assignments and rapporteurs

    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'
    });
    1. MEP_ACTIVITY: Individual MEP performance and activity

      • Voting participation and statistics
      • Committee involvement
      • Parliamentary questions submitted
      • Reports authored
    2. COMMITTEE_PERFORMANCE: Committee productivity analysis

      • Meeting frequency
      • Legislative output
      • Member participation rates
    3. VOTING_STATISTICS: Parliament-wide voting analysis

      • Overall voting activity
      • Adoption rates
      • Political group alignment patterns
    4. LEGISLATION_PROGRESS: Legislative activity overview

      • New proposals submitted
      • Completed procedures
      • Ongoing procedures and timelines
    1. Performance Review: Generate MEP activity reports
    2. Committee Analysis: Assess committee productivity
    3. Statistical Analysis: Parliament-wide voting trends
    4. Progress Tracking: Monitor legislative progress

    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 mepId and groupId โ€” 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:

    • Verify parameter format against schema
    • Use ISO standard codes (country, language)
    • Validate dates as YYYY-MM-DD
    • Check min/max constraints

    Cause: Exceeded 100 requests per 15 minutes

    Example:

    {
    "error": "RateLimitError: Rate limit exceeded, retry in 300 seconds"
    }

    Solution:

    • Implement request throttling
    • Use exponential backoff
    • Cache frequently accessed data
    • Batch requests when possible

    Cause: Resource doesn't exist

    Example:

    {
    "error": "NotFoundError: MEP with ID 'MEP-999999' not found"
    }

    Solution:

    • Verify ID exists using list tools first
    • Handle 404 gracefully in application
    • Provide user-friendly error messages

    Cause: European Parliament API issues

    Example:

    {
    "error": "APIError: Failed to fetch data from European Parliament API"
    }

    Solution:

    • Implement retry logic with backoff
    • Check EP API status
    • Provide fallback behavior
    • Log errors for monitoring
    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:

    • MEP contact information (email, phone) is public but must be handled responsibly
    • Do not cache personal data longer than necessary (max 15 minutes)
    • All data access is logged for audit purposes
    • Support data subject rights (access, rectification, erasure)

    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:

    • ISO 27001 A.12.4.1 - Event logging and monitoring
    • NIST CSF 2.0 PR.DS-2 - Data-in-transit protection
    • CIS Controls v8.1 3.3 - Data protection in transit

    For complete security documentation, see SECURITY.md.

    Limits:

    • 100 requests per 15 minutes per IP address
    • Applied per tool, not globally
    • Shared across all MCP clients from same IP

    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