@debugg-ai/debugg-ai-mcp 1.0.11 โ†’ 1.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # ๐Ÿงช Official MCP Server for Debugg AI
2
2
 
3
- **AI-driven browser automation and E2E test server** implementing the [Model Context Protocol (MCP)](https://modelcontext.org), designed to help AI agents test UI changes, simulate user behavior, and analyze visual outputs of running web applications โ€” all via natural language and CLI tools.
3
+ **AI-driven browser automation and E2E test server** implementing the [Model Context Protocol (MCP)](https://modelcontext.org), designed to help AI agents test UI changes, simulate user behavior, and analyze visual outputs of running web applications โ€” all via natural language and CLI tools.
4
+
5
+ End to end testing used to be a nightmare. Not just to setup, but to manage over time as you made changes to your app.
6
+
7
+ Debugg AI's MCP server offers a NEW way to test, where you never have to worry about setting up `playwright`, local browsers or proxies with it fully remote, managed browsers that simply connect to a server running locally or remotely via a secure `tunnel`.
8
+
9
+ That means no distracting chrome pop ups as it's running tests, no managing chrome or playwright versions, and best of all - ZERO CONFIGURATION. Just grab an API key and add us to your MCP server list.
10
+
11
+ Should you want to later rerun those tests or create a suite of them to run in your CI / CD pipeline, you can see all historical test results in your dashboard - [Debugg.AI App](https://app.debugg.ai)
4
12
 
5
13
 
6
14
  ---
@@ -27,6 +35,28 @@
27
35
 
28
36
  ---
29
37
 
38
+ ## Examples
39
+
40
+ ### Input prompt: "Test the ability to create an account and login"
41
+
42
+ ![Test Create Account and Login](/assets/recordings/test-create-account-login.gif)
43
+
44
+ ### Results:
45
+
46
+ **Task Completed**
47
+
48
+ - Duration: 86.80 seconds
49
+ - Final Result: Successfully completed the task of signing up and logging into the account with the email 'alice.wonderland1234@example.com'.
50
+ - Status: Success
51
+
52
+ ### Full Demo:
53
+
54
+ > Watch a more in-depth, [Full Use Case Demo](https://debugg.ai/demo)
55
+
56
+
57
+ ---
58
+
59
+
30
60
 
31
61
  ## ๐Ÿ› ๏ธ Quickstart
32
62
 
@@ -44,7 +74,6 @@ Use this when testing or integrating into tools like Claude Desktop or your own
44
74
 
45
75
  ```bash
46
76
  docker run -i --rm --init \
47
- -e ENVIRONMENT=local \
48
77
  -e DEBUGGAI_API_KEY=your_api_key \
49
78
  -e TEST_USERNAME_EMAIL=your_test_email \
50
79
  -e TEST_USER_PASSWORD=your_password \
@@ -87,11 +116,9 @@ ensure new functionality works as expected.
87
116
  "command": "npx",
88
117
  "args": ["-y", "@debugg-ai/debugg-ai-mcp"],
89
118
  "env": {
90
- "ENVIRONMENT": "local",
91
119
  "DEBUGGAI_API_KEY": "YOUR_API_KEY",
92
120
  "TEST_USERNAME_EMAIL": "test@example.com",
93
121
  "TEST_USER_PASSWORD": "supersecure",
94
- "MCP_REQUEST_TIMEOUT_RESET_ON_PROGRESS": "true",
95
122
  "DEBUGGAI_LOCAL_PORT": 3000,
96
123
  "DEBUGGAI_LOCAL_REPO_NAME": "org/project",
97
124
  "DEBUGGAI_LOCAL_BRANCH_NAME": "main",
@@ -117,7 +144,6 @@ ensure new functionality works as expected.
117
144
  | `DEBUGGAI_LOCAL_BRANCH_NAME` | Branch name | โŒ |
118
145
  | `DEBUGGAI_LOCAL_REPO_PATH` | Local path to repo root | โŒ |
119
146
  | `DEBUGGAI_LOCAL_FILE_PATH` | File to test | โŒ |
120
- | `MCP_REQUEST_TIMEOUT_RESET_ON_PROGRESS` | Prevents client timeouts during long tests | โŒ |
121
147
 
122
148
 
123
149
  ---
@@ -131,7 +131,7 @@ export class E2eTestRunner {
131
131
  await stopTunnel(`https://${e2eRun.key}.ngrok.debugg.ai`);
132
132
  stopped = true;
133
133
  }
134
- }, 5000);
134
+ }, 1500);
135
135
  while (!stopped) {
136
136
  await new Promise(resolve => setTimeout(resolve, 1000));
137
137
  }
package/dist/index.js CHANGED
@@ -140,11 +140,11 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
140
140
  // }
141
141
  // many clients don't support gif yet, so default to jpg
142
142
  const finalScreenshot = finalRun?.finalScreenshot;
143
- let base64 = "";
143
+ let baseEncodedImage = "";
144
144
  if (finalScreenshot) {
145
145
  const response = await fetch(finalScreenshot);
146
146
  const arrayBuffer = await response.arrayBuffer();
147
- base64 = Buffer.from(arrayBuffer).toString('base64');
147
+ baseEncodedImage = Buffer.from(arrayBuffer).toString('base64');
148
148
  }
149
149
  const responseContent = [
150
150
  {
@@ -152,13 +152,14 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
152
152
  text: JSON.stringify({ testOutcome, testDetails }, null, 2),
153
153
  }
154
154
  ];
155
- // if (base64) {
156
- // responseContent.push({
157
- // type: "image",
158
- // data: base64,
159
- // mimeType: "image/jpg",
160
- // })
161
- // }
155
+ if (baseEncodedImage) {
156
+ responseContent.push({
157
+ type: "image",
158
+ data: baseEncodedImage,
159
+ mimeType: "image/png"
160
+ });
161
+ }
162
+ console.error("Response content:", responseContent);
162
163
  return {
163
164
  content: responseContent,
164
165
  };
@@ -33,7 +33,7 @@ export const createCoverageService = (tx) => ({
33
33
  branchName: branchName,
34
34
  };
35
35
  const response = await tx.post(serverUrl, { ...fileParams });
36
- console.error("Raw API response:", response);
36
+ // console.error("Raw API response:", response);
37
37
  return response;
38
38
  }
39
39
  catch (err) {
@@ -75,7 +75,7 @@ export const createCoverageService = (tx) => ({
75
75
  branchName: branchName,
76
76
  };
77
77
  const response = await tx.post(serverUrl, { ...fileParams });
78
- console.error("Raw API response:", response);
78
+ // console.error("Raw API response:", response);
79
79
  return response;
80
80
  }
81
81
  catch (err) {
@@ -116,7 +116,7 @@ export const createCoverageService = (tx) => ({
116
116
  branchName: branchName,
117
117
  };
118
118
  const response = await tx.get(serverUrl, { ...fileParams });
119
- console.error("Raw API response:", response);
119
+ // console.error("Raw API response:", response);
120
120
  return response;
121
121
  }
122
122
  catch (err) {
@@ -33,7 +33,7 @@ export const createE2esService = (tx) => ({
33
33
  branchName: branchName,
34
34
  };
35
35
  const response = await tx.post(serverUrl, { ...fileParams });
36
- console.error("Raw API response:", response);
36
+ // console.error("Raw API response:", response);
37
37
  return response;
38
38
  }
39
39
  catch (err) {
@@ -74,7 +74,7 @@ export const createE2esService = (tx) => ({
74
74
  branchName: branchName,
75
75
  };
76
76
  const response = await tx.post(serverUrl, { ...fileParams });
77
- console.error("Raw API response:", response);
77
+ // console.error("Raw API response:", response);
78
78
  return response;
79
79
  }
80
80
  catch (err) {
@@ -113,7 +113,7 @@ export const createE2esService = (tx) => ({
113
113
  branchName: branchName,
114
114
  };
115
115
  const response = await tx.post(serverUrl, { ...fileParams });
116
- console.error("Raw API response:", response);
116
+ // console.error("Raw API response:", response);
117
117
  return response;
118
118
  }
119
119
  catch (err) {
@@ -128,7 +128,7 @@ export const createE2esService = (tx) => ({
128
128
  try {
129
129
  const serverUrl = `api/v1/e2e-runs/${uuid}/`;
130
130
  const response = await tx.get(serverUrl, { ...params });
131
- console.error("Raw API response:", response);
131
+ // console.error("Raw API response:", response);
132
132
  return response;
133
133
  }
134
134
  catch (err) {
@@ -143,7 +143,7 @@ export const createE2esService = (tx) => ({
143
143
  try {
144
144
  const serverUrl = `api/v1/e2e-tests/${uuid}/`;
145
145
  const response = await tx.get(serverUrl, { ...params });
146
- console.error("Raw API response:", response);
146
+ // console.error("Raw API response:", response);
147
147
  return response;
148
148
  }
149
149
  catch (err) {
@@ -57,7 +57,7 @@ export const createIssuesService = (tx) => ({
57
57
  branchName: branchName,
58
58
  };
59
59
  const response = await tx.get(serverUrl, { ...fileParams });
60
- console.error("Raw API response:", response);
60
+ // console.error("Raw API response:", response);
61
61
  // Optionally filter suggestions that match the current file
62
62
  // (If your backend already filters by file_path, this might be unnecessary,
63
63
  // but it's often safer to double-check.)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@debugg-ai/debugg-ai-mcp",
3
- "version": "1.0.11",
4
- "description": "MCP Server for debugg ai web browsing",
3
+ "version": "1.0.14",
4
+ "description": "Zero-Config, Fully AI-Managed End-to-End Testing for all code gen platforms.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "@debugg-ai/debugg-ai-mcp": "dist/index.js"