@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 +31 -5
- package/dist/e2e-agents/e2eRunner.js +1 -1
- package/dist/index.js +10 -9
- package/dist/services/coverage.js +3 -3
- package/dist/services/e2es.js +5 -5
- package/dist/services/issues.js +1 -1
- package/package.json +2 -2
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
|
+

|
|
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
|
---
|
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
|
|
143
|
+
let baseEncodedImage = "";
|
|
144
144
|
if (finalScreenshot) {
|
|
145
145
|
const response = await fetch(finalScreenshot);
|
|
146
146
|
const arrayBuffer = await response.arrayBuffer();
|
|
147
|
-
|
|
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
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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) {
|
package/dist/services/e2es.js
CHANGED
|
@@ -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) {
|
package/dist/services/issues.js
CHANGED
|
@@ -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.
|
|
4
|
-
"description": "
|
|
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"
|