mcp-migration-tools
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., "@mcp-migration-tools Detect the stack from these files: ProductList.asp, web.config"
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.
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 |
| Infers the dominant tech stack from a file listing (weights manifests over single files) |
| Pulls |
| Converts SQL Server DDL into a portable Flyway migration (identity cols, |
| 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 logicKeeping 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-toolsUse 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.tomlPart of my modernization portfolio · simeptk.github.io · companion to legacy-to-modern-demo
Available Tools
4 toolsdetect_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
Scored across 4 tools
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.
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.
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.
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
Related MCP Connectors
AI-native Day 0 modernization platform for PRDs, architecture, work orders, and code transformation.
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
AI-callable tools for API mocking, testing, monitoring, security, and automation.
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA 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.-
- AlicenseNot gradedqualityDmaintenanceAutomatically crawl and analyze legacy web applications to generate documentation and modernization plans.MIT
- AlicenseBqualityCmaintenanceAI-assisted COBOL to modern stack bridge that parses COBOL programs, maps to Python/Java/Go, generates test harnesses, and plans migration for legacy mainframe modernization.537 PyPIMIT
- AlicenseNot gradedqualityNot gradedmaintenanceConnects legacy COBOL mainframe systems to modern AI governance via MCP, with tools for parsing copybooks, assessing CICS, scanning JCL, mapping VSAM, and translating EBCDIC.1MIT