npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

european-parliament-mcp-server

v1.2.19

Published

Model Context Protocol server for European Parliament open data

Readme

ISMS OpenSSF Best Practices Ask DeepWiki

📊 Quality Metrics & Documentation

📋 Overview

The European Parliament MCP Server implements the Model Context Protocol (MCP) to provide AI assistants, IDEs, and other MCP clients with structured access to European Parliament open datasets. Access information about MEPs, plenary sessions, committees, legislative documents, and parliamentary questions through a secure, type-safe TypeScript/Node.js implementation.

🎯 Key Features

  • 🔌 Full MCP Implementation: 62 tools (8 core + 3 advanced + 15 OSINT + 8 Phase 4 + 15 Phase 5 + 13 feed), 9 Resources, and 7 Prompts
  • 🏛️ Complete EP API v2 Coverage: All European Parliament Open Data API endpoints covered
  • 🕵️ OSINT Intelligence: MEP influence scoring, coalition analysis, anomaly detection
  • 🔒 Security First: ISMS-compliant, GDPR-ready, SLSA Level 3 provenance
  • 🚀 High Performance: <200ms API responses, intelligent caching, rate limiting
  • 📊 Type Safety: TypeScript strict mode + Zod runtime validation
  • 🧪 Well-Tested: 80%+ code coverage, 1130+ unit tests, 71 E2E test cases
  • 📚 Complete Documentation: Architecture, TypeDoc API (HTML + Markdown), security guidelines

🌍 Hack23 Political Intelligence Ecosystem

This MCP server is the EU data backbone of Hack23's mission to disrupt parliamentary journalism with AI-generated political intelligence and real-time accountability analysis — increasing democratic transparency through structured open-source intelligence (OSINT) tradecraft applied to public legislative data.

🎯 Vision: AI-Powered Democratic Transparency

Hack23 AB builds open-source intelligence platforms that put rigorous, evidence-based political analysis in the hands of every citizen, journalist, researcher and policymaker. By combining MCP servers, agentic AI newsrooms, and open parliamentary data, we produce automated intelligence products — coalition analysis, voting-pattern decoding, MEP/MP influence scoring, legislative-pipeline forecasting — that previously required well-funded lobbying organisations or in-house policy units to generate.

"Democratising access to political intelligence — what used to require a team of analysts can now be done by any citizen with an AI assistant."

The portfolio is non-partisan, fully open-source (Apache-2.0), operated under the Hack23 ISMS with full ISO 27001:2022 / NIST CSF 2.0 / CIS Controls v8.1 alignment, GDPR-by-design, and architecturally engineered so it cannot be weaponised for partisan influence: equal treatment of all political groups, public-data only, no user accounts, no ads, no tracking.

🧭 The Ecosystem at a Glance

%%{init: {"theme":"base","themeVariables":{"primaryColor":"#6366F1","primaryTextColor":"#fff","primaryBorderColor":"#4F46E5","lineColor":"#94A3B8","secondaryColor":"#003399","tertiaryColor":"#00338D","background":"#0F172A"}}}%%
graph LR
    subgraph SOURCES["📡 Primary Open-Data Sources"]
        EP["🇪🇺 European Parliament<br/>Open Data Portal v2<br/><i>data.europarl.europa.eu</i>"]
        RD["🇸🇪 Riksdagen Open Data<br/><i>data.riksdagen.se</i>"]
        REG["🇸🇪 Regeringskansliet<br/><i>regeringen.se</i>"]
        IMF["💰 IMF / World Bank<br/><i>economic context</i>"]
    end

    subgraph MCP["🔌 MCP Servers"]
        EPMCP["<b>European-Parliament-<br/>MCP-Server</b><br/>62 tools · 9 resources<br/>7 prompts · TS strict<br/><i>(this repository)</i>"]
        RRMCP["riksdag-regering MCP<br/>32+ tools"]
    end

    subgraph PRODUCTS["📰 AI-Driven Public Platforms"]
        EUPM["🏛️ <b>EU Parliament Monitor</b><br/>euparliamentmonitor.com<br/>8 unified gh-aw workflows<br/>51-artifact analysis<br/>14 languages"]
        RM["🗳️ <b>Riksdagsmonitor</b><br/>riksdagsmonitor.com<br/>11 agentic workflows<br/>91 skills · 14 languages<br/>Tidö coalition tracker"]
        CIA["🕵️ <b>Citizen Intelligence<br/>Agency (CIA)</b><br/>Java/Spring backend<br/>15 subsystems · 1971–2024<br/>3.5M votes · 109K docs"]
    end

    subgraph CITIZENS["👥 Citizens · Journalists · Researchers · NGOs"]
        AUDIENCE["AI assistants · Dashboards · 14-language news · Intelligence briefings"]
    end

    EP --> EPMCP
    RD --> RRMCP
    REG --> RRMCP
    EPMCP --> EUPM
    RRMCP --> RM
    RM <-->|"15 CIA subsystems<br/>nightly sync"| CIA
    IMF -.->|"economic context"| EUPM
    IMF -.->|"economic context"| RM
    EUPM --> AUDIENCE
    RM --> AUDIENCE
    CIA --> AUDIENCE
    EPMCP -.->|"AI assistants<br/>Claude · Cursor · VS Code"| AUDIENCE

    style EPMCP fill:#6366F1,stroke:#4F46E5,color:#fff,stroke-width:3px
    style EP fill:#003399,stroke:#FFCC00,color:#fff
    style RD fill:#00338D,stroke:#FECC00,color:#fff
    style REG fill:#00338D,stroke:#FECC00,color:#fff
    style EUPM fill:#003399,stroke:#FFCC00,color:#fff
    style RM fill:#00338D,stroke:#FECC00,color:#fff
    style CIA fill:#1B5E20,stroke:#43A047,color:#fff
    style AUDIENCE fill:#7B1FA2,stroke:#9C27B0,color:#fff

This MCP server's role: the canonical, type-safe TypeScript bridge between the European Parliament Open Data Portal and any MCP-aware AI client (Claude Desktop, VS Code, Cursor, GitHub Copilot) — and the upstream data layer that powers the EU Parliament Monitor newsroom. Every tool is Zod-validated, audit-logged, GDPR-aware, and SLSA Level 3 attested.

🗂️ Portfolio Comparison Matrix

🇪🇺 EU Parliament Monitor — euparliamentmonitor.com

European Parliament Political Intelligence Platform🧠 Political intelligence · 🔍 Radical transparency · 🗳️ Democratic accountability · 🤖 AI-generated news in 14 languages

Live Site Political Intelligence Hub Site Map OpenSSF Scorecard OpenSSF Best Practices SLSA 3 License ISMS Ask DeepWiki News Generation CodeQL Test and Report E2E Tests Release

🗳️ Riksdagsmonitor — riksdagsmonitor.com

Swedish Political Intelligence Platform🕵️ Political intelligence · 🔍 Democratic transparency · 🤖 AI-generated news · 📊 50+ years of evidence

OpenSSF Scorecard Quality Checks Dependency Review CodeQL JavaScript Testing Translation Validation Release OpenSSF Best Practices License ISMS ISO 27001 NIST CSF CIS Controls Ask DeepWiki

🕵️ Citizen Intelligence Agency (CIA)

Political transparency platform — Java/Spring data backbone behind Riksdagsmonitor's historical evidence layer

CII Best Practices OpenSSF Scorecard SLSA 3 Verify & Deploy Scorecard supply-chain security Quality Gate Status Security Rating Maintainability Rating Reliability Rating Ask DeepWiki

🌍 Shared Across the Portfolio

| Dimension | Coverage | |:----------|:---------| | 🌐 Languages | 14 — English · Swedish · Danish · Norwegian · Finnish · German · French · Spanish · Dutch · Arabic (RTL) · Hebrew (RTL) · Japanese · Korean · Chinese | | ♿ Accessibility | WCAG 2.1 AA · keyboard navigable · screen-reader optimised · 4.5:1 contrast · responsive 320 px → 1440 px+ | | 🔒 Compliance | ISO 27001:2022 · NIST CSF 2.0 · CIS Controls v8.1 · GDPR · NIS2 · EU CRA | | 🛡️ Supply chain | SHA-pinned GitHub Actions · step-security/harden-runner · Dependabot · CodeQL · Secret Scanning · SLSA Level 3 · SPDX SBOM | | 📜 License | Apache License 2.0 across the entire portfolio | | 🏢 Operator | Hack23 AB (Org.nr 559534-7807) — Swedish cybersecurity & open-source intelligence consultancy | | 🛡️ ISMS | Hack23 ISMS-PUBLIC — fully documented information-security management system |

🔗 Hack23 Portfolio Quick Links


🔐 Security & Compliance


🚀 Quick Start

Run with npx (No Installation Required)

npx -y european-parliament-mcp-server

Prerequisites

  • Node.js 25.x or higher
  • npm 10.x or higher

Installation

Option 1: Install from npm (Recommended)

# Install the package globally
npm install -g european-parliament-mcp-server

# Or install as a dependency in your project
npm install european-parliament-mcp-server

Option 2: Install from source

# Clone the repository
git clone https://github.com/Hack23/European-Parliament-MCP-Server.git
cd European-Parliament-MCP-Server

# Install dependencies
npm install

# Build the project
npm run build

# Run tests
npm test

Usage with MCP Client

Claude Desktop Configuration (npm install)

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "european-parliament": {
      "command": "npx",
      "args": ["european-parliament-mcp-server"],
      "env": {
        "EP_API_KEY": "your-api-key-if-needed"
      }
    }
  }
}

Claude Desktop Configuration (source install)

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "european-parliament": {
      "command": "node",
      "args": ["/path/to/European-Parliament-MCP-Server/dist/index.js"],
      "env": {
        "EP_API_KEY": "your-api-key-if-needed"
      }
    }
  }
}

VS Code Extension

Configure in .vscode/mcp.json:

{
  "servers": {
    "european-parliament": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "european-parliament-mcp-server"]
    }
  }
}

Cursor IDE Configuration

Add to ~/.cursor/mcp.json (or project-level .cursor/mcp.json):

{
  "mcpServers": {
    "european-parliament": {
      "command": "npx",
      "args": ["european-parliament-mcp-server"],
      "env": {}
    }
  }
}

Custom Timeout Configuration

Use --timeout <ms> to override the default 60 s request timeout. This is especially useful in copilot-mcp.json or other contexts where the env field may not reliably propagate:

{
  "args": ["european-parliament-mcp-server", "--timeout", "90000"]
}

Precedence: --timeout CLI arg > EP_REQUEST_TIMEOUT_MS env var > default (60 000 ms).

Note: The procedures/feed and events/feed endpoints automatically use an extended 120 s timeout because these EP API endpoints are significantly slower than others. If you experience timeouts with one-month timeframes, consider using year-based queries (e.g., get_procedures({ year: 2026 })) as a faster alternative.


📚 Documentation

🌐 Documentation Portal

📖 Complete Documentation Site - Live documentation portal with:

  • 📖 API Reference (HTML) - TypeDoc generated API documentation with search, hierarchy navigation, and full type information
  • 📖 API Reference (Markdown) - SEO-friendly Markdown API documentation
  • 📊 Coverage Reports - Test coverage analysis
  • Test Reports - Unit and E2E test results
  • 🔐 Build Attestations - SLSA Level 3 provenance
  • 📦 SBOM - Software Bill of Materials
  • 🗺️ Sitemap - Auto-generated sitemap for search engines

💡 Note: Documentation is automatically generated and committed with each release via npm run docs:build

Generated API Documentation

The API documentation is generated using TypeDoc with the following plugins:

| Plugin | Purpose | |--------|---------| | typedoc | Core HTML documentation generator | | typedoc-plugin-markdown | Generates SEO-friendly Markdown alongside HTML | | typedoc-plugin-mdn-links | Links TypeScript built-in types to MDN documentation | | typedoc-plugin-zod | Renders Zod schema definitions as readable type documentation |

Generate documentation locally:

npm run docs          # HTML API docs → docs/api/
npm run docs:md       # Markdown API docs → docs/api-markdown/
npm run docs:build    # Full documentation build (HTML + MD + coverage + test reports)

Core Documentation

Additional Documentation


🏗️ Architecture Overview

graph TB
    Client[MCP Client<br/>Claude / VS Code / Cursor] -->|MCP Protocol stdio| Server[EP MCP Server<br/>TypeScript/Node.js]

    subgraph "MCP Server (src/)"
        direction TB
        Tools[🔧 61 Tools<br/>getMEPs · analyzeCoalition<br/>assessMepInfluence · …]
        Resources["📦 9 Resources<br/>ep://meps/\{mepId\}<br/>ep://procedures/\{procedureId\} · …"]
        Prompts[💬 7 Prompts<br/>mep_briefing<br/>coalition_analysis · …]
    end

    Server --> Tools
    Server --> Resources
    Server --> Prompts

    subgraph "Infrastructure"
        Cache[LRU Cache<br/>500 entries · 15 min TTL]
        RateLimiter[Rate Limiter<br/>100 req/min]
        AuditLog[Audit Logger<br/>GDPR Article 30]
    end

    Tools --> EPClient[EuropeanParliamentClient<br/>Facade → 8 sub-clients]
    Resources --> EPClient
    EPClient --> Cache
    EPClient --> RateLimiter
    EPClient --> AuditLog
    EPClient -->|HTTPS/TLS 1.3| EPAPI[European Parliament<br/>Open Data API v2<br/>data.europarl.europa.eu]

    style Server fill:#4CAF50,stroke:#2E7D32,color:#fff
    style EPClient fill:#2196F3,stroke:#1565C0,color:#fff
    style EPAPI fill:#9C27B0,stroke:#6A1B9A,color:#fff
    style Cache fill:#FF9800,stroke:#E65100,color:#fff
    style RateLimiter fill:#F44336,stroke:#B71C1C,color:#fff
    style AuditLog fill:#607D8B,stroke:#37474F,color:#fff

Data flow: MCP client sends a tool call → server validates input (Zod) → EP client checks cache → on miss, fetches from EP API (rate-limited) → response cached and returned as structured JSON. All personal data access is audit-logged per GDPR Article 30.


🔌 MCP Tools (62 Total)

62 tools organized by capability — OSINT intelligence first, then analytical, data access, feed endpoints, and reference tools. Every tool includes Zod input validation, caching, and rate limiting.

🗺️ Political Intelligence Coverage Map

graph TB
    subgraph OSINT["🕵️ OSINT Intelligence — 15 Tools"]
        direction LR
        subgraph MEP["MEP Profiling"]
            A1["assess_mep_influence"]
            A2["comparative_intelligence"]
            A3["network_analysis"]
            A4["track_mep_attendance"]
        end
        subgraph COALITION["Coalition Dynamics"]
            B1["analyze_coalition_dynamics"]
            B2["compare_political_groups"]
            B3["detect_voting_anomalies"]
            B4["sentiment_tracker"]
        end
        subgraph STRATEGY["Strategic Warning"]
            C1["early_warning_system"]
            C2["generate_political_landscape"]
            C3["correlate_intelligence"]
        end
        subgraph LEG_INTEL["Legislative Intelligence"]
            D1["analyze_legislative_effectiveness"]
            D2["monitor_legislative_pipeline"]
            D3["analyze_committee_activity"]
            D4["analyze_country_delegation"]
        end
    end

    subgraph ANALYTICS["📊 Advanced Analysis — 4 Tools"]
        E1["analyze_voting_patterns"]
        E2["track_legislation"]
        E3["generate_report"]
        E4["get_all_generated_stats"]
    end

    subgraph DATA["📦 Core EP Data — 30 Tools"]
        F1["👤 MEP Tools (7)"]
        F2["🏛️ Plenary & Meeting (9)"]
        F3["📄 Document Tools (7)"]
        F4["⚖️ Legislative (4)"]
        F5["🏢 Committee (2)"]
        F6["🔧 Diagnostics (1)"]
    end

    subgraph FEEDS["📡 Real-Time Feeds — 13 Tools"]
        G1["13 change monitoring endpoints"]
    end

    OSINT -->|"enriched by"| ANALYTICS
    ANALYTICS -->|"queries"| DATA
    DATA -->|"monitors"| FEEDS

    style OSINT fill:#D32F2F,stroke:#B71C1C,color:#fff,stroke-width:2px
    style ANALYTICS fill:#1565C0,stroke:#0D47A1,color:#fff,stroke-width:2px
    style DATA fill:#2E7D32,stroke:#1B5E20,color:#fff,stroke-width:2px
    style FEEDS fill:#FF8F00,stroke:#E65100,color:#000,stroke-width:2px
    style MEP fill:#E53935,stroke:#C62828,color:#fff,stroke-width:2px
    style COALITION fill:#E53935,stroke:#C62828,color:#fff,stroke-width:2px
    style STRATEGY fill:#E53935,stroke:#C62828,color:#fff,stroke-width:2px
    style LEG_INTEL fill:#E53935,stroke:#C62828,color:#fff,stroke-width:2px

🎯 OSINT Intelligence Workflow

graph LR
    subgraph COLLECT["1️⃣ Collect"]
        direction TB
        C1["get_meps"]
        C2["get_plenary_sessions"]
        C3["get_voting_records"]
        C4["get_procedures"]
        C5["13 feed tools"]
    end

    subgraph ANALYZE["2️⃣ Analyze"]
        direction TB
        AN1["analyze_voting_patterns"]
        AN2["track_legislation"]
        AN3["generate_report"]
        AN4["get_all_generated_stats"]
    end

    subgraph ENRICH["3️⃣ Enrich"]
        direction TB
        E1["assess_mep_influence"]
        E2["analyze_coalition_dynamics"]
        E3["detect_voting_anomalies"]
        E4["network_analysis"]
        E5["analyze_legislative_effectiveness"]
    end

    subgraph FUSE["4️⃣ Fuse & Alert"]
        direction TB
        F1["correlate_intelligence"]
        F2["early_warning_system"]
        F3["generate_political_landscape"]
        F4["comparative_intelligence"]
        F5["sentiment_tracker"]
    end

    COLLECT -->|"raw data"| ANALYZE
    ANALYZE -->|"structured"| ENRICH
    ENRICH -->|"intelligence"| FUSE

    style COLLECT fill:#2E7D32,stroke:#1B5E20,color:#fff,stroke-width:2px
    style ANALYZE fill:#1565C0,stroke:#0D47A1,color:#fff,stroke-width:2px
    style ENRICH fill:#9C27B0,stroke:#7B1FA2,color:#fff,stroke-width:2px
    style FUSE fill:#D32F2F,stroke:#B71C1C,color:#fff,stroke-width:2px

🕵️ OSINT Intelligence Tools (15)

