A Model Context Protocol (MCP) server for Jenkins CI/CD integration
Project description
Jenkins MCP Server
A comprehensive Model Context Protocol (MCP) server for Jenkins CI/CD integration, enabling AI assistants to interact with Jenkins instances through standardized tools and resources. Built for production environments with enterprise-grade reliability, security, and performance.
Developed by: CloudThat - AWS Premier Tier Services Partner
Author: Saurabh Kumar Jain (skj@cloudthat.com) - CSA - Projects Head, DevOps and Kubernetes
Repository: https://gitlab.cloudthat.com/cloudthat-oss/jenkins_mcp.git
PyPI Package: https://pypi.org/project/cloudthat.jenkins-mcp-server/
๐ฏ Overview
The Jenkins MCP Server bridges the gap between AI assistants and Jenkins automation servers, providing a standardized interface for:
- AI-Driven DevOps: Enable AI assistants to manage Jenkins pipelines, jobs, and builds
- Automated CI/CD Operations: Trigger builds, monitor status, and manage deployments through natural language
- Infrastructure as Code: Create and manage Jenkins resources programmatically
- Intelligent Monitoring: Get insights into build performance, system health, and resource utilization
This project represents CloudThat's innovation in the DevOps and cloud-native ecosystem, leveraging our expertise as an AWS Premier Tier Services Partner with competencies in Migration, DevOps, Data & Analytics, and GenAI.
๐ Quick Start
# Install from PyPI
pip install cloudthat.jenkins-mcp-server
# Run the server
jenkins-mcp-server --jenkins-url http://your-jenkins.com:8080 \
--jenkins-username your-username \
--jenkins-token your-api-token
โจ Features
๐ Fully Supported Core Features
- โ Creating pipeline jobs with basic configurations
- โ Creating freestyle jobs
- โ Creating folder jobs
- โ Triggering builds without parameters
- โ Triggering builds with parameters
- โ Retrieving build status and information
- โ Retrieving build logs with real-time streaming
- โ Viewing build queue and monitoring
- โ Getting comprehensive server information
- โ Creating pipelines with parameters
- โ Creating pipelines in folders
- โ Job listing and management
- โ Build analytics and performance metrics
๐ Comprehensive System Information
- โ Detailed version information (core version, LTS status)
- โ Complete plugin inventory with versions and update status
- โ System health indicators (disk space, memory usage, CPU load)
- โ JVM statistics and configuration details
- โ Node details (online status, executors, labels, load statistics)
- โ Security configuration and audit information
- โ Global configuration settings and environment
- โ Master/agent architecture information
- โ System environment variables and tool configurations
- โ Installed tools and their configurations
๐ง Advanced Pipeline Management
- โ Pipeline update functionality to modify existing pipelines
- โ Jenkinsfile validation before deployment
- โ Clone/copy functionality for pipelines with modifications
- โ Server-side validation integration
- โ Multi-branch pipeline support
- โ Pipeline as Code (Jenkinsfile) management
๐ Build Operations & Analytics
- โ Build abort functionality with graceful termination
- โ Real-time log streaming capabilities
- โ Build status monitoring with progress and stage information
- โ Build performance analytics (success rates, durations, failures)
- โ Bottleneck identification and optimization suggestions
- โ Historical build data analysis and trending
๐ฅ System Health & Security
- โ Health checks for pipelines (syntax issues, deprecated features)
- โ Credential audit functionality and security scanning
- โ Agent recommendation based on workload analysis
- โ Plugin ecosystem analysis and vulnerability detection
- โ Resource usage monitoring and optimization recommendations
- โ CSRF protection and secure API token handling
โก Performance & Reliability
- โ Intelligent Multi-tier Caching - Optimized performance with different TTL values
- โ HTTP Connection Pooling - Efficient resource management
- โ Automatic Retry Logic - Exponential backoff with circuit breaker pattern
- โ Comprehensive Error Handling - Graceful failure recovery
- โ Type Safety - Full Pydantic model validation throughout
- โ Production Logging - Structured logging with sensitive data masking
๐๏ธ Architecture
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ AI Assistant โโโโโบโ Jenkins MCP โโโโโบโ Jenkins Master โ
โ (Claude, etc) โ โ Server โ โ โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ โ
โ โผ
โผ โโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโ โ Jenkins Agents โ
โ FastMCP Protocol โ โ (Build Nodes) โ
โ - Tools โ โโโโโโโโโโโโโโโโโโโ
โ - Resources โ โ
โ - Prompts โ โผ
โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ Build Artifacts โ
โ & Deployments โ
โโโโโโโโโโโโโโโโโโโ
๐ Prerequisites
System Requirements
- Python: 3.10 or higher
- Operating System: Linux, macOS, or Windows
- Memory: Minimum 512MB RAM (1GB+ recommended)
- Network: HTTP/HTTPS access to Jenkins server
Jenkins Requirements
- Jenkins Version: 2.400+ (LTS recommended)
- Required Plugins:
- Pipeline Plugin (workflow-aggregator)
- Build Timeout Plugin (build-timeout)
- Timestamper Plugin (timestamper)
- Workspace Cleanup Plugin (ws-cleanup)
Authentication Requirements
- Jenkins user account with appropriate permissions
- API token (recommended) or username/password
- Required Jenkins permissions:
- Overall/Read
- Job/Build, Job/Cancel, Job/Read
- Job/Create, Job/Configure (for job creation)
- View/Read (for accessing views)
Network Requirements
- HTTP/HTTPS access to Jenkins server
- Port access (default: 8080 for Jenkins)
- SSL/TLS certificates (if using HTTPS)
๐ Installation
Method 1: Using pip (Recommended)
The easiest way to install the Jenkins MCP Server is from PyPI:
# Install from PyPI
pip install cloudthat.jenkins-mcp-server
# Run the server
jenkins-mcp-server --jenkins-url http://your-jenkins.com:8080 \
--jenkins-username your-username \
--jenkins-token your-api-token
Method 2: Using uvx
You can also use uvx to run without installing:
# Install and run directly from PyPI
uvx cloudthat.jenkins-mcp-server --jenkins-url http://your-jenkins.com:8080 \
--jenkins-username your-username \
--jenkins-token your-api-token
# Install from CloudThat GitLab repository
uvx --from git+https://gitlab.cloudthat.com/cloudthat-oss/jenkins_mcp.git jenkins-mcp-server
# Install from local directory
uvx --from /path/to/jenkins_mcp jenkins-mcp-server
Method 3: From CloudThat GitLab
# Clone the repository
git clone https://gitlab.cloudthat.com/cloudthat-oss/jenkins_mcp.git
cd jenkins_mcp
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install in development mode
pip install -e .
# Or install with all dependencies
pip install -e ".[dev,test]"
Method 4: Using Docker (Production Ready)
# Build the Docker image
docker build -t cloudthat/jenkins-mcp-server .
# Run with Docker
docker run --rm \
cloudthat/jenkins-mcp-server \
--jenkins-url http://your-jenkins.com:8080 \
--jenkins-username your-username \
--jenkins-token your-api-token
# Run as daemon
docker run -d \
--name jenkins-mcp-server \
--restart unless-stopped \
-e JENKINS_URL=http://your-jenkins.com:8080 \
-e JENKINS_USERNAME=your-username \
-e JENKINS_TOKEN=your-api-token \
cloudthat/jenkins-mcp-server \
--jenkins-url $JENKINS_URL \
--jenkins-username $JENKINS_USERNAME \
--jenkins-token $JENKINS_TOKEN
โ๏ธ Configuration
Environment Variables
# Required Configuration
JENKINS_URL=http://your-jenkins-server:8080
JENKINS_USERNAME=your-username
JENKINS_TOKEN=your-api-token
# Optional Configuration
JENKINS_TIMEOUT=30 # Request timeout in seconds
Getting Jenkins API Token
- Log into your Jenkins instance
- Go to Manage Jenkins โ Manage Users
- Click on your username โ Configure
- Under API Token, click Add new Token
- Generate and copy the token (store securely)
๐ Usage
Command Line Interface
# Using pip (recommended)
pip install cloudthat.jenkins-mcp-server
jenkins-mcp-server --jenkins-url http://localhost:8080 \
--jenkins-username your-username \
--jenkins-token your-token
# Using uvx
uvx cloudthat.jenkins-mcp-server --jenkins-url http://localhost:8080 \
--jenkins-username your-username \
--jenkins-token your-token \
--log-level DEBUG \
--timeout 60
# Show help
jenkins-mcp-server --help
# From source (development)
python -m jenkins_mcp_server --jenkins-url http://localhost:8080 \
--jenkins-username your-username \
--jenkins-token your-token
With AI Assistants
Amazon Q Developer CLI
Add to your MCP configuration:
{
"mcpServers": {
"jenkins": {
"command": "uvx",
"args": [
"cloudthat.jenkins-mcp-server",
"--jenkins-url", "http://your-jenkins.com",
"--jenkins-username", "your-username",
"--jenkins-token", "your-token"
]
}
}
}
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"jenkins": {
"command": "uvx",
"args": ["cloudthat.jenkins-mcp-server"],
"env": {
"JENKINS_URL": "http://your-jenkins.com",
"JENKINS_USERNAME": "your-username",
"JENKINS_TOKEN": "your-token"
}
}
}
}
Alternative: From Source (Development)
{
"mcpServers": {
"jenkins": {
"command": "python",
"args": ["-m", "jenkins_mcp_server"],
"env": {
"JENKINS_URL": "http://your-jenkins.com",
"JENKINS_USERNAME": "your-username",
"JENKINS_TOKEN": "your-token"
}
}
}
}
Available MCP Tools
| Tool | Description | Example Usage |
|---|---|---|
list_jenkins_jobs |
List jobs with filtering | List all jobs in "production" folder |
get_job_details |
Get detailed job information | Get details for "my-pipeline" job |
create_jenkins_job |
Create new jobs | Create a freestyle job with build steps |
trigger_jenkins_build |
Trigger builds with parameters | Trigger build with BRANCH=main |
get_build_status |
Get build status and info | Get status of build #42 |
get_build_logs |
Retrieve console logs | Get logs for latest build |
create_jenkins_pipeline |
Create pipeline jobs | Create pipeline with Jenkinsfile |
generate_pipeline_template |
Generate pipeline templates | Generate declarative pipeline template |
validate_pipeline_script |
Validate pipeline syntax | Validate Jenkinsfile before deployment |
manage_jenkins_builds |
Advanced build operations | Abort builds, stream logs, get analytics |
analyze_jenkins_system |
System health analysis | Comprehensive system health and security analysis |
update_jenkins_pipeline |
Update pipeline configurations | Update pipeline script and parameters |
get_jenkins_server_info |
Server status and information | Get Jenkins version and plugins |
get_jenkins_queue |
Build queue status | Check queued builds |
Example Interactions
# List all jobs
"Show me all Jenkins jobs"
# Create a new pipeline
"Create a pipeline called 'my-app-pipeline' that builds on push to main branch"
# Trigger a build with parameters
"Trigger a build for 'my-pipeline' with ENVIRONMENT=staging and DEPLOY=true"
# Get build status
"What's the status of the latest build for 'my-app'?"
# Check system health
"Show me Jenkins server information and current queue status"
# Generate a pipeline template
"Generate a declarative pipeline template for a Java application with build, test, and deploy stages"
# Validate pipeline script
"Can you validate this Jenkinsfile for syntax errors?"
# Manage builds
"Abort the currently running build of 'my-pipeline' and show me its logs"
# Analyze system
"Run a comprehensive system analysis and show me any security concerns"
# Stream build logs
"Stream the logs from the current build of 'my-pipeline' in real-time"
# Update pipeline with parameters
"Add a new parameter REGION to the 'my-pipeline' pipeline with default value 'us-west-2'"
๐ Project Structure
jenkins_mcp_server/
โโโ ๐ README.md # This file
โโโ ๐ CHANGELOG.md # Version history
โโโ ๐ CONTRIBUTING.md # Contribution guidelines
โโโ ๐ TESTING.md # Testing documentation
โโโ ๐ LICENSE # Proprietary license
โโโ โ๏ธ pyproject.toml # Project configuration
โโโ โ๏ธ pytest.ini # Test configuration
โโโ ๐ณ Dockerfile # Docker image definition
โโโ ๐ฆ jenkins_mcp_server/ # Main package
โ โโโ ๐ __init__.py # Package initialization
โ โโโ ๐ __main__.py # CLI entry point
โ โโโ ๐ server.py # FastMCP server implementation
โ โโโ ๐ models.py # Pydantic data models
โ โโโ ๐ exceptions.py # Custom exception classes
โ โโโ ๐ handlers/ # Request handlers
โ โ โโโ ๐ base_handler.py # Base handler with common functionality
โ โ โโโ ๐ system_handler.py # System information operations
โ โ โโโ ๐ job_handler.py # Job management operations
โ โ โโโ ๐ build_handler.py # Build management operations
โ โ โโโ ๐ pipeline_handler.py # Pipeline operations
โ โโโ ๐ utils/ # Utility modules
โ โโโ ๐ cache.py # Intelligent caching system
โ โโโ ๐ connection_pool.py # HTTP connection pooling
โ โโโ ๐ retry.py # Retry logic with backoff
โ โโโ ๐ validation.py # Input validation
โ โโโ ๐ logging_helper.py # Structured logging
โ โโโ ๐ error_reporting.py # Error handling utilities
โ โโโ ๐ pipeline_utils.py # Pipeline-specific utilities
โ โโโ ๐ path_utils.py # Path manipulation utilities
โโโ ๐ examples/ # Usage examples and documentation
โ โโโ ๐ README.md # Examples guide and overview
โ โโโ ๐ prompts/ # Natural language prompt examples
โ โ โโโ ๐ 01_supported_operations.md # Basic supported operations
โ โ โโโ ๐ 02_advanced_operations.md # Advanced Jenkins features
โ โ โโโ ๐ 03_intelligent_operations.md # AI-powered operations
โ โ โโโ ๐ 04_complex_scenarios.md # Enterprise-scale scenarios
โ โโโ ๐ integrations/ # AI assistant integration examples
โ โโโ ๐ 01_ai_assistant_integration.md # Integration patterns
โโโ ๐งช tests/ # Test suite
โโโ ๐งช conftest.py # Pytest configuration
โโโ ๐ unit/ # Unit tests
โ โโโ ๐งช test_handlers.py # Handler tests
โ โโโ ๐งช test_models.py # Model validation tests
โ โโโ ๐งช test_utils.py # Utility tests
โโโ ๐ integration/ # Integration tests
โโโ ๐งช test_server.py # Server integration tests
โโโ ๐งช test_jenkins.py # Jenkins integration tests
๐งช Testing
Running Tests
# Run all tests
pytest
# Run with coverage
pytest --cov=jenkins_mcp_server --cov-report=html
# Run specific test categories
pytest tests/unit/ # Unit tests only
pytest tests/integration/ # Integration tests only
# Run with verbose output
pytest -v
# Run tests in parallel
pytest -n auto
Test Strategy
- Unit Tests: Test individual components in isolation
- Integration Tests: Test end-to-end functionality with real Jenkins
- Mock Testing: Use mocks for external dependencies
- Coverage Target: 90%+ code coverage
- Performance Tests: Validate response times and resource usage
Test Configuration
Set test environment variables:
export JENKINS_TEST_URL=http://test-jenkins:8080
export JENKINS_TEST_USERNAME=test-user
export JENKINS_TEST_TOKEN=test-token
๐ณ Docker Support
Building Docker Image
# Build the image
docker build -t cloudthat/jenkins-mcp-server .
# Build with specific tag
docker build -t cloudthat/jenkins-mcp-server:v1.0.0 .
Running with Docker
# Run with environment variables
docker run -d \
--name jenkins-mcp \
-e JENKINS_URL=http://your-jenkins.com:8080 \
-e JENKINS_USERNAME=your-username \
-e JENKINS_TOKEN=your-api-token \
cloudthat/jenkins-mcp-server \
--jenkins-url $JENKINS_URL \
--jenkins-username $JENKINS_USERNAME \
--jenkins-token $JENKINS_TOKEN
# View logs
docker logs jenkins-mcp
# Stop container
docker stop jenkins-mcp
๐ง Troubleshooting
Common Issues
Connection Issues
# Error: Connection refused
# Solution: Check Jenkins URL and network connectivity
curl -I http://your-jenkins-server:8080
# Error: SSL certificate verification failed
# Solution: Disable SSL verification or add certificate
export JENKINS_VERIFY_SSL=false
Authentication Issues
# Error: 401 Unauthorized
# Solution: Verify username and API token
# Check token permissions in Jenkins user configuration
# Error: 403 Forbidden
# Solution: Ensure user has required Jenkins permissions
# Required: Overall/Read, Job/Build, Job/Read
Performance Issues
# Error: Slow response times
# Solution: Adjust cache settings and connection pool
export JENKINS_CACHE_TTL=600
export JENKINS_CONNECTION_POOL_SIZE=20
Log Locations
- Application Logs:
./logs/jenkins-mcp-server.log - Error Logs:
./logs/errors.log - Access Logs:
./logs/access.log
Debug Mode
# Enable debug logging
python -m jenkins_mcp_server --log-level DEBUG
# Enable verbose output
python -m jenkins_mcp_server --verbose
# Enable performance profiling
python -m jenkins_mcp_server --profile
๐ Security Considerations
Authentication & Authorization
- API Tokens: Use Jenkins API tokens instead of passwords
- Least Privilege: Grant minimum required permissions
- Token Rotation: Regularly rotate API tokens
- Secure Storage: Store credentials in environment variables or secure vaults
Required Jenkins Permissions
Overall:
- Read
Job:
- Build (for triggering builds)
- Cancel (for aborting builds)
- Configure (for creating/updating jobs)
- Create (for creating new jobs)
- Read (for viewing job details)
View:
- Read (for accessing views)
Agent:
- Build (if using specific agents)
Network Security
- HTTPS: Use HTTPS for Jenkins connections in production
- Firewall: Restrict network access to Jenkins server
- VPN: Use VPN for remote access to Jenkins
- Certificate Validation: Enable SSL certificate verification
Data Protection
- Credential Masking: Sensitive data is automatically masked in logs
- No Plain Text Storage: Credentials are not stored in plain text
- Audit Logging: All operations are logged for audit purposes
- Data Encryption: Use encrypted connections (HTTPS/TLS)
Compliance
- RBAC: Role-based access control through Jenkins permissions
- Audit Trail: Complete audit trail of all operations
- Security Scanning: Regular security scans of dependencies
- Vulnerability Management: Automated vulnerability detection and reporting
๐ค Contributing
We welcome contributions to this CloudThat project! Please see our Contributing Guidelines for details.
Development Setup
# Fork and clone the repository
git clone https://gitlab.cloudthat.com/cloudthat-oss/jenkins_mcp.git
cd jenkins_mcp
# Create development environment
python -m venv venv
source venv/bin/activate
# Install development dependencies
pip install -e ".[dev,test]"
# Install pre-commit hooks
pre-commit install
# Run tests
pytest
Pull Request Process
- Fork the repository on GitLab
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes with tests
- Ensure all tests pass (
pytest) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Merge Request on GitLab
Code Standards
- Code Style: Follow PEP 8 (enforced by
ruff) - Type Hints: Use type hints throughout
- Documentation: Update docstrings and documentation
- Tests: Add tests for new functionality
- Commit Messages: Use conventional commit format
๐ License
This project is proprietary software owned by CloudThat Technologies Pvt. Ltd.
Copyright (c) 2024 CloudThat Technologies Pvt. Ltd.
All rights reserved.
This software is proprietary and confidential. Unauthorized copying,
distribution, or use of this software, via any medium, is strictly
prohibited without the express written permission of CloudThat Technologies Pvt. Ltd.
For licensing inquiries, please contact: info@cloudthat.com
๐ข About CloudThat
CloudThat is a seasoned cloud consulting company headquartered in Bengaluru, established in 2012. CloudThat offers end-to-end cloud consulting services spanning cloud strategy, migration, modernization, DevOps, security, data analytics, AI/ML, and managed services.
As an AWS Premier Tier Services Partner, CloudThat has been recognized by AWS for its deep technical acumen and delivery excellence. We possess multiple AWS competenciesโincluding Migration, DevOps, Data & Analytics, and GenAIโwhich enable us to craft transformative, scalable, and cost-effective cloud-native solutions tailored to diverse industries.
Our Services
- Cloud Strategy & Migration: Comprehensive cloud adoption readiness assessments and secure, zero-downtime migration strategies
- DevOps & DevSecOps: Automated CI/CD pipelines, infrastructure as code, and integrated compliance
- Data & AI/ML: Scalable data lakes, real-time analytics platforms, and GenAI-powered solutions
- Security & Governance: AWS WellโArchitected Reviews, continuous compliance automation, and robust policy enforcement
- Managed Services: Optimize uptime, cost, and performance with ongoing excellence
- Contract Engineering: Boost internal teams with AWS-certified experts
Why CloudThat
CloudThat stands out as a trusted AWS Premier Tier Partner that delivers comprehensive, high-quality cloud consultingโfrom strategy through implementation to managed operations. Our strong technical foundation, validated by AWS recognition, equips enterprises to modernize with confidence and achieve measurable business outcomes.
Website: https://cloudthat.com
Contact: info@cloudthat.com
๐ Acknowledgements
Core Dependencies
- FastMCP - Modern MCP server framework
- python-jenkins - Jenkins API client
- Pydantic - Data validation and settings management
- httpx - Modern HTTP client
- click - Command line interface creation
Development Tools
- pytest - Testing framework
- ruff - Fast Python linter and formatter
- mypy - Static type checker
- pre-commit - Git hooks framework
Special Thanks
- Jenkins Community - For the amazing CI/CD platform
- MCP Protocol Team - For the standardized AI integration protocol
- Python Community - For the excellent ecosystem of tools and libraries
- AWS - For the comprehensive cloud platform and partnership
Developed with โค๏ธ by CloudThat - AWS Premier Tier Services Partner
Author: Saurabh Kumar Jain (skj@cloudthat.com) - CSA - Projects Head, DevOps and Kubernetes
Repository: https://gitlab.cloudthat.com/cloudthat-oss/jenkins_mcp.git
Support: For support and inquiries, please contact info@cloudthat.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cloudthat_jenkins_mcp_server-1.0.2.tar.gz.
File metadata
- Download URL: cloudthat_jenkins_mcp_server-1.0.2.tar.gz
- Upload date:
- Size: 164.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07c19d0b40686453183ed7a28d411fd559a1c32104109d2d31a609c14c2dfc6f
|
|
| MD5 |
bf90dcd47d206cd0bced096af336f4bc
|
|
| BLAKE2b-256 |
84d3cf68a2f39e22cd2388f7dd00f086269a1d997535d86d7f315da7d5d9ff0c
|
File details
Details for the file cloudthat_jenkins_mcp_server-1.0.2-py3-none-any.whl.
File metadata
- Download URL: cloudthat_jenkins_mcp_server-1.0.2-py3-none-any.whl
- Upload date:
- Size: 70.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d0a98ef2bd6ca07e990d908f0a5841212c731c31d95940425949db67ea0c7a2d
|
|
| MD5 |
2e452f28d3924d68a37bb7d19d75ad37
|
|
| BLAKE2b-256 |
c1fc0d4cc36e55d55404d33085b9c09d7a9bb33e8eb90a4ad3734857fbaba76b
|