Skip to main content
Glama
Mhdd-24
by Mhdd-24

@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 → 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


Related MCP server: coalesce-transform-mcp

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

npm install -g @mhdd_24/flyway-mcp

Option B — npx (no global install)

npx @mhdd_24/flyway-mcp

Option 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.js

Configure 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

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+

ENOENT rename under C:\Users\…\migrations\…

Upgrade to 1.0.3+ — paths resolve under FLYWAY_ROOT/<project>

No Flyway projects found

Ensure subfolders contain flyway.toml

No Flyway database plugin

Install the Flyway plugin for that database type

Edited already-applied migration does nothing

Expected — add a new version or run SQL manually after repair

Stale version after publish

Restart MCP; npx uses latest unless pinned

More detail: docs/WIKI.md


License

ISC

Available Tools

3 tools
dev_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectsNoOptional list of project folder names (e.g. my-service-db). Runs all discovered projects when omitted.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectsNoOptional list of project folder names (e.g. my-service-db). Runs all discovered projects when omitted.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 3 tool updatesv1.0.3
    • First observeddev_flyway_migration
    • First observedlist_flyway_projects
    • First observedqa_flyway_migration

TDQS

A3.7/5.0

Scored across 3 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers