Skip to main content
Glama
lucad87

MCP Server - Test Migration (WDIO to Playwright)

by lucad87

MCP Server - Test Migration (WDIO to Playwright)

An MCP (Model Context Protocol) server that helps migrate test automation projects from WebDriverIO to Playwright test framework using AST-based transformations.

Features

This MCP server provides specialized tools for a complete migration workflow:

1. analyze_wdio_test

Analyzes WebDriverIO test files using AST parsing and extracts:

  • Import statements and dependencies

  • Test structure (describe blocks, test cases)

  • Selectors used (CSS, XPath, data-test-id, etc.)

  • WDIO commands and patterns

  • Assertions libraries

  • Hooks (before, after, etc.)

  • Page Object usage detection

  • Framework detection (WDIO, Playwright, or mixed)

  • Migration complexity assessment

  • Modern selector suggestions (getByTestId, getByRole, etc.)

2. migrate_to_playwright

Migrates WDIO tests to Playwright using AST transformation:

  • Converts WDIO syntax to Playwright syntax

  • Updates selectors to use Playwright locators

  • Suggests modern locators (getByTestId with data-test-id)

  • Replaces WDIO commands with Playwright equivalents

  • Uses latest Playwright v1.57 best practices

  • Removes unnecessary explicit waits (leverages auto-waiting)

  • Converts assertions to Playwright's expect

  • Preserves already-migrated code (supports partial migrations)

3. refactor_to_pom

Refactors migrated tests to use Page Object Model:

  • Extracts page interactions into page classes

  • Generates actual locator properties from test code

  • Creates reusable page object files

  • Applies Playwright POM patterns

  • Supports existing page objects

4. get_playwright_docs

Retrieves relevant Playwright documentation:

  • Selectors and locators (with data-test-id examples)

  • Assertions

  • Fixtures

  • Page Object Model

  • Auto-waiting behavior

  • Configuration

5. compare_frameworks

Provides side-by-side comparison:

  • 50+ WDIO commands → Playwright equivalents

  • Syntax differences

  • Best practice recommendations

  • Related commands table

6. detect_project_state (NEW)

Analyzes project structure to detect:

  • Existing Playwright configuration

  • Existing WDIO configuration

  • Already migrated tests

  • Partially migrated tests

  • Existing page objects

  • Project directory structure

  • Recommendations for migration strategy

7. migrate_config

Migrates wdio.conf.js to playwright.config.ts:

  • Extracts baseUrl, specs, capabilities

  • Generates proper Playwright config

  • Sets testIdAttribute: 'data-test-id'

  • Merges with existing Playwright config if present

8. register_custom_commands (NEW)

Registers project-specific custom WDIO commands:

  • Add custom command → Playwright mappings

  • Commands are used in subsequent migrations

  • Persists during server session

9. generate_migration_report (NEW)

Generates comprehensive migration report as markdown:

  • Migration statistics (total, migrated, pending, failed)

  • Tags summary with Playwright grep commands

  • File-by-file status

  • Detailed test list with tags

Related MCP server: Browser Testing MCP Server

Tag Migration

The tool automatically migrates test tags from WDIO to Playwright format:

WDIO (tags in description):

it('should login successfully [SMOKE] [P1]', async () => { ... });
it('should validate form @regression', async () => { ... });

Playwright (tag annotations):

test('should login successfully', { tag: ['@smoke', '@p1'] }, async ({ page }) => { ... });
test('should validate form', { tag: ['@regression'] }, async ({ page }) => { ... });

Run tests by tag: npx playwright test --grep @smoke

Installation

npm install

Usage

As MCP Server (stdio - Local)

Add to your MCP client configuration (e.g., Claude Desktop, GitHub Copilot):

{
  "mcpServers": {
    "tests-migration": {
      "command": "node",
      "args": ["/path/to/mcp-server-tests-migration/index.js"]
    }
  }
}

Standalone (stdio)

npm start

HTTP Server (Remote/Docker)

Run the HTTP server for remote access:

npm run start:http

The server will be available at http://localhost:3000

Docker Deployment

Build and run with Docker:

# Build image
npm run docker:build
# or
docker build -t mcp-server-tests-migration:2.1.0 .

# Run container
npm run docker:run
# or
docker run -p 3000:3000 mcp-server-tests-migration:2.1.0

# Using docker-compose
npm run docker:compose
# or
docker-compose up -d

HTTP API Endpoints

When running in HTTP mode, the following endpoints are available:

Endpoint

Method

Description

/

GET

API documentation

/health

GET

Health check

/mcp

POST

MCP Streamable HTTP (recommended)

/mcp

GET

MCP SSE stream for responses

/mcp

DELETE

Close MCP session

/sse

GET

Legacy SSE connection

/api/analyze

POST

Analyze WDIO test

/api/migrate

POST

Migrate to Playwright

/api/refactor-pom

POST

Refactor to Page Object Model

/api/compare

POST

Compare WDIO/Playwright commands

/api/docs/:topic

GET

Get Playwright documentation

/api/detect-project

POST

Detect project state

/api/migrate-config

POST

Migrate wdio.conf.js

/api/register-commands

POST

Register custom commands

/api/generate-report

POST

Generate migration report

HTTP API Examples

# Analyze a test
curl -X POST http://localhost:3000/api/analyze \
  -H "Content-Type: application/json" \
  -d '{"testContent": "const { expect } = require(\"chai\");\ndescribe(\"Test\", () => { it(\"works\", async () => { await $(\"#btn\").click(); }); });"}'

# Migrate a test
curl -X POST http://localhost:3000/api/migrate \
  -H "Content-Type: application/json" \
  -d '{"testContent": "...", "outputFormat": "typescript"}'

# Get Playwright docs
curl http://localhost:3000/api/docs/selectors

Connecting MCP Clients to HTTP Server

For MCP clients that support Streamable HTTP transport (recommended):

http://your-server:3000/mcp

For legacy clients using SSE transport:

http://your-server:3000/sse

Example Configuration Files

See the examples/ directory for ready-to-use configuration files:

  • mcp-config-local.json - Local stdio mode

  • mcp-config-http-local.json - Local HTTP/SSE mode

  • mcp-config-http-remote.json - Remote HTTP/SSE mode

  • mcp-config-docker-stdio.json - Docker with stdio

For detailed configuration options, see docs/client-configuration.md

Migration Workflow

// Use detect_project_state tool to understand current migration status
// Provides insights on existing Playwright config, migrated tests, page objects

Step 1: Analyze

// Use analyze_wdio_test tool with your WDIO test content
// This provides insights into the test structure and complexity
// Detects if test is already partially migrated

Step 2: Migrate Config (if needed)

// Use migrate_config tool to convert wdio.conf.js to playwright.config.ts
// Preserves existing Playwright config if present

Step 3: Migrate Tests

// Use migrate_to_playwright tool to convert to Playwright
// AST-based transformation preserves already-migrated code
// Tests will use direct page interactions (no POM yet)

Step 4: Refactor to POM

// Use refactor_to_pom tool to apply Page Object Model
// This creates maintainable, reusable page classes
// Reuses existing page objects if present

Step 5: Verify

// Use get_playwright_docs and compare_frameworks for reference
// Review and adjust generated code as needed
// Run tests: npx playwright test

Example

Original WDIO Test:

describe('Login Test', () => {
  it('should login successfully', async () => {
    await browser.url('https://example.com/login');
    await $('#username').setValue('testuser');
    await $('#password').setValue('testpass');
    await $('#login-button').click();
    await $('#dashboard').waitForDisplayed();
    expect(await $('#welcome-message').getText()).to.equal('Welcome!');
  });
});

After Migration (Step 2):

import { test, expect } from '@playwright/test';

test.describe('Login Test', () => {
  test('should login successfully', async ({ page }) => {
    await page.goto('https://example.com/login');
    await page.locator('#username').fill('testuser');
    await page.locator('#password').fill('testpass');
    await page.locator('#login-button').click();
    await expect(page.locator('#dashboard')).toBeVisible();
    await expect(page.locator('#welcome-message')).toHaveText('Welcome!');
  });
});

After POM Refactoring (Step 3):

// login.spec.js
import { test, expect } from '@playwright/test';
import { LoginPage } from './pages/LoginPage';

