cd /news/ai-agents/european-parliament-mcp-server-polit… · home topics ai-agents article
[ARTICLE · art-58441] src=github.com ↗ pub= topic=ai-agents verified=true sentiment=↑ positive

European Parliament MCP Server – Political Intelligence for AI Agents

Hack23 AB released an open-source Model Context Protocol (MCP) server that gives AI agents structured access to European Parliament open data, including MEP profiles, legislative documents, and OSINT analytics tools. The server aims to democratize political intelligence by enabling citizens and journalists to perform automated coalition analysis and influence scoring that previously required professional research teams.

read24 min views1 publishedJul 14, 2026
European Parliament MCP Server – Political Intelligence for AI Agents
Image: source

Model Context Protocol Server for European Parliament Open Data

🇪🇺 EU parliamentary intelligence for AI agents · 🕵️ 15 OSINT analytics tools · 🏛️ Full EP API v2 coverage · 🛡️ ISMS-aligned · 🔒 GDPR-by-design · 📦 SLSA Level 3

The canonical TypeScript MCP bridge between the European Parliament Open Data Portal and any MCP-aware AI client — Claude Desktop, VS Code, Cursor, GitHub Copilot. Powers the

EU Parliament MonitorAI newsroom and is a sister project to

Riksdagsmonitorin the

Hack23political-intelligence portfolio.

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.

  • 🔌 Full MCP Implementation: 63 tools (9 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

Runtime: Node.js 26.x** Primary compiler**: TypeScript 7 RC via thetypescript-7

alias (node_modules/typescript-7/bin/tsc

)Compatibility layer:@typescript/typescript6

remains available so existing 6.x-based tooling can continue usingtsc6

and the TypeScript 6 APICore platform:@modelcontextprotocol/sdk

1.29.0,zod

4.4.3,vitest

4.1.10

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.

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.

%%{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/>63 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.

Project Scope Audience Links
🇪🇺 European-Parliament-MCP-Server(this repo)
EU Parliament data layer for AI agents62 MCP tools · 9 resources · 7 prompts · OSINT analyticsSource:
Developers · AI assistants · Journalists · Researchers
📦
npm

💻

GitHub

EU Parliament Monitor 8 unified gh-aw workflows · 51-artifact analysis pipelineSource: this MCP server (60+ tools) + IMF + World Bankeuparliamentmonitor.com🧠

Intelligence Hub📚

API Reference💻

GitHubRiksdagsmonitor 11 agentic workflows · 91 skills · 50+ years of evidence (1971–2024) · Tidö coalition fragility trackerSource:riksdag-regering

MCP (32+ tools) + SCB + IMF + World Bank + CIA exportsriksdagsmonitor.com🧠

Intelligence📰

AI Newsroom📊

Dashboard💻

GitHubCitizen Intelligence Agency(CIA)349 current MPs · 2,494 historical politicians · 3.5M+ votes · 109k+ documents · 45-rule risk engine** Source:**data.riksdagen.se

direct + Valmyndigheten + ESVhack23.github.io/cia💻

GitHub

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

| |

EU Parliament Monitor turns the EP's own open data into auditable political intelligence — and publishes it as readable news in 14 languages, every day, fully sourced. An AI-driven newsroom that monitors plenary sessions, committee work, motions, propositions, urgency files and the forward calendar; produces Economist-style analytical articles backed by 51 structured analysis artifacts per run; and exposes every methodology, template and analysis tree publicly so any reader, journalist or NGO can verify the analysis behind the prose.

Powered by this repository — consumes the European-Parliament-MCP-Server (60+ EP data tools) plus IMF + World Bank for economic context, with built-in fallback to the EP Open Data Portal /api/v2/decision

endpoint when MCP returns empty voting payloads.

  • 📰 9 unified— 8 article types (gh-aw(GitHub Agentic Workflows) pipelinesbreaking

,week-ahead

,month-ahead

,week-in-review

,month-in-review

,committee-reports

,motions

,propositions

) running Stages A → E in a single 45-minute session, plusnews-translate

for 14-language flush translation - 📚 17 published methodologies + 52 analysis templates + 19 tradecraft references— ICD-203 Key Judgments · Admiralty source grades · WEP probability bands · ACH · 5-framework political-threat model · 6-dimension threat landscape · electoral domain methodology (361-seat threshold) · IMF/World Bank indicator mappings - 🌍 14 languages— EN · SV · DA · NO · FI · DE · FR · ES · NL · AR (RTL) · HE (RTL) · JA · KO · ZH — every page rendered with WCAG 2.1 AA accessibility, JSON-LDNewsArticle.isBasedOn

provenance linking back to source artifacts, andhreflang

alternates on every page - 🛡️ Deterministic aggregator— agents author analysis Markdown only; TypeScript renders HTML deterministically (no AI-authored HTML, no template-prose leakage, fully reproducible) - 📦 npm package— published witheuparliamentmonitor

npm provenanceand SLSA Level 3 build attestations

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

| |

Riksdagsmonitor monitors Sweden's Riksdag (Parliament), the Government (Regeringskansliet) and public agencies (Myndigheter) with structured intelligence techniques — ACH, SWOT, PESTLE, STRIDE, political-risk scoring and OSINT/INTOP tradecraft — applied to 349 current MPs, 2,494 historical politicians (1971–2024), 3.5M+ votes and 109,000+ parliamentary documents.

An autonomous AI newsroom — 11 agentic workflows, Claude Opus, zero human editors — turns this evidence into publication-ready intelligence articles in 14 languages, every day. Front-loads the live Tidö Agreement coalition status (176/349 seats, fragility indicators, CIA risk alerts) and dives into 40 years of election-cycle intelligence (1994–2034), party performance (1990–2026, 8 parties), 15 committee networks, seasonal Z-score anomaly detection, ministry risk and a 45-rule × 349-MP live risk heat map.

  • 📰 11 agentic workflows— committee reports · propositions · motions · interpellations · week-ahead · month-ahead · real-time monitor · evening analysis · weekly review · monthly review · translate (Mon–Fri + weekend cycles, all on UTC schedules) - 🧠 91 skills across 12 categories+** 24 Copilot agents**(14 personas + 9 workflow specialists + shared developer instructions) — full catalog atSKILLS.md/AGENTS.md - 📚 11 published methodologies + 23 templates(8 core T1–T8 + 15 extended/Tier-C) — AI-Driven Analysis Guide · OSINT Tradecraft Standards · Political Risk · Political SWOT · Political Threat Framework · Electoral Domain · Synthesis · Strategic Extensions (scenario / wildcard / long-horizon) · Style Guide - 📊 5 flagship Chart.js / D3.js dashboards+CIA Intelligence Dashboard— Seasonal Activity (2002–2025 · Z-score anomaly) · 349-MP Politician Dashboard · Pre-Election Monitor · Party Performance (1990–2026) · Anomaly & Early Warning - 🌍 14 languages— EN · SV · DA · NO · FI · DE · FR · ES · NL · AR (RTL) · HE (RTL) · JA · KO · ZH — daily refresh at 03:00 CET, WCAG 2.1 AA, CSP-hardened with Subresource Integrity (SRI) on all bundled assets - 📦 npm package— Theme System · Chart Factory · Resilient Data · 12 dashboard modules · CIA intelligence modules — published with SLSA build provenanceriksdagsmonitor

  • 🛡️ OpenSSF Best Practices Project #12069· Risk level 🟢 LOW (5.52 / 10.0 — 99.7 % risk reduction) · ISO 27001:2022 · NIST CSF 2.0 · CIS Controls v8.1 · GDPR Art. 9(2)(e/g) for political opinions

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

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

ISMSHack23 ISMS-PUBLIC— fully documented information-security management system- 🌐 Live platformseuparliamentmonitor.com·riksdagsmonitor.com·hack23.github.io/cia·hack23.com - 🧠 Political Intelligence HubsEU Parliament·Riksdag - 📂 Source repositoriesEuropean-Parliament-MCP-Server·euparliamentmonitor·riksdagsmonitor·cia·ISMS-PUBLIC - 📦 npm packages—·european-parliament-mcp-server

·euparliamentmonitor

riksdagsmonitor

npx -y european-parliament-mcp-server
  • Node.js 26.x or higher
  • npm 10.x or higher
npm install -g european-parliament-mcp-server

npm install european-parliament-mcp-server
git clone https://github.com/Hack23/European-Parliament-MCP-Server.git
cd European-Parliament-MCP-Server

npm install

npm run build

npm test

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"
      }
    }
  }
}

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"
      }
    }
  }
}

Configure in .vscode/mcp.json

:

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

Add to ~/.cursor/mcp.json

(or project-level .cursor/mcp.json

):

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

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:Theprocedures/feed

andevents/feed

endpoints automatically use an extended 120 s timeout because these EP API endpoints are significantly slower than others. If you experience timeouts withone-month

timeframes, consider using year-based queries (e.g.,get_procedures({ year: 2026 })

) as a faster alternative.

** 📖 Complete Documentation Site** - Live documentation portal with:

  • 📖
  • TypeDoc generated API documentation with search, hierarchy navigation, and full type informationAPI Reference (HTML) - 📖
  • SEO-friendly Markdown API documentationAPI Reference (Markdown) - 📊
  • Test coverage analysisCoverage Reports - ✅
  • Unit and E2E test resultsTest Reports - 🔐 Build Attestations- SLSA Level 3 provenance - 📦 SBOM- Software Bill of Materials - 🗺️
  • Auto-generated sitemap for search enginesSitemap

💡

Note: Documentation is automatically generated and committed with each release vianpm run docs:build

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)
  • Complete tool documentation with examplesAPI Usage Guide- C4 model diagrams and data flows** Architecture Diagrams**- Common issues and solutions** Troubleshooting Guide**- Development workflow and contributing** Developer Guide**- Claude Desktop, VS Code, Docker setup** Deployment Guide**- Optimization strategies** Performance Guide**- How documentation is generated** Documentation as Code Guide**

  • Complete architecture and design documentationARCHITECTURE.md- Security policy and vulnerability disclosure** SECURITY.md**- API security headers implementation** SECURITY_HEADERS.md**- Software Bill of Materials documentation** docs/SBOM.md**- Contribution guidelines** CONTRIBUTING.md**- Community code of conduct** CODE_OF_CONDUCT.md**- Development guidelines for GitHub Copilot**.github/copilot-instructions.md**- Custom GitHub Copilot agents**.github/agents/README.md**- Reusable skill patterns**.github/skills/README.md**

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.

63 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.

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
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
Tool Description Key Parameters Output
correlate_intelligence

assess_mep_influence

detect_voting_anomalies

analyze_coalition_dynamics

early_warning_system

comparative_intelligence

network_analysis

sentiment_tracker

generate_political_landscape

compare_political_groups

analyze_legislative_effectiveness

monitor_legislative_pipeline

analyze_committee_activity

track_mep_attendance

analyze_country_delegation

Tool Description Key Parameters Output
get_all_generated_stats

30 OSINT-derived intelligence metricsincluding 3-axis political compassanalyze_voting_patterns

track_legislation

generate_report

Tool Description Key Parameters EP API Endpoint
get_meps

GET /meps

get_mep_details

GET /meps/{id}

get_current_meps

GET /meps/show-current

get_incoming_meps

GET /meps/show-incoming

get_outgoing_meps

GET /meps/show-outgoing

get_homonym_meps

GET /meps/show-homonyms

get_mep_declarations

GET /meps-declarations

, GET /meps-declarations/{id}

Tool Description Key Parameters EP API Endpoint
get_plenary_sessions

GET /meetings

, GET /meetings/{id}

get_voting_records

GET /meetings/{id}/vote-results

get_speeches

GET /speeches

, GET /speeches/{id}

get_events

GET /events

, GET /events/{id}

get_meeting_activities

GET /meetings/{id}/activities

get_meeting_decisions

GET /meetings/{id}/decisions

get_meeting_foreseen_activities

GET /meetings/{id}/foreseen-activities

get_meeting_plenary_session_documents

GET /meetings/{id}/plenary-session-documents

get_meeting_plenary_session_document_items

GET /meetings/{id}/plenary-session-document-items

Tool Description Key Parameters EP API Endpoint
get_committee_info

GET /corporate-bodies

, GET /corporate-bodies/show-current

get_committee_documents

GET /committee-documents

, GET /committee-documents/{id}

Tool Description Key Parameters EP API Endpoint
search_documents

GET /documents

, GET /documents/{id}

get_adopted_texts

GET /adopted-texts

, GET /adopted-texts/{id}

get_plenary_documents

GET /plenary-documents

, GET /plenary-documents/{id}

get_plenary_session_documents

GET /plenary-session-documents

, GET /plenary-session-documents/{id}

get_plenary_session_document_items

GET /plenary-session-documents-items

get_external_documents

GET /external-documents

, GET /external-documents/{id}

get_parliamentary_questions

GET /parliamentary-questions

, GET /parliamentary-questions/{id}

Tool Description Key Parameters EP API Endpoint
get_procedures

GET /procedures

, GET /procedures/{id}

get_procedure_events

GET /procedures/{id}/events

get_procedure_event_by_id

GET /procedures/{id}/events/{event-id}

get_controlled_vocabularies

GET /controlled-vocabularies

, GET /controlled-vocabularies/{id}

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): Accepttimeframe

(today

,one-day

,one-week

,one-month

,custom

) + optionalstartDate

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[]

, anddataQualityWarnings[]

  • Empty feeds (EP API 404 or error-in-body) are converted to empty data[]

with a warning — not errorsget_events_feed

andget_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

iscustom

,startDate

(YYYY-MM-DD) is required

Configurable-window feeds:

Tool Description Key Parameters EP API Endpoint
get_meps_feed

GET /meps/feed

get_events_feed

GET /events/feed

get_procedures_feed

GET /procedures/feed

get_adopted_texts_feed

GET /adopted-texts/feed

get_mep_declarations_feed

GET /meps-declarations/feed

get_external_documents_feed

GET /external-documents/feed

Fixed-window feeds (no parameters):

Tool Description Key Parameters EP API Endpoint
get_documents_feed

(none)GET /documents/feed

get_plenary_documents_feed

(none)GET /plenary-documents/feed

get_committee_documents_feed

(none)GET /committee-documents/feed

get_plenary_session_documents_feed

(none)GET /plenary-session-documents/feed

get_parliamentary_questions_feed

(none)GET /parliamentary-questions/feed

get_corporate_bodies_feed

(none)GET /corporate-bodies/feed

get_controlled_vocabularies_feed

(none)GET /controlled-vocabularies/feed

Tool Description Key Parameters Output
get_server_health

(none)📖 ** Complete TypeDoc API documentation → ·

Markdown API docs →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 →

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?

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

The European Parliament MCP Server is part of a growing ecosystem of political and government open data MCP servers enabling AI-powered OSINT analysis of democratic institutions worldwide. Below is the most comprehensive directory of political and government MCP servers available.

Country Server Data Source Coverage
🇪🇺 European Union
European Parliament MCP Server

63 tools(15 OSINT)** United States**Congress.gov API MCP Server** United States**CongressMCP** United States**Congress.gov MCP** United Kingdom**Parliament MCP** Sweden**Riksdag & Regering MCPriksdagsmonitor.com)NetherlandsOpenTK MCP** Poland**Parliament of Poland MCP** Poland**Sejm MCP** Israel**Knesset MCP Server** Brazil**Senado BR MCP| Country | Server | Data Source | Coverage | |---|---|---|---| 🇺🇸 United States | |

United StatesOpen Census MCP** United States**Data.gov MCP Server** United States**CMS Data.gov MCP** United States**SEC EDGAR MCP** United States**NPS MCP** Sweden**SCB MCP Server** Sweden**Skolverket MCP** France**data.gouv.fr MCP** France**Data Gouv MCP Server** United Kingdom**Planning Data MCP** United Kingdom**Property Prices MCP** Netherlands**CBS Open Data MCP** Israel**Data.gov.il MCP** Israel**DataGov Israel MCP** Israel**Israel Statistics MCP** Israel**BudgetKey MCP** Turkey**Mevzuat MCP** Hong Kong**HK Data.gov.hk MCP** Malaysia**Data.gov.my MCP** India**Data.gov.in MCP** Singapore**Gahmen MCP Server** Singapore**Singapore Data MCPs** Australia**ABS MCP Server| Scope | Server | Platform | Coverage | |---|---|---|---| 🌐 Global (CKAN) | |

