@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.
- package/.dockerignore +60 -0
- package/.env.example +12 -0
- package/.env.production +16 -0
- package/CHANGELOG.md +45 -0
- package/Dockerfile +32 -0
- package/README.md +63 -2
- package/db/adapters/mysql.js +11 -4
- package/db/migrations/002_create_users_table.sql +22 -0
- package/db/migrations/003_create_workflow_history.sql +14 -0
- package/db/migrations/004_fix_workflow_history.sql +3 -0
- package/docker-compose.yml +24 -0
- package/docs/GCP_DEPLOYMENT.md +298 -0
- package/docs/product/PRD.md +5 -1
- package/docs/release-notes/RELEASE_NOTES.md +26 -0
- package/index.js +2 -0
- package/package.json +9 -3
- package/scripts/add-user.js +52 -0
- package/scripts/create-admin.js +47 -0
- package/scripts/deploy-gcloud.ps1 +160 -0
- package/scripts/deploy-gcloud.sh +154 -0
- package/tests/db-adapters.test.js +108 -0
- package/tests/env-support.test.js +46 -0
- package/tests/workflowState.test.js +16 -1
- package/web/__tests__/api/workflow-history.test.js +61 -0
- package/web/app/docs/page.tsx +1 -1
- package/web/app/history/page.tsx +213 -0
- package/web/app/layout.tsx +1 -1
- package/web/app/login/page.tsx +144 -0
- package/web/app/page.tsx +0 -2
- package/web/components/Hero.tsx +1 -1
- package/web/components/History.tsx +63 -16
- package/web/components/Navbar.tsx +111 -9
- package/web/lib/auth.js +75 -0
- package/web/middleware/auth.js +26 -0
- package/web/next.config.ts +4 -0
- package/web/package-lock.json +40 -40
- package/web/package.json +6 -5
- package/web/scripts/smoke-test.js +30 -0
- 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
|
package/.env.production
ADDED
|
@@ -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
|
|
206
|
+
### Database Setup
|
|
187
207
|
|
|
188
|
-
|
|
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
|
package/db/adapters/mysql.js
CHANGED
|
@@ -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
|
|
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()
|
|
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()
|
|
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,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/
|
package/docs/product/PRD.md
CHANGED
|
@@ -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.
|
|
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
|