Atlas / MCP servers / hack23 / european-parliament-mcp-server

european-parliament-mcp-serverBLOCK

mcp/hack23/european-parliament-mcp-server

European Parliament MCP Server - Political intelligence for AI agents

Verdict
BLOCK
Grade
F
Trust score
50 /100
Exposed tools
59 59r · 0w · 0d
Transport
stdio
License
Apache-2.0
Stars
28
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

🏛️ European Parliament MCP Server

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

The canonical TypeScript MCP bridge between the European Parliament Open Data Portal and any MCP-aware AI client — Claude Desktop, VS Code, Cursor, GitHub Copilot. Powers the EU Parliament Monitor AI newsroom and is a sister project to Riksdagsmonitor in the Hack23 political-intelligence portfolio.

Model Context Protocol Server for European Parliament Open Data — providing AI assistants with structured access to MEPs, plenary sessions, committees, legislative documents, and parliamentary questions through a secure, type-safe TypeScript implementation. MEP influence scoring (5-dimension model), Coalition cohesion & stress analysis, Party defection & anomaly detection, Cross-group comparative analysis, MEP/committee legislative scoring, Pipeline status & bottleneck detection, Committee workload & engagement analysis, MEP atte

Read from source at commit 619eae3cfaf8OBSERVED · 2026-10-12
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add european-parliament-mcp-server -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "european-parliament-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ]
    }
  }
}
03

Exposed tools (59)

59 read · 0 write · 0 destructive.

ToolRiskDescription
analyze_coalition_dynamicsreadAnalyze political group coalition dynamics including cohesion rates, cross-party alliances, defection rates, and stress indicators. Computes parliamentary fragmentation index, effective number of parties, grand coalition viability, and opposition strength. Uses CIA Coalition Analysis methodology.
analyze_committee_activityreadAnalyze European Parliament committee workload, meeting frequency, document production, decisions adopted, legislative output, and member engagement. Fans out four EP sources in parallel with per-source timeouts and reports data availability per source.
analyze_country_delegationreadAnalyze a country\
analyze_legislative_effectivenessreadAnalyze legislative effectiveness of an MEP or committee using real EP Open Data Portal sources.
analyze_voting_patternsreadAnalyze MEP voting behavior including voting alignment with political group, cross-party voting patterns, attendance rates, and topic-based voting analysis. Returns comprehensive voting statistics and patterns over a specified time period.
coalition_analysisreadAnalyze coalition dynamics and voting blocs in the European Parliament, identifying cross-party alliances and emerging political alignments.
committeereadCommittee abbreviation to filter by
committeeIdreadCommittee abbreviation (e.g.,
committee_activity_reportreadGenerate an activity report for a European Parliament committee, covering meetings, documents produced, legislative opinions, and member engagement.
comparative_intelligencereadCross-reference 2-10 MEP activities across voting, committee, legislative, and attendance dimensions. Returns ranked profiles, correlation matrix, outlier detection, and cluster analysis for comprehensive comparative intelligence.
compare_political_groupsreadCompare political groups across multiple dimensions: voting discipline, activity level, legislative output, attendance, and cohesion. Returns rankings, computed performance scores, seat share, effectiveness per member, parliamentary balance index, and competitive index.
correlate_intelligencereadCross-tool OSINT intelligence correlation engine. Combines outputs from
countryreadEU member state name or ISO country code
country_delegation_analysisreadAnalyse the MEP delegation from a specific EU member state, including voting cohesion, committee presence, legislative contribution, and cross-party dynamics.
early_warning_systemreadDetect emerging political shifts, coalition fracture signals, and unusual patterns. Generates warnings with severity levels (CRITICAL/HIGH/MEDIUM/LOW), computes stability score (0-100), trend indicators, and overall risk level. Configurable sensitivity and focus area.
generate_political_landscapereadGenerate a comprehensive political landscape overview of the European Parliament — group sizes, seat shares, coalition dynamics, bloc analysis, and power balance. Single-call situational awareness for strategic intelligence.
generate_reportreadGenerate comprehensive analytical reports on European Parliament data. Supports MEP activity reports, committee performance reports, voting statistics, and legislation progress reports. Returns structured report with summary, sections, statistics, and recommendations.
get_adopted_textsreadGet European Parliament adopted texts including legislative resolutions, positions, and non-legislative resolutions. Supports single document lookup by docId or list with year filter. Data source: European Parliament Open Data Portal.
get_all_generated_statsreadRetrieve precomputed European Parliament activity statistics (2004-2026) with monthly breakdowns,
get_committee_documentsreadGet European Parliament committee documents. Supports single document lookup by docId or paginated list. Note: The EP API /committee-documents endpoint does not support year filtering. Data source: European Parliament Open Data Portal.
get_controlled_vocabulariesreadGet European Parliament controlled vocabularies (standardized classification terms). Supports single vocabulary lookup by vocId. Data source: European Parliament Open Data Portal.
get_current_mepsreadGet currently active Members of European Parliament (today
get_external_documents_feedreadGet recently updated external documents (non-EP documents) from the feed. Returns external documents published or updated during the specified timeframe. Data source: European Parliament Open Data Portal.
get_homonym_mepsreadGet homonym Members of European Parliament (MEPs with identical names) for the current parliamentary term. Useful for name disambiguation. Data source: European Parliament Open Data Portal.
get_incoming_mepsreadGet incoming Members of European Parliament for the current parliamentary term. Returns MEPs who are newly joining. Data source: European Parliament Open Data Portal.
get_meeting_activitiesreadGet activities linked to a specific EP plenary sitting (debates, votes, presentations). Requires a sitting ID. Note: this endpoint can be slower than decisions; use a smaller limit for faster responses. Data source: European Parliament Open Data Portal.
get_meeting_decisionsreadGet decisions made in a specific EP plenary sitting. Returns adopted decisions and voting outcomes. Requires a sitting ID. Data source: European Parliament Open Data Portal.
get_meeting_foreseen_activitiesreadGet foreseen (planned) activities for a specific EP meeting/plenary sitting. Returns scheduled agenda items. Note: this endpoint can be slower than decisions; use a smaller limit for faster responses. Data source: European Parliament Open Data Portal.
get_meeting_plenary_session_document_itemsreadGet plenary session document items for a specific EP meeting/plenary sitting. Returns individual agenda item documents for the meeting. Note: this endpoint can be slower than decisions; use a smaller limit for faster responses. Data source: European Parliament Open Data Portal.
get_meeting_plenary_session_documentsreadGet plenary session documents for a specific EP meeting/plenary sitting. Returns session documents associated with the meeting. Note: this endpoint can be slower than decisions; use a smaller limit for faster responses. Data source: European Parliament Open Data Portal.
get_mep_declarationsreadGet MEP declarations of financial interests filed under the Rules of Procedure. Supports single declaration lookup by docId or list with year filter. Data source: European Parliament Open Data Portal. GDPR: Access is audit-logged.
get_mep_declarations_feedreadGet recently updated MEP declarations from the feed. Returns declarations published or updated during the specified timeframe. Data source: European Parliament Open Data Portal.
get_mep_detailsreadRetrieve the complete EP API v2 profile for a Member of European Parliament, including biographical data, mandates, organizations, committee classifications, and leadership roles. Personal data access is logged for GDPR compliance.
get_mepsreadRetrieve Members of European Parliament with optional filters (country, political group, committee, active status). Returns paginated results with MEP details including name, country, political group, committees, and contact information.
get_outgoing_mepsreadGet outgoing Members of European Parliament for the current parliamentary term. Returns MEPs who are leaving parliament. Data source: European Parliament Open Data Portal.
get_parliamentary_questionsreadRetrieve European Parliament questions (written and oral) submitted by MEPs, or a single question by docId. Filter by question type, author, topic, status (pending/answered), and date range. Returns question text, answers if available, and metadata.
get_plenary_documentsreadGet European Parliament plenary documents. Supports single document lookup by docId or list with year filter. Data source: European Parliament Open Data Portal.
get_plenary_session_document_itemsreadGet European Parliament plenary session document items. Returns individual items within plenary session documents. Data source: European Parliament Open Data Portal.
get_plenary_session_documentsreadGet European Parliament plenary session documents (agendas, minutes, voting lists). Supports single document lookup by docId. Data source: European Parliament Open Data Portal.
get_plenary_sessionsreadRetrieve European Parliament plenary sessions/meetings. Supports single meeting lookup by eventId or list with year, date, and location filters. Returns session details including date, location, agenda items, voting records, and attendance statistics.
get_procedure_event_by_idreadGet a specific event linked to a legislative procedure. Returns a single event for the specified procedure and event identifiers. Data source: European Parliament Open Data Portal.
get_procedure_eventsreadGet events linked to a specific EP legislative procedure (hearings, debates, votes). Returns the timeline of events for a procedure. Data source: European Parliament Open Data Portal.
get_proceduresreadGet European Parliament legislative procedures. Supports single procedure lookup by processId or paginated list. Note: The EP API /procedures endpoint does not support year filtering. Data source: European Parliament Open Data Portal.
get_procedures_feedreadGet recently updated European Parliament procedures from the feed. Returns procedures published or updated during the specified timeframe. Data source: European Parliament Open Data Portal. NOTE: The EP API procedures/feed endpoint is significantly slower than other feeds —
get_server_healthreadCheck server health and feed availability status. Returns server version, uptime,
get_speechesreadGet European Parliament plenary speeches and debate contributions. Supports single speech lookup by speechId or list with date range filtering (dateFrom/dateTo mapped to EP API sitting-date/sitting-date-end). Data source: European Parliament Open Data Portal.
groupsreadComma-separated political group names (e.g.,
legislative_trackingreadTrack and analyze the progress of legislative procedures through the European Parliament, including committee stages, amendments, and voting outcomes.
mepIdreadMEP identifier
mep_briefingreadGenerate a comprehensive MEP intelligence briefing covering voting record, committee roles, legislative activity, and influence assessment.
periodreadAnalysis period (e.g.,
policyAreareadPolicy area to focus on (e.g.,
political_group_comparisonreadCompare political groups across voting discipline, legislative output, attendance, and cohesion metrics.
procedureIdreadLegislative procedure identifier
search_documentsreadSearch European Parliament legislative documents by keyword, or retrieve a single document by docId. Filter by document type (REPORT, RESOLUTION, DECISION, DIRECTIVE, REGULATION, OPINION), date range, and committee. Returns document metadata including title, authors, status, and PDF/XML links.
topicreadPolicy topic or keyword
track_legislationreadTrack European Parliament legislative procedure progress including current status, timeline of stages, committee assignments, amendments, voting records, and next steps. Provides comprehensive overview of legislation journey from proposal to adoption.
track_mep_attendancereadTrack and analyze MEP attendance patterns across plenary sessions. Provides attendance rates, trends, and engagement categorization. Filter by individual MEP, country, or political group.
voting_pattern_analysisreadAnalyze voting patterns to identify trends, anomalies, and cross-party alignments on specific policy topics.
04

Trust audit

BLOCKgrade F · trust 50/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (5 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
found

Findings (25)

HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
THREAT_MODEL.md:1747
| **3** | **MCP Protocol Abuse (AI Jailbreak)**<br/>(T1059, T1480) | €500 – €2,000 | 0.2 – 0.5 | **€100 – €1,000** | **Medium** | **SLE:** Service disruption (rate-limit exhaustion) + incident-respons
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
THREAT_MODEL.md:2013
| **3** | **MCP Protocol Abuse (AI Jailbreak)**<br/>(T1059 Command and Scripting Interpreter, T1480 Execution Guardrails Bypass) | 🤖 Malicious AI User<br/>🔬 Security Researcher | Crafted prompts causi
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
THREAT_MODEL.md:2046
### Scenario 3: MCP Protocol Abuse (AI Jailbreak)
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
MEDIUMInventory / provenance · inv.binary · CWE-1104
.vitest/ui/html.meta.json.gz
html.meta.json.gz
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
.vitest/ui/assets/index-CYxBNAdm.js:28
outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);`;var m;c&&(m=i.ownerDocument.defaultView.scrollY),r.input.focus(),c&&i.ownerDocument.defaultVie
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
.vitest/ui/assets/index-CYxBNAdm.js:29
`,Nfr:()=>ky,NoBreak:()=>``,NonBreakingSpace:()=>`\xA0`,Nopf:()=>`N`,Not:()=>`⫬`,NotCongruent:()=>`≢`,NotCupCap:()=>`≭`,NotDoubleVerticalBar:()=>`∦`,NotElement:()=>`∉`,NotEqual:()=>`≠`,NotEqualTilde:(
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
.vitest/ui/assets/index-CYxBNAdm.js:30
`,nexist:`∄`,nexists:`∄`,Nfr:ky,nfr:Ay,ngE:jy,nge:`≱`,ngeq:`≱`,ngeqq:My,ngeqslant:Ny,nges:Py,nGg:Fy,ngsim:`≵`,nGt:Iy,ngt:`≯`,ngtr:`≯`,nGtv:Ly,nharr:`↮`,nhArr:`⇎`,nhpar:`⫲`,ni:`∋`,nis:`⋼`,nisd:`⋺`,niv:
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
.github/skills/mcp-gateway-configuration/SKILL.md:110
const API_KEY = "sk-hardcoded-key-12345";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
.github/skills/secrets-management/SKILL.md:27
const API_KEY = "sk_live_abc123def456";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
docs/api-markdown/_media/skills/mcp-gateway-configuration/SKILL.md:110
const API_KEY = "sk-hardcoded-key-12345";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
docs/api-markdown/_media/skills/secrets-management/SKILL.md:27
const API_KEY = "sk_live_abc123def456";
LOWInventory / provenance · inv.hidden_file · CWE-1104
.env.test
.env.test
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierrc.json
.prettierrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.sonarcloud.properties
.sonarcloud.properties
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
docs/.nojekyll
.nojekyll
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
docs/api/.nojekyll
.nojekyll
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/api-markdown/_media/contract.test.ts:33
import { OsintStandardOutputSchema } from '../../../src/schemas/europeanParliament.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/api-markdown/_media/contract.test.ts:40
vi.mock('../../../src/clients/europeanParliamentClient.js', () => ({
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/api-markdown/_media/contract.test.ts:57
vi.mock('../../../src/clients/ep/doceoClient.js', () => ({
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/api-markdown/_media/contract.test.ts:63
import * as epClientModule from '../../../src/clients/europeanParliamentClient.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/api-markdown/_media/contract.test.ts:64
import * as doceoClientModule from '../../../src/clients/ep/doceoClient.js';
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
src/clients/europeanParliamentClient.test.ts:5325
expect(() => validateApiUrl('https://127.0.0.1/api/')).toThrow(
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
src/clients/europeanParliamentClient.test.ts:5332
expect(() => validateApiUrl('https://127.0.0.2/api/')).toThrow(
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
src/clients/europeanParliamentClient.test.ts:5339
expect(() => validateApiUrl('https://127.1.2.3/api/')).toThrow(
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
src/clients/europeanParliamentClient.test.ts:5346
expect(() => validateApiUrl('https://169.254.0.1/api/')).toThrow(

Gates applied: instruction_override, no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 619eae3cfaf8full audit observations/trust-audit/mcp-server/hack23__european-parliament-mcp-server.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-12619eae3cfaf8BLOCKF50first audit
06

Questions

What is the european-parliament-mcp-server MCP server?

European Parliament MCP Server - Political intelligence for AI agents

What tools does european-parliament-mcp-server expose?

59 in total: 59 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is european-parliament-mcp-server safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (50/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does european-parliament-mcp-server need?

No credential environment variables were found in its source, so it appears to need none.

How does european-parliament-mcp-server run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as european-parliament-mcp-server at 1.4.62.

How current is this page?

The grade is for one exact copy of the source (619eae3cfaf8), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement