Slowtime MCP Server

by bmorphism
Verified
# Slowtime MCP Server A Model Context Protocol server for secure time-based operations with timing attack protection and timelock encryption. ``` ┌──────────────┐ │ Claude │ │ Desktop │ └──────┬───────┘ │ ▼ ┌──────────────┐ ┌──────────────┐ │ Timelock │◄──────────────────►│ Slowtime │ │ Encryption │ │ MCP │ └──────────────┘ │ Server │ └──────┬───────┘ │ ▼ ┌──────────────┐ ┌──────────────┐ │ Timing │◄─────────────────►│ Interval │ │ Protection │ │ Manager │ └──────────────┘ └──────────────┘ ``` ## Features ### Time Fuzzing & Security ``` Input Time ──┐ ┌▼─────────────┐ │ Random Fuzz │ ┌─────────────┐ │ (100-5000ms) ├────►│ Jittered │ └─────────────┘ │ Timestamp │ └─────────────┘ ``` ### Timelock Encryption Flow ``` Data ───────┐ ┌▼────────────┐ ┌────────────┐ ┌────────────┐ │ Encrypt │ │ Interval │ │ League of │ │ with ├───►│ Duration ├───►│ Entropy │ │ Timelock │ │ Remaining │ │ Network │ └────────────┘ └────────────┘ └────────────┘ ``` ### Interval Management ``` [Start]──►[Active]──┐ ▲ │ │ ▼ [Resume] [Pause] │ ▲ ▼ │ [Paused] ``` ## Installation Add to your Claude Desktop config at `~/Library/Application Support/Claude/claude_desktop_config.json`: ```json { "mcpServers": { "slowtime": { "command": "node", "args": ["/path/to/slowtime-mcp-server/build/index.js"] } } } ``` ## Usage ### Basic Interval Commands ``` start_interval "Focus Time" 25 ───► [25min Interval Created] │ check_interval <id> ◄───────────────────┘ │ pause_interval <id> ◄───────────────────┘ │ resume_interval <id> ◄───────────────────┘ ``` ### Timelock Encryption ``` 1. Start Interval: "Focus Time" (25min) ──► [Interval ID: abc123] 2. Encrypt Data: "secret" + abc123 ──► [Timelock ID: xyz789] 3. Attempt Decrypt: - Before interval ends: "Not yet decryptable" - After interval ends: "secret" ``` ## Security Features ### Timing Attack Prevention ``` Operation ──┬──► Random Delay (100-5000ms) │ ├──► Jittered Timestamps │ └──► Constant-time Comparisons ``` ### Timelock Security & Storage ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Encrypt │ │ Distributed │ │ Timelock │ │ DuckDB │ │ Data ├───►│ Randomness ├───►│ Protected ├───►│ TimeVault │ │ │ │ Network │ │ Data │ │ Storage │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ ▲ │ ┌──────────────┘ ▼ │ ┌─────────────┴─┐ │ Analytics │ │ & Statistics │ └───────────────┘ ``` ### TimeVault Analytics ``` Query History ──┐ ├──► ┌─────────────┐ Filter Options ┘ │ DuckDB │ ┌─────────────┐ │ WASM ├───►│ Analytics │ Vault Stats ───────►│ Engine │ │ Results │ └─────────────┘ └─────────────┘ ``` ## Architecture The server consists of four main components: 1. **TimeFuzz**: Provides timing attack protection through: - Random duration fuzzing - Constant-time comparisons - Jittered timestamps - Random operation delays 2. **TimeKeeper**: Manages intervals with: - Creation/pause/resume operations - Progress tracking - Automatic cleanup - Fuzzing integration 3. **TimeLock**: Handles encryption with: - drand network integration - Interval-based decryption - Automatic cleanup - Secure random number generation 4. **TimeVault**: Provides persistent storage and analytics: - DuckDB WASM-based storage - Historical tracking of encrypted data - Analytics and statistics - Query capabilities with filtering ## TimeVault Commands Query historical data and statistics about encrypted timevaults: ``` # List vault history with filtering list_vault_history --interval_id=abc123 --decrypted_only=true --limit=10 # Get vault statistics get_vault_stats Example output: Total vaults: 150 Decrypted vaults: 75 Average decryption time: 45 seconds ``` ## Storage Schema The TimeVault uses DuckDB WASM for persistent storage with the following schema: ```sql CREATE TABLE timevaults ( id VARCHAR PRIMARY KEY, encrypted_data TEXT NOT NULL, round_number BIGINT NOT NULL, created_at TIMESTAMP NOT NULL, decrypted_at TIMESTAMP, interval_id VARCHAR NOT NULL, metadata JSON ); -- Indexes for efficient querying CREATE INDEX idx_interval_id ON timevaults(interval_id); CREATE INDEX idx_created_at ON timevaults(created_at); ``` ## Contributing 1. Fork the repository 2. Create your feature branch 3. Commit your changes 4. Push to the branch 5. Create a Pull Request ## License MIT License - see LICENSE file for details