{"slug": "european-parliament-mcp-server-political-intelligence-for-ai-agents", "title": "European Parliament MCP Server – Political Intelligence for AI Agents", "summary": "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.", "body_md": "**Model Context Protocol Server for European Parliament Open Data**\n\n*🇪🇺 EU parliamentary intelligence for AI agents · 🕵️ 15 OSINT analytics tools · 🏛️ Full EP API v2 coverage · 🛡️ ISMS-aligned · 🔒 GDPR-by-design · 📦 SLSA Level 3*\n\n**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\n\n[EU Parliament Monitor](https://euparliamentmonitor.com)AI newsroom and is a sister project to\n\n[Riksdagsmonitor](https://riksdagsmonitor.com)in the\n\n[Hack23](https://hack23.com)political-intelligence portfolio.\n\nThe **European Parliament MCP Server** implements the [Model Context Protocol (MCP)](https://spec.modelcontextprotocol.io/) 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.\n\n- 🔌\n**Full MCP Implementation**: 63 tools (9 core + 3 advanced + 15 OSINT + 8 Phase 4 + 15 Phase 5 + 13 feed), 9 Resources, and 7 Prompts - 🏛️\n**Complete EP API v2 Coverage**: All European Parliament Open Data API endpoints covered - 🕵️\n**OSINT Intelligence**: MEP influence scoring, coalition analysis, anomaly detection - 🔒\n**Security First**: ISMS-compliant, GDPR-ready, SLSA Level 3 provenance - 🚀\n**High Performance**: <200ms API responses, intelligent caching, rate limiting - 📊\n**Type Safety**: TypeScript strict mode + Zod runtime validation - 🧪\n**Well-Tested**: 80%+ code coverage, 1130+ unit tests, 71 E2E test cases - 📚\n**Complete Documentation**: Architecture, TypeDoc API (HTML + Markdown), security guidelines\n\n**Runtime**: Node.js 26.x** Primary compiler**: TypeScript 7 RC via the`typescript-7`\n\nalias (`node_modules/typescript-7/bin/tsc`\n\n)**Compatibility layer**:`@typescript/typescript6`\n\nremains available so existing 6.x-based tooling can continue using`tsc6`\n\nand the TypeScript 6 API**Core platform**:`@modelcontextprotocol/sdk`\n\n1.29.0,`zod`\n\n4.4.3,`vitest`\n\n4.1.10\n\nThis MCP server is the **EU data backbone** of [Hack23](https://hack23.com/)'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.\n\nHack23 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.\n\n\"Democratising access to political intelligence — what used to require a team of analysts can now be done by any citizen with an AI assistant.\"\n\nThe portfolio is **non-partisan, fully open-source (Apache-2.0)**, operated under the [Hack23 ISMS](https://github.com/Hack23/ISMS-PUBLIC) 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.\n\n```\n%%{init: {\"theme\":\"base\",\"themeVariables\":{\"primaryColor\":\"#6366f1\",\"primaryTextColor\":\"#fff\",\"primaryBorderColor\":\"#4f46e5\",\"lineColor\":\"#94a3b8\",\"secondaryColor\":\"#003399\",\"tertiaryColor\":\"#00338d\",\"background\":\"#0f172a\"}}}%%\ngraph LR\n    subgraph SOURCES[\"📡 Primary Open-Data Sources\"]\n        EP[\"🇪🇺 European Parliament<br/>Open Data Portal v2<br/><i>data.europarl.europa.eu</i>\"]\n        RD[\"🇸🇪 Riksdagen Open Data<br/><i>data.riksdagen.se</i>\"]\n        REG[\"🇸🇪 Regeringskansliet<br/><i>regeringen.se</i>\"]\n        IMF[\"💰 IMF / World Bank<br/><i>economic context</i>\"]\n    end\n\n    subgraph MCP[\"🔌 MCP Servers\"]\n        EPMCP[\"<b>European-Parliament-<br/>MCP-Server</b><br/>63 tools · 9 resources<br/>7 prompts · TS strict<br/><i>(this repository)</i>\"]\n        RRMCP[\"riksdag-regering MCP<br/>32+ tools\"]\n    end\n\n    subgraph PRODUCTS[\"📰 AI-Driven Public Platforms\"]\n        EUPM[\"🏛️ <b>EU Parliament Monitor</b><br/>euparliamentmonitor.com<br/>8 unified gh-aw workflows<br/>51-artifact analysis<br/>14 languages\"]\n        RM[\"🗳️ <b>Riksdagsmonitor</b><br/>riksdagsmonitor.com<br/>11 agentic workflows<br/>91 skills · 14 languages<br/>Tidö coalition tracker\"]\n        CIA[\"🕵️ <b>Citizen Intelligence<br/>Agency (CIA)</b><br/>Java/Spring backend<br/>15 subsystems · 1971–2024<br/>3.5M votes · 109K docs\"]\n    end\n\n    subgraph CITIZENS[\"👥 Citizens · Journalists · Researchers · NGOs\"]\n        AUDIENCE[\"AI assistants · Dashboards · 14-language news · Intelligence briefings\"]\n    end\n\n    EP --> EPMCP\n    RD --> RRMCP\n    REG --> RRMCP\n    EPMCP --> EUPM\n    RRMCP --> RM\n    RM <-->|\"15 CIA subsystems<br/>nightly sync\"| CIA\n    IMF -.->|\"economic context\"| EUPM\n    IMF -.->|\"economic context\"| RM\n    EUPM --> AUDIENCE\n    RM --> AUDIENCE\n    CIA --> AUDIENCE\n    EPMCP -.->|\"AI assistants<br/>Claude · Cursor · VS Code\"| AUDIENCE\n\n    style EPMCP fill:#6366f1,stroke:#4f46e5,color:#fff,stroke-width:3px\n    style EP fill:#003399,stroke:#ffcc00,color:#fff\n    style RD fill:#00338d,stroke:#fecc00,color:#fff\n    style REG fill:#00338d,stroke:#fecc00,color:#fff\n    style EUPM fill:#003399,stroke:#ffcc00,color:#fff\n    style RM fill:#00338d,stroke:#fecc00,color:#fff\n    style CIA fill:#1b5e20,stroke:#43a047,color:#fff\n    style AUDIENCE fill:#7b1fa2,stroke:#9c27b0,color:#fff\n```\n\n**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.\n\n| Project | Scope | Audience | Links |\n|---|---|---|---|\n🇪🇺 European-Parliament-MCP-Server(this repo) |\nEU Parliament data layer for AI agents62 MCP tools · 9 resources · 7 prompts · OSINT analyticsSource:\n|\nDevelopers · AI assistants · Journalists · Researchers |\n📦\nnpm |\n\n💻\n\n[GitHub](https://github.com/Hack23/European-Parliament-MCP-Server)\n\n**EU Parliament Monitor** 8 unified gh-aw workflows · 51-artifact analysis pipeline**Source:** this MCP server (60+ tools) + IMF + World Bank**euparliamentmonitor.com**🧠\n\n[Intelligence Hub](https://euparliamentmonitor.com/political-intelligence.html)📚\n\n[API Reference](https://euparliamentmonitor.com/docs/api/)💻\n\n[GitHub](https://github.com/Hack23/euparliamentmonitor)**Riksdagsmonitor** 11 agentic workflows · 91 skills · 50+ years of evidence (1971–2024) · Tidö coalition fragility tracker**Source:**`riksdag-regering`\n\nMCP (32+ tools) + SCB + IMF + World Bank + CIA exports**riksdagsmonitor.com**🧠\n\n[Intelligence](https://riksdagsmonitor.com/political-intelligence.html)📰\n\n[AI Newsroom](https://riksdagsmonitor.com/news/index.html)📊\n\n[Dashboard](https://riksdagsmonitor.com/dashboard/index.html)💻\n\n[GitHub](https://github.com/Hack23/riksdagsmonitor)**Citizen Intelligence Agency**(CIA)349 current MPs · 2,494 historical politicians · 3.5M+ votes · 109k+ documents · 45-rule risk engine** Source:**`data.riksdagen.se`\n\ndirect + Valmyndigheten + ESV**hack23.github.io/cia**💻\n\n[GitHub](https://github.com/Hack23/cia)\n\nEuropean Parliament Political Intelligence Platform—🧠 Political intelligence · 🔍 Radical transparency · 🗳️ Democratic accountability · 🤖 AI-generated news in 14 languages\n\n|\n|\n\n**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.\n\n**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`\n\nendpoint when MCP returns empty voting payloads.\n\n- 📰\n**9 unified**— 8 article types ([gh-aw](https://github.com/githubnext/gh-aw)(GitHub Agentic Workflows) pipelines`breaking`\n\n,`week-ahead`\n\n,`month-ahead`\n\n,`week-in-review`\n\n,`month-in-review`\n\n,`committee-reports`\n\n,`motions`\n\n,`propositions`\n\n) running Stages A → E in a single 45-minute session, plus`news-translate`\n\nfor 14-language flush translation - 📚\n**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 - 🌍\n**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-LD`NewsArticle.isBasedOn`\n\nprovenance linking back to source artifacts, and`hreflang`\n\nalternates on every page - 🛡️\n**Deterministic aggregator**— agents author analysis Markdown only; TypeScript renders HTML deterministically (no AI-authored HTML, no template-prose leakage, fully reproducible) - 📦\n**npm package**— published with`euparliamentmonitor`\n\n[npm provenance](https://docs.npmjs.com/generating-provenance-statements)and SLSA Level 3 build attestations\n\nSwedish Political Intelligence Platform—🕵️ Political intelligence · 🔍 Democratic transparency · 🤖 AI-generated news · 📊 50+ years of evidence\n\n|\n|\n\n**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**.\n\nAn 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.\n\n- 📰\n**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) - 🧠\n**91 skills across 12 categories**+** 24 Copilot agents**(14 personas + 9 workflow specialists + shared developer instructions) — full catalog at[SKILLS.md](https://github.com/Hack23/riksdagsmonitor/blob/main/SKILLS.md)/[AGENTS.md](https://github.com/Hack23/riksdagsmonitor/blob/main/AGENTS.md) - 📚\n**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 - 📊\n**5 flagship Chart.js / D3.js dashboards**+[CIA Intelligence Dashboard](https://riksdagsmonitor.com/dashboard/index.html)— Seasonal Activity (2002–2025 · Z-score anomaly) · 349-MP Politician Dashboard · Pre-Election Monitor · Party Performance (1990–2026) · Anomaly & Early Warning - 🌍\n**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 - 📦\n**npm package**— Theme System · Chart Factory · Resilient Data Loader · 12 dashboard modules · CIA intelligence modules — published with SLSA build provenance`riksdagsmonitor`\n\n- 🛡️\n**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\n\nPolitical transparency platform— Java/Spring data backbone behind Riksdagsmonitor's historical evidence layer\n\n| Dimension | Coverage |\n|---|---|\n🌐 Languages |\n14 — English · Swedish · Danish · Norwegian · Finnish · German · French · Spanish · Dutch · Arabic (RTL) · Hebrew (RTL) · Japanese · Korean · Chinese |\n♿ Accessibility |\nWCAG 2.1 AA · keyboard navigable · screen-reader optimised · 4.5:1 contrast · responsive 320 px → 1440 px+ |\n🔒 Compliance |\nISO 27001:2022 · NIST CSF 2.0 · CIS Controls v8.1 · GDPR · NIS2 · EU CRA |\n🛡️ Supply chain |\nSHA-pinned GitHub Actions · `step-security/harden-runner` · Dependabot · CodeQL · Secret Scanning · SLSA Level 3 · SPDX SBOM |\n📜 License |\nApache License 2.0 across the entire portfolio |\n🏢 Operator |\n|\n\n**ISMS**[Hack23 ISMS-PUBLIC](https://github.com/Hack23/ISMS-PUBLIC)— fully documented information-security management system- 🌐\n**Live platforms**—[euparliamentmonitor.com](https://euparliamentmonitor.com)·[riksdagsmonitor.com](https://riksdagsmonitor.com)·[hack23.github.io/cia](https://hack23.github.io/cia/)·[hack23.com](https://hack23.com) - 🧠\n**Political Intelligence Hubs**—[EU Parliament](https://euparliamentmonitor.com/political-intelligence.html)·[Riksdag](https://riksdagsmonitor.com/political-intelligence.html) - 📂\n**Source repositories**—[European-Parliament-MCP-Server](https://github.com/Hack23/European-Parliament-MCP-Server)·[euparliamentmonitor](https://github.com/Hack23/euparliamentmonitor)·[riksdagsmonitor](https://github.com/Hack23/riksdagsmonitor)·[cia](https://github.com/Hack23/cia)·[ISMS-PUBLIC](https://github.com/Hack23/ISMS-PUBLIC) - 📦\n**npm packages**—·`european-parliament-mcp-server`\n\n·`euparliamentmonitor`\n\n`riksdagsmonitor`\n\n- 📰\n**Blog & company**—[Hack23 blog](https://hack23.com/blog.html)·[LinkedIn — Hack23 AB](https://www.linkedin.com/company/hack23/)· founder[James Pether Sörling, CISSP, CISM](https://www.linkedin.com/in/jamessorling/) - 🤖\n**AI-readable wikis**—[DeepWiki: European-Parliament-MCP-Server](https://deepwiki.com/Hack23/European-Parliament-MCP-Server)·[DeepWiki: euparliamentmonitor](https://deepwiki.com/Hack23/euparliamentmonitor)·[DeepWiki: riksdagsmonitor](https://deepwiki.com/Hack23/riksdagsmonitor)·[DeepWiki: cia](https://deepwiki.com/Hack23/cia)\n\n```\nnpx -y european-parliament-mcp-server\n```\n\n- Node.js 26.x or higher\n- npm 10.x or higher\n\n```\n# Install the package globally\nnpm install -g european-parliament-mcp-server\n\n# Or install as a dependency in your project\nnpm install european-parliament-mcp-server\n# Clone the repository\ngit clone https://github.com/Hack23/European-Parliament-MCP-Server.git\ncd European-Parliament-MCP-Server\n\n# Install dependencies\nnpm install\n\n# Build the project\nnpm run build\n\n# Run tests\nnpm test\n```\n\nAdd to your `claude_desktop_config.json`\n\n:\n\n```\n{\n  \"mcpServers\": {\n    \"european-parliament\": {\n      \"command\": \"npx\",\n      \"args\": [\"european-parliament-mcp-server\"],\n      \"env\": {\n        \"EP_API_KEY\": \"your-api-key-if-needed\"\n      }\n    }\n  }\n}\n```\n\nAdd to your `claude_desktop_config.json`\n\n:\n\n```\n{\n  \"mcpServers\": {\n    \"european-parliament\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/European-Parliament-MCP-Server/dist/index.js\"],\n      \"env\": {\n        \"EP_API_KEY\": \"your-api-key-if-needed\"\n      }\n    }\n  }\n}\n```\n\nConfigure in `.vscode/mcp.json`\n\n:\n\n```\n{\n  \"servers\": {\n    \"european-parliament\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"european-parliament-mcp-server\"]\n    }\n  }\n}\n```\n\nAdd to `~/.cursor/mcp.json`\n\n(or project-level `.cursor/mcp.json`\n\n):\n\n```\n{\n  \"mcpServers\": {\n    \"european-parliament\": {\n      \"command\": \"npx\",\n      \"args\": [\"european-parliament-mcp-server\"],\n      \"env\": {}\n    }\n  }\n}\n```\n\nUse `--timeout <ms>`\n\nto override the default 60 s request timeout. This is especially useful in `copilot-mcp.json`\n\nor other contexts where the `env`\n\nfield may not reliably propagate:\n\n```\n{\n  \"args\": [\"european-parliament-mcp-server\", \"--timeout\", \"90000\"]\n}\n```\n\nPrecedence: `--timeout`\n\nCLI arg > `EP_REQUEST_TIMEOUT_MS`\n\nenv var > default (60 000 ms).\n\nNote:The`procedures/feed`\n\nand`events/feed`\n\nendpoints automatically use an extended 120 s timeout because these EP API endpoints are significantly slower than others. If you experience timeouts with`one-month`\n\ntimeframes, consider using year-based queries (e.g.,`get_procedures({ year: 2026 })`\n\n) as a faster alternative.\n\n** 📖 Complete Documentation Site** - Live documentation portal with:\n\n- 📖\n- TypeDoc generated API documentation with search, hierarchy navigation, and full type information[API Reference (HTML)](https://hack23.github.io/European-Parliament-MCP-Server/api/) - 📖\n- SEO-friendly Markdown API documentation[API Reference (Markdown)](https://hack23.github.io/European-Parliament-MCP-Server/api-markdown/) - 📊\n- Test coverage analysis[Coverage Reports](https://hack23.github.io/European-Parliament-MCP-Server/coverage/) - ✅\n- Unit and E2E test results[Test Reports](https://hack23.github.io/European-Parliament-MCP-Server/test-results/) - 🔐\n**Build Attestations**- SLSA Level 3 provenance - 📦\n**SBOM**- Software Bill of Materials - 🗺️\n- Auto-generated sitemap for search engines[Sitemap](https://hack23.github.io/European-Parliament-MCP-Server/api/sitemap.xml)\n\n💡\n\nNote: Documentation is automatically generated and committed with each release via`npm run docs:build`\n\nThe API documentation is generated using [TypeDoc](https://typedoc.org/) with the following plugins:\n\n| Plugin | Purpose |\n|---|---|\ntypedoc |\nCore HTML documentation generator |\ntypedoc-plugin-markdown |\nGenerates SEO-friendly Markdown alongside HTML |\ntypedoc-plugin-mdn-links |\nLinks TypeScript built-in types to MDN documentation |\ntypedoc-plugin-zod |\nRenders Zod schema definitions as readable type documentation |\n\nGenerate documentation locally:\n\n```\nnpm run docs          # HTML API docs → docs/api/\nnpm run docs:md       # Markdown API docs → docs/api-markdown/\nnpm run docs:build    # Full documentation build (HTML + MD + coverage + test reports)\n```\n\n- Complete tool documentation with examples**API 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**\n\n- Complete architecture and design documentation**ARCHITECTURE.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**\n\n``` php\ngraph TB\n    Client[MCP Client<br/>Claude / VS Code / Cursor] -->|MCP Protocol stdio| Server[EP MCP Server<br/>TypeScript/Node.js]\n\n    subgraph \"MCP Server (src/)\"\n        direction TB\n        Tools[\"🔧 61 Tools<br/>getMEPs · analyzeCoalition<br/>assessMepInfluence · …\"]\n        Resources[\"📦 9 Resources<br/>ep://meps/\\{mepId\\}<br/>ep://procedures/\\{procedureId\\} · …\"]\n        Prompts[\"💬 7 Prompts<br/>mep_briefing<br/>coalition_analysis · …\"]\n    end\n\n    Server --> Tools\n    Server --> Resources\n    Server --> Prompts\n\n    subgraph \"Infrastructure\"\n        Cache[\"LRU Cache<br/>500 entries · 15 min TTL\"]\n        RateLimiter[Rate Limiter<br/>100 req/min]\n        AuditLog[Audit Logger<br/>GDPR Article 30]\n    end\n\n    Tools --> EPClient[\"EuropeanParliamentClient<br/>Facade → 8 sub-clients\"]\n    Resources --> EPClient\n    EPClient --> Cache\n    EPClient --> RateLimiter\n    EPClient --> AuditLog\n    EPClient -->|HTTPS/TLS 1.3| EPAPI[European Parliament<br/>Open Data API v2<br/>data.europarl.europa.eu]\n\n    style Server fill:#4caf50,stroke:#2e7d32,color:#fff\n    style EPClient fill:#2196f3,stroke:#1565c0,color:#fff\n    style EPAPI fill:#9c27b0,stroke:#6a1b9a,color:#fff\n    style Cache fill:#ff9800,stroke:#e65100,color:#fff\n    style RateLimiter fill:#f44336,stroke:#b71c1c,color:#fff\n    style AuditLog fill:#607d8b,stroke:#37474f,color:#fff\n```\n\n**Data flow:** MCP client sends a tool call → server validates input (Zod) → EP client\nchecks cache → on miss, fetches from EP API (rate-limited) → response cached and returned\nas structured JSON. All personal data access is audit-logged per GDPR Article 30.\n\n**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.\n\n```\ngraph TB\n    subgraph OSINT[\"🕵️ OSINT Intelligence — 15 Tools\"]\n        direction LR\n        subgraph MEP[\"MEP Profiling\"]\n            A1[\"assess_mep_influence\"]\n            A2[\"comparative_intelligence\"]\n            A3[\"network_analysis\"]\n            A4[\"track_mep_attendance\"]\n        end\n        subgraph COALITION[\"Coalition Dynamics\"]\n            B1[\"analyze_coalition_dynamics\"]\n            B2[\"compare_political_groups\"]\n            B3[\"detect_voting_anomalies\"]\n            B4[\"sentiment_tracker\"]\n        end\n        subgraph STRATEGY[\"Strategic Warning\"]\n            C1[\"early_warning_system\"]\n            C2[\"generate_political_landscape\"]\n            C3[\"correlate_intelligence\"]\n        end\n        subgraph LEG_INTEL[\"Legislative Intelligence\"]\n            D1[\"analyze_legislative_effectiveness\"]\n            D2[\"monitor_legislative_pipeline\"]\n            D3[\"analyze_committee_activity\"]\n            D4[\"analyze_country_delegation\"]\n        end\n    end\n\n    subgraph ANALYTICS[\"📊 Advanced Analysis — 4 Tools\"]\n        E1[\"analyze_voting_patterns\"]\n        E2[\"track_legislation\"]\n        E3[\"generate_report\"]\n        E4[\"get_all_generated_stats\"]\n    end\n\n    subgraph DATA[\"📦 Core EP Data — 30 Tools\"]\n        F1[\"👤 MEP Tools (7)\"]\n        F2[\"🏛️ Plenary & Meeting (9)\"]\n        F3[\"📄 Document Tools (7)\"]\n        F4[\"⚖️ Legislative (4)\"]\n        F5[\"🏢 Committee (2)\"]\n        F6[\"🔧 Diagnostics (1)\"]\n    end\n\n    subgraph FEEDS[\"📡 Real-Time Feeds — 13 Tools\"]\n        G1[\"13 change monitoring endpoints\"]\n    end\n\n    OSINT -->|\"enriched by\"| ANALYTICS\n    ANALYTICS -->|\"queries\"| DATA\n    DATA -->|\"monitors\"| FEEDS\n\n    style OSINT fill:#d32f2f,stroke:#b71c1c,color:#fff,stroke-width:2px\n    style ANALYTICS fill:#1565c0,stroke:#0d47a1,color:#fff,stroke-width:2px\n    style DATA fill:#2e7d32,stroke:#1b5e20,color:#fff,stroke-width:2px\n    style FEEDS fill:#ff8f00,stroke:#e65100,color:#000,stroke-width:2px\n    style MEP fill:#e53935,stroke:#c62828,color:#fff,stroke-width:2px\n    style COALITION fill:#e53935,stroke:#c62828,color:#fff,stroke-width:2px\n    style STRATEGY fill:#e53935,stroke:#c62828,color:#fff,stroke-width:2px\n    style LEG_INTEL fill:#e53935,stroke:#c62828,color:#fff,stroke-width:2px\ngraph LR\n    subgraph COLLECT[\"1️⃣ Collect\"]\n        direction TB\n        C1[\"get_meps\"]\n        C2[\"get_plenary_sessions\"]\n        C3[\"get_voting_records\"]\n        C4[\"get_procedures\"]\n        C5[\"13 feed tools\"]\n    end\n\n    subgraph ANALYZE[\"2️⃣ Analyze\"]\n        direction TB\n        AN1[\"analyze_voting_patterns\"]\n        AN2[\"track_legislation\"]\n        AN3[\"generate_report\"]\n        AN4[\"get_all_generated_stats\"]\n    end\n\n    subgraph ENRICH[\"3️⃣ Enrich\"]\n        direction TB\n        E1[\"assess_mep_influence\"]\n        E2[\"analyze_coalition_dynamics\"]\n        E3[\"detect_voting_anomalies\"]\n        E4[\"network_analysis\"]\n        E5[\"analyze_legislative_effectiveness\"]\n    end\n\n    subgraph FUSE[\"4️⃣ Fuse & Alert\"]\n        direction TB\n        F1[\"correlate_intelligence\"]\n        F2[\"early_warning_system\"]\n        F3[\"generate_political_landscape\"]\n        F4[\"comparative_intelligence\"]\n        F5[\"sentiment_tracker\"]\n    end\n\n    COLLECT -->|\"raw data\"| ANALYZE\n    ANALYZE -->|\"structured\"| ENRICH\n    ENRICH -->|\"intelligence\"| FUSE\n\n    style COLLECT fill:#2e7d32,stroke:#1b5e20,color:#fff,stroke-width:2px\n    style ANALYZE fill:#1565c0,stroke:#0d47a1,color:#fff,stroke-width:2px\n    style ENRICH fill:#9c27b0,stroke:#7b1fa2,color:#fff,stroke-width:2px\n    style FUSE fill:#d32f2f,stroke:#b71c1c,color:#fff,stroke-width:2px\n```\n\n| Tool | Description | Key Parameters | Output |\n|---|---|---|---|\n`correlate_intelligence` |\n\n`assess_mep_influence`\n\n`detect_voting_anomalies`\n\n`analyze_coalition_dynamics`\n\n`early_warning_system`\n\n`comparative_intelligence`\n\n`network_analysis`\n\n`sentiment_tracker`\n\n`generate_political_landscape`\n\n`compare_political_groups`\n\n`analyze_legislative_effectiveness`\n\n`monitor_legislative_pipeline`\n\n`analyze_committee_activity`\n\n`track_mep_attendance`\n\n`analyze_country_delegation`\n\n| Tool | Description | Key Parameters | Output |\n|---|---|---|---|\n`get_all_generated_stats` |\n\n[30 OSINT-derived intelligence metrics](/Hack23/European-Parliament-MCP-Server/blob/main/EP_POLITICAL_LANDSCAPE.md)including 3-axis political compass`analyze_voting_patterns`\n\n`track_legislation`\n\n`generate_report`\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|---|---|---|---|\n`get_meps` |\n\n`GET /meps`\n\n`get_mep_details`\n\n`GET /meps/{id}`\n\n`get_current_meps`\n\n`GET /meps/show-current`\n\n`get_incoming_meps`\n\n`GET /meps/show-incoming`\n\n`get_outgoing_meps`\n\n`GET /meps/show-outgoing`\n\n`get_homonym_meps`\n\n`GET /meps/show-homonyms`\n\n`get_mep_declarations`\n\n`GET /meps-declarations`\n\n, `GET /meps-declarations/{id}`\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|---|---|---|---|\n`get_plenary_sessions` |\n\n`GET /meetings`\n\n, `GET /meetings/{id}`\n\n`get_voting_records`\n\n`GET /meetings/{id}/vote-results`\n\n`get_speeches`\n\n`GET /speeches`\n\n, `GET /speeches/{id}`\n\n`get_events`\n\n`GET /events`\n\n, `GET /events/{id}`\n\n`get_meeting_activities`\n\n`GET /meetings/{id}/activities`\n\n`get_meeting_decisions`\n\n`GET /meetings/{id}/decisions`\n\n`get_meeting_foreseen_activities`\n\n`GET /meetings/{id}/foreseen-activities`\n\n`get_meeting_plenary_session_documents`\n\n`GET /meetings/{id}/plenary-session-documents`\n\n`get_meeting_plenary_session_document_items`\n\n`GET /meetings/{id}/plenary-session-document-items`\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|---|---|---|---|\n`get_committee_info` |\n\n`GET /corporate-bodies`\n\n, `GET /corporate-bodies/show-current`\n\n`get_committee_documents`\n\n`GET /committee-documents`\n\n, `GET /committee-documents/{id}`\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|---|---|---|---|\n`search_documents` |\n\n`GET /documents`\n\n, `GET /documents/{id}`\n\n`get_adopted_texts`\n\n`GET /adopted-texts`\n\n, `GET /adopted-texts/{id}`\n\n`get_plenary_documents`\n\n`GET /plenary-documents`\n\n, `GET /plenary-documents/{id}`\n\n`get_plenary_session_documents`\n\n`GET /plenary-session-documents`\n\n, `GET /plenary-session-documents/{id}`\n\n`get_plenary_session_document_items`\n\n`GET /plenary-session-documents-items`\n\n`get_external_documents`\n\n`GET /external-documents`\n\n, `GET /external-documents/{id}`\n\n`get_parliamentary_questions`\n\n`GET /parliamentary-questions`\n\n, `GET /parliamentary-questions/{id}`\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|---|---|---|---|\n`get_procedures` |\n\n`GET /procedures`\n\n, `GET /procedures/{id}`\n\n`get_procedure_events`\n\n`GET /procedures/{id}/events`\n\n`get_procedure_event_by_id`\n\n`GET /procedures/{id}/events/{event-id}`\n\n`get_controlled_vocabularies`\n\n`GET /controlled-vocabularies`\n\n, `GET /controlled-vocabularies/{id}`\n\nReal-time change feeds for monitoring recently updated data across all EP API categories. Per the [EP OpenAPI spec](/Hack23/European-Parliament-MCP-Server/blob/main/docs/ep-openapi-spec.json), feeds fall into two groups:\n\n**Configurable-window**(6 tools): Accept`timeframe`\n\n(`today`\n\n,`one-day`\n\n,`one-week`\n\n,`one-month`\n\n,`custom`\n\n) + optional`startDate`\n\n**Fixed-window**(7 tools): No parameters — return updates from a server-defined default window (typically one month)\n\nKey behaviors:\n\n- All feeds return JSON-LD with\n`data[]`\n\n,`@context[]`\n\n, and`dataQualityWarnings[]`\n\n- Empty feeds (EP API 404 or error-in-body) are converted to empty\n`data[]`\n\nwith a warning — not errors`get_events_feed`\n\nand`get_procedures_feed`\n\nalways 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\n- For configurable feeds, when\n`timeframe`\n\nis`custom`\n\n,`startDate`\n\n(YYYY-MM-DD) is required\n\n**Configurable-window feeds:**\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|---|---|---|---|\n`get_meps_feed` |\n\n`GET /meps/feed`\n\n`get_events_feed`\n\n`GET /events/feed`\n\n`get_procedures_feed`\n\n`GET /procedures/feed`\n\n`get_adopted_texts_feed`\n\n`GET /adopted-texts/feed`\n\n`get_mep_declarations_feed`\n\n`GET /meps-declarations/feed`\n\n`get_external_documents_feed`\n\n`GET /external-documents/feed`\n\n**Fixed-window feeds (no parameters):**\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|---|---|---|---|\n`get_documents_feed` |\n\n*(none)*`GET /documents/feed`\n\n`get_plenary_documents_feed`\n\n*(none)*`GET /plenary-documents/feed`\n\n`get_committee_documents_feed`\n\n*(none)*`GET /committee-documents/feed`\n\n`get_plenary_session_documents_feed`\n\n*(none)*`GET /plenary-session-documents/feed`\n\n`get_parliamentary_questions_feed`\n\n*(none)*`GET /parliamentary-questions/feed`\n\n`get_corporate_bodies_feed`\n\n*(none)*`GET /corporate-bodies/feed`\n\n`get_controlled_vocabularies_feed`\n\n*(none)*`GET /controlled-vocabularies/feed`\n\n| Tool | Description | Key Parameters | Output |\n|---|---|---|---|\n`get_server_health` |\n\n*(none)*📖 ** Complete TypeDoc API documentation →** ·\n\n[Markdown API docs →](https://hack23.github.io/European-Parliament-MCP-Server/api-markdown/)**Research a specific MEP**:\n\n```\n1. Find MEP: get_meps → {country: \"SE\"}\n2. Get details: get_mep_details → {id: \"MEP-123\"}\n3. Analyze voting: analyze_voting_patterns → {mepId: \"MEP-123\"}\n4. Generate report: generate_report → {reportType: \"MEP_ACTIVITY\", subjectId: \"MEP-123\"}\n```\n\n**Track legislation**:\n\n```\n1. Search documents: search_documents → {keywords: \"climate change\"}\n2. Track procedure: track_legislation → {procedureId: \"2024/0001(COD)\"}\n3. Get voting records: get_voting_records → {topic: \"climate\"}\n```\n\n**Committee analysis**:\n\n```\n1. Get committee: get_committee_info → {abbreviation: \"ENVI\"}\n2. List members: get_meps → {committee: \"ENVI\"}\n3. Generate report: generate_report → {reportType: \"COMMITTEE_PERFORMANCE\", subjectId: \"COMM-ENVI\"}\n```\n\n**OSINT Intelligence analysis**:\n\n```\n1. Score MEP influence: assess_mep_influence → {mepId: \"MEP-123\"}\n2. Detect anomalies: detect_voting_anomalies → {mepId: \"MEP-123\"}\n3. Analyze coalitions: analyze_coalition_dynamics → {groupIds: [\"EPP\", \"S&D\"]}\n4. Compare groups: compare_political_groups → {groupIds: [\"EPP\", \"S&D\", \"Renew\"]}\n5. Pipeline status: monitor_legislative_pipeline → {committee: \"ENVI\"}\n6. Country delegation: analyze_country_delegation → {country: \"SE\"}\n7. Political landscape: generate_political_landscape → {}\n```\n\n🎯 [More use cases and examples →](/Hack23/European-Parliament-MCP-Server/blob/main/API_USAGE_GUIDE.md#common-use-cases)\n\nPre-built intelligence analysis prompt templates:\n\n| Prompt | Description | Arguments |\n|---|---|---|\n`mep_briefing` |\nComprehensive MEP intelligence briefing | mepId (required), period? |\n`coalition_analysis` |\nCoalition dynamics and voting bloc analysis | policyArea?, period? |\n`legislative_tracking` |\nLegislative procedure tracking report | procedureId?, committee? |\n`political_group_comparison` |\nMulti-dimensional group comparison | groups? |\n`committee_activity_report` |\nCommittee workload and engagement | committeeId (required) |\n`voting_pattern_analysis` |\nVoting pattern trend detection | topic?, mepId? |\n`country_delegation_analysis` |\nCountry delegation composition and activity | country (required), period? |\n\nDirect data access via EP resource URIs:\n\n| Resource URI | Description |\n|---|---|\n`ep://meps` |\nList of all current MEPs |\n`ep://meps/{mepId}` |\nIndividual MEP profile |\n`ep://committees/{committeeId}` |\nCommittee information |\n`ep://plenary-sessions` |\nRecent plenary sessions |\n`ep://votes/{sessionId}` |\nVoting records for a session |\n`ep://political-groups` |\nPolitical group listing |\n`ep://procedures/{procedureId}` |\nLegislative procedure details |\n`ep://plenary/{plenaryId}` |\nSingle plenary session details |\n`ep://documents/{documentId}` |\nLegislative document details |\n\nThe 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.\n\n| Country | Server | Data Source | Coverage |\n|---|---|---|---|\n🇪🇺 European Union |\nEuropean Parliament MCP Server |\n\n**63 tools**(15 OSINT)** United States**[Congress.gov API MCP Server](https://github.com/bsmi021/mcp-congress_gov_server)** United States**[CongressMCP](https://github.com/amurshak/congressMCP)** United States**[Congress.gov MCP](https://github.com/AshwinSundar/congress_gov_mcp)** United Kingdom**[Parliament MCP](https://github.com/i-dot-ai/parliament-mcp)** Sweden**[Riksdag & Regering MCP](https://github.com/isakskogstad/Riksdag-Regering-MCP)[riksdagsmonitor.com](https://riksdagsmonitor.com/))**Netherlands**[OpenTK MCP](https://github.com/r-huijts/opentk-mcp)** Poland**[Parliament of Poland MCP](https://github.com/pkolawa/parliament-poland-mcp-server)** Poland**[Sejm MCP](https://github.com/janisz/sejm-mcp)** Israel**[Knesset MCP Server](https://github.com/zohar/knesset-mcp)** Brazil**[Senado BR MCP](https://mcpservers.org/servers/sidneybissoli/senado-br-mcp)| Country | Server | Data Source | Coverage |\n|---|---|---|---|\n🇺🇸 United States |\n|\n\n**United States**[Open Census MCP](https://mcpservers.org/servers/brockwebb/open-census-mcp-server)** United States**[Data.gov MCP Server](https://github.com/melaodoidao/datagov-mcp-server)** United States**[CMS Data.gov MCP](https://github.com/clarifyhealth/cms-datagov-mcp-server)** United States**[SEC EDGAR MCP](https://github.com/stefanoamorelli/sec-edgar-mcp)** United States**[NPS MCP](https://github.com/amysatterlee/nps_mcp)** Sweden**[SCB MCP Server](https://mcpservers.org/servers/isakskogstad/scb-mcp)** Sweden**[Skolverket MCP](https://mcpservers.org/servers/ksaklfszf921/skolverket-mcp)** France**[data.gouv.fr MCP](https://github.com/datagouv/datagouv-mcp)** France**[Data Gouv MCP Server](https://mcpservers.org/servers/csonigo/datagouv-mcp-server)** United Kingdom**[Planning Data MCP](https://github.com/alizoli/planningdatagovuk-api)** United Kingdom**[Property Prices MCP](https://github.com/joemclo/property-prices-mcp)** Netherlands**[CBS Open Data MCP](https://github.com/dstotijn/mcp-cbs-cijfers-open-data)** Israel**[Data.gov.il MCP](https://github.com/DavidOsherProceed/data-gov-il-mcp)** Israel**[DataGov Israel MCP](https://github.com/aviveldan/datagov-mcp)** Israel**[Israel Statistics MCP](https://github.com/reuvenaor/israel-statistics-mcp)** Israel**[BudgetKey MCP](https://github.com/OpenBudget/budgetkey-mcp)** Turkey**[Mevzuat MCP](https://mcpservers.org/servers/MCP-Mirror/saidsurucu_mevzuat-mcp)** Hong Kong**[HK Data.gov.hk MCP](https://github.com/hkopenai/hk-datagovhk-mcp-server)** Malaysia**[Data.gov.my MCP](https://github.com/manfye/data-dosm-mcp-nodejs)** India**[Data.gov.in MCP](https://github.com/adwait-ai/mcp_data_gov_in)** Singapore**[Gahmen MCP Server](https://github.com/aniruddha-adhikary/gahmen-mcp)** Singapore**[Singapore Data MCPs](https://github.com/prezgamer/Singapore-Data-MCPs)** Australia**[ABS MCP Server](https://github.com/seansoreilly/mcp-server-abs)| Scope | Server | Platform | Coverage |\n|---|---|---|---|\n🌐 Global (CKAN) |\n|\n\n**Global (Socrata)**[OpenGov MCP Server](https://github.com/srobbin/opengov-mcp-server)| Capability | 🇪🇺 EU Parliament MCP | 🇺🇸 Congress.gov MCP | 🇬🇧 UK Parliament MCP | 🇸🇪 Riksdag MCP |\n|---|---|---|---|---|\n| Member profiling | ✅ 5-dimension influence model | ✅ Basic profiles | ✅ Basic profiles | ✅ Basic profiles |\n| Voting analysis | ✅ Anomaly detection + patterns | ✅ Roll call votes | ✅ Division records | ✅ Vote records |\n| Coalition dynamics | ✅ Cohesion & stress analysis | ❌ | ❌ | ❌ |\n| Committee intelligence | ✅ Workload & engagement metrics | ✅ Committee data | ✅ Committee data | ❌ |\n| Legislative pipeline | ✅ Bottleneck detection + forecasting | ✅ Bill tracking | ✅ Bill tracking | ✅ Bill tracking |\n| Country delegation analysis | ✅ National cohesion metrics | N/A | N/A | N/A |\n| Political landscape | ✅ Parliament-wide situational awareness | ❌ | ❌ | ❌ |\n| Attendance tracking | ✅ Trend detection + engagement scoring | ❌ | ❌ | ❌ |\n| GDPR compliance | ✅ Privacy-first design | N/A | N/A | ✅ |\n| MCP prompts & resources | ✅ 7 prompts + 9 resources | ❌ | ❌ | ❌ |\n| Tool count | 63 tools |\n~5 tools | ~5 tools | ~4 tools |\n\n💡\n\nThe 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.\n\nAll 55 [European Parliament Open Data API v2](https://data.europarl.europa.eu/en/developer-corner/opendata-api) endpoints are fully covered — 41 core data endpoints, 13 feed endpoints, and 1 optional endpoint (`/procedures/{id}/events/{event-id}`\n\n):\n\n| Category | Endpoints | MCP Tools |\n|---|---|---|\nMEPs |\n`/meps` , `/meps/{id}` , `/meps/show-current` , `/meps/show-incoming` , `/meps/show-outgoing` , `/meps/show-homonyms` |\n`get_meps` , `get_mep_details` , `get_current_meps` , `get_incoming_meps` , `get_outgoing_meps` , `get_homonym_meps` |\nMEP Documents |\n`/meps-declarations` , `/meps-declarations/{id}` |\n`get_mep_declarations` |\nCorporate Bodies |\n`/corporate-bodies` , `/corporate-bodies/{id}` , `/corporate-bodies/show-current` |\n`get_committee_info` |\nEvents |\n`/events` , `/events/{id}` |\n`get_events` |\nMeetings |\n`/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` |\n`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` |\nSpeeches |\n`/speeches` , `/speeches/{id}` |\n`get_speeches` |\nProcedures |\n`/procedures` , `/procedures/{id}` , `/procedures/{id}/events` , `/procedures/{id}/events/{event-id}` |\n`get_procedures` , `get_procedure_events` , `get_procedure_event_by_id` |\nDocuments |\n`/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` |\n`search_documents` , `get_adopted_texts` , `get_committee_documents` , `get_plenary_documents` , `get_plenary_session_documents` , `get_plenary_session_document_items` |\nQuestions |\n`/parliamentary-questions` , `/parliamentary-questions/{id}` |\n`get_parliamentary_questions` |\nExternal Documents |\n`/external-documents` , `/external-documents/{id}` |\n`get_external_documents` |\nVocabularies |\n`/controlled-vocabularies` , `/controlled-vocabularies/{id}` |\n`get_controlled_vocabularies` |\nFeed Endpoints |\n`/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` |\n`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` |\n\n**API**:[https://data.europarl.europa.eu/api/v2/](https://data.europarl.europa.eu/api/v2/)** Documentation**:[https://data.europarl.europa.eu/en/developer-corner](https://data.europarl.europa.eu/en/developer-corner)** Format**: JSON-LD, RDF/XML, Turtle** License**: European Parliament Open Data License\n\nThis project aligns with [Hack23 AB's Information Security Management System (ISMS)](https://github.com/Hack23/ISMS-PUBLIC):\n\n- ✅\n**ISO 27001:2022**- Information security management - ✅\n**NIST CSF 2.0**- Cybersecurity framework - ✅\n**CIS Controls v8.1**- Security best practices - ✅\n**GDPR**- EU data protection compliance\n\n- 🔐\n**Authentication**: API key + OAuth 2.0 (planned) - 🛡️\n**Input Validation**: Zod schemas for all inputs - ⚡\n**Rate Limiting**: 100 requests per minute - 🔒\n**Security Headers**: CSP, HSTS, X-Frame-Options, etc. - 📝\n**Audit Logging**: All data access logged - 🔍\n**Vulnerability Scanning**: CodeQL, Dependabot, OSSF Scorecard\n\nThis project achieves **SLSA Level 3** compliance:\n\n- ✅\n**Build Provenance**- Cryptographic proof of build integrity - ✅\n**Attestations**- All artifacts cryptographically signed - ✅\n**Verification**-`gh attestation verify <artifact> --owner Hack23 --repo European-Parliament-MCP-Server`\n\n- ✅\n**npm Provenance**- Published with provenance for package integrity - ✅\n**SBOM**- SPDX-format Software Bill of Materials - ✅\n**Dependency Review**- Automated vulnerability scanning - ✅\n**License Compliance**- Only MIT, Apache-2.0, BSD, ISC allowed\n\nSee [ ATTESTATIONS.md](/Hack23/European-Parliament-MCP-Server/blob/main/docs/ATTESTATIONS.md) for verification instructions and security benefits.\n\nPer [Hack23 Open Source Policy](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Open_Source_Policy.md):\n\n| Property | Value |\n|---|---|\nCRA Classification |\n|\n\n**Confidentiality****Integrity****Availability** See [ CRA-ASSESSMENT.md](/Hack23/European-Parliament-MCP-Server/blob/main/CRA-ASSESSMENT.md) for the full EU Cyber Resilience Act conformity assessment.\n\n```\n# Install dependencies\nnpm install\n\n# Run in development mode with auto-reload\nnpm run dev\n\n# Type checking\nnpm run type-check\n\n# Linting\nnpm run lint\n\n# Format code\nnpm run format\n\n# Run tests\nnpm test\n\n# Run tests with coverage\nnpm run test:coverage\nEuropean-Parliament-MCP-Server/\n├── src/                      # Source code\n│   ├── server.ts            # MCP server entry point\n│   ├── tools/               # MCP tool implementations\n│   ├── resources/           # MCP resource handlers\n│   ├── prompts/             # MCP prompt templates\n│   ├── clients/             # European Parliament API client\n│   ├── schemas/             # Zod validation schemas\n│   ├── types/               # TypeScript type definitions\n│   └── utils/               # Utility functions\n├── tests/                   # Test files\n├── .github/                 # GitHub configuration\n│   ├── agents/             # Custom Copilot agents\n│   ├── skills/             # Reusable skill patterns\n│   └── workflows/          # CI/CD workflows\n└── docs/                    # Additional documentation\n```\n\n- Detailed analysis of JSDoc documentation coverage across all source files[JSDoc Coverage Report](/Hack23/European-Parliament-MCP-Server/blob/main/JSDOC_COVERAGE_REPORT.md)- Quick reference guide for writing comprehensive JSDoc comments[JSDoc Quick Reference](/Hack23/European-Parliament-MCP-Server/blob/main/docs/JSDOC_QUICK_REFERENCE.md)- Executive summary of documentation status and priorities[JSDoc Coverage Summary](/Hack23/European-Parliament-MCP-Server/blob/main/JSDOC_COVERAGE_SUMMARY.md)- Visual representation of documentation coverage with charts and graphs[JSDoc Coverage Visualization](/Hack23/European-Parliament-MCP-Server/blob/main/docs/JSDOC_COVERAGE_VISUALIZATION.md)\n\n- System architecture and design patterns[Architecture Documentation](/Hack23/European-Parliament-MCP-Server/blob/main/ARCHITECTURE.md)- Data structures and type definitions[Data Model](/Hack23/European-Parliament-MCP-Server/blob/main/DATA_MODEL.md)- Guide for using the MCP server API[API Usage Guide](/Hack23/European-Parliament-MCP-Server/blob/main/API_USAGE_GUIDE.md)- 📊 Comprehensive Mermaid visualization of all EP statistics (2004–2026), political compass, coalition dynamics, and OSINT intelligence metrics — all years validated against EP API v2[EP Political Landscape](/Hack23/European-Parliament-MCP-Server/blob/main/EP_POLITICAL_LANDSCAPE.md)\n\n- Test coverage statistics and analysis[Test Coverage Report](/Hack23/European-Parliament-MCP-Server/blob/main/TEST_COVERAGE_REPORT.md)- Development setup and guidelines[Developer Guide](/Hack23/European-Parliament-MCP-Server/blob/main/DEVELOPER_GUIDE.md)- Performance optimization strategies[Performance Guide](/Hack23/European-Parliament-MCP-Server/blob/main/PERFORMANCE_GUIDE.md)\n\n- Vulnerability reporting and security practices[Security Policy](/Hack23/European-Parliament-MCP-Server/blob/main/SECURITY.md)- Security controls and architecture[Security Architecture](/Hack23/European-Parliament-MCP-Server/blob/main/SECURITY_ARCHITECTURE.md)- Secure coding standards[Secure Development Policy](/Hack23/European-Parliament-MCP-Server/blob/main/Secure_Development_Policy.md)- Open source compliance guidelines[Open Source Policy](/Hack23/European-Parliament-MCP-Server/blob/main/Open_Source_Policy.md)\n\n- Production deployment instructions[Deployment Guide](/Hack23/European-Parliament-MCP-Server/blob/main/DEPLOYMENT_GUIDE.md)- Common issues and solutions[Troubleshooting Guide](#troubleshooting)- Package publishing workflow[NPM Publishing Guide](/Hack23/European-Parliament-MCP-Server/blob/main/NPM_PUBLISHING.md)\n\n```\n# Unit tests\nnpm test\n\n# Integration tests (requires EP_INTEGRATION_TESTS=true)\nEP_INTEGRATION_TESTS=true npm run test:integration\n\n# Integration tests with fixture capture\nEP_INTEGRATION_TESTS=true EP_SAVE_FIXTURES=true npm run test:integration\n\n# E2E tests\nnpm run test:e2e\n\n# Coverage report\nnpm run test:coverage\n\n# Watch mode\nnpm run test:watch\n```\n\n**Integration Testing**: When `EP_INTEGRATION_TESTS=true`\n\n, the integration test suite validates 46 MCP tools against the real European Parliament API endpoints (see [ INTEGRATION_TESTING.md](/Hack23/European-Parliament-MCP-Server/blob/main/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).\n\n```\n# Lint code\nnpm run lint\n\n# Fix linting issues\nnpm run lint:fix\n\n# Check for unused dependencies\nnpm run knip\n\n# Security audit\nnpm audit\n\n# License compliance\nnpm run test:licenses\n\n# Optional: keep Mermaid diagrams readable while editing\n# (Mermaid validation is not currently enforced in CI)\n```\n\n**Symptom:** Requests return `429 Too Many Requests`\n\nor slow down unexpectedly.\n\nThe European Parliament Open Data API enforces rate limits. The MCP server automatically applies a token-bucket rate limiter (100 requests per minute).\n\n**Solutions:**\n\n```\n# Reduce concurrency — don't call multiple tools in parallel bursts\n# Use the built-in cache — repeated identical requests are served from LRU cache\n# Add a delay between bulk operations:\n# e.g., call get_meps, wait 1 s, then call get_mep_details\n\n# Check current cache stats (if using programmatic access):\nconst stats = epClient.getCacheStats();\nconsole.log(`Cache hit rate: ${stats.hitRate}%`)\n```\n\n", "url": "https://wpnews.pro/news/european-parliament-mcp-server-political-intelligence-for-ai-agents", "canonical_source": "https://github.com/Hack23/European-Parliament-MCP-Server", "published_at": "2026-07-14 06:29:46+00:00", "updated_at": "2026-07-14 06:48:50.741495+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "ai-infrastructure"], "entities": ["Hack23 AB", "European Parliament", "European Parliament Open Data Portal", "EU Parliament Monitor", "Riksdagsmonitor", "Claude Desktop", "GitHub Copilot", "Model Context Protocol"], "alternates": {"html": "https://wpnews.pro/news/european-parliament-mcp-server-political-intelligence-for-ai-agents", "markdown": "https://wpnews.pro/news/european-parliament-mcp-server-political-intelligence-for-ai-agents.md", "text": "https://wpnews.pro/news/european-parliament-mcp-server-political-intelligence-for-ai-agents.txt", "jsonld": "https://wpnews.pro/news/european-parliament-mcp-server-political-intelligence-for-ai-agents.jsonld"}}