@mhdd_24/flyway-mcp
Automates Flyway database migrations across multiple projects, including project discovery, repair, and migration with automatic error remediation for duplicate versions, checksum mismatches, and missing tables.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@mhdd_24/flyway-mcpQA Flyway Migration"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@mhdd_24/flyway-mcp
MCP server that runs Flyway repair + migrate across multiple database projects for QA or Development environments. Use it from Cursor, 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
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 → retryDiscovery — finds subfolders with
flyway.tomlandflyway_qa.toml/flyway_dev.tomlRepair — fixes schema history checksums before migrate
Migrate — applies pending migrations per environment config
Remediation — on failure, attempts automatic fixes (duplicate versions, placeholders, missing tables) and retries
Related MCP server: coalesce-transform-mcp
Prerequisites
Requirement | Notes |
Node.js 18+ | Required for MCP server |
Flyway CLI | On PATH ( |
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)
npm install -g @mhdd_24/flyway-mcpOption B — npx (no global install)
npx @mhdd_24/flyway-mcpOption C — clone and build (contributors)
git clone https://github.com/Mhdd-24/Flyway-MCP.git
cd Flyway-MCP
npm install
npm run build
node dist/index.jsConfigure your MCP client
Cursor
Edit Cursor Settings → MCP or ~/.cursor/mcp.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:
"command": "flyway-mcp"Local development:
"command": "node",
"args": ["C:/path/to/flyway-mcp/dist/index.js"]Restart Cursor after saving.
Optional: limit projects
"FLYWAY_PROJECTS": "service-a-db,service-b-db"Environment variables
Variable | Required | Default | Purpose |
| Yes | — | Root folder containing Flyway project directories |
| No |
| Flyway executable name or path |
| No | all | Comma-separated project folder names to include |
| No |
| 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 | Shows discovered projects and QA/Dev config availability |
| QA Flyway Migration |
|
| Dev Flyway Migration |
|
Optional parameters
Parameter | Applies to | Description |
| 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 |
JS placeholder ( | Removes/replaces Flyway placeholder tokens |
Missing table ( | Wraps table block in conditional |
Some errors (e.g. missing database plugins) cannot be auto-fixed and are reported in the summary.
Troubleshooting
Problem | Fix |
| Set |
| Upgrade to |
| Upgrade to 1.0.3+ — paths resolve under |
| Ensure subfolders contain |
| Install the Flyway plugin for that database type |
Edited already-applied migration does nothing | Expected — add a new version or run SQL manually after |
Stale version after publish | Restart MCP; |
More detail: docs/WIKI.md
License
ISC
Available Tools
3 toolsdev_flyway_migrationB
Dev Flyway Migration: run flyway repair and migrate for all configured projects against the Development environment. Use when the user says "Dev Flyway Migration". Automatically fixes duplicate versions, checksum mismatches, Flyway placeholder errors in JS migrations, and missing-table failures where possible.
| Name | Required | Description | Default |
|---|---|---|---|
| projects | No | Optional list of project folder names (e.g. my-service-db). Runs all discovered projects when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the auto-fix behaviors (duplicate versions, checksum mismatches, placeholder errors, missing-table failures), which is real context beyond the schema. However it omits the mutation/repair side effects on the schema history and any permission or safety caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and environment before the trigger and the auto-fix list. No filler, though the trigger phrase slightly restates the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no annotations and no output schema, the description covers purpose and auto-fix scope but leaves side effects, permissions, and outcomes unexplained. Adequate but with clear gaps given the mutation risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single optional 'projects' parameter is fully documented. The description adds only the default behavior ('all configured projects'), matching the schema, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: run flyway repair and migrate against the Development environment, scoped to all configured projects. The 'Dev'/'Development' framing implicitly separates it from qa_flyway_migration, but it never names the sibling or list_flyway_projects, so differentiation is inferential rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a trigger phrase ('Use when the user says "Dev Flyway Migration"') which is implied usage context, but offers no when-not guidance and never points to qa_flyway_migration or list_flyway_projects as the alternative for other environments or for discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_flyway_projectsB
List Flyway projects discovered under FLYWAY_ROOT with QA/Dev config availability.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'List' implies a read-only enumeration and it discloses that projects are discovered under FLYWAY_ROOT and that QA/Dev config availability is included, but it says nothing about the return shape, behavior when FLYWAY_ROOT is unset, or whether the listing is cached/truncated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler: verb, resource, scope, and the salient output attribute. It is appropriately sized, though the trailing phrase is slightly compressed into ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only listing with no output schema, the description covers what the tool returns at a high level (projects plus QA/Dev config availability). The main gap is the absence of any guidance on follow-up actions or the exact shape of the returned entries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate; baseline is 4. The description correctly adds no parameter detail because none exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (Flyway projects) plus a scoping constraint (discovered under FLYWAY_ROOT) and the QA/Dev config detail. It is distinguishable from the qa_flyway_migration/dev_flyway_migration siblings by being a discovery/listing tool rather than a migration runner, though it never explicitly contrasts with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance and never mentions the sibling migration tools. An agent could infer this is a discovery step before running a migration, but nothing in the text states that or offers an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qa_flyway_migrationA
QA Flyway Migration: run flyway repair and migrate for all configured projects against the QA environment. Use when the user says "QA Flyway Migration". Automatically fixes duplicate versions, checksum mismatches, Flyway placeholder errors in JS migrations, and missing-table failures where possible.
| Name | Required | Description | Default |
|---|---|---|---|
| projects | No | Optional list of project folder names (e.g. my-service-db). Runs all discovered projects when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does add real value: it enumerates the failure classes it auto-repairs (duplicate versions, checksum mismatches, placeholder errors, missing-table failures) and hedges with "where possible." However, it omits that migrations mutate schema state irreversibly, whether a rollback exists, what happens when repair fails, and any auth/environment requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action and environment before the trigger phrase and the repair details. Nothing is padded, though the trigger-phrase sentence is somewhat low-value relative to the repair list that follows it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an unannotated mutating tool with no output schema, the description covers what it does and which failures it self-heals, but says nothing about return values, success/failure reporting, or the state left behind on partial failure. An agent can select it but cannot predict the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is only one optional parameter, so the schema already documents that omitting projects runs all discovered projects. The description's "for all configured projects" merely echoes that default rather than adding format or naming guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (run flyway repair and migrate) against a specific environment (QA) and a specific scope (all configured projects). This cleanly distinguishes it from siblings dev_flyway_migration and list_flyway_projects without needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a narrow invocation trigger ("Use when the user says 'QA Flyway Migration'") and implies the QA environment context, but never states when to prefer dev_flyway_migration or when not to run this, nor any prerequisites such as credentials or a clean working tree. Usage is implied rather than contrasted against alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v1.0.3- First observed
dev_flyway_migration - First observed
list_flyway_projects - First observed
qa_flyway_migration
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: listing projects versus running migrations against QA or Dev. The QA and Dev migration tools are only differentiated by environment, which is explicitly named in both the tool name and description, so misselection is unlikely.
All tools use snake_case and follow a predictable semantic pattern. The only minor deviation is that one tool leads with an action verb (list_) while the others lead with an environment qualifier (qa_/dev_), but the pattern remains readable and consistent.
Three tools is well-scoped for a Flyway migration helper focused on discovery and two environment-specific operations. Each tool earns its place without redundancy.
The surface covers listing projects and migrating QA/Dev, but lacks notable lifecycle operations such as per-project targeting, status/validate, rollback/undo, and any production environment path. Agents can work around some gaps, but key migration management operations are missing.
Maintenance
Related MCP Connectors
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- AlicenseAqualityCmaintenanceThis MCP server enables database migration between heterogeneous systems (Oracle, PostgreSQL, SQL Server, Netezza to PostgreSQL or SQL Server) through AI assistants by providing tools for command preview, execution, validation, and workflow suggestions.6MIT
- AlicenseAqualityAmaintenanceMCP server for Coalesce that manages nodes, pipelines, environments, jobs, and runs, and enables project validation, DDL/DML preview, deployment planning, and cloud environment application.100195 npm2MIT
- AlicenseCqualityFmaintenanceMCP server for project management automation, providing tools for project health, documentation, task management, security scanning, and CI/CD validation.271MIT
- AlicenseBqualityDmaintenanceMCP Server for Git operations, agent templates, and project utilities.923 npmMIT