Global (Socrata)OpenGov MCP Server| Capability | 🇪🇺 EU Parliament MCP | 🇺🇸 Congress.gov MCP | 🇬🇧 UK Parliament MCP | 🇸🇪 Riksdag MCP | |---|---|---|---|---| | Member profiling | ✅ 5-dimension influence model | ✅ Basic profiles | ✅ Basic profiles | ✅ Basic profiles | | Voting analysis | ✅ Anomaly detection + patterns | ✅ Roll call votes | ✅ Division records | ✅ Vote records | | Coalition dynamics | ✅ Cohesion & stress analysis | ❌ | ❌ | ❌ | | Committee intelligence | ✅ Workload & engagement metrics | ✅ Committee data | ✅ Committee data | ❌ | | Legislative pipeline | ✅ Bottleneck detection + forecasting | ✅ Bill tracking | ✅ Bill tracking | ✅ Bill tracking | | Country delegation analysis | ✅ National cohesion metrics | N/A | N/A | N/A | | Political landscape | ✅ Parliament-wide situational awareness | ❌ | ❌ | ❌ | | Attendance tracking | ✅ Trend detection + engagement scoring | ❌ | ❌ | ❌ | | GDPR compliance | ✅ Privacy-first design | N/A | N/A | ✅ | | MCP prompts & resources | ✅ 7 prompts + 9 resources | ❌ | ❌ | ❌ | | Tool count | 63 tools | ~5 tools | ~5 tools | ~4 tools |

💡

The European Parliament MCP Server offers the most comprehensive OSINT intelligence capabilitiesof any political MCP server, with63 specialized toolsincluding advanced analytics like coalition stress analysis, voting anomaly detection, cross-tool intelligence correlation, political landscape generation, and precomputed longitudinal statistics. It is the only political MCP server with built-in MCP prompts, resources, and a 5-dimension MEP influence scoring model.

All 55 European Parliament Open Data API v2 endpoints are fully covered — 41 core data endpoints, 13 feed endpoints, and 1 optional endpoint (/procedures/{id}/events/{event-id}

):

Category Endpoints MCP Tools
MEPs
/meps , /meps/{id} , /meps/show-current , /meps/show-incoming , /meps/show-outgoing , /meps/show-homonyms
get_meps , get_mep_details , get_current_meps , get_incoming_meps , get_outgoing_meps , get_homonym_meps
MEP Documents
/meps-declarations , /meps-declarations/{id}
get_mep_declarations
Corporate Bodies
/corporate-bodies , /corporate-bodies/{id} , /corporate-bodies/show-current
get_committee_info
Events
/events , /events/{id}
get_events
Meetings
/meetings , /meetings/{id} , /meetings/{id}/activities , /meetings/{id}/decisions , /meetings/{id}/foreseen-activities , /meetings/{id}/vote-results , /meetings/{id}/plenary-session-documents , /meetings/{id}/plenary-session-document-items
get_plenary_sessions , get_meeting_activities , get_meeting_decisions , get_meeting_foreseen_activities , get_voting_records , get_meeting_plenary_session_documents , get_meeting_plenary_session_document_items
Speeches
/speeches , /speeches/{id}
get_speeches
Procedures
/procedures , /procedures/{id} , /procedures/{id}/events , /procedures/{id}/events/{event-id}
get_procedures , get_procedure_events , get_procedure_event_by_id
Documents
/documents , /documents/{id} , /adopted-texts , /adopted-texts/{id} , /committee-documents , /committee-documents/{id} , /plenary-documents , /plenary-documents/{id} , /plenary-session-documents , /plenary-session-documents/{id} , /plenary-session-documents-items
search_documents , get_adopted_texts , get_committee_documents , get_plenary_documents , get_plenary_session_documents , get_plenary_session_document_items
Questions
/parliamentary-questions , /parliamentary-questions/{id}
get_parliamentary_questions
External Documents
/external-documents , /external-documents/{id}
get_external_documents
Vocabularies
/controlled-vocabularies , /controlled-vocabularies/{id}
get_controlled_vocabularies
Feed Endpoints
/meps/feed , /events/feed , /procedures/feed , /adopted-texts/feed , /meps-declarations/feed , /documents/feed , /plenary-documents/feed , /committee-documents/feed , /plenary-session-documents/feed , /external-documents/feed , /parliamentary-questions/feed , /corporate-bodies/feed , /controlled-vocabularies/feed
get_meps_feed , get_events_feed , get_procedures_feed , get_adopted_texts_feed , get_mep_declarations_feed , get_documents_feed , get_plenary_documents_feed , get_committee_documents_feed , get_plenary_session_documents_feed , get_external_documents_feed , get_parliamentary_questions_feed , get_corporate_bodies_feed , get_controlled_vocabularies_feed

API:https://data.europarl.europa.eu/api/v2/** Documentation**:https://data.europarl.europa.eu/en/developer-corner** Format**: JSON-LD, RDF/XML, Turtle** License**: European Parliament Open Data License

This project aligns with Hack23 AB's Information Security Management System (ISMS):

  • ISO 27001:2022- Information security management - ✅ NIST CSF 2.0- Cybersecurity framework - ✅ CIS Controls v8.1- Security best practices - ✅ GDPR- EU data protection compliance

  • 🔐 Authentication: API key + OAuth 2.0 (planned) - 🛡️ Input Validation: Zod schemas for all inputs - ⚡ Rate Limiting: 100 requests per minute - 🔒 Security Headers: CSP, HSTS, X-Frame-Options, etc. - 📝 Audit Logging: All data access logged - 🔍 Vulnerability Scanning: CodeQL, Dependabot, OSSF Scorecard

This project achieves SLSA Level 3 compliance:

  • Build Provenance- Cryptographic proof of build integrity - ✅ Attestations- All artifacts cryptographically signed - ✅ Verification-gh attestation verify <artifact> --owner Hack23 --repo European-Parliament-MCP-Server

  • npm Provenance- Published with provenance for package integrity - ✅ SBOM- SPDX-format Software Bill of Materials - ✅ Dependency Review- Automated vulnerability scanning - ✅ License Compliance- Only MIT, Apache-2.0, BSD, ISC allowed

See ATTESTATIONS.md for verification instructions and security benefits.

Per Hack23 Open Source Policy:

Property Value
CRA Classification

ConfidentialityIntegrityAvailability See CRA-ASSESSMENT.md for the full EU Cyber Resilience Act conformity assessment.

npm install

npm run dev

npm run type-check

npm run lint

npm run format

npm test

npm run test:coverage
European-Parliament-MCP-Server/
├── src/                      # Source code
│   ├── server.ts            # MCP server entry point
│   ├── tools/               # MCP tool implementations
│   ├── resources/           # MCP resource handlers
│   ├── prompts/             # MCP prompt templates
│   ├── clients/             # European Parliament API client
│   ├── schemas/             # Zod validation schemas
│   ├── types/               # TypeScript type definitions
│   └── utils/               # Utility functions
├── tests/                   # Test files
├── .github/                 # GitHub configuration
│   ├── agents/             # Custom Copilot agents
│   ├── skills/             # Reusable skill patterns
│   └── workflows/          # CI/CD workflows
└── docs/                    # Additional documentation
npm test

EP_INTEGRATION_TESTS=true npm run test:integration

EP_INTEGRATION_TESTS=true EP_SAVE_FIXTURES=true npm run test:integration

npm run test:e2e

npm run test:coverage

npm run test:watch

Integration Testing: When EP_INTEGRATION_TESTS=true

, the integration test suite validates 46 MCP tools against the real European Parliament API endpoints (see INTEGRATION_TESTING.md for the complete 62-tool coverage guide). All tools return real data — no mock or placeholder data is used. Live API tests are disabled by default to respect rate limits (100 req/min).

npm run lint

npm run lint:fix

npm run knip

npm audit

npm run test:licenses

Symptom: Requests return 429 Too Many Requests

or slow down unexpectedly.

The European Parliament Open Data API enforces rate limits. The MCP server automatically applies a token-bucket rate limiter (100 requests per minute).

Solutions:


const stats = epClient.getCacheStats();
console.log(`Cache hit rate: ${stats.hitRate}%`)
── more in #ai-agents 4 stories · sorted by recency
── more on @hack23 ab 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/european-parliament-…] indexed:0 read:24min 2026-07-14 ·