Skip to main content
Glama
mcp-migration-tools

mcp-migration-tools

by simeptk

mcp-migration-tools

A small, public-safe FastMCP server that exposes practical legacy-to-modern migration helpers as AI-callable tools — the same "thin tool wrapper over tested, pure logic" pattern I use on a larger production MCP server, distilled into a clean, fully generic example.


Why this exists

Modernizing 100+ legacy apps means doing the same analysis over and over: what stack is this? what endpoints does it expose? how do I port this DDL? how big is the job? These are perfect MCP tools — small, deterministic, and callable by an AI agent (or a human) on demand.

Related MCP server: legacy-web-mcp

The tools

Tool

What it does

detect_stack

Infers the dominant tech stack from a file listing (weights manifests over single files)

extract_api_contract

Pulls {method, path} REST endpoints from Spring controller source

sql_to_flyway

Converts SQL Server DDL into a portable Flyway migration (identity cols, MONEY, NVARCHAR, GETDATE(), brackets, GO, dbo.)

estimate_migration_effort

Transparent person-day estimate from coarse inventory counts, with a risk band

Design: pure logic + thin MCP layer

tools/*.py         ← pure, dependency-free functions (100% unit-tested)
   ▲
server.py          ← FastMCP wrappers: @mcp.tool() delegating to the pure logic

Keeping the logic free of the MCP runtime means every tool is fast to test and reusable outside MCP — the tests don't even import fastmcp.

Quick start

# install
pip install .[dev]

# run the tests (17 passing)
pytest -q

# run the MCP server (stdio transport)
mcp-migration-tools

Use the tools directly (no MCP needed)

from mcp_migration_tools.tools import detect_stack, sql_to_flyway

detect_stack(["ProductList.asp", "web.config"])
# {'stack': 'aspnet', 'confidence': 0.75, ...}

sql_to_flyway("CREATE TABLE [dbo].[Product]([Id] INT IDENTITY(1,1))", version=1,
              description="create product")
# {'filename': 'V1__create_product.sql', 'body': 'CREATE TABLE Product(Id INT GENERATED BY DEFAULT AS IDENTITY)\n'}

Register with an MCP client

Example client config (e.g. for an MCP-capable IDE/agent):

{
  "mcpServers": {
    "migration-tools": {
      "command": "mcp-migration-tools"
    }
  }
}

Project structure

mcp-migration-tools/
├── src/mcp_migration_tools/
│   ├── server.py                 # FastMCP server (tool registration)
│   └── tools/                    # pure, tested logic
│       ├── stack_detector.py
│       ├── api_extractor.py
│       ├── sql_translator.py
│       └── effort_estimator.py
├── tests/                        # pytest suite (one file per tool)
├── .github/workflows/ci.yml      # test on Python 3.11 & 3.12
└── pyproject.toml

Part of my modernization portfolio · simeptk.github.io · companion to legacy-to-modern-demo

Available Tools

4 tools
detect_stackB

Infer the dominant technology stack from a list of file paths.

Inputs: files (required). Returns: object

estimate_migration_effortA

Estimate migration effort in person-days from coarse inventory counts.

Inputs: kloc, pages, tables, integrations, +1 more. Returns: object

extract_api_contractA

Extract REST endpoints ({method, path}) from Spring controller source.

Inputs: source (required). Returns: result

sql_to_flywayB

Convert SQL Server DDL into a portable Flyway migration file.

Inputs: ddl (required), version, description. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 4 tools

    Disambiguation5/5

    Each tool targets a unique aspect of migration: API extraction, SQL conversion, stack detection, and effort estimation. No two tools perform similar or overlapping functions, making selection unambiguous.

    Naming Consistency4/5

    The naming style is consistent with lowercase snake_case and mostly follows a verb_noun pattern (extract_api_contract, detect_stack, estimate_migration_effort). One tool (sql_to_flyway) uses a noun_to_noun pattern, which is a minor deviation but still clear and readable.

    Tool Count4/5

    With 4 tools, the set is within the ideal 3-15 range and feels appropriately scoped for a focused migration utility. It is slightly sparse but each tool serves a distinct purpose.

    Completeness3/5

    The tools cover analysis, conversion, and estimation, but lack any migration execution or validation operations. There are notable gaps in the end-to-end migration workflow, though the existing tools are sound.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      A universal bridge that turns legacy backend services and modern APIs into AI-accessible tools without requiring code rewrites. It dynamically generates tool definitions from WSDL, OpenAPI, or custom JSON specs to enable AI assistants to interact with systems like SAP, IBMi, and SOAP services.
      -
    • A
      license
      Not graded
      quality
      Not graded
      maintenance
      Connects legacy COBOL mainframe systems to modern AI governance via MCP, with tools for parsing copybooks, assessing CICS, scanning JCL, mapping VSAM, and translating EBCDIC.
      1
      MIT