{"id":44844351,"url":"https://github.com/hack23/european-parliament-mcp-server","last_synced_at":"2026-06-06T10:01:17.416Z","repository":{"id":338774249,"uuid":"1159074402","full_name":"Hack23/European-Parliament-MCP-Server","owner":"Hack23","description":"European Parliament MCP Server Model Context Protocol Server for European Parliament Open Data Providing AI assistants with structured access to parliamentary datasets","archived":false,"fork":false,"pushed_at":"2026-06-01T10:24:01.000Z","size":110971,"stargazers_count":15,"open_issues_count":0,"forks_count":8,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-01T12:20:52.800Z","etag":null,"topics":["civic-tech","eu-parlament","european-union","mcp","mcp-server","osint","parliamentary-debate","parliamentary-monitoring"],"latest_commit_sha":null,"homepage":"https://hack23.com/european-parliament-mcp-docs.html","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Hack23.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":"THREAT_MODEL.md","audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-16T09:31:57.000Z","updated_at":"2026-06-01T10:23:57.000Z","dependencies_parsed_at":"2026-05-17T17:03:37.270Z","dependency_job_id":null,"html_url":"https://github.com/Hack23/European-Parliament-MCP-Server","commit_stats":null,"previous_names":["hack23/european-parliament-mcp-server"],"tags_count":96,"template":false,"template_full_name":"Hack23/templateopensource","purl":"pkg:github/Hack23/European-Parliament-MCP-Server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hack23%2FEuropean-Parliament-MCP-Server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hack23%2FEuropean-Parliament-MCP-Server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hack23%2FEuropean-Parliament-MCP-Server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hack23%2FEuropean-Parliament-MCP-Server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hack23","download_url":"https://codeload.github.com/Hack23/European-Parliament-MCP-Server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hack23%2FEuropean-Parliament-MCP-Server/sbom","scorecard":{"id":1243474,"data":{"date":"2026-02-17T00:21:10Z","repo":{"name":"github.com/Hack23/European-Parliament-MCP-Server","commit":"9619ee353197efef717139c3536f022aa5bb84a6"},"scorecard":{"version":"v5.3.0","commit":"c22063e786c11f9dd714d777a687ff7c4599b600"},"score":6.4,"checks":[{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#code-review"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dependency-update-tool"}},{"name":"Maintained","score":0,"reason":"project was created within the last 90 days. Please review its contents carefully","details":["Warn: Repository was created within the last 90 days."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:31","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:32","Info: jobLevel 'security-events' permission set to 'read': .github/workflows/copilot-setup-steps.yml:37","Info: jobLevel 'contents' permission set to 'read': .github/workflows/copilot-setup-steps.yml:27","Info: jobLevel 'actions' permission set to 'read': .github/workflows/copilot-setup-steps.yml:28","Info: jobLevel 'pages' permission set to 'read': .github/workflows/copilot-setup-steps.yml:35","Info: jobLevel 'statuses' permission set to 'read': .github/workflows/copilot-setup-steps.yml:38","Info: jobLevel 'attestations' permission set to 'read': .github/workflows/copilot-setup-steps.yml:29","Info: jobLevel 'checks' permission set to 'read': .github/workflows/copilot-setup-steps.yml:30","Info: jobLevel 'deployments' permission set to 'read': .github/workflows/copilot-setup-steps.yml:31","Info: jobLevel 'models' permission set to 'read': .github/workflows/copilot-setup-steps.yml:33","Info: jobLevel 'discussions' permission set to 'read': .github/workflows/copilot-setup-steps.yml:34","Info: jobLevel 'contents' permission set to 'read': .github/workflows/labeler.yml:16","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release.yml:209","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release.yml:27","Info: jobLevel 'contents' permission set to 'read': .github/workflows/release.yml:99","Info: jobLevel 'checks' permission set to 'read': .github/workflows/scorecard.yml:35","Info: jobLevel 'contents' permission set to 'read': .github/workflows/scorecard.yml:29","Info: jobLevel 'actions' permission set to 'read': .github/workflows/scorecard.yml:30","Info: jobLevel 'issues' permission set to 'read': .github/workflows/scorecard.yml:32","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/scorecard.yml:33","Info: jobLevel 'actions' permission set to 'read': .github/workflows/slsa-provenance.yml:106","Info: jobLevel 'contents' permission set to 'read': .github/workflows/slsa-provenance.yml:165","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/test-and-report.yml:274","Info: jobLevel 'actions' permission set to 'read': .github/workflows/test-and-report.yml:275","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/test-and-report.yml:276","Info: jobLevel 'contents' permission set to 'read': .github/workflows/test-and-report.yml:17","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/test-and-report.yml:47","Info: jobLevel 'actions' permission set to 'read': .github/workflows/test-and-report.yml:48","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/test-and-report.yml:143","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/test-and-report.yml:141","Info: jobLevel 'actions' permission set to 'read': .github/workflows/test-and-report.yml:142","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/test-and-report.yml:214","Info: jobLevel 'actions' permission set to 'read': .github/workflows/test-and-report.yml:215","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/test-and-report.yml:216","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:24","Warn: no topLevel permission defined: .github/workflows/copilot-setup-steps.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/dependency-review.yml:13","Info: topLevel permissions set to 'read-all': .github/workflows/labeler.yml:8","Warn: topLevel 'checks' permission set to 'write': .github/workflows/main.yml:4","Info: topLevel permissions set to 'read-all': .github/workflows/release.yml:19","Warn: topLevel 'contents' permission set to 'write': .github/workflows/sbom-generation.yml:12","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:18","Info: topLevel 'contents' permission set to 'read': .github/workflows/setup-labels.yml:13","Info: topLevel 'actions' permission set to 'read': .github/workflows/slsa-provenance.yml:14","Warn: topLevel 'contents' permission set to 'write': .github/workflows/slsa-provenance.yml:11","Info: topLevel permissions set to 'read-all': .github/workflows/test-and-report.yml:10"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":7,"reason":"dependency not pinned by hash detected -- score normalized to 7","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/slsa-provenance.yml:110: update your workflow using https://app.stepsecurity.io/secureworkflow/Hack23/European-Parliament-MCP-Server/slsa-provenance.yml/main?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/copilot-setup-steps.yml:123","Warn: npmCommand not pinned by hash: .github/workflows/copilot-setup-steps.yml:124","Warn: npmCommand not pinned by hash: .github/workflows/copilot-setup-steps.yml:125","Warn: npmCommand not pinned by hash: .github/workflows/copilot-setup-steps.yml:128","Warn: downloadThenRun not pinned by hash: .github/workflows/sbom-generation.yml:40","Warn: goCommand not pinned by hash: .github/workflows/sbom-generation.yml:50","Warn: downloadThenRun not pinned by hash: .github/workflows/sbom-generation.yml:129","Warn: npmCommand not pinned by hash: .github/workflows/test-and-report.yml:41","Warn: npmCommand not pinned by hash: .github/workflows/test-and-report.yml:167","Warn: npmCommand not pinned by hash: .github/workflows/test-and-report.yml:241","Info:  63 out of  63 GitHub-owned GitHubAction dependencies pinned","Info:  28 out of  29 third-party GitHubAction dependencies pinned","Info:   5 out of  12 npmCommand dependencies pinned","Info:   0 out of   2 downloadThenRun dependencies pinned","Info:   0 out of   1 goCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#signed-releases"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":9,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 28 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#sast"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#branch-protection"}},{"name":"Contributors","score":6,"reason":"project has 2 contributing companies or organizations -- score normalized to 6","details":["Info: found contributions from: Hack23, hack23"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#contributors"}},{"name":"CI-Tests","score":10,"reason":"8 out of 8 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#ci-tests"}}]},"last_synced_at":"2026-02-17T00:24:25.979Z","repository_id":338774249,"created_at":"2026-02-17T00:24:25.979Z","updated_at":"2026-02-17T00:24:25.979Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33977371,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["civic-tech","eu-parlament","european-union","mcp","mcp-server","osint","parliamentary-debate","parliamentary-monitoring"],"created_at":"2026-02-17T04:14:04.000Z","updated_at":"2026-06-06T10:01:17.394Z","avatar_url":"https://github.com/Hack23.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://hack23.com/icon-192.png\" alt=\"Hack23 Logo\" width=\"128\" height=\"128\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e🏛️ European Parliament MCP Server\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eModel Context Protocol Server for European Parliament Open Data\u003c/strong\u003e\u003cbr\u003e\n  \u003cem\u003e🇪🇺 EU parliamentary intelligence for AI agents · 🕵️ 15 OSINT analytics tools · 🏛️ Full EP API v2 coverage · 🛡️ ISMS-aligned · 🔒 GDPR-by-design · 📦 SLSA Level 3\u003c/em\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eThe canonical TypeScript MCP bridge between the \u003ca href=\"https://data.europarl.europa.eu/\"\u003eEuropean Parliament Open Data Portal\u003c/a\u003e and any MCP-aware AI client\u003c/strong\u003e — Claude Desktop, VS Code, Cursor, GitHub Copilot. Powers the \u003ca href=\"https://euparliamentmonitor.com\"\u003eEU Parliament Monitor\u003c/a\u003e AI newsroom and is a sister project to \u003ca href=\"https://riksdagsmonitor.com\"\u003eRiksdagsmonitor\u003c/a\u003e in the \u003ca href=\"https://hack23.com\"\u003eHack23\u003c/a\u003e political-intelligence portfolio.\n\u003c/p\u003e\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"120\" align=\"center\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/MCP-Server-6366F1?style=for-the-badge\u0026logo=typescript\u0026logoColor=white\" width=\"80\" alt=\"European Parliament MCP Server\"/\u003e\n      \u003cdiv\u003e\n        \u003ca href=\"https://www.npmjs.com/package/european-parliament-mcp-server\"\u003e\n          \u003cimg src=\"https://img.shields.io/npm/v/european-parliament-mcp-server.svg\" alt=\"npm version\"\u003e\n        \u003c/a\u003e\n      \u003c/div\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cp\u003e\u003cstrong\u003eModel Context Protocol Server for European Parliament Open Data\u003c/strong\u003e — providing AI assistants with structured access to MEPs, plenary sessions, committees, legislative documents, and parliamentary questions through a secure, type-safe TypeScript implementation.\u003c/p\u003e\n      \u003cp\u003eMEP influence scoring (5-dimension model), Coalition cohesion \u0026 stress analysis, Party defection \u0026 anomaly detection, Cross-group comparative analysis, MEP/committee legislative scoring, Pipeline status \u0026 bottleneck detection, Committee workload \u0026 engagement analysis, MEP attendance patterns \u0026 trends, Country delegation voting \u0026 composition, Parliament-wide political landscape\u003c/p\u003e\n      \u003cdiv\u003e\n        \u003ca href=\"https://github.com/Hack23/European-Parliament-MCP-Server\"\u003e\u003cstrong\u003e📂 Repository\u003c/strong\u003e\u003c/a\u003e •\n        \u003ca href=\"https://hack23.com/european-parliament-mcp-features.html\"\u003e\u003cstrong\u003e✨ Features\u003c/strong\u003e\u003c/a\u003e •\n        \u003ca href=\"https://hack23.com/european-parliament-mcp-docs.html\"\u003e\u003cstrong\u003e📚 Documentation\u003c/strong\u003e\u003c/a\u003e •\n        \u003ca href=\"https://www.npmjs.com/package/european-parliament-mcp-server\"\u003e\u003cstrong\u003e📦 npm\u003c/strong\u003e\u003c/a\u003e\n      \u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n[![ISMS](https://img.shields.io/badge/Hack23-ISMS-blue)](https://github.com/Hack23/ISMS-PUBLIC)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12067/badge)](https://www.bestpractices.dev/projects/12067)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Hack23/European-Parliament-MCP-Server)\n\n## 📊 Quality Metrics \u0026 Documentation\n\n\u003cp align=\"center\"\u003e\n  \u003c!-- npm version --\u003e\n  \u003ca href=\"https://www.npmjs.com/package/european-parliament-mcp-server\"\u003e\n    \u003cimg src=\"https://img.shields.io/npm/v/european-parliament-mcp-server.svg?style=flat-square\u0026logo=npm\" alt=\"npm version\"\u003e\n  \u003c/a\u003e\n\n  \u003c!-- npm downloads --\u003e\n  \u003ca href=\"https://www.npmjs.com/package/european-parliament-mcp-server\"\u003e\n    \u003cimg src=\"https://img.shields.io/npm/dm/european-parliament-mcp-server.svg?style=flat-square\u0026logo=npm\" alt=\"npm downloads\"\u003e\n  \u003c/a\u003e\n\n  \u003c!-- MCP Tools --\u003e\n  \u003cimg src=\"https://img.shields.io/badge/MCP%20Tools-63-6366F1?style=flat-square\u0026logo=typescript\" alt=\"MCP Tools\"\u003e\n\n  \u003c!-- MCP Resources --\u003e\n  \u003cimg src=\"https://img.shields.io/badge/MCP%20Resources-9-6366F1?style=flat-square\" alt=\"MCP Resources\"\u003e\n\n  \u003c!-- MCP Prompts --\u003e\n  \u003cimg src=\"https://img.shields.io/badge/MCP%20Prompts-7-6366F1?style=flat-square\" alt=\"MCP Prompts\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003c!-- Test Coverage --\u003e\n  \u003ca href=\"https://hack23.github.io/European-Parliament-MCP-Server/coverage/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Test%20Coverage-80%25%2B-brightgreen?style=flat-square\u0026logo=vitest\" alt=\"Test Coverage\"\u003e\n  \u003c/a\u003e\n  \n  \u003c!-- Unit Tests --\u003e\n  \u003ca href=\"https://hack23.github.io/European-Parliament-MCP-Server/test-results/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Unit%20Tests-1130%20Passing-brightgreen?style=flat-square\u0026logo=vitest\" alt=\"Unit Test Results\"\u003e\n  \u003c/a\u003e\n  \n  \u003c!-- E2E Tests --\u003e\n  \u003ca href=\"https://hack23.github.io/European-Parliament-MCP-Server/e2e-results/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/E2E%20Tests-71%20Passing-brightgreen?style=flat-square\u0026logo=playwright\" alt=\"E2E Test Results\"\u003e\n  \u003c/a\u003e\n  \n  \u003c!-- API Documentation --\u003e\n  \u003ca href=\"https://hack23.github.io/European-Parliament-MCP-Server/api/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/API%20Docs-TypeDoc-blue?style=flat-square\u0026logo=typescript\" alt=\"API Documentation\"\u003e\n  \u003c/a\u003e\n  \n  \u003c!-- Documentation Portal --\u003e\n  \u003ca href=\"https://hack23.github.io/European-Parliament-MCP-Server/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/📚%20Documentation-Portal-blue?style=flat-square\" alt=\"Documentation Portal\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## 📋 Overview\n\nThe **European Parliament MCP Server** implements the [Model Context Protocol (MCP)](https://spec.modelcontextprotocol.io/) to provide AI assistants, IDEs, and other MCP clients with structured access to European Parliament open datasets. Access information about MEPs, plenary sessions, committees, legislative documents, and parliamentary questions through a secure, type-safe TypeScript/Node.js implementation.\n\n### 🎯 Key Features\n\n- 🔌 **Full MCP Implementation**: 63 tools (9 core + 3 advanced + 15 OSINT + 8 Phase 4 + 15 Phase 5 + 13 feed), 9 Resources, and 7 Prompts\n- 🏛️ **Complete EP API v2 Coverage**: All European Parliament Open Data API endpoints covered\n- 🕵️ **OSINT Intelligence**: MEP influence scoring, coalition analysis, anomaly detection\n- 🔒 **Security First**: ISMS-compliant, GDPR-ready, SLSA Level 3 provenance\n- 🚀 **High Performance**: \u003c200ms API responses, intelligent caching, rate limiting\n- 📊 **Type Safety**: TypeScript strict mode + Zod runtime validation\n- 🧪 **Well-Tested**: 80%+ code coverage, 1130+ unit tests, 71 E2E test cases\n- 📚 **Complete Documentation**: Architecture, TypeDoc API (HTML + Markdown), security guidelines\n\n---\n\n## 🌍 Hack23 Political Intelligence Ecosystem\n\nThis MCP server is the **EU data backbone** of [Hack23](https://hack23.com/)'s mission to **disrupt parliamentary journalism with AI-generated political intelligence and real-time accountability analysis** — increasing democratic transparency through structured open-source intelligence (OSINT) tradecraft applied to public legislative data.\n\n### 🎯 Vision: AI-Powered Democratic Transparency\n\nHack23 AB builds **open-source intelligence platforms** that put rigorous, evidence-based political analysis in the hands of every citizen, journalist, researcher and policymaker. By combining MCP servers, agentic AI newsrooms, and open parliamentary data, we produce automated intelligence products — coalition analysis, voting-pattern decoding, MEP/MP influence scoring, legislative-pipeline forecasting — that previously required well-funded lobbying organisations or in-house policy units to generate.\n\n\u003e *\"Democratising access to political intelligence — what used to require a team of analysts can now be done by any citizen with an AI assistant.\"*\n\nThe portfolio is **non-partisan, fully open-source (Apache-2.0)**, operated under the [Hack23 ISMS](https://github.com/Hack23/ISMS-PUBLIC) with full ISO 27001:2022 / NIST CSF 2.0 / CIS Controls v8.1 alignment, GDPR-by-design, and architecturally engineered so it cannot be weaponised for partisan influence: equal treatment of all political groups, public-data only, no user accounts, no ads, no tracking.\n\n### 🧭 The Ecosystem at a Glance\n\n```mermaid\n%%{init: {\"theme\":\"base\",\"themeVariables\":{\"primaryColor\":\"#6366f1\",\"primaryTextColor\":\"#fff\",\"primaryBorderColor\":\"#4f46e5\",\"lineColor\":\"#94a3b8\",\"secondaryColor\":\"#003399\",\"tertiaryColor\":\"#00338d\",\"background\":\"#0f172a\"}}}%%\ngraph LR\n    subgraph SOURCES[\"📡 Primary Open-Data Sources\"]\n        EP[\"🇪🇺 European Parliament\u003cbr/\u003eOpen Data Portal v2\u003cbr/\u003e\u003ci\u003edata.europarl.europa.eu\u003c/i\u003e\"]\n        RD[\"🇸🇪 Riksdagen Open Data\u003cbr/\u003e\u003ci\u003edata.riksdagen.se\u003c/i\u003e\"]\n        REG[\"🇸🇪 Regeringskansliet\u003cbr/\u003e\u003ci\u003eregeringen.se\u003c/i\u003e\"]\n        IMF[\"💰 IMF / World Bank\u003cbr/\u003e\u003ci\u003eeconomic context\u003c/i\u003e\"]\n    end\n\n    subgraph MCP[\"🔌 MCP Servers\"]\n        EPMCP[\"\u003cb\u003eEuropean-Parliament-\u003cbr/\u003eMCP-Server\u003c/b\u003e\u003cbr/\u003e63 tools · 9 resources\u003cbr/\u003e7 prompts · TS strict\u003cbr/\u003e\u003ci\u003e(this repository)\u003c/i\u003e\"]\n        RRMCP[\"riksdag-regering MCP\u003cbr/\u003e32+ tools\"]\n    end\n\n    subgraph PRODUCTS[\"📰 AI-Driven Public Platforms\"]\n        EUPM[\"🏛️ \u003cb\u003eEU Parliament Monitor\u003c/b\u003e\u003cbr/\u003eeuparliamentmonitor.com\u003cbr/\u003e8 unified gh-aw workflows\u003cbr/\u003e51-artifact analysis\u003cbr/\u003e14 languages\"]\n        RM[\"🗳️ \u003cb\u003eRiksdagsmonitor\u003c/b\u003e\u003cbr/\u003eriksdagsmonitor.com\u003cbr/\u003e11 agentic workflows\u003cbr/\u003e91 skills · 14 languages\u003cbr/\u003eTidö coalition tracker\"]\n        CIA[\"🕵️ \u003cb\u003eCitizen Intelligence\u003cbr/\u003eAgency (CIA)\u003c/b\u003e\u003cbr/\u003eJava/Spring backend\u003cbr/\u003e15 subsystems · 1971–2024\u003cbr/\u003e3.5M votes · 109K docs\"]\n    end\n\n    subgraph CITIZENS[\"👥 Citizens · Journalists · Researchers · NGOs\"]\n        AUDIENCE[\"AI assistants · Dashboards · 14-language news · Intelligence briefings\"]\n    end\n\n    EP --\u003e EPMCP\n    RD --\u003e RRMCP\n    REG --\u003e RRMCP\n    EPMCP --\u003e EUPM\n    RRMCP --\u003e RM\n    RM \u003c--\u003e|\"15 CIA subsystems\u003cbr/\u003enightly sync\"| CIA\n    IMF -.-\u003e|\"economic context\"| EUPM\n    IMF -.-\u003e|\"economic context\"| RM\n    EUPM --\u003e AUDIENCE\n    RM --\u003e AUDIENCE\n    CIA --\u003e AUDIENCE\n    EPMCP -.-\u003e|\"AI assistants\u003cbr/\u003eClaude · Cursor · VS Code\"| AUDIENCE\n\n    style EPMCP fill:#6366f1,stroke:#4f46e5,color:#fff,stroke-width:3px\n    style EP fill:#003399,stroke:#ffcc00,color:#fff\n    style RD fill:#00338d,stroke:#fecc00,color:#fff\n    style REG fill:#00338d,stroke:#fecc00,color:#fff\n    style EUPM fill:#003399,stroke:#ffcc00,color:#fff\n    style RM fill:#00338d,stroke:#fecc00,color:#fff\n    style CIA fill:#1b5e20,stroke:#43a047,color:#fff\n    style AUDIENCE fill:#7b1fa2,stroke:#9c27b0,color:#fff\n```\n\n**This MCP server's role:** the canonical, type-safe TypeScript bridge between the European Parliament Open Data Portal and any MCP-aware AI client (Claude Desktop, VS Code, Cursor, GitHub Copilot) — and the upstream data layer that powers the **EU Parliament Monitor** newsroom. Every tool is Zod-validated, audit-logged, GDPR-aware, and SLSA Level 3 attested.\n\n### 🗂️ Portfolio Comparison Matrix\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth align=\"left\"\u003eProject\u003c/th\u003e\n      \u003cth align=\"left\"\u003eScope\u003c/th\u003e\n      \u003cth align=\"left\"\u003eAudience\u003c/th\u003e\n      \u003cth align=\"left\"\u003eLinks\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd valign=\"top\"\u003e\n        🇪🇺 \u003cb\u003eEuropean-Parliament-MCP-Server\u003c/b\u003e\u003cbr/\u003e\n        \u003csub\u003e\u003ci\u003e(this repo)\u003c/i\u003e\u003c/sub\u003e\n      \u003c/td\u003e\n      \u003ctd valign=\"top\"\u003e\n        EU Parliament data layer for AI agents\u003cbr/\u003e\n        \u003csub\u003e62 MCP tools · 9 resources · 7 prompts · OSINT analytics\u003c/sub\u003e\u003cbr/\u003e\n        \u003csub\u003e\u003cb\u003eSource:\u003c/b\u003e \u003ca href=\"https://data.europarl.europa.eu/\"\u003edata.europarl.europa.eu\u003c/a\u003e\u003c/sub\u003e\n      \u003c/td\u003e\n      \u003ctd valign=\"top\"\u003eDevelopers · AI assistants · Journalists · Researchers\u003c/td\u003e\n      \u003ctd valign=\"top\"\u003e\n        📦 \u003ca href=\"https://www.npmjs.com/package/european-parliament-mcp-server\"\u003e\u003cb\u003enpm\u003c/b\u003e\u003c/a\u003e\u003cbr/\u003e\n        💻 \u003ca href=\"https://github.com/Hack23/European-Parliament-MCP-Server\"\u003eGitHub\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd valign=\"top\"\u003e🏛️ \u003cb\u003eEU Parliament Monitor\u003c/b\u003e\u003c/td\u003e\n      \u003ctd valign=\"top\"\u003e\n        Daily AI-generated EP intelligence in 14 languages\u003cbr/\u003e\n        \u003csub\u003e8 unified gh-aw workflows · 51-artifact analysis pipeline\u003c/sub\u003e\u003cbr/\u003e\n        \u003csub\u003e\u003cb\u003eSource:\u003c/b\u003e this MCP server (60+ tools) + IMF + World Bank\u003c/sub\u003e\n      \u003c/td\u003e\n      \u003ctd valign=\"top\"\u003eCitizens · Journalists · NGOs across all 27 EU member states\u003c/td\u003e\n      \u003ctd valign=\"top\"\u003e\n        🌐 \u003ca href=\"https://euparliamentmonitor.com\"\u003e\u003cb\u003eeuparliamentmonitor.com\u003c/b\u003e\u003c/a\u003e\u003cbr/\u003e\n        🧠 \u003ca href=\"https://euparliamentmonitor.com/political-intelligence.html\"\u003eIntelligence Hub\u003c/a\u003e\u003cbr/\u003e\n        📚 \u003ca href=\"https://euparliamentmonitor.com/docs/api/\"\u003eAPI Reference\u003c/a\u003e\u003cbr/\u003e\n        💻 \u003ca href=\"https://github.com/Hack23/euparliamentmonitor\"\u003eGitHub\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd valign=\"top\"\u003e🗳️ \u003cb\u003eRiksdagsmonitor\u003c/b\u003e\u003c/td\u003e\n      \u003ctd valign=\"top\"\u003e\n        Daily AI-generated Swedish parliamentary intelligence\u003cbr/\u003e\n        \u003csub\u003e11 agentic workflows · 91 skills · 50+ years of evidence (1971–2024) · Tidö coalition fragility tracker\u003c/sub\u003e\u003cbr/\u003e\n        \u003csub\u003e\u003cb\u003eSource:\u003c/b\u003e \u003ccode\u003eriksdag-regering\u003c/code\u003e MCP (32+ tools) + SCB + IMF + World Bank + CIA exports\u003c/sub\u003e\n      \u003c/td\u003e\n      \u003ctd valign=\"top\"\u003eSwedish citizens · Nordic journalists · Election researchers\u003c/td\u003e\n      \u003ctd valign=\"top\"\u003e\n        🌐 \u003ca href=\"https://riksdagsmonitor.com\"\u003e\u003cb\u003eriksdagsmonitor.com\u003c/b\u003e\u003c/a\u003e\u003cbr/\u003e\n        🧠 \u003ca href=\"https://riksdagsmonitor.com/political-intelligence.html\"\u003eIntelligence\u003c/a\u003e\u003cbr/\u003e\n        📰 \u003ca href=\"https://riksdagsmonitor.com/news/index.html\"\u003eAI Newsroom\u003c/a\u003e\u003cbr/\u003e\n        📊 \u003ca href=\"https://riksdagsmonitor.com/dashboard/index.html\"\u003eDashboard\u003c/a\u003e\u003cbr/\u003e\n        💻 \u003ca href=\"https://github.com/Hack23/riksdagsmonitor\"\u003eGitHub\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd valign=\"top\"\u003e🕵️ \u003cb\u003eCitizen Intelligence Agency\u003c/b\u003e\u003cbr/\u003e\u003csub\u003e(CIA)\u003c/sub\u003e\u003c/td\u003e\n      \u003ctd valign=\"top\"\u003e\n        15-subsystem Java/Spring political-analytics backend\u003cbr/\u003e\n        \u003csub\u003e349 current MPs · 2,494 historical politicians · 3.5M+ votes · 109k+ documents · 45-rule risk engine\u003c/sub\u003e\u003cbr/\u003e\n        \u003csub\u003e\u003cb\u003eSource:\u003c/b\u003e \u003ccode\u003edata.riksdagen.se\u003c/code\u003e direct + Valmyndigheten + ESV\u003c/sub\u003e\n      \u003c/td\u003e\n      \u003ctd valign=\"top\"\u003eHack23 platform consumers (Riksdagsmonitor) · OSINT analysts\u003c/td\u003e\n      \u003ctd valign=\"top\"\u003e\n        🌐 \u003ca href=\"https://hack23.github.io/cia/\"\u003e\u003cb\u003ehack23.github.io/cia\u003c/b\u003e\u003c/a\u003e\u003cbr/\u003e\n        💻 \u003ca href=\"https://github.com/Hack23/cia\"\u003eGitHub\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n### 🇪🇺 EU Parliament Monitor — `euparliamentmonitor.com`\n\n\u003e **European Parliament Political Intelligence Platform** — *🧠 Political intelligence · 🔍 Radical transparency · 🗳️ Democratic accountability · 🤖 AI-generated news in 14 languages*\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"120\" align=\"center\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/EU-Parliament-003399?style=for-the-badge\u0026logo=european-union\u0026logoColor=FFCC00\" width=\"80\" alt=\"EU Parliament Monitor\"/\u003e\n      \u003cdiv\u003e\n        \u003ca href=\"https://euparliamentmonitor.com\"\u003e\n          \u003cimg src=\"https://img.shields.io/website?url=https://euparliamentmonitor.com\" alt=\"Website Status\"\u003e\n        \u003c/a\u003e\n      \u003c/div\u003e\n      \u003cdiv\u003e\n        \u003ca href=\"https://github.com/Hack23/euparliamentmonitor/releases\"\u003e\n          \u003cimg src=\"https://img.shields.io/github/v/release/Hack23/euparliamentmonitor\" alt=\"Release\"\u003e\n        \u003c/a\u003e\n      \u003c/div\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cp\u003e\u003cstrong\u003eEU 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.\u003c/strong\u003e An AI-driven newsroom that monitors plenary sessions, committee work, motions, propositions, urgency files and the forward calendar; produces \u003cem\u003eEconomist-style\u003c/em\u003e analytical articles backed by 51 structured analysis artifacts per run; and exposes \u003cstrong\u003eevery\u003c/strong\u003e methodology, template and analysis tree publicly so any reader, journalist or NGO can verify the analysis behind the prose.\u003c/p\u003e\n      \u003cp\u003e\u003cstrong\u003ePowered by this repository\u003c/strong\u003e — 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 \u003ccode\u003e/api/v2/decision\u003c/code\u003e endpoint when MCP returns empty voting payloads.\u003c/p\u003e\n      \u003cul\u003e\n        \u003cli\u003e📰 \u003cstrong\u003e9 unified \u003ca href=\"https://github.com/githubnext/gh-aw\"\u003egh-aw\u003c/a\u003e (GitHub Agentic Workflows) pipelines\u003c/strong\u003e — 8 article types (\u003ccode\u003ebreaking\u003c/code\u003e, \u003ccode\u003eweek-ahead\u003c/code\u003e, \u003ccode\u003emonth-ahead\u003c/code\u003e, \u003ccode\u003eweek-in-review\u003c/code\u003e, \u003ccode\u003emonth-in-review\u003c/code\u003e, \u003ccode\u003ecommittee-reports\u003c/code\u003e, \u003ccode\u003emotions\u003c/code\u003e, \u003ccode\u003epropositions\u003c/code\u003e) running Stages A → E in a single 45-minute session, plus \u003ccode\u003enews-translate\u003c/code\u003e for 14-language flush translation\u003c/li\u003e\n        \u003cli\u003e📚 \u003cstrong\u003e17 published methodologies + 52 analysis templates + 19 tradecraft references\u003c/strong\u003e — 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\u003c/li\u003e\n        \u003cli\u003e🌍 \u003cstrong\u003e14 languages\u003c/strong\u003e — 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 \u003ccode\u003eNewsArticle.isBasedOn\u003c/code\u003e provenance linking back to source artifacts, and \u003ccode\u003ehreflang\u003c/code\u003e alternates on every page\u003c/li\u003e\n        \u003cli\u003e🛡️ \u003cstrong\u003eDeterministic aggregator\u003c/strong\u003e — agents author analysis Markdown only; TypeScript renders HTML deterministically (no AI-authored HTML, no template-prose leakage, fully reproducible)\u003c/li\u003e\n        \u003cli\u003e📦 \u003cstrong\u003enpm package \u003ccode\u003eeuparliamentmonitor\u003c/code\u003e\u003c/strong\u003e — published with \u003ca href=\"https://docs.npmjs.com/generating-provenance-statements\"\u003enpm provenance\u003c/a\u003e and SLSA Level 3 build attestations\u003c/li\u003e\n      \u003c/ul\u003e\n      \u003cdiv\u003e\n        \u003ca href=\"https://euparliamentmonitor.com\"\u003e\u003cstrong\u003e🌐 Live News Site\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://euparliamentmonitor.com/political-intelligence.html\"\u003e\u003cstrong\u003e🧠 Political Intelligence Hub\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://euparliamentmonitor.com/sitemap.html\"\u003e\u003cstrong\u003e🗺️ Site Map (14 languages)\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://euparliamentmonitor.com/docs/api/\"\u003e\u003cstrong\u003e📔 TypeDoc API\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://euparliamentmonitor.com/docs/coverage/index.html\"\u003e\u003cstrong\u003e📓 Coverage\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://euparliamentmonitor.com/playwright-report/index.html\"\u003e\u003cstrong\u003e🎭 E2E Report\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://github.com/Hack23/euparliamentmonitor\"\u003e\u003cstrong\u003e📂 Repository\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://hack23.com/euparliamentmonitor-features.html\"\u003e\u003cstrong\u003e✨ Features\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://hack23.com/euparliamentmonitor-docs.html\"\u003e\u003cstrong\u003e📚 Documentation\u003c/strong\u003e\u003c/a\u003e\n      \u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n[![Live Site](https://img.shields.io/badge/🌐_Live_Site-euparliamentmonitor.com-003399?style=flat-square\u0026logoColor=FFCC00)](https://euparliamentmonitor.com)\n[![Political Intelligence Hub](https://img.shields.io/badge/🧠_Political_Intelligence-Hub-7B1FA2?style=flat-square)](https://euparliamentmonitor.com/political-intelligence.html)\n[![Site Map](https://img.shields.io/badge/🗺️_Site_Map-14_languages-0A66C2?style=flat-square)](https://euparliamentmonitor.com/sitemap.html)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/Hack23/euparliamentmonitor/badge)](https://scorecard.dev/viewer/?uri=github.com/Hack23/euparliamentmonitor)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12068/badge)](https://www.bestpractices.dev/projects/12068)\n[![SLSA 3](https://slsa.dev/images/gh-badge-level3.svg)](https://github.com/Hack23/euparliamentmonitor/attestations)\n[![License](https://img.shields.io/github/license/Hack23/euparliamentmonitor)](https://github.com/Hack23/euparliamentmonitor/blob/main/LICENSE)\n[![ISMS](https://img.shields.io/badge/Hack23-ISMS-blue)](https://github.com/Hack23/ISMS-PUBLIC)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Hack23/euparliamentmonitor)\n[![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)\n[![CodeQL](https://github.com/Hack23/euparliamentmonitor/actions/workflows/codeql.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/codeql.yml)\n[![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)\n[![E2E Tests](https://github.com/Hack23/euparliamentmonitor/actions/workflows/e2e.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/e2e.yml)\n[![Release](https://github.com/Hack23/euparliamentmonitor/actions/workflows/release.yml/badge.svg)](https://github.com/Hack23/euparliamentmonitor/actions/workflows/release.yml)\n\n### 🗳️ Riksdagsmonitor — `riksdagsmonitor.com`\n\n\u003e **Swedish Political Intelligence Platform** — *🕵️ Political intelligence · 🔍 Democratic transparency · 🤖 AI-generated news · 📊 50+ years of evidence*\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"120\" align=\"center\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/Riksdag-Monitor-00338D?style=for-the-badge\u0026logo=swedish\u0026logoColor=FECC00\" width=\"80\" alt=\"Riksdagsmonitor\"/\u003e\n      \u003cdiv\u003e\n        \u003ca href=\"https://riksdagsmonitor.com\"\u003e\n          \u003cimg src=\"https://img.shields.io/website?url=https://riksdagsmonitor.com\" alt=\"Website Status\"\u003e\n        \u003c/a\u003e\n      \u003c/div\u003e\n      \u003cdiv\u003e\n        \u003ca href=\"https://www.npmjs.com/package/riksdagsmonitor\"\u003e\n          \u003cimg src=\"https://img.shields.io/npm/v/riksdagsmonitor.svg\" alt=\"npm version\"\u003e\n        \u003c/a\u003e\n      \u003c/div\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cp\u003e\u003cstrong\u003eRiksdagsmonitor monitors Sweden's Riksdag (Parliament), the Government (Regeringskansliet) and public agencies (Myndigheter) with structured intelligence techniques\u003c/strong\u003e — ACH, SWOT, PESTLE, STRIDE, political-risk scoring and OSINT/INTOP tradecraft — applied to \u003cstrong\u003e349 current MPs\u003c/strong\u003e, \u003cstrong\u003e2,494 historical politicians (1971–2024)\u003c/strong\u003e, \u003cstrong\u003e3.5M+ votes\u003c/strong\u003e and \u003cstrong\u003e109,000+ parliamentary documents\u003c/strong\u003e.\u003c/p\u003e\n      \u003cp\u003eAn autonomous AI newsroom — \u003cstrong\u003e11 agentic workflows\u003c/strong\u003e, Claude Opus, zero human editors — turns this evidence into \u003cstrong\u003epublication-ready intelligence articles in 14 languages, every day\u003c/strong\u003e. Front-loads the live \u003cstrong\u003eTidö Agreement coalition status\u003c/strong\u003e (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.\u003c/p\u003e\n      \u003cul\u003e\n        \u003cli\u003e📰 \u003cstrong\u003e11 agentic workflows\u003c/strong\u003e — 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)\u003c/li\u003e\n        \u003cli\u003e🧠 \u003cstrong\u003e91 skills across 12 categories\u003c/strong\u003e + \u003cstrong\u003e24 Copilot agents\u003c/strong\u003e (14 personas + 9 workflow specialists + shared developer instructions) — full catalog at \u003ca href=\"https://github.com/Hack23/riksdagsmonitor/blob/main/SKILLS.md\"\u003eSKILLS.md\u003c/a\u003e / \u003ca href=\"https://github.com/Hack23/riksdagsmonitor/blob/main/AGENTS.md\"\u003eAGENTS.md\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e📚 \u003cstrong\u003e11 published methodologies + 23 templates\u003c/strong\u003e (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\u003c/li\u003e\n        \u003cli\u003e📊 \u003cstrong\u003e5 flagship Chart.js / D3.js dashboards\u003c/strong\u003e + \u003ca href=\"https://riksdagsmonitor.com/dashboard/index.html\"\u003eCIA Intelligence Dashboard\u003c/a\u003e — Seasonal Activity (2002–2025 · Z-score anomaly) · 349-MP Politician Dashboard · Pre-Election Monitor · Party Performance (1990–2026) · Anomaly \u0026amp; Early Warning\u003c/li\u003e\n        \u003cli\u003e🌍 \u003cstrong\u003e14 languages\u003c/strong\u003e — 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\u003c/li\u003e\n        \u003cli\u003e📦 \u003cstrong\u003enpm package \u003ccode\u003eriksdagsmonitor\u003c/code\u003e\u003c/strong\u003e — Theme System · Chart Factory · Resilient Data Loader · 12 dashboard modules · CIA intelligence modules — published with SLSA build provenance\u003c/li\u003e\n        \u003cli\u003e🛡️ \u003cstrong\u003eOpenSSF Best Practices Project #12069\u003c/strong\u003e · 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\u003c/li\u003e\n      \u003c/ul\u003e\n      \u003cdiv\u003e\n        \u003ca href=\"https://riksdagsmonitor.com\"\u003e\u003cstrong\u003e🌐 Live Platform\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://riksdagsmonitor.com/political-intelligence.html\"\u003e\u003cstrong\u003e🕵️ Political Intelligence\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://riksdagsmonitor.com/news/index.html\"\u003e\u003cstrong\u003e📰 AI Newsroom\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://riksdagsmonitor.com/dashboard/index.html\"\u003e\u003cstrong\u003e📊 Intelligence Dashboard\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://riksdagsmonitor.com/sitemap.html\"\u003e\u003cstrong\u003e🗺️ Sitemap\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://github.com/Hack23/riksdagsmonitor\"\u003e\u003cstrong\u003e📂 Repository\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://hack23.com/riksdagsmonitor-features.html\"\u003e\u003cstrong\u003e✨ Features\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://hack23.com/riksdagsmonitor-docs.html\"\u003e\u003cstrong\u003e📚 Documentation\u003c/strong\u003e\u003c/a\u003e\n      \u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/Hack23/riksdagsmonitor/badge)](https://scorecard.dev/viewer/?uri=github.com/Hack23/riksdagsmonitor)\n[![Quality Checks](https://github.com/Hack23/riksdagsmonitor/actions/workflows/quality-checks.yml/badge.svg)](https://github.com/Hack23/riksdagsmonitor/actions/workflows/quality-checks.yml)\n[![Dependency Review](https://github.com/Hack23/riksdagsmonitor/actions/workflows/dependency-review.yml/badge.svg)](https://github.com/Hack23/riksdagsmonitor/actions/workflows/dependency-review.yml)\n[![CodeQL](https://github.com/Hack23/riksdagsmonitor/actions/workflows/codeql.yml/badge.svg)](https://github.com/Hack23/riksdagsmonitor/actions/workflows/codeql.yml)\n[![JavaScript Testing](https://github.com/Hack23/riksdagsmonitor/actions/workflows/javascript-testing.yml/badge.svg)](https://github.com/Hack23/riksdagsmonitor/actions/workflows/javascript-testing.yml)\n[![Translation Validation](https://github.com/Hack23/riksdagsmonitor/actions/workflows/translation-validation.yml/badge.svg)](https://github.com/Hack23/riksdagsmonitor/actions/workflows/translation-validation.yml)\n[![Release](https://github.com/Hack23/riksdagsmonitor/actions/workflows/release.yml/badge.svg)](https://github.com/Hack23/riksdagsmonitor/actions/workflows/release.yml)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12069/badge)](https://www.bestpractices.dev/projects/12069)\n[![License](https://img.shields.io/github/license/Hack23/riksdagsmonitor)](https://github.com/Hack23/riksdagsmonitor/blob/main/LICENSE)\n[![ISMS](https://img.shields.io/badge/Hack23-ISMS-blue?logo=shield)](https://github.com/Hack23/ISMS-PUBLIC)\n[![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)\n[![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)\n[![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)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Hack23/riksdagsmonitor)\n\n### 🕵️ Citizen Intelligence Agency (CIA)\n\n\u003e **Political transparency platform** — Java/Spring data backbone behind Riksdagsmonitor's historical evidence layer\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"120\" align=\"center\"\u003e\n      \u003cimg 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\"/\u003e\n      \u003cdiv\u003e\n        \u003ca href=\"https://github.com/Hack23/cia/releases\"\u003e\n          \u003cimg src=\"https://img.shields.io/github/v/release/Hack23/cia\" alt=\"Release\"\u003e\n        \u003c/a\u003e\n      \u003c/div\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cp\u003eThe \u003cstrong\u003eCitizen Intelligence Agency\u003c/strong\u003e is the Java/Spring Boot political-analytics backend that supplies \u003cstrong\u003e15 CIA subsystems\u003c/strong\u003e (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 \u003cstrong\u003e50+ years of voting records (1971–2024)\u003c/strong\u003e, \u003cstrong\u003e2,494 historical politicians\u003c/strong\u003e, \u003cstrong\u003e349 current MPs\u003c/strong\u003e, \u003cstrong\u003e3.5M+ votes\u003c/strong\u003e, \u003cstrong\u003e109,000+ documents\u003c/strong\u003e, \u003cstrong\u003e8,740 committee documents\u003c/strong\u003e, and a \u003cstrong\u003e45-rule transparency engine\u003c/strong\u003e tracking 2,308 identified rule violations across 8 Riksdag-represented parties.\u003c/p\u003e\n      \u003cdiv\u003e\n        \u003ca href=\"https://github.com/Hack23/cia\"\u003e\u003cstrong\u003e📂 Repository\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://hack23.github.io/cia/\"\u003e\u003cstrong\u003e🌐 GitHub Pages\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://github.com/Hack23/cia/tree/master/json-export-specs/visualizations\"\u003e\u003cstrong\u003e📊 JSON Export Specs\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://hack23.com/cia-features.html\"\u003e\u003cstrong\u003e✨ Features\u003c/strong\u003e\u003c/a\u003e ·\n        \u003ca href=\"https://hack23.com/cia-docs.html\"\u003e\u003cstrong\u003e📚 Documentation\u003c/strong\u003e\u003c/a\u003e\n      \u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/770/badge)](https://bestpractices.coreinfrastructure.org/projects/770)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/Hack23/cia/badge)](https://scorecard.dev/viewer/?uri=github.com/Hack23/cia)\n[![SLSA 3](https://slsa.dev/images/gh-badge-level3.svg)](https://github.com/Hack23/cia/attestations)\n[![Verify \u0026 Deploy](https://github.com/Hack23/cia/actions/workflows/release.yml/badge.svg?branch=master)](https://github.com/Hack23/cia/actions/workflows/release.yml)\n[![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)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Hack23_cia\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Hack23_cia)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=Hack23_cia\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=Hack23_cia)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=Hack23_cia\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=Hack23_cia)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=Hack23_cia\u0026metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=Hack23_cia)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Hack23/cia)\n\n### 🌍 Shared Across the Portfolio\n\n| Dimension | Coverage |\n|:----------|:---------|\n| 🌐 **Languages** | 14 — English · Swedish · Danish · Norwegian · Finnish · German · French · Spanish · Dutch · Arabic (RTL) · Hebrew (RTL) · Japanese · Korean · Chinese |\n| ♿ **Accessibility** | WCAG 2.1 AA · keyboard navigable · screen-reader optimised · 4.5:1 contrast · responsive 320 px → 1440 px+ |\n| 🔒 **Compliance** | ISO 27001:2022 · NIST CSF 2.0 · CIS Controls v8.1 · GDPR · NIS2 · EU CRA |\n| 🛡️ **Supply chain** | SHA-pinned GitHub Actions · `step-security/harden-runner` · Dependabot · CodeQL · Secret Scanning · SLSA Level 3 · SPDX SBOM |\n| 📜 **License** | Apache License 2.0 across the entire portfolio |\n| 🏢 **Operator** | [Hack23 AB](https://www.hack23.com) (Org.nr 559534-7807) — Swedish cybersecurity \u0026 open-source intelligence consultancy |\n| 🛡️ **ISMS** | [Hack23 ISMS-PUBLIC](https://github.com/Hack23/ISMS-PUBLIC) — fully documented information-security management system |\n\n### 🔗 Hack23 Portfolio Quick Links\n\n- 🌐 **Live platforms** — [euparliamentmonitor.com](https://euparliamentmonitor.com) · [riksdagsmonitor.com](https://riksdagsmonitor.com) · [hack23.github.io/cia](https://hack23.github.io/cia/) · [hack23.com](https://hack23.com)\n- 🧠 **Political Intelligence Hubs** — [EU Parliament](https://euparliamentmonitor.com/political-intelligence.html) · [Riksdag](https://riksdagsmonitor.com/political-intelligence.html)\n- 📂 **Source repositories** — [European-Parliament-MCP-Server](https://github.com/Hack23/European-Parliament-MCP-Server) · [euparliamentmonitor](https://github.com/Hack23/euparliamentmonitor) · [riksdagsmonitor](https://github.com/Hack23/riksdagsmonitor) · [cia](https://github.com/Hack23/cia) · [ISMS-PUBLIC](https://github.com/Hack23/ISMS-PUBLIC)\n- 📦 **npm packages** — [`european-parliament-mcp-server`](https://www.npmjs.com/package/european-parliament-mcp-server) · [`euparliamentmonitor`](https://www.npmjs.com/package/euparliamentmonitor) · [`riksdagsmonitor`](https://www.npmjs.com/package/riksdagsmonitor)\n- 📰 **Blog \u0026 company** — [Hack23 blog](https://hack23.com/blog.html) · [LinkedIn — Hack23 AB](https://www.linkedin.com/company/hack23/) · founder [James Pether Sörling, CISSP, CISM](https://www.linkedin.com/in/jamessorling/)\n- 🤖 **AI-readable wikis** — [DeepWiki: European-Parliament-MCP-Server](https://deepwiki.com/Hack23/European-Parliament-MCP-Server) · [DeepWiki: euparliamentmonitor](https://deepwiki.com/Hack23/euparliamentmonitor) · [DeepWiki: riksdagsmonitor](https://deepwiki.com/Hack23/riksdagsmonitor) · [DeepWiki: cia](https://deepwiki.com/Hack23/cia)\n\n---\n\n\n\u003cp align=\"center\"\u003e\n  \u003c!-- Security Architecture --\u003e\n  \u003ca href=\"./SECURITY_ARCHITECTURE.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/🛡️%20Security-Architecture-blue?style=flat-square\" alt=\"Security Architecture\"\u003e\n  \u003c/a\u003e\n  \n  \u003c!-- Architecture Diagrams --\u003e\n  \u003ca href=\"./ARCHITECTURE_DIAGRAMS.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/🏗️%20Architecture-Diagrams-blue?style=flat-square\" alt=\"Architecture Diagrams\"\u003e\n  \u003c/a\u003e\n  \n  \u003c!-- Workflows Documentation --\u003e\n  \u003ca href=\"./.github/WORKFLOWS.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/⚙️%20CI%2FCD-Workflows-blue?style=flat-square\" alt=\"Workflows Documentation\"\u003e\n  \u003c/a\u003e\n  \n  \u003c!-- Performance Guide --\u003e\n  \u003ca href=\"./PERFORMANCE_GUIDE.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/⚡%20Performance-Guide-blue?style=flat-square\" alt=\"Performance Guide\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n## 🔐 Security \u0026 Compliance\n\n\u003cp align=\"center\"\u003e\n  \u003c!-- OpenSSF Scorecard --\u003e\n  \u003ca href=\"https://securityscorecards.dev/viewer/?uri=github.com/Hack23/European-Parliament-MCP-Server\"\u003e\n    \u003cimg src=\"https://api.securityscorecards.dev/projects/github.com/Hack23/European-Parliament-MCP-Server/badge?style=flat-square\" alt=\"OpenSSF Scorecard\"\u003e\n  \u003c/a\u003e\n  \n  \u003c!-- SLSA Level 3 --\u003e\n  \u003ca href=\"https://github.com/Hack23/European-Parliament-MCP-Server/attestations/\"\u003e\n    \u003cimg src=\"https://slsa.dev/images/gh-badge-level3.svg\" alt=\"SLSA 3\"\u003e\n  \u003c/a\u003e\n  \n  \u003c!-- SBOM --\u003e\n  \u003ca href=\"https://hack23.github.io/European-Parliament-MCP-Server/SBOM.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/SBOM-SPDX%202.3-blue?style=flat-square\" alt=\"SBOM\"\u003e\n  \u003c/a\u003e\n  \n  \u003c!-- SBOM Quality --\u003e\n  \u003ca href=\"https://hack23.github.io/European-Parliament-MCP-Server/SBOM.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/SBOM%20Quality-8.5%2F10-brightgreen?style=flat-square\" alt=\"SBOM Quality\"\u003e\n  \u003c/a\u003e\n  \n  \u003c!-- Attestations --\u003e\n  \u003ca href=\"https://hack23.github.io/European-Parliament-MCP-Server/ATTESTATIONS.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Attestations-Available-success?style=flat-square\" alt=\"Build Attestations\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003c!-- ISMS Compliance --\u003e\n  \u003ca href=\"https://github.com/Hack23/ISMS-PUBLIC\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/ISMS-ISO%2027001-success?style=flat-square\" alt=\"ISO 27001\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/Hack23/ISMS-PUBLIC\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/ISMS-NIST%20CSF%202.0-success?style=flat-square\" alt=\"NIST CSF 2.0\"\u003e\n  \u003c/a\u003e\n\u003ca href=\"https://app.fossa.com/projects/git%2Bgithub.com%2FHack23%2FEuropean-Parliament-MCP-Server?ref=badge_shield\" alt=\"FOSSA Status\"\u003e\u003cimg src=\"https://app.fossa.com/api/projects/git%2Bgithub.com%2FHack23%2FEuropean-Parliament-MCP-Server.svg?type=shield\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/Hack23/ISMS-PUBLIC\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/ISMS-CIS%20Controls%20v8.1-success?style=flat-square\" alt=\"CIS Controls\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://gdpr.eu/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/GDPR-Compliant-success?style=flat-square\" alt=\"GDPR\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## 🚀 Quick Start\n\n### Run with npx (No Installation Required)\n\n```bash\nnpx -y european-parliament-mcp-server\n```\n\n### Prerequisites\n\n- Node.js 26.x or higher\n- npm 10.x or higher\n\n### Installation\n\n#### Option 1: Install from npm (Recommended)\n\n```bash\n# Install the package globally\nnpm install -g european-parliament-mcp-server\n\n# Or install as a dependency in your project\nnpm install european-parliament-mcp-server\n```\n\n#### Option 2: Install from source\n\n```bash\n# Clone the repository\ngit clone https://github.com/Hack23/European-Parliament-MCP-Server.git\ncd European-Parliament-MCP-Server\n\n# Install dependencies\nnpm install\n\n# Build the project\nnpm run build\n\n# Run tests\nnpm test\n```\n\n### Usage with MCP Client\n\n#### Claude Desktop Configuration (npm install)\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"european-parliament\": {\n      \"command\": \"npx\",\n      \"args\": [\"european-parliament-mcp-server\"],\n      \"env\": {\n        \"EP_API_KEY\": \"your-api-key-if-needed\"\n      }\n    }\n  }\n}\n```\n\n#### Claude Desktop Configuration (source install)\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"european-parliament\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/European-Parliament-MCP-Server/dist/index.js\"],\n      \"env\": {\n        \"EP_API_KEY\": \"your-api-key-if-needed\"\n      }\n    }\n  }\n}\n```\n\n#### VS Code Extension\n\nConfigure in `.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"european-parliament\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"european-parliament-mcp-server\"]\n    }\n  }\n}\n```\n\n#### Cursor IDE Configuration\n\nAdd to `~/.cursor/mcp.json` (or project-level `.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"european-parliament\": {\n      \"command\": \"npx\",\n      \"args\": [\"european-parliament-mcp-server\"],\n      \"env\": {}\n    }\n  }\n}\n```\n\n#### Custom Timeout Configuration\n\nUse `--timeout \u003cms\u003e` 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:\n\n```json\n{\n  \"args\": [\"european-parliament-mcp-server\", \"--timeout\", \"90000\"]\n}\n```\n\nPrecedence: `--timeout` CLI arg \u003e `EP_REQUEST_TIMEOUT_MS` env var \u003e default (60 000 ms).\n\n\u003e **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.\n\n---\n\n## 📚 Documentation\n\n### 🌐 Documentation Portal\n\n**[📖 Complete Documentation Site](https://hack23.github.io/European-Parliament-MCP-Server/)** - Live documentation portal with:\n- 📖 **[API Reference (HTML)](https://hack23.github.io/European-Parliament-MCP-Server/api/)** - TypeDoc generated API documentation with search, hierarchy navigation, and full type information\n- 📖 **[API Reference (Markdown)](https://hack23.github.io/European-Parliament-MCP-Server/api-markdown/)** - SEO-friendly Markdown API documentation\n- 📊 **[Coverage Reports](https://hack23.github.io/European-Parliament-MCP-Server/coverage/)** - Test coverage analysis\n- ✅ **[Test Reports](https://hack23.github.io/European-Parliament-MCP-Server/test-results/)** - Unit and E2E test results\n- 🔐 **Build Attestations** - SLSA Level 3 provenance\n- 📦 **SBOM** - Software Bill of Materials\n- 🗺️ **[Sitemap](https://hack23.github.io/European-Parliament-MCP-Server/api/sitemap.xml)** - Auto-generated sitemap for search engines\n\n\u003e 💡 **Note**: Documentation is automatically generated and committed with each release via `npm run docs:build`\n\n### Generated API Documentation\n\nThe API documentation is generated using [TypeDoc](https://typedoc.org/) with the following plugins:\n\n| Plugin | Purpose |\n|--------|---------|\n| **typedoc** | Core HTML documentation generator |\n| **typedoc-plugin-markdown** | Generates SEO-friendly Markdown alongside HTML |\n| **typedoc-plugin-mdn-links** | Links TypeScript built-in types to MDN documentation |\n| **typedoc-plugin-zod** | Renders Zod schema definitions as readable type documentation |\n\nGenerate documentation locally:\n```bash\nnpm run docs          # HTML API docs → docs/api/\nnpm run docs:md       # Markdown API docs → docs/api-markdown/\nnpm run docs:build    # Full documentation build (HTML + MD + coverage + test reports)\n```\n\n### Core Documentation\n\n- [**API Usage Guide**](./API_USAGE_GUIDE.md) - Complete tool documentation with examples\n- [**Architecture Diagrams**](./ARCHITECTURE_DIAGRAMS.md) - C4 model diagrams and data flows\n- [**Troubleshooting Guide**](#troubleshooting) - Common issues and solutions\n- [**Developer Guide**](./DEVELOPER_GUIDE.md) - Development workflow and contributing\n- [**Deployment Guide**](./DEPLOYMENT_GUIDE.md) - Claude Desktop, VS Code, Docker setup\n- [**Performance Guide**](./PERFORMANCE_GUIDE.md) - Optimization strategies\n- [**Documentation as Code Guide**](./DOCUMENTATION_AS_CODE.md) - How documentation is generated\n\n### Additional Documentation\n\n- [**ARCHITECTURE.md**](./ARCHITECTURE.md) - Complete architecture and design documentation\n- [**SECURITY.md**](./SECURITY.md) - Security policy and vulnerability disclosure\n- [**SECURITY_HEADERS.md**](./SECURITY_HEADERS.md) - API security headers implementation\n- [**docs/SBOM.md**](./docs/SBOM.md) - Software Bill of Materials documentation\n- [**CONTRIBUTING.md**](./CONTRIBUTING.md) - Contribution guidelines\n- [**CODE_OF_CONDUCT.md**](./CODE_OF_CONDUCT.md) - Community code of conduct\n- [**.github/copilot-instructions.md**](./.github/copilot-instructions.md) - Development guidelines for GitHub Copilot\n- [**.github/agents/README.md**](./.github/agents/README.md) - Custom GitHub Copilot agents\n- [**.github/skills/README.md**](./.github/skills/README.md) - Reusable skill patterns\n\n---\n\n## 🏗️ Architecture Overview\n\n```mermaid\ngraph TB\n    Client[MCP Client\u003cbr/\u003eClaude / VS Code / Cursor] --\u003e|MCP Protocol stdio| Server[EP MCP Server\u003cbr/\u003eTypeScript/Node.js]\n\n    subgraph \"MCP Server (src/)\"\n        direction TB\n        Tools[\"🔧 61 Tools\u003cbr/\u003egetMEPs · analyzeCoalition\u003cbr/\u003eassessMepInfluence · …\"]\n        Resources[\"📦 9 Resources\u003cbr/\u003eep://meps/\\{mepId\\}\u003cbr/\u003eep://procedures/\\{procedureId\\} · …\"]\n        Prompts[\"💬 7 Prompts\u003cbr/\u003emep_briefing\u003cbr/\u003ecoalition_analysis · …\"]\n    end\n\n    Server --\u003e Tools\n    Server --\u003e Resources\n    Server --\u003e Prompts\n\n    subgraph \"Infrastructure\"\n        Cache[\"LRU Cache\u003cbr/\u003e500 entries · 15 min TTL\"]\n        RateLimiter[Rate Limiter\u003cbr/\u003e100 req/min]\n        AuditLog[Audit Logger\u003cbr/\u003eGDPR Article 30]\n    end\n\n    Tools --\u003e EPClient[\"EuropeanParliamentClient\u003cbr/\u003eFacade → 8 sub-clients\"]\n    Resources --\u003e EPClient\n    EPClient --\u003e Cache\n    EPClient --\u003e RateLimiter\n    EPClient --\u003e AuditLog\n    EPClient --\u003e|HTTPS/TLS 1.3| EPAPI[European Parliament\u003cbr/\u003eOpen Data API v2\u003cbr/\u003edata.europarl.europa.eu]\n\n    style Server fill:#4caf50,stroke:#2e7d32,color:#fff\n    style EPClient fill:#2196f3,stroke:#1565c0,color:#fff\n    style EPAPI fill:#9c27b0,stroke:#6a1b9a,color:#fff\n    style Cache fill:#ff9800,stroke:#e65100,color:#fff\n    style RateLimiter fill:#f44336,stroke:#b71c1c,color:#fff\n    style AuditLog fill:#607d8b,stroke:#37474f,color:#fff\n```\n\n**Data flow:** MCP client sends a tool call → server validates input (Zod) → EP client\nchecks cache → on miss, fetches from EP API (rate-limited) → response cached and returned\nas structured JSON. All personal data access is audit-logged per GDPR Article 30.\n\n---\n\n## 🔌 MCP Tools (63 Total)\n\n**63 tools** organized by capability — OSINT intelligence first, then analytical, data access, feed endpoints, and reference tools. Every tool includes Zod input validation, caching, and rate limiting.\n\n### 🗺️ Political Intelligence Coverage Map\n\n```mermaid\ngraph TB\n    subgraph OSINT[\"🕵️ OSINT Intelligence — 15 Tools\"]\n        direction LR\n        subgraph MEP[\"MEP Profiling\"]\n            A1[\"assess_mep_influence\"]\n            A2[\"comparative_intelligence\"]\n            A3[\"network_analysis\"]\n            A4[\"track_mep_attendance\"]\n        end\n        subgraph COALITION[\"Coalition Dynamics\"]\n            B1[\"analyze_coalition_dynamics\"]\n            B2[\"compare_political_groups\"]\n            B3[\"detect_voting_anomalies\"]\n            B4[\"sentiment_tracker\"]\n        end\n        subgraph STRATEGY[\"Strategic Warning\"]\n            C1[\"early_warning_system\"]\n            C2[\"generate_political_landscape\"]\n            C3[\"correlate_intelligence\"]\n        end\n        subgraph LEG_INTEL[\"Legislative Intelligence\"]\n            D1[\"analyze_legislative_effectiveness\"]\n            D2[\"monitor_legislative_pipeline\"]\n            D3[\"analyze_committee_activity\"]\n            D4[\"analyze_country_delegation\"]\n        end\n    end\n\n    subgraph ANALYTICS[\"📊 Advanced Analysis — 4 Tools\"]\n        E1[\"analyze_voting_patterns\"]\n        E2[\"track_legislation\"]\n        E3[\"generate_report\"]\n        E4[\"get_all_generated_stats\"]\n    end\n\n    subgraph DATA[\"📦 Core EP Data — 30 Tools\"]\n        F1[\"👤 MEP Tools (7)\"]\n        F2[\"🏛️ Plenary \u0026 Meeting (9)\"]\n        F3[\"📄 Document Tools (7)\"]\n        F4[\"⚖️ Legislative (4)\"]\n        F5[\"🏢 Committee (2)\"]\n        F6[\"🔧 Diagnostics (1)\"]\n    end\n\n    subgraph FEEDS[\"📡 Real-Time Feeds — 13 Tools\"]\n        G1[\"13 change monitoring endpoints\"]\n    end\n\n    OSINT --\u003e|\"enriched by\"| ANALYTICS\n    ANALYTICS --\u003e|\"queries\"| DATA\n    DATA --\u003e|\"monitors\"| FEEDS\n\n    style OSINT fill:#d32f2f,stroke:#b71c1c,color:#fff,stroke-width:2px\n    style ANALYTICS fill:#1565c0,stroke:#0d47a1,color:#fff,stroke-width:2px\n    style DATA fill:#2e7d32,stroke:#1b5e20,color:#fff,stroke-width:2px\n    style FEEDS fill:#ff8f00,stroke:#e65100,color:#000,stroke-width:2px\n    style MEP fill:#e53935,stroke:#c62828,color:#fff,stroke-width:2px\n    style COALITION fill:#e53935,stroke:#c62828,color:#fff,stroke-width:2px\n    style STRATEGY fill:#e53935,stroke:#c62828,color:#fff,stroke-width:2px\n    style LEG_INTEL fill:#e53935,stroke:#c62828,color:#fff,stroke-width:2px\n```\n\n### 🎯 OSINT Intelligence Workflow\n\n```mermaid\ngraph LR\n    subgraph COLLECT[\"1️⃣ Collect\"]\n        direction TB\n        C1[\"get_meps\"]\n        C2[\"get_plenary_sessions\"]\n        C3[\"get_voting_records\"]\n        C4[\"get_procedures\"]\n        C5[\"13 feed tools\"]\n    end\n\n    subgraph ANALYZE[\"2️⃣ Analyze\"]\n        direction TB\n        AN1[\"analyze_voting_patterns\"]\n        AN2[\"track_legislation\"]\n        AN3[\"generate_report\"]\n        AN4[\"get_all_generated_stats\"]\n    end\n\n    subgraph ENRICH[\"3️⃣ Enrich\"]\n        direction TB\n        E1[\"assess_mep_influence\"]\n        E2[\"analyze_coalition_dynamics\"]\n        E3[\"detect_voting_anomalies\"]\n        E4[\"network_analysis\"]\n        E5[\"analyze_legislative_effectiveness\"]\n    end\n\n    subgraph FUSE[\"4️⃣ Fuse \u0026 Alert\"]\n        direction TB\n        F1[\"correlate_intelligence\"]\n        F2[\"early_warning_system\"]\n        F3[\"generate_political_landscape\"]\n        F4[\"comparative_intelligence\"]\n        F5[\"sentiment_tracker\"]\n    end\n\n    COLLECT --\u003e|\"raw data\"| ANALYZE\n    ANALYZE --\u003e|\"structured\"| ENRICH\n    ENRICH --\u003e|\"intelligence\"| FUSE\n\n    style COLLECT fill:#2e7d32,stroke:#1b5e20,color:#fff,stroke-width:2px\n    style ANALYZE fill:#1565c0,stroke:#0d47a1,color:#fff,stroke-width:2px\n    style ENRICH fill:#9c27b0,stroke:#7b1fa2,color:#fff,stroke-width:2px\n    style FUSE fill:#d32f2f,stroke:#b71c1c,color:#fff,stroke-width:2px\n```\n\n### 🕵️ OSINT Intelligence Tools (15)\n\n| Tool | Description | Key Parameters | Output |\n|------|-------------|----------------|--------|\n| [`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 \u0026 confidence |\n| [`assess_mep_influence`](./API_USAGE_GUIDE.md#tool-assess_mep_influence) | MEP influence scoring (5-dimension model) | mepId (required), dateFrom, dateTo, includeDetails | Influence scorecard |\n| [`detect_voting_anomalies`](./API_USAGE_GUIDE.md#tool-detect_voting_anomalies) | Party defection \u0026 anomaly detection | mepId, groupId, sensitivityThreshold | Anomaly report |\n| [`analyze_coalition_dynamics`](./API_USAGE_GUIDE.md#tool-analyze_coalition_dynamics) | Coalition cohesion \u0026 stress analysis | groupIds, dateFrom, minimumCohesion | Coalition metrics |\n| [`early_warning_system`](./API_USAGE_GUIDE.md#tool-early_warning_system) | Detect emerging political shifts \u0026 coalition fractures | sensitivity, focusArea | Warnings with severity levels \u0026 stability score |\n| [`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 |\n| [`network_analysis`](./API_USAGE_GUIDE.md#tool-network_analysis) | MEP relationship network via committee co-membership | mepId, analysisType, depth | Network map with centrality scores |\n| [`sentiment_tracker`](./API_USAGE_GUIDE.md#tool-sentiment_tracker) | Political group institutional-positioning scores | groupId, timeframe | Positioning scores \u0026 polarization index |\n| [`generate_political_landscape`](./API_USAGE_GUIDE.md#tool-generate_political_landscape) | Parliament-wide political landscape | dateFrom, dateTo | Landscape overview |\n| [`compare_political_groups`](./API_USAGE_GUIDE.md#tool-compare_political_groups) | Cross-group comparative analysis | groupIds (required), dimensions, dateFrom | Comparison matrix |\n| [`analyze_legislative_effectiveness`](./API_USAGE_GUIDE.md#tool-analyze_legislative_effectiveness) | MEP/committee legislative scoring | subjectType (required), subjectId (required), dateFrom | Effectiveness score |\n| [`monitor_legislative_pipeline`](./API_USAGE_GUIDE.md#tool-monitor_legislative_pipeline) | Pipeline status \u0026 bottleneck detection | committee, status, limit | Pipeline status |\n| [`analyze_committee_activity`](./API_USAGE_GUIDE.md#tool-analyze_committee_activity) | Committee workload \u0026 engagement analysis | committeeId (required), dateFrom, dateTo | Activity report |\n| [`track_mep_attendance`](./API_USAGE_GUIDE.md#tool-track_mep_attendance) | MEP attendance patterns \u0026 trends | mepId, country, groupId, dateFrom, dateTo, limit | Attendance report |\n| [`analyze_country_delegation`](./API_USAGE_GUIDE.md#tool-analyze_country_delegation) | Country delegation voting \u0026 composition | country (required), dateFrom, dateTo | Delegation analysis |\n\n### 📊 Advanced Analysis Tools (4)\n\n| Tool | Description | Key Parameters | Output |\n|------|-------------|----------------|--------|\n| [`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 |\n| [`analyze_voting_patterns`](./API_USAGE_GUIDE.md#tool-analyze_voting_patterns) | Analyze MEP voting behavior | mepId (required), dateFrom, compareWithGroup | Analysis object |\n| [`track_legislation`](./API_USAGE_GUIDE.md#tool-track_legislation) | Track legislative procedure | procedureId (required) | Procedure object |\n| [`generate_report`](./API_USAGE_GUIDE.md#tool-generate_report) | Generate analytical reports | reportType (required), subjectId, dateFrom | Report object |\n\n### 👤 MEP Tools (7)\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|------|-------------|----------------|-----------------|\n| [`get_meps`](./API_USAGE_GUIDE.md#tool-get_meps) | List MEPs with filters | country, group, committee, limit | `GET /meps` |\n| [`get_mep_details`](./API_USAGE_GUIDE.md#tool-get_mep_details) | Detailed MEP information | id (required) | `GET /meps/{id}` |\n| [`get_current_meps`](./API_USAGE_GUIDE.md#tool-get_current_meps) | Currently active MEPs with country \u0026 political group | limit, offset | `GET /meps/show-current` |\n| [`get_incoming_meps`](./API_USAGE_GUIDE.md#tool-get_incoming_meps) | Newly arriving MEPs for current term | limit, offset | `GET /meps/show-incoming` |\n| [`get_outgoing_meps`](./API_USAGE_GUIDE.md#tool-get_outgoing_meps) | Departing MEPs for current term | limit, offset | `GET /meps/show-outgoing` |\n| [`get_homonym_meps`](./API_USAGE_GUIDE.md#tool-get_homonym_meps) | MEPs with identical names (disambiguation) | limit, offset | `GET /meps/show-homonyms` |\n| [`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}` |\n\n### 🏛️ Plenary \u0026 Meeting Tools (9)\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|------|-------------|----------------|-----------------|\n| [`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}` |\n| [`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` |\n| [`get_speeches`](./API_USAGE_GUIDE.md#tool-get_speeches) | Plenary speeches and debate contributions | speechId, year, dateFrom, dateTo, limit | `GET /speeches`, `GET /speeches/{id}` |\n| [`get_events`](./API_USAGE_GUIDE.md#tool-get_events) | EP events (hearings, conferences, seminars) | eventId, year, dateFrom, dateTo, limit | `GET /events`, `GET /events/{id}` |\n| [`get_meeting_activities`](./API_USAGE_GUIDE.md#tool-get_meeting_activities) | Activities linked to a plenary sitting | sittingId (required), limit | `GET /meetings/{id}/activities` |\n| [`get_meeting_decisions`](./API_USAGE_GUIDE.md#tool-get_meeting_decisions) | Decisions made in a plenary sitting | sittingId (required), limit | `GET /meetings/{id}/decisions` |\n| [`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` |\n| [`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` |\n| [`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` |\n\n### 🏢 Committee Tools (2)\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|------|-------------|----------------|-----------------|\n| [`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` |\n| [`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}` |\n\n### 📄 Document Tools (7)\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|------|-------------|----------------|-----------------|\n| [`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}` |\n| [`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}` |\n| [`get_plenary_documents`](./API_USAGE_GUIDE.md#tool-get_plenary_documents) | Plenary legislative documents | docId, year, limit | `GET /plenary-documents`, `GET /plenary-documents/{id}` |\n| [`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}` |\n| [`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` |\n| [`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}` |\n| [`get_parliamentary_questions`](./API_USAGE_GUIDE.md#tool-get_parliamentary_questions) | Parliamentary Q\u0026A, or single by docId | type, author, topic, docId | `GET /parliamentary-questions`, `GET /parliamentary-questions/{id}` |\n\n### ⚖️ Legislative Procedure Tools (4)\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|------|-------------|----------------|-----------------|\n| [`get_procedures`](./API_USAGE_GUIDE.md#tool-get_procedures) | Legislative procedures, or single by processId | processId, year, limit | `GET /procedures`, `GET /procedures/{id}` |\n| [`get_procedure_events`](./API_USAGE_GUIDE.md#tool-get_procedure_events) | Timeline events for a legislative procedure | processId (required), limit | `GET /procedures/{id}/events` |\n| [`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}` |\n| [`get_controlled_vocabularies`](./API_USAGE_GUIDE.md#tool-get_controlled_vocabularies) | Standardized classification terms | vocId, limit | `GET /controlled-vocabularies`, `GET /controlled-vocabularies/{id}` |\n\n### 📡 Feed Tools (13)\n\nReal-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:\n\n- **Configurable-window** (6 tools): Accept `timeframe` (`today`, `one-day`, `one-week`, `one-month`, `custom`) + optional `startDate`\n- **Fixed-window** (7 tools): No parameters — return updates from a server-defined default window (typically one month)\n\n\u003e **Key behaviors:**\n\u003e - All feeds return JSON-LD with `data[]`, `@context[]`, and `dataQualityWarnings[]`\n\u003e - Empty feeds (EP API 404 or error-in-body) are converted to empty `data[]` with a warning — not errors\n\u003e - `get_events_feed` and `get_procedures_feed` always use a minimum 120s timeout because these endpoints are consistently slow\n\u003e - Fixed-window feeds can be very slow (30–180 s) and often return error-in-body responses\n\u003e - For configurable feeds, when `timeframe` is `custom`, `startDate` (YYYY-MM-DD) is required\n\n**Configurable-window feeds:**\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|------|-------------|----------------|-----------------|\n| [`get_meps_feed`](./API_USAGE_GUIDE.md#tool-get_meps_feed) | Recently updated MEPs | timeframe, startDate | `GET /meps/feed` |\n| [`get_events_feed`](./API_USAGE_GUIDE.md#tool-get_events_feed) | Recently updated events | timeframe, startDate, activityType | `GET /events/feed` |\n| [`get_procedures_feed`](./API_USAGE_GUIDE.md#tool-get_procedures_feed) | Recently updated procedures | timeframe, startDate, processType | `GET /procedures/feed` |\n| [`get_adopted_texts_feed`](./API_USAGE_GUIDE.md#tool-get_adopted_texts_feed) | Recently updated adopted texts | timeframe, startDate, workType | `GET /adopted-texts/feed` |\n| [`get_mep_declarations_feed`](./API_USAGE_GUIDE.md#tool-get_mep_declarations_feed) | Recently updated MEP declarations | timeframe, startDate, workType | `GET /meps-declarations/feed` |\n| [`get_external_documents_feed`](./API_USAGE_GUIDE.md#tool-get_external_documents_feed) | Recently updated external documents | timeframe, startDate, workType | `GET /external-documents/feed` |\n\n**Fixed-window feeds (no parameters):**\n\n| Tool | Description | Key Parameters | EP API Endpoint |\n|------|-------------|----------------|-----------------|\n| [`get_documents_feed`](./API_USAGE_GUIDE.md#tool-get_documents_feed) | Recently updated documents | _(none)_ | `GET /documents/feed` |\n| [`get_plenary_documents_feed`](./API_USAGE_GUIDE.md#tool-get_plenary_documents_feed) | Recently updated plenary documents | _(none)_ | `GET /plenary-documents/feed` |\n| [`get_committee_documents_feed`](./API_USAGE_GUIDE.md#tool-get_committee_documents_feed) | Recently updated committee docs | _(none)_ | `GET /committee-documents/feed` |\n| [`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` |\n| [`get_parliamentary_questions_feed`](./API_USAGE_GUIDE.md#tool-get_parliamentary_questions_feed) | Recently updated questions | _(none)_ | `GET /parliamentary-questions/feed` |\n| [`get_corporate_bodies_feed`](./API_USAGE_GUIDE.md#tool-get_corporate_bodies_feed) | Recently updated corporate bodies | _(none)_ | `GET /corporate-bodies/feed` |\n| [`get_controlled_vocabularies_feed`](./API_USAGE_GUIDE.md#tool-get_controlled_vocabularies_feed) | Recently updated vocabularies | _(none)_ | `GET /controlled-vocabularies/feed` |\n\n### 🔧 Server Diagnostics (1)\n\n| Tool | Description | Key Parameters | Output |\n|------|-------------|----------------|--------|\n| [`get_server_health`](./API_USAGE_GUIDE.md#tool-get_server_health) | Server health and feed availability status (no upstream API calls) | _(none)_ | Health object |\n\n📖 **[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/)**\n\n### Common Use Cases\n\n**Research a specific MEP**:\n```\n1. Find MEP: get_meps → {country: \"SE\"}\n2. Get details: get_mep_details → {id: \"MEP-123\"}\n3. Analyze voting: analyze_voting_patterns → {mepId: \"MEP-123\"}\n4. Generate report: generate_report → {reportType: \"MEP_ACTIVITY\", subjectId: \"MEP-123\"}\n```\n\n**Track legislation**:\n```\n1. Search documents: search_documents → {keywords: \"climate change\"}\n2. Track procedure: track_legislation → {procedureId: \"2024/0001(COD)\"}\n3. Get voting records: get_voting_records → {topic: \"climate\"}\n```\n\n**Committee analysis**:\n```\n1. Get committee: get_committee_info → {abbreviation: \"ENVI\"}\n2. List members: get_meps → {committee: \"ENVI\"}\n3. Generate report: generate_report → {reportType: \"COMMITTEE_PERFORMANCE\", subjectId: \"COMM-ENVI\"}\n```\n\n**OSINT Intelligence analysis**:\n```\n1. Score MEP influence: assess_mep_influence → {mepId: \"MEP-123\"}\n2. Detect anomalies: detect_voting_anomalies → {mepId: \"MEP-123\"}\n3. Analyze coalitions: analyze_coalition_dynamics → {groupIds: [\"EPP\", \"S\u0026D\"]}\n4. Compare groups: compare_political_groups → {groupIds: [\"EPP\", \"S\u0026D\", \"Renew\"]}\n5. Pipeline status: monitor_legislative_pipeline → {committee: \"ENVI\"}\n6. Country delegation: analyze_country_delegation → {country: \"SE\"}\n7. Political landscape: generate_political_landscape → {}\n```\n\n🎯 **[More use cases and examples →](./API_USAGE_GUIDE.md#common-use-cases)**\n\n### 📝 MCP Prompts\n\nPre-built intelligence analysis prompt templates:\n\n| Prompt | Description | Arguments |\n|--------|-------------|-----------|\n| `mep_briefing` | Comprehensive MEP intelligence briefing | mepId (required), period? |\n| `coalition_analysis` | Coalition dynamics and voting bloc analysis | policyArea?, period? |\n| `legislative_tracking` | Legislative procedure tracking report | procedureId?, committee? |\n| `political_group_comparison` | Multi-dimensional group comparison | groups? |\n| `committee_activity_report` | Committee workload and engagement | committeeId (required) |\n| `voting_pattern_analysis` | Voting pattern trend detection | topic?, mepId? |\n| `country_delegation_analysis` | Country delegation composition and activity | country (required), period? |\n\n### 📦 MCP Resources\n\nDirect data access via EP resource URIs:\n\n| Resource URI | Description |\n|-------------|-------------|\n| `ep://meps` | List of all current MEPs |\n| `ep://meps/{mepId}` | Individual MEP profile |\n| `ep://committees/{committeeId}` | Committee information |\n| `ep://plenary-sessions` | Recent plenary sessions |\n| `ep://votes/{sessionId}` | Voting records for a session |\n| `ep://political-groups` | Political group listing |\n| `ep://procedures/{procedureId}` | Legislative procedure details |\n| `ep://plenary/{plenaryId}` | Single plenary session details |\n| `ep://documents/{documentId}` | Legislative document details |\n\n---\n\n## 🗺️ Global Political MCP Servers \u0026 OSINT Coverage\n\nThe European Parliament MCP Server is part of a growing ecosystem of **political and government open data MCP servers** enabling AI-powered OSINT analysis of democratic institutions worldwide. Below is the most comprehensive directory of political and government MCP servers available.\n\n### 🏛️ Parliamentary \u0026 Legislative MCP Servers\n\n| Country | Server | Data Source | Coverage |\n|---------|--------|-------------|----------|\n| 🇪🇺 **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) |\n| 🇺🇸 **United States** | [Congress.gov API MCP Server](https://github.com/bsmi021/mcp-congress_gov_server) | congress.gov | Bills, members, votes, committees (TypeScript, v3 API) |\n| 🇺🇸 **United States** | [CongressMCP](https://github.com/amurshak/congressMCP) | congress.gov | Real-time Congress data — bills, votes, members |\n| 🇺🇸 **United States** | [Congress.gov MCP](https://github.com/AshwinSundar/congress_gov_mcp) | congress.gov | Unofficial Congress.gov API access |\n| 🇬🇧 **United Kingdom** | [Parliament MCP](https://github.com/i-dot-ai/parliament-mcp) | parliament.uk | Hansard, members, debates, divisions |\n| 🇸🇪 **Sweden** | [Riksdag \u0026 Regering MCP](https://github.com/isakskogstad/Riksdag-Regering-MCP) | riksdagen.se | Swedish Parliament \u0026 Government data (used by [riksdagsmonitor.com](https://riksdagsmonitor.com/)) |\n| 🇳🇱 **Netherlands** | [OpenTK MCP](https://github.com/r-huijts/opentk-mcp) | tweedekamer.nl | Dutch Parliament (Tweede Kamer) documents |\n| 🇵🇱 **Poland** | [Parliament of Poland MCP](https://github.com/pkolawa/parliament-poland-mcp-server) | sejm.gov.pl | Members, votes, committees |\n| 🇵🇱 **Poland** | [Sejm MCP](https://github.com/janisz/sejm-mcp) | api.sejm.gov.pl | Parliament data + legislation |\n| 🇮🇱 **Israel** | [Knesset MCP Server](https://github.com/zohar/knesset-mcp) | knesset.gov.il | Knesset parliament API |\n| 🇧🇷 **Brazil** | [Senado BR MCP](https://mcpservers.org/servers/sidneybissoli/senado-br-mcp) | senado.leg.br | Federal Senate — members, proposals, votes |\n\n### 📊 Government Open Data MCP Servers\n\n| Country | Server | Data Source | Coverage |\n|---------|--------|-------------|----------|\n| 🇺🇸 **United States** | [USA Spending MCP](https://github.com/thsmale/usaspending-mcp-server) | usaspending.gov | Federal spending data |\n| 🇺🇸 **United States** | [Open Census MCP](https://mcpservers.org/servers/brockwebb/open-census-mcp-server) | census.gov | Demographics \u0026 statistics (natural language) |\n| 🇺🇸 **United States** | [Data.gov MCP Server](https://github.com/melaodoidao/datagov-mcp-server) | data.gov | Federal dataset catalog |\n| 🇺🇸 **United States** | [CMS Data.gov MCP](https://github.com/clarifyhealth/cms-datagov-mcp-server) | data.cms.gov | Healthcare data — search/filter/pagination |\n| 🇺🇸 **United States** | [SEC EDGAR MCP](https://github.com/stefanoamorelli/sec-edgar-mcp) | sec.gov | SEC filings — annual reports, insider data |\n| 🇺🇸 **United States** | [NPS MCP](https://github.com/amysatterlee/nps_mcp) | nps.gov | National Park Service API |\n| 🇸🇪 **Sweden** | [SCB MCP Server](https://mcpservers.org/servers/isakskogstad/scb-mcp) | scb.se | Official Swedish statistics |\n| 🇸🇪 **Sweden** | [Skolverket MCP](https://mcpservers.org/servers/ksaklfszf921/skolverket-mcp) | skolverket.se | Swedish National Agency for Education |\n| 🇫🇷 **France** | [data.gouv.fr MCP](https://github.com/datagouv/datagouv-mcp) | data.gouv.fr | National open data platform |\n| 🇫🇷 **France** | [Data Gouv MCP Server](https://mcpservers.org/servers/csonigo/datagouv-mcp-server) | data.gouv.fr | Companies \u0026 organizations search |\n| 🇬🇧 **United Kingdom** | [Planning Data MCP](https://github.com/alizoli/planningdatagovuk-api) | planning.data.gov.uk | Planning \u0026 land use data |\n| 🇬🇧 **United Kingdom** | [Property Prices MCP](https://github.com/joemclo/property-prices-mcp) | landregistry.data.gov.uk | Housing price search |\n| 🇳🇱 **Netherlands** | [CBS Open Data MCP](https://github.com/dstotijn/mcp-cbs-cijfers-open-data) | cbs.nl | Dutch statistics bureau |\n| 🇮🇱 **Israel** | [Data.gov.il MCP](https://github.com/DavidOsherProceed/data-gov-il-mcp) | data.gov.il | National CKAN data portal |\n| 🇮🇱 **Israel** | [DataGov Israel MCP](https://github.com/aviveldan/datagov-mcp) | data.gov.il | Alternative implementation + visualization |\n| 🇮🇱 **Israel** | [Israel Statistics MCP](https://github.com/reuvenaor/israel-statistics-mcp) | cbs.gov.il | CPI \u0026 economic time series |\n| 🇮🇱 **Israel** | [BudgetKey MCP](https://github.com/OpenBudget/budgetkey-mcp) | open-budget.org.il | State budget, contracts, grants |\n| 🇹🇷 **Turkey** | [Mevzuat MCP](https://mcpservers.org/servers/MCP-Mirror/saidsurucu_mevzuat-mcp) | mevzuat.gov.tr | Legislation system — search/retrieve laws |\n| 🇭🇰 **Hong Kong** | [HK Data.gov.hk MCP](https://github.com/hkopenai/hk-datagovhk-mcp-server) | data.gov.hk | Hong Kong open data portal |\n| 🇲🇾 **Malaysia** | [Data.gov.my MCP](https://github.com/manfye/data-dosm-mcp-nodejs) | data.gov.my | National data portal |\n| 🇮🇳 **India** | [Data.gov.in MCP](https://github.com/adwait-ai/mcp_data_gov_in) | data.gov.in | Semantic search + dataset access |\n| 🇸🇬 **Singapore** | [Gahmen MCP Server](https://github.com/aniruddha-adhikary/gahmen-mcp) | data.gov.sg | Government datasets + CKAN search |\n| 🇸🇬 **Singapore** | [Singapore Data MCPs](https://github.com/prezgamer/Singapore-Data-MCPs) | data.gov.sg | Multiple servers (parking, health, datasets) |\n| 🇦🇺 **Australia** | [ABS MCP Server](https://github.com/seansoreilly/mcp-server-abs) | abs.gov.au | Bureau of Statistics (SDMX-ML) |\n\n### 🌍 Multi-Portal \u0026 Generic MCP Servers\n\n| Scope | Server | Platform | Coverage |\n|-------|--------|----------|----------|\n| 🌐 **Global (CKAN)** | [CKAN MCP Server](https://github.com/ondata/ckan-mcp-server) | CKAN portals | Generic server for any CKAN-based open data portal |\n| 🌐 **Global (Socrata)** | [OpenGov MCP Server](https://github.com/srobbin/opengov-mcp-server) | Socrata portals | City/county/state/federal Socrata-powered portals |\n\n### 🕵️ OSINT Intelligence Capabilities Comparison\n\n| Capability | 🇪🇺 EU Parliament MCP | 🇺🇸 Congress.gov MCP | 🇬🇧 UK Parliament MCP | 🇸🇪 Riksdag MCP |\n|------------|----------------------|---------------------|----------------------|-----------------|\n| Member profiling | ✅ 5-dimension influence model | ✅ Basic profiles | ✅ Basic profiles | ✅ Basic profiles |\n| Voting analysis | ✅ Anomaly detection + patterns | ✅ Roll call votes | ✅ Division records | ✅ Vote records |\n| Coalition dynamics | ✅ Cohesion \u0026 stress analysis | ❌ | ❌ | ❌ |\n| Committee intelligence | ✅ Workload \u0026 engagement metrics | ✅ Committee data | ✅ Committee data | ❌ |\n| Legislative pipeline | ✅ Bottleneck detection + forecasting | ✅ Bill tracking | ✅ Bill tracking | ✅ Bill tracking |\n| Country delegation analysis | ✅ National cohesion metrics | N/A | N/A | N/A |\n| Political landscape | ✅ Parliament-wide situational awareness | ❌ | ❌ | ❌ |\n| Attendance tracking | ✅ Trend detection + engagement scoring | ❌ | ❌ | ❌ |\n| GDPR compliance | ✅ Privacy-first design | N/A | N/A | ✅ |\n| MCP prompts \u0026 resources | ✅ 7 prompts + 9 resources | ❌ | ❌ | ❌ |\n| Tool count | **63 tools** | ~5 tools | ~5 tools | ~4 tools |\n\n\u003e 💡 **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.\n\n---\n\n## 🏛️ European Parliament Datasets\n\n### Complete EP API v2 Coverage\n\nAll 55 [European Parliament Open Data API v2](https://data.europarl.europa.eu/en/developer-corner/opendata-api) endpoints are fully covered — 41 core data endpoints, 13 feed endpoints, and 1 optional endpoint (`/procedures/{id}/events/{event-id}`):\n\n| Category | Endpoints | MCP Tools |\n|----------|-----------|-----------|\n| **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` |\n| **MEP Documents** | `/meps-declarations`, `/meps-declarations/{id}` | `get_mep_declarations` |\n| **Corporate Bodies** | `/corporate-bodies`, `/corporate-bodies/{id}`, `/corporate-bodies/show-current` | `get_committee_info` |\n| **Events** | `/events`, `/events/{id}` | `get_events` |\n| **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` |\n| **Speeches** | `/speeches`, `/speeches/{id}` | `get_speeches` |\n| **Procedures** | `/procedures`, `/procedures/{id}`, `/procedures/{id}/events`, `/procedures/{id}/events/{event-id}` | `get_procedures`, `get_procedure_events`, `get_procedure_event_by_id` |\n| **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` |\n| **Questions** | `/parliamentary-questions`, `/parliamentary-questions/{id}` | `get_parliamentary_questions` |\n| **External Documents** | `/external-documents`, `/external-documents/{id}` | `get_external_documents` |\n| **Vocabularies** | `/controlled-vocabularies`, `/controlled-vocabularies/{id}` | `get_controlled_vocabularies` |\n| **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` |\n\n### Data Source\n\n- **API**: https://data.europarl.europa.eu/api/v2/\n- **Documentation**: https://data.europarl.europa.eu/en/developer-corner\n- **Format**: JSON-LD, RDF/XML, Turtle\n- **License**: European Parliament Open Data License\n\n---\n\n## 🔒 Security \u0026 Compliance\n\n### ISMS Compliance\n\nThis project aligns with [Hack23 AB's Information Security Management System (ISMS)](https://github.com/Hack23/ISMS-PUBLIC):\n\n- ✅ **ISO 27001:2022** - Information security management\n- ✅ **NIST CSF 2.0** - Cybersecurity framework\n- ✅ **CIS Controls v8.1** - Security best practices\n- ✅ **GDPR** - EU data protection compliance\n\n### Security Features\n\n- 🔐 **Authentication**: API key + OAuth 2.0 (planned)\n- 🛡️ **Input Validation**: Zod schemas for all inputs\n- ⚡ **Rate Limiting**: 100 requests per minute\n- 🔒 **Security Headers**: CSP, HSTS, X-Frame-Options, etc.\n- 📝 **Audit Logging**: All data access logged\n- 🔍 **Vulnerability Scanning**: CodeQL, Dependabot, OSSF Scorecard\n\n### Supply Chain Security\n\nThis project achieves **SLSA Level 3** compliance:\n- ✅ **Build Provenance** - Cryptographic proof of build integrity\n- ✅ **Attestations** - All artifacts cryptographically signed\n- ✅ **Verification** - `gh attestation verify \u003cartifact\u003e --owner Hack23 --repo European-Parliament-MCP-Server`\n- ✅ **npm Provenance** - Published with provenance for package integrity\n- ✅ **SBOM** - SPDX-format Software Bill of Materials\n- ✅ **Dependency Review** - Automated vulnerability scanning\n- ✅ **License Compliance** - Only MIT, Apache-2.0, BSD, ISC allowed\n\nSee [**ATTESTATIONS.md**](docs/ATTESTATIONS.md) for verification instructions and security benefits.\n\n### 📋 Project Classification\n\nPer [Hack23 Open Source Policy](https://github.com/Hack23/ISMS-PUBLIC/blob/main/Open_Source_Policy.md):\n\n| Property | Value |\n|----------|-------|\n| **CRA Classification** | [![Standard](https://img.shields.io/badge/CRA-Standard-green?style=flat-square)](CRA-ASSESSMENT.md) Non-commercial Open Source Software |\n| **Confidentiality** | [![Public](https://img.shields.io/badge/C-Public-lightgrey?style=flat-square)](https://github.com/Hack23/ISMS-PUBLIC/blob/main/CLASSIFICATION.md) |\n| **Integrity** | [![Moderate](https://img.shields.io/badge/I-Moderate-yellow?style=flat-square)](https://github.com/Hack23/ISMS-PUBLIC/blob/main/CLASSIFICATION.md) |\n| **Availability** | [![Standard](https://img.shields.io/badge/A-Standard-lightgreen?style=flat-square)](https://github.com/Hack23/ISMS-PUBLIC/blob/main/CLASSIFICATION.md) |\n\nSee [**CRA-ASSESSMENT.md**](CRA-ASSESSMENT.md) for the full EU Cyber Resilience Act conformity assessment.\n\n---\n\n## 🧪 Development\n\n### Setup Development Environment\n\n```bash\n# Install dependencies\nnpm install\n\n# Run in development mode with auto-reload\nnpm run dev\n\n# Type checking\nnpm run type-check\n\n# Linting\nnpm run lint\n\n# Format code\nnpm run format\n\n# Run tests\nnpm test\n\n# Run tests with coverage\nnpm run test:coverage\n```\n\n### Project Structure\n\n```\nEuropean-Parliament-MCP-Server/\n├── src/                      # Source code\n│   ├── server.ts            # MCP server entry point\n│   ├── tools/               # MCP tool implementations\n│   ├── resources/           # MCP resource handlers\n│   ├── prompts/             # MCP prompt templates\n│   ├── clients/             # European Parliament API client\n│   ├── schemas/             # Zod validation schemas\n│   ├── types/               # TypeScript type definitions\n│   └── utils/               # Utility functions\n├── tests/                   # Test files\n├── .github/                 # GitHub configuration\n│   ├── agents/             # Custom Copilot agents\n│   ├── skills/             # Reusable skill patterns\n│   └── workflows/          # CI/CD workflows\n└── docs/                    # Additional documentation\n```\n\n### Documentation\n\n#### 📚 Developer Documentation\n\n- **[JSDoc Coverage Report](./JSDOC_COVERAGE_REPORT.md)** - Detailed analysis of JSDoc documentation coverage across all source files\n- **[JSDoc Quick Reference](./docs/JSDOC_QUICK_REFERENCE.md)** - Quick reference guide for writing comprehensive JSDoc comments\n- **[JSDoc Coverage Summary](./JSDOC_COVERAGE_SUMMARY.md)** - Executive summary of documentation status and priorities\n- **[JSDoc Coverage Visualization](./docs/JSDOC_COVERAGE_VISUALIZATION.md)** - Visual representation of documentation coverage with charts and graphs\n\n#### 🏗️ Architecture \u0026 Design\n\n- **[Architecture Documentation](./ARCHITECTURE.md)** - System architecture and design patterns\n- **[Data Model](./DATA_MODEL.md)** - Data structures and type definitions\n- **[API Usage Guide](./API_USAGE_GUIDE.md)** - Guide for using the MCP server API\n- **[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\n\n#### 🧪 Testing \u0026 Quality\n\n- **[Test Coverage Report](./TEST_COVERAGE_REPORT.md)** - Test coverage statistics and analysis\n- **[Developer Guide](./DEVELOPER_GUIDE.md)** - Development setup and guidelines\n- **[Performance Guide](./PERFORMANCE_GUIDE.md)** - Performance optimization strategies\n\n#### 🔒 Security \u0026 Compliance\n\n- **[Security Policy](./SECURITY.md)** - Vulnerability reporting and security practices\n- **[Security Architecture](./SECURITY_ARCHITECTURE.md)** - Security controls and architecture\n- **[Secure Development Policy](./Secure_Development_Policy.md)** - Secure coding standards\n- **[Open Source Policy](./Open_Source_Policy.md)** - Open source compliance guidelines\n\n#### 📦 Deployment \u0026 Operations\n\n- **[Deployment Guide](./DEPLOYMENT_GUIDE.md)** - Production deployment instructions\n- **[Troubleshooting Guide](#troubleshooting)** - Common issues and solutions\n- **[NPM Publishing Guide](./NPM_PUBLISHING.md)** - Package publishing workflow\n\n### Testing\n\n```bash\n# Unit tests\nnpm test\n\n# Integration tests (requires EP_INTEGRATION_TESTS=true)\nEP_INTEGRATION_TESTS=true npm run test:integration\n\n# Integration tests with fixture capture\nEP_INTEGRATION_TESTS=true EP_SAVE_FIXTURES=true npm run test:integration\n\n# E2E tests\nnpm run test:e2e\n\n# Coverage report\nnpm run test:coverage\n\n# Watch mode\nnpm run test:watch\n```\n\n**Integration Testing**: When `EP_INTEGRATION_TESTS=true`, 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).\n\n### Code Quality\n\n```bash\n# Lint code\nnpm run lint\n\n# Fix linting issues\nnpm run lint:fix\n\n# Check for unused dependencies\nnpm run knip\n\n# Security audit\nnpm audit\n\n# License compliance\nnpm run test:licenses\n\n# Mermaid diagram validation (parses every ```mermaid block in *.md)\nnpm run test:mermaid\n```\n\n---\n\n## 🛠️ Troubleshooting\n\n### API Rate Limits\n\n**Symptom:** Requests return `429 Too Many Requests` or slow down unexpectedly.\n\nThe European Parliament Open Data API enforces rate limits. The MCP server\nautomatically applies a token-bucket rate limiter (100 requests per minute).\n\n**Solutions:**\n```bash\n# Reduce concurrency — don't call multiple tools in parallel bursts\n# Use the built-in cache — repeated identical requests are served from LRU cache\n# Add a delay between bulk operations:\n# e.g., call get_meps, wait 1 s, then call get_mep_details\n\n# Check current cache stats (if using programmatic access):\nconst stats = epClient.getCacheStats();\nconsole.log(`Cache hit rate: ${stats.hitRate}%`);\n```\n\n### Connectivity Issues\n\n**Symptom:** `ECONNREFUSED`, `ETIMEDOUT`, or `Network error` from tools.\n\n**Solutions:**\n1. Verify EP API reachability: `curl https://data.europarl.europa.eu/api/v2/meps?limit=1`\n2. Check firewall / proxy settings — the server connects outbound to `data.europarl.europa.eu:443`\n3. Enable retry (default: on) — the client retries transient failures with exponential backoff\n4. Review API status at https://data.europarl.europa.eu/en/developer-corner\n\n### Installation Problems\n\n**Symptom:** `npm install` fails, or `node dist/index.js` throws import errors.\n\n**Solutions:**\n```bash\n# Ensure Node.js 26+ is installed\nnode --version   # Must be \u003e= 26.0.0\n\n# Clear npm cache and reinstall\nnpm cache clean --force\nrm -rf node_modules package-lock.json\nnpm install\n\n# Rebuild TypeScript output\nnpm run build\n\n# Verify the package starts correctly\nnode dist/index.js --version\n```\n\n**Symptom:** MCP client shows \"server not found\" or no tools listed.\n\n**Solutions:**\n- Confirm the `command` path in your MCP client config points to the correct binary\n- For `npx`: ensure `european-parliament-mcp-server` is in your npm registry\n- For `node`: use the absolute path to `dist/index.js`\n- Check MCP client logs — most clients (Claude Desktop, VS Code) log connection errors\n\n### Integration Test Failures\n\n**Symptom:** Integration tests fail with `EP_INTEGRATION_TESTS must be set`.\n\nIntegration tests are disabled by default to respect API rate limits.\n\n```bash\n# Enable integration tests explicitly:\nEP_INTEGRATION_TESTS=true npm run test:integration\n\n# Capture fresh fixtures for offline testing:\nEP_INTEGRATION_TESTS=true EP_SAVE_FIXTURES=true npm run test:integration\n```\n\n### TypeScript / Build Errors\n\n**Symptom:** `tsc` reports type errors after pulling latest changes.\n\n```bash\n# Regenerate all types\nnpm run type-check\n\n# Check for mismatched Node types\nnpm install  # updates @types/node\n\n# Ensure tsconfig is correct\ncat tsconfig.json\n```\n\n### Getting Help\n\n- 📋 [Open an Issue](https://github.com/Hack23/European-Parliament-MCP-Server/issues)\n- 💬 [Start a Discussion](https://github.com/Hack23/European-Parliament-MCP-Server/discussions)\n- 📖 [Full Troubleshooting Guide](#troubleshooting)\n- 🤖 [Ask DeepWiki](https://deepwiki.com/Hack23/European-Parliament-MCP-Server)\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for details on:\n\n- Code of conduct\n- Development process\n- Pull request guidelines\n- Coding standards\n- Testing requirements\n\n### GitHub Copilot Integration\n\nThis repository includes custom agents and skills for GitHub Copilot:\n\n- **Agents**: Specialized AI assistants for development, testing, security, and documentation\n- **Skills**: Reusable patterns for MCP development, security, testing, and performance\n- See [.github/agents/README.md](./.github/agents/README.md) and [.github/skills/README.md](./.github/skills/README.md)\n\n### Release Process\n\nWe follow [Semantic Versioning](https://semver.org/) and use automated release management:\n\n**Version Types:**\n- **Major** (x.0.0): Breaking changes (e.g., API incompatible changes)\n- **Minor** (0.x.0): New features, backward compatible (e.g., new MCP tools)\n- **Patch** (0.0.x): Bug fixes, security updates, backward compatible\n\n**Automated Release Workflow:**\n1. Develop features in feature branches\n2. Create PR with descriptive title using [Conventional Commits](https://www.conventionalcommits.org/)\n3. Labels are automatically applied based on changed files\n4. After merge to main, release draft is automatically created\n5. Review and publish release (creates git tag automatically)\n\n**Release Notes Include:**\n- Categorized changes by feature area\n- Security badges (OpenSSF Scorecard, SLSA)\n- Technology stack and compatibility\n- ISMS compliance status\n- Full changelog link\n\nFor detailed workflow documentation, see [.github/WORKFLOWS.md](./.github/WORKFLOWS.md).\n\n---\n\n## 🤖 AI-Disrupted Intelligence \u0026 Future Roadmap\n\n\u003e **📰 News is dead. Long live intelligence.**\n\u003e\n\u003e 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.\n\u003e\n\u003e **This is not a news bot. This is parliamentary intelligence infrastructure.**\n\n### 🏗️ Agentic Architecture Overview\n\nThis 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.\n\n```mermaid\n%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#6366f1', 'primaryTextColor': '#fff', 'primaryBorderColor': '#4f46e5', 'lineColor': '#94a3b8', 'secondaryColor': '#f59e0b', 'tertiaryColor': '#10b981', 'background': '#0f172a', 'mainBkg': '#1e293b', 'nodeBorder': '#475569'}}}%%\ngraph TB\n    subgraph AGENTS[\"🤖 14 Copilot Agents\"]\n        style AGENTS fill:#1e1b4b,stroke:#6366f1,color:#e0e7ff\n        A1[\"🎯 product-task-agent\"]\n        A2[\"📝 documentation-writer\"]\n        A3[\"🔧 frontend-specialist\"]\n        A4[\"🔌 api-integration-engineer\"]\n        A5[\"⚙️ mcp-developer\"]\n        A6[\"🛡️ security-specialist\"]\n        A7[\"🧪 test-engineer\"]\n        A8[\"🕵️ intelligence-operative\"]\n        A9[\"🏛️ european-parliament-specialist\"]\n        A10[\"📊 performance-optimizer\"]\n        A11[\"📋 isms-compliance-auditor\"]\n        A12[\"💼 business-development-specialist\"]\n        A13[\"📣 marketing-specialist\"]\n        A14[\"🧩 zod-schema-architect\"]\n    end\n\n    subgraph SKILLS[\"🎯 41 Reusable Skills\"]\n        style SKILLS fill:#1c1917,stroke:#f59e0b,color:#fef3c7\n        S1[\"🔧 10 Core Dev Skills\"]\n        S2[\"🛡️ 6 Security Skills\"]\n        S3[\"⚙️ 4 DevOps Skills\"]\n        S4[\"🔍 10 Intel \u0026 OSINT Skills\"]\n        S5[\"💼 2 Business Skills\"]\n        S6[\"🤖 3 AI \u0026 MCP Gateway Skills\"]\n        S7[\"📋 6 ISMS Compliance Skills\"]\n    end\n\n    subgraph WORKFLOWS[\"⚙️ 11 CI/CD Workflows\"]\n        style WORKFLOWS fill:#022c22,stroke:#10b981,color:#d1fae5\n        W1[\"🧪 test-and-report\"]\n        W2[\"🔍 codeql\"]\n        W3[\"📦 release\"]\n        W4[\"🌐 integration-tests\"]\n        W5[\"📋 sbom-generation\"]\n        W6[\"🔒 slsa-provenance\"]\n        W7[\"📊 scorecard\"]\n        W8[\"🔎 dependency-review\"]\n        W9[\"🏷️ labeler\"]\n        W10[\"⚙️ setup-labels\"]\n        W11[\"🤖 copilot-setup-steps\"]\n    end\n\n    subgraph TOOLS[\"🔌 62 MCP Tools\"]\n        style TOOLS fill:#172554,stroke:#3b82f6,color:#dbeafe\n        T1[\"🕵️ 15 OSINT Intelligence\"]\n        T2[\"📊 3 Advanced Analysis + 1 Diagnostics\"]\n        T3[\"👤 7 MEP Data\"]\n        T4[\"🏛️ 9 Plenary \u0026 Meeting\"]\n        T5[\"📄 12 Document, Committee \u0026 Legislative\"]\n    end\n\n    AGENTS --\u003e SKILLS\n    AGENTS --\u003e TOOLS\n    SKILLS --\u003e WORKFLOWS\n    WORKFLOWS --\u003e TOOLS\n```\n\n### 📅 Future Advanced Roadmap: 2026–2037\n\n\u003e 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.\n\n#### Phase 5: Advanced Intelligence (2026–2027)\n\n```mermaid\n%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#6366f1', 'primaryTextColor': '#fff', 'primaryBorderColor': '#4f46e5', 'lineColor': '#94a3b8', 'secondaryColor': '#22d3ee', 'tertiaryColor': '#10b981'}}}%%\ntimeline\n    title 2026–2027 · Advanced Intelligence Era\n    section Q1–Q2 2026\n        Agentic News Generation : Opus 4.6–4.7\n        : AI-generated parliamentary briefings\n        : Automated committee intelligence reports\n        : Real-time vote analysis summaries\n    section Q3–Q4 2026\n        Deep Analysis Pipelines : Opus 4.8–4.9\n        : Cross-institutional correlation engine\n        : MEP behavioral prediction models\n        : Legislative outcome forecasting\n    section Q1–Q2 2027\n        Predictive Analytics : Opus 5.0–5.1\n        : Coalition formation prediction\n        : Amendment survival probability\n        : Policy impact pre-assessment\n    section Q3–Q4 2027\n        Multi-source Intelligence : Opus 5.2–5.3\n        : EUR-Lex deep integration\n        : Council position analysis\n        : Commission proposal tracking\n```\n\n#### Phase 6: AGI Era \u0026 Transformative Democracy (2034–2037)\n\n\u003e *Scenario: AGI or near-AGI systems become available through Amazon Bedrock or successor platforms*\n\n```mermaid\n%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#a855f7', 'primaryTextColor': '#fff', 'lineColor': '#c084fc', 'secondaryColor': '#f59e0b', 'tertiaryColor': '#ec4899'}}}%%\nmindmap\n  root((\"🌐 AGI Era\\n2034–2037\"))\n    🤖 AGI-Enhanced Intelligence\n      Autonomous real-time analysis\n        All 195 parliamentary systems\n        Every legislative session globally\n        Sub-second pattern detection\n      Universal language support\n        All UN official languages\n        Regional dialects \u0026 legal terminology\n        Real-time translation \u0026 summarization\n    📊 Predictive Governance\n      Policy impact prediction\n        Before legislation is proposed\n        Economic modeling integration\n        Social impact forecasting\n      Democratic health monitoring\n        Voter engagement indices\n        Institutional resilience scores\n        Democratic backsliding alerts\n    ⚖️ Ethical AI Governance\n      Human oversight maintained\n        Regardless of AI capability level\n        Escalation protocols for critical decisions\n        Transparency reports on AI judgments\n      Bias detection \u0026 correction\n        Multi-cultural fairness auditing\n        Political neutrality verification\n        Algorithmic accountability logs\n    🛡️ Democratic Safeguards\n      Anti-weaponization architecture\n        Platform prevents manipulation\n        Disinformation detection layer\n        Foreign influence monitoring\n      Sovereignty protection\n        EU data sovereignty enforced\n        Quantum-resistant encryption\n        Air-gapped government deployments\n```\n\n#### 🧬 AI Model Evolution Strategy\n\n\u003e **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).\n\n```mermaid\n%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#6366f1', 'primaryTextColor': '#fff', 'primaryBorderColor': '#4f46e5', 'lineColor': '#94a3b8', 'secondaryColor': '#f59e0b', 'tertiaryColor': '#10b981'}}}%%\ngantt\n    title AI Model Evolution \u0026 Platform Capability Growth\n    dateFormat YYYY\n    axisFormat %Y\n    todayMarker off\n\n    section AI Models\n    Opus 4.6–4.9        :a1, 2026, 2027\n    Opus 5.x             :a2, 2027, 2028\n    Opus 6.x Multimodal  :a3, 2028, 2029\n    Opus 7.x Autonomous  :a4, 2029, 2030\n    Opus 8.x Near-Expert :a5, 2030, 2031\n    Opus 9–10.x Pre-AGI  :a6, 2031, 2034\n    AGI / Post-AGI       :a7, 2034, 2037\n\n    section Platform Phases\n    Phase 5 Advanced Intel     :p5, 2026, 2028\n    Phase 5b Predictive        :p5b, 2028, 2030\n    Phase 5c Autonomous        :p5c, 2030, 2031\n    Phase 6 Pre-AGI Global     :p6a, 2031, 2034\n    Phase 6 AGI Transformative :p6b, 2034, 2037\n```\n\n#### 📊 Workflow Count \u0026 Capability Projection\n\n\u003e **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.\n\n| Year | Total Workflows | AI Model | Key Capability | Tools |\n|:----:|:---------------:|:--------:|:---------------|:-----:|\n| **2026** | 44–50 | Opus 4.6–4.9 | 🤖 Agentic news generation, AI-authored briefings | 46→55 |\n| **2027** | 50–55 | Opus 5.x | 📈 Predictive analytics, coalition forecasting | 55→65 |\n| **2028** | 55–65 | Opus 6.x | 🎥 Multi-modal content, video/speech analysis | 65→80 |\n| **2029** | 65–75 | Opus 7.x | ⚡ Autonomous pipeline, self-optimizing CI/CD | 80→90 |\n| **2030** | 75–85 | Opus 8.x | 🧠 Near-expert analysis, domain specialist AI | 90→100 |\n| **2031–2033** | 85–100 | Opus 9–10.x / Pre-AGI | 🌍 Global coverage, all EU national parliaments | 100→120 |\n| **2034–2037** | 100–120+ | AGI / Post-AGI | 🌐 Transformative platform, 195 parliaments | 120→200+ |\n\n#### 🔮 Strategic Considerations\n\n| Pillar | Description | Safeguard |\n|:------:|:------------|:----------|\n| 🤖 **Autonomous Analysis** | AGI-powered real-time political intelligence across all 195 parliamentary systems | Human analyst review for high-stakes assessments |\n| 🌐 **Universal Language** | Every UN language supported natively with legal terminology precision | Multi-cultural fairness auditing at every release |\n| 📊 **Predictive Governance** | Policy impact prediction *before* legislation is proposed | Confidence intervals and uncertainty quantification mandatory |\n| ⚖️ **Ethical AI Governance** | Human oversight maintained regardless of AI capability level | ISMS-aligned escalation protocols, transparency reports |\n| 🛡️ **Democratic Safeguards** | Platform architecture prevents weaponization or manipulation | Quarterly red-team exercises, sovereignty-first data policies |\n\n#### 🗺️ Extended Roadmap Visualization\n\n```mermaid\n%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#6366f1', 'primaryTextColor': '#fff', 'lineColor': '#94a3b8'}}}%%\ngraph LR\n    subgraph Y2026[\"2026\"]\n   ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhack23%2Feuropean-parliament-mcp-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhack23%2Feuropean-parliament-mcp-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhack23%2Feuropean-parliament-mcp-server/lists"}