{"_id":"electron-mcp-server","_rev":"7-0ccfa5ee69b819ed8861156782cdb8da","name":"electron-mcp-server","dist-tags":{"latest":"1.5.1"},"versions":{"1.0.0":{"name":"electron-mcp-server","version":"1.0.0","keywords":["mcp","electron","automation","desktop","model-context-protocol","devtools","testing","ai","chrome-devtools-protocol","screenshot","electron-automation"],"author":{"name":"Halil Ural"},"license":"MIT","_id":"electron-mcp-server@1.0.0","maintainers":[{"name":"halilural","email":"halilural5@gmail.com"}],"homepage":"https://github.com/halilural/electron-mcp-server#readme","bugs":{"url":"https://github.com/halilural/electron-mcp-server/issues"},"bin":{"electron-mcp-server":"dist/index.js"},"dist":{"shasum":"dc82b5f202f62ebd6c5a2796a3b8708baf62ef50","tarball":"https://registry.npmjs.org/electron-mcp-server/-/electron-mcp-server-1.0.0.tgz","fileCount":34,"integrity":"sha512-u2VfpxYCppjSHAGiSoHy73xYsUJhT42VohfcihoRyM+bIRqRL5LV5z2ZEOPi5ZjBjv8KMQ9H+SLD3qxC8vvoNw==","signatures":[{"sig":"MEYCIQCSJXLNJVCiQP0Pk+T33n9yH1XfJ2tiTVgfiQxghG3b5wIhAJmMaWaOWhkQ7bdLrs0LfKQKXTcjS79lP0zYDhxfmgUh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132486},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"908a95d330fe30c1ddc93839f42966bfa7aa8953","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/**/*.ts","test":"node test.js","build":"tsc","start":"node dist/index.js","watch":"tsc --watch","prepare":"npm run build","lint:fix":"eslint src/**/*.ts --fix"},"_npmUser":{"name":"halilural","email":"halilural5@gmail.com"},"repository":{"url":"git+https://github.com/halilural/electron-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for Electron application automation and management","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","zod":"^3.22.4","electron":"^28.0.0","@types/ws":"^8.18.1","playwright":"^1.54.1","zod-to-json-schema":"^3.22.4","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","jest":"^29.0.0","eslint":"^8.0.0","vitest":"^3.2.4","ts-jest":"^29.0.0","@vitest/ui":"^3.2.4","typescript":"^5.8.3","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/electron-mcp-server_1.0.0_1753310605914_0.10012074177973629","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"electron-mcp-server","version":"1.2.0","keywords":["mcp","electron","automation","desktop","model-context-protocol","devtools","testing","ai","chrome-devtools-protocol","screenshot","electron-automation"],"author":{"name":"Halil Ural"},"license":"MIT","_id":"electron-mcp-server@1.2.0","maintainers":[{"name":"halilural","email":"halilural5@gmail.com"}],"homepage":"https://github.com/halilural/electron-mcp-server#readme","bugs":{"url":"https://github.com/halilural/electron-mcp-server/issues"},"bin":{"electron-mcp-server":"dist/index.js"},"dist":{"shasum":"87effb59d793e63334fc8f739566645e24d35316","tarball":"https://registry.npmjs.org/electron-mcp-server/-/electron-mcp-server-1.2.0.tgz","fileCount":36,"integrity":"sha512-oZmeOClD3GVpFGFNo/8WjuMh3kK7jALrkZ0jOknNqkrkVmfXwvWldikWPw78rqCU1LxoYl7ErGbk7f3jPlnueA==","signatures":[{"sig":"MEUCIDgBMJi5QyhiE+lKcGRrNTGUKy43nnOCmXfN6MyGa/+NAiEAtEoBXl01Vp67ngiIiOoMo19Lq+EEe3nlng6PYBJhdKI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141176},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"efed98e102f515c0488adda39541bfd3a18ed4a1","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/**/*.ts","test":"node test.js","build":"tsc","start":"node dist/index.js","watch":"tsc --watch","prepare":"npm run build","lint:fix":"eslint src/**/*.ts --fix"},"_npmUser":{"name":"halilural","email":"halilural5@gmail.com"},"repository":{"url":"git+https://github.com/halilural/electron-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for Electron application automation and management","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","zod":"^3.22.4","electron":"^28.0.0","@types/ws":"^8.18.1","playwright":"^1.54.1","zod-to-json-schema":"^3.22.4","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","jest":"^29.0.0","eslint":"^8.0.0","vitest":"^3.2.4","ts-jest":"^29.0.0","@vitest/ui":"^3.2.4","typescript":"^5.8.3","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/electron-mcp-server_1.2.0_1753315094583_0.9812471967479415","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"electron-mcp-server","version":"1.2.1","keywords":["mcp","electron","automation","desktop","model-context-protocol","devtools","testing","ai","chrome-devtools-protocol","screenshot","electron-automation"],"author":{"name":"Halil Ural"},"license":"MIT","_id":"electron-mcp-server@1.2.1","maintainers":[{"name":"halilural","email":"halilural5@gmail.com"}],"homepage":"https://github.com/halilural/electron-mcp-server#readme","bugs":{"url":"https://github.com/halilural/electron-mcp-server/issues"},"bin":{"electron-mcp-server":"dist/index.js"},"dist":{"shasum":"a33256e191e4c36c53624cfa0c06c11e28757c96","tarball":"https://registry.npmjs.org/electron-mcp-server/-/electron-mcp-server-1.2.1.tgz","fileCount":56,"integrity":"sha512-BRC3jpYgh6LtkmYxlrqU4YY1zazgTRAiSszMmwuMjUNc6XMwH9rIB74zXA+fL7GMOagRJHX7DTgYvltMrmSf5Q==","signatures":[{"sig":"MEUCIQDtc4r3TasEE6r/p1dlhIKPvC3rcGmNrOBCs97uEps7UgIgQzoKrz0zEF3BpphoQZFsD+H0n3qAaXbKq2GG3XesPrw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202521},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"7d16b8de7c2902b5b4ae7564b1b1f8cb7b6e0e6e","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/**/*.ts","test":"node test.js","build":"tsc","start":"node dist/index.js","watch":"tsc --watch","prepare":"npm run build","lint:fix":"eslint src/**/*.ts --fix"},"_npmUser":{"name":"halilural","email":"halilural5@gmail.com"},"repository":{"url":"git+https://github.com/halilural/electron-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for Electron application automation and management","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","zod":"^3.22.4","electron":"^28.0.0","@types/ws":"^8.18.1","playwright":"^1.54.1","zod-to-json-schema":"^3.22.4","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","jest":"^29.0.0","eslint":"^8.0.0","vitest":"^3.2.4","ts-jest":"^29.0.0","@vitest/ui":"^3.2.4","typescript":"^5.8.3","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/electron-mcp-server_1.2.1_1753378695627_0.4997300751264222","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"electron-mcp-server","version":"1.3.0","keywords":["mcp","electron","automation","desktop","model-context-protocol","devtools","testing","ai","chrome-devtools-protocol","screenshot","electron-automation"],"author":{"name":"Halil Ural"},"license":"MIT","_id":"electron-mcp-server@1.3.0","maintainers":[{"name":"halilural","email":"halilural5@gmail.com"}],"homepage":"https://github.com/halilural/electron-mcp-server#readme","bugs":{"url":"https://github.com/halilural/electron-mcp-server/issues"},"bin":{"electron-mcp-server":"dist/index.js"},"dist":{"shasum":"d6443983f842c7f426be6f075e17621bd22d7223","tarball":"https://registry.npmjs.org/electron-mcp-server/-/electron-mcp-server-1.3.0.tgz","fileCount":58,"integrity":"sha512-zipr6F5ASfcvlMcSn/3MvHTonxlB487HNWPg+N6atxf68ND/Xow3lKIx226Oj55QIYh8bYFPZTU1NLDyRNwXyA==","signatures":[{"sig":"MEYCIQCbxbBhE7UUOwm8+zmC7fLfwUR+Uhq87FEehefXA/iasgIhAMWRFiWpH9+HhTC0saHU71rpFdXeHK6imiO7AN1fuYY9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219275},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"a49d7a052f022216d6468cccaac1d52083051c43","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/**/*.ts","test":"node test.js","build":"tsc","start":"node dist/index.js","watch":"tsc --watch","prepare":"npm run build","lint:fix":"eslint src/**/*.ts --fix","dev:watch":"tsx --watch src/index.ts","watch-and-serve":"tsc --watch & node --watch dist/index.js"},"_npmUser":{"name":"halilural","email":"halilural5@gmail.com"},"repository":{"url":"git+https://github.com/halilural/electron-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for Electron application automation and management","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","zod":"^3.22.4","electron":"^28.0.0","@types/ws":"^8.18.1","playwright":"^1.54.1","zod-to-json-schema":"^3.22.4","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","jest":"^29.0.0","eslint":"^8.0.0","vitest":"^3.2.4","ts-jest":"^29.0.0","@vitest/ui":"^3.2.4","typescript":"^5.8.3","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/electron-mcp-server_1.3.0_1753402721142_0.06496920517902782","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"electron-mcp-server","version":"1.4.0","keywords":["mcp","electron","automation","desktop","model-context-protocol","devtools","testing","ai","chrome-devtools-protocol","screenshot","electron-automation"],"author":{"name":"Halil Ural"},"license":"MIT","_id":"electron-mcp-server@1.4.0","maintainers":[{"name":"halilural","email":"halilural5@gmail.com"}],"homepage":"https://github.com/halilural/electron-mcp-server#readme","bugs":{"url":"https://github.com/halilural/electron-mcp-server/issues"},"bin":{"electron-mcp-server":"dist/index.js"},"dist":{"shasum":"bb9ce9e2470d2a4c23dab56c7847fec670c80b02","tarball":"https://registry.npmjs.org/electron-mcp-server/-/electron-mcp-server-1.4.0.tgz","fileCount":74,"integrity":"sha512-8fAQvTiG1OYRVvJpyq0CT8qtQeGTQuW+017bhDfckBT8wz3nAD9XqDyyMJBWb7na/0hQ0jVYCjuwIOTTBMmSDw==","signatures":[{"sig":"MEQCIGKLFqqdog662pAxC0cWm/rz1Km9gtRiRINH/f2NeuvdAiBm0fcrPGIF7tgrmbdMSRDsEGMKtI42e+JO7OFnA7LHmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":326100},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ec33aa40d879dd4124cf373ae4dbed54b7a7c3d5","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","start":"node dist/index.js","watch":"tsc --watch","prepare":"npm run build","test:ui":"vitest --ui","lint:fix":"eslint src/**/*.ts --fix","dev:watch":"tsx --watch src/index.ts","test:clean":"tsx -e \"import('./test/utils/cleanup.js').then(m => m.TestCleanup.cleanup())\"","test:watch":"vitest","test:coverage":"vitest run --coverage","test:security":"npm run build && node test/security-test.js","watch-and-serve":"tsc --watch & node --watch dist/index.js"},"_npmUser":{"name":"halilural","email":"halilural5@gmail.com"},"repository":{"url":"git+https://github.com/halilural/electron-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for Electron application automation and management","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","zod":"^3.22.4","dotenv":"^17.2.1","electron":"^28.0.0","@types/ws":"^8.18.1","playwright":"^1.54.1","zod-to-json-schema":"^3.22.4","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","jest":"^29.0.0","eslint":"^8.0.0","vitest":"^3.2.4","ts-jest":"^29.0.0","@vitest/ui":"^3.2.4","typescript":"^5.8.3","@types/node":"^20.10.0","@vitest/coverage-v8":"^3.2.4","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/electron-mcp-server_1.4.0_1753481892471_0.5322385783966994","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"electron-mcp-server","version":"1.5.0","keywords":["mcp","electron","automation","desktop","model-context-protocol","devtools","testing","ai","chrome-devtools-protocol","screenshot","electron-automation"],"author":{"name":"Halil Ural"},"license":"MIT","_id":"electron-mcp-server@1.5.0","maintainers":[{"name":"halilural","email":"halilural5@gmail.com"}],"homepage":"https://github.com/halilural/electron-mcp-server#readme","bugs":{"url":"https://github.com/halilural/electron-mcp-server/issues"},"bin":{"electron-mcp-server":"dist/index.js"},"dist":{"shasum":"39c0c13f8fabd38edb20825d58f48e010ea116be","tarball":"https://registry.npmjs.org/electron-mcp-server/-/electron-mcp-server-1.5.0.tgz","fileCount":44,"integrity":"sha512-ChL/NgWB7MNRF7ya7hnwcnBJai6+ApGGOmzJOwgqkE1L7AFw1g1plu6HO9uc1EutstfMpPVoIlFhjsWYqhQxCA==","signatures":[{"sig":"MEUCIBF5B3BX6e8oSfF0La2og9WH71sgLw/Y3MeLvBTTPUPsAiEAjzKyLv9NnYOCtGTqIzxhIBTeIdIfRq20xGmH2q2YNog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":468381},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"0ba9bc2cd6248320c22373b1f2a421e545c8e5f8","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","start":"node dist/index.js","watch":"tsc --watch","format":"prettier --write \"src/**/*.{ts,js,json,md}\"","prepare":"npm run build","test:ui":"vitest --ui","code:fix":"npm run lint:fix && npm run format","lint:fix":"eslint src/**/*.ts --fix","dev:watch":"tsx --watch src/index.ts","code:check":"npm run lint && npm run format:check","test:clean":"tsx -e \"import('./test/utils/cleanup.js').then(m => m.TestCleanup.cleanup())\"","test:watch":"vitest","format:check":"prettier --check \"src/**/*.{ts,js,json,md}\"","test:coverage":"vitest run --coverage","test:security":"npm run build && node test/security-test.js","watch-and-serve":"tsc --watch & node --watch dist/index.js"},"_npmUser":{"name":"halilural","email":"halilural5@gmail.com"},"repository":{"url":"git+https://github.com/halilural/electron-mcp-server.git","type":"git"},"_npmVersion":"11.4.2","description":"MCP server for Electron application automation and management. See MCP_USAGE_GUIDE.md for proper argument structure examples.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"ws":"^8.18.3","zod":"^3.22.4","dotenv":"^17.2.1","electron":"^28.0.0","@types/ws":"^8.18.1","playwright":"^1.54.1","zod-to-json-schema":"^3.22.4","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","jest":"^29.0.0","jiti":"^2.5.1","eslint":"^9.32.0","vitest":"^3.2.4","globals":"^16.3.0","ts-jest":"^29.0.0","prettier":"^3.6.2","@eslint/js":"^9.32.0","@vitest/ui":"^3.2.4","typescript":"^5.8.3","@types/node":"^20.10.0","typescript-eslint":"^8.38.0","@vitest/coverage-v8":"^3.2.4","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/electron-mcp-server_1.5.0_1754922338169_0.8126251213720304","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"electron-mcp-server","version":"1.5.1","description":"MCP server for Electron application automation and management. See MCP_USAGE_GUIDE.md for proper argument structure examples.","main":"dist/index.js","bin":{"electron-mcp-server":"dist/index.js"},"scripts":{"build":"webpack --config webpack.config.ts --mode production","build:dev":"webpack --config webpack.config.ts --mode development","dev":"tsx src/index.ts","dev:watch":"tsx --watch src/index.ts","start":"node dist/index.js","watch":"webpack --config webpack.config.ts --mode development --watch","watch-and-serve":"webpack --config webpack.config.ts --mode development --watch & node --watch dist/index.js","prepare":"npm run build","test":"vitest run","test:unit":"vitest run tests/unit","test:watch":"vitest","test:ui":"vitest --ui","test:react":"cd tests/integration/react-compatibility && electron test-react-electron.cjs","test:coverage":"vitest run --coverage","test:security":"npm run build && node test/security-test.js","test:clean":"tsx -e \"import('./test/utils/cleanup.js').then(m => m.TestCleanup.cleanup())\"","lint":"eslint src/**/*.ts","lint:fix":"eslint src/**/*.ts --fix","format":"prettier --write \"src/**/*.{ts,js,json,md}\"","format:check":"prettier --check \"src/**/*.{ts,js,json,md}\"","code:check":"npm run lint && npm run format:check","code:fix":"npm run lint:fix && npm run format"},"keywords":["mcp","electron","automation","desktop","model-context-protocol","devtools","testing","ai","chrome-devtools-protocol","screenshot","electron-automation"],"author":{"name":"Halil Ural"},"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","@types/ws":"^8.18.1","dotenv":"^17.2.1","electron":"^28.0.0","playwright":"^1.54.1","ws":"^8.18.3","zod":"^3.22.4","zod-to-json-schema":"^3.22.4"},"devDependencies":{"@eslint/js":"^9.32.0","@types/node":"^20.19.10","@types/webpack":"^5.28.5","@types/webpack-node-externals":"^3.0.4","@typescript-eslint/eslint-plugin":"^8.38.0","@typescript-eslint/parser":"^8.38.0","@vitest/coverage-v8":"^3.2.4","@vitest/ui":"^3.2.4","eslint":"^9.32.0","globals":"^16.3.0","jest":"^29.0.0","jiti":"^2.5.1","prettier":"^3.6.2","ts-jest":"^29.0.0","ts-loader":"^9.5.2","ts-node":"^10.9.2","tsx":"^4.6.0","typescript":"^5.8.3","typescript-eslint":"^8.38.0","vitest":"^3.2.4","webpack":"^5.101.0","webpack-cli":"^6.0.1","webpack-node-externals":"^3.0.0"},"engines":{"node":">=20.0.0"},"repository":{"type":"git","url":"git+https://github.com/halilural/electron-mcp-server.git"},"bugs":{"url":"https://github.com/halilural/electron-mcp-server/issues"},"homepage":"https://github.com/halilural/electron-mcp-server#readme","_id":"electron-mcp-server@1.5.1","gitHead":"2f1fcaa47880ea396a1a6b352f43ea23c60dee39","types":"./dist/index.d.ts","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-LT2V2I8XIIBaYJ7dUWN7miQTOPtuSKfQJm+36Nd+g1HMCW+Z5dV/i/q7hXneKEa6oxrpTX6oZfHBPYHsal4V7g==","shasum":"7feb2c3da6212d97f4f370bf5aedc74dc360b897","tarball":"https://registry.npmjs.org/electron-mcp-server/-/electron-mcp-server-1.5.1.tgz","fileCount":25,"unpackedSize":551939,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/electron-mcp-server@1.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDrg2gOtGhC59n8F0eD48EUxxoiJN1MtXr2HEBPtQ6ENgIgQkBt5LqDIDmBpAryaCqNnle8toJyi/6BB3fknGCbHLc="}]},"_npmUser":{"name":"halilural","email":"halilural5@gmail.com"},"directories":{},"maintainers":[{"name":"halilural","email":"halilural5@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/electron-mcp-server_1.5.1_1786022289669_0.2631801633918891"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-23T22:43:25.912Z","modified":"2026-08-06T13:18:10.177Z","1.0.0":"2025-07-23T22:43:26.090Z","1.2.0":"2025-07-23T23:58:14.783Z","1.2.1":"2025-07-24T17:38:15.837Z","1.3.0":"2025-07-25T00:18:41.332Z","1.4.0":"2025-07-25T22:18:12.719Z","1.5.0":"2025-08-11T14:25:38.495Z","1.5.1":"2026-08-06T13:18:09.817Z"},"bugs":{"url":"https://github.com/halilural/electron-mcp-server/issues"},"author":{"name":"Halil Ural"},"license":"MIT","homepage":"https://github.com/halilural/electron-mcp-server#readme","keywords":["mcp","electron","automation","desktop","model-context-protocol","devtools","testing","ai","chrome-devtools-protocol","screenshot","electron-automation"],"repository":{"type":"git","url":"git+https://github.com/halilural/electron-mcp-server.git"},"description":"MCP server for Electron application automation and management. See MCP_USAGE_GUIDE.md for proper argument structure examples.","maintainers":[{"name":"halilural","email":"halilural5@gmail.com"}],"readme":"# Electron MCP Server\n\n[![CI](https://github.com/halilural/electron-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/halilural/electron-mcp-server/actions/workflows/ci.yml)\n[![Publish to npm](https://github.com/halilural/electron-mcp-server/actions/workflows/publish.yml/badge.svg)](https://github.com/halilural/electron-mcp-server/actions/workflows/publish.yml)\n[![npm version](https://img.shields.io/npm/v/electron-mcp-server)](https://www.npmjs.com/package/electron-mcp-server)\n[![npm downloads](https://img.shields.io/npm/dm/electron-mcp-server)](https://www.npmjs.com/package/electron-mcp-server)\n[![node](https://img.shields.io/node/v/electron-mcp-server)](https://nodejs.org)\n[![GitHub license](https://img.shields.io/github/license/halilural/electron-mcp-server)](https://github.com/halilural/electron-mcp-server/blob/master/LICENSE)\n[![MCP](https://img.shields.io/badge/MCP-Model%20Context%20Protocol-blue)](https://modelcontextprotocol.io)\n\n**Control any Electron app with natural language.** An MCP server that lets AI assistants (Claude, Cursor, VS Code, …) drive your Electron app: click buttons, fill forms, take screenshots, read console logs, and run JavaScript inside it — all over the Chrome DevTools Protocol, with no changes to your app.\n\n```bash\nnpx -y electron-mcp-server\n```\n\nThen ask your AI: *\"Click the Settings button in my Electron app and screenshot the result.\"*\n\n**Why you might want it**\n\n- 🤖 **AI-driven UI automation** — describe the interaction (\"click Submit\", \"fill the email field\"); no selector wrangling\n- 🐛 **Debugging without DevTools** — console logs and page structure pulled straight into the chat\n- 📸 **Screenshots on demand** — returned as image data the AI can actually look at\n- ⚡ **Zero app changes** — attaches over CDP to any Electron app started with `--remote-debugging-port=9222`\n- 🔒 **Security levels** — strict → development, so you choose how much the AI may do\n- 🧪 **Automated E2E flows** — turn manual test steps into repeatable AI-run scenarios\n\n**The 4 tools it exposes:** `get_electron_window_info`, `take_screenshot`, `send_command_to_electron` (UI interaction + `eval`), `read_electron_logs`.\n\n## Demo\n\nSee the Electron MCP Server in action:\n\n[![Watch Demo Video](https://vumbnail.com/1104937830.jpg)](https://vimeo.com/1104937830)\n\n**[🎬 Watch Full Demo on Vimeo](https://vimeo.com/1104937830)**\n\n*Watch how easy it is to automate Electron applications with AI-powered MCP commands.*\n\n## 🔒 Security & Configuration\n\n**Configurable security levels** to balance safety with functionality:\n\n### Security Levels\n\n- **🔒 STRICT**: Maximum security for production environments\n- **⚖️ BALANCED**: Default security with safe UI interactions (recommended)\n- **🔓 PERMISSIVE**: More functionality for trusted environments\n- **🛠️ DEVELOPMENT**: Minimal restrictions for development/testing\n\n### Environment Configuration\n\nConfigure the security level and other settings through your MCP client configuration:\n\n**VS Code MCP Settings:**\n```json\n{\n  \"mcp\": {\n    \"servers\": {\n      \"electron\": {\n        \"command\": \"npx\",\n        \"args\": [\"-y\", \"electron-mcp-server\"],\n        \"env\": {\n          \"SECURITY_LEVEL\": \"balanced\",\n          \"SCREENSHOT_ENCRYPTION_KEY\":\"your-32-byte-hex-string\"\n        }\n      }\n    }\n  }\n}\n```\n\n**Claude Desktop Configuration:**\n```json\n{\n  \"mcpServers\": {\n    \"electron\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"electron-mcp-server\"],\n      \"env\": {\n        \"SECURITY_LEVEL\": \"balanced\",\n        \"SCREENSHOT_ENCRYPTION_KEY\":\"your-32-byte-hex-string\"\n      }\n    }\n  }\n}\n```\n\n**Alternative: Local .env file (for development):**\n```bash\n# Create .env file in your project directory\nSECURITY_LEVEL=balanced\nSCREENSHOT_ENCRYPTION_KEY=your-32-byte-hex-string\n```\n\n**Security Level Behaviors:**\n\n| Level | UI Interactions | DOM Queries | Property Access | Assignments | Function Calls | Risk Threshold |\n|-------|-----------------|-------------|-----------------|-------------|----------------|----------------|\n| `strict` | ❌ Blocked | ❌ Blocked | ✅ Allowed | ❌ Blocked | ❌ None allowed | Low |\n| `balanced` | ✅ Allowed | ✅ Allowed | ✅ Allowed | ❌ Blocked | ✅ Safe UI functions | Medium |\n| `permissive` | ✅ Allowed | ✅ Allowed | ✅ Allowed | ✅ Allowed | ✅ Extended UI functions | High |\n| `development` | ✅ Allowed | ✅ Allowed | ✅ Allowed | ✅ Allowed | ✅ All functions | Critical |\n\n**Environment Setup:**\n\n1. Copy `.env.example` to `.env`\n2. Set `SECURITY_LEVEL` to your desired level\n3. Configure other security settings as needed\n\n```bash\ncp .env.example .env\n# Edit .env and set SECURITY_LEVEL=balanced\n```\n\n### Secure UI Interaction Commands\n\nInstead of raw JavaScript eval, use these secure commands:\n\n```javascript\n// ✅ Secure button clicking\n{\n  \"command\": \"click_by_text\",\n  \"args\": { \"text\": \"Create New Encyclopedia\" }\n}\n\n// ✅ Secure element selection\n{\n  \"command\": \"click_by_selector\",\n  \"args\": { \"selector\": \"button[title='Create']\" }\n}\n\n// ✅ Secure keyboard shortcuts\n{\n  \"command\": \"send_keyboard_shortcut\",\n  \"args\": { \"text\": \"Ctrl+N\" }\n}\n\n// ✅ Secure navigation\n{\n  \"command\": \"navigate_to_hash\",\n  \"args\": { \"text\": \"create\" }\n}\n```\n\nSee [SECURITY_CONFIG.md](./SECURITY_CONFIG.md) for detailed security documentation.\n\n## 🎯 Proper MCP Usage Guide\n\n### ⚠️ Critical: Argument Structure\n\n**The most common mistake** when using this MCP server is incorrect argument structure for the `send_command_to_electron` tool.\n\n#### ❌ Wrong (causes \"selector is empty\" errors):\n\n```javascript\n{\n  \"command\": \"click_by_selector\",\n  \"args\": \"button.submit-btn\"  // ❌ Raw string - WRONG!\n}\n```\n\n#### ✅ Correct:\n\n```javascript\n{\n  \"command\": \"click_by_selector\",\n  \"args\": {\n    \"selector\": \"button.submit-btn\"  // ✅ Object with selector property\n  }\n}\n```\n\n### 📋 Command Argument Reference\n\n| Command                                 | Required Args                                                                       | Example                                          |\n| --------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------ |\n| `click_by_selector`                     | `{\"selector\": \"css-selector\"}`                                                      | `{\"selector\": \"button.primary\"}`                 |\n| `click_by_text`                         | `{\"text\": \"button text\"}`                                                           | `{\"text\": \"Submit\"}`                             |\n| `fill_input`                            | `{\"value\": \"text\", \"selector\": \"...\"}` or `{\"value\": \"text\", \"placeholder\": \"...\"}` | `{\"placeholder\": \"Enter name\", \"value\": \"John\"}` |\n| `send_keyboard_shortcut`                | `{\"text\": \"key combination\"}`                                                       | `{\"text\": \"Ctrl+N\"}`                             |\n| `eval`                                  | `{\"code\": \"javascript\"}`                                                            | `{\"code\": \"document.title\"}`                     |\n| `get_title`, `get_url`, `get_body_text` | No args needed                                                                      | `{}` or omit args                                |\n\n### 🔄 Recommended Workflow\n\n1. **Inspect**: Start with `get_page_structure` or `debug_elements`\n2. **Target**: Use specific selectors or text-based targeting\n3. **Interact**: Use the appropriate command with correct argument structure\n4. **Verify**: Take screenshots or check page state\n\n```javascript\n// Step 1: Understand the page\n{\n  \"command\": \"get_page_structure\"\n}\n\n// Step 2: Click button using text (most reliable)\n{\n  \"command\": \"click_by_text\",\n  \"args\": {\n    \"text\": \"Create New Encyclopedia\"\n  }\n}\n\n// Step 3: Fill form field\n{\n  \"command\": \"fill_input\",\n  \"args\": {\n    \"placeholder\": \"Enter encyclopedia name\",\n    \"value\": \"AI and Machine Learning\"\n  }\n}\n\n// Step 4: Submit with selector\n{\n  \"command\": \"click_by_selector\",\n  \"args\": {\n    \"selector\": \"button[type='submit']\"\n  }\n}\n```\n\n### 🐛 Troubleshooting Common Issues\n\n| Error                            | Cause                            | Solution                       |\n| -------------------------------- | -------------------------------- | ------------------------------ |\n| \"The provided selector is empty\" | Passing string instead of object | Use `{\"selector\": \"...\"}`      |\n| \"Element not found\"              | Wrong selector                   | Use `get_page_structure` first |\n| \"Command blocked\"                | Security restriction             | Check security level settings  |\n| \"Click prevented - too soon\"     | Rapid consecutive clicks         | Wait before retrying           |\n\n## 🛠️ Security Features\n\n**Enterprise-grade security** built for safe AI-powered automation:\n\n- **🔒 Sandboxed Execution**: All code runs in isolated environments with strict resource limits\n- **🔍 Input Validation**: Advanced static analysis detects and blocks dangerous code patterns\n- **📝 Comprehensive Auditing**: Encrypted logs track all operations with full traceability\n- **🖼️ Secure Screenshots**: Encrypted screenshot data with clear user notifications\n- **⚠️ Risk Assessment**: Automatic threat detection with configurable security thresholds\n- **🚫 Zero Trust**: Dangerous functions like `eval`, file system access, and network requests are blocked by default\n\n> **Safety First**: Every command is analyzed, validated, and executed in a secure sandbox before reaching your application.\n\n## �🚀 Key Features\n\n### 🎮 Application Control & Automation\n\n- **Launch & Manage**: Start, stop, and monitor Electron applications with full lifecycle control\n- **Interactive Automation**: Execute JavaScript code directly in running applications via WebSocket\n- **UI Testing**: Automate button clicks, form interactions, and user workflows\n- **Process Management**: Track PIDs, monitor resource usage, and handle graceful shutdowns\n\n### 📊 Advanced Observability\n\n- **Screenshot Capture**: Non-intrusive visual snapshots using Playwright and Chrome DevTools Protocol\n- **Real-time Logs**: Stream application logs (main process, renderer, console) with filtering\n- **Window Information**: Get detailed window metadata, titles, URLs, and target information\n- **System Monitoring**: Track memory usage, uptime, and performance metrics\n\n### 🛠️ Development Productivity\n\n- **Universal Compatibility**: Works with any Electron app without requiring code modifications\n- **DevTools Integration**: Leverage Chrome DevTools Protocol for powerful debugging capabilities\n- **Build Automation**: Cross-platform building for Windows, macOS, and Linux\n- **Environment Management**: Clean environment handling and debugging port configuration\n\n## 📦 Installation\n\n### VS Code Integration (Recommended)\n\n[![Install with NPX in VS Code](https://img.shields.io/badge/VS_Code-Install_MCP-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=electron&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22electron-mcp-server%22%5D%7D)\n\nAdd to your VS Code MCP settings:\n\n```json\n{\n  \"mcp\": {\n    \"servers\": {\n      \"electron\": {\n        \"command\": \"npx\",\n        \"args\": [\"-y\", \"electron-mcp-server\"],\n        \"env\": {\n          \"SECURITY_LEVEL\": \"balanced\",\n          \"SCREENSHOT_ENCRYPTION_KEY\": \"your-32-byte-hex-string-here\"\n        }\n      }\n    }\n  }\n}\n```\n\n### Claude Desktop Integration\n\nAdd to `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"electron\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"electron-mcp-server\"],\n      \"env\": {\n        \"SECURITY_LEVEL\": \"balanced\",\n        \"SCREENSHOT_ENCRYPTION_KEY\": \"your-32-byte-hex-string-here\"\n      }\n    }\n  }\n}\n```\n\n### Global Installation\n\n```bash\nnpm install -g electron-mcp-server\n```\n\n## 🔧 Available Tools\n\n### `launch_electron_app`\n\nLaunch an Electron application with debugging capabilities.\n\n```javascript\n{\n  \"appPath\": \"/path/to/electron-app\",\n  \"devMode\": true,  // Enables Chrome DevTools Protocol on port 9222\n  \"args\": [\"--enable-logging\", \"--dev\"]\n}\n```\n\n**Returns**: Process ID and launch confirmation\n\n### `get_electron_window_info`\n\nGet comprehensive window and target information via Chrome DevTools Protocol.\n\n```javascript\n{\n  \"includeChildren\": true  // Include child windows and DevTools instances\n}\n```\n\n**Returns**:\n\n- Window IDs, titles, URLs, and types\n- DevTools Protocol target information\n- Platform details and process information\n\n### `take_screenshot`\n\nCapture high-quality screenshots using Playwright and Chrome DevTools Protocol.\n\n```javascript\n{\n  \"outputPath\": \"/path/to/screenshot.png\",  // Optional: defaults to temp directory\n  \"windowTitle\": \"My App\"  // Optional: target specific window\n}\n```\n\n**Features**:\n\n- Non-intrusive capture (doesn't bring window to front)\n- Works with any Electron app\n- Fallback to platform-specific tools if needed\n\n### `send_command_to_electron`\n\nExecute JavaScript commands in the running Electron application via WebSocket.\n\n```javascript\n{\n  \"command\": \"eval\",  // Built-in commands: eval, get_title, get_url, click_button, console_log\n  \"args\": {\n    \"code\": \"document.querySelector('button').click(); 'Button clicked!'\"\n  }\n}\n```\n\n**Enhanced UI Interaction Commands**:\n\n- `find_elements`: Analyze all interactive UI elements with their properties and positions\n- `click_by_text`: Click elements by their visible text, aria-label, or title (more reliable than selectors)\n- `fill_input`: Fill input fields by selector, placeholder text, or associated label text\n- `select_option`: Select dropdown options by value or visible text\n- `get_page_structure`: Get organized overview of all page elements (buttons, inputs, selects, links)\n- `get_title`: Get document title\n- `get_url`: Get current URL\n- `get_body_text`: Extract visible text content\n- `click_button`: Click buttons by CSS selector (basic method)\n- `console_log`: Send console messages\n- `eval`: Execute custom JavaScript code\n\n**Recommended workflow**: Use `get_page_structure` first to understand available elements, then use specific interaction commands like `click_by_text` or `fill_input`.\n\n### `read_electron_logs`\n\nStream application logs from main process, renderer, and console.\n\n```javascript\n{\n  \"logType\": \"all\",  // Options: \"all\", \"main\", \"renderer\", \"console\"\n  \"lines\": 50,       // Number of recent lines\n  \"follow\": false    // Stream live logs\n}\n```\n\n### `close_electron_app`\n\nGracefully close the Electron application.\n\n```javascript\n{\n  \"force\": false  // Force kill if unresponsive\n}\n```\n\n### `build_electron_app`\n\nBuild Electron applications for distribution.\n\n```javascript\n{\n  \"projectPath\": \"/path/to/project\",\n  \"platform\": \"darwin\",  // win32, darwin, linux\n  \"arch\": \"x64\",         // x64, arm64, ia32\n  \"debug\": false\n}\n```\n\n## 💡 Usage Examples\n\n### Smart UI Interaction Workflow\n\n```javascript\n// 1. First, understand the page structure\nawait send_command_to_electron({\n  command: 'get_page_structure',\n});\n\n// 2. Click a button by its text (much more reliable than selectors)\nawait send_command_to_electron({\n  command: 'click_by_text',\n  args: {\n    text: 'Login', // Finds buttons containing \"Login\" in text, aria-label, or title\n  },\n});\n\n// 3. Fill inputs by their label or placeholder text\nawait send_command_to_electron({\n  command: 'fill_input',\n  args: {\n    text: 'username', // Finds input with label \"Username\" or placeholder \"Enter username\"\n    value: 'john.doe@example.com',\n  },\n});\n\nawait send_command_to_electron({\n  command: 'fill_input',\n  args: {\n    text: 'password',\n    value: 'secretpassword',\n  },\n});\n\n// 4. Select dropdown options by visible text\nawait send_command_to_electron({\n  command: 'select_option',\n  args: {\n    text: 'country', // Finds select with label containing \"country\"\n    value: 'United States', // Selects option with this text\n  },\n});\n\n// 5. Take a screenshot to verify the result\nawait take_screenshot();\n```\n\n### Advanced Element Detection\n\n```javascript\n// Find all interactive elements with detailed information\nawait send_command_to_electron({\n  command: 'find_elements',\n});\n\n// This returns detailed info about every clickable element and input:\n// {\n//   \"type\": \"clickable\",\n//   \"text\": \"Submit Form\",\n//   \"id\": \"submit-btn\",\n//   \"className\": \"btn btn-primary\",\n//   \"ariaLabel\": \"Submit the registration form\",\n//   \"position\": { \"x\": 100, \"y\": 200, \"width\": 120, \"height\": 40 },\n//   \"visible\": true\n// }\n```\n\n### Automated UI Testing\n\n```javascript\n// Launch app in development mode\nawait launch_electron_app({\n  appPath: '/path/to/app',\n  devMode: true,\n});\n\n// Take a screenshot\nawait take_screenshot();\n\n// Click a button programmatically\nawait send_command_to_electron({\n  command: 'eval',\n  args: {\n    code: \"document.querySelector('#submit-btn').click()\",\n  },\n});\n\n// Verify the result\nawait send_command_to_electron({\n  command: 'get_title',\n});\n```\n\n### Development Debugging\n\n```javascript\n// Get window information\nconst windowInfo = await get_electron_window_info();\n\n// Extract application data\nawait send_command_to_electron({\n  command: 'eval',\n  args: {\n    code: 'JSON.stringify(window.appState, null, 2)',\n  },\n});\n\n// Monitor logs\nawait read_electron_logs({\n  logType: 'all',\n  lines: 100,\n});\n```\n\n### Performance Monitoring\n\n```javascript\n// Get system information\nawait send_command_to_electron({\n  command: 'eval',\n  args: {\n    code: '({memory: performance.memory, timing: performance.timing})',\n  },\n});\n\n// Take periodic screenshots for visual regression testing\nawait take_screenshot({\n  outputPath: '/tests/screenshots/current.png',\n});\n```\n\n## 🏗️ Architecture\n\n### Chrome DevTools Protocol Integration\n\n- **Universal Compatibility**: Works with any Electron app that has remote debugging enabled\n- **Real-time Communication**: WebSocket-based command execution with the renderer process\n- **No App Modifications**: Zero changes required to target applications\n\n### Process Management\n\n- **Clean Environment**: Handles `ELECTRON_RUN_AS_NODE` and other environment variables\n- **Resource Tracking**: Monitors PIDs, memory usage, and application lifecycle\n- **Graceful Shutdown**: Proper cleanup and process termination\n\n### Cross-Platform Support\n\n- **macOS**: Uses Playwright CDP with screencapture fallback\n- **Windows**: PowerShell-based window detection and capture\n- **Linux**: X11 window management (planned)\n\n## 🧪 Development\n\n### Prerequisites\n\n- Node.js 20+\n- TypeScript 4.5+\n- **Electron** - Required for running and testing Electron applications\n\n  ```bash\n  # Install Electron globally (recommended)\n  npm install -g electron\n\n  # Or install locally in your project\n  npm install electron --save-dev\n  ```\n\n### Target Application Setup\n\nFor the MCP server to work with your Electron application, you need to enable remote debugging. Add this code to your Electron app's main process:\n\n```javascript\nconst { app } = require('electron');\nconst isDev = process.env.NODE_ENV === 'development' || process.argv.includes('--dev');\n\n// Enable remote debugging in development mode\nif (isDev) {\n  app.commandLine.appendSwitch('remote-debugging-port', '9222');\n}\n```\n\n**Alternative approaches:**\n\n```bash\n# Launch your app with debugging enabled\nelectron . --remote-debugging-port=9222\n\n# Or via npm script\nnpm run dev -- --remote-debugging-port=9222\n```\n\n**Note:** The MCP server automatically scans ports 9222-9225 to detect running Electron applications with remote debugging enabled.\n\n### Setup\n\n```bash\ngit clone https://github.com/halilural/electron-mcp-server.git\ncd electron-mcp-server\n\nnpm install\nnpm run build\n\n# Run tests\nnpm test\n\n# Development mode with auto-rebuild\nnpm run dev\n```\n\n### Testing\n\nThe project includes comprehensive test files for React compatibility:\n\n```bash\n# Run React compatibility tests\ncd tests/integration/react-compatibility\nelectron test-react-electron.js\n```\n\nSee [`tests/integration/react-compatibility/README.md`](tests/integration/react-compatibility/README.md) for detailed testing instructions and scenarios.\n\n### React Compatibility\n\nThis MCP server has been thoroughly tested with React applications and handles common React patterns correctly:\n\n- **✅ React Event Handling**: Properly handles `preventDefault()` in click handlers\n- **✅ Form Input Detection**: Advanced scoring algorithm works with React-rendered inputs\n- **✅ Component Interaction**: Compatible with React components, hooks, and state management\n\n### Project Structure\n\n```\nsrc/\n├── handlers.ts      # MCP tool handlers\n├── index.ts         # Server entry point\n├── tools.ts         # Tool definitions\n├── screenshot.ts    # Screenshot functionality\n├── utils/\n│   ├── process.ts   # Process management & DevTools Protocol\n│   ├── logs.ts      # Log management\n│   └── project.ts   # Project scaffolding\n└── schemas/         # JSON schemas for validation\n```\n\n## 🔐 Security & Best Practices\n\n- **Sandboxed Execution**: All JavaScript execution is contained within the target Electron app\n- **Path Validation**: Only operates on explicitly provided application paths\n- **Process Isolation**: Each launched app runs in its own process space\n- **No Persistent Access**: No permanent modifications to target applications\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n**Before reporting issues**: Please use the standardized [`ISSUE_TEMPLATE.md`](ISSUE_TEMPLATE.md) for proper bug reporting format. For React compatibility problems or similar technical issues, also review [`REACT_COMPATIBILITY_ISSUES.md`](REACT_COMPATIBILITY_ISSUES.md) for detailed debugging examples, including proper command examples, error outputs, and reproduction steps.\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/awesome-feature`)\n3. Commit your changes (`git commit -m 'Add awesome feature'`)\n4. Push to the branch (`git push origin feature/awesome-feature`)\n5. Open a Pull Request\n\n## 📄 License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## ☕ Support\n\nIf this project helped you, consider buying me a coffee! ☕\n\n[![Ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/halilural)\n\nYour support helps me maintain and improve this project. Thank you! 🙏\n\n## 🙏 Acknowledgments\n\n- **[Model Context Protocol](https://modelcontextprotocol.io)** - Standardized AI-application interface\n- **[Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/)** - Universal debugging interface\n- **[Playwright](https://playwright.dev)** - Reliable browser automation\n- **[Electron](https://electronjs.org)** - Cross-platform desktop applications\n\n## 🔗 Links\n\n- **[GitHub Repository](https://github.com/halilural/electron-mcp-server)**\n- **[NPM Package](https://www.npmjs.com/package/electron-mcp-server)**\n- **[Model Context Protocol](https://modelcontextprotocol.io)**\n- **[Chrome DevTools Protocol Docs](https://chromedevtools.github.io/devtools-protocol/)**\n- **[Issue Template](./ISSUE_TEMPLATE.md)** - Standardized bug reporting format\n- **[React Compatibility Issues Documentation](./REACT_COMPATIBILITY_ISSUES.md)** - Technical debugging guide for React applications\n\n---\n\n**Ready to supercharge your Electron development with AI-powered automation?** Install the MCP server and start building smarter workflows today! 🚀\n","readmeFilename":"README.md"}