Skip to main content
Glama
Hack23

European Parliament MCP Server

by Hack23
README.md
<p align="center">
  <img src="https://hack23.com/icon-192.png" alt="Hack23 Logo" width="128" height="128">
</p>

<h1 align="center">๐Ÿ›๏ธ European Parliament MCP Server</h1>

<p align="center">
  <strong>Model Context Protocol Server for European Parliament Open Data</strong><br>
  <em>๐Ÿ‡ช๐Ÿ‡บ EU parliamentary intelligence for AI agents ยท ๐Ÿ•ต๏ธ 15 OSINT analytics tools ยท ๐Ÿ›๏ธ Full EP API v2 coverage ยท ๐Ÿ›ก๏ธ ISMS-aligned ยท ๐Ÿ”’ GDPR-by-design ยท ๐Ÿ“ฆ SLSA Level 3</em>
</p>

<p align="center">
  <strong>The canonical TypeScript MCP bridge between the <a href="https://data.europarl.europa.eu/">European Parliament Open Data Portal</a> and any MCP-aware AI client</strong> โ€” Claude Desktop, VS Code, Cursor, GitHub Copilot. Powers the <a href="https://euparliamentmonitor.com">EU Parliament Monitor</a> AI newsroom and is a sister project to <a href="https://riksdagsmonitor.com">Riksdagsmonitor</a> in the <a href="https://hack23.com">Hack23</a> political-intelligence portfolio.
</p>

<table>
  <tr>
    <td width="120" align="center">
      <img src="https://img.shields.io/badge/MCP-Server-6366F1?style=for-the-badge&logo=typescript&logoColor=white" width="80" alt="European Parliament MCP Server"/>
      <div>
        <a href="https://www.npmjs.com/package/european-parliament-mcp-server">
          <img src="https://img.shields.io/npm/v/european-parliament-mcp-server.svg" alt="npm version">
        </a>
      </div>
    </td>
    <td>
      <p><strong>Model Context Protocol Server for European Parliament Open Data</strong> โ€” providing AI assistants with structured access to MEPs, plenary sessions, committees, legislative documents, and parliamentary questions through a secure, type-safe TypeScript implementation.</p>
      <p>MEP influence scoring (5-dimension model), Coalition cohesion & stress analysis, Party defection & anomaly detection, Cross-group comparative analysis, MEP/committee legislative scoring, Pipeline status & bottleneck detection, Committee workload & engagement analysis, MEP attendance patterns & trends, Country delegation voting & composition, Parliament-wide political landscape</p>
      <div>
        <a href="https://github.com/Hack23/European-Parliament-MCP-Server"><strong>๐Ÿ“‚ Repository</strong></a> โ€ข
        <a href="https://hack23.com/european-parliament-mcp-features.html"><strong>โœจ Features</strong></a> โ€ข
        <a href="https://hack23.com/european-parliament-mcp-docs.html"><strong>๐Ÿ“š Documentation</strong></a> โ€ข
        <a href="https://www.npmjs.com/package/european-parliament-mcp-server"><strong>๐Ÿ“ฆ npm</strong></a>
      </div>
    </td>
  </tr>
</table>

[![ISMS](https://img.shields.io/badge/Hack23-ISMS-blue)](https://github.com/Hack23/ISMS-PUBLIC)
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12067/badge)](https://www.bestpractices.dev/projects/12067)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Hack23/European-Parliament-MCP-Server)

## ๐Ÿ“Š Quality Metrics & Documentation

<p align="center">
  <!-- npm version -->
  <a href="https://www.npmjs.com/package/european-parliament-mcp-server">
    <img src="https://img.shields.io/npm/v/european-parliament-mcp-server.svg?style=flat-square&logo=npm" alt="npm version">
  </a>

  <!-- npm downloads -->
  <a href="https://www.npmjs.com/package/european-parliament-mcp-server">
    <img src="https://img.shields.io/npm/dm/european-parliament-mcp-server.svg?style=flat-square&logo=npm" alt="npm downloads">
  </a>

  <!-- MCP Tools -->
  <img src="https://img.shields.io/badge/MCP%20Tools-63-6366F1?style=flat-square&logo=typescript" alt="MCP Tools">

  <!-- MCP Resources -->
  <img src="https://img.shields.io/badge/MCP%20Resources-9-6366F1?style=flat-square" alt="MCP Resources">

  <!-- MCP Prompts -->
  <img src="https://img.shields.io/badge/MCP%20Prompts-7-6366F1?style=flat-square" alt="MCP Prompts">
</p>

<p align="center">
  <!-- Test Coverage -->
  <a href="https://hack23.github.io/European-Parliament-MCP-Server/coverage/">
    <img src="https://img.shields.io/badge/Test%20Coverage-80%25%2B-brightgreen?style=flat-square&logo=vitest" alt="Test Coverage">
  </a>
  
  <!-- Unit Tests -->
  <a href="https://hack23.github.io/European-Parliament-MCP-Server/test-results/">
    <img src="https://img.shields.io/badge/Unit%20Tests-1130%20Passing-brightgreen?style=flat-square&logo=vitest" alt="Unit Test Results">
  </a>
  
  <!-- E2E Tests -->
  <a href="https://hack23.github.io/European-Parliament-MCP-Server/e2e-results/">
    <img src="https://img.shields.io/badge/E2E%20Tests-71%20Passing-brightgreen?style=flat-square&logo=playwright" alt="E2E Test Results">
  </a>
  
  <!-- API Documentation -->
  <a href="https://hack23.github.io/European-Parliament-MCP-Server/api/">
    <img src="https://img.shields.io/badge/API%20Docs-TypeDoc-blue?style=flat-square&logo=typescript" alt="API Documentation">
  </a>
  
  <!-- Documentation Portal -->
  <a href="https://hack23.github.io/European-Parliament-MCP-Server/">
    <img src="https://img.shields.io/badge/๐Ÿ“š%20Documentation-Portal-blue?style=flat-square" alt="Documentation Portal">
  </a>
</p>

## ๐Ÿ“‹ Overview

The **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.

### ๐ŸŽฏ 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-7` alias (`node_modules/typescript-7/bin/tsc`)
- **Compatibility layer**: `@typescript/typescript6` remains available so existing 6.x-based tooling can continue using `tsc6` and the TypeScript 6 API
- **Core platform**: `@modelcontextprotocol/sdk` 1.29.0, `zod` 4.4.3, `vitest` 4.1.10

---

## ๐ŸŒ Hack23 Political Intelligence Ecosystem

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

### ๐ŸŽฏ 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](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.

### ๐Ÿงญ The Ecosystem at a Glance

```mermaid
%%{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

<table>
  <thead>
    <tr>
      <th align="left">Project</th>
      <th align="left">Scope</th>
      <th align="left">Audience</th>
      <th align="left">Links</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td valign="top">
        ๐Ÿ‡ช๐Ÿ‡บ <b>European-Parliament-MCP-Server</b><br/>
        <sub><i>(this repo)</i></sub>
      </td>
      <td valign="top">
        EU Parliament data layer for AI agents<br/>
        <sub>62 MCP tools ยท 9 resources ยท 7 prompts ยท OSINT analytics</sub><br/>
        <sub><b>Source:</b> <a href="https://data.europarl.europa.eu/">data.europarl.europa.eu</a></sub>
      </td>
      <td valign="top">Developers ยท AI assistants ยท Journalists ยท Researchers</td>
      <td valign="top">
        ๐Ÿ“ฆ <a href="https://www.npmjs.com/package/european-parliament-mcp-server"><b>npm</b></a><br/>
        ๐Ÿ’ป <a href="https://github.com/Hack23/European-Parliament-MCP-Server">GitHub</a>
      </td>
    </tr>
    <tr>
      <td valign="top">๐Ÿ›๏ธ <b>EU Parliament Monitor</b></td>
      <td valign="top">
        Daily AI-generated EP intelligence in 14 languages<br/>
        <sub>8 unified gh-aw workflows ยท 51-artifact analysis pipeline</sub><br/>
        <sub><b>Source:</b> this MCP server (60+ tools) + IMF + World Bank</sub>
      </td>
      <td valign="top">Citizens ยท Journalists ยท NGOs across all 27 EU member states</td>
      <td valign="top">
        ๐ŸŒ <a href="https://euparliamentmonitor.com"><b>euparliamentmonitor.com</b></a><br/>
        ๐Ÿง  <a href="https://euparliamentmonitor.com/political-intelligence.html">Intelligence Hub</a><br/>
        ๐Ÿ“š <a href="https://euparliamentmonitor.com/docs/api/">API Reference</a><br/>
        ๐Ÿ’ป <a href="https://github.com/Hack23/euparliamentmonitor">GitHub</a>
      </td>
    </tr>
    <tr>
      <td valign="top">๐Ÿ—ณ๏ธ <b>Riksdagsmonitor</b></td>
      <td valign="top">
        Daily AI-generated Swedish parliamentary intelligence<br/>
        <sub>11 agentic workflows ยท 91 skills ยท 50+ years of evidence (1971โ€“2024) ยท Tidรถ coalition fragility tracker</sub><br/>
        <sub><b>Source:</b> <code>riksdag-regering</code> MCP (32+ tools) + SCB + IMF + World Bank + CIA exports</sub>
      </td>
      <td valign="top">Swedish citizens ยท Nordic journalists ยท Election researchers</td>
      <td valign="top">
        ๐ŸŒ <a href="https://riksdagsmonitor.com"><b>riksdagsmonitor.com</b></a><br/>
        ๐Ÿง  <a href="https://riksdagsmonitor.com/political-intelligence.html">Intelligence</a><br/>
        ๐Ÿ“ฐ <a href="https://riksdagsmonitor.com/news/index.html">AI Newsroom</a><br/>
        ๐Ÿ“Š <a href="https://riksdagsmonitor.com/dashboard/index.html">Dashboard</a><br/>
        ๐Ÿ’ป <a href="https://github.com/Hack23/riksdagsmonitor">GitHub</a>
      </td>
    </tr>
    <tr>
      <td valign="top">๐Ÿ•ต๏ธ <b>Citizen Intelligence Agency</b><br/><sub>(CIA)</sub></td>
      <td valign="top">
        15-subsystem Java/Spring political-analytics backend<br/>
        <sub>349 current MPs ยท 2,494 historical politicians ยท 3.5M+ votes ยท 109k+ documents ยท 45-rule risk engine</sub><br/>
        <sub><b>Source:</b> <code>data.riksdagen.se</code> direct + Valmyndigheten + ESV</sub>
      </td>
      <td valign="top">Hack23 platform consumers (Riksdagsmonitor) ยท OSINT analysts</td>
      <td valign="top">
        ๐ŸŒ <a href="https://hack23.github.io/cia/"><b>hack23.github.io/cia</b></a><br/>
        ๐Ÿ’ป <a href="https://github.com/Hack23/cia">GitHub</a>
      </td>
    </tr>
  </tbody>
</table>

### ๐Ÿ‡ช๐Ÿ‡บ EU Parliament Monitor โ€” `euparliamentmonitor.com`

> **European Parliament Political Intelligence Platform** โ€” *๐Ÿง  Political intelligence ยท ๐Ÿ” Radical transparency ยท ๐Ÿ—ณ๏ธ Democratic accountability ยท ๐Ÿค– AI-generated news in 14 languages*

<table>
  <tr>
    <td width="120" align="center">
      <img src="https://img.shields.io/badge/EU-Parliament-003399?style=for-the-badge&logo=european-union&logoColor=FFCC00" width="80" alt="EU Parliament Monitor"/>
      <div>
        <a href="https://euparliamentmonitor.com">
          <img src="https://img.shields.io/website?url=https://euparliamentmonitor.com" alt="Website Status">
        </a>
      </div>
      <div>
        <a href="https://github.com/Hack23/euparliamentmonitor/releases">
          <img src="https://img.shields.io/github/v/release/Hack23/euparliamentmonitor" alt="Release">
        </a>
      </div>
    </td>
    <td>
      <p><strong>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.</strong> An AI-driven newsroom that monitors plenary sessions, committee work, motions, propositions, urgency files and the forward calendar; produces <em>Economist-style</em> analytical articles backed by 51 structured analysis artifacts per run; and exposes <strong>every</strong> methodology, template and analysis tree publicly so any reader, journalist or NGO can verify the analysis behind the prose.</p>
      <p><strong>Powered by this repository</strong> โ€” 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 <code>/api/v2/decision</code> endpoint when MCP returns empty voting payloads.</p>
      <ul>
        <li>๐Ÿ“ฐ <strong>9 unified <a href="https://github.com/githubnext/gh-aw">gh-aw</a> (GitHub Agentic Workflows) pipelines</strong> โ€” 8 article types (<code>breaking</code>, <code>week-ahead</code>, <code>month-ahead</code>, <code>week-in-review</code>, <code>month-in-review</code>, <code>committee-reports</code>, <code>motions</code>, <code>propositions</code>) running Stages A โ†’ E in a single 45-minute session, plus <code>news-translate</code> for 14-language flush translation</li>
        <li>๐Ÿ“š <strong>17 published methodologies + 52 analysis templates + 19 tradecraft references</strong> โ€” 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</li>
        <li>๐ŸŒ <strong>14 languages</strong> โ€” 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 <code>NewsArticle.isBasedOn</code> provenance linking back to source artifacts, and <code>hreflang</code> alternates on every page</li>
        <li>๐Ÿ›ก๏ธ <strong>Deterministic aggregator</strong> โ€” agents author analysis Markdown only; TypeScript renders HTML deterministically (no AI-authored HTML, no template-prose leakage, fully reproducible)</li>
        <li>๐Ÿ“ฆ <strong>npm package <code>euparliamentmonitor</code></strong> โ€” published with <a href="https://docs.npmjs.com/generating-provenance-statements">npm provenance</a> and SLSA Level 3 build attestations</li>
      </ul>
      <div>
        <a href="https://euparliamentmonitor.com"><strong>๐ŸŒ Live News Site</strong></a> ยท
        <a href="https://euparliamentmonitor.com/political-intelligence.html"><strong>๐Ÿง  Political Intelligence Hub</strong></a> ยท
        <a href="https://euparliamentmonitor.com/sitemap.html"><strong>๐Ÿ—บ๏ธ Site Map (14 languages)</strong></a> ยท
        <a href="https://euparliamentmonitor.com/docs/api/"><strong>๐Ÿ“” TypeDoc API</strong></a> ยท
        <a href="https://euparliamentmonitor.com/docs/coverage/index.html"><strong>๐Ÿ““ Coverage</strong></a> ยท
        <a href="https://euparliamentmonitor.com/playwright-report/index.html"><strong>๐ŸŽญ E2E Report</strong></a> ยท
        <a href="https://github.com/Hack23/euparliamentmonitor"><strong>๐Ÿ“‚ Repository</strong></a> ยท
        <a href="https://hack23.com/euparliamentmonitor-features.html"><strong>โœจ Features</strong></a> ยท
        <a href="https://hack23.com/euparliamentmonitor-docs.html"><strong>๐Ÿ“š Documentation</strong></a>
      </div>
    </td>
  </tr>
</table>

[![Live Site](https://img.shields.io/badge/๐ŸŒ_Live_Site-euparliamentmonitor.com-003399?style=flat-square&logoColor=FFCC00)](https://euparliamentmonitor.com)
[![Political Intelligence Hub](https://img.shields.io/badge/๐Ÿง _Political_Intelligence-Hub-7B1FA2?style=flat-square)](https://euparliamentmonitor.com/political-intelligence.html)
[![Site Map](https://img.shields.io/badge/๐Ÿ—บ๏ธ_Site_Map-14_languages-0A66C2?style=flat-square)](https://euparliamentmonitor.com/sitemap.html)
[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/Hack23/euparliamentmonitor/badge)](https://scorecard.dev/viewer/?uri=github.com/Hack23/euparliamentmonitor)
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12068/badge)](https://www.bestpractices.dev/projects/12068)
[![SLSA 3](https://slsa.dev/images/gh-badge-level3.svg)](https://github.com/Hack23/euparliamentmonitor/attestations)
[![License](https://img.shields.io/github/license/Hack23/euparliamentmonitor)](https://github.com/Hack23/euparliamentmonitor/blob/main/LICENSE)
[![ISMS](https://img.shields.io/badge/Hack23-ISMS-blue)](https://github.com/Hack23/ISMS-PUBLIC)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Hack23/euparliamentmonitor)
[![News Generation](https://github.com/Hack23/euparliamentmonitor/actions/workflows/compile-agentic-workflows.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/compile-agentic-workflows.yml)
[![CodeQL](https://github.com/Hack23/euparliamentmonitor/actions/workflows/codeql.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/codeql.yml)
[![Test and Report](https://github.com/Hack23/euparliamentmonitor/actions/workflows/test-and-report.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/test-and-report.yml)
[![E2E Tests](https://github.com/Hack23/euparliamentmonitor/actions/workflows/e2e.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/e2e.yml)
[![Release](https://github.com/Hack23/euparliamentmonitor/actions/workflows/release.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/release.yml)

### ๐Ÿ—ณ๏ธ Riksdagsmonitor โ€” `riksdagsmonitor.com`

> **Swedish Political Intelligence Platform** โ€” *๐Ÿ•ต๏ธ Political intelligence ยท ๐Ÿ” Democratic transparency ยท ๐Ÿค– AI-generated news ยท ๐Ÿ“Š 50+ years of evidence*

<table>
  <tr>
    <td width="120" align="center">
      <img src="https://img.shields.io/badge/Riksdag-Monitor-00338D?style=for-the-badge&logo=swedish&logoColor=FECC00" width="80" alt="Riksdagsmonitor"/>
      <div>
        <a href="https://riksdagsmonitor.com">
          <img src="https://img.shields.io/website?url=https://riksdagsmonitor.com" alt="Website Status">
        </a>
      </div>
      <div>
        <a href="https://www.npmjs.com/package/riksdagsmonitor">
          <img src="https://img.shields.io/npm/v/riksdagsmonitor.svg" alt="npm version">
        </a>
      </div>
    </td>
    <td>
      <p><strong>Riksdagsmonitor monitors Sweden's Riksdag (Parliament), the Government (Regeringskansliet) and public agencies (Myndigheter) with structured intelligence techniques</strong> โ€” ACH, SWOT, PESTLE, STRIDE, political-risk scoring and OSINT/INTOP tradecraft โ€” applied to <strong>349 current MPs</strong>, <strong>2,494 historical politicians (1971โ€“2024)</strong>, <strong>3.5M+ votes</strong> and <strong>109,000+ parliamentary documents</strong>.</p>
      <p>An autonomous AI newsroom โ€” <strong>11 agentic workflows</strong>, Claude Opus, zero human editors โ€” turns this evidence into <strong>publication-ready intelligence articles in 14 languages, every day</strong>. Front-loads the live <strong>Tidรถ Agreement coalition status</strong> (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.</p>
      <ul>
        <li>๐Ÿ“ฐ <strong>11 agentic workflows</strong> โ€” 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)</li>
        <li>๐Ÿง  <strong>91 skills across 12 categories</strong> + <strong>24 Copilot agents</strong> (14 personas + 9 workflow specialists + shared developer instructions) โ€” full catalog at <a href="https://github.com/Hack23/riksdagsmonitor/blob/main/SKILLS.md">SKILLS.md</a> / <a href="https://github.com/Hack23/riksdagsmonitor/blob/main/AGENTS.md">AGENTS.md</a></li>
        <li>๐Ÿ“š <strong>11 published methodologies + 23 templates</strong> (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</li>
        <li>๐Ÿ“Š <strong>5 flagship Chart.js / D3.js dashboards</strong> + <a href="https://riksdagsmonitor.com/dashboard/index.html">CIA Intelligence Dashboard</a> โ€” Seasonal Activity (2002โ€“2025 ยท Z-score anomaly) ยท 349-MP Politician Dashboard ยท Pre-Election Monitor ยท Party Performance (1990โ€“2026) ยท Anomaly &amp; Early Warning</li>
        <li>๐ŸŒ <strong>14 languages</strong> โ€” 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</li>
        <li>๐Ÿ“ฆ <strong>npm package <code>riksdagsmonitor</code></strong> โ€” Theme System ยท Chart Factory ยท Resilient Data Loader ยท 12 dashboard modules ยท CIA intelligence modules โ€” published with SLSA build provenance</li>
        <li>๐Ÿ›ก๏ธ <strong>OpenSSF Best Practices Project #12069</strong> ยท 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</li>
      </ul>
      <div>
        <a href="https://riksdagsmonitor.com"><strong>๐ŸŒ Live Platform</strong></a> ยท
        <a href="https://riksdagsmonitor.com/political-intelligence.html"><strong>๐Ÿ•ต๏ธ Political Intelligence</strong></a> ยท
        <a href="https://riksdagsmonitor.com/news/index.html"><strong>๐Ÿ“ฐ AI Newsroom</strong></a> ยท
        <a href="https://riksdagsmonitor.com/dashboard/index.html"><strong>๐Ÿ“Š Intelligence Dashboard</strong></a> ยท
        <a href="https://riksdagsmonitor.com/sitemap.html"><strong>๐Ÿ—บ๏ธ Sitemap</strong></a> ยท
        <a href="https://github.com/Hack23/riksdagsmonitor"><strong>๐Ÿ“‚ Repository</strong></a> ยท
        <a href="https://hack23.com/riksdagsmonitor-features.html"><strong>โœจ Features</strong></a> ยท
        <a href="https://hack23.com/riksdagsmonitor-docs.html"><strong>๐Ÿ“š Documentation</strong></a>
      </div>
    </td>
  </tr>
</table>

[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/Hack23/riksdagsmonitor/badge)](https://scorecard.dev/viewer/?uri=github.com/Hack23/riksdagsmonitor)
[![Quality Checks](https://github.com/Hack23/riksdagsmonitor/actions/workflows/quality-checks.yml/badge.svg)](https://github.com/Hack23/riksdagsmonitor/actions/workflows/quality-checks.yml)
[![Dependency Review](https://github.com/Hack23/riksdagsmonitor/actions/workflows/dependency-review.yml/badge.svg)](https://github.com/Hack23/riksdagsmonitor/actions/workflows/dependency-review.yml)
[![CodeQL](https://github.com/Hack23/riksdagsmonitor/actions/workflows/codeql.yml/badge.svg)](https://github.com/Hack23/riksdagsmonitor/actions/workflows/codeql.yml)
[![JavaScript Testing](https://github.com/Hack23/riksdagsmonitor/actions/workflows/javascript-testing.yml/badge.svg)](https://github.com/Hack23/riksdagsmonitor/actions/workflows/javascript-testing.yml)
[![Translation Validation](https://github.com/Hack23/riksdagsmonitor/actions/workflows/translation-validation.yml/badge.svg)](https://github.com/Hack23/riksdagsmonitor/actions/workflows/translation-validation.yml)
[![Release](https://github.com/Hack23/riksdagsmonitor/actions/workflows/release.yml/badge.svg)](https://github.com/Hack23/riksdagsmonitor/actions/workflows/release.yml)
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12069/badge)](https://www.bestpractices.dev/projects/12069)
[![License](https://img.shields.io/github/license/Hack23/riksdagsmonitor)](https://github.com/Hack23/riksdagsmonitor/blob/main/LICENSE)
[![ISMS](https://img.shields.io/badge/Hack23-ISMS-blue?logo=shield)](https://github.com/Hack23/ISMS-PUBLIC)
[![ISO 27001](https://img.shields.io/badge/ISO-27001:2022-purple?logo=iso)](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Secure_Development_Policy.md)
[![NIST CSF](https://img.shields.io/badge/NIST-CSF_2.0-orange?logo=nist)](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Secure_Development_Policy.md)
[![CIS Controls](https://img.shields.io/badge/CIS-Controls_v8.1-red?logo=cisecurity)](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Secure_Development_Policy.md)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Hack23/riksdagsmonitor)

### ๐Ÿ•ต๏ธ Citizen Intelligence Agency (CIA)

> **Political transparency platform** โ€” Java/Spring data backbone behind Riksdagsmonitor's historical evidence layer

<table>
  <tr>
    <td width="120" align="center">
      <img src="https://raw.githubusercontent.com/Hack23/cia/refs/heads/master/citizen-intelligence-agency/src/main/webapp/VAADIN/themes/cia/cia-logo.png" width="80" height="80" alt="CIA Logo"/>
      <div>
        <a href="https://github.com/Hack23/cia/releases">
          <img src="https://img.shields.io/github/v/release/Hack23/cia" alt="Release">
        </a>
      </div>
    </td>
    <td>
      <p>The <strong>Citizen Intelligence Agency</strong> is the Java/Spring Boot political-analytics backend that supplies <strong>15 CIA subsystems</strong> (anomaly ยท coalition ยท committee ยท distribution ยท election ยท election-cycle ยท ministry ยท parties ยท party ยท percentile ยท politician ยท pre-election ยท risk ยท seasonal ยท voting) consumed nightly by Riksdagsmonitor. It is the primary historical-evidence layer for Swedish political activity with <strong>50+ years of voting records (1971โ€“2024)</strong>, <strong>2,494 historical politicians</strong>, <strong>349 current MPs</strong>, <strong>3.5M+ votes</strong>, <strong>109,000+ documents</strong>, <strong>8,740 committee documents</strong>, and a <strong>45-rule transparency engine</strong> tracking 2,308 identified rule violations across 8 Riksdag-represented parties.</p>
      <div>
        <a href="https://github.com/Hack23/cia"><strong>๐Ÿ“‚ Repository</strong></a> ยท
        <a href="https://hack23.github.io/cia/"><strong>๐ŸŒ GitHub Pages</strong></a> ยท
        <a href="https://github.com/Hack23/cia/tree/master/json-export-specs/visualizations"><strong>๐Ÿ“Š JSON Export Specs</strong></a> ยท
        <a href="https://hack23.com/cia-features.html"><strong>โœจ Features</strong></a> ยท
        <a href="https://hack23.com/cia-docs.html"><strong>๐Ÿ“š Documentation</strong></a>
      </div>
    </td>
  </tr>
</table>

[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/770/badge)](https://bestpractices.coreinfrastructure.org/projects/770)
[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/Hack23/cia/badge)](https://scorecard.dev/viewer/?uri=github.com/Hack23/cia)
[![SLSA 3](https://slsa.dev/images/gh-badge-level3.svg)](https://github.com/Hack23/cia/attestations)
[![Verify & Deploy](https://github.com/Hack23/cia/actions/workflows/release.yml/badge.svg?branch=master)](https://github.com/Hack23/cia/actions/workflows/release.yml)
[![Scorecard supply-chain security](https://github.com/Hack23/cia/actions/workflows/scorecards.yml/badge.svg?branch=master)](https://github.com/Hack23/cia/actions/workflows/scorecards.yml)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Hack23_cia&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Hack23_cia)
[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=Hack23_cia&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=Hack23_cia)
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=Hack23_cia&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=Hack23_cia)
[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=Hack23_cia&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=Hack23_cia)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Hack23/cia)

### ๐ŸŒ 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](https://www.hack23.com) (Org.nr 559534-7807) โ€” Swedish cybersecurity & open-source intelligence consultancy |
| ๐Ÿ›ก๏ธ **ISMS** | [Hack23 ISMS-PUBLIC](https://github.com/Hack23/ISMS-PUBLIC) โ€” fully documented information-security management system |

### ๐Ÿ”— Hack23 Portfolio Quick Links

- ๐ŸŒ **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)
- ๐Ÿง  **Political Intelligence Hubs** โ€” [EU Parliament](https://euparliamentmonitor.com/political-intelligence.html) ยท [Riksdag](https://riksdagsmonitor.com/political-intelligence.html)
- ๐Ÿ“‚ **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)
- ๐Ÿ“ฆ **npm packages** โ€” [`european-parliament-mcp-server`](https://www.npmjs.com/package/european-parliament-mcp-server) ยท [`euparliamentmonitor`](https://www.npmjs.com/package/euparliamentmonitor) ยท [`riksdagsmonitor`](https://www.npmjs.com/package/riksdagsmonitor)
- ๐Ÿ“ฐ **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/)
- ๐Ÿค– **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)

---


<p align="center">
  <!-- Security Architecture -->
  <a href="./SECURITY_ARCHITECTURE.md">
    <img src="https://img.shields.io/badge/๐Ÿ›ก๏ธ%20Security-Architecture-blue?style=flat-square" alt="Security Architecture">
  </a>
  
  <!-- Architecture Diagrams -->
  <a href="./ARCHITECTURE_DIAGRAMS.md">
    <img src="https://img.shields.io/badge/๐Ÿ—๏ธ%20Architecture-Diagrams-blue?style=flat-square" alt="Architecture Diagrams">
  </a>
  
  <!-- Workflows Documentation -->
  <a href="./.github/WORKFLOWS.md">
    <img src="https://img.shields.io/badge/โš™๏ธ%20CI%2FCD-Workflows-blue?style=flat-square" alt="Workflows Documentation">
  </a>
  
  <!-- Performance Guide -->
  <a href="./PERFORMANCE_GUIDE.md">
    <img src="https://img.shields.io/badge/โšก%20Performance-Guide-blue?style=flat-square" alt="Performance Guide">
  </a>
</p>


## ๐Ÿ” Security & Compliance

<p align="center">
  <!-- OpenSSF Scorecard -->
  <a href="https://securityscorecards.dev/viewer/?uri=github.com/Hack23/European-Parliament-MCP-Server">
    <img src="https://api.securityscorecards.dev/projects/github.com/Hack23/European-Parliament-MCP-Server/badge?style=flat-square" alt="OpenSSF Scorecard">
  </a>
  
  <!-- SLSA Level 3 -->
  <a href="https://github.com/Hack23/European-Parliament-MCP-Server/attestations/">
    <img src="https://slsa.dev/images/gh-badge-level3.svg" alt="SLSA 3">
  </a>
  
  <!-- SBOM -->
  <a href="https://hack23.github.io/European-Parliament-MCP-Server/SBOM.md">
    <img src="https://img.shields.io/badge/SBOM-SPDX%202.3-blue?style=flat-square" alt="SBOM">
  </a>
  
  <!-- SBOM Quality -->
  <a href="https://hack23.github.io/European-Parliament-MCP-Server/SBOM.md">
    <img src="https://img.shields.io/badge/SBOM%20Quality-8.5%2F10-brightgreen?style=flat-square" alt="SBOM Quality">
  </a>
  
  <!-- Attestations -->
  <a href="https://hack23.github.io/European-Parliament-MCP-Server/ATTESTATIONS.md">
    <img src="https://img.shields.io/badge/Attestations-Available-success?style=flat-square" alt="Build Attestations">
  </a>
</p>

<p align="center">
  <!-- ISMS Compliance -->
  <a href="https://github.com/Hack23/ISMS-PUBLIC">
    <img src="https://img.shields.io/badge/ISMS-ISO%2027001-success?style=flat-square" alt="ISO 27001">
  </a>
  <a href="https://github.com/Hack23/ISMS-PUBLIC">
    <img src="https://img.shields.io/badge/ISMS-NIST%20CSF%202.0-success?style=flat-square" alt="NIST CSF 2.0">
  </a>
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2FHack23%2FEuropean-Parliament-MCP-Server?ref=badge_shield" alt="FOSSA Status"><img src="https://app.fossa.com/api/projects/git%2Bgithub.com%2FHack23%2FEuropean-Parliament-MCP-Server.svg?type=shield"/></a>
  <a href="https://github.com/Hack23/ISMS-PUBLIC">
    <img src="https://img.shields.io/badge/ISMS-CIS%20Controls%20v8.1-success?style=flat-square" alt="CIS Controls">
  </a>
  <a href="https://gdpr.eu/">
    <img src="https://img.shields.io/badge/GDPR-Compliant-success?style=flat-square" alt="GDPR">
  </a>
</p>

---

## ๐Ÿš€ Quick Start

### Run with npx (No Installation Required)

```bash
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)

