📊 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: 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
🔧 Current Stack
- Runtime: Node.js 26.x
- Primary compiler: TypeScript 7 RC via the
typescript-7alias (node_modules/typescript-7/bin/tsc) - Compatibility layer:
@typescript/typescript6remains available so existing 6.x-based tooling can continue usingtsc6and the TypeScript 6 API - Core platform:
@modelcontextprotocol/sdk1.29.0,zod4.4.3,vitest4.1.10
🌍 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/>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.
🗂️ 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
🗳️ Riksdagsmonitor — riksdagsmonitor.com
Swedish Political Intelligence Platform — 🕵️ Political intelligence · 🔍 Democratic transparency · 🤖 AI-generated news · 📊 50+ years of evidence
🕵️ Citizen Intelligence Agency (CIA)
Political transparency platform — Java/Spring data backbone behind Riksdagsmonitor's historical evidence layer
🌍 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
- 🌐 Live platforms — euparliamentmonitor.com · riksdagsmonitor.com · hack23.github.io/cia · hack23.com
- 🧠 Political Intelligence Hubs — EU Parliament · Riksdag
- 📂 Source repositories — European-Parliament-MCP-Server · euparliamentmonitor · riksdagsmonitor · cia · ISMS-PUBLIC
- 📦 npm packages —
european-parliament-mcp-server·euparliamentmonitor·riksdagsmonitor - 📰 Blog & company — Hack23 blog · LinkedIn — Hack23 AB · founder James Pether Sörling, CISSP, CISM
- 🤖 AI-readable wikis — DeepWiki: European-Parliament-MCP-Server · DeepWiki: euparliamentmonitor · DeepWiki: riksdagsmonitor · DeepWiki: cia
🔐 Security & Compliance
🚀 Quick Start
Run with npx (No Installation Required)
npx -y european-parliament-mcp-server
Prerequisites
- Node.js 26.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/feedandevents/feedendpoints automatically use an extended 120 s timeout because these EP API endpoints are significantly slower than others. If you experience timeouts withone-monthtimeframes, 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)](https://hack23.github.io/European-
No comments yet
Be the first to share your take.