by jprealini
Automate Cypress test creation: analyze pages with Puppeteer to extract DOM elements and generate page object models, se
Automatically generates Cypress Page Object Model classes by scraping web pages and extracting DOM elements with proper selectors and interaction methods.
Cypress Test Generator is a community-built MCP server published by jprealini that provides AI assistants with tools and capabilities via the Model Context Protocol. Automate Cypress test creation: analyze pages with Puppeteer to extract DOM elements and generate page object models, se It is categorized under browser automation, search web.
You can install Cypress Test Generator in your AI client of choice. Use the install panel on this page to get one-click setup for Cursor, Claude Desktop, VS Code, and other MCP-compatible clients. This server runs locally on your machine via the stdio transport.
MIT
Cypress Test Generator is released under the MIT license. This is a permissive open-source license, meaning you can freely use, modify, and distribute the software.
Fetch and extract information from websites automatically
Example
Research competitor pricing, scrape product reviews, monitor news mentions
Automate 5-10 hours/week of manual web research
Track website changes, new content, price updates
Example
Monitor competitor blog for new posts, track stock availability, watch for pricing changes
Stay informed without manual checking, never miss important updates
Extract structured data from multiple websites
Example
Compile product listings from 10 e-commerce sites, aggregate job postings, collect real estate data
Build datasets 100x faster than manual copying
Share your MCP server with the developer community
According to our notes, Cypress Test Generator benefits from clear Model Context Protocol framing — fewer ambiguous “AI plugin” claims.
Cypress Test Generator is a well-scoped MCP server in the explainx.ai directory — install snippets and categories matched our Claude Code setup.
Cypress Test Generator is among the better-indexed MCP projects we tried; the explainx.ai summary tracks the official description.
Cypress Test Generator has been reliable for tool-calling workflows; the MCP profile page is a good permalink for internal docs.
We wired Cypress Test Generator into a staging workspace; the listing’s GitHub and npm pointers saved time versus hunting across READMEs.
Cypress Test Generator has been reliable for tool-calling workflows; the MCP profile page is a good permalink for internal docs.
Cypress Test Generator reduced integration guesswork — categories and install configs on the listing matched the upstream repo.
Useful MCP listing: Cypress Test Generator is the kind of server we cite when onboarding engineers to host + tool permissions.
Cypress Test Generator is a well-scoped MCP server in the explainx.ai directory — install snippets and categories matched our Claude Code setup.
According to our notes, Cypress Test Generator benefits from clear Model Context Protocol framing — fewer ambiguous “AI plugin” claims.
showing 1-10 of 52
This MCP server automatically generates Cypress Page Object classes for any web page provided.
<a href="https://glama.ai/mcp/servers/@jprealini/cypress-mcp"> <img width="380" height="200" src="https://glama.ai/mcp/servers/@jprealini/cypress-mcp/badge" alt="Cypress Page Object Generator MCP server" /> </a>Create a page object file using the following url: https://www.saucedemo.com/
The server generates:
{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() }
}
Follow standard procedures to install an MCP in the client of your choice
Start the server:
node index.js
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"
}
}
}
Response format: The server returns both the Page Object class:
// ===== PAGE OBJECT CLASS =====
// Save this as: ExampleComLoginPage.ts
export class ExampleComLoginPage { ... }
@modelcontextprotocol/sdk: MCP server implementationpuppeteer: Web scraping and page renderingcheerio: HTML parsing and element selectionzod: Schema validationtypescript: Type safetyThe server includes comprehensive error handling for:
The server uses Puppeteer with the following settings:
To add support for new element types, interaction methods, or test patterns, modify the generatePageObjectClass function in index.js.
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:
npm cache clean --force
npm install @jprealini/cypress-mcp@latest --save-dev
package-lock.json or yarn.lock), delete it and run:
npm install
npm install -g @jprealini/cypress-mcp@latest
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.
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
Interact with services that don't offer APIs
Example
Check form submissions, validate website functionality, test user flows
Automate interactions with any website, even without API
Prerequisites
Time Estimate
20-40 minutes including configuration and testing
Steps
Troubleshooting
✓ Do
✗ Don't
💡 Pro Tips
Architecture
MCP server handles HTTP requests, HTML parsing, JavaScript rendering (if headless browser), and returns structured data to Claude.
Protocols
Compatibility
✓ Use when
Use for research automation, content monitoring, data aggregation from multiple sources, and when official APIs don't exist. Best for read-only information gathering.
✗ Avoid when
Avoid for sites with APIs (use API instead), sites that explicitly forbid scraping, when data is copyrighted, or for login-required content without proper authorization.