@programinglive/dev-workflow-mcp-server 1.7.10 → 1.7.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/.dockerignore +60 -0
  2. package/.env.example +12 -0
  3. package/.env.production +16 -0
  4. package/CHANGELOG.md +45 -0
  5. package/Dockerfile +32 -0
  6. package/README.md +63 -2
  7. package/db/adapters/mysql.js +11 -4
  8. package/db/migrations/002_create_users_table.sql +22 -0
  9. package/db/migrations/003_create_workflow_history.sql +14 -0
  10. package/db/migrations/004_fix_workflow_history.sql +3 -0
  11. package/docker-compose.yml +24 -0
  12. package/docs/GCP_DEPLOYMENT.md +298 -0
  13. package/docs/product/PRD.md +5 -1
  14. package/docs/release-notes/RELEASE_NOTES.md +26 -0
  15. package/index.js +2 -0
  16. package/package.json +9 -3
  17. package/scripts/add-user.js +52 -0
  18. package/scripts/create-admin.js +47 -0
  19. package/scripts/deploy-gcloud.ps1 +160 -0
  20. package/scripts/deploy-gcloud.sh +154 -0
  21. package/tests/db-adapters.test.js +108 -0
  22. package/tests/env-support.test.js +46 -0
  23. package/tests/workflowState.test.js +16 -1
  24. package/web/__tests__/api/workflow-history.test.js +61 -0
  25. package/web/app/docs/page.tsx +1 -1
  26. package/web/app/history/page.tsx +213 -0
  27. package/web/app/layout.tsx +1 -1
  28. package/web/app/login/page.tsx +144 -0
  29. package/web/app/page.tsx +0 -2
  30. package/web/components/Hero.tsx +1 -1
  31. package/web/components/History.tsx +63 -16
  32. package/web/components/Navbar.tsx +111 -9
  33. package/web/lib/auth.js +75 -0
  34. package/web/middleware/auth.js +26 -0
  35. package/web/next.config.ts +4 -0
  36. package/web/package-lock.json +40 -40
  37. package/web/package.json +6 -5
  38. package/web/scripts/smoke-test.js +30 -0
  39. package/web/server.js +163 -18
