Clean up and organize the flask-shopdb repository for better maintainability and discoverability: ## Changes - Update .gitignore for build artifacts (publish/, data/, 122M total) - Reorganize .claude/ into 6 subdirectories with README navigation - Consolidate overlapping MCP setup guides into MCP-QUICK-START.md - Move deployment docs from root to docs/deployment/ - Archive dated status reports to .claude/archived/ - Delete temporary files (logs, backups, empty reports, ~50K) ## New Structure .claude/ organized into: - setup/ - MCP, VM, Hyper-V, GitHub setup guides + scripts (17 files) - plans/ - Feature plans and protocols (5 files) - maintenance/ - Deployment checklists and reports (4 files) - archived/ - Historical documentation (9 files) - skills/ - Claude Code automation (5 files) - workflows/ - Security audit workflow (1 file) docs/deployment/ created with 6 deployment guides: - LOCAL-DEV-SETUP.md, DOCKER-SETUP.md, DOCKER-PREBUILT-APPROACH.md - PRODUCTION-READINESS.md, DEPLOY-TO-VM.md, README.md Root directory cleaned to essential docs only: - CLAUDE.md, README.md, CONTRIBUTING.md, CHANGELOG.md Benefits: - Clear navigation via README.md in each subdirectory - No duplicate/overlapping documentation - Large artifacts properly gitignored (won't bloat repository) - Historical context preserved in archived/ See .claude/CLEANUP-SUMMARY.md for complete details. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
17 KiB
MCP Server Integration Guide for ShopDB Development
Complete guide to using all four MCP servers together with Claude Code for automated development, testing, and deployment workflows.
Overview
MCP (Model Context Protocol) Servers extend Claude Code with external tool access:
| MCP Server | Purpose | Tools Provided |
|---|---|---|
| gortex | Project management | Task tracking, milestones, time tracking |
| mysql | Database access | Query execution, schema inspection, data manipulation |
| browser | Web automation | Page navigation, screenshots, form filling, testing |
| vm | VM automation via SSH | Command execution, file transfer, process management |
Together, these enable full-stack automated workflows: from code changes to database migrations to VM deployment to browser testing, all through natural language conversation with Claude.
Configuration
Location
All MCP servers are configured in:
flask-shopdb/.claude/mcp-servers.json
Important: MCP servers only load when Claude Code runs from flask-shopdb directory.
Current Configuration
{
"mcpServers": {
"gortex": {
"command": "C:\\Users\\270015376\\Documents\\gortex.exe",
"args": ["mcp"],
"cwd": "C:\\Users\\270015376\\Documents\\github\\flask-shopdb"
},
"mysql": {
"command": "npx",
"args": [
"-y",
"@benborla29/mcp-server-mysql",
"mysql://shopdb:shopdb-dev-password@127.0.0.1:3306/shopdb_flask"
]
},
"browser": {
"command": "npx",
"args": ["-y", "@agent-infra/mcp-server-browser"]
},
"vm": {
"command": "npx",
"args": [
"-y",
"ssh-mcp",
"--host", "192.168.100.10",
"--user", "SupportUser",
"--password", "vos313"
]
}
}
}
Prerequisites
1. Gortex MCP Server
Install:
curl -L -o gortex_windows_amd64.zip https://github.com/zzet/gortex/releases/latest/download/gortex_windows_amd64.zip
unzip -o gortex_windows_amd64.zip -d C:\Users\270015376\Documents\
Verify:
C:\Users\270015376\Documents\gortex.exe --version
What it enables:
- Track development tasks
- Log time spent on features
- Manage sprint milestones
- Generate reports
2. MySQL MCP Server
Install: (handled by npx, no manual install needed)
Requires: MySQL/Docker running locally
Start database:
cd flask-shopdb
docker compose up -d db
Verify:
mysql -h 127.0.0.1 -u shopdb -pshopdb-dev-password shopdb_flask -e "SELECT 1"
What it enables:
- Query database directly
- Inspect schema and indexes
- Verify migration results
- Create test data
- Debug data issues
3. Browser MCP Server
Install: (handled by npx, no manual install needed)
Requires: Chrome/Chromium browser installed
Verify:
npx -y @agent-infra/mcp-server-browser --help
What it enables:
- Automated UI testing
- Screenshot capture
- Form submission testing
- Visual regression checks
- End-to-end workflow testing
4. VM SSH MCP Server
Install: (handled by npx, no manual install needed)
Requires:
- Hyper-V VM running at 192.168.100.10
- OpenSSH server enabled on VM
- User account: SupportUser (password: vos313)
Setup VM SSH (run on VM as Administrator):
# On VM
.\\.claude\enable-vm-ssh.ps1
Verify from host:
ssh SupportUser@192.168.100.10 "hostname"
What it enables:
- Deploy agent to test VM
- Run commands on VM
- Transfer files to/from VM
- Monitor agent logs
- Test agent integration
Testing MCP Servers
Run Test Suite
cd flask-shopdb
.\\.claude\test-mcp-servers.ps1
Output:
==========================================
ShopDB MCP Server Test Suite
==========================================
[1/7] Checking MCP configuration...
OK: Config file exists
[2/7] Testing Gortex MCP server...
OK: Gortex found at C:\Users\270015376\Documents\gortex.exe
[3/7] Testing MySQL MCP server...
OK: MySQL server is reachable at 127.0.0.1:3306
[4/7] Testing Browser MCP server...
OK: Browser MCP package exists (version 1.2.3)
[5/7] Testing VM SSH MCP server...
OK: VM is reachable at 192.168.100.10
OK: SSH port 22 is open on VM
[6/7] Checking Hyper-V VMs...
OK: Found 1 VM(s)
- ShopDB-Test-VM: Running
[7/7] Checking VM snapshots...
OK: Found 4 snapshot(s)
- ShopDB-Test-VM: Clean-Install (2024-09-08 10:30)
- ShopDB-Test-VM: Docker-Ready (2024-09-08 11:45)
- ShopDB-Test-VM: SSH-Enabled (2024-09-08 12:15)
- ShopDB-Test-VM: ShopDB-Deployed (2024-09-09 09:00)
==========================================
Summary
==========================================
config : OK
gortex : OK
mysql : OK
browser : OK
vm : OK
hyperv : OK
snapshots : OK
Overall: 7/7 tests passed (100%)
Test Individual Servers with Claude
Start Claude Code from flask-shopdb:
cd flask-shopdb
claude
Test Gortex:
You: "List all tasks in the current project"
Claude: [Uses mcp__gortex__list_tasks]
Test MySQL:
You: "Show me the first 5 endpoints in the database"
Claude: [Uses mcp__mysql__query]
Test Browser:
You: "Take a screenshot of https://localhost:5001"
Claude: [Uses mcp__browser__navigate and mcp__browser__screenshot]
Test VM:
You: "What is the hostname of the VM?"
Claude: [Uses mcp__vm__exec with command "hostname"]
Integrated Workflows
Workflow 1: Feature Development with Database Changes
Scenario: Add new field to endpoints table, update API, test on VM
You: "Add 'last_boot_time' timestamp field to endpoints"
Claude:
1. [Gortex: Create task "Add last_boot_time field"]
2. [MySQL: Check current endpoints schema]
3. [Edit: Create Alembic migration]
4. [Bash: Run migration locally]
5. [MySQL: Verify column added]
6. [Edit: Update endpoint model and API]
7. [Bash: Run tests]
8. [Gortex: Update task status to "testing"]
9. [VM: Deploy to test VM]
10. [VM: Restart agent]
11. [MySQL: Check VM endpoint records include new field]
12. [Gortex: Mark task complete]
Result: Feature developed, tested, and verified end-to-end
Workflow 2: UI Testing After Plugin Changes
Scenario: Modified plugins UI, verify it works in browser
You: "Test the new notifications plugin UI"
Claude:
1. [Bash: Build frontend]
2. [Bash: Restart Docker stack]
3. [Browser: Navigate to https://localhost:5001]
4. [Browser: Login as admin]
5. [Browser: Click "Notifications" in sidebar]
6. [Browser: Screenshot current state]
7. [MySQL: Insert test fleet alert]
8. [Browser: Refresh page]
9. [Browser: Verify alert appears]
10. [Browser: Screenshot alert display]
11. [MySQL: Delete test data]
Result: UI tested, screenshots captured, test data cleaned up
Workflow 3: Agent Deployment and Integration Test
Scenario: Build new agent version, deploy to VM, verify it connects
You: "Build agent and deploy to VM for testing"
Claude:
1. [Gortex: Create task "Test agent v1.2.4"]
2. [Bash: Increment agent version in .csproj]
3. [Bash: dotnet publish agent]
4. [VM: Stop agent service if running]
5. [VM: Copy new agent.exe to C:\Program Files\ShopDB\]
6. [VM: Start agent service]
7. [VM: Tail agent log file]
8. [MySQL: Wait for endpoint heartbeat]
9. [MySQL: Verify endpoint version = 1.2.4]
10. [Browser: Navigate to endpoints page]
11. [Browser: Screenshot showing new version]
12. [Gortex: Mark task complete]
Result: Agent built, deployed, verified working
Workflow 4: Database Migration with Rollback Test
Scenario: Create migration, test forward and backward migration
You: "Create migration to add 'tags' JSONB column to assets"
Claude:
1. [MySQL: Backup current schema]
2. [Edit: Create migration file]
3. [Bash: Run migration (upgrade)]
4. [MySQL: Verify column exists with correct type]
5. [MySQL: Insert test data with tags]
6. [Bash: Rollback migration (downgrade)]
7. [MySQL: Verify column removed]
8. [MySQL: Verify no data loss in other columns]
9. [Bash: Re-run migration (upgrade)]
10. [MySQL: Verify clean forward migration]
Result: Migration tested both directions, safe to deploy
Workflow 5: End-to-End Operator Report Test
Scenario: Verify operator report flow from tray to database
You: "Test operator report submission from VM"
Claude:
1. [VM: Restore to "Agent-Running" snapshot]
2. [MySQL: Clear existing operator reports]
3. [VM: Get current timestamp]
4. [VM: Simulate tray submitting report via API]
5. [MySQL: Query for new report record]
6. [MySQL: Verify all fields populated correctly]
7. [Browser: Navigate to operator reports page]
8. [Browser: Verify report appears in UI]
9. [Browser: Screenshot report details]
10. [VM: Check agent log for submission confirmation]
Result: Operator report flow verified end-to-end
Workflow 6: Performance Testing and Monitoring
Scenario: Load test endpoints API, monitor database performance
You: "Load test the endpoints API with 1000 concurrent requests"
Claude:
1. [MySQL: Record current query performance stats]
2. [Bash: Run load test script]
3. [MySQL: Monitor slow query log during test]
4. [MySQL: Check connection pool usage]
5. [MySQL: Analyze query performance after test]
6. [MySQL: Identify slow queries]
7. [MySQL: Check index usage statistics]
8. [Gortex: Create tasks for performance improvements]
Result: Performance baseline established, bottlenecks identified
Advanced Patterns
Pattern 1: Snapshot-Based Testing
Use VM snapshots for rapid iteration:
You: "Test 3 different agent configurations"
Claude:
1. [VM: Restore to "Agent-Installed" snapshot]
2. [VM: Configure with settings A]
3. [VM: Test and record results]
4. [VM: Restore to "Agent-Installed" snapshot]
5. [VM: Configure with settings B]
6. [VM: Test and record results]
7. [VM: Restore to "Agent-Installed" snapshot]
8. [VM: Configure with settings C]
9. [VM: Test and record results]
10. [Compare results and recommend best config]
Pattern 2: Database-Driven UI Testing
Generate test data in database, verify UI displays it correctly:
You: "Test UI with various alert configurations"
Claude:
1. [MySQL: Create alert with priority=critical]
2. [Browser: Screenshot alert display]
3. [MySQL: Update alert to priority=info]
4. [Browser: Refresh and screenshot]
5. [MySQL: Create multi-line alert message]
6. [Browser: Screenshot message display]
7. [MySQL: Create alert with long title (100 chars)]
8. [Browser: Screenshot title truncation]
9. [MySQL: Delete all test alerts]
Pattern 3: Parallel Testing
Test on multiple environments simultaneously:
You: "Test new plugin on both local and VM"
Claude:
1. [Bash: Build frontend with new plugin]
2. [Bash: Restart local Docker stack]
3. [VM: Deploy to VM Docker stack]
4. [Parallel:]
a. [Browser: Test on localhost:5001]
b. [Browser: Test on 192.168.100.10:5001]
5. [Compare results]
6. [Screenshot differences if any]
Pattern 4: Automated Debugging
Use MCP tools to diagnose issues:
You: "Agent on VM is not receiving alerts, debug why"
Claude:
1. [VM: Check agent service status]
2. [VM: Check agent log for errors]
3. [MySQL: Verify alerts exist in database]
4. [MySQL: Check alert has target matching VM endpoint]
5. [VM: Check network connectivity to API]
6. [VM: Check agent config BaseUrl setting]
7. [MySQL: Check endpoint record has correct IP]
8. [VM: Test manual API call]
9. [Identify root cause and suggest fix]
Security Considerations
Database Credentials
In mcp-servers.json:
mysql://shopdb:shopdb-dev-password@127.0.0.1:3306/shopdb_flask
- Only for local development
- Database not exposed beyond localhost
- Not used in production
Production uses:
- Environment variables for credentials
- Restricted database users
- Encrypted connections
VM SSH Credentials
In mcp-servers.json:
"--password", "vos313"
- Test VM only, internal network (192.168.100.x)
- No internet access on VM
- VM destroyed/rebuilt regularly
- Not a production system
Better approach (optional):
- Use SSH key instead of password
- See
.claude/setup-vm-ssh.mdfor key-based auth
MCP Server Permissions
Claude Code permission prompts:
- First use of each MCP tool requires approval
- Approve dangerous operations (DELETE, DROP) individually
- Review SQL queries before execution
Configure auto-approval for safe operations:
Add to .claude/settings.json:
{
"permissions": {
"allow": [
"mcp__mysql__query(SELECT *)",
"mcp__vm__exec(hostname)",
"mcp__browser__screenshot(*)"
]
}
}
Troubleshooting
MCP Server Not Loading
Symptom: Claude says "I don't have access to {server}"
Fixes:
- Verify running Claude Code from
flask-shopdbdirectory - Check
.claude/mcp-servers.jsonexists - Restart Claude Code completely
- Run
test-mcp-servers.ps1to diagnose
MySQL Connection Failed
Symptom: "Cannot connect to MySQL server"
Fixes:
- Start database:
docker compose up -d db - Check port:
netstat -ano | findstr 3306 - Test connection:
mysql -h 127.0.0.1 -u shopdb -p - Check Docker network settings
VM SSH Connection Failed
Symptom: "SSH connection refused" or "Authentication failed"
Fixes:
- Verify VM running:
Get-VM | Where-Object State -eq 'Running' - Test ping:
ping 192.168.100.10 - Check SSH service on VM:
Get-Service sshd - Run
enable-vm-ssh.ps1on VM - Verify credentials:
ssh SupportUser@192.168.100.10
Browser Automation Failed
Symptom: "Browser launch failed" or "Navigation timeout"
Fixes:
- Check Chrome installed
- Close other Chrome instances
- Check no port conflicts
- Try manual command:
npx -y @agent-infra/mcp-server-browser
Gortex Not Found
Symptom: "Cannot find gortex.exe"
Fixes:
- Download: https://github.com/zzet/gortex/releases
- Extract to:
C:\Users\270015376\Documents\gortex.exe - Verify:
gortex.exe --version
Best Practices
1. Always Test MCP Setup First
Before starting work:
cd flask-shopdb
.\\.claude\test-mcp-servers.ps1
2. Use Snapshots for Risky Operations
Before destructive VM operations:
Checkpoint-VM -Name "ShopDB-Test-VM" -SnapshotName "Before-$(Get-Date -Format 'yyyyMMdd-HHmm')"
3. Clean Up Test Data
After testing with MySQL:
-- Delete test records created during testing
DELETE FROM fleetalerts WHERE title LIKE 'TEST:%';
DELETE FROM operatorreports WHERE submittedby = 'test-user';
4. Verify Results
Don't trust logs alone:
- Use MySQL to verify database changes
- Use Browser to verify UI changes
- Use VM commands to verify agent behavior
5. Keep MCP Config in Sync
When changing database password:
- Update
mcp-servers.json - Update
.envfiles - Update
docker-compose.ymlif needed
Quick Reference
Starting MCP-Enabled Session
cd C:\Users\270015376\Documents\github\flask-shopdb
claude
Common MCP Commands via Claude
| Task | Example Request |
|---|---|
| Query database | "Show me all endpoints that have not checked in for 24 hours" |
| Execute on VM | "Run 'Get-Service shopdb*' on the VM" |
| Screenshot UI | "Take a screenshot of the notifications page" |
| Create task | "Create a task to fix endpoint heartbeat bug" |
| Copy file to VM | "Upload the latest agent build to the VM" |
| Run migration | "Apply the pending database migration" |
| Test UI flow | "Test the login flow and capture screenshots" |
| Check logs | "Show me the agent log from the VM" |
Debugging MCP Issues
# Test each server individually
npx -y @benborla29/mcp-server-mysql --help
npx -y @agent-infra/mcp-server-browser --help
npx -y ssh-mcp --host 192.168.100.10 --user SupportUser --password vos313
C:\Users\270015376\Documents\gortex.exe mcp --help
# Check permissions
cat .claude/settings.json | grep -A 20 permissions
# Check MCP server logs
# (Claude Code shows MCP errors in transcript)
Related Documentation
- VM Snapshots:
.claude/VM-SNAPSHOT-GUIDE.md - VM SSH Setup:
.claude/setup-vm-ssh.md - Test MCP Servers:
.claude/test-mcp-servers.ps1 - VM Deployment:
DEPLOY-TO-VM.md - Plugin Development:
../shopdb-flask.wiki/PLUGIN-DEVELOPMENT.md
Next Steps
- Run test suite:
.\\.claude\test-mcp-servers.ps1 - Create baseline snapshots: See
VM-SNAPSHOT-GUIDE.md - Try example workflow: Pick one from "Integrated Workflows" section
- Document your workflows: Add custom patterns to this guide
- Automate repetitive tasks: Create aliases for common MCP operations
Ready to use all four MCP servers together for rapid development!