test.describe('Login Test', () => {
  test('should login successfully', async ({ page }) => {
    const loginPage = new LoginPage(page);
    await loginPage.goto();
    await loginPage.login('testuser', 'testpass');
    await expect(loginPage.dashboardSection).toBeVisible();
    await expect(loginPage.welcomeMessage).toHaveText('Welcome!');
  });
});

// pages/LoginPage.js
export class LoginPage {
  constructor(page) {
    this.page = page;
    this.usernameInput = page.locator('#username');
    this.passwordInput = page.locator('#password');
    this.loginButton = page.locator('#login-button');
    this.dashboardSection = page.locator('#dashboard');
    this.welcomeMessage = page.locator('#welcome-message');
  }

  async goto() {
    await this.page.goto('https://example.com/login');
  }

  async login(username, password) {
    await this.usernameInput.fill(username);
    await this.passwordInput.fill(password);
    await this.loginButton.click();
  }
}

Key Migration Concepts

WDIO → Playwright Mapping

WDIO

Playwright

$('selector')

page.locator('selector') or page.getByTestId('id')

$$('selector')

page.locator('selector').all()

.setValue()

.fill()

.addValue()

.pressSequentially()

.click()

.click()

.getText()

.textContent()

.getValue()

.inputValue()

.waitForDisplayed()

.waitFor({ state: 'visible' }) or auto-waiting

.moveTo()

.hover()

.scrollIntoView()

.scrollIntoViewIfNeeded()

.selectByVisibleText()

.selectOption()

browser.url()

page.goto()

browser.pause()

page.waitForTimeout()

browser.execute()

page.evaluate()

browser.keys()

page.keyboard.press()

browser.refresh()

page.reload()

browser.takeScreenshot()

page.screenshot()

Playwright Advantages

  1. Auto-waiting: No need for explicit waits in most cases

  2. Web-first assertions: Built-in retry logic

  3. Modern selectors: getByRole, getByText, getByLabel, getByTestId

  4. data-test-id support: Configure with testIdAttribute: 'data-test-id'

  5. Better debugging: Playwright Inspector, trace viewer

  6. Parallel execution: Built-in support

  7. Multiple browsers: Chromium, Firefox, WebKit

  8. AST-based migration: Accurate code transformation

Key Improvements in v2.0

  • AST-based parsing: Uses Babel parser for accurate code analysis and transformation

  • Complete command mappings: 50+ WDIO commands mapped to Playwright equivalents

  • Modern locator suggestions: Recommends getByTestId, getByRole, getByLabel

  • data-test-id support: Uses data-test-id attribute (configurable)

  • Partial migration support: Detects and preserves already-migrated code

  • Project state detection: Understands existing Playwright setup

  • Config migration: Converts wdio.conf.js to playwright.config.ts

  • Smart POM generation: Extracts actual selectors into page object classes

  • TypeScript output: Full TypeScript support with type annotations

  • Tag migration: Converts [TAG], @tag, #tag to Playwright annotations

  • Custom commands: Register project-specific WDIO commands

  • Migration reports: Generate comprehensive markdown reports

Requirements

  • Node.js 18+

  • @modelcontextprotocol/sdk

  • @babel/parser, @babel/traverse, @babel/generator (for AST)

  • express (for HTTP server)

Project Structure

mcp-server-tests-migration/
├── index.js              # CLI entry point
├── server-http.js        # HTTP server (Docker/remote)
├── src/
│   ├── index.js          # Module exports
│   ├── server.js         # MCP server class
│   ├── constants/
│   │   └── mappings.js   # WDIO→Playwright command mappings
│   ├── handlers/
│   │   ├── tools.js      # Tool definitions (schema)
│   │   └── toolHandlers.js # Tool implementations
│   ├── transformers/
│   │   ├── migration.js  # AST-based migration
│   │   ├── pom.js        # Page Object Model
│   │   └── selectors.js  # Selector transformation
│   └── utils/
│       ├── config.js     # Config file parsing
│       ├── docs.js       # Playwright documentation
│       ├── parser.js     # AST parsing utilities
│       ├── report.js     # Migration report generation
│       └── tags.js       # Tag extraction utilities
├── examples/             # Example configs and tests
├── docs/                 # Documentation
├── Dockerfile
└── docker-compose.yml

License

MIT

Author

Luca Donnaloia

Contributing

