browser-devtools-mcp 0.0.1

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.
Files changed (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +652 -0
  3. package/dist/browser.js +67 -0
  4. package/dist/browser.js.map +1 -0
  5. package/dist/config.js +11 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/context.js +210 -0
  8. package/dist/context.js.map +1 -0
  9. package/dist/index.js +296 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/logger.js +97 -0
  12. package/dist/logger.js.map +1 -0
  13. package/dist/server-info.js +33 -0
  14. package/dist/server-info.js.map +1 -0
  15. package/dist/server.js +131 -0
  16. package/dist/server.js.map +1 -0
  17. package/dist/tools/content/get-as-html.js +164 -0
  18. package/dist/tools/content/get-as-html.js.map +1 -0
  19. package/dist/tools/content/get-as-text.js +76 -0
  20. package/dist/tools/content/get-as-text.js.map +1 -0
  21. package/dist/tools/content/index.js +16 -0
  22. package/dist/tools/content/index.js.map +1 -0
  23. package/dist/tools/content/save-as-pdf.js +146 -0
  24. package/dist/tools/content/save-as-pdf.js.map +1 -0
  25. package/dist/tools/content/take-aria-snapshot.js +49 -0
  26. package/dist/tools/content/take-aria-snapshot.js.map +1 -0
  27. package/dist/tools/content/take-screenshot.js +113 -0
  28. package/dist/tools/content/take-screenshot.js.map +1 -0
  29. package/dist/tools/index.js +29 -0
  30. package/dist/tools/index.js.map +1 -0
  31. package/dist/tools/interaction/click.js +29 -0
  32. package/dist/tools/interaction/click.js.map +1 -0
  33. package/dist/tools/interaction/drag.js +41 -0
  34. package/dist/tools/interaction/drag.js.map +1 -0
  35. package/dist/tools/interaction/evaluate.js +33 -0
  36. package/dist/tools/interaction/evaluate.js.map +1 -0
  37. package/dist/tools/interaction/fill.js +28 -0
  38. package/dist/tools/interaction/fill.js.map +1 -0
  39. package/dist/tools/interaction/hover.js +29 -0
  40. package/dist/tools/interaction/hover.js.map +1 -0
  41. package/dist/tools/interaction/index.js +20 -0
  42. package/dist/tools/interaction/index.js.map +1 -0
  43. package/dist/tools/interaction/press-key.js +36 -0
  44. package/dist/tools/interaction/press-key.js.map +1 -0
  45. package/dist/tools/interaction/select.js +30 -0
  46. package/dist/tools/interaction/select.js.map +1 -0
  47. package/dist/tools/monitoring/get-console-messages.js +151 -0
  48. package/dist/tools/monitoring/get-console-messages.js.map +1 -0
  49. package/dist/tools/monitoring/get-http-requests.js +216 -0
  50. package/dist/tools/monitoring/get-http-requests.js.map +1 -0
  51. package/dist/tools/monitoring/index.js +7 -0
  52. package/dist/tools/monitoring/index.js.map +1 -0
  53. package/dist/tools/navigation/go-back.js +76 -0
  54. package/dist/tools/navigation/go-back.js.map +1 -0
  55. package/dist/tools/navigation/go-forward.js +76 -0
  56. package/dist/tools/navigation/go-forward.js.map +1 -0
  57. package/dist/tools/navigation/go-to.js +80 -0
  58. package/dist/tools/navigation/go-to.js.map +1 -0
  59. package/dist/tools/navigation/index.js +8 -0
  60. package/dist/tools/navigation/index.js.map +1 -0
  61. package/dist/tools/tool-executor.js +57 -0
  62. package/dist/tools/tool-executor.js.map +1 -0
  63. package/dist/tools/types.js +3 -0
  64. package/dist/tools/types.js.map +1 -0
  65. package/dist/types.js +55 -0
  66. package/dist/types.js.map +1 -0
  67. package/dist/utils.js +47 -0
  68. package/dist/utils.js.map +1 -0
  69. package/package.json +73 -0
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ToolExecutor = void 0;
37
+ const logger = __importStar(require("../logger"));
38
+ class ToolExecutor {
39
+ context;
40
+ constructor(context) {
41
+ this.context = context;
42
+ }
43
+ async executeTool(tool, args) {
44
+ logger.debug(`Executing tool ${tool.name()} with input: ${logger.toJson(args)}`);
45
+ try {
46
+ const result = await tool.handle(this.context, args);
47
+ logger.debug(`Executed tool ${tool.name()} and got output: ${logger.toJson(result)}`);
48
+ return result;
49
+ }
50
+ catch (err) {
51
+ logger.debug(`Error occurred while executing ${tool.name()}: ${err}`);
52
+ throw err;
53
+ }
54
+ }
55
+ }
56
+ exports.ToolExecutor = ToolExecutor;
57
+ //# sourceMappingURL=tool-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-executor.js","sourceRoot":"","sources":["../../src/tools/tool-executor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAoC;AAGpC,MAAa,YAAY;IACJ,OAAO,CAAoB;IAE5C,YAAY,OAA0B;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAU,EAAE,IAAe;QACzC,MAAM,CAAC,KAAK,CACR,kBAAkB,IAAI,CAAC,IAAI,EAAE,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACrE,CAAC;QACF,IAAI,CAAC;YACD,MAAM,MAAM,GAAe,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACjE,MAAM,CAAC,KAAK,CACR,iBAAiB,IAAI,CAAC,IAAI,EAAE,oBAAoB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAC1E,CAAC;YACF,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CACR,kCAAkC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAC1D,CAAC;YACF,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;CACJ;AAxBD,oCAwBC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":""}
package/dist/types.js ADDED
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpResourceType = exports.HttpMethod = exports.ConsoleMessageLevel = exports.ConsoleMessageLevelCode = exports.ConsoleMessageLevelName = void 0;
4
+ var ConsoleMessageLevelName;
5
+ (function (ConsoleMessageLevelName) {
6
+ ConsoleMessageLevelName["ALL"] = "all";
7
+ ConsoleMessageLevelName["DEBUG"] = "debug";
8
+ ConsoleMessageLevelName["INFO"] = "info";
9
+ ConsoleMessageLevelName["WARNING"] = "warning";
10
+ ConsoleMessageLevelName["ERROR"] = "error";
11
+ })(ConsoleMessageLevelName || (exports.ConsoleMessageLevelName = ConsoleMessageLevelName = {}));
12
+ var ConsoleMessageLevelCode;
13
+ (function (ConsoleMessageLevelCode) {
14
+ ConsoleMessageLevelCode[ConsoleMessageLevelCode["ALL"] = -1] = "ALL";
15
+ ConsoleMessageLevelCode[ConsoleMessageLevelCode["DEBUG"] = 0] = "DEBUG";
16
+ ConsoleMessageLevelCode[ConsoleMessageLevelCode["INFO"] = 1] = "INFO";
17
+ ConsoleMessageLevelCode[ConsoleMessageLevelCode["WARNING"] = 2] = "WARNING";
18
+ ConsoleMessageLevelCode[ConsoleMessageLevelCode["ERROR"] = 3] = "ERROR";
19
+ })(ConsoleMessageLevelCode || (exports.ConsoleMessageLevelCode = ConsoleMessageLevelCode = {}));
20
+ exports.ConsoleMessageLevel = {
21
+ [ConsoleMessageLevelName.ALL]: { code: ConsoleMessageLevelCode.ALL },
22
+ [ConsoleMessageLevelName.DEBUG]: { code: ConsoleMessageLevelCode.DEBUG },
23
+ [ConsoleMessageLevelName.INFO]: { code: ConsoleMessageLevelCode.INFO },
24
+ [ConsoleMessageLevelName.WARNING]: {
25
+ code: ConsoleMessageLevelCode.WARNING,
26
+ },
27
+ [ConsoleMessageLevelName.ERROR]: { code: ConsoleMessageLevelCode.ERROR },
28
+ };
29
+ var HttpMethod;
30
+ (function (HttpMethod) {
31
+ HttpMethod["GET"] = "GET";
32
+ HttpMethod["POST"] = "POST";
33
+ HttpMethod["PUT"] = "PUT";
34
+ HttpMethod["PATCH"] = "PATCH";
35
+ HttpMethod["DELETE"] = "DELETE";
36
+ HttpMethod["HEAD"] = "HEAD";
37
+ HttpMethod["OPTIONS"] = "OPTIONS";
38
+ })(HttpMethod || (exports.HttpMethod = HttpMethod = {}));
39
+ var HttpResourceType;
40
+ (function (HttpResourceType) {
41
+ HttpResourceType["DOCUMENT"] = "document";
42
+ HttpResourceType["STYLESHEET"] = "stylesheet";
43
+ HttpResourceType["IMAGE"] = "image";
44
+ HttpResourceType["MEDIA"] = "media";
45
+ HttpResourceType["FONT"] = "font";
46
+ HttpResourceType["SCRIPT"] = "script";
47
+ HttpResourceType["TEXTTRACK"] = "texttrack";
48
+ HttpResourceType["XHR"] = "xhr";
49
+ HttpResourceType["FETCH"] = "fetch";
50
+ HttpResourceType["EVENTSOURCE"] = "eventsource";
51
+ HttpResourceType["WEBSOCKET"] = "websocket";
52
+ HttpResourceType["MANIFEST"] = "manifest";
53
+ HttpResourceType["OTHER"] = "other";
54
+ })(HttpResourceType || (exports.HttpResourceType = HttpResourceType = {}));
55
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA,IAAY,uBAMX;AAND,WAAY,uBAAuB;IAC/B,sCAAW,CAAA;IACX,0CAAe,CAAA;IACf,wCAAa,CAAA;IACb,8CAAmB,CAAA;IACnB,0CAAe,CAAA;AACnB,CAAC,EANW,uBAAuB,uCAAvB,uBAAuB,QAMlC;AAED,IAAY,uBAMX;AAND,WAAY,uBAAuB;IAC/B,oEAAQ,CAAA;IACR,uEAAS,CAAA;IACT,qEAAQ,CAAA;IACR,2EAAW,CAAA;IACX,uEAAS,CAAA;AACb,CAAC,EANW,uBAAuB,uCAAvB,uBAAuB,QAMlC;AAEY,QAAA,mBAAmB,GAG5B;IACA,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC,GAAG,EAAE;IACpE,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC,KAAK,EAAE;IACxE,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC,IAAI,EAAE;IACtE,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE;QAC/B,IAAI,EAAE,uBAAuB,CAAC,OAAO;KACxC;IACD,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC,KAAK,EAAE;CAClE,CAAC;AAkBX,IAAY,UAQX;AARD,WAAY,UAAU;IAClB,yBAAW,CAAA;IACX,2BAAa,CAAA;IACb,yBAAW,CAAA;IACX,6BAAe,CAAA;IACf,+BAAiB,CAAA;IACjB,2BAAa,CAAA;IACb,iCAAmB,CAAA;AACvB,CAAC,EARW,UAAU,0BAAV,UAAU,QAQrB;AAED,IAAY,gBAcX;AAdD,WAAY,gBAAgB;IACxB,yCAAqB,CAAA;IACrB,6CAAyB,CAAA;IACzB,mCAAe,CAAA;IACf,mCAAe,CAAA;IACf,iCAAa,CAAA;IACb,qCAAiB,CAAA;IACjB,2CAAuB,CAAA;IACvB,+BAAW,CAAA;IACX,mCAAe,CAAA;IACf,+CAA2B,CAAA;IAC3B,2CAAuB,CAAA;IACvB,yCAAqB,CAAA;IACrB,mCAAe,CAAA;AACnB,CAAC,EAdW,gBAAgB,gCAAhB,gBAAgB,QAc3B"}
package/dist/utils.js ADDED
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sleep = sleep;
4
+ exports.getEnumKeyTuples = getEnumKeyTuples;
5
+ exports.createEnumTransformer = createEnumTransformer;
6
+ exports.formattedTimeForFilename = formattedTimeForFilename;
7
+ function sleep(ms) {
8
+ return new Promise((resolve) => setTimeout(resolve, ms));
9
+ }
10
+ function getEnumKeyTuples(enumObj) {
11
+ const values = Object.keys(enumObj)
12
+ .filter((key) => isNaN(Number(key))) // numeric enum reverse-mapping guard
13
+ .map((key) => enumObj[key]);
14
+ if (values.length === 0) {
15
+ throw new Error('Enum has no values');
16
+ }
17
+ return values;
18
+ }
19
+ function createEnumTransformer(enumObj, opts) {
20
+ const values = Object.keys(enumObj)
21
+ .filter((k) => isNaN(Number(k)))
22
+ .map((k) => enumObj[k]);
23
+ const caseInsensitive = opts?.caseInsensitive ?? true;
24
+ const lookup = new Map(values.map((v) => [
25
+ caseInsensitive ? v.toLowerCase() : v,
26
+ v,
27
+ ]));
28
+ return (value) => {
29
+ const key = caseInsensitive ? value.toLowerCase() : value;
30
+ const found = lookup.get(key);
31
+ if (found === undefined) {
32
+ throw new Error(`Invalid enum value: "${value}"`);
33
+ }
34
+ return found;
35
+ };
36
+ }
37
+ function formattedTimeForFilename(date = new Date()) {
38
+ const pad = (n) => String(n).padStart(2, '0');
39
+ return (date.getFullYear() +
40
+ pad(date.getMonth() + 1) +
41
+ pad(date.getDate()) +
42
+ '-' +
43
+ pad(date.getHours()) +
44
+ pad(date.getMinutes()) +
45
+ pad(date.getSeconds()));
46
+ }
47
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;AAAA,sBAIC;AAED,4CAcC;AAED,sDA2BC;AAED,4DAaC;AAhED,SAAgB,KAAK,CAAC,EAAU;IAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAkD,EAAE,EAAE,CACtE,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAC1B,CAAC;AACN,CAAC;AAED,SAAgB,gBAAgB,CAC5B,OAAU;IAEV,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SAC9B,MAAM,CAAC,CAAC,GAAW,EAAW,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,qCAAqC;SAC1F,GAAG,CAAC,CAAC,GAAW,EAAc,EAAE,CAAC,OAAO,CAAC,GAAc,CAAC,CAE5D,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,MAAgE,CAAC;AAC5E,CAAC;AAED,SAAgB,qBAAqB,CACjC,OAAU,EACV,IAAoC;IAEpC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SAC9B,MAAM,CAAC,CAAC,CAAS,EAAW,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAChD,GAAG,CAAC,CAAC,CAAS,EAAc,EAAE,CAAC,OAAO,CAAC,CAAY,CAAC,CAExD,CAAC;IAEF,MAAM,eAAe,GAAY,IAAI,EAAE,eAAe,IAAI,IAAI,CAAC;IAE/D,MAAM,MAAM,GAAG,IAAI,GAAG,CAClB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAa,EAAwB,EAAE,CAAC;QAChD,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;KACJ,CAAC,CACL,CAAC;IAEF,OAAO,CAAC,KAAa,EAAc,EAAE;QACjC,MAAM,GAAG,GAAW,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,MAAM,KAAK,GAA2B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,GAAG,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;AACN,CAAC;AAED,SAAgB,wBAAwB,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE;IACtD,MAAM,GAAG,GAA0B,CAAC,CAAS,EAAU,EAAE,CACrD,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE/B,OAAO,CACH,IAAI,CAAC,WAAW,EAAE;QAClB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,GAAG;QACH,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CACzB,CAAC;AACN,CAAC"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "browser-devtools-mcp",
3
+ "version": "0.0.1",
4
+ "description": "MCP Server for Browser Dev Tools",
5
+ "private": false,
6
+ "type": "commonjs",
7
+ "main": "./dist/index.js",
8
+ "bin": {
9
+ "browser-devtools": "./dist/index.js"
10
+ },
11
+ "exports": {
12
+ ".": "./dist/server.js"
13
+ },
14
+ "author": "Serkan Ozal <serkanozal86@gmail.com> (https://github.com/serkan-ozal)",
15
+ "homepage": "https://github.com/serkan-ozal/browser-devtools-mcp",
16
+ "repository": "serkan-ozal/browser-devtools-mcp",
17
+ "license": "MIT",
18
+ "keywords": [
19
+ "ai",
20
+ "mcp",
21
+ "mcp-server",
22
+ "browser",
23
+ "dev-tools",
24
+ "debug"
25
+ ],
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "scripts": {
30
+ "clean": "rimraf dist",
31
+ "build": "tsc",
32
+ "start": "ts-node ./src/index.ts",
33
+ "start:http": "ts-node ./src/index.ts --transport=streamable-http",
34
+ "watch": "tsc --watch",
35
+ "inspector": "npm run build && chmod 755 './dist/index.js' && npx @modelcontextprotocol/inspector dist/index.js",
36
+ "inspector:http": "npx @modelcontextprotocol/inspector http://localhost:3000/mcp --transport http",
37
+ "test": "echo \"Error: no test specified\" && exit 1",
38
+ "lint:check": "prettier --config .prettierrc.json --check ./src/*.ts ./src/**/*.ts ./src/**/**/*.ts ./src/**/**/**/*.ts",
39
+ "lint:format": "prettier --config .prettierrc.json --write ./src/*.ts ./src/**/*.ts ./src/**/**/*.ts ./src/**/**/**/*.ts",
40
+ "release:patch": "release-it --ci -VV --git.commit --git.push --git.tag --git.tagName='v${version}' --github.release --github.releaseNotes='echo \"Release ${version}\"' --no-git.requireCleanWorkingDir --no-git.requireUpstream --npm.publish --npm.skipChecks",
41
+ "release:minor": "release-it minor --ci -VV --git.commit --git.push --git.tag --git.tagName='v${version}' --github.release --github.releaseNotes='echo \"Release ${version}\"' --no-git.requireCleanWorkingDir --no-git.requireUpstream --npm.publish --npm.skipChecks",
42
+ "release:major": "release-it major --ci -VV --git.commit --git.push --git.tag --git.tagName='v${version}' --github.release --github.releaseNotes='echo \"Release ${version}\"' --no-git.requireCleanWorkingDir --no-git.requireUpstream --npm.publish --npm.skipChecks"
43
+ },
44
+ "files": [
45
+ "dist/",
46
+ "package.json",
47
+ "README.md",
48
+ "LICENSE"
49
+ ],
50
+ "devDependencies": {
51
+ "@types/node": "^18.19.87",
52
+ "@typescript-eslint/eslint-plugin": "^8.31.1",
53
+ "@typescript-eslint/parser": "^8.31.1",
54
+ "eslint": "^9.26.0",
55
+ "eslint-plugin-import": "^2.31.0",
56
+ "prettier": "^3.5.3",
57
+ "release-it": "^17.6.0",
58
+ "rimraf": "^6.1.2",
59
+ "ts-node": "^10.9.2",
60
+ "typescript": "^5.8.3"
61
+ },
62
+ "dependencies": {
63
+ "@hono/mcp": "^0.1.4",
64
+ "@hono/node-server": "^1.19.5",
65
+ "@modelcontextprotocol/sdk": "^1.23.1",
66
+ "@playwright/browser-chromium": "^1.57.0",
67
+ "@playwright/browser-firefox": "^1.57.0",
68
+ "@playwright/browser-webkit": "^1.57.0",
69
+ "commander": "^14.0.1",
70
+ "hono": "^4.9.9",
71
+ "playwright": "^1.57.0"
72
+ }
73
+ }