| Tool | Description | Key Parameters | Output | |------|-------------|----------------|--------| | correlate_intelligence | Cross-tool OSINT correlation engine — fuses influence, anomaly, coalition, and network signals into unified intelligence alerts | mepIds (required), groups, sensitivityLevel | Correlated alerts with severity & confidence | | assess_mep_influence | MEP influence scoring (5-dimension model) | mepId (required), dateFrom, dateTo, includeDetails | Influence scorecard | | detect_voting_anomalies | Party defection & anomaly detection | mepId, groupId, sensitivityThreshold | Anomaly report | | analyze_coalition_dynamics | Coalition cohesion & stress analysis | groupIds, dateFrom, minimumCohesion | Coalition metrics | | early_warning_system | Detect emerging political shifts & coalition fractures | sensitivity, focusArea | Warnings with severity levels & stability score | | comparative_intelligence | Cross-reference 2–10 MEP activities across dimensions | mepIds (required), dimensions | Ranked profiles, correlation matrix, cluster analysis | | network_analysis | MEP relationship network via committee co-membership | mepId, analysisType, depth | Network map with centrality scores | | sentiment_tracker | Political group institutional-positioning scores | groupId, timeframe | Positioning scores & polarization index | | generate_political_landscape | Parliament-wide political landscape | dateFrom, dateTo | Landscape overview | | compare_political_groups | Cross-group comparative analysis | groupIds (required), dimensions, dateFrom | Comparison matrix | | analyze_legislative_effectiveness | MEP/committee legislative scoring | subjectType (required), subjectId (required), dateFrom | Effectiveness score | | monitor_legislative_pipeline | Pipeline status & bottleneck detection | committee, status, limit | Pipeline status | | analyze_committee_activity | Committee workload & engagement analysis | committeeId (required), dateFrom, dateTo | Activity report | | track_mep_attendance | MEP attendance patterns & trends | mepId, country, groupId, dateFrom, dateTo, limit | Attendance report | | analyze_country_delegation | Country delegation voting & composition | country (required), dateFrom, dateTo | Delegation analysis |

📊 Advanced Analysis Tools (4)

| Tool | Description | Key Parameters | Output | |------|-------------|----------------|--------| | get_all_generated_stats | Precomputed EP activity statistics (2004-2026) with rankings, predictions, political landscape, and 30 OSINT-derived intelligence metrics including 3-axis political compass | yearFrom, yearTo, category, includePredictions | Statistics object | | analyze_voting_patterns | Analyze MEP voting behavior | mepId (required), dateFrom, compareWithGroup | Analysis object | | track_legislation | Track legislative procedure | procedureId (required) | Procedure object | | generate_report | Generate analytical reports | reportType (required), subjectId, dateFrom | Report object |

👤 MEP Tools (7)

| Tool | Description | Key Parameters | EP API Endpoint | |------|-------------|----------------|-----------------| | get_meps | List MEPs with filters | country, group, committee, limit | GET /meps | | get_mep_details | Detailed MEP information | id (required) | GET /meps/{id} | | get_current_meps | Currently active MEPs with country & political group | limit, offset | GET /meps/show-current | | get_incoming_meps | Newly arriving MEPs for current term | limit, offset | GET /meps/show-incoming | | get_outgoing_meps | Departing MEPs for current term | limit, offset | GET /meps/show-outgoing | | get_homonym_meps | MEPs with identical names (disambiguation) | limit, offset | GET /meps/show-homonyms | | get_mep_declarations | MEP financial interest declarations | docId, year, limit | GET /meps-declarations, GET /meps-declarations/{id} |

🏛️ Plenary & Meeting Tools (9)

| Tool | Description | Key Parameters | EP API Endpoint | |------|-------------|----------------|-----------------| | get_plenary_sessions | List plenary sessions/meetings, or single by eventId | dateFrom, dateTo, eventId, year, location | GET /meetings, GET /meetings/{id} | | get_voting_records | Retrieve aggregate voting records (no per‑MEP positions) | sessionId, topic, dateFrom | GET /meetings/{id}/vote-results | | get_speeches | Plenary speeches and debate contributions | speechId, year, dateFrom, dateTo, limit | GET /speeches, GET /speeches/{id} | | get_events | EP events (hearings, conferences, seminars) | eventId, year, dateFrom, dateTo, limit | GET /events, GET /events/{id} | | get_meeting_activities | Activities linked to a plenary sitting | sittingId (required), limit | GET /meetings/{id}/activities | | get_meeting_decisions | Decisions made in a plenary sitting | sittingId (required), limit | GET /meetings/{id}/decisions | | get_meeting_foreseen_activities | Planned agenda items for upcoming meetings | sittingId (required), limit | GET /meetings/{id}/foreseen-activities | | get_meeting_plenary_session_documents | Plenary session documents linked to a specific sitting | sittingId (required), limit, offset | GET /meetings/{id}/plenary-session-documents | | get_meeting_plenary_session_document_items | Agenda item documents for a specific plenary sitting | sittingId (required), limit, offset | GET /meetings/{id}/plenary-session-document-items |

