Skip to main content
Glama
jprealini

MCP Cypress Page Object Generator

by jprealini

MCP Cypress Page Object Generator

This MCP server automatically generates Cypress Page Object classes for any web page provided.

NPM package:

npm version

Related MCP server: Web-QA

Features

  • Web Scraping: Uses Puppeteer to fetch and render web pages

  • HTML Parsing: Uses Cheerio to parse HTML and extract element information

  • Page Object Generation: Creates complete TypeScript Page Object classes with:

    • Private element locators

    • Public getter methods

    • Interaction methods (click, type, select, etc.)

Sample prompt:

Create a page object file using the following url: https://www.saucedemo.com/ 

Generated Output

The server generates:

1. Page Object Class ({ClassName}.ts)

export class ExampleComLoginPage {
  // Private elements
  #elements = {
    button_login: () => cy.get('#login-button'),
    input_username: () => cy.get('input[name="username"]'),
    link_home: () => cy.contains('a', 'Home')
  }

  // Public getters
  get ButtonLogin() { return this.#elements.button_login() }
  get InputUsername() { return this.#elements.input_username() }
  get LinkHome() { return this.#elements.link_home() }

  // Interaction methods
  clickButtonLogin() { return this.#elements.button_login().click() }
  typeInputUsername(text: string) { return this.#elements.input_username().type(text) }
  clickLinkHome() { return this.#elements.link_home().click() }

}

Element Types Supported

  • Buttons: Click interactions with validation

  • Input Fields: Type, clear, check/uncheck (for checkboxes/radio)

  • Links: Click interactions with navigation verification

  • Select Dropdowns: Select options with validation

  • Textareas: Type and clear with content verification

  • Forms: Submit interactions with success/error handling

Installation

Follow standard procedures to install an MCP in the client of your choice

Usage

  1. Start the server:

    node index.js
  2. Use with an MCP client: The server exposes a generatePageObjectFile tool that accepts a URL parameter.

    Example tool call:

    {
      "method": "tools/call",
      "params": {
        "name": "generatePageObjectFile",
        "arguments": {
          "url": "https://example.com/login"
        }
      }
    }
  3. Response format: The server returns both the Page Object class:

    // ===== PAGE OBJECT CLASS =====
    // Save this as: ExampleComLoginPage.ts
    export class ExampleComLoginPage { ... } 
    

Dependencies

  • @modelcontextprotocol/sdk: MCP server implementation

  • puppeteer: Web scraping and page rendering

  • cheerio: HTML parsing and element selection

  • zod: Schema validation

  • typescript: Type safety

Error Handling

The server includes comprehensive error handling for:

  • Invalid URLs

  • Network connectivity issues

  • Page loading failures

  • HTML parsing errors

Browser Configuration

The server uses Puppeteer with the following settings:

  • Headless mode for server environments

  • No-sandbox mode for containerized deployments

  • Network idle waiting for dynamic content

Contributing

To add support for new element types, interaction methods, or test patterns, modify the generatePageObjectClass function in index.js.

Troubleshooting: Updating to the Latest MCP Version

If you are intending to update to the latest version of this MCP server package but the new version is not being pulled by npm, try this:

  1. Clear the NPM cache and reinstall the package:

    npm cache clean --force
    npm install @jprealini/cypress-mcp@latest --save-dev
  2. If using a lockfile (package-lock.json or yarn.lock), delete it and run:

    npm install
  3. For global installs, update globally:

    npm install -g @jprealini/cypress-mcp@latest
  4. Verify the installed version:

    npm list @jprealini/cypress-mcp

These steps ensure consumers always get the latest published MCP version and avoid issues with cached or locked old versions.

Example: Generated Page Object Format (saucedemo.com)

Below is an example of the expected Page Object format generated by MCP for saucedemo.com:

export class Swag_labsPage {
  // Private elements
  #elements = {
    inputUsername: () => cy.get('[data-test="username"]'),
    inputPassword: () => cy.get('[data-test="password"]'),
    inputLoginButton: () => cy.get('[data-test="login-button"]')
  }

  // Element meta (currently not used for bulk actions)

  // Public getters
  get inputUsername() { return this.#elements.inputUsername() }
  get inputPassword() { return this.#elements.inputPassword() }
  get inputLoginButton() { return this.#elements.inputLoginButton() }

  // Value/State getters
  getValueInputUsername() { return this.#elements.inputUsername().invoke('val') }
  getValueInputPassword() { return this.#elements.inputPassword().invoke('val') }
  getTextInputLoginButton() { return this.#elements.inputLoginButton().invoke('text') }

  // Interaction methods (per-element actions)
  typeInputUsername(text) { return this.#elements.inputUsername().type(text) }
  clearInputUsername() { return this.#elements.inputUsername().clear() }
  typeInputPassword(text) { return this.#elements.inputPassword().type(text) }
  clearInputPassword() { return this.#elements.inputPassword().clear() }
  clickInputLoginButton() { return this.#elements.inputLoginButton().click() }
}

This format follows one of the mostly used page object standards, using data attributes for selectors, private element encapsulation, public getters, value/state getters, and interaction methods for each element.

If you need or expect a different pattern, you can generate this base structure using this MCP, and then use your own instruction set to edit it to fit your needs, using a prompt like:

Create a page object file using the following url: https://www.saucedemo.com/ and after creating it, edit it to meet the requirements described in my instructions.md file

Available Tools

1 tool
create_Page_Object_fileCreate Page Object FileC

Create Page Object file directly in the Cypress project by analyzing the provided URL

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the web page
workspacePathNoWorkspace path (optional, it is detected automatically if not provided)
pageObjectNameNoCustom name for the page object (optional)

TDQS

C2.9/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 of behavioral disclosure. It states the tool creates a file by analyzing a URL but omits critical details like what permissions are needed, how the analysis works, whether it overwrites existing files, error handling, or output format. This is inadequate for a tool that performs file creation and web analysis.

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?

The description is a single, efficient sentence that directly states the tool's action and key input (URL). It is front-loaded with the core purpose and wastes no words, making it highly concise and well-structured.

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?

Given the tool's complexity (involving file creation, URL analysis, and Cypress integration), no annotations, and no output schema, the description is insufficient. It lacks details on behavioral traits, error cases, or what the created file contains, leaving significant gaps for an AI agent to understand and use the tool correctly.

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 parameters. The description adds no additional meaning beyond implying URL analysis, which is already suggested by the parameter descriptions. This meets the baseline of 3 since the schema handles parameter documentation effectively.

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's purpose: 'Create Page Object file directly in the Cypress project by analyzing the provided URL.' It specifies the verb ('Create'), resource ('Page Object file'), and context ('Cypress project'), but lacks differentiation from siblings since none exist, making a perfect 5 unnecessary.

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 provides no guidance on when to use this tool versus alternatives, prerequisites, or exclusions. It mentions analyzing a URL but doesn't specify what types of URLs are suitable or any constraints, leaving usage unclear beyond the basic action.

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. 3 tool updatesv1.0.0
    • Addedcreate_Page_Object_file
    • RemovedcreateCypressFiles
    • RemovedgenerateLocator
  2. 2 tool updates
    • First observedcreateCypressFiles
    • First observedgenerateLocator

TDQS

B3.1/5.0
Disambiguation5/5

With only one tool, there is no possibility for ambiguity or overlap between tools. The single tool has a clear, distinct purpose focused on creating a Page Object file from a URL.

Naming Consistency5/5

The single tool name follows a consistent verb_noun pattern (create_Page_Object_file), and with only one tool, there is no inconsistency to evaluate. The naming is clear and predictable.

Tool Count2/5

One tool is too few for a server named 'MCP Cypress Page Object Generator', as it suggests a broader scope for generating and managing page objects. A single tool feels thin and incomplete for this domain, limiting functionality to just creation without supporting operations like updating, listing, or deleting.

Completeness2/5

The tool surface is severely incomplete for page object generation. It only provides creation from a URL, with no tools for updating existing files, listing generated objects, deleting them, or handling other aspects like validation or testing integration. This will cause significant agent failures in typical 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/jprealini/cypress-mcp'

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