```bash
# 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

```bash
# 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`:

```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`:

```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`:

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

```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:

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

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

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

---

## ๐Ÿ“š Documentation

### ๐ŸŒ Documentation Portal

**[๐Ÿ“– Complete Documentation Site](https://hack23.github.io/European-Parliament-MCP-Server/)** - Live documentation portal with:
- ๐Ÿ“– **[API Reference (HTML)](https://hack23.github.io/European-Parliament-MCP-Server/api/)** - TypeDoc generated API documentation with search, hierarchy navigation, and full type information
- ๐Ÿ“– **[API Reference (Markdown)](https://hack23.github.io/European-Parliament-MCP-Server/api-markdown/)** - SEO-friendly Markdown API documentation
- ๐Ÿ“Š **[Coverage Reports](https://hack23.github.io/European-Parliament-MCP-Server/coverage/)** - Test coverage analysis
- โœ… **[Test Reports](https://hack23.github.io/European-Parliament-MCP-Server/test-results/)** - Unit and E2E test results
- ๐Ÿ” **Build Attestations** - SLSA Level 3 provenance
- ๐Ÿ“ฆ **SBOM** - Software Bill of Materials
- ๐Ÿ—บ๏ธ **[Sitemap](https://hack23.github.io/European-Parliament-MCP-Server/api/sitemap.xml)** - Auto-generated sitemap for search engines

> ๐Ÿ’ก **Note**: Documentation is automatically generated and committed with each release via `npm run docs:build`

### Generated API Documentation

The API documentation is generated using [TypeDoc](https://typedoc.org/) 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:
```bash
npm run docs          # HTML API docs โ†’ docs/api/
npm run docs:md       # Markdown API docs โ†’ docs/api-markdown/
npm run docs:build    # Full documentation build (HTML + MD + coverage + test reports)
```

### Core Documentation

- [**API Usage Guide**](./API_USAGE_GUIDE.md) - Complete tool documentation with examples
- [**Architecture Diagrams**](./ARCHITECTURE_DIAGRAMS.md) - C4 model diagrams and data flows
- [**Troubleshooting Guide**](#troubleshooting) - Common issues and solutions
- [**Developer Guide**](./DEVELOPER_GUIDE.md) - Development workflow and contributing
- [**Deployment Guide**](./DEPLOYMENT_GUIDE.md) - Claude Desktop, VS Code, Docker setup
- [**Performance Guide**](./PERFORMANCE_GUIDE.md) - Optimization strategies
- [**Documentation as Code Guide**](./DOCUMENTATION_AS_CODE.md) - How documentation is generated

### Additional Documentation

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

---

## ๐Ÿ—๏ธ Architecture Overview

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

    subgraph "MCP Server (src/)"
        direction TB
        Tools["๐Ÿ”ง 61 Tools<br/>getMEPs ยท analyzeCoalition<br/>assessMepInfluence ยท โ€ฆ"]
        Resources["๐Ÿ“ฆ 9 Resources<br/>ep://meps/\{mepId\}<br/>ep://procedures/\{procedureId\} ยท โ€ฆ"]
        Prompts["๐Ÿ’ฌ 7 Prompts<br/>mep_briefing<br/>coalition_analysis ยท โ€ฆ"]
    end

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

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

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

    style Server fill:#4caf50,stroke:#2e7d32,color:#fff
    style EPClient fill:#2196f3,stroke:#1565c0,color:#fff
    style EPAPI fill:#9c27b0,stroke:#6a1b9a,color:#fff
    style Cache fill:#ff9800,stroke:#e65100,color:#fff
    style RateLimiter fill:#f44336,stroke:#b71c1c,color:#fff
    style AuditLog fill:#607d8b,stroke:#37474f,color:#fff
```

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