Contributions welcome! Please feel free to submit pull requests or open issues.

Roadmap

  • AST-based parsing and transformation

  • Complete command mappings (50+)

  • Modern locator suggestions

  • Project state detection

  • Config migration

  • Partial migration support

  • TypeScript output support

  • Custom WDIO commands handling

  • Migrate tests tag [TAG], @tag, #tag to Playwright tag annotations

  • Migration report generation with tags summary

  • SOLID principles refactoring

  • WDIO services migration (custom services)

  • Visual comparison of test coverage by tags

  • Batch file processing

Available Tools

9 tools
analyze_wdio_testA

Analyzes a WebDriverIO test file using AST parsing and extracts detailed information about its structure, selectors, commands, and dependencies. Detects if test is already partially migrated to Playwright.

ParametersJSON Schema
NameRequiredDescriptionDefault
testContentYesThe complete content of the WDIO test file to analyze
filePathNoOptional file path for context

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full burden. It successfully discloses the implementation method (AST parsing) and specific extraction targets, but fails to explicitly confirm this is a read-only/safe operation or describe the return format/structure despite the absence of an output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The first sentence front-loads the core action, method, and primary outputs. The second sentence adds the specific migration-detection capability that differentiates this from generic analysis tools. Every word earns its place.

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?

The description adequately covers the input processing logic but leaves gaps given the lack of annotations and output schema. It omits safety guarantees (read-only status), return value structure, and how this analysis feeds into the broader migration workflow suggested by sibling tools. Sufficient for basic invocation but incomplete for full context.

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%, with testContent and filePath fully documented. The description references 'WebDriverIO test file' which aligns with the testContent parameter, but adds no additional semantic context (e.g., expected file size limits, syntax requirements) beyond what the schema already provides, warranting the baseline score.

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?

The description provides a specific verb ('Analyzes'), target resource ('WebDriverIO test file'), method ('AST parsing'), and detailed outputs ('structure, selectors, commands, and dependencies'). It distinguishes from siblings like detect_project_state by specifying single-file AST analysis and from migrate_to_playwright by clarifying this is analysis-only with a specific focus on detecting partial migration status.

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?

While the description clearly states what the tool does, it lacks explicit guidance on when to use it versus siblings like detect_project_state (project-wide analysis) or migrate_to_playwright (actual transformation). The usage is implied by the functionality but no explicit 'when-to-use' or workflow prerequisites are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_frameworksB

Compares WDIO and Playwright commands/concepts side by side. Helps understand equivalent functionality.

ParametersJSON Schema
NameRequiredDescriptionDefault
wdioCommandYesThe WDIO command or pattern to find Playwright equivalent for

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden but fails to disclose output format (table? JSON?), whether the operation is read-only/safe, or any limitations on which commands can be compared. It only describes functional intent, not behavioral traits.

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?

Two sentences efficiently convey the core purpose. The second sentence ('Helps understand equivalent functionality') is slightly redundant with the comparison concept but acceptable. No unnecessary verbosity.

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 single-parameter lookup tool, the description adequately covers the input purpose but lacks output description (what the side-by-side comparison looks like) and safety guarantees that would be necessary given the absence of annotations and output schema.

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?

The input schema has 100% description coverage ('The WDIO command or pattern to find Playwright equivalent for'), so the description meets the baseline expectation. It does not add additional semantic context like example commands or input constraints beyond what the schema provides.

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?

The description uses specific verbs ('compares') and resources ('WDIO and Playwright commands/concepts') and clearly distinguishes from siblings like 'migrate_to_playwright' (which performs migration) and 'get_playwright_docs' (which retrieves documentation) by emphasizing side-by-side comparison functionality.

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?

The phrase 'helps understand equivalent functionality' implies educational/lookup usage, but lacks explicit guidance on when to use this versus 'migrate_to_playwright' (for actual migration) or 'get_playwright_docs' (for general documentation). No prerequisites or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_project_stateA

Analyzes project structure to detect existing Playwright configuration, migrated tests, page objects, and WDIO setup. Helps understand current migration state.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectFilesYesJSON string containing file paths and their contents to analyze

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. 'Analyzes' and 'detect' imply read-only behavior, but the description lacks explicit safety guarantees, side effect warnings, or output format disclosure despite having no output schema to reference.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences with zero waste. First sentence establishes capability, second establishes value proposition. Front-loaded with the action verb and appropriately sized for the tool's complexity.

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?

