You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
Component
Description
Continuity Relevance
TypeScript/Node.js MCP Server
Core server runtime (src/)
Primary service — must be recoverable from source control
npm Package Distribution
Published package european-parliament-mcp-server
User-facing distribution channel — RTO < 1 hour
CI/CD Pipeline
GitHub Actions workflows with SLSA Level 3
Build integrity and automated release — RTO < 4 hours
All data sourced from European Parliament open data portal; source code is open source (Apache-2.0 License)
🔒 Integrity
🟡 Moderate
Data accuracy is important for trust — incorrect parliamentary data undermines credibility, but it is not safety-critical
⏱️ Availability
🔵 Standard
No real-time SLA obligations; users can tolerate brief outages since AI assistants can retry or fall back
⏱️ Recovery Time and Point Objectives
Service Component
RTO Target
RPO Target
Rationale
npm package availability
< 1 hour
0 (immutable releases)
Packages are immutable once published; recovery means republishing
CI/CD pipeline (GitHub Actions)
< 4 hours
< 1 hour
Source code in Git; pipeline config is version-controlled
EP API access
N/A (external)
N/A
Graceful degradation — return cached data or meaningful error
Source code repository
< 2 hours
0 (distributed Git)
Every contributor has a full clone; Git is inherently distributed
Documentation site
< 24 hours
< 1 hour
Static 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
Loading
🎯 Detailed Recovery Targets
Metric
npm Registry
GitHub Actions
EP API Access
Source Code
RTO
< 1 hour
< 4 hours
N/A (external)
< 2 hours
RPO
0 (immutable)
< 1 hour
N/A
0 (Git distributed)
MTTR
30 minutes
2 hours
5 minutes (fallback)
1 hour
MTBF
> 8,760 hours
> 2,190 hours
Variable (external)
> 8,760 hours
Availability Target
99.9%
99.5%
Best effort
99.9%
🔔 Escalation Thresholds
Level
Trigger
Response Time
Action
🟢 L1 — Informational
Service degradation detected
< 1 hour
Monitor and log; no immediate action needed
🟡 L2 — Warning
Single service component unavailable
< 2 hours
Activate graceful degradation; notify maintainers
🟠 L3 — Major
Multiple components affected or CI/CD broken
< 4 hours
Activate recovery procedures; status communication
🔴 L4 — Critical
Supply chain compromise or data integrity issue
< 30 minutes
Immediate incident response; package yanking if needed
📦 Service Dependencies
🗺️ Dependency Map
Dependency
Type
Criticality
Fallback Strategy
npm Registry (npmjs.com)
Distribution
🟠 High
Users cache packages locally; mirror registries available
European Parliament API (data.europarl.europa.eu)
Data Source
🟡 Medium
Graceful degradation with cached responses and error messages
GitHub (Source Code)
Source Control
🟠 High
Distributed Git clones; contributors have full repository copies
GitHub Actions (CI/CD)
Automation
🟡 Medium
Manual build and publish fallback via local npm scripts
GitHub Pages (Documentation)
Documentation
🟢 Low
README in npm package; docs in source repository
Node.js Runtime (≥ 26.x)
Runtime
🟢 Low
Pinned 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 Compiler
Build Tool
🟡 Medium
Version-locked in package-lock.json; offline build possible
Zod (Validation)
Library
🟠 High
Locked version; no external runtime dependency
MCP SDK (@modelcontextprotocol/sdk)
Protocol
🟠 High
Locked version; protocol is standardized
🔗 External Service SLAs
Service
Published SLA
Historical Uptime
Our Dependency Level
npm Registry
99.9%
~99.95%
Build-time and install-time only
GitHub
99.9%
~99.95%
Source control, CI/CD, issue tracking
EP Open Data API
No published SLA
~99%
Runtime data source (degradation-tolerant)
GitHub Pages
99.9%
~99.99%
Documentation hosting only
🚨 Disruption Scenarios
🔌 Scenario 1: European Parliament API Outage
Attribute
Detail
Probability
🟡 Medium (external service, no SLA guarantee)
Impact
🟡 Medium (MCP tools return errors instead of data)
Detection
Automated health checks; HTTP error responses from EP API
Affected Tools
All 62 MCP tools (get_meps, get_plenary_sessions, assess_mep_influence, analyze_country_delegation, etc.)
🛡️ Graceful Degradation Strategy:
Cache Layer: LRU cache with 15-minute TTL provides short-term resilience for repeated queries
Informative Errors: Tools return structured error messages indicating EP API unavailability
Partial Availability: Tools not requiring live EP data (e.g., cached legislative data) continue operating
Status Communication: GitHub Issue created automatically for extended outages (> 1 hour)
📦 Scenario 2: npm Registry Issues
Attribute
Detail
Probability
🟢 Low (npm has 99.9%+ uptime)
Impact
🟡 Medium (new installations blocked)
Detection
Failed npm install commands; npm status page monitoring
Affected Users
New installations and CI/CD pipelines pulling latest version
🛡️ Mitigation Strategy:
Cached Packages: Existing node_modules and package-lock.json continue working
Mirror Registries: Users can configure alternative npm mirrors (e.g., Verdaccio, GitHub Packages)
Direct Install: Package can be installed directly from GitHub releases as a tarball
Lockfile Resilience: package-lock.json ensures reproducible installs when registry recovers
🐙 Scenario 3: GitHub Platform Outage
Attribute
Detail
Probability
🟢 Low (GitHub has 99.9%+ uptime)
Impact
🟠 High (source code, CI/CD, issues, and documentation affected)
Detection
GitHub status page; failed CI/CD runs; inability to push code