03 Design Goals - samerfarida/mcp-ssh-orchestrator GitHub Wiki
3. Design Goals
Purpose: Define the core principles and philosophy that guide mcp-ssh-orchestrator's design decisions, ensuring security, usability, and maintainability.
Core Philosophy
mcp-ssh-orchestrator is built on the principle that AI agents should have safe, controlled access to infrastructure without compromising security or operational integrity. Every design decision prioritizes security while maintaining usability for legitimate operations.
Primary Design Goals
1. Security First
Principle: Security is not an afterthought—it's the foundation of every feature.
Implementation:
- Deny-by-default policy model
- Defense-in-depth security architecture
- Containerized execution with resource limits
- Comprehensive audit logging for all operations
- Network segmentation with IP allowlists
Example:
# Default policy: deny everything
rules: [] # No rules = deny all
# Explicit allow rules only
rules:
- action: "allow"
aliases: ["prod-*"]
commands: ["uptime*", "df -h*"]
2. Minimal Attack Surface
Principle: Reduce the potential for security vulnerabilities by minimizing exposed functionality.
Implementation:
- Single-purpose design (SSH command execution only)
- Minimal dependencies (Python standard library + SSH)
- No persistent state (stateless operation)
- Read-only configuration (no runtime modifications)
- Non-root execution (least privilege)
Example:
# Minimal base image
FROM python:3.13-slim
# Non-root user
RUN useradd -u 10001 -m appuser
USER appuser
# Read-only filesystem
VOLUME ["/app/config:ro", "/app/keys:ro"]
3. Policy-Driven Control
Principle: All access decisions are governed by explicit, auditable policies.
Implementation:
- YAML-based policy configuration
- Glob pattern matching for flexible rules
- Per-host and per-tag overrides
- Policy validation before execution
- Dry-run capability (
ssh_plan)
Example:
# Environment-specific policies
rules:
- action: "allow"
tags: ["production"]
commands: ["uptime*", "df -h*"]
- action: "allow"
tags: ["development"]
commands: ["systemctl restart *", "docker ps*"]
4. Observability & Auditability
Principle: Every operation must be observable, auditable, and traceable.
Implementation:
- JSON audit logs to stderr
- Structured logging with timestamps
- Command hashing for integrity
- Exit codes and durations for monitoring
- Target IP tracking for network analysis
Example:
{
"type": "audit",
"ts": 1729512345.67,
"alias": "prod-web-1",
"hash": "a1b2c3d4e5f6",
"exit_code": 0,
"duration_ms": 123,
"target_ip": "10.0.0.11"
}
5. Container-Native Design
Principle: Designed from the ground up for containerized deployment.
Implementation:
- Docker-first deployment model
- Health checks for monitoring
- Resource limits (CPU, memory)
- Non-root execution for security
- Secrets management via Docker secrets
Example:
# Docker Compose integration
services:
mcp-ssh:
image: ghcr.io/samerfarida/mcp-ssh-orchestrator:latest
volumes:
- ./config:/app/config:ro
- ./keys:/app/keys:ro
healthcheck:
test: ["CMD", "python", "-c", "import mcp_ssh"]
interval: 30s
timeout: 5s
retries: 3
Secondary Design Goals
6. Developer Experience
Principle: Make secure operations easy and intuitive.
Implementation:
- Clear error messages with actionable guidance
- Comprehensive documentation with examples
- Easy configuration with sensible defaults
- Quick start guides for common scenarios
- Troubleshooting guides for common issues
7. Operational Simplicity
Principle: Reduce operational complexity while maintaining security.
Implementation:
- Single binary deployment (Docker image)
- Configuration-driven behavior
- No external dependencies (databases, queues)
- Graceful error handling with proper exit codes
- Hot reload of configuration (
ssh_reload_config)
8. Security & Audit Ready
Principle: Security features that can support compliance and audit requirements.
Implementation:
- OWASP LLM07 mitigation (Insecure Plugin Design)
- MITRE ATT&CK aligned logging and monitoring
- Complete audit trails for all operations
- Immutable logs (append-only)
- Policy-based access control for security
- Dangerous command blocking for safety
Note: Audit logs can be integrated with your existing security tooling and SIEM systems for compliance monitoring.
Design Constraints
Security Constraints
-
No Persistent State
- No databases or file storage
- Configuration loaded at startup
- Stateless operation for security
-
No Network Egress
- No outbound connections (except SSH)
- No external API calls
- No telemetry or analytics
-
No Code Execution
- No dynamic code loading
- No plugin system
- No script execution
Operational Constraints
-
Single Purpose
- SSH command execution only
- No file transfer (scp/sftp)
- No interactive sessions
-
Resource Limits
- CPU and memory caps
- Output size limits
- Execution timeouts
-
Network Restrictions
- IP allowlists only
- No DNS resolution bypass
- No proxy support
Design Trade-offs
Security vs. Usability
Trade-off: Strict security policies may limit legitimate operations.
Resolution:
- Provide comprehensive policy examples
- Enable dry-run testing (
ssh_plan) - Support per-environment policies
- Clear documentation of restrictions
Performance vs. Security
Trade-off: Security checks add latency to command execution.
Resolution:
- Policy evaluation is fast (in-memory)
- SSH connection reuse where possible
- Minimal overhead logging
- Configurable timeouts
Flexibility vs. Simplicity
Trade-off: More configuration options increase complexity.
Resolution:
- Sensible defaults for common scenarios
- Progressive disclosure of advanced features
- Clear examples for different use cases
- Validation of configuration syntax
Implementation Principles
1. Fail Secure
Principle: When in doubt, deny access.
Implementation:
- Default policy is deny-all
- Invalid configurations fail closed
- Network errors prevent execution
- Timeouts terminate operations
2. Explicit Configuration
Principle: Nothing happens by accident.
Implementation:
- No implicit permissions
- Explicit allow rules required
- Clear policy documentation
- Validation of all inputs
3. Minimal Dependencies
Principle: Fewer dependencies = fewer vulnerabilities.
Implementation:
- Python standard library only
- SSH via paramiko (minimal)
- No external HTTP libraries
- No database dependencies
4. Immutable Configuration
Principle: Configuration changes require restart or explicit reload.
Implementation:
- No runtime configuration changes
ssh_reload_configfor updates- Validation before reload
- Clear error messages for invalid configs
Quality Attributes
Security Attributes
- Confidentiality: Encrypted SSH transport, no credential storage
- Integrity: Command hashing and audit trails
- Availability: Health checks, graceful degradation, resource limits
Operational Attributes
- Reliability: Graceful error handling, proper exit codes, timeout management
- Maintainability: Clear code structure, comprehensive tests, documentation
- Scalability: Stateless design, resource limits, efficient resource usage
Usability Attributes
- Learnability: Clear documentation, examples, quick start guides
- Efficiency: Fast policy evaluation, connection reuse, minimal overhead
- Satisfaction: Clear error messages, helpful troubleshooting, responsive design
Evolution Strategy
Backward Compatibility
Principle: Maintain compatibility across minor versions.
Implementation:
- Semantic versioning (SemVer)
- Deprecation warnings for old features
- Migration guides for breaking changes
- Configuration validation with helpful errors
Forward Compatibility
Principle: Keep the server adaptable to MCP protocol evolution without promising unbuilt features.
Implementation:
- MCP specification compliance
- Extensible policy engine
- Plugin-ready architecture (not yet implemented; tracked separately)
- API versioning support
Success Metrics
Security Objectives
- Policy enforcement for all operations
- Audit coverage for all command executions
- Zero privileged escalation in design
- Network controls enforced via IP allowlists
Performance Goals
- Fast policy evaluation (< 10ms typical)
- Efficient SSH connections with minimal overhead
- Resource-efficient single container deployment
- Responsive execution with configurable timeouts
Project Metrics
- Documentation completeness with examples for all features
- Code quality through testing and linting
- Community engagement through clear issue management
- Feature stability with backward compatibility
Next Steps
- Architecture - How these goals are implemented in the system design
- Security Model - Defense-in-depth security architecture
- Configuration - Policy-driven configuration system
- Contributing - How to contribute while maintaining these principles