BCPPlan.md

May 24, 2026 Β· View on GitHub

Hack23 Logo

πŸ”„ European Parliament MCP Server β€” Business Continuity Plan

πŸ›‘οΈ Classification-Driven Business Resilience Framework
🎯 Systematic Recovery Planning Through Enterprise-Grade Business Continuity

Owner Version Effective Date Review Cycle

πŸ“‹ Document Owner: CEO | πŸ“„ Version: 1.2 | πŸ“… Last Updated: 2026-04-21 (UTC)
πŸ”„ Review Cycle: Semi-Annual | ⏰ Next Review: 2026-10-21 | βœ… Status: Production Ready


πŸ“‘ Table of Contents


🎯 Purpose Statement

This Business Continuity Plan (BCP) establishes a classification-driven business resilience framework for the European Parliament MCP Server β€” a TypeScript/Node.js MCP server enabling AI assistants to access European Parliament open data. The plan demonstrates systematic recovery planning aligned with Hack23 AB's Information Security Management System (ISMS) and ensures that service delivery can be maintained or rapidly restored following any disruption.

πŸ” Transparency Commitment

This BCP is published as part of Hack23 AB's commitment to open source security transparency. By documenting continuity strategies publicly, we enable the community to understand our resilience posture and contribute to its improvement. This aligns with the Hack23 Open Source Policy.

πŸ“ Scope Definition

ComponentDescriptionContinuity Relevance
TypeScript/Node.js MCP ServerCore server runtime (src/)Primary service β€” must be recoverable from source control
npm Package DistributionPublished package european-parliament-mcp-serverUser-facing distribution channel β€” RTO < 1 hour
CI/CD PipelineGitHub Actions workflows with SLSA Level 3Build integrity and automated release β€” RTO < 4 hours
European Parliament APIExternal data source (data.europarl.europa.eu)Upstream dependency β€” graceful degradation required
GitHub Pages DocumentationPublic-facing documentation siteInformational β€” RTO < 24 hours
62 MCP Toolsget_meps, get_mep_details, get_plenary_sessions, assess_mep_influence, analyze_country_delegation, etc.Core functionality β€” must degrade gracefully per tool

🧠 BCP Structure Overview

mindmap
  root(("πŸ”„ Business<br/>Continuity Plan"))
    πŸ“Š Business Impact Analysis
      πŸ’° Financial Impact
      βš™οΈ Operational Impact
      πŸ›οΈ Reputational Impact
      πŸ“œ Regulatory Impact
    🎯 Recovery Objectives
      ⏱️ RTO Targets
      πŸ’Ύ RPO Targets
      πŸ”§ MTTR Targets
    πŸ—οΈ Infrastructure
      πŸ“¦ npm Registry
      πŸ™ GitHub Platform
      🌐 EP Open Data API
      🟒 Node.js Runtime
    🚨 Disruption Scenarios
      πŸ”Œ EP API Outage
      πŸ“¦ npm Registry Issues
      πŸ™ GitHub Outage
      πŸ›‘οΈ Dependency Vulnerability
    πŸ”§ Recovery Procedures
      πŸ“‹ Step-by-Step Runbooks
      πŸ§ͺ Validation Checklists
      πŸ“ž Communication Plans

πŸ“Š Business Impact Analysis

πŸ’° Financial Impact Assessment

Disruption TypeDurationFinancial ImpactSeverity
npm package unavailable< 1 hour🟒 Minimal β€” users use cached versionsLow
npm package unavailable1–24 hours🟑 Moderate β€” new installations blockedMedium
CI/CD pipeline failure< 4 hours🟒 Minimal β€” delayed releases onlyLow
CI/CD pipeline failure> 24 hours🟑 Moderate β€” security patches delayedMedium
EP API outageAny duration🟒 Minimal β€” open source, no SLA revenueLow
Supply chain compromiseAny durationπŸ”΄ Critical β€” trust and reputation damageCritical

βš™οΈ Operational Impact Assessment

Service ComponentUsers AffectedDegradation ModeMaximum Tolerable Downtime
npm packageAll new installationsCached versions available via npm mirror24 hours
MCP tool responsesActive AI assistant sessionsReturn cached data or informative error messages4 hours
GitHub source codeContributors and developersLocal clones available48 hours
CI/CD automationRelease pipelineManual build and publish fallback24 hours
Documentation siteNew users and integratorsREADME available in npm package72 hours

πŸ›οΈ Reputational Impact Assessment

ScenarioImpact LevelMitigation Strategy
Data integrity failure (serving incorrect EP data)πŸ”΄ CriticalZod schema validation, automated integration tests, data source verification
Supply chain attack (compromised npm package)πŸ”΄ CriticalSLSA Level 3 provenance, Sigstore signing, reproducible builds
Extended service unavailability🟑 ModerateStatus communication via GitHub Issues, graceful degradation
Security vulnerability disclosure🟑 ModerateResponsible disclosure process, rapid patching (< 72h for critical)

πŸ“œ Regulatory Impact Assessment

RegulationRequirementBCP Relevance
GDPRData protection, minimal personal data processingEnsure audit logs are recoverable; no personal data in caches
EU Cyber Resilience ActSoftware supply chain securitySLSA provenance, SBOM generation, vulnerability management
ISO 27001 A.17Information security continuityThis BCP document and regular testing
NIST CSF PR.IP-9Response and recovery plansRecovery procedures and testing schedule

🏷️ System Classification

πŸ“ CIA Triad Classification

Classification based on the Hack23 ISMS Classification Framework:

Confidentiality: Public Integrity: Moderate Availability: Standard

DimensionRatingJustification
πŸ”“ Confidentiality🟒 PublicAll data sourced from European Parliament open data portal; source code is open source (Apache-2.0 License)
πŸ”’ Integrity🟑 ModerateData accuracy is important for trust β€” incorrect parliamentary data undermines credibility, but it is not safety-critical
⏱️ AvailabilityπŸ”΅ StandardNo real-time SLA obligations; users can tolerate brief outages since AI assistants can retry or fall back

⏱️ Recovery Time and Point Objectives

Service ComponentRTO TargetRPO TargetRationale
npm package availability< 1 hour0 (immutable releases)Packages are immutable once published; recovery means republishing
CI/CD pipeline (GitHub Actions)< 4 hours< 1 hourSource code in Git; pipeline config is version-controlled
EP API accessN/A (external)N/AGraceful degradation β€” return cached data or meaningful error
Source code repository< 2 hours0 (distributed Git)Every contributor has a full clone; Git is inherently distributed
Documentation site< 24 hours< 1 hourStatic site; can be rebuilt from source in minutes

πŸ”„ Recovery Objectives

πŸ“Š Recovery Metrics Dashboard

graph LR
    subgraph "⏱️ Recovery Time Objectives (RTO)"
        RTO1["πŸ“¦ npm Package<br/>RTO: < 1 hour"]
        RTO2["πŸ”§ CI/CD Pipeline<br/>RTO: < 4 hours"]
        RTO3["πŸ“„ Documentation<br/>RTO: < 24 hours"]
        RTO4["πŸ’» Source Code<br/>RTO: < 2 hours"]
    end

    subgraph "πŸ’Ύ Recovery Point Objectives (RPO)"
        RPO1["πŸ“¦ npm Package<br/>RPO: 0 (immutable)"]
        RPO2["πŸ”§ CI/CD Pipeline<br/>RPO: < 1 hour"]
        RPO3["πŸ“„ Documentation<br/>RPO: < 1 hour"]
        RPO4["πŸ’» Source Code<br/>RPO: 0 (Git)"]
    end

    subgraph "πŸ”§ Mean Time to Repair (MTTR)"
        MTTR1["πŸ“¦ npm Republish<br/>MTTR: 30 min"]
        MTTR2["πŸ”§ Pipeline Fix<br/>MTTR: 2 hours"]
        MTTR3["🌐 EP API Fallback<br/>MTTR: 5 min"]
        MTTR4["πŸ›‘οΈ Vuln Patch<br/>MTTR: < 72 hours"]
    end

    RTO1 --> RPO1 --> MTTR1
    RTO2 --> RPO2 --> MTTR2
    RTO3 --> RPO3 --> MTTR3
    RTO4 --> RPO4 --> MTTR4

🎯 Detailed Recovery Targets

Metricnpm RegistryGitHub ActionsEP API AccessSource Code
RTO< 1 hour< 4 hoursN/A (external)< 2 hours
RPO0 (immutable)< 1 hourN/A0 (Git distributed)
MTTR30 minutes2 hours5 minutes (fallback)1 hour
MTBF> 8,760 hours> 2,190 hoursVariable (external)> 8,760 hours
Availability Target99.9%99.5%Best effort99.9%

πŸ”” Escalation Thresholds

LevelTriggerResponse TimeAction
🟒 L1 β€” InformationalService degradation detected< 1 hourMonitor and log; no immediate action needed
🟑 L2 β€” WarningSingle service component unavailable< 2 hoursActivate graceful degradation; notify maintainers
🟠 L3 β€” MajorMultiple components affected or CI/CD broken< 4 hoursActivate recovery procedures; status communication
πŸ”΄ L4 β€” CriticalSupply chain compromise or data integrity issue< 30 minutesImmediate incident response; package yanking if needed

πŸ“¦ Service Dependencies

πŸ—ΊοΈ Dependency Map

DependencyTypeCriticalityFallback Strategy
npm Registry (npmjs.com)Distribution🟠 HighUsers cache packages locally; mirror registries available
European Parliament API (data.europarl.europa.eu)Data Source🟑 MediumGraceful degradation with cached responses and error messages
GitHub (Source Code)Source Control🟠 HighDistributed Git clones; contributors have full repository copies
GitHub Actions (CI/CD)Automation🟑 MediumManual build and publish fallback via local npm scripts
GitHub Pages (Documentation)Documentation🟒 LowREADME in npm package; docs in source repository
Node.js Runtime (β‰₯ 26.x)Runtime🟒 LowPinned versions; current supported line (26.x Current/LTS candidate, upgraded from Node.js 25 on release). Starting with Node.js 27, new annual release model with every release becoming LTS (36-month support). See End-of-Life-Strategy.md
TypeScript CompilerBuild Tool🟑 MediumVersion-locked in package-lock.json; offline build possible
Zod (Validation)Library🟠 HighLocked version; no external runtime dependency
MCP SDK (@modelcontextprotocol/sdk)Protocol🟠 HighLocked version; protocol is standardized

πŸ”— External Service SLAs

ServicePublished SLAHistorical UptimeOur Dependency Level
npm Registry99.9%~99.95%Build-time and install-time only
GitHub99.9%~99.95%Source control, CI/CD, issue tracking
EP Open Data APINo published SLA~99%Runtime data source (degradation-tolerant)
GitHub Pages99.9%~99.99%Documentation hosting only

🚨 Disruption Scenarios

πŸ”Œ Scenario 1: European Parliament API Outage

AttributeDetail
Probability🟑 Medium (external service, no SLA guarantee)
Impact🟑 Medium (MCP tools return errors instead of data)
DetectionAutomated health checks; HTTP error responses from EP API
Affected ToolsAll 62 MCP tools (get_meps, get_plenary_sessions, assess_mep_influence, analyze_country_delegation, etc.)

πŸ›‘οΈ Graceful Degradation Strategy:

  1. Cache Layer: LRU cache with 15-minute TTL provides short-term resilience for repeated queries
  2. Informative Errors: Tools return structured error messages indicating EP API unavailability
  3. Partial Availability: Tools not requiring live EP data (e.g., cached legislative data) continue operating
  4. Status Communication: GitHub Issue created automatically for extended outages (> 1 hour)

πŸ“¦ Scenario 2: npm Registry Issues

AttributeDetail
Probability🟒 Low (npm has 99.9%+ uptime)
Impact🟑 Medium (new installations blocked)
DetectionFailed npm install commands; npm status page monitoring
Affected UsersNew installations and CI/CD pipelines pulling latest version

πŸ›‘οΈ Mitigation Strategy:

  1. Cached Packages: Existing node_modules and package-lock.json continue working
  2. Mirror Registries: Users can configure alternative npm mirrors (e.g., Verdaccio, GitHub Packages)
  3. Direct Install: Package can be installed directly from GitHub releases as a tarball
  4. Lockfile Resilience: package-lock.json ensures reproducible installs when registry recovers

πŸ™ Scenario 3: GitHub Platform Outage

AttributeDetail
Probability🟒 Low (GitHub has 99.9%+ uptime)
Impact🟠 High (source code, CI/CD, issues, and documentation affected)
DetectionGitHub status page; failed CI/CD runs; inability to push code
Affected ServicesSource control, CI/CD pipeline, issue tracking, documentation

πŸ›‘οΈ Mitigation Strategy:

  1. Distributed Git: Every contributor has a full clone of the repository with complete history
  2. Local Builds: Project can be built locally with npm run build without GitHub
  3. Manual Publishing: npm publish can be executed from any developer machine with credentials
  4. Alternative Hosting: Repository can be mirrored to GitLab or Bitbucket as a contingency

πŸ›‘οΈ Scenario 4: Critical Dependency Vulnerability

AttributeDetail
Probability🟑 Medium (supply chain attacks increasing industry-wide)
ImpactπŸ”΄ Critical (compromised package integrity)
DetectionDependabot alerts; Snyk scans; CodeQL analysis; OSSF Scorecard
Affected ComponentsDepends on the vulnerable dependency

πŸ›‘οΈ Response Strategy:

  1. Immediate Assessment: Evaluate CVE severity and exploitability within 30 minutes
  2. Patch or Pin: Update to patched version, or pin to last known-good version
  3. Emergency Release: Trigger expedited CI/CD pipeline for patch release
  4. Advisory Publication: Create GitHub Security Advisory for transparency
  5. SLSA Verification: Ensure patched release maintains SLSA Level 3 provenance

πŸ”§ Recovery Procedures

πŸ“‹ Procedure 1: npm Package Recovery

Trigger: npm package is unavailable, corrupted, or needs emergency replacement.

StepActionOwnerTime Estimate
1βœ… Verify the issue β€” confirm package is truly unavailable via npm view european-parliament-mcp-serverMaintainer2 min
2πŸ” Check npm status page at status.npmjs.org for platform-wide issuesMaintainer2 min
3πŸ—οΈ If package is corrupted: checkout latest release tag from GitMaintainer5 min
4πŸ”§ Build locally: npm ci && npm run build && npm run testMaintainer10 min
5πŸ“¦ Publish: npm publish (requires npm credentials with 2FA)Maintainer5 min
6βœ… Verify: npm install european-parliament-mcp-server@latest in a clean directoryMaintainer3 min
7πŸ“’ Communicate resolution via GitHub Issue or DiscussionMaintainer3 min

⏱️ Total Estimated Time: 30 minutes

πŸ“‹ Procedure 2: CI/CD Pipeline Recovery

Trigger: GitHub Actions workflows are failing or GitHub Actions is unavailable.

StepActionOwnerTime Estimate
1βœ… Check GitHub Actions status at githubstatus.comMaintainer2 min
2πŸ” Review recent workflow runs for error patternsMaintainer10 min
3πŸ”§ If configuration issue: fix workflow YAML and push to trigger re-runMaintainer15 min
4πŸ—οΈ If GitHub-wide issue: execute local build and test suiteMaintainer10 min
5πŸ“¦ If release is urgent: manual npm publish from local machineMaintainer10 min
6βœ… Verify pipeline recovery by pushing a test commitMaintainer5 min
7πŸ“ Document incident and update runbook if new failure modeMaintainer15 min

⏱️ Total Estimated Time: ~1 hour

πŸ“‹ Procedure 3: EP API Outage Response

Trigger: European Parliament Open Data API is unreachable or returning errors.

StepActionOwnerTime Estimate
1βœ… Verify API status: curl -s -o /dev/null -w "%{http_code}" https://data.europarl.europa.eu/api/v2/mepsMaintainer1 min
2πŸ” Check EP data portal for maintenance noticesMaintainer5 min
3πŸ›‘οΈ Confirm graceful degradation is active β€” MCP tools return informative errorsMaintainer5 min
4πŸ“’ If extended outage (> 1 hour): create GitHub Issue with status updateMaintainer5 min
5⏳ Monitor EP API for recovery at 30-minute intervalsMaintainerOngoing
6βœ… Once recovered: verify all 62 MCP tools return valid dataMaintainer10 min
7πŸ“ Close GitHub Issue with resolution summaryMaintainer5 min

⏱️ Total Estimated Time: 30 minutes (active work) + monitoring

πŸ“‹ Procedure 4: Dependency Vulnerability Response

Trigger: Dependabot alert, Snyk notification, or CVE disclosure for a dependency.

StepActionOwnerTime Estimate
1πŸ” Assess CVE severity (CVSS score) and exploitabilityMaintainer15 min
2πŸ“Š Determine if vulnerability affects production code pathsMaintainer30 min
3πŸ”§ Update dependency: npm update <package> or pin safe versionMaintainer10 min
4πŸ§ͺ Run full test suite: npm run test:coverageMaintainer10 min
5πŸ”’ Run security scans: CodeQL, license check, OSSF ScorecardCI/CD15 min
6πŸ“¦ Publish patched release via CI/CD pipelineCI/CD15 min
7πŸ“’ Create GitHub Security Advisory if user action neededMaintainer15 min

⏱️ Total Estimated Time: ~2 hours

🚨 SLA by Severity:

CVSS ScoreSeverityPatch SLA
9.0–10.0πŸ”΄ Critical< 24 hours
7.0–8.9🟠 High< 72 hours
4.0–6.9🟑 Medium< 30 days
0.1–3.9🟒 LowNext release cycle

πŸ“‹ Testing & Maintenance

πŸ§ͺ BCP Testing Schedule

Test TypeFrequencyDescriptionOwner
πŸ“‹ Document ReviewSemi-AnnualReview BCP for accuracy and completenessCEO
πŸ§ͺ Tabletop ExerciseAnnualWalk through disruption scenarios with teamCEO + Maintainers
πŸ”§ Recovery Drill β€” npmAnnualPractice manual npm publish from local machineMaintainer
πŸ”§ Recovery Drill β€” CI/CDSemi-AnnualTest local build fallback processMaintainer
πŸ›‘οΈ Dependency AuditMonthlyReview Dependabot alerts and dependency healthMaintainer
🌐 EP API Health CheckAutomated (daily)Verify EP API availability via integration testsCI/CD
πŸ“¦ Package Integrity CheckPer ReleaseVerify SLSA provenance and Sigstore signaturesCI/CD

πŸ“Š Testing Success Criteria

TestPass Criteria
npm Recovery DrillSuccessfully publish a test package from local machine within 30 minutes
CI/CD Recovery DrillSuccessfully build, test, and lint the project locally without GitHub Actions
EP API Degradation TestAll 62 MCP tools return structured error responses when EP API is mocked as unavailable
Dependency Vulnerability DrillSuccessfully patch a simulated vulnerable dependency and release within 2 hours

πŸ“ Maintenance Activities

ActivityFrequencyDescription
πŸ”„ BCP Document UpdateSemi-AnnualUpdate recovery procedures, contacts, and dependencies
πŸ“¦ Dependency Map ReviewQuarterlyUpdate service dependency inventory and SLA data
πŸ“Š Recovery Metrics ReviewQuarterlyReview actual RTO/RPO/MTTR against targets
πŸ”— Policy Alignment CheckAnnualVerify BCP alignment with ISMS policy updates
πŸ“’ Communication Plan UpdateAnnualUpdate escalation contacts and notification channels

πŸ”— Policy Alignment

πŸ“œ ISMS Policy Mapping

This BCP aligns with the following Hack23 AB ISMS policies:

ISMS PolicyBCP SectionAlignment
Backup & Recovery PolicyRecovery Procedures, Recovery Objectivesβœ… RPO/RTO targets defined; Git distributed backup for source code
Incident Response PlanDisruption Scenarios, Recovery Proceduresβœ… Escalation thresholds and response procedures documented
Open Source PolicyPurpose Statement, Transparencyβœ… BCP published as part of open source transparency commitment
Secure Development PolicyDependency Vulnerability Responseβœ… SLSA Level 3 provenance; supply chain security controls
Classification FrameworkSystem Classificationβœ… CIA triad classification drives recovery priority
Risk Management PolicyBusiness Impact Analysisβœ… Risk-based impact assessment for all disruption scenarios

πŸ“ Standards Compliance

StandardRequirementImplementation
ISO 27001 A.17.1Information security continuity planningThis BCP document with defined recovery procedures
ISO 27001 A.17.2RedundanciesDistributed Git, npm mirror fallback, local build capability
ISO 22301Business continuity managementBIA, recovery objectives, testing schedule
NIST CSF PR.IP-9Response plans and recovery plansRecovery procedures with step-by-step runbooks
NIST CSF RC.RP-1Recovery plan executionDocumented procedures with owner assignments
CIS Controls v8.1 #17Incident response managementEscalation thresholds and communication plans

DocumentDescriptionLink
Security ArchitectureDefense-in-depth implementation and security controlsSECURITY_ARCHITECTURE.md
Threat ModelSTRIDE threat analysis and risk assessmentTHREAT_MODEL.md
ArchitectureC4 model system architecture documentationARCHITECTURE.md
Security PolicyVulnerability disclosure and security practicesSECURITY.md
Performance TestingBenchmarks and performance analysisperformance-testing.md
End-of-Life StrategyTechnology lifecycle and Node.js transitionEnd-of-Life-Strategy.md
Financial Security PlanCost analysis and security investmentFinancialSecurityPlan.md
Deployment GuideProduction deployment and operationsDEPLOYMENT_GUIDE.md
TroubleshootingCommon issues and resolution stepsTROUBLESHOOTING.md
ContributingDevelopment workflow and contribution guidelinesCONTRIBUTING.md
CI/CD WorkflowsGitHub Actions automation documentationWORKFLOWS.md
Data ModelData structures and entity relationshipsDATA_MODEL.md
ISMS Public PoliciesHack23 AB Information Security Management SystemISMS-PUBLIC

πŸ“ Revision History

VersionDateAuthorChanges
1.02026-02-20CEOInitial BCP document β€” business impact analysis, recovery objectives, disruption scenarios, recovery procedures, testing schedule, and ISMS policy alignment
1.12026-03-12CEOUpdated Node.js runtime dependency note to reference new annual release model (Node.js 27+); cross-referenced End-of-Life-Strategy.md
1.22026-04-21CEODocumentation review β€” updated Node.js 26 upgrade timing to "this week" reflecting imminent release (β‰ˆ April 22, 2026); aligned references with End-of-Life-Strategy.md

This document is part of the Hack23 AB ISMS and is maintained under the European Parliament MCP Server project's documentation portfolio.