---

## ๐Ÿ”Œ MCP Tools (63 Total)

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

### ๐Ÿ—บ๏ธ Political Intelligence Coverage Map

```mermaid
graph TB
    subgraph OSINT["๐Ÿ•ต๏ธ OSINT Intelligence โ€” 15 Tools"]
        direction LR
        subgraph MEP["MEP Profiling"]
            A1["assess_mep_influence"]
            A2["comparative_intelligence"]
            A3["network_analysis"]
            A4["track_mep_attendance"]
        end
        subgraph COALITION["Coalition Dynamics"]
            B1["analyze_coalition_dynamics"]
            B2["compare_political_groups"]
            B3["detect_voting_anomalies"]
            B4["sentiment_tracker"]
        end
        subgraph STRATEGY["Strategic Warning"]
            C1["early_warning_system"]
            C2["generate_political_landscape"]
            C3["correlate_intelligence"]
        end
        subgraph LEG_INTEL["Legislative Intelligence"]
            D1["analyze_legislative_effectiveness"]
            D2["monitor_legislative_pipeline"]
            D3["analyze_committee_activity"]
            D4["analyze_country_delegation"]
        end
    end

    subgraph ANALYTICS["๐Ÿ“Š Advanced Analysis โ€” 4 Tools"]
        E1["analyze_voting_patterns"]
        E2["track_legislation"]
        E3["generate_report"]
        E4["get_all_generated_stats"]
    end

    subgraph DATA["๐Ÿ“ฆ Core EP Data โ€” 30 Tools"]
        F1["๐Ÿ‘ค MEP Tools (7)"]
        F2["๐Ÿ›๏ธ Plenary & Meeting (9)"]
        F3["๐Ÿ“„ Document Tools (7)"]
        F4["โš–๏ธ Legislative (4)"]
        F5["๐Ÿข Committee (2)"]
        F6["๐Ÿ”ง Diagnostics (1)"]
    end

    subgraph FEEDS["๐Ÿ“ก Real-Time Feeds โ€” 13 Tools"]
        G1["13 change monitoring endpoints"]
    end

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

    style OSINT fill:#d32f2f,stroke:#b71c1c,color:#fff,stroke-width:2px
    style ANALYTICS fill:#1565c0,stroke:#0d47a1,color:#fff,stroke-width:2px
    style DATA fill:#2e7d32,stroke:#1b5e20,color:#fff,stroke-width:2px
    style FEEDS fill:#ff8f00,stroke:#e65100,color:#000,stroke-width:2px
    style MEP fill:#e53935,stroke:#c62828,color:#fff,stroke-width:2px
    style COALITION fill:#e53935,stroke:#c62828,color:#fff,stroke-width:2px
    style STRATEGY fill:#e53935,stroke:#c62828,color:#fff,stroke-width:2px
    style LEG_INTEL fill:#e53935,stroke:#c62828,color:#fff,stroke-width:2px
```

### ๐ŸŽฏ OSINT Intelligence Workflow

```mermaid
graph LR
    subgraph COLLECT["1๏ธโƒฃ Collect"]
        direction TB
        C1["get_meps"]
        C2["get_plenary_sessions"]
        C3["get_voting_records"]
        C4["get_procedures"]
        C5["13 feed tools"]
    end

    subgraph ANALYZE["2๏ธโƒฃ Analyze"]
        direction TB
        AN1["analyze_voting_patterns"]
        AN2["track_legislation"]
        AN3["generate_report"]
        AN4["get_all_generated_stats"]
    end

    subgraph ENRICH["3๏ธโƒฃ Enrich"]
        direction TB
        E1["assess_mep_influence"]
        E2["analyze_coalition_dynamics"]
        E3["detect_voting_anomalies"]
        E4["network_analysis"]
        E5["analyze_legislative_effectiveness"]
    end

    subgraph FUSE["4๏ธโƒฃ Fuse & Alert"]
        direction TB
        F1["correlate_intelligence"]
        F2["early_warning_system"]
        F3["generate_political_landscape"]
        F4["comparative_intelligence"]
        F5["sentiment_tracker"]
    end

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

    style COLLECT fill:#2e7d32,stroke:#1b5e20,color:#fff,stroke-width:2px
    style ANALYZE fill:#1565c0,stroke:#0d47a1,color:#fff,stroke-width:2px
    style ENRICH fill:#9c27b0,stroke:#7b1fa2,color:#fff,stroke-width:2px
    style FUSE fill:#d32f2f,stroke:#b71c1c,color:#fff,stroke-width:2px
```

### ๐Ÿ•ต๏ธ OSINT Intelligence Tools (15)

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

### ๐Ÿ“Š Advanced Analysis Tools (4)

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

### ๐Ÿ‘ค MEP Tools (7)

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

### ๐Ÿ›๏ธ Plenary & Meeting Tools (9)

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

### ๐Ÿข Committee Tools (2)

| Tool | Description | Key Parameters | EP API Endpoint |
|------|-------------|----------------|-----------------|
| [`get_committee_info`](./API_USAGE_GUIDE.md#tool-get_committee_info) | Committee/corporate body info, or all current bodies | id, abbreviation, showCurrent | `GET /corporate-bodies`, `GET /corporate-bodies/show-current` |
| [`get_committee_documents`](./API_USAGE_GUIDE.md#tool-get_committee_documents) | Committee documents and drafts | docId, year, limit | `GET /committee-documents`, `GET /committee-documents/{id}` |

### ๐Ÿ“„ Document Tools (7)

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

### โš–๏ธ Legislative Procedure Tools (4)

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

### ๐Ÿ“ก Feed Tools (13)

Real-time change feeds for monitoring recently updated data across all EP API categories. Per the [EP OpenAPI spec](docs/ep-openapi-spec.json), feeds fall into two groups:

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

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

**Configurable-window feeds:**

| Tool | Description | Key Parameters | EP API Endpoint |
|------|-------------|----------------|-----------------|
| [`get_meps_feed`](./API_USAGE_GUIDE.md#tool-get_meps_feed) | Recently updated MEPs | timeframe, startDate | `GET /meps/feed` |
| [`get_events_feed`](./API_USAGE_GUIDE.md#tool-get_events_feed) | Recently updated events | timeframe, startDate, activityType | `GET /events/feed` |
| [`get_procedures_feed`](./API_USAGE_GUIDE.md#tool-get_procedures_feed) | Recently updated procedures | timeframe, startDate, processType | `GET /procedures/feed` |
| [`get_adopted_texts_feed`](./API_USAGE_GUIDE.md#tool-get_adopted_texts_feed) | Recently updated adopted texts | timeframe, startDate, workType | `GET /adopted-texts/feed` |
| [`get_mep_declarations_feed`](./API_USAGE_GUIDE.md#tool-get_mep_declarations_feed) | Recently updated MEP declarations | timeframe, startDate, workType | `GET /meps-declarations/feed` |
| [`get_external_documents_feed`](./API_USAGE_GUIDE.md#tool-get_external_documents_feed) | Recently updated external documents | timeframe, startDate, workType | `GET /external-documents/feed` |

**Fixed-window feeds (no parameters):**

| Tool | Description | Key Parameters | EP API Endpoint |
|------|-------------|----------------|-----------------|
| [`get_documents_feed`](./API_USAGE_GUIDE.md#tool-get_documents_feed) | Recently updated documents | _(none)_ | `GET /documents/feed` |
| [`get_plenary_documents_feed`](./API_USAGE_GUIDE.md#tool-get_plenary_documents_feed) | Recently updated plenary documents | _(none)_ | `GET /plenary-documents/feed` |
| [`get_committee_documents_feed`](./API_USAGE_GUIDE.md#tool-get_committee_documents_feed) | Recently updated committee docs | _(none)_ | `GET /committee-documents/feed` |
| [`get_plenary_session_documents_feed`](./API_USAGE_GUIDE.md#tool-get_plenary_session_documents_feed) | Recently updated plenary session docs | _(none)_ | `GET /plenary-session-documents/feed` |
| [`get_parliamentary_questions_feed`](./API_USAGE_GUIDE.md#tool-get_parliamentary_questions_feed) | Recently updated questions | _(none)_ | `GET /parliamentary-questions/feed` |
| [`get_corporate_bodies_feed`](./API_USAGE_GUIDE.md#tool-get_corporate_bodies_feed) | Recently updated corporate bodies | _(none)_ | `GET /corporate-bodies/feed` |
| [`get_controlled_vocabularies_feed`](./API_USAGE_GUIDE.md#tool-get_controlled_vocabularies_feed) | Recently updated vocabularies | _(none)_ | `GET /controlled-vocabularies/feed` |

### ๐Ÿ”ง Server Diagnostics (1)

| Tool | Description | Key Parameters | Output |
|------|-------------|----------------|--------|
| [`get_server_health`](./API_USAGE_GUIDE.md#tool-get_server_health) | Server health and feed availability status (no upstream API calls) | _(none)_ | Health object |

๐Ÿ“– **[Complete TypeDoc API documentation โ†’](https://hack23.github.io/European-Parliament-MCP-Server/api/)** ยท **[Markdown API docs โ†’](https://hack23.github.io/European-Parliament-MCP-Server/api-markdown/)**

### Common Use Cases

**Research a specific MEP**:
```
1. Find MEP: get_meps โ†’ {country: "SE"}
2. Get details: get_mep_details โ†’ {id: "MEP-123"}
3. Analyze voting: analyze_voting_patterns โ†’ {mepId: "MEP-123"}
4. Generate report: generate_report โ†’ {reportType: "MEP_ACTIVITY", subjectId: "MEP-123"}
```

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

**Committee analysis**:
```
1. Get committee: get_committee_info โ†’ {abbreviation: "ENVI"}
2. List members: get_meps โ†’ {committee: "ENVI"}
3. Generate report: generate_report โ†’ {reportType: "COMMITTEE_PERFORMANCE", subjectId: "COMM-ENVI"}
```

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

๐ŸŽฏ **[More use cases and examples โ†’](./API_USAGE_GUIDE.md#common-use-cases)**

### ๐Ÿ“ MCP Prompts

Pre-built intelligence analysis prompt templates:

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

### ๐Ÿ“ฆ MCP Resources

Direct data access via EP resource URIs:

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

---

## ๐Ÿ—บ๏ธ Global Political MCP Servers & OSINT Coverage

The European Parliament MCP Server is part of a growing ecosystem 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.

### ๐Ÿ›๏ธ Parliamentary & Legislative MCP Servers

| Country | Server | Data Source | Coverage |
|---------|--------|-------------|----------|
| ๐Ÿ‡ช๐Ÿ‡บ **European Union** | [**European Parliament MCP Server**](https://github.com/Hack23/European-Parliament-MCP-Server) | data.europarl.europa.eu | MEPs, votes, legislation, committees, questions โ€” **63 tools** (15 OSINT) |
| ๐Ÿ‡บ๐Ÿ‡ธ **United States** | [Congress.gov API MCP Server](https://github.com/bsmi021/mcp-congress_gov_server) | congress.gov | Bills, members, votes, committees (TypeScript, v3 API) |
| ๐Ÿ‡บ๐Ÿ‡ธ **United States** | [CongressMCP](https://github.com/amurshak/congressMCP) | congress.gov | Real-time Congress data โ€” bills, votes, members |
| ๐Ÿ‡บ๐Ÿ‡ธ **United States** | [Congress.gov MCP](https://github.com/AshwinSundar/congress_gov_mcp) | congress.gov | Unofficial Congress.gov API access |
| ๐Ÿ‡ฌ๐Ÿ‡ง **United Kingdom** | [Parliament MCP](https://github.com/i-dot-ai/parliament-mcp) | parliament.uk | Hansard, members, debates, divisions |
| ๐Ÿ‡ธ๐Ÿ‡ช **Sweden** | [Riksdag & Regering MCP](https://github.com/isakskogstad/Riksdag-Regering-MCP) | riksdagen.se | Swedish Parliament & Government data (used by [riksdagsmonitor.com](https://riksdagsmonitor.com/)) |
| ๐Ÿ‡ณ๐Ÿ‡ฑ **Netherlands** | [OpenTK MCP](https://github.com/r-huijts/opentk-mcp) | tweedekamer.nl | Dutch Parliament (Tweede Kamer) documents |
| ๐Ÿ‡ต๐Ÿ‡ฑ **Poland** | [Parliament of Poland MCP](https://github.com/pkolawa/parliament-poland-mcp-server) | sejm.gov.pl | Members, votes, committees |
| ๐Ÿ‡ต๐Ÿ‡ฑ **Poland** | [Sejm MCP](https://github.com/janisz/sejm-mcp) | api.sejm.gov.pl | Parliament data + legislation |
| ๐Ÿ‡ฎ๐Ÿ‡ฑ **Israel** | [Knesset MCP Server](https://github.com/zohar/knesset-mcp) | knesset.gov.il | Knesset parliament API |
| ๐Ÿ‡ง๐Ÿ‡ท **Brazil** | [Senado BR MCP](https://mcpservers.org/servers/sidneybissoli/senado-br-mcp) | senado.leg.br | Federal Senate โ€” members, proposals, votes |

### ๐Ÿ“Š Government Open Data MCP Servers

| Country | Server | Data Source | Coverage |
|---------|--------|-------------|----------|
| ๐Ÿ‡บ๐Ÿ‡ธ **United States** | [USA Spending MCP](https://github.com/thsmale/usaspending-mcp-server) | usaspending.gov | Federal spending data |
| ๐Ÿ‡บ๐Ÿ‡ธ **United States** | [Open Census MCP](https://mcpservers.org/servers/brockwebb/open-census-mcp-server) | census.gov | Demographics & statistics (natural language) |
| ๐Ÿ‡บ๐Ÿ‡ธ **United States** | [Data.gov MCP Server](https://github.com/melaodoidao/datagov-mcp-server) | data.gov | Federal dataset catalog |
| ๐Ÿ‡บ๐Ÿ‡ธ **United States** | [CMS Data.gov MCP](https://github.com/clarifyhealth/cms-datagov-mcp-server) | data.cms.gov | Healthcare data โ€” search/filter/pagination |
| ๐Ÿ‡บ๐Ÿ‡ธ **United States** | [SEC EDGAR MCP](https://github.com/stefanoamorelli/sec-edgar-mcp) | sec.gov | SEC filings โ€” annual reports, insider data |
| ๐Ÿ‡บ๐Ÿ‡ธ **United States** | [NPS MCP](https://github.com/amysatterlee/nps_mcp) | nps.gov | National Park Service API |
| ๐Ÿ‡ธ๐Ÿ‡ช **Sweden** | [SCB MCP Server](https://mcpservers.org/servers/isakskogstad/scb-mcp) | scb.se | Official Swedish statistics |
| ๐Ÿ‡ธ๐Ÿ‡ช **Sweden** | [Skolverket MCP](https://mcpservers.org/servers/ksaklfszf921/skolverket-mcp) | skolverket.se | Swedish National Agency for Education |
| ๐Ÿ‡ซ๐Ÿ‡ท **France** | [data.gouv.fr MCP](https://github.com/datagouv/datagouv-mcp) | data.gouv.fr | National open data platform |
| ๐Ÿ‡ซ๐Ÿ‡ท **France** | [Data Gouv MCP Server](https://mcpservers.org/servers/csonigo/datagouv-mcp-server) | data.gouv.fr | Companies & organizations search |
| ๐Ÿ‡ฌ๐Ÿ‡ง **United Kingdom** | [Planning Data MCP](https://github.com/alizoli/planningdatagovuk-api) | planning.data.gov.uk | Planning & land use data |
| ๐Ÿ‡ฌ๐Ÿ‡ง **United Kingdom** | [Property Prices MCP](https://github.com/joemclo/property-prices-mcp) | landregistry.data.gov.uk | Housing price search |
| ๐Ÿ‡ณ๐Ÿ‡ฑ **Netherlands** | [CBS Open Data MCP](https://github.com/dstotijn/mcp-cbs-cijfers-open-data) | cbs.nl | Dutch statistics bureau |
| ๐Ÿ‡ฎ๐Ÿ‡ฑ **Israel** | [Data.gov.il MCP](https://github.com/DavidOsherProceed/data-gov-il-mcp) | data.gov.il | National CKAN data portal |
| ๐Ÿ‡ฎ๐Ÿ‡ฑ **Israel** | [DataGov Israel MCP](https://github.com/aviveldan/datagov-mcp) | data.gov.il | Alternative implementation + visualization |
| ๐Ÿ‡ฎ๐Ÿ‡ฑ **Israel** | [Israel Statistics MCP](https://github.com/reuvenaor/israel-statistics-mcp) | cbs.gov.il | CPI & economic time series |
| ๐Ÿ‡ฎ๐Ÿ‡ฑ **Israel** | [BudgetKey MCP](https://github.com/OpenBudget/budgetkey-mcp) | open-budget.org.il | State budget, contracts, grants |
| ๐Ÿ‡น๐Ÿ‡ท **Turkey** | [Mevzuat MCP](https://mcpservers.org/servers/MCP-Mirror/saidsurucu_mevzuat-mcp) | mevzuat.gov.tr | Legislation system โ€” search/retrieve laws |
| ๐Ÿ‡ญ๐Ÿ‡ฐ **Hong Kong** | [HK Data.gov.hk MCP](https://github.com/hkopenai/hk-datagovhk-mcp-server) | data.gov.hk | Hong Kong open data portal |
| ๐Ÿ‡ฒ๐Ÿ‡พ **Malaysia** | [Data.gov.my MCP](https://github.com/manfye/data-dosm-mcp-nodejs) | data.gov.my | National data portal |
| ๐Ÿ‡ฎ๐Ÿ‡ณ **India** | [Data.gov.in MCP](https://github.com/adwait-ai/mcp_data_gov_in) | data.gov.in | Semantic search + dataset access |
| ๐Ÿ‡ธ๐Ÿ‡ฌ **Singapore** | [Gahmen MCP Server](https://github.com/aniruddha-adhikary/gahmen-mcp) | data.gov.sg | Government datasets + CKAN search |
| ๐Ÿ‡ธ๐Ÿ‡ฌ **Singapore** | [Singapore Data MCPs](https://github.com/prezgamer/Singapore-Data-MCPs) | data.gov.sg | Multiple servers (parking, health, datasets) |
| ๐Ÿ‡ฆ๐Ÿ‡บ **Australia** | [ABS MCP Server](https://github.com/seansoreilly/mcp-server-abs) | abs.gov.au | Bureau of Statistics (SDMX-ML) |

### ๐ŸŒ Multi-Portal & Generic MCP Servers

| Scope | Server | Platform | Coverage |
|-------|--------|----------|----------|
| ๐ŸŒ **Global (CKAN)** | [CKAN MCP Server](https://github.com/ondata/ckan-mcp-server) | CKAN portals | Generic server for any CKAN-based open data portal |
| ๐ŸŒ **Global (Socrata)** | [OpenGov MCP Server](https://github.com/srobbin/opengov-mcp-server) | Socrata portals | City/county/state/federal Socrata-powered portals |

### ๐Ÿ•ต๏ธ OSINT Intelligence Capabilities Comparison

| 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 capabilities** of any political MCP server, with **63 specialized tools** including 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.

---

## ๐Ÿ›๏ธ European Parliament Datasets

### Complete EP API v2 Coverage

All 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}`):

| 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` |

### Data Source

- **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

---

## ๐Ÿ”’ Security & Compliance

### ISMS Compliance

This project aligns with [Hack23 AB's Information Security Management System (ISMS)](https://github.com/Hack23/ISMS-PUBLIC):

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

### Security Features

- ๐Ÿ” **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

### Supply Chain Security

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**](docs/ATTESTATIONS.md) for verification instructions and security benefits.

### ๐Ÿ“‹ Project Classification

Per [Hack23 Open Source Policy](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Open_Source_Policy.md):

| Property | Value |
|----------|-------|
| **CRA Classification** | [![Standard](https://img.shields.io/badge/CRA-Standard-green?style=flat-square)](CRA-ASSESSMENT.md) Non-commercial Open Source Software |
| **Confidentiality** | [![Public](https://img.shields.io/badge/C-Public-lightgrey?style=flat-square)](https://github.com/Hack23/ISMS-PUBLIC/blob/main/CLASSIFICATION.md) |
| **Integrity** | [![Moderate](https://img.shields.io/badge/I-Moderate-yellow?style=flat-square)](https://github.com/Hack23/ISMS-PUBLIC/blob/main/CLASSIFICATION.md) |
| **Availability** | [![Standard](https://img.shields.io/badge/A-Standard-lightgreen?style=flat-square)](https://github.com/Hack23/ISMS-PUBLIC/blob/main/CLASSIFICATION.md) |

See [**CRA-ASSESSMENT.md**](CRA-ASSESSMENT.md) for the full EU Cyber Resilience Act conformity assessment.

---

## ๐Ÿงช Development

### Setup Development Environment

```bash
# Install dependencies
npm install

# Run in development mode with auto-reload
npm run dev

# Type checking
npm run type-check

# Linting
npm run lint

# Format code
npm run format

# Run tests
npm test

# Run tests with coverage
npm run test:coverage
```

### Project Structure

```
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
```

### Documentation

#### ๐Ÿ“š Developer Documentation

- **[JSDoc Coverage Report](./JSDOC_COVERAGE_REPORT.md)** - Detailed analysis of JSDoc documentation coverage across all source files
- **[JSDoc Quick Reference](./docs/JSDOC_QUICK_REFERENCE.md)** - Quick reference guide for writing comprehensive JSDoc comments
- **[JSDoc Coverage Summary](./JSDOC_COVERAGE_SUMMARY.md)** - Executive summary of documentation status and priorities
- **[JSDoc Coverage Visualization](./docs/JSDOC_COVERAGE_VISUALIZATION.md)** - Visual representation of documentation coverage with charts and graphs

#### ๐Ÿ—๏ธ Architecture & Design

- **[Architecture Documentation](./ARCHITECTURE.md)** - System architecture and design patterns
- **[Data Model](./DATA_MODEL.md)** - Data structures and type definitions
- **[API Usage Guide](./API_USAGE_GUIDE.md)** - Guide for using the MCP server API
- **[EP Political Landscape](./EP_POLITICAL_LANDSCAPE.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

#### ๐Ÿงช Testing & Quality

- **[Test Coverage Report](./TEST_COVERAGE_REPORT.md)** - Test coverage statistics and analysis
- **[Developer Guide](./DEVELOPER_GUIDE.md)** - Development setup and guidelines
- **[Performance Guide](./PERFORMANCE_GUIDE.md)** - Performance optimization strategies

#### ๐Ÿ”’ Security & Compliance

- **[Security Policy](./SECURITY.md)** - Vulnerability reporting and security practices
- **[Security Architecture](./SECURITY_ARCHITECTURE.md)** - Security controls and architecture
- **[Secure Development Policy](./Secure_Development_Policy.md)** - Secure coding standards
- **[Open Source Policy](./Open_Source_Policy.md)** - Open source compliance guidelines

#### ๐Ÿ“ฆ Deployment & Operations

- **[Deployment Guide](./DEPLOYMENT_GUIDE.md)** - Production deployment instructions
- **[Troubleshooting Guide](#troubleshooting)** - Common issues and solutions
- **[NPM Publishing Guide](./NPM_PUBLISHING.md)** - Package publishing workflow

### Testing

```bash
# Unit tests
npm test

# Integration tests (requires EP_INTEGRATION_TESTS=true)
EP_INTEGRATION_TESTS=true npm run test:integration

# Integration tests with fixture capture
EP_INTEGRATION_TESTS=true EP_SAVE_FIXTURES=true npm run test:integration

# E2E tests
npm run test:e2e

# Coverage report
npm run test:coverage

# Watch mode
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**](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).

### Code Quality

```bash
# Lint code
npm run lint

# Fix linting issues
npm run lint:fix

# Check for unused dependencies
npm run knip

# Security audit
npm audit

# License compliance
npm run test:licenses

# Optional: keep Mermaid diagrams readable while editing
# (Mermaid validation is not currently enforced in CI)
```

---

## ๐Ÿ› ๏ธ Troubleshooting

### API Rate Limits

**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:**
```bash
# Reduce concurrency โ€” don't call multiple tools in parallel bursts
# Use the built-in cache โ€” repeated identical requests are served from LRU cache
# Add a delay between bulk operations:
# e.g., call get_meps, wait 1 s, then call get_mep_details

# Check current cache stats (if using programmatic access):
const stats = epClient.getCacheStats();
console.log(`Cache hit rate: ${stats.hitRate}%`);
```

### Connectivity Issues

**Symptom:** `ECONNREFUSED`, `ETIMEDOUT`, or `Network error` from tools.

**Solutions:**
1. Verify EP API reachability: `curl https://data.europarl.europa.eu/api/v2/meps?limit=1`
2. Check firewall / proxy settings โ€” the server connects outbound to `data.europarl.europa.eu:443`
3. Enable retry (default: on) โ€” the client retries transient failures with exponential backoff
4. Review API status at https://data.europarl.europa.eu/en/developer-corner

### Installation Problems

**Symptom:** `npm install` fails, or `node dist/index.js` throws import errors.

**Solutions:**
```bash
# Ensure Node.js 26+ is installed
node --version   # Must be >= 26.0.0

# Clear npm cache and reinstall
npm cache clean --force
rm -rf node_modules package-lock.json
npm install

# Rebuild TypeScript output
npm run build

# Verify the package starts correctly
node dist/index.js --version
```

**Symptom:** MCP client shows "server not found" or no tools listed.

**Solutions:**
- Confirm the `command` path in your MCP client config points to the correct binary
- For `npx`: ensure `european-parliament-mcp-server` is in your npm registry
- For `node`: use the absolute path to `dist/index.js`
- Check MCP client logs โ€” most clients (Claude Desktop, VS Code) log connection errors

### Integration Test Failures

**Symptom:** Integration tests fail with `EP_INTEGRATION_TESTS must be set`.

Integration tests are disabled by default to respect API rate limits.

```bash
# Enable integration tests explicitly:
EP_INTEGRATION_TESTS=true npm run test:integration

# Capture fresh fixtures for offline testing:
EP_INTEGRATION_TESTS=true EP_SAVE_FIXTURES=true npm run test:integration
```

### TypeScript / Build Errors

**Symptom:** `tsc` reports type errors after pulling latest changes.

```bash
# Regenerate all types
npm run type-check

# Check for mismatched Node types
npm install  # updates @types/node

# Ensure tsconfig is correct
cat tsconfig.json
```

### Getting Help

- ๐Ÿ“‹ [Open an Issue](https://github.com/Hack23/European-Parliament-MCP-Server/issues)
- ๐Ÿ’ฌ [Start a Discussion](https://github.com/Hack23/European-Parliament-MCP-Server/discussions)
- ๐Ÿ“– [Full Troubleshooting Guide](#troubleshooting)
- ๐Ÿค– [Ask DeepWiki](https://deepwiki.com/Hack23/European-Parliament-MCP-Server)

---

## ๐Ÿค Contributing

We welcome contributions! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for details on:

- Code of conduct
- Development process
- Pull request guidelines
- Coding standards
- Testing requirements

### GitHub Copilot Integration

This repository includes custom agents and skills for GitHub Copilot:

- **Agents**: Specialized AI assistants for development, testing, security, and documentation
- **Skills**: Reusable patterns for MCP development, security, testing, and performance
- See [.github/agents/README.md](./.github/agents/README.md) and [.github/skills/README.md](./.github/skills/README.md)

### Release Process

We follow [Semantic Versioning](https://semver.org/) and use automated release management:

**Version Types:**
- **Major** (x.0.0): Breaking changes (e.g., API incompatible changes)
- **Minor** (0.x.0): New features, backward compatible (e.g., new MCP tools)
- **Patch** (0.0.x): Bug fixes, security updates, backward compatible

**Automated Release Workflow:**
1. Develop features in feature branches
2. Create PR with descriptive title using [Conventional Commits](https://www.conventionalcommits.org/)
3. Labels are automatically applied based on changed files
4. After merge to main, release draft is automatically created
5. Review and publish release (creates git tag automatically)

**Release Notes Include:**
- Categorized changes by feature area
- Security badges (OpenSSF Scorecard, SLSA)
- Technology stack and compatibility
- ISMS compliance status
- Full changelog link

For detailed workflow documentation, see [.github/WORKFLOWS.md](./.github/WORKFLOWS.md).

---

## ๐Ÿค– AI-Disrupted Intelligence & Future Roadmap

> **๐Ÿ“ฐ News is dead. Long live intelligence.**
>
> While the world's newsrooms race to replace journalists with GPT-powered headline factories โ€” churning out *"10 Things the EU Did Today"* listicles at the speed of hallucination โ€” we took a different path. Instead of automating the news *ticker*, we built a **political intelligence platform** that actually *understands* what the European Parliament does. Disrupted news generation produces noise; **deep political intelligence** produces signal. Any chatbot can summarize a press release. It takes **62 MCP tools**, **15 OSINT analyzers**, and a **5-dimension influence model** to tell you *which MEP quietly brokered the amendment that changed the directive that reshaped an industry* โ€” three months before the newspapers notice.
>
> **This is not a news bot. This is parliamentary intelligence infrastructure.**

### ๐Ÿ—๏ธ Agentic Architecture Overview

This repository is powered by a comprehensive AI-augmented development ecosystem โ€” **14 specialized Copilot agents**, **41 reusable skills**, and **11 CI/CD workflows** โ€” working in concert to maintain, analyze, and evolve the most advanced political MCP server in existence.

```mermaid
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#6366f1', 'primaryTextColor': '#fff', 'primaryBorderColor': '#4f46e5', 'lineColor': '#94a3b8', 'secondaryColor': '#f59e0b', 'tertiaryColor': '#10b981', 'background': '#0f172a', 'mainBkg': '#1e293b', 'nodeBorder': '#475569'}}}%%
graph TB
    subgraph AGENTS["๐Ÿค– 14 Copilot Agents"]
        style AGENTS fill:#1e1b4b,stroke:#6366f1,color:#e0e7ff
        A1["๐ŸŽฏ product-task-agent"]
        A2["๐Ÿ“ documentation-writer"]
        A3["๐Ÿ”ง frontend-specialist"]
        A4["๐Ÿ”Œ api-integration-engineer"]
        A5["โš™๏ธ mcp-developer"]
        A6["๐Ÿ›ก๏ธ security-specialist"]
        A7["๐Ÿงช test-engineer"]
        A8["๐Ÿ•ต๏ธ intelligence-operative"]
        A9["๐Ÿ›๏ธ european-parliament-specialist"]
        A10["๐Ÿ“Š performance-optimizer"]
        A11["๐Ÿ“‹ isms-compliance-auditor"]
        A12["๐Ÿ’ผ business-development-specialist"]
        A13["๐Ÿ“ฃ marketing-specialist"]
        A14["๐Ÿงฉ zod-schema-architect"]
    end

    subgraph SKILLS["๐ŸŽฏ 41 Reusable Skills"]
        style SKILLS fill:#1c1917,stroke:#f59e0b,color:#fef3c7
        S1["๐Ÿ”ง 10 Core Dev Skills"]
        S2["๐Ÿ›ก๏ธ 6 Security Skills"]
        S3["โš™๏ธ 4 DevOps Skills"]
        S4["๐Ÿ” 10 Intel & OSINT Skills"]
        S5["๐Ÿ’ผ 2 Business Skills"]
        S6["๐Ÿค– 3 AI & MCP Gateway Skills"]
        S7["๐Ÿ“‹ 6 ISMS Compliance Skills"]
    end

    subgraph WORKFLOWS["โš™๏ธ 11 CI/CD Workflows"]
        style WORKFLOWS fill:#022c22,stroke:#10b981,color:#d1fae5
        W1["๐Ÿงช test-and-report"]
        W2["๐Ÿ” codeql"]
        W3["๐Ÿ“ฆ release"]
        W4["๐ŸŒ integration-tests"]
        W5["๐Ÿ“‹ sbom-generation"]
        W6["๐Ÿ”’ slsa-provenance"]
        W7["๐Ÿ“Š scorecard"]
        W8["๐Ÿ”Ž dependency-review"]
        W9["๐Ÿท๏ธ labeler"]
        W10["โš™๏ธ setup-labels"]
        W11["๐Ÿค– copilot-setup-steps"]
    end

    subgraph TOOLS["๐Ÿ”Œ 62 MCP Tools"]
        style TOOLS fill:#172554,stroke:#3b82f6,color:#dbeafe
        T1["๐Ÿ•ต๏ธ 15 OSINT Intelligence"]
        T2["๐Ÿ“Š 3 Advanced Analysis + 1 Diagnostics"]
        T3["๐Ÿ‘ค 7 MEP Data"]
        T4["๐Ÿ›๏ธ 9 Plenary & Meeting"]
        T5["๐Ÿ“„ 12 Document, Committee & Legislative"]
    end

    AGENTS --> SKILLS
    AGENTS --> TOOLS
    SKILLS --> WORKFLOWS
    WORKFLOWS --> TOOLS
```

### ๐Ÿ“… Future Advanced Roadmap: 2026โ€“2037

> From **62 MCP tools** today to a **transformative democratic intelligence platform** serving all 195 parliamentary systems โ€” powered by the relentless march of AI model generations.

#### Phase 5: Advanced Intelligence (2026โ€“2027)

```mermaid
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#6366f1', 'primaryTextColor': '#fff', 'primaryBorderColor': '#4f46e5', 'lineColor': '#94a3b8', 'secondaryColor': '#22d3ee', 'tertiaryColor': '#10b981'}}}%%
timeline
    title 2026โ€“2027 ยท Advanced Intelligence Era
    section Q1โ€“Q2 2026
        Agentic News Generation : Opus 4.6โ€“4.7
        : AI-generated parliamentary briefings
        : Automated committee intelligence reports
        : Real-time vote analysis summaries
    section Q3โ€“Q4 2026
        Deep Analysis Pipelines : Opus 4.8โ€“4.9
        : Cross-institutional correlation engine
        : MEP behavioral prediction models
        : Legislative outcome forecasting
    section Q1โ€“Q2 2027
        Predictive Analytics : Opus 5.0โ€“5.1
        : Coalition formation prediction
        : Amendment survival probability
        : Policy impact pre-assessment
    section Q3โ€“Q4 2027
        Multi-source Intelligence : Opus 5.2โ€“5.3
        : EUR-Lex deep integration
        : Council position analysis
        : Commission proposal tracking
```

#### Phase 6: AGI Era & Transformative Democracy (2034โ€“2037)

> *Scenario: AGI or near-AGI systems become available through Amazon Bedrock or successor platforms*

```mermaid
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#a855f7', 'primaryTextColor': '#fff', 'lineColor': '#c084fc', 'secondaryColor': '#f59e0b', 'tertiaryColor': '#ec4899'}}}%%
mindmap
  root(("๐ŸŒ AGI Era\n2034โ€“2037"))
    ๐Ÿค– AGI-Enhanced Intelligence
      Autonomous real-time analysis
        All 195 parliamentary systems
        Every legislative session globally
        Sub-second pattern detection
      Universal language support
        All UN official languages
        Regional dialects & legal terminology
        Real-time translation & summarization
    ๐Ÿ“Š Predictive Governance
      Policy impact prediction
        Before legislation is proposed
        Economic modeling integration
        Social impact forecasting
      Democratic health monitoring
        Voter engagement indices
        Institutional resilience scores
        Democratic backsliding alerts
    โš–๏ธ Ethical AI Governance
      Human oversight maintained
        Regardless of AI capability level
        Escalation protocols for critical decisions
        Transparency reports on AI judgments
      Bias detection & correction
        Multi-cultural fairness auditing
        Political neutrality verification
        Algorithmic accountability logs
    ๐Ÿ›ก๏ธ Democratic Safeguards
      Anti-weaponization architecture
        Platform prevents manipulation
        Disinformation detection layer
        Foreign influence monitoring
      Sovereignty protection
        EU data sovereignty enforced
        Quantum-resistant encryption
        Air-gapped government deployments
```

#### ๐Ÿงฌ AI Model Evolution Strategy

> **Assumptions:** Anthropic Opus minor updates every ~2.3 months through 2037 (or until successor paradigm). Major version upgrades annually. Competitors (OpenAI, Google, Meta, EU sovereign AI) evaluated at each major release. Architecture must accommodate potential paradigm shifts (quantum AI, neuromorphic computing).

```mermaid
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#6366f1', 'primaryTextColor': '#fff', 'primaryBorderColor': '#4f46e5', 'lineColor': '#94a3b8', 'secondaryColor': '#f59e0b', 'tertiaryColor': '#10b981'}}}%%
gantt
    title AI Model Evolution & Platform Capability Growth
    dateFormat YYYY
    axisFormat %Y
    todayMarker off

    section AI Models
    Opus 4.6โ€“4.9        :a1, 2026, 2027
    Opus 5.x             :a2, 2027, 2028
    Opus 6.x Multimodal  :a3, 2028, 2029
    Opus 7.x Autonomous  :a4, 2029, 2030
    Opus 8.x Near-Expert :a5, 2030, 2031
    Opus 9โ€“10.x Pre-AGI  :a6, 2031, 2034
    AGI / Post-AGI       :a7, 2034, 2037

    section Platform Phases
    Phase 5 Advanced Intel     :p5, 2026, 2028
    Phase 5b Predictive        :p5b, 2028, 2030
    Phase 5c Autonomous        :p5c, 2030, 2031
    Phase 6 Pre-AGI Global     :p6a, 2031, 2034
    Phase 6 AGI Transformative :p6b, 2034, 2037
```

#### ๐Ÿ“Š Workflow Count & Capability Projection

> **Baseline:** 11 GitHub Actions workflows today. Projected growth includes AI-generated workflows, scheduled intelligence pipelines, multi-environment deployment chains, and automated OSINT processing โ€” see [FUTURE_WORKFLOWS.md](./FUTURE_WORKFLOWS.md) for detailed expansion plans.

| Year | Total Workflows | AI Model | Key Capability | Tools |
|:----:|:---------------:|:--------:|:---------------|:-----:|
| **2026** | 44โ€“50 | Opus 4.6โ€“4.9 | ๐Ÿค– Agentic news generation, AI-authored briefings | 46โ†’55 |
| **2027** | 50โ€“55 | Opus 5.x | ๐Ÿ“ˆ Predictive analytics, coalition forecasting | 55โ†’65 |
| **2028** | 55โ€“65 | Opus 6.x | ๐ŸŽฅ Multi-modal content, video/speech analysis | 65โ†’80 |
| **2029** | 65โ€“75 | Opus 7.x | โšก Autonomous pipeline, self-optimizing CI/CD | 80โ†’90 |
| **2030** | 75โ€“85 | Opus 8.x | ๐Ÿง  Near-expert analysis, domain specialist AI | 90โ†’100 |
| **2031โ€“2033** | 85โ€“100 | Opus 9โ€“10.x / Pre-AGI | ๐ŸŒ Global coverage, all EU national parliaments | 100โ†’120 |
| **2034โ€“2037** | 100โ€“120+ | AGI / Post-AGI | ๐ŸŒ Transformative platform, 195 parliaments | 120โ†’200+ |

#### ๐Ÿ”ฎ Strategic Considerations

| Pillar | Description | Safeguard |
|:------:|:------------|:----------|
| ๐Ÿค– **Autonomous Analysis** | AGI-powered real-time political intelligence across all 195 parliamentary systems | Human analyst review for high-stakes assessments |
| ๐ŸŒ **Universal Language** | Every UN language supported natively with legal terminology precision | Multi-cultural fairness auditing at every release |
| ๐Ÿ“Š **Predictive Governance** | Policy impact prediction *before* legislation is proposed | Confidence intervals and uncertainty quantification mandatory |
| โš–๏ธ **Ethical AI Governance** | Human oversight maintained regardless of AI capability level | ISMS-aligned escalation protocols, transparency reports |
| ๐Ÿ›ก๏ธ **Democratic Safeguards** | Platform architecture prevents weaponization or manipulation | Quarterly red-team exercises, sovereignty-first data policies |

#### ๐Ÿ—บ๏ธ Extended Roadmap Visualization

```mermaid
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#6366f1', 'primaryTextColor': '#fff', 'lineColor': '#94a3b8'}}}%%
graph LR
    subgraph Y2026["2026"]
        style Y2026 fill:#1e40af,stroke:#3b82f6,color:#dbeafe
        Y26["๐Ÿค– Opus 4.6โ€“4.9\n44โ€“50 workflows\nAgentic news gen"]
    end
    subgraph Y2027["2027"]
        style Y2027 fill:#1e3a8a,stroke:#3b82f6,color:#dbeafe
        Y27["๐Ÿ“ˆ Opus 5.x\n50โ€“55 workflows\nPredictive analytics"]
    end
    subgraph Y2028["2028"]
        style Y2028 fill:#312e81,stroke:#6366f1,color:#e0e7ff
        Y28["๐ŸŽฅ Opus 6.x\n55โ€“65 workflows\nMulti-modal content"]
    end
    subgraph Y2029["2029"]
        style Y2029 fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
        Y29["โšก Opus 7.x\n65โ€“75 workflows\nAutonomous pipeline"]
    end
    subgraph Y2030["2030"]
        style Y2030 fill:#581c87,stroke:#a855f7,color:#f3e8ff
        Y30["๐Ÿง  Opus 8.x\n75โ€“85 workflows\nNear-expert analysis"]
    end
    subgraph Y2031_33["2031โ€“33"]
        style Y2031_33 fill:#701a75,stroke:#d946ef,color:#fae8ff
        Y31["๐ŸŒ Pre-AGI\n85โ€“100 workflows\nGlobal coverage"]
    end
    subgraph Y2034_37["2034โ€“37"]
        style Y2034_37 fill:#831843,stroke:#ec4899,color:#fce7f3
        Y34["๐ŸŒ AGI Era\n100โ€“120+ workflows\nTransformative platform"]
    end

    Y26 --> Y27 --> Y28 --> Y29 --> Y30 --> Y31 --> Y34
```

### ๐Ÿ“š Future Architecture Documents

For deep dives into specific evolution tracks, see:

| Document | Focus | Link |
|:---------|:------|:-----|
| ๐Ÿ“Š **EP Political Landscape** | OSINT intelligence dashboard (2004โ€“2026) โ€” seat composition, fragmentation, political compass, coalition dynamics, derived metrics; all years validated against EP API v2 | [EP_POLITICAL_LANDSCAPE.md](./EP_POLITICAL_LANDSCAPE.md) |
| ๐Ÿง  **Future Mind Map** | Capability expansion vision, AI analysis, OSINT evolution | [FUTURE_MINDMAP.md](./FUTURE_MINDMAP.md) |
| โš™๏ธ **Future Workflows** | CI/CD evolution, AI-augmented pipelines, 2027โ€“2037 roadmap | [FUTURE_WORKFLOWS.md](./FUTURE_WORKFLOWS.md) |
| ๐Ÿ›๏ธ **Future Architecture** | Platform architecture evolution, AWS deployment, federation | [FUTURE_ARCHITECTURE.md](./FUTURE_ARCHITECTURE.md) |
| ๐Ÿ›ก๏ธ **Future Security** | Security maturity roadmap, quantum-ready encryption | [FUTURE_SECURITY_ARCHITECTURE.md](./FUTURE_SECURITY_ARCHITECTURE.md) |
| ๐Ÿ“Š **Future Data Model** | Enhanced data structures, graph databases, temporal models | [FUTURE_DATA_MODEL.md](./FUTURE_DATA_MODEL.md) |
| ๐Ÿ’ผ **Future SWOT** | Strategic positioning, competitive analysis, market evolution | [FUTURE_SWOT.md](./FUTURE_SWOT.md) |

---

## ๐Ÿ“œ License

This project is licensed under the **Apache License 2.0** - see [LICENSE.md](./LICENSE.md) for details.

---

## ๐Ÿ”— Links

### Project Resources
- [GitHub Repository](https://github.com/Hack23/European-Parliament-MCP-Server)
- [Issue Tracker](https://github.com/Hack23/European-Parliament-MCP-Server/issues)
- [Discussions](https://github.com/Hack23/European-Parliament-MCP-Server/discussions)
- [Security Policy](./SECURITY.md)

### Hack23 Ecosystem
- ๐Ÿข [Hack23 AB](https://hack23.com/) โ€” Swedish cybersecurity & open-source intelligence consultancy ([blog](https://hack23.com/blog.html) ยท [LinkedIn](https://www.linkedin.com/company/hack23/))
- ๐Ÿ›๏ธ [EU Parliament Monitor](https://euparliamentmonitor.com) ([repo](https://github.com/Hack23/euparliamentmonitor) ยท [npm](https://www.npmjs.com/package/euparliamentmonitor) ยท [Political Intelligence Hub](https://euparliamentmonitor.com/political-intelligence.html) ยท [DeepWiki](https://deepwiki.com/Hack23/euparliamentmonitor)) โ€” daily AI-generated EU parliamentary intelligence in 14 languages, powered by this MCP server
- ๐Ÿ—ณ๏ธ [Riksdagsmonitor](https://riksdagsmonitor.com) ([repo](https://github.com/Hack23/riksdagsmonitor) ยท [npm](https://www.npmjs.com/package/riksdagsmonitor) ยท [News](https://riksdagsmonitor.com/news/) ยท [Dashboard](https://riksdagsmonitor.com/dashboard/index.html) ยท [DeepWiki](https://deepwiki.com/Hack23/riksdagsmonitor)) โ€” Swedish Parliament intelligence, 11 agentic workflows, 50+ years of historical evidence
- ๐Ÿ•ต๏ธ [Citizen Intelligence Agency (CIA)](https://github.com/Hack23/cia) ([Pages](https://hack23.github.io/cia/) ยท [DeepWiki](https://deepwiki.com/Hack23/cia)) โ€” Java/Spring political-analytics backend, 15 subsystems, 1971โ€“2024 voting & document corpus
- ๐Ÿ›ก๏ธ [Hack23 ISMS-PUBLIC](https://github.com/Hack23/ISMS-PUBLIC) โ€” public ISO 27001:2022 / NIST CSF 2.0 / CIS Controls v8.1 information-security management system

### European Parliament
- [Open Data Portal](https://data.europarl.europa.eu/)
- [Developer Corner](https://data.europarl.europa.eu/en/developer-corner)
- [Data Privacy Policy](https://www.europarl.europa.eu/portal/en/legal-notice)

### MCP Protocol
- [MCP Specification](https://spec.modelcontextprotocol.io/)
- [MCP SDK](https://github.com/modelcontextprotocol/sdk)
- [MCP Documentation](https://modelcontextprotocol.io/docs)

### MCP Registries
- [npm Package](https://www.npmjs.com/package/european-parliament-mcp-server) โ€” npm registry

### Political & Government MCP Servers
- [Congress.gov API MCP Server](https://github.com/bsmi021/mcp-congress_gov_server) โ€” US Congress data (TypeScript)
- [UK Parliament MCP](https://github.com/i-dot-ai/parliament-mcp) โ€” UK Hansard, members, debates
- [Riksdag & Regering MCP](https://github.com/isakskogstad/Riksdag-Regering-MCP) โ€” Swedish Parliament data
- [Parliament of Poland MCP](https://github.com/pkolawa/parliament-poland-mcp-server) โ€” Polish Parliament data
- [OpenTK MCP](https://github.com/r-huijts/opentk-mcp) โ€” Dutch Parliament (Tweede Kamer) documents
- [Knesset MCP](https://github.com/zohar/knesset-mcp) โ€” Israeli Parliament data
- [CKAN MCP Server](https://github.com/ondata/ckan-mcp-server) โ€” Generic CKAN portal access
- [OpenGov MCP Server](https://github.com/srobbin/opengov-mcp-server) โ€” Socrata-powered portals

### Hack23 ISMS
- [ISMS Policies](https://github.com/Hack23/ISMS-PUBLIC)
- [Open Source Policy](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Open_Source_Policy.md)
- [Secure Development Policy](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Secure_Development_Policy.md)

---

## ๐Ÿ™ Acknowledgments

- **European Parliament** for providing open data access
- **Model Context Protocol** team for the MCP specification
- **Hack23 AB** for ISMS policies and security standards
- **OpenSSF** for supply chain security tools
- **Contributors** who help improve this project

---

<p align="center">
  <strong>Built with โค๏ธ by <a href="https://hack23.com">Hack23 AB</a></strong><br>
  <em>Demonstrating security excellence through transparent open source</em>
</p>