mirror of
https://github.com/jmagar/unraid-mcp.git
synced 2026-03-01 16:04:24 -08:00
241 lines
7.8 KiB
Markdown
241 lines
7.8 KiB
Markdown
# Destructive Actions Inventory
|
|
|
|
This file lists all destructive actions across the unraid-mcp tools. Fill in the "Testing Strategy" column to specify how each should be tested in the mcporter integration test suite.
|
|
|
|
**Last Updated:** 2026-02-15
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
- **Total Destructive Actions:** 8 (after removing 4 array operations)
|
|
- **Tools with Destructive Actions:** 6
|
|
- **Environment Variable Gates:** 6 (one per tool)
|
|
|
|
---
|
|
|
|
## Destructive Actions by Tool
|
|
|
|
### 1. Docker (1 action)
|
|
|
|
| Action | Description | Risk Level | Env Var Gate | Testing Strategy |
|
|
|--------|-------------|------------|--------------|------------------|
|
|
| `remove` | Permanently delete a Docker container | **HIGH** - Data loss, irreversible | `UNRAID_ALLOW_DOCKER_DESTRUCTIVE` | **TODO: Specify testing approach** |
|
|
|
|
**Notes:**
|
|
- Container must be stopped first
|
|
- Removes container config and any non-volume data
|
|
- Cannot be undone
|
|
|
|
---
|
|
|
|
### 2. Virtual Machines (2 actions)
|
|
|
|
| Action | Description | Risk Level | Env Var Gate | Testing Strategy |
|
|
|--------|-------------|------------|--------------|------------------|
|
|
| `force_stop` | Forcefully power off a running VM (equivalent to pulling power cord) | **MEDIUM** - Severe but recoverable, risk of data corruption | `UNRAID_ALLOW_VM_DESTRUCTIVE` | **TODO: Specify testing approach** |
|
|
| `reset` | Hard reset a VM (power cycle without graceful shutdown) | **MEDIUM** - Severe but recoverable, risk of data corruption | `UNRAID_ALLOW_VM_DESTRUCTIVE` | **TODO: Specify testing approach** |
|
|
|
|
**Notes:**
|
|
- Both bypass graceful shutdown procedures
|
|
- May corrupt VM filesystem if used during write operations
|
|
- Use `stop` action instead for graceful shutdown
|
|
|
|
---
|
|
|
|
### 3. Notifications (2 actions)
|
|
|
|
| Action | Description | Risk Level | Env Var Gate | Testing Strategy |
|
|
|--------|-------------|------------|--------------|------------------|
|
|
| `delete` | Permanently delete a notification | **HIGH** - Data loss, irreversible | `UNRAID_ALLOW_NOTIFICATIONS_DESTRUCTIVE` | **TODO: Specify testing approach** |
|
|
| `delete_archived` | Permanently delete all archived notifications | **HIGH** - Bulk data loss, irreversible | `UNRAID_ALLOW_NOTIFICATIONS_DESTRUCTIVE` | **TODO: Specify testing approach** |
|
|
|
|
**Notes:**
|
|
- Cannot recover deleted notifications
|
|
- `delete_archived` affects ALL archived notifications (bulk operation)
|
|
|
|
---
|
|
|
|
### 4. Rclone (1 action)
|
|
|
|
| Action | Description | Risk Level | Env Var Gate | Testing Strategy |
|
|
|--------|-------------|------------|--------------|------------------|
|
|
| `delete_remote` | Permanently delete an rclone remote configuration | **HIGH** - Data loss, irreversible | `UNRAID_ALLOW_RCLONE_DESTRUCTIVE` | **TODO: Specify testing approach** |
|
|
|
|
**Notes:**
|
|
- Removes cloud storage connection configuration
|
|
- Does NOT delete data in the remote storage
|
|
- Must reconfigure remote from scratch if deleted
|
|
|
|
---
|
|
|
|
### 5. Users (1 action)
|
|
|
|
| Action | Description | Risk Level | Env Var Gate | Testing Strategy |
|
|
|--------|-------------|------------|--------------|------------------|
|
|
| `delete` | Permanently delete a user account | **HIGH** - Data loss, irreversible | `UNRAID_ALLOW_USERS_DESTRUCTIVE` | **TODO: Specify testing approach** |
|
|
|
|
**Notes:**
|
|
- Removes user account and permissions
|
|
- Cannot delete the root user
|
|
- User's data may remain but become orphaned
|
|
|
|
---
|
|
|
|
### 6. API Keys (1 action)
|
|
|
|
| Action | Description | Risk Level | Env Var Gate | Testing Strategy |
|
|
|--------|-------------|------------|--------------|------------------|
|
|
| `delete` | Permanently delete an API key | **HIGH** - Data loss, irreversible, breaks integrations | `UNRAID_ALLOW_KEYS_DESTRUCTIVE` | **TODO: Specify testing approach** |
|
|
|
|
**Notes:**
|
|
- Immediately revokes API key access
|
|
- Will break any integrations using the deleted key
|
|
- Cannot be undone - must create new key
|
|
|
|
---
|
|
|
|
## Removed Actions (No Longer Exposed)
|
|
|
|
These actions were previously marked as destructive but have been **removed** from the array tool per the implementation plan:
|
|
|
|
| Action | Former Risk Level | Reason for Removal |
|
|
|--------|-------------------|-------------------|
|
|
| `start` | CRITICAL | System-wide impact - should not be exposed via MCP |
|
|
| `stop` | CRITICAL | System-wide impact - should not be exposed via MCP |
|
|
| `shutdown` | CRITICAL | System-wide impact - could cause data loss |
|
|
| `reboot` | CRITICAL | System-wide impact - disrupts all services |
|
|
|
|
---
|
|
|
|
## Testing Strategy Options
|
|
|
|
Choose one of the following for each action in the "Testing Strategy" column:
|
|
|
|
### Option 1: Mock/Validation Only
|
|
- Test parameter validation
|
|
- Test `confirm=True` requirement
|
|
- Test env var gate requirement
|
|
- **DO NOT** execute the actual action
|
|
|
|
### Option 2: Dry-Run Testing
|
|
- Test with `confirm=false` to verify rejection
|
|
- Test without env var to verify gate
|
|
- **DO NOT** execute with both gates passed
|
|
|
|
### Option 3: Test Server Execution
|
|
- Execute on a dedicated test Unraid server (e.g., shart)
|
|
- Requires pre-created test resources (containers, VMs, notifications)
|
|
- Verify action succeeds and state changes as expected
|
|
- Clean up after test
|
|
|
|
### Option 4: Manual Test Checklist
|
|
- Document manual verification steps
|
|
- Do not automate in mcporter suite
|
|
- Requires human operator to execute and verify
|
|
|
|
### Option 5: Skip Testing
|
|
- Too dangerous to automate
|
|
- Rely on unit tests only
|
|
- Document why testing is skipped
|
|
|
|
---
|
|
|
|
## Example Testing Strategies
|
|
|
|
**Safe approach (recommended for most):**
|
|
```
|
|
Option 1: Mock/Validation Only
|
|
- Verify action requires UNRAID_ALLOW_DOCKER_DESTRUCTIVE=true
|
|
- Verify action requires confirm=True
|
|
- Do not execute actual deletion
|
|
```
|
|
|
|
**Comprehensive approach (for test server only):**
|
|
```
|
|
Option 3: Test Server Execution on 'shart'
|
|
- Create test container 'mcporter-test-container'
|
|
- Execute remove with gates enabled
|
|
- Verify container is deleted
|
|
- Clean up not needed (container already removed)
|
|
```
|
|
|
|
**Hybrid approach:**
|
|
```
|
|
Option 1 + Option 4: Mock validation + Manual checklist
|
|
- Automated: Test gate requirements
|
|
- Manual: Human operator verifies on test server
|
|
```
|
|
|
|
---
|
|
|
|
## Usage in mcporter Tests
|
|
|
|
Each tool test script will check the testing strategy:
|
|
|
|
```bash
|
|
# Example from test_docker.sh
|
|
test_remove_action() {
|
|
local strategy="TODO: Specify testing approach" # From this file
|
|
|
|
case "$strategy" in
|
|
*"Option 1"*|*"Mock"*)
|
|
# Mock/validation testing
|
|
test_remove_requires_env_var
|
|
test_remove_requires_confirm
|
|
;;
|
|
*"Option 3"*|*"Test Server"*)
|
|
# Real execution on test server
|
|
if [[ "$UNRAID_TEST_SERVER" != "unraid-shart" ]]; then
|
|
echo "SKIP: Destructive test only runs on test server"
|
|
return 2
|
|
fi
|
|
test_remove_real_execution
|
|
;;
|
|
*"Option 5"*|*"Skip"*)
|
|
echo "SKIP: Testing disabled for this action"
|
|
return 2
|
|
;;
|
|
esac
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Security Model
|
|
|
|
**Two-tier security for destructive actions:**
|
|
|
|
1. **Environment Variable Gate** (first line of defense)
|
|
- Must be explicitly enabled per tool
|
|
- Defaults to disabled (safe)
|
|
- Prevents accidental execution
|
|
|
|
2. **Runtime Confirmation** (second line of defense)
|
|
- Must pass `confirm=True` in each call
|
|
- Forces explicit acknowledgment per operation
|
|
- Cannot be cached or preset
|
|
|
|
**Both must pass for execution.**
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
1. **Fill in Testing Strategy column** for each action above
|
|
2. **Create test fixtures** if using Option 3 (test containers, VMs, etc.)
|
|
3. **Implement tool test scripts** following the specified strategies
|
|
4. **Document any special setup** required for destructive testing
|
|
|
|
---
|
|
|
|
## Questions to Consider
|
|
|
|
For each action, ask:
|
|
- Is this safe to automate on a test server?
|
|
- Do we have test fixtures/resources available?
|
|
- What cleanup is required after testing?
|
|
- What's the blast radius if something goes wrong?
|
|
- Can we verify the action worked without side effects?
|
|
|