package/.dockerignore ADDED
@@ -0,0 +1,60 @@
1
+ # Node modules - will be installed in container
2
+ node_modules
3
+ npm-debug.log
4
+ yarn-error.log
5
+
6
+ # Git files
7
+ .git
8
+ .gitignore
9
+ .gitattributes
10
+
11
+ # Environment files
12
+ .env
13
+ .env.local
14
+ .env.*.local
15
+
16
+ # Development files
17
+ *.log
18
+ *.pid
19
+ *.seed
20
+ *.pid.lock
21
+
22
+ # IDE files
23
+ .vscode
24
+ .idea
25
+ *.swp
26
+ *.swo
27
+ *~
28
+
29
+ # Test files
30
+ tests
31
+ *.test.js
32
+ coverage
33
+
34
+ # Documentation
35
+ docs
36
+ *.md
37
+ !README.md
38
+
39
+ # CI/CD
40
+ .github
41
+ .husky
42
+
43
+ # Build artifacts
44
+ dist
45
+ build
46
+ .cache
47
+
48
+ # OS files
49
+ .DS_Store
50
+ Thumbs.db
51
+
52
+ # Web frontend (if not needed in container)
53
+ web/node_modules
54
+ web/dist
55
+ web/.next
56
+
57
+ # Docker files
58
+ Dockerfile
59
+ docker-compose*.yml
60
+ .dockerignore
package/.env.example ADDED
@@ -0,0 +1,12 @@
1
+ # Database Configuration
2
+ # Supported types: sqlite, mysql, postgres
3
+ DEV_WORKFLOW_DB_TYPE=sqlite
4
+
5
+ # Connection URLs
6
+ # MySQL Example: mysql://user:password@localhost:3306/database
7
+ # Postgres Example: postgres://user:password@localhost:5432/database
8
+ # Postgres Docker Example: postgres://devworkflow:password@postgres:5432/devworkflow
9
+ DEV_WORKFLOW_DB_URL=
10
+
11
+ # Optional: Override user ID
12
+ # DEV_WORKFLOW_USER_ID=my-custom-user-id
@@ -0,0 +1,16 @@
1
+ # Production Environment Configuration for Docker Deployment
2
+ # Copy this file to .env on your GCP instance
3
+
4
+ # Database Configuration
5
+ DEV_WORKFLOW_DB_TYPE=postgres
6
+ DEV_WORKFLOW_DB_URL=postgres://devworkflow:YOUR_SECURE_PASSWORD_HERE@postgres:5432/devworkflow
7
+
8
+ # PostgreSQL Password (used by docker-compose)
9
+ # IMPORTANT: Change this to a secure password!
10
+ POSTGRES_PASSWORD=YOUR_SECURE_PASSWORD_HERE
11
+
12
+ # Optional: User ID for multi-user environments
13
+ # DEV_WORKFLOW_USER_ID=your-username
14
+
15
+ # Node Environment
16
+ NODE_ENV=production
package/CHANGELOG.md CHANGED
@@ -2,6 +2,51 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [1.7.12](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.7.11...v1.7.12) (2025-12-17)
6
+
7
+
8
+ ### 📝 Documentation
9
+
10
+ * post-release cleanup v1.7.11 ([c2ee733](https://github.com/programinglive/dev-workflow-mcp-server/commit/c2ee733bb9ec21e6ad39e564aa1fc315ca79cff6))
11
+
12
+
13
+ ### ✨ Features
14
+
15
+ * add authentication system with login page and protected routes ([2acb20e](https://github.com/programinglive/dev-workflow-mcp-server/commit/2acb20efb25cddb3d2b6ee80427310c3315582dc))
16
+ * add Docker deployment support with PostgreSQL for GCP ([3adb4cb](https://github.com/programinglive/dev-workflow-mcp-server/commit/3adb4cb9ace571faf7f2138634481362c24f2730))
17
+ * expose PostgreSQL port for remote access ([b1d4066](https://github.com/programinglive/dev-workflow-mcp-server/commit/b1d40665a1c01960184508d53c0bec0b5c051e4b))
18
+ * revamp history page UI and remove history from landing ([a9d0e4e](https://github.com/programinglive/dev-workflow-mcp-server/commit/a9d0e4e70b8aa5ed3457f661cb3dbdca2d8d2a30))
19
+ * simplify docker-compose to only PostgreSQL, improve logout button UI ([4530862](https://github.com/programinglive/dev-workflow-mcp-server/commit/4530862b33178d6391ee294f74ef222843f5d5a4))
20
+
21
+
22
+ ### 🐛 Bug Fixes
23
+
24
+ * suppress 401 auth errors in console ([b63e63b](https://github.com/programinglive/dev-workflow-mcp-server/commit/b63e63b60a4ba8236db1848a77d2f39f49e644b3))
25
+ * **web:** resolve 500 error on history API and auth sync ([88bbff0](https://github.com/programinglive/dev-workflow-mcp-server/commit/88bbff043f99e06a7b8ed9b9789d87d22e1f9035))
26
+
27
+
28
+ ### 🧹 Chores
29
+
30
+ * configure commitlint and husky via commiter setup ([4de6c84](https://github.com/programinglive/dev-workflow-mcp-server/commit/4de6c8400b6869503bee8407bb23266779133144))
31
+ * update website to v1.7.11 and fix dependencies ([da80b1c](https://github.com/programinglive/dev-workflow-mcp-server/commit/da80b1c9d5bdf10e1387d4b2d1e98b8d2fee5e92))
32
+
33
+ ### [1.7.11](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.7.10...v1.7.11) (2025-12-16)
34
+
35
+
36
+ ### 📝 Documentation
37
+
38
+ * fix version status in PRD ([fa7912b](https://github.com/programinglive/dev-workflow-mcp-server/commit/fa7912ba3354a88ce943fbc9a0f34f4bd1936e34))
39
+
40
+
41
+ ### ✨ Features
42
+
43
+ * implement .env support and fix mysql date persistence ([096797c](https://github.com/programinglive/dev-workflow-mcp-server/commit/096797c689813f44106a027cfa36e90d3da4bfb4))
44
+
45
+
46
+ ### ✅ Tests
47
+
48
+ * comprehensive DB adapter tests, env support, and warning fixes ([44814ff](https://github.com/programinglive/dev-workflow-mcp-server/commit/44814ffcc0a1efbc8e89948de22c3b196834b390))
49
+
5
50
  ### [1.7.10](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.7.9...v1.7.10) (2025-12-16)
6
51
 
7
52
 
package/Dockerfile ADDED
@@ -0,0 +1,32 @@
1
+ # Multi-stage build for dev-workflow MCP server
2
+ FROM node:20-alpine AS base
3
+
4
+ # Install build dependencies for native modules (better-sqlite3, pg)
5
+ RUN apk add --no-cache python3 make g++ postgresql-client
6
+
7
+ WORKDIR /app
8
+
9
+ # Copy package files
10
+ COPY package*.json ./
11
+
12
+ # Install dependencies (skip postinstall since we don't need state files at build time)
13
+ RUN npm ci --only=production --ignore-scripts
14
+
15
+ # Copy application code
16
+ COPY . .
17
+
18
+ # Create data directory for workflow state
19
+ RUN mkdir -p /app/data && \
20
+ chown -R node:node /app
21
+
22
+ # Switch to non-root user
23
+ USER node
24
+
25
+ # Set environment variables
26
+ ENV NODE_ENV=production
27
+ ENV DEV_WORKFLOW_DB_TYPE=postgres
28
+
29
+ # The MCP server runs on stdio, no port exposure needed
30
+ # Communication happens via stdin/stdout
31
+
32
+ CMD ["node", "index.js"]
package/README.md CHANGED
@@ -62,6 +62,26 @@ Plesk supports Node.js applications through its Node.js extension. To deploy the
62
62
 
63
63
  > **Important:** MCP clients (Windsurf, Claude Desktop, etc.) must launch the server process locally via stdio. Hosting the dashboard on a public domain does **not** expose the MCP interface. Without SSH or another way to execute `node index.js` on the server, users cannot connect their MCP clients to the hosted instance.
64
64
 
65
+ ### Option 4: Deploy with Docker on Google Cloud
66
+
67
+ Deploy the MCP server to Google Cloud Compute Engine using Docker and PostgreSQL for a production-ready, cloud-hosted setup.
68
+
69
+ **Quick Start:**
70
+ 1. SSH into your GCP instance
71
+ 2. Run the setup script: `bash scripts/setup-gcp-instance.sh`
72
+ 3. Clone the repository and configure `.env`
73
+ 4. Start containers: `docker-compose up -d`
74
+ 5. Update your local MCP client config to connect via SSH
75
+
76
+ **Benefits:**
77
+ - ✅ PostgreSQL database for robust data persistence
78
+ - ✅ Containerized deployment for consistency
79
+ - ✅ Remote access via SSH tunneling
80
+ - ✅ Easy updates and rollbacks
81
+
82
+ See the [GCP Deployment Guide](./docs/GCP_DEPLOYMENT.md) for complete step-by-step instructions.
83
+
84
+
65
85
  #### Two Usage Modes
66
86
 
67
87
  - **Local (source)**: Point your MCP client to `index.js`. This runs directly from source and requires no build step. Recommended for MCP usage.
@@ -183,9 +203,23 @@ See [Antigravity Getting Started](./docs/antigravity/GETTING-STARTED.md) for det
183
203
 
184
204
  ## ⚙️ Configuration
185
205
 
186
- ### Database Backend
206
+ ### Database Setup
187
207
 
188
- By default, the server uses a local **SQLite** database stored in `.state/dev-workflow.db`. You can switch to **MySQL** or **PostgreSQL** for centralized storage using environment variables.
208
+ The server supports **SQLite** (default), **MySQL**, and **PostgreSQL**.
209
+
210
+ #### Configuration via `.env`
211
+ 1. Copy `.env.example` to `.env`:
212
+ ```bash
213
+ cp .env.example .env
214
+ ```
215
+ 2. Edit `.env` with your settings:
216
+ ```ini
217
+ DEV_WORKFLOW_DB_TYPE=mysql
218
+ DEV_WORKFLOW_DB_URL=mysql://user:pass@localhost:3306/db
219
+ ```
220
+
221
+ #### Configuration via Environment Variables
222
+ Alternatively, export variables directly:.
189
223
 
190
224
  | Variable | Description | Default |
191
225
  |----------|-------------|---------|
@@ -252,6 +286,33 @@ Add the environment variable in your Windsurf MCP settings:
252
286
  ```
253
287
 
254
288
 
289
+
290
+ ### ✅ Testing
291
+
292
+ The project uses Node.js native test runner (`node --test`).
293
+
294
+ ```bash
295
+ npm test
296
+ ```
297
+
298
+ This runs:
299
+ - Unit tests for workflow logic
300
+ - Integration tests for `.env` configuration
301
+ - DB Adapter tests (SQLite always; MySQL/Postgres if configured)
302
+
303
+ #### Testing Database Adapters
304
+ To verify MySQL or PostgreSQL adapters, run tests with the environment variable set:
305
+
306
+ ```bash
307
+ # Test MySQL
308
+ export DEV_WORKFLOW_DB_URL="mysql://root:pass@localhost:3306/test_db"
309
+ node --test tests/db-adapters.test.js
310
+
311
+ # Test PostgreSQL
312
+ export DEV_WORKFLOW_DB_URL="postgres://postgres:pass@localhost:5432/test_db"
313
+ node --test tests/db-adapters.test.js
314
+ ```
315
+
255
316
  ### Scripts
256
317
 
257
318
  - `npm run build` - Bundle the source into `dist/index.mjs` for distribution
@@ -75,6 +75,13 @@ export class MysqlAdapter extends DbAdapter {
75
75
  }
76
76
  }
77
77
 
78
+ formatDate(date) {
79
+ // Ensure we have a string in 'YYYY-MM-DD HH:mm:ss' format
80
+ const d = date ? new Date(date) : new Date();
81
+ // slice(0, 19) gives YYYY-MM-DDTHH:mm:ss, then replace T with space
82
+ return d.toISOString().slice(0, 19).replace('T', ' ');
83
+ }
84
+
78
85
  async insertHistoryEntry(userId, projectPath, entry) {
79
86
  await this.connect();
80
87
  const normalizedProjectPath = projectPath || '';
@@ -98,7 +105,7 @@ export class MysqlAdapter extends DbAdapter {
98
105
  entry.taskDescription,
99
106
  entry.taskType,
100
107
  entry.commitMessage,
101
- entry.timestamp || new Date().toISOString(),
108
+ this.formatDate(entry.timestamp),
102
109
  entry.forced ? 1 : 0,
103
110
  entry.forceReason || null,
104
111
  entry.dropped ? 1 : 0,
@@ -150,9 +157,9 @@ export class MysqlAdapter extends DbAdapter {
150
157
  normalizedProjectPath,
151
158
  rows.length,
152
159
  JSON.stringify(taskTypes),
153
- lastActive,
160
+ this.formatDate(lastActive),
154
161
  JSON.stringify(recentTasks),
155
- new Date().toISOString()
162
+ this.formatDate(new Date())
156
163
  ]);
157
164
  }
158
165
 
@@ -270,7 +277,7 @@ export class MysqlAdapter extends DbAdapter {
270
277
  userId,
271
278
  normalizedProjectPath,
272
279
  JSON.stringify(state),
273
- new Date().toISOString()
280
+ this.formatDate(new Date())
274
281
  ]);
275
282
  }
276
283
 
@@ -0,0 +1,22 @@
1
+ -- Create users table for authentication
2
+ CREATE TABLE IF NOT EXISTS users (
3
+ id SERIAL PRIMARY KEY,
4
+ username VARCHAR(255) UNIQUE NOT NULL,
5
+ password_hash VARCHAR(255) NOT NULL,
6
+ email VARCHAR(255),
7
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
8
+ last_login TIMESTAMP
9
+ );
10
+
11
+ -- Create index on username for faster lookups
12
+ CREATE INDEX IF NOT EXISTS idx_users_username ON users(username);
13
+
14
+ -- Create sessions table for express-session
15
+ CREATE TABLE IF NOT EXISTS "session" (
16
+ "sid" varchar NOT NULL COLLATE "default",
17
+ "sess" json NOT NULL,
18
+ "expire" timestamp(6) NOT NULL,
19
+ CONSTRAINT "session_pkey" PRIMARY KEY ("sid")
20
+ );
21
+
22
+ CREATE INDEX IF NOT EXISTS "IDX_session_expire" ON "session" ("expire");
@@ -0,0 +1,14 @@
1
+ -- Create workflow_history table
2
+ CREATE TABLE IF NOT EXISTS workflow_history (
3
+ id SERIAL PRIMARY KEY,
4
+ task_type VARCHAR(50) NOT NULL,
5
+ description TEXT NOT NULL,
6
+ commit_message TEXT,
7
+ completed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
8
+ tests_passed BOOLEAN DEFAULT FALSE,
9
+ documentation_type VARCHAR(50),
10
+ user_id INTEGER REFERENCES users(id)
11
+ );
12
+
13
+ -- Create index on completed_at for faster sorting
14
+ CREATE INDEX IF NOT EXISTS idx_workflow_history_completed_at ON workflow_history(completed_at DESC);
@@ -0,0 +1,3 @@
1
+ -- Add missing columns for frontend compatibility
2
+ ALTER TABLE workflow_history ADD COLUMN IF NOT EXISTS tests_passed BOOLEAN DEFAULT FALSE;
3
+ ALTER TABLE workflow_history ADD COLUMN IF NOT EXISTS documentation_type VARCHAR(50);
@@ -0,0 +1,24 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ postgres:
5
+ image: postgres:16-alpine
6
+ container_name: dev-workflow-postgres
7
+ restart: unless-stopped
8
+ environment:
9
+ POSTGRES_USER: devworkflow
10
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-devworkflow_secure_password_change_me}
11
+ POSTGRES_DB: devworkflow
12
+ ports:
13
+ - "5432:5432"
14
+ volumes:
15
+ - postgres_data:/var/lib/postgresql/data
16
+ healthcheck:
17
+ test: [ "CMD-SHELL", "pg_isready -U devworkflow" ]
18
+ interval: 10s
19
+ timeout: 5s
20
+ retries: 5
21
+
22
+ volumes:
23
+ postgres_data:
24
+ driver: local
@@ -0,0 +1,298 @@
1
+ # Deploying to Google Cloud Platform with Docker
2
+
3
+ This guide walks you through deploying the dev-workflow MCP server to Google Cloud Compute Engine using Docker and PostgreSQL.
4
+
5
+ ## Prerequisites
6
+
7
+ - Google Cloud Platform account with a Compute Engine instance running
8
+ - SSH access to your GCP instance
9
+ - Git installed locally and on GCP instance
10
+ - Basic familiarity with Docker and SSH
11
+
12
+ ## Architecture Overview
13
+
14
+ The deployment consists of two Docker containers:
15
+ - **MCP Server**: Node.js application running the dev-workflow MCP server
16
+ - **PostgreSQL**: Database for persistent workflow state storage
17
+
18
+ Communication between your local MCP client and the cloud server happens via SSH tunneling.
19
+
20
+ ## Step 1: Prepare Your GCP Instance
21
+
22
+ ### 1.1 SSH into Your Instance
23
+
24
+ ```bash
25
+ ssh your-username@YOUR_GCP_IP
26
+ ```
27
+
28
+ ### 1.2 Run the Setup Script
29
+
30
+ From your local machine, copy the setup script to your GCP instance:
31
+
32
+ ```bash
33
+ scp scripts/setup-gcp-instance.sh your-username@YOUR_GCP_IP:~/
34
+ ssh your-username@YOUR_GCP_IP 'bash ~/setup-gcp-instance.sh'
35
+ ```
36
+
37
+ This script will:
38
+ - Install Docker and Docker Compose
39
+ - Install Git
40
+ - Create the application directory
41
+
42
+ **Note**: You may need to log out and back in for Docker group permissions to take effect.
43
+
44
+ ## Step 2: Deploy the Application
45
+
46
+ ### 2.1 Clone the Repository
47
+
48
+ On your GCP instance:
49
+
50
+ ```bash
51
+ cd ~/dev-workflow-mcp-server
52
+ git clone https://github.com/programinglive/dev-workflow-mcp-server.git .
53
+ ```
54
+
55
+ ### 2.2 Configure Environment Variables
56
+
57
+ Create a `.env` file from the production template:
58
+
59
+ ```bash
60
+ cp .env.production .env
61
+ nano .env
62
+ ```
63
+
64
+ Update the following values:
65
+ - `POSTGRES_PASSWORD`: Set a strong, unique password
66
+ - `DEV_WORKFLOW_DB_URL`: Update with the same password
67
+ - `DEV_WORKFLOW_USER_ID`: (Optional) Set your username
68
+
69
+ Example `.env`:
70
+ ```bash
71
+ DEV_WORKFLOW_DB_TYPE=postgres
72
+ DEV_WORKFLOW_DB_URL=postgres://devworkflow:MySecureP@ssw0rd@postgres:5432/devworkflow
73
+ POSTGRES_PASSWORD=MySecureP@ssw0rd
74
+ DEV_WORKFLOW_USER_ID=dhika
75
+ NODE_ENV=production
76
+ ```
77
+
78
+ ### 2.3 Start the Containers
79
+
80
+ ```bash
81
+ docker-compose up -d
82
+ ```
83
+
84
+ ### 2.4 Verify Deployment
85
+
86
+ Check that both containers are running:
87
+
88
+ ```bash
89
+ docker-compose ps
90
+ ```
91
+
92
+ You should see:
93
+ ```
94
+ NAME STATUS
95
+ dev-workflow-mcp Up
96
+ dev-workflow-postgres Up (healthy)
97
+ ```
98
+
99
+ View logs:
100
+ ```bash
101
+ docker-compose logs -f mcp-server
102
+ ```
103
+
104
+ ## Step 3: Configure Local MCP Client
105
+
106
+ Update your local MCP client configuration to connect via SSH.
107
+
108
+ ### Windows (Claude Desktop)
109
+
110
+ Edit `C:\Users\DHIKA\.gemini\antigravity\mcp_config.json`:
111
+
112
+ ```json
113
+ {
114
+ "mcpServers": {
115
+ "dev-workflow": {
116
+ "command": "ssh",
117
+ "args": [
118
+ "-i", "C:\\Users\\DHIKA\\.ssh\\id_rsa",
119
+ "your-username@34.50.121.142",
120
+ "docker", "exec", "-i", "dev-workflow-mcp", "node", "/app/index.js"
121
+ ]
122
+ }
123
+ }
124
+ }
125
+ ```
126
+
127
+ ### Linux/Mac
128
+
129
+ Edit your MCP config file:
130
+
131
+ ```json
132
+ {
133
+ "mcpServers": {
134
+ "dev-workflow": {
135
+ "command": "ssh",
136
+ "args": [
137
+ "-i", "/home/user/.ssh/id_rsa",
138
+ "your-username@34.50.121.142",
139
+ "docker", "exec", "-i", "dev-workflow-mcp", "node", "/app/index.js"
140
+ ]
141
+ }
142
+ }
143
+ }
144
+ ```
145
+
146
+ **Important**: Replace:
147
+ - `your-username` with your actual GCP username
148
+ - `34.50.121.142` with your actual GCP external IP
149
+ - SSH key path with your actual key location
150
+
151
+ ## Step 4: Test the Connection
152
+
153
+ ### 4.1 Test SSH Connection
154
+
155
+ From your local machine:
156
+
157
+ ```bash
158
+ ssh your-username@34.50.121.142 'docker exec -i dev-workflow-mcp node /app/index.js call get_workflow_status'
159
+ ```
160
+
161
+ You should see the workflow status output.
162
+
163
+ ### 4.2 Test via MCP Client
164
+
165
+ Restart your MCP client (e.g., Claude Desktop) and try using a dev-workflow command like `start_task`.
166
+
167
+ ## Updating the Deployment
168
+
169
+ ### Automated Deployment
170
+
171
+ Use the deployment script from your local machine:
172
+
173
+ ```bash
174
+ # Set environment variables
175
+ export GCP_USER=your-username
176
+ export GCP_HOST=34.50.121.142
177
+ export GCP_SSH_KEY=~/.ssh/id_rsa
178
+
179
+ # Run deployment
180
+ bash scripts/deploy-gcp.sh
181
+ ```
182
+
183
+ ### Manual Update
184
+
185
+ On your GCP instance:
186
+
187
+ ```bash
188
+ cd ~/dev-workflow-mcp-server
189
+ git pull origin main
190
+ docker-compose down
191
+ docker-compose build --no-cache
192
+ docker-compose up -d
193
+ ```
194
+
195
+ ## Database Management
196
+
197
+ ### Backup Database
198
+
199
+ ```bash
200
+ docker exec dev-workflow-postgres pg_dump -U devworkflow devworkflow > backup.sql
201
+ ```
202
+
203
+ ### Restore Database
204
+
205
+ ```bash
206
+ cat backup.sql | docker exec -i dev-workflow-postgres psql -U devworkflow devworkflow
207
+ ```
208
+
209
+ ### Access PostgreSQL Console
210
+
211
+ ```bash
212
+ docker exec -it dev-workflow-postgres psql -U devworkflow devworkflow
213
+ ```
214
+
215
+ Common commands:
216
+ - `\dt` - List tables
217
+ - `\d table_name` - Describe table
218
+ - `SELECT * FROM workflow_state;` - View workflow data
219
+
220
+ ## Troubleshooting
221
+
222
+ ### Container Won't Start
223
+
224
+ Check logs:
225
+ ```bash
226
+ docker-compose logs mcp-server
227
+ docker-compose logs postgres
228
+ ```
229
+
230
+ ### Database Connection Issues
231
+
232
+ Verify PostgreSQL is healthy:
233
+ ```bash
234
+ docker-compose ps
235
+ docker exec dev-workflow-postgres pg_isready -U devworkflow
236
+ ```
237
+
238
+ ### SSH Connection Fails
239
+
240
+ Test basic SSH:
241
+ ```bash
242
+ ssh -v your-username@YOUR_GCP_IP
243
+ ```
244
+
245
+ Check SSH key permissions:
246
+ ```bash
247
+ chmod 600 ~/.ssh/id_rsa
248
+ ```
249
+
250
+ ### MCP Client Can't Connect
251
+
252
+ 1. Verify SSH works: `ssh your-username@YOUR_GCP_IP 'echo test'`
253
+ 2. Test Docker exec: `ssh your-username@YOUR_GCP_IP 'docker ps'`
254
+ 3. Check MCP server: `ssh your-username@YOUR_GCP_IP 'docker logs dev-workflow-mcp'`
255
+
256
+ ## Security Best Practices
257
+
258
+ 1. **Change Default Passwords**: Always use strong, unique passwords in `.env`
259
+ 2. **Firewall Configuration**: Only expose necessary ports (SSH port 22)
260
+ 3. **SSH Key Authentication**: Disable password authentication, use SSH keys only
261
+ 4. **Regular Updates**: Keep Docker images and system packages updated
262
+ 5. **Backup Regularly**: Schedule automated database backups
263
+
264
+ ## Performance Optimization
265
+
266
+ ### Monitor Resource Usage
267
+
268
+ ```bash
269
+ docker stats
270
+ ```
271
+
272
+ ### Increase PostgreSQL Performance
273
+
274
+ Edit `docker-compose.yml` to add PostgreSQL tuning:
275
+
276
+ ```yaml
277
+ postgres:
278
+ environment:
279
+ POSTGRES_SHARED_BUFFERS: 256MB
280
+ POSTGRES_EFFECTIVE_CACHE_SIZE: 1GB
281
+ ```
282
+
283
+ ## Uninstalling
284
+
285
+ To completely remove the deployment:
286
+
287
+ ```bash
288
+ cd ~/dev-workflow-mcp-server
289
+ docker-compose down -v # -v removes volumes (deletes data!)
290
+ cd ~
291
+ rm -rf dev-workflow-mcp-server
292
+ ```
293
+
294
+ ## Support
295
+
296
+ For issues or questions:
297
+ - GitHub Issues: https://github.com/programinglive/dev-workflow-mcp-server/issues
298
+ - Documentation: https://devworkflow.programinglive.com/
@@ -4,7 +4,7 @@
4
4
  - **Product**: Development Workflow MCP Server
5
5
  - **Prepared by**: Cascade (AI assistant)
6
6
  - **Date**: 2025-12-16
7
- - **Status**: Live v1.6+
7
+ - **Status**: Live v1.7.11
8
8
 
9
9
  ## 2. Problem Statement
10
10
  Developers need structured guidance to maintain disciplined workflows across projects. Existing tooling lacks enforcement of sequential best practices (testing, documentation, release hygiene) and offers limited visibility into historical task execution.
@@ -38,6 +38,10 @@ Developers need structured guidance to maintain disciplined workflows across pro
38
38
  - Guard release commands to ensure prerequisites are satisfied.
39
39
  - Support `run_full_workflow` for scripted execution of all steps with validation.
40
40
  - Web dashboard displays version dynamically from `package.json` via `/api/version` endpoint to stay in sync after releases.
41
+ - [x] **Consolidated CI/CD**: Unified release and publish workflows.
42
+ - [x] **Multi-Database Support**: SQLite, MySQL, and PostgreSQL adapters implemented and verified.
43
+ - [x] **Environment Configuration**: `.env` file support added.
44
+ - [x] **Comprehensive Testing**: Automated tests for DB adapters and environment loading.
41
45
  - **Multi-Database Support**: Abstract the storage layer to support:
42
46
  - SQLite (default/local)
43
47
  - MySQL