🏢 Committee Tools (2)

| Tool | Description | Key Parameters | EP API Endpoint | |------|-------------|----------------|-----------------| | get_committee_info | Committee/corporate body info, or all current bodies | id, abbreviation, showCurrent | GET /corporate-bodies, GET /corporate-bodies/show-current | | get_committee_documents | Committee documents and drafts | docId, year, limit | GET /committee-documents, GET /committee-documents/{id} |

📄 Document Tools (7)

| Tool | Description | Key Parameters | EP API Endpoint | |------|-------------|----------------|-----------------| | search_documents | Search documents or get single by docId | keyword, docId, documentType, dateFrom | GET /documents, GET /documents/{id} | | get_adopted_texts | Adopted legislative texts and resolutions | docId, year, limit | GET /adopted-texts, GET /adopted-texts/{id} | | get_plenary_documents | Plenary legislative documents | docId, year, limit | GET /plenary-documents, GET /plenary-documents/{id} | | get_plenary_session_documents | Session agendas, minutes, voting lists | docId, limit | GET /plenary-session-documents, GET /plenary-session-documents/{id} | | get_plenary_session_document_items | Individual items within session documents | limit, offset | GET /plenary-session-documents-items | | get_external_documents | Non-EP documents (Council, Commission) | docId, year, limit | GET /external-documents, GET /external-documents/{id} | | get_parliamentary_questions | Parliamentary Q&A, or single by docId | type, author, topic, docId | GET /parliamentary-questions, GET /parliamentary-questions/{id} |

⚖️ Legislative Procedure Tools (4)

| Tool | Description | Key Parameters | EP API Endpoint | |------|-------------|----------------|-----------------| | get_procedures | Legislative procedures, or single by processId | processId, year, limit | GET /procedures, GET /procedures/{id} | | get_procedure_events | Timeline events for a legislative procedure | processId (required), limit | GET /procedures/{id}/events | | get_procedure_event_by_id | Specific event linked to a legislative procedure | processId (required), eventId (required) | GET /procedures/{id}/events/{event-id} | | get_controlled_vocabularies | Standardized classification terms | vocId, limit | GET /controlled-vocabularies, GET /controlled-vocabularies/{id} |

📡 Feed Tools (13)

Real-time change feeds for monitoring recently updated data across all EP API categories. Per the EP OpenAPI spec, feeds fall into two groups:

  • Configurable-window (6 tools): Accept timeframe (today, one-day, one-week, one-month, custom) + optional startDate
  • Fixed-window (7 tools): No parameters — return updates from a server-defined default window (typically one month)

Key behaviors:

  • All feeds return JSON-LD with data[], @context[], and dataQualityWarnings[]
  • Empty feeds (EP API 404 or error-in-body) are converted to empty data[] with a warning — not errors
  • get_events_feed and get_procedures_feed always use a minimum 120s timeout because these endpoints are consistently slow
  • Fixed-window feeds can be very slow (30–180 s) and often return error-in-body responses
  • For configurable feeds, when timeframe is custom, startDate (YYYY-MM-DD) is required

Configurable-window feeds:

| Tool | Description | Key Parameters | EP API Endpoint | |------|-------------|----------------|-----------------| | get_meps_feed | Recently updated MEPs | timeframe, startDate | GET /meps/feed | | get_events_feed | Recently updated events | timeframe, startDate, activityType | GET /events/feed | | get_procedures_feed | Recently updated procedures | timeframe, startDate, processType | GET /procedures/feed | | get_adopted_texts_feed | Recently updated adopted texts | timeframe, startDate, workType | GET /adopted-texts/feed | | get_mep_declarations_feed | Recently updated MEP declarations | timeframe, startDate, workType | GET /meps-declarations/feed | | get_external_documents_feed | Recently updated external documents | timeframe, startDate, workType | GET /external-documents/feed |

Fixed-window feeds (no parameters):

| Tool | Description | Key Parameters | EP API Endpoint | |------|-------------|----------------|-----------------| | get_documents_feed | Recently updated documents | (none) | GET /documents/feed | | get_plenary_documents_feed | Recently updated plenary documents | (none) | GET /plenary-documents/feed | | get_committee_documents_feed | Recently updated committee docs | (none) | GET /committee-documents/feed | | get_plenary_session_documents_feed | Recently updated plenary session docs | (none) | GET /plenary-session-documents/feed | | get_parliamentary_questions_feed | Recently updated questions | (none) | GET /parliamentary-questions/feed | | get_corporate_bodies_feed | Recently updated corporate bodies | (none) | GET /corporate-bodies/feed | | get_controlled_vocabularies_feed | Recently updated vocabularies | (none) | GET /controlled-vocabularies/feed |

🔧 Server Diagnostics (1)

| Tool | Description | Key Parameters | Output | |------|-------------|----------------|--------| | get_server_health | Server health and feed availability status (no upstream API calls) | (none) | Health object |

📖 Complete TypeDoc API documentation → · Markdown API docs →

Common Use Cases

Research a specific MEP:

1. Find MEP: get_meps → {country: "SE"}
2. Get details: get_mep_details → {id: "MEP-123"}
3. Analyze voting: analyze_voting_patterns → {mepId: "MEP-123"}
4. Generate report: generate_report → {reportType: "MEP_ACTIVITY", subjectId: "MEP-123"}

Track legislation:

1. Search documents: search_documents → {keywords: "climate change"}
2. Track procedure: track_legislation → {procedureId: "2024/0001(COD)"}
3. Get voting records: get_voting_records → {topic: "climate"}

Committee analysis:

1. Get committee: get_committee_info → {abbreviation: "ENVI"}
2. List members: get_meps → {committee: "ENVI"}
3. Generate report: generate_report → {reportType: "COMMITTEE_PERFORMANCE", subjectId: "COMM-ENVI"}

OSINT Intelligence analysis:

1. Score MEP influence: assess_mep_influence → {mepId: "MEP-123"}
2. Detect anomalies: detect_voting_anomalies → {mepId: "MEP-123"}
3. Analyze coalitions: analyze_coalition_dynamics → {groupIds: ["EPP", "S&D"]}
4. Compare groups: compare_political_groups → {groupIds: ["EPP", "S&D", "Renew"]}
5. Pipeline status: monitor_legislative_pipeline → {committee: "ENVI"}
6. Country delegation: analyze_country_delegation → {country: "SE"}
7. Political landscape: generate_political_landscape → {}

🎯 More use cases and examples →

📝 MCP Prompts

Pre-built intelligence analysis prompt templates:

| Prompt | Description | Arguments | |--------|-------------|-----------| | mep_briefing | Comprehensive MEP intelligence briefing | mepId (required), period? | | coalition_analysis | Coalition dynamics and voting bloc analysis | policyArea?, period? | | legislative_tracking | Legislative procedure tracking report | procedureId?, committee? | | political_group_comparison | Multi-dimensional group comparison | groups? | | committee_activity_report | Committee workload and engagement | committeeId (required) | | voting_pattern_analysis | Voting pattern trend detection | topic?, mepId? | | country_delegation_analysis | Country delegation composition and activity | country (required), period? |

📦 MCP Resources

Direct data access via EP resource URIs:

| Resource URI | Description | |-------------|-------------| | ep://meps | List of all current MEPs | | ep://meps/{mepId} | Individual MEP profile | | ep://committees/{committeeId} | Committee information | | ep://plenary-sessions | Recent plenary sessions | | ep://votes/{sessionId} | Voting records for a session | | ep://political-groups | Political group listing | | ep://procedures/{procedureId} | Legislative procedure details | | ep://plenary/{plenaryId} | Single plenary session details | | ep://documents/{documentId} | Legislative document details |


🗺️ Global Political MCP Servers & OSINT Coverage

The European Parliament MCP Server is part of a growing ecosystem o