@mhdd_24/flyway-mcp
by Mhdd-24
README.md
# @mhdd_24/flyway-mcp
MCP server that runs **Flyway repair + migrate** across multiple database projects for **QA** or **Development** environments. Use it from [Cursor](https://cursor.com), Claude Desktop, VS Code Copilot, or any MCP-compatible client.
Say **"QA Flyway Migration"** or **"Dev Flyway Migration"** in chat — the assistant calls the matching tool automatically.
**Full documentation:** [docs/WIKI.md](./docs/WIKI.md)
---
## How it works (30 seconds)
```
You (chat) → MCP client → flyway-mcp → discover projects under FLYWAY_ROOT
→ flyway repair + migrate (per project)
→ auto-remediate common errors → retry
```
1. **Discovery** — finds subfolders with `flyway.toml` and `flyway_qa.toml` / `flyway_dev.toml`
2. **Repair** — fixes schema history checksums before migrate
3. **Migrate** — applies pending migrations per environment config
4. **Remediation** — on failure, attempts automatic fixes (duplicate versions, placeholders, missing tables) and retries
---
## Prerequisites
| Requirement | Notes |
|-------------|--------|
| **Node.js 18+** | Required for MCP server |
| **Flyway CLI** | On PATH (`flyway -v` works) |
| **Java** | Required by Flyway |
| **FLYWAY_ROOT** | Path to folder containing your Flyway project directories |
### Expected project layout
Each project is a subfolder under `FLYWAY_ROOT`:
```
flyway-projects/
├── service-a-db/
│ ├── flyway.toml
│ ├── flyway_qa.toml
│ ├── flyway_dev.toml
│ └── migrations/
└── service-b-db/
├── flyway.toml
└── migrations/
```
---
## Install
### Option A — npm (recommended)
```bash
npm install -g @mhdd_24/flyway-mcp
```
### Option B — npx (no global install)
```bash
npx @mhdd_24/flyway-mcp
```
### Option C — clone and build (contributors)
```bash
git clone https://github.com/Mhdd-24/Flyway-MCP.git
cd Flyway-MCP
npm install
npm run build
node dist/index.js
```
---
## Configure your MCP client
### Cursor
Edit **Cursor Settings → MCP** or `~/.cursor/mcp.json`:
```json
{
"mcpServers": {
"flyway": {
"command": "npx",
"args": ["-y", "@mhdd_24/flyway-mcp"],
"env": {
"FLYWAY_ROOT": "/path/to/your/flyway-projects",
"FLYWAY_CLI": "flyway",
"FLYWAY_MAX_RETRIES": "3"
}
}
}
}
```
**After global install:**
```json
"command": "flyway-mcp"
```
**Local development:**
```json
"command": "node",
"args": ["C:/path/to/flyway-mcp/dist/index.js"]
```
Restart Cursor after saving.
### Optional: limit projects
```json
"FLYWAY_PROJECTS": "service-a-db,service-b-db"
```
---
## Environment variables
| Variable | Required | Default | Purpose |
|----------|----------|---------|---------|
| `FLYWAY_ROOT` | Yes | — | Root folder containing Flyway project directories |
| `FLYWAY_CLI` | No | `flyway` | Flyway executable name or path |
| `FLYWAY_PROJECTS` | No | all | Comma-separated project folder names to include |
| `FLYWAY_MAX_RETRIES` | No | `3` | Repair/migrate/fix retry cycles per project |
**Never commit** database credentials. Keep connection strings in `flyway_qa.toml` / `flyway_dev.toml` inside each project (not in MCP env).
---
## Tools
| Tool | Trigger phrase | Purpose |
|------|----------------|---------|
| `list_flyway_projects` | List flyway projects | Shows discovered projects and QA/Dev config availability |
| `qa_flyway_migration` | **QA Flyway Migration** | `repair` + `migrate` using `flyway_qa.toml` |
| `dev_flyway_migration` | **Dev Flyway Migration** | `repair` + `migrate` using `flyway_dev.toml` |
### Optional parameters
| Parameter | Applies to | Description |
|-----------|------------|-------------|
| `projects` | migration tools | Array of project folder names (default: all discovered) |
---
## Usage
### List projects
> List flyway projects
### QA migration (all projects)
> QA Flyway Migration
### Dev migration (single project)
> Dev Flyway Migration for service-a-db
---
## Automatic remediation
On migration failure, the server may automatically:
| Error | Fix |
|-------|-----|
| Duplicate migration version | Renames duplicate files to next available version |
| Checksum mismatch | Runs `repair` and retries |
| JS placeholder (`${dbName}`) | Removes/replaces Flyway placeholder tokens |
| Missing table (`relation does not exist`) | Wraps table block in conditional `to_regclass` check |
Some errors (e.g. missing database plugins) cannot be auto-fixed and are reported in the summary.
---
## Troubleshooting
| Problem | Fix |
|---------|-----|
| `FLYWAY_ROOT is not set` | Set `FLYWAY_ROOT` in MCP `env` |
| `Invalid flag: -configFiles` (Windows) | Upgrade to `@mhdd_24/flyway-mcp@1.0.1`+ |
| `No Flyway projects found` | Ensure subfolders contain `flyway.toml` |
| `No Flyway database plugin` | Install the Flyway plugin for that database type |
| Stale version after publish | Restart MCP; `npx` uses latest unless pinned |
More detail: [docs/WIKI.md](./docs/WIKI.md)
---
## License
ISC
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessSyncing