diff --git a/docusaurus.config.js b/docusaurus.config.js
index 49f9ef9..0837aea 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -130,6 +130,7 @@ const config = {
{ from: "/vc", to: "/" },
{ from: "/partner", to: "/" },
{ from: "/wopee-commander", to: "/" },
+ { from: "/guides/wopee-mcp", to: "/mcp" },
{
from: "/blog/top-5-applitools-alternatives-for-visual-testing--2024",
to: "/blog/applitools-alternatives",
@@ -205,6 +206,7 @@ const config = {
items: [
{ to: "/ai-testing-agents", label: "AI Agents for Software Testing" },
{ to: "/visual-testing", label: "Visual Regression Testing" },
+ { to: "/mcp", label: "MCP Server" },
{
to: "blog/playwright-bot-ai-powered-test-automation",
label: "Playwright AI Bot (preview)",
@@ -243,6 +245,10 @@ const config = {
label: "Visual Regression Testing",
to: "/visual-testing",
},
+ {
+ label: "MCP Server",
+ to: "/mcp",
+ },
{
label: "Playwright AI Agent",
to: "blog/playwright-bot-ai-powered-test-automation",
diff --git a/src/components/home-page/HomeTrustedBy.tsx b/src/components/home-page/HomeTrustedBy.tsx
index 41b7be4..6b88c70 100644
--- a/src/components/home-page/HomeTrustedBy.tsx
+++ b/src/components/home-page/HomeTrustedBy.tsx
@@ -1,69 +1,57 @@
import React from "react";
+const customers = [
+ { name: "Multitude", logo: "/img/customers/multitude-logo-wordmark.svg", invertDark: true, size: "w-[80px] sm:w-[100px]" },
+ { name: "Generali", logo: "/img/customers/generali-logo-small.svg", invertDark: true, size: "w-[145px] sm:w-[180px]" },
+ { name: "SYNOT", logo: "/img/customers/synot-logo-2.png", invertDark: true, size: "w-[135px] sm:w-[170px]" },
+ { name: "Inventi", logo: "/img/customers/inventi-logo.png", invertDark: true, size: "w-[120px] sm:w-[145px]" },
+ { name: "Tesena", logo: "/img/investors/tesena-logo.png", invertDark: true, size: "w-[130px] sm:w-[165px]" },
+ { name: "Nice Project", logo: "/img/customers/niceproject-logo.svg", invertDark: true, size: "w-[140px] sm:w-[180px]" },
+ { name: "Flashscore", logo: "/img/customers/flash-score-logo.png", invertDark: true, size: "w-[160px] sm:w-[200px]" },
+ { name: "Principal", logo: "/img/customers/principal-logo-gray.svg", noFilter: true, size: "w-[140px] sm:w-[180px]" },
+ { name: "Accenture", logo: "/img/customers/accenture-logo-gray.svg", noFilter: true, size: "w-[120px] sm:w-[145px]" },
+];
+
+const techPartners = [
+ { name: "GitHub", logo: "/img/partners/github-logo.png", size: "w-[100px] sm:w-[120px]" },
+ { name: "Anthropic", logo: "/img/partners/anthropic-logo.svg", size: "w-[130px] sm:w-[160px]" },
+ { name: "OpenAI", logo: "/img/partners/openai-logo.svg", size: "w-[100px] sm:w-[120px]" },
+ { name: "Microsoft", logo: "/img/partners/microsoft-logo.svg", size: "w-[115px] sm:w-[140px]" },
+ { name: "Amazon Web Services", logo: "/img/partners/aws-logo.svg", size: "w-[85px] sm:w-[105px]" },
+ { name: "Google Cloud", logo: "/img/partners/google-cloud-logo.png", size: "w-[125px] sm:w-[155px]" },
+];
+
const HomeTrustedBy = () => {
return (
-
-
-
-
-
-
+
+
+ Trusted by leading engineering teams
+
+
+ {customers.map((customer) => (
-
-
-
-
-
Trusted by
-
- top engineering teams
-
-
+ ))}
-
-
-
Backed by
-
- strong partners
-
-
-
-
-
-
-
+
+ Powered by world class AI and cloud partners
+
+
+ {techPartners.map((partner) => (
-
+ ))}
);
diff --git a/src/components/landing-page/home/sections/PartnerBrands.tsx b/src/components/landing-page/home/sections/PartnerBrands.tsx
index 4184ecf..e454a1e 100644
--- a/src/components/landing-page/home/sections/PartnerBrands.tsx
+++ b/src/components/landing-page/home/sections/PartnerBrands.tsx
@@ -1,52 +1,55 @@
-import PartnersCarouselCard from "@site/src/components/demo/PartnersCarouselCard";
import React from "react";
-const partners = [
- {
- name: "Multitude",
- logo: "/img/customers/multitude-logo-2.png",
- classes: "grayscale dark:invert",
- },
- {
- name: "Flash Score",
- logo: "/img/customers/flash-score-logo.png",
- classes: "grayscale dark:invert",
- },
- // {
- // name: "Kedros",
- // logo: "/img/customers/kedros-logo-2.png",
- // classes: "grayscale rounded-lg",
- // },
- {
- name: "Inventi",
- logo: "/img/customers/inventi-logo-2.png",
- classes: "grayscale dark:invert",
- },
+const customers = [
+ { name: "Multitude", logo: "/img/customers/multitude-logo-wordmark.svg", invertDark: true, size: "w-[80px] sm:w-[100px]" },
+ { name: "Generali", logo: "/img/customers/generali-logo-small.svg", invertDark: true, size: "w-[145px] sm:w-[180px]" },
+ { name: "SYNOT", logo: "/img/customers/synot-logo-2.png", invertDark: true, size: "w-[135px] sm:w-[170px]" },
+ { name: "Inventi", logo: "/img/customers/inventi-logo.png", invertDark: true, size: "w-[120px] sm:w-[145px]" },
+ { name: "Tesena", logo: "/img/investors/tesena-logo.png", invertDark: true, size: "w-[130px] sm:w-[165px]" },
+ { name: "Nice Project", logo: "/img/customers/niceproject-logo.svg", invertDark: true, size: "w-[140px] sm:w-[180px]" },
+ { name: "Flashscore", logo: "/img/customers/flash-score-logo.png", invertDark: true, size: "w-[160px] sm:w-[200px]" },
+ { name: "Principal", logo: "/img/customers/principal-logo-gray.svg", noFilter: true, size: "w-[140px] sm:w-[180px]" },
+ { name: "Accenture", logo: "/img/customers/accenture-logo-gray.svg", noFilter: true, size: "w-[120px] sm:w-[145px]" },
+];
+
+const techPartners = [
+ { name: "GitHub", logo: "/img/partners/github-logo.png", size: "w-[100px] sm:w-[120px]" },
+ { name: "Anthropic", logo: "/img/partners/anthropic-logo.svg", size: "w-[130px] sm:w-[160px]" },
+ { name: "OpenAI", logo: "/img/partners/openai-logo.svg", size: "w-[100px] sm:w-[120px]" },
+ { name: "Microsoft", logo: "/img/partners/microsoft-logo.svg", size: "w-[115px] sm:w-[140px]" },
+ { name: "Amazon Web Services", logo: "/img/partners/aws-logo.svg", size: "w-[85px] sm:w-[105px]" },
+ { name: "Google Cloud", logo: "/img/partners/google-cloud-logo.png", size: "w-[125px] sm:w-[155px]" },
];
const PartnerBrands = () => {
return (
-
-
-
- Join{" "}
-
- top engineering teams
- {" "}
- and start your free trial
-
-
- Empower your team with fast, scalable visual testing. Trusted by
- industry leaders to maintain the visual integrity of their apps.
-
+
+
+ Trusted by leading engineering teams
+
+
+
+ {customers.map((customer) => (
+
+ ))}
-
- {partners.map((partner) => (
-
+ Powered by world class AI and cloud partners
+
+
+
+ {techPartners.map((partner) => (
+
))}
diff --git a/src/components/landing-page/home/sections/TestimonialCarousel.tsx b/src/components/landing-page/home/sections/TestimonialCarousel.tsx
index 8770562..c1dcb46 100644
--- a/src/components/landing-page/home/sections/TestimonialCarousel.tsx
+++ b/src/components/landing-page/home/sections/TestimonialCarousel.tsx
@@ -1,5 +1,3 @@
-import { mdiFormatQuoteClose, mdiFormatQuoteOpen } from "@mdi/js";
-import Icon from "@mdi/react";
import React, { useState, useEffect } from "react";
const testimonials = [
@@ -43,41 +41,30 @@ const Testimonial = ({
activeItemIndex === itemIndex
? "block md:opacity-100"
: "hidden md:opacity-0"
- } md:absolute md:top-1/2 md:-translate-y-1/2 md:left-0 md:w-full transition-opacity duration-500 flex flex-col lg:flex-row gap-5 lg:gap-10 items-center`}
+ } md:absolute md:inset-0 transition-opacity duration-500 flex items-center justify-center px-4`}
>
-
-
-
+
+
+ “
{quote}
-
+ ”
-
+
{about}
-
-
-
-
-
-
-
{name}
-
{position}
+
+
+
-
-
-
-
-
+
@@ -139,7 +126,7 @@ const TestimonialCarousel = () => {
-
+
{testimonials.map((testimonial, index) => (
+
+
-
-
diff --git a/src/pages/mcp/index.tsx b/src/pages/mcp/index.tsx
new file mode 100644
index 0000000..a8e017f
--- /dev/null
+++ b/src/pages/mcp/index.tsx
@@ -0,0 +1,577 @@
+import {
+ mdiEyeCheckOutline,
+ mdiTestTube,
+ mdiCogSync,
+ mdiChartLine,
+ mdiLightningBolt,
+ mdiPuzzle,
+ mdiGithub,
+ mdiNpm,
+} from "@mdi/js";
+import Icon from "@mdi/react";
+import React, { useState, useEffect } from "react";
+import Link from "@docusaurus/Link";
+
+import Layout from "@theme/Layout";
+import ButtonPrimary from "@site/src/components/buttons/ButtonPrimary";
+import TestimonialCarousel from "@site/src/components/landing-page/home/sections/TestimonialCarousel";
+import ButtonPrimaryInverted from "@site/src/components/buttons/ButtonPrimaryInverted";
+
+const CAPABILITIES = [
+ {
+ icon: mdiLightningBolt,
+ title: "Generate Test Content",
+ tool: "wopee_generate_artifact",
+ description:
+ "Generate user stories, test cases, test steps, and Playwright code from your app context.",
+ },
+ {
+ icon: mdiTestTube,
+ title: "Dispatch Testing Agent",
+ tool: "wopee_dispatch_agent",
+ description:
+ "One prompt launches an AI agent that explores your app, tests interactions, and reports back.",
+ },
+ {
+ icon: mdiEyeCheckOutline,
+ title: "Analyze & Create Suites",
+ tool: "wopee_dispatch_analysis",
+ description:
+ "Create a new suite and auto-analyze it with custom variables and instructions.",
+ },
+ {
+ icon: mdiChartLine,
+ title: "Fetch Test Data",
+ tool: "wopee_fetch_artifact",
+ description:
+ "Get generated artifacts — user stories, test cases, screenshots, and reports — right in your conversation.",
+ },
+ {
+ icon: mdiCogSync,
+ title: "Refine Tests",
+ tool: "wopee_update_artifact",
+ description:
+ "Update test cases, user stories, and steps through conversation. Iterate on the fly.",
+ },
+ {
+ icon: mdiPuzzle,
+ title: "Suite Management",
+ tool: "wopee_create_blank_suite",
+ description:
+ "Create and browse test suites without opening the dashboard.",
+ },
+];
+
+const COMPATIBLE_TOOLS = [
+ {
+ name: "Claude Code",
+ description: "CLI agent by Anthropic",
+ icon: "CC",
+ gradient: "from-orange-500 to-amber-500",
+ },
+ {
+ name: "Claude Desktop",
+ description: "AI agent by Anthropic",
+ icon: "CD",
+ gradient: "from-orange-400 to-yellow-500",
+ },
+ {
+ name: "Cursor",
+ description: "AI-first code editor",
+ icon: "Cu",
+ gradient: "from-blue-500 to-indigo-500",
+ },
+ {
+ name: "VS Code",
+ description: "With Copilot or extensions",
+ icon: "VS",
+ gradient: "from-sky-500 to-blue-600",
+ },
+ {
+ name: "Windsurf",
+ description: "AI-powered IDE",
+ icon: "Ws",
+ gradient: "from-teal-400 to-emerald-500",
+ },
+];
+
+const STEPS = [
+ {
+ step: "1",
+ title: "Install",
+ subtitle: "One npm package, instant setup",
+ code: "npm install -g wopee-mcp\n# or run directly\nnpx wopee-mcp",
+ description:
+ "Run instantly with npx — the server starts in seconds. No global install needed.",
+ },
+ {
+ step: "2",
+ title: "Connect",
+ subtitle: "Works with any MCP client",
+ code: '// Add to your MCP config:\n{\n "wopee": {\n "command": "npx",\n "args": ["-y", "wopee-mcp"],\n "env": {\n "WOPEE_API_KEY": "your-key",\n "WOPEE_PROJECT_UUID": "your-id"\n }\n }\n}',
+ description:
+ "Two values from your Wopee.io dashboard. Paste into your AI tool's MCP config — that's all you need.",
+ },
+ {
+ step: "3",
+ title: "Test",
+ subtitle: "Natural language, real results",
+ code: '"Generate stories for login and test them"\n\n wopee_generate_artifact 3 user stories created\n wopee_dispatch_agent running 5 test cases...\n\n 4 passed | 1 issue found',
+ description:
+ "Ask your AI to test any flow. It generates stories, dispatches agents, and explains findings — all in natural language.",
+ },
+];
+
+const TERMINAL_LINES = [
+ { type: "user", text: "Create user stories for the checkout flow and test them", delay: 0 },
+ { type: "tool", name: "wopee_generate_artifact", text: "3 user stories with test cases", delay: 1200 },
+ { type: "tool", name: "wopee_dispatch_agent", text: "running 8 test cases...", delay: 2200 },
+ { type: "claude", text: "7 of 8 test cases passed. Found 1 issue: the promo code field accepts empty submissions. Full report and traces attached.", delay: 3800 },
+ { type: "user", text: "Update the test case to validate non-empty input.", delay: 6000 },
+ { type: "tool", name: "wopee_update_artifact", text: "test case updated", delay: 7200 },
+];
+
+const TerminalAnimation = () => {
+ const [visibleLines, setVisibleLines] = useState(0);
+
+ useEffect(() => {
+ const timers = TERMINAL_LINES.map((line, index) =>
+ setTimeout(() => setVisibleLines(index + 1), line.delay)
+ );
+ return () => timers.forEach(clearTimeout);
+ }, []);
+
+ return (
+
+ {TERMINAL_LINES.slice(0, visibleLines).map((line, i) => {
+ if (line.type === "user") {
+ return (
+
0 ? "mt-4" : ""} mb-3 animate-[fadeIn_0.3s_ease-in]`}>
+ You: {" "}
+ {line.text}
+
+ );
+ }
+ if (line.type === "tool") {
+ const isFirst = i === 0 || TERMINAL_LINES[i - 1]?.type !== "tool";
+ const isLast = i === TERMINAL_LINES.length - 1 || TERMINAL_LINES[i + 1]?.type !== "tool";
+ return (
+
+ {line.name} {" "}
+ {line.text}
+
+ );
+ }
+ if (line.type === "claude") {
+ return (
+
+ Claude: {" "}
+ {line.text}
+
+ );
+ }
+ return null;
+ })}
+ {visibleLines < TERMINAL_LINES.length && (
+
+ )}
+
+ );
+};
+
+const HeroSection = () => (
+
+
+
+
+ MCP Server
+
+
+ Available on npm
+
+
+
+
+
+ Autonomous testing
+
+
+ {" "}in your AI coding agent
+
+
+
+ Connect to Wopee.io and dispatch testing agents, generate tests,
+ and manage suites — without leaving your editor.
+
+
+
+
+
+ No credit card required
+
+
+
+ View on GitHub
+
+ →
+
+
+
+
+
+ npm package
+ •
+ 7 MCP tools
+ •
+ Node.js 18+
+
+
+
+
+
+
+
+
+ AI Agent + Wopee.io MCP
+
+
+
mcp connected
+
+
+
+ Read the docs →
+
+
+
+);
+
+const ProblemSection = () => (
+
+
+ Your AI can code. But who tests the output?
+
+
+
+
✗
+
+ Your CI catches technical errors but{" "}
+ misses broken user flows
+
+
+
+
✗
+
+ Writing test scripts manually{" "}
+ slows down every release
+
+
+
+
✗
+
+ You leave your editor to{" "}
+ open a separate testing dashboard
+
+
+
+
✗
+
+ Testing dozens of user flows manually{" "}
+ doesn't scale
+
+
+
+
+
+ Wopee.io MCP bridges the gap. Test from where you code.
+
+
+
+);
+
+const CapabilitiesSection = () => (
+
+
+
+ Complete testing workflow
+
+
+ From generating tests to dispatching autonomous agents — all through conversation
+
+
+
+
+ {CAPABILITIES.map((cap) => (
+
+
+
+
+
{cap.title}
+
+ {cap.tool}
+
+
{cap.description}
+
+ ))}
+
+
+
+
+
+ Read the docs →
+
+
+
+);
+
+const HowItWorksSection = () => (
+
+
+
+ Up and running in{" "}
+
+ 3 minutes
+
+
+
+ Install the npm package, add it to your MCP config, and start testing
+
+
+
+
+ {STEPS.map((step, index) => (
+
+
+
+
+
+
+ {index === 0
+ ? "terminal"
+ : index === 1
+ ? "mcp-config.json"
+ : "conversation"}
+
+
+
+ {step.code}
+
+
+
+
+
+
+
+ {step.step}
+
+
{step.title}
+
+
+ {step.subtitle}
+
+
{step.description}
+
+
+ ))}
+
+
+);
+
+const CompatibleToolsSection = () => (
+
+
+
+ Plug into the AI tools you already use
+
+
+ The{" "}
+
+ Model Context Protocol (MCP)
+ {" "}
+ is the open standard that lets AI agents use external tools.
+ Any MCP-compatible client works with Wopee.io.
+
+
+
+
+ {COMPATIBLE_TOOLS.map((tool) => (
+
+
+ {tool.icon}
+
+
+
{tool.name}
+
{tool.description}
+
+
+ ))}
+
+
+
+
+
Any MCP client
+
Open standard
+
+
+
+
+
+
+
+
+);
+
+const OpenSourceSection = () => (
+
+
+
+
+
+
+
+ Available on GitHub and npm
+
+
+ The Wopee.io MCP server is published on npm and the source code is
+ available on GitHub. Install in seconds, inspect the code, and
+ contribute if you'd like.
+
+
+
+
+ Star on GitHub
+
+
+
+ npm
+
+
+
+
+
+ {[
+ ["wopee_dispatch_agent", "Launch autonomous agent"],
+ ["wopee_dispatch_analysis", "Analyze test results"],
+ ["wopee_fetch_artifact", "Get screenshots & reports"],
+ ["wopee_generate_artifact", "Generate test content"],
+ ["wopee_update_artifact", "Refine tests"],
+ ["wopee_create_blank_suite", "Create test suite"],
+ ["wopee_fetch_analysis_suites", "List all suites"],
+ ].map(([tool, desc]) => (
+
+ {tool}
+ — {desc}
+
+ ))}
+
+
+
+
+);
+
+const McpPage = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ Bring autonomous testing to your AI workflow
+
+
+ Set up in minutes, start testing immediately.
+
+
+
+
+
+
No credit card required
+
+
+
+
+
+
+
+
+ );
+};
+export default McpPage;
diff --git a/static/img/customers/accenture-logo-gray.svg b/static/img/customers/accenture-logo-gray.svg
new file mode 100644
index 0000000..b8b716f
--- /dev/null
+++ b/static/img/customers/accenture-logo-gray.svg
@@ -0,0 +1 @@
+
diff --git a/static/img/customers/accenture-logo.svg b/static/img/customers/accenture-logo.svg
new file mode 100644
index 0000000..a4baf78
--- /dev/null
+++ b/static/img/customers/accenture-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/customers/generali-logo-small.svg b/static/img/customers/generali-logo-small.svg
new file mode 100644
index 0000000..29b0132
--- /dev/null
+++ b/static/img/customers/generali-logo-small.svg
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/customers/multitude-logo-wordmark.svg b/static/img/customers/multitude-logo-wordmark.svg
new file mode 100644
index 0000000..ab1ae56
--- /dev/null
+++ b/static/img/customers/multitude-logo-wordmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/customers/niceproject-logo.svg b/static/img/customers/niceproject-logo.svg
new file mode 100644
index 0000000..1d492ed
--- /dev/null
+++ b/static/img/customers/niceproject-logo.svg
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/customers/principal-logo-gray.svg b/static/img/customers/principal-logo-gray.svg
new file mode 100644
index 0000000..3542d98
--- /dev/null
+++ b/static/img/customers/principal-logo-gray.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/customers/principal-logo.svg b/static/img/customers/principal-logo.svg
new file mode 100644
index 0000000..ba8a82c
--- /dev/null
+++ b/static/img/customers/principal-logo.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/img/partners/anthropic-logo.svg b/static/img/partners/anthropic-logo.svg
new file mode 100644
index 0000000..cbcc39e
--- /dev/null
+++ b/static/img/partners/anthropic-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/partners/aws-logo.svg b/static/img/partners/aws-logo.svg
new file mode 100644
index 0000000..cd27e72
--- /dev/null
+++ b/static/img/partners/aws-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/partners/github-logo.png b/static/img/partners/github-logo.png
new file mode 100755
index 0000000..1471f31
Binary files /dev/null and b/static/img/partners/github-logo.png differ
diff --git a/static/img/partners/google-cloud-logo.png b/static/img/partners/google-cloud-logo.png
new file mode 100644
index 0000000..82654d2
Binary files /dev/null and b/static/img/partners/google-cloud-logo.png differ
diff --git a/static/img/partners/google-cloud-logo.svg b/static/img/partners/google-cloud-logo.svg
new file mode 100644
index 0000000..b8fbe9f
--- /dev/null
+++ b/static/img/partners/google-cloud-logo.svg
@@ -0,0 +1,11 @@
+
+
+
+
+ Error 404 (Not Found)!!1
+
+
+ 404. That’s an error.
+
The requested URL /devrel-devsite/prod/v0e0f589edd85502a40d78d7d0825db8ea5ef3b99058d2a037c4baf28c47810e6/cloud/images/cloud-logo.svg was not found on this server. That’s all we know.
diff --git a/static/img/partners/microsoft-logo.svg b/static/img/partners/microsoft-logo.svg
new file mode 100644
index 0000000..6d169a8
--- /dev/null
+++ b/static/img/partners/microsoft-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/img/partners/openai-logo.svg b/static/img/partners/openai-logo.svg
new file mode 100644
index 0000000..859d7af
--- /dev/null
+++ b/static/img/partners/openai-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file