π‘οΈ Security Through Transparency and Excellence
π― Security-first API development with verifiable compliance
π Document Owner: CEO | π Version: 1.0 | π
Last Updated: 2026-02-26 (UTC)
π Review Cycle: Quarterly | β° Next Review: 2026-05-26
Current security state as of 2026-02-26:
| Metric | Status | Value |
|---|---|---|
| π§ͺ Test Suite | β Passing | 1396 tests across 54 test files (docs/test-results/results.json) |
| π npm audit | β Clean | 0 vulnerabilities |
| π License compliance | β Passing | All MIT/ISC/Apache-2.0 |
| ποΈ SLSA Level 3 | β Achieved | Cryptographic provenance on all releases |
| π SAST (CodeQL) | β Enabled | Automated on every PR and push |
| π Secret scanning | β Enabled | GitHub native secret detection |
| π¦ SBOM | β Published | SPDX + CycloneDX on every release |
| π Sigstore | β Enabled | npm package and GitHub release artifacts |
At Hack23 AB, we are committed to maintaining the highest standards of security in all our projects. The European Parliament MCP Server implements comprehensive security measures aligned with our Information Security Management System (ISMS), providing verifiable transparency and demonstrating security excellence for sensitive European Parliament data access.
This MCP server provides access to European Parliament datasets, including:
As such, this server implements enhanced security controls to ensure:
All security practices in this repository are governed by our publicly available ISMS policies:
| Policy | Purpose | Link |
|---|---|---|
| π Information Security Policy | Overarching security governance and principles | View Policy |
| π οΈ Secure Development Policy | SDLC, testing, deployment, and CI/CD requirements | View Policy |
| π¦ Open Source Policy | Open source usage, license compliance, supply chain security | View Policy |
| π·οΈ Data Classification Policy | Data sensitivity levels, handling requirements | View Policy |
| π Privacy Policy | Personal data protection, GDPR compliance | View Policy |
| π Access Control Policy | Authentication, authorization, identity management | View Policy |
This project is under active development, and we provide security updates for the latest version only. Please ensure you're using the latest version of the project to receive security updates.
| Version | Supported | Node.js Compatibility |
|---|---|---|
| latest | :white_check_mark: | Node.js 25.x |
This MCP server implements comprehensive security measures aligned with our Secure Development Policy and Open Source Policy:
π‘οΈ Static Analysis (SAST) - CodeQL scanning for vulnerabilities
π·οΈ Dynamic Analysis (DAST) - OWASP ZAP security testing
π Code Quality - ESLint with TypeScript rules
π OSSF Scorecard - Supply chain security assessment
π Dependency Review - Automated dependency vulnerability checks
π License Compliance - Automated license checking
π SBOM Generation - Software Bill of Materials in SPDX format
π SBOM Quality Validation - Automated quality scoring with SBOMQS
π·οΈ Pinned Dependencies - All GitHub Actions pinned to SHA hashes
.github/workflows/*.yml filesπ SLSA Provenance - Build attestations for artifact verification
gh attestation verify <artifact> --owner Hack23 --repo European-Parliament-MCP-Serverπ‘οΈ Immutable Releases - Release artifacts cannot be tampered with
π Artifact Signing - Cryptographic proof of build integrity
π¦ npm Provenance - Build transparency for npm packages
npm audit signaturesnpm audit signaturesβ Unit Testing - Comprehensive test coverage
π Integration Testing - API endpoint testing
π Security Testing - Dedicated security test suites
π Rate Limiting - Protection against abuse and DoS attacks
π‘οΈ Input Validation - Comprehensive request validation
π Authentication & Authorization - MCP protocol security
π Audit Logging - Comprehensive API access logging
π Runner Hardening - All CI/CD runners hardened with audit logging
π¨ Security Advisories - Private vulnerability disclosure
π GitHub Codespaces - Secure, hardened development environment
π€ GitHub Copilot - AI-assisted development with security guidelines
π Data Minimization - Only collect necessary European Parliament data
ποΈ Right to Erasure - Support for data deletion requests
AuditLogger.eraseByUser(userId, authToken) removes all in-memory entries for a data subject (GDPR Art. 17). Entries flushed to durable sinks must be erased separately via those sinks.π Data Protection by Design - Privacy-enhancing technologies
π GDPR Compliance Documentation
src/utils/auditLogger.ts + src/utils/auditSink.ts)ISMS Policy AU-002 (Audit Logging and Monitoring) β all MCP tool invocations and EP API data-access events are recorded in a structured, GDPR-compliant audit trail.
| Component | Description |
|---|---|
AuditLogger |
Central logger; writes to an always-on MemoryAuditSink plus zero or more extra sinks |
MemoryAuditSink |
In-process buffer; supports query(filter) and eraseByUser(userId) |
StderrAuditSink |
Default extra sink; emits [AUDIT] <json> to stderr (MCP-compatible) |
FileAuditSink |
Appends NDJSON to a file; rotates when the file reaches maxSizeBytes |
StructuredJsonSink |
Passes serialised JSON to a caller-supplied writer (CloudWatch, Elastic, β¦) |
RetentionPolicy |
Filters entries older than maxAgeMs on every getLogs() / queryLogs() call |
| Control | Mechanism |
|---|---|
| PII Protection | sanitizeParams() redacts top-level keys in DEFAULT_SENSITIVE_KEYS (name, email, fullName, address, firstName, lastName, phone) before any entry is stored |
| Access Control | requiredAuthToken constructor option gates getLogs(), queryLogs(), eraseByUser(), and clear() behind an authorization token; unauthorized calls throw immediately |
| Data Retention | retentionMs constructor option enforces a configurable maximum age; expired entries are excluded from all query results |
| Right to Erasure | eraseByUser(userId, authToken) removes all in-memory entries for a given data subject (GDPR Art. 17) |
| Append-only sinks | FileAuditSink appends using async fs.appendFile (append-only writes); MemoryAuditSink.clear() is publicly exposed but is intended to be used via AuditLogger.clear(), which enforces authorization via checkAuthorization |
| No stdout pollution | All sinks write to stderr or external systems; stdout is reserved for the MCP protocol |
import { AuditLogger, FileAuditSink } from 'european-parliament-mcp-server';
const requiredAuthToken = process.env['AUDIT_READ_TOKEN'];
if (!requiredAuthToken) {
throw new Error('AUDIT_READ_TOKEN environment variable must be set to enable secure audit log access.');
}
const logger = new AuditLogger({
// Persist to file with automatic log rotation at 50 MiB
sinks: [new FileAuditSink({ filePath: '/var/log/ep-mcp-audit.ndjson', maxSizeBytes: 50 * 1024 * 1024 })],
// Enforce 90-day data retention (GDPR Art. 5(1)(e))
retentionMs: 90 * 24 * 60 * 60 * 1000,
// Require an auth token to read or erase audit logs
requiredAuthToken,
// Extend the default set of redacted keys
sensitiveKeys: ['name', 'email', 'fullName', 'address', 'mepPrivateEmail'],
});
The audit logging subsystem is security-critical and maintains 100% statement, branch, function, and line coverage (src/utils/auditLogger.ts and src/utils/auditSink.ts).
We take the security of the European Parliament MCP Server project seriously. If you have found a potential security vulnerability, we kindly ask you to report it privately, so that we can assess and address the issue before it becomes publicly known.
Our vulnerability management process is governed by our Information Security Policy and follows industry best practices for responsible disclosure.
A vulnerability is a weakness or flaw in the project that can be exploited to compromise the security, integrity, or availability of the system or its data. Examples of vulnerabilities include, but are not limited to:
Please follow these steps to privately report a security vulnerability:
After you submit the report, the maintainers of the European-Parliament-MCP-Server repository will be notified. They will review the report, validate the vulnerability, and take necessary actions to address the issue. You will be added as a collaborator and credited for the security advisory.
Upon receipt of a vulnerability report, our team will:
We appreciate your effort in helping us maintain a secure and reliable project. If your report results in a confirmed security fix, we will recognize your contribution in the release notes and/or a public acknowledgment, unless you request to remain anonymous.
All security practices are governed by our publicly available ISMS:
π Document Control:
β
Approved by: James Pether SΓΆrling, CEO
π€ Distribution: Public
π·οΈ Classification:
π
Effective Date: 2026-02-26
β° Next Review: 2026-05-26
π― Framework Compliance:
Thank you for helping us keep the European Parliament MCP Server and its users safe.
Part of Hack23 AB's commitment to transparency and security excellence
Input Validation: All tool parameters validated with Zod schemas
Rate Limiting: 100 requests per 15 minutes per IP address
Output Sanitization: Error messages sanitized to prevent information disclosure
Threats Addressed:
π Complete security architecture β