With no output schema and no annotations, the description adequately lists detectable artifacts but omits return value description, error scenarios, or prerequisites. Sufficient for a single-parameter analysis tool but leaves gaps in behavioral contract.

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% (projectFiles is fully described in schema), establishing baseline 3. The description mentions 'analyzes project structure' which loosely implies the input, but adds no specific semantics about the JSON string format, size limits, or content expectations beyond the schema description.

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?

Clear specific action ('Analyzes project structure') and resources detected (Playwright configuration, WDIO setup, page objects). The phrase 'Helps understand current migration state' distinguishes it from sibling migration tools like migrate_to_playwright, though it doesn't explicitly contrast with analyze_wdio_test.

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?

Implies usage context through 'migration state' but lacks explicit when-to-use guidance (e.g., 'Use this before migrating to assess current state') or when-not-to-use (e.g., 'Do not use for analyzing individual test logic—use analyze_wdio_test instead').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_migration_reportB

Generates a comprehensive migration report as a markdown file. Includes test files, tags, migration status, and statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault
migratedTestsYesJSON string array of migrated test information with file paths, tags, and status
projectNameNoName of the project for the report header

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Mentions output format (markdown file) but omits critical behavioral traits: side effects (file system write location/overwrite behavior), return value format, and idempotency. 'Generates' implies mutation but lacks safety context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences with zero waste. First sentence establishes purpose and format; second details content. Front-loaded and appropriately sized for tool complexity.

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?

Adequate for a 2-parameter tool with full schema coverage. However, lacking output schema, description should indicate what is returned (file path, content, or status) but only states 'generates... file' without specifying the return value.

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 has 100% description coverage, establishing baseline of 3. Description mentions report contents ('test files, tags, migration status, and statistics') which aligns with migratedTests parameter, but adds no syntax guidance or examples beyond schema.

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?

Description uses specific verb 'Generates' with clear resource 'migration report' and output format 'markdown file'. Distinct from sibling tools focused on analysis, migration, or refactoring—this is the only reporting tool.

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?

No explicit guidance on when to use versus alternatives, or prerequisites (e.g., whether to run after migration completes). Lacks 'when-not' guidance despite multiple sibling migration tools where sequencing matters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_playwright_docsC

Retrieves relevant Playwright documentation for specific features, commands, or concepts. Useful for understanding migration patterns.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesThe Playwright feature or concept to get documentation for (e.g., "selectors", "assertions", "fixtures", "page-object-model")

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full disclosure burden. While 'Retrieves' implies a read-only operation, the description fails to specify output format (markdown, plain text, structured JSON?), whether results are cached, or any rate limiting concerns. It does not disclose what 'relevant' means algorithmically.

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?

The description consists of two efficient sentences totaling 12 words. The primary action is front-loaded in the first sentence, and the second sentence provides contextual usage hints. No redundant or filler text is present, though the second sentence could be more specific.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema provided, the description should ideally describe the return format (documentation text, code examples, links?). It fails to do so. For a single-parameter retrieval tool, the description covers the input side but leaves the output side completely undocumented.

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?

The input schema has 100% coverage with the 'topic' parameter fully described including examples. The description mentions 'specific features, commands, or concepts' which aligns with the schema but adds no additional semantic value beyond what the schema already provides. Baseline 3 is appropriate given comprehensive schema coverage.

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?

The description clearly states the tool 'Retrieves relevant Playwright documentation' using a specific verb and resource. However, it does not explicitly differentiate from siblings like 'migrate_to_playwright' or 'compare_frameworks' beyond implicitly mentioning the 'migration' context.

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 mentions the tool is 'Useful for understanding migration patterns,' which provides implied context, but lacks explicit guidance on when to use this versus alternatives (e.g., when to lookup docs vs. when to run the actual migration). No 'when-not' or alternative recommendations are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migrate_configB

Migrates wdio.conf.js to playwright.config.ts. Preserves existing Playwright config if present.

ParametersJSON Schema
NameRequiredDescriptionDefault
wdioConfigYesContent of wdio.conf.js file
existingPlaywrightConfigNoOptional existing playwright.config.ts content to merge with

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full behavioral burden. It successfully discloses the merge/preservation behavior for existing Playwright configs. However, it omits critical safety context: whether this performs a disk write or returns content, error handling for invalid WDIO configs, and whether the operation is destructive or reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely efficient at two sentences. The first sentence front-loads the core action, and the second adds a crucial behavioral qualifier. Zero redundant words or tautologies; every sentence earns its place.

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?

Adequate for a two-parameter tool, covering the core transformation and merge logic. However, given the lack of output schema and annotations, the description should ideally indicate the return format (generated config content) and clarify side effects (disk vs memory operation). As-is, it leaves operational ambiguity.

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?

With 100% schema description coverage, the baseline is 3. The description mentions preservation behavior which maps to the existingPlaywrightConfig parameter, but this largely restates the schema's 'to merge with' semantics. No additional parameter constraints, format details, or syntax guidance is provided beyond the structured schema.

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?

The description clearly states the specific transformation (wdio.conf.js → playwright.config.ts) using a concrete verb ('migrates'). It distinguishes from siblings like 'migrate_to_playwright' by specifying this is config-file-only migration, though it could more explicitly clarify the relationship to the broader migration tool.

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?

No explicit guidance on when to select this tool versus 'migrate_to_playwright' or other siblings. While the config-specific scope implies usage context, there is no 'when to use' or 'when not to use' instruction to help the agent decide between configuration migration versus full test migration.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migrate_to_playwrightA

Migrates a WebDriverIO test to Playwright syntax using AST transformation. Supports partial migrations and preserves already-migrated code. Uses modern Playwright locators (getByRole, getByLabel, getByTestId with data-test-id). Supports TypeScript output.

ParametersJSON Schema
NameRequiredDescriptionDefault
testContentYesThe WDIO test content to migrate
analysisResultNoOptional JSON string of previous analysis result to use as context
filePathNoOriginal file path for naming reference
outputFormatNoOutput format: javascript (default) or typescript

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the full burden. It discloses key behavioral traits: AST transformation (implementation approach), preservation of existing code (safety/idempotency), and partial migration support. However, it fails to disclose critical operational details like whether the tool returns transformed content as a string or writes to disk, or what happens on parse errors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences with zero waste: core purpose (sentence 1), idempotency behavior (sentence 2), implementation specifics (sentence 3), and output format support (sentence 4). Front-loaded with the essential verb and resource, making it immediately scannable.

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?

Given the 100% schema coverage and moderate complexity (4 parameters, no nested objects), the description provides adequate context about the migration approach and safety characteristics. However, lacking an output schema, it should ideally disclose the return format (transformed code string) and whether filePath is used for resolution or purely metadata.

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?

With 100% schema description coverage, the schema adequately documents all four parameters. The description reinforces the TypeScript output option and implies testContent should be parseable code via 'AST transformation,' but adds minimal semantic detail beyond what the structured schema already provides. Baseline score appropriate.

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?

The description clearly states the specific action (migrates), source (WebDriverIO test), target (Playwright syntax), and method (AST transformation). It distinguishes from siblings like migrate_config (tests vs config) and refactor_to_pom (syntax migration vs POM refactoring) by specifying AST-based code transformation.

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?

The description implies iterative usage through 'supports partial migrations and preserves already-migrated code,' suggesting idempotent behavior. The optional analysisResult parameter hints at workflow integration with analyze_wdio_test. However, it lacks explicit when-to-use guidance versus alternatives like refactor_to_pom or prerequisites for the migration.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refactor_to_pomA

Refactors a migrated Playwright test to use Page Object Model pattern. Extracts actual selectors and creates proper page object classes with methods.

ParametersJSON Schema
NameRequiredDescriptionDefault
testContentYesThe migrated Playwright test content to refactor
filePathNoFile path for generating appropriate page object names
existingPageObjectsNoOptional JSON string of existing page objects to extend or reuse

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses behavioral mechanics ('Extracts actual selectors', 'creates proper page object classes') but omits critical operational details: whether it writes files or returns content, if it's destructive to existing code, or what the return format looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly constructed sentences with zero waste. Front-loaded with the primary action (refactoring to POM), followed by specific implementation details (extracting selectors, creating classes). Every word earns its place.

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 code-generation tool with 3 parameters and no annotations/output schema, the description adequately covers the transformation logic but leaves gaps regarding I/O behavior (returns code vs. writes files) and side effects. Complete enough for basic selection but missing operational safety details.

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%, so the schema fully documents all three parameters. The description adds minimal parameter-specific semantics beyond implying 'testContent' contains selectors to extract, meeting the baseline for high-coverage schemas.

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?

Description uses specific verb 'Refactors' with clear resource 'migrated Playwright test' and specifies the pattern 'Page Object Model'. It clearly distinguishes from sibling 'migrate_to_playwright' (which handles migration) by targeting already-migrated tests for structural refactoring.

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?

The phrase 'migrated Playwright test' implies this is for post-migration scenarios, providing implicit context. However, it lacks explicit guidance on when to use versus siblings like 'analyze_wdio_test' or prerequisites like requiring a successful migration first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

register_custom_commandsB

Registers custom WDIO commands with their Playwright equivalents for migration. Allows handling project-specific custom commands.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandsYesJSON string of custom command mappings: { "customCommand": { "method": "playwrightMethod", "description": "..." } }

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the full burden but provides only basic behavioral information. It states that registration occurs but omits critical details: whether registrations persist across sessions, whether they modify files or internal state, validation behavior for the JSON input, and how these mappings interact with the migration process.

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?

The description is appropriately brief with two sentences. However, the second sentence ('Allows handling project-specific custom commands') is somewhat redundant, merely restating the purpose rather than adding new information. It is front-loaded with the core action.

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 single-parameter registration tool, the description is minimally adequate. However, given the complexity of migration tooling and lack of output schema, it should clarify what 'registration' means (persistence scope, validation) and whether this is a prerequisite step for 'migrate_to_playwright'. It leaves ambiguity about side effects.

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%, providing detailed structure for the 'commands' parameter (including example JSON format). The description itself adds no additional parameter semantics beyond the schema, so it meets the baseline score of 3 for high schema coverage.

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?

The description clearly identifies the action ('Registers') and the specific resource (custom WDIO commands with Playwright equivalents). It implicitly distinguishes from sibling 'migrate_to_playwright' by focusing on 'custom' commands versus general test migration, though it could be more explicit about this distinction.

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?

No explicit guidance on when to use this tool versus alternatives like 'migrate_to_playwright'. While 'project-specific custom commands' implies usage for user-defined extensions rather than built-in commands, there is no explicit 'when to use' or 'when not to use' instruction.

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. Dates show when Glama detected each change.

  1. 9 tool updatesv2.1.0
    • First observedanalyze_wdio_test
    • First observedcompare_frameworks
    • First observeddetect_project_state
    • First observedgenerate_migration_report
    • First observedget_playwright_docs
    • First observedmigrate_config
    • First observedmigrate_to_playwright
    • First observedrefactor_to_pom
    • First observedregister_custom_commands

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a distinct, well-defined purpose within the migration workflow, with no overlap or ambiguity. For example, analyze_wdio_test focuses on test analysis, migrate_to_playwright handles syntax conversion, and refactor_to_pom deals with architectural refactoring, ensuring clear boundaries.

Naming Consistency5/5

All tools follow a consistent verb_noun naming pattern (e.g., analyze_wdio_test, generate_migration_report, migrate_config). The naming is uniform, readable, and predictable across all nine tools, with no deviations in style or convention.

Tool Count5/5

With 9 tools, the server is well-scoped for its purpose of migrating from WDIO to Playwright. Each tool earns its place by covering different aspects of the migration process, from analysis and comparison to actual migration and refactoring, without being overly sparse or bloated.

Completeness5/5

The tool set provides complete coverage of the migration domain, including analysis (analyze_wdio_test, detect_project_state), comparison (compare_frameworks), migration (migrate_to_playwright, migrate_config), refactoring (refactor_to_pom), documentation (get_playwright_docs), reporting (generate_migration_report), and customization (register_custom_commands). No obvious gaps exist, supporting end-to-end workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lucad87/mcp-server-tests-migration'

If you have feedback or need assistance with the MCP directory API, please join our Discord server