Pavel Feldman commited on
Commit
5e0ac89
·
unverified ·
1 Parent(s): 9e176c4

chore: split mcp into mcp and cli (#1346)

Browse files
.github/workflows/publish.yml CHANGED
@@ -73,6 +73,27 @@ jobs:
73
  - run: npm publish
74
  working-directory: ./packages/playwright-mcp
75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  publish-mcp-release-docker:
77
  if: github.event_name == 'release'
78
  runs-on: ubuntu-latest
 
73
  - run: npm publish
74
  working-directory: ./packages/playwright-mcp
75
 
76
+ publish-cli-release-npm:
77
+ if: github.event_name == 'release'
78
+ runs-on: ubuntu-latest
79
+ permissions:
80
+ contents: read
81
+ id-token: write # Required for OIDC npm publishing
82
+ steps:
83
+ - uses: actions/checkout@v5
84
+ - uses: actions/setup-node@v5
85
+ with:
86
+ node-version: 20
87
+ registry-url: https://registry.npmjs.org/
88
+ # Ensure npm 11.5.1 or later is installed (for OIDC npm publishing)
89
+ - name: Update npm
90
+ run: npm install -g npm@latest
91
+ - run: npm ci
92
+ - run: npx playwright install --with-deps
93
+ - run: npm run lint
94
+ - run: npm publish
95
+ working-directory: ./packages/playwright-cli
96
+
97
  publish-mcp-release-docker:
98
  if: github.event_name == 'release'
99
  runs-on: ubuntu-latest
LICENSE CHANGED
@@ -186,8 +186,7 @@
186
  same "printed page" as the copyright notice for easier
187
  identification within third-party archives.
188
 
189
- Portions Copyright (c) Microsoft Corporation.
190
- Portions Copyright 2017 Google Inc.
191
 
192
  Licensed under the Apache License, Version 2.0 (the "License");
193
  you may not use this file except in compliance with the License.
 
186
  same "printed page" as the copyright notice for easier
187
  identification within third-party archives.
188
 
189
+ Copyright (c) Microsoft Corporation.
 
190
 
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
  you may not use this file except in compliance with the License.
package-lock.json CHANGED
@@ -402,6 +402,10 @@
402
  }
403
  }
404
  },
 
 
 
 
405
  "node_modules/@playwright/mcp": {
406
  "resolved": "packages/playwright-mcp",
407
  "link": true
@@ -433,244 +437,6 @@
433
  "dev": true,
434
  "license": "MIT"
435
  },
436
- "node_modules/@rollup/rollup-android-arm-eabi": {
437
- "version": "4.56.0",
438
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz",
439
- "integrity": "sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==",
440
- "cpu": [
441
- "arm"
442
- ],
443
- "dev": true,
444
- "license": "MIT",
445
- "optional": true,
446
- "os": [
447
- "android"
448
- ]
449
- },
450
- "node_modules/@rollup/rollup-android-arm64": {
451
- "version": "4.56.0",
452
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz",
453
- "integrity": "sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==",
454
- "cpu": [
455
- "arm64"
456
- ],
457
- "dev": true,
458
- "license": "MIT",
459
- "optional": true,
460
- "os": [
461
- "android"
462
- ]
463
- },
464
- "node_modules/@rollup/rollup-darwin-arm64": {
465
- "version": "4.56.0",
466
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz",
467
- "integrity": "sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==",
468
- "cpu": [
469
- "arm64"
470
- ],
471
- "dev": true,
472
- "license": "MIT",
473
- "optional": true,
474
- "os": [
475
- "darwin"
476
- ]
477
- },
478
- "node_modules/@rollup/rollup-darwin-x64": {
479
- "version": "4.56.0",
480
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz",
481
- "integrity": "sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==",
482
- "cpu": [
483
- "x64"
484
- ],
485
- "dev": true,
486
- "license": "MIT",
487
- "optional": true,
488
- "os": [
489
- "darwin"
490
- ]
491
- },
492
- "node_modules/@rollup/rollup-freebsd-arm64": {
493
- "version": "4.56.0",
494
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz",
495
- "integrity": "sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==",
496
- "cpu": [
497
- "arm64"
498
- ],
499
- "dev": true,
500
- "license": "MIT",
501
- "optional": true,
502
- "os": [
503
- "freebsd"
504
- ]
505
- },
506
- "node_modules/@rollup/rollup-freebsd-x64": {
507
- "version": "4.56.0",
508
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz",
509
- "integrity": "sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==",
510
- "cpu": [
511
- "x64"
512
- ],
513
- "dev": true,
514
- "license": "MIT",
515
- "optional": true,
516
- "os": [
517
- "freebsd"
518
- ]
519
- },
520
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
521
- "version": "4.56.0",
522
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz",
523
- "integrity": "sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==",
524
- "cpu": [
525
- "arm"
526
- ],
527
- "dev": true,
528
- "license": "MIT",
529
- "optional": true,
530
- "os": [
531
- "linux"
532
- ]
533
- },
534
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
535
- "version": "4.56.0",
536
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz",
537
- "integrity": "sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==",
538
- "cpu": [
539
- "arm"
540
- ],
541
- "dev": true,
542
- "license": "MIT",
543
- "optional": true,
544
- "os": [
545
- "linux"
546
- ]
547
- },
548
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
549
- "version": "4.56.0",
550
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz",
551
- "integrity": "sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==",
552
- "cpu": [
553
- "arm64"
554
- ],
555
- "dev": true,
556
- "license": "MIT",
557
- "optional": true,
558
- "os": [
559
- "linux"
560
- ]
561
- },
562
- "node_modules/@rollup/rollup-linux-arm64-musl": {
563
- "version": "4.56.0",
564
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz",
565
- "integrity": "sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==",
566
- "cpu": [
567
- "arm64"
568
- ],
569
- "dev": true,
570
- "license": "MIT",
571
- "optional": true,
572
- "os": [
573
- "linux"
574
- ]
575
- },
576
- "node_modules/@rollup/rollup-linux-loong64-gnu": {
577
- "version": "4.56.0",
578
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz",
579
- "integrity": "sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==",
580
- "cpu": [
581
- "loong64"
582
- ],
583
- "dev": true,
584
- "license": "MIT",
585
- "optional": true,
586
- "os": [
587
- "linux"
588
- ]
589
- },
590
- "node_modules/@rollup/rollup-linux-loong64-musl": {
591
- "version": "4.56.0",
592
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz",
593
- "integrity": "sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==",
594
- "cpu": [
595
- "loong64"
596
- ],
597
- "dev": true,
598
- "license": "MIT",
599
- "optional": true,
600
- "os": [
601
- "linux"
602
- ]
603
- },
604
- "node_modules/@rollup/rollup-linux-ppc64-gnu": {
605
- "version": "4.56.0",
606
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz",
607
- "integrity": "sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==",
608
- "cpu": [
609
- "ppc64"
610
- ],
611
- "dev": true,
612
- "license": "MIT",
613
- "optional": true,
614
- "os": [
615
- "linux"
616
- ]
617
- },
618
- "node_modules/@rollup/rollup-linux-ppc64-musl": {
619
- "version": "4.56.0",
620
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz",
621
- "integrity": "sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==",
622
- "cpu": [
623
- "ppc64"
624
- ],
625
- "dev": true,
626
- "license": "MIT",
627
- "optional": true,
628
- "os": [
629
- "linux"
630
- ]
631
- },
632
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
633
- "version": "4.56.0",
634
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz",
635
- "integrity": "sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==",
636
- "cpu": [
637
- "riscv64"
638
- ],
639
- "dev": true,
640
- "license": "MIT",
641
- "optional": true,
642
- "os": [
643
- "linux"
644
- ]
645
- },
646
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
647
- "version": "4.56.0",
648
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz",
649
- "integrity": "sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==",
650
- "cpu": [
651
- "riscv64"
652
- ],
653
- "dev": true,
654
- "license": "MIT",
655
- "optional": true,
656
- "os": [
657
- "linux"
658
- ]
659
- },
660
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
661
- "version": "4.56.0",
662
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz",
663
- "integrity": "sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==",
664
- "cpu": [
665
- "s390x"
666
- ],
667
- "dev": true,
668
- "license": "MIT",
669
- "optional": true,
670
- "os": [
671
- "linux"
672
- ]
673
- },
674
  "node_modules/@rollup/rollup-linux-x64-gnu": {
675
  "version": "4.56.0",
676
  "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz",
@@ -699,90 +465,6 @@
699
  "linux"
700
  ]
701
  },
702
- "node_modules/@rollup/rollup-openbsd-x64": {
703
- "version": "4.56.0",
704
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz",
705
- "integrity": "sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==",
706
- "cpu": [
707
- "x64"
708
- ],
709
- "dev": true,
710
- "license": "MIT",
711
- "optional": true,
712
- "os": [
713
- "openbsd"
714
- ]
715
- },
716
- "node_modules/@rollup/rollup-openharmony-arm64": {
717
- "version": "4.56.0",
718
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz",
719
- "integrity": "sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==",
720
- "cpu": [
721
- "arm64"
722
- ],
723
- "dev": true,
724
- "license": "MIT",
725
- "optional": true,
726
- "os": [
727
- "openharmony"
728
- ]
729
- },
730
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
731
- "version": "4.56.0",
732
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz",
733
- "integrity": "sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==",
734
- "cpu": [
735
- "arm64"
736
- ],
737
- "dev": true,
738
- "license": "MIT",
739
- "optional": true,
740
- "os": [
741
- "win32"
742
- ]
743
- },
744
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
745
- "version": "4.56.0",
746
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz",
747
- "integrity": "sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==",
748
- "cpu": [
749
- "ia32"
750
- ],
751
- "dev": true,
752
- "license": "MIT",
753
- "optional": true,
754
- "os": [
755
- "win32"
756
- ]
757
- },
758
- "node_modules/@rollup/rollup-win32-x64-gnu": {
759
- "version": "4.56.0",
760
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz",
761
- "integrity": "sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==",
762
- "cpu": [
763
- "x64"
764
- ],
765
- "dev": true,
766
- "license": "MIT",
767
- "optional": true,
768
- "os": [
769
- "win32"
770
- ]
771
- },
772
- "node_modules/@rollup/rollup-win32-x64-msvc": {
773
- "version": "4.56.0",
774
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz",
775
- "integrity": "sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==",
776
- "cpu": [
777
- "x64"
778
- ],
779
- "dev": true,
780
- "license": "MIT",
781
- "optional": true,
782
- "os": [
783
- "win32"
784
- ]
785
- },
786
  "node_modules/@types/babel__core": {
787
  "version": "7.20.5",
788
  "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -1544,20 +1226,6 @@
1544
  "node": ">= 0.8"
1545
  }
1546
  },
1547
- "node_modules/fsevents": {
1548
- "version": "2.3.2",
1549
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1550
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1551
- "hasInstallScript": true,
1552
- "license": "MIT",
1553
- "optional": true,
1554
- "os": [
1555
- "darwin"
1556
- ],
1557
- "engines": {
1558
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1559
- }
1560
- },
1561
  "node_modules/function-bind": {
1562
  "version": "1.1.2",
1563
  "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -2823,407 +2491,33 @@
2823
  "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
2824
  }
2825
  },
2826
- "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
2827
  "version": "0.21.5",
2828
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
2829
- "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
2830
  "cpu": [
2831
- "ppc64"
2832
  ],
2833
  "dev": true,
2834
  "license": "MIT",
2835
  "optional": true,
2836
  "os": [
2837
- "aix"
2838
  ],
2839
  "engines": {
2840
  "node": ">=12"
2841
  }
2842
  },
2843
- "node_modules/vite/node_modules/@esbuild/android-arm": {
2844
  "version": "0.21.5",
2845
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
2846
- "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
2847
- "cpu": [
2848
- "arm"
2849
- ],
2850
  "dev": true,
 
2851
  "license": "MIT",
2852
- "optional": true,
2853
- "os": [
2854
- "android"
2855
- ],
2856
- "engines": {
2857
- "node": ">=12"
2858
- }
2859
- },
2860
- "node_modules/vite/node_modules/@esbuild/android-arm64": {
2861
- "version": "0.21.5",
2862
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
2863
- "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
2864
- "cpu": [
2865
- "arm64"
2866
- ],
2867
- "dev": true,
2868
- "license": "MIT",
2869
- "optional": true,
2870
- "os": [
2871
- "android"
2872
- ],
2873
- "engines": {
2874
- "node": ">=12"
2875
- }
2876
- },
2877
- "node_modules/vite/node_modules/@esbuild/android-x64": {
2878
- "version": "0.21.5",
2879
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
2880
- "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
2881
- "cpu": [
2882
- "x64"
2883
- ],
2884
- "dev": true,
2885
- "license": "MIT",
2886
- "optional": true,
2887
- "os": [
2888
- "android"
2889
- ],
2890
- "engines": {
2891
- "node": ">=12"
2892
- }
2893
- },
2894
- "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
2895
- "version": "0.21.5",
2896
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
2897
- "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
2898
- "cpu": [
2899
- "arm64"
2900
- ],
2901
- "dev": true,
2902
- "license": "MIT",
2903
- "optional": true,
2904
- "os": [
2905
- "darwin"
2906
- ],
2907
- "engines": {
2908
- "node": ">=12"
2909
- }
2910
- },
2911
- "node_modules/vite/node_modules/@esbuild/darwin-x64": {
2912
- "version": "0.21.5",
2913
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
2914
- "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
2915
- "cpu": [
2916
- "x64"
2917
- ],
2918
- "dev": true,
2919
- "license": "MIT",
2920
- "optional": true,
2921
- "os": [
2922
- "darwin"
2923
- ],
2924
- "engines": {
2925
- "node": ">=12"
2926
- }
2927
- },
2928
- "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
2929
- "version": "0.21.5",
2930
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
2931
- "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
2932
- "cpu": [
2933
- "arm64"
2934
- ],
2935
- "dev": true,
2936
- "license": "MIT",
2937
- "optional": true,
2938
- "os": [
2939
- "freebsd"
2940
- ],
2941
- "engines": {
2942
- "node": ">=12"
2943
- }
2944
- },
2945
- "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
2946
- "version": "0.21.5",
2947
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
2948
- "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
2949
- "cpu": [
2950
- "x64"
2951
- ],
2952
- "dev": true,
2953
- "license": "MIT",
2954
- "optional": true,
2955
- "os": [
2956
- "freebsd"
2957
- ],
2958
- "engines": {
2959
- "node": ">=12"
2960
- }
2961
- },
2962
- "node_modules/vite/node_modules/@esbuild/linux-arm": {
2963
- "version": "0.21.5",
2964
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
2965
- "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
2966
- "cpu": [
2967
- "arm"
2968
- ],
2969
- "dev": true,
2970
- "license": "MIT",
2971
- "optional": true,
2972
- "os": [
2973
- "linux"
2974
- ],
2975
- "engines": {
2976
- "node": ">=12"
2977
- }
2978
- },
2979
- "node_modules/vite/node_modules/@esbuild/linux-arm64": {
2980
- "version": "0.21.5",
2981
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
2982
- "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
2983
- "cpu": [
2984
- "arm64"
2985
- ],
2986
- "dev": true,
2987
- "license": "MIT",
2988
- "optional": true,
2989
- "os": [
2990
- "linux"
2991
- ],
2992
- "engines": {
2993
- "node": ">=12"
2994
- }
2995
- },
2996
- "node_modules/vite/node_modules/@esbuild/linux-ia32": {
2997
- "version": "0.21.5",
2998
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
2999
- "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
3000
- "cpu": [
3001
- "ia32"
3002
- ],
3003
- "dev": true,
3004
- "license": "MIT",
3005
- "optional": true,
3006
- "os": [
3007
- "linux"
3008
- ],
3009
- "engines": {
3010
- "node": ">=12"
3011
- }
3012
- },
3013
- "node_modules/vite/node_modules/@esbuild/linux-loong64": {
3014
- "version": "0.21.5",
3015
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
3016
- "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
3017
- "cpu": [
3018
- "loong64"
3019
- ],
3020
- "dev": true,
3021
- "license": "MIT",
3022
- "optional": true,
3023
- "os": [
3024
- "linux"
3025
- ],
3026
- "engines": {
3027
- "node": ">=12"
3028
- }
3029
- },
3030
- "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
3031
- "version": "0.21.5",
3032
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
3033
- "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
3034
- "cpu": [
3035
- "mips64el"
3036
- ],
3037
- "dev": true,
3038
- "license": "MIT",
3039
- "optional": true,
3040
- "os": [
3041
- "linux"
3042
- ],
3043
- "engines": {
3044
- "node": ">=12"
3045
- }
3046
- },
3047
- "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
3048
- "version": "0.21.5",
3049
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
3050
- "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
3051
- "cpu": [
3052
- "ppc64"
3053
- ],
3054
- "dev": true,
3055
- "license": "MIT",
3056
- "optional": true,
3057
- "os": [
3058
- "linux"
3059
- ],
3060
- "engines": {
3061
- "node": ">=12"
3062
- }
3063
- },
3064
- "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
3065
- "version": "0.21.5",
3066
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
3067
- "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
3068
- "cpu": [
3069
- "riscv64"
3070
- ],
3071
- "dev": true,
3072
- "license": "MIT",
3073
- "optional": true,
3074
- "os": [
3075
- "linux"
3076
- ],
3077
- "engines": {
3078
- "node": ">=12"
3079
- }
3080
- },
3081
- "node_modules/vite/node_modules/@esbuild/linux-s390x": {
3082
- "version": "0.21.5",
3083
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
3084
- "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
3085
- "cpu": [
3086
- "s390x"
3087
- ],
3088
- "dev": true,
3089
- "license": "MIT",
3090
- "optional": true,
3091
- "os": [
3092
- "linux"
3093
- ],
3094
- "engines": {
3095
- "node": ">=12"
3096
- }
3097
- },
3098
- "node_modules/vite/node_modules/@esbuild/linux-x64": {
3099
- "version": "0.21.5",
3100
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
3101
- "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
3102
- "cpu": [
3103
- "x64"
3104
- ],
3105
- "dev": true,
3106
- "license": "MIT",
3107
- "optional": true,
3108
- "os": [
3109
- "linux"
3110
- ],
3111
- "engines": {
3112
- "node": ">=12"
3113
- }
3114
- },
3115
- "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
3116
- "version": "0.21.5",
3117
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
3118
- "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
3119
- "cpu": [
3120
- "x64"
3121
- ],
3122
- "dev": true,
3123
- "license": "MIT",
3124
- "optional": true,
3125
- "os": [
3126
- "netbsd"
3127
- ],
3128
- "engines": {
3129
- "node": ">=12"
3130
- }
3131
- },
3132
- "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
3133
- "version": "0.21.5",
3134
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
3135
- "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
3136
- "cpu": [
3137
- "x64"
3138
- ],
3139
- "dev": true,
3140
- "license": "MIT",
3141
- "optional": true,
3142
- "os": [
3143
- "openbsd"
3144
- ],
3145
- "engines": {
3146
- "node": ">=12"
3147
- }
3148
- },
3149
- "node_modules/vite/node_modules/@esbuild/sunos-x64": {
3150
- "version": "0.21.5",
3151
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
3152
- "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
3153
- "cpu": [
3154
- "x64"
3155
- ],
3156
- "dev": true,
3157
- "license": "MIT",
3158
- "optional": true,
3159
- "os": [
3160
- "sunos"
3161
- ],
3162
- "engines": {
3163
- "node": ">=12"
3164
- }
3165
- },
3166
- "node_modules/vite/node_modules/@esbuild/win32-arm64": {
3167
- "version": "0.21.5",
3168
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
3169
- "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
3170
- "cpu": [
3171
- "arm64"
3172
- ],
3173
- "dev": true,
3174
- "license": "MIT",
3175
- "optional": true,
3176
- "os": [
3177
- "win32"
3178
- ],
3179
- "engines": {
3180
- "node": ">=12"
3181
- }
3182
- },
3183
- "node_modules/vite/node_modules/@esbuild/win32-ia32": {
3184
- "version": "0.21.5",
3185
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
3186
- "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
3187
- "cpu": [
3188
- "ia32"
3189
- ],
3190
- "dev": true,
3191
- "license": "MIT",
3192
- "optional": true,
3193
- "os": [
3194
- "win32"
3195
- ],
3196
- "engines": {
3197
- "node": ">=12"
3198
- }
3199
- },
3200
- "node_modules/vite/node_modules/@esbuild/win32-x64": {
3201
- "version": "0.21.5",
3202
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
3203
- "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
3204
- "cpu": [
3205
- "x64"
3206
- ],
3207
- "dev": true,
3208
- "license": "MIT",
3209
- "optional": true,
3210
- "os": [
3211
- "win32"
3212
- ],
3213
- "engines": {
3214
- "node": ">=12"
3215
- }
3216
- },
3217
- "node_modules/vite/node_modules/esbuild": {
3218
- "version": "0.21.5",
3219
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
3220
- "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
3221
- "dev": true,
3222
- "hasInstallScript": true,
3223
- "license": "MIT",
3224
- "bin": {
3225
- "esbuild": "bin/esbuild"
3226
- },
3227
  "engines": {
3228
  "node": ">=12"
3229
  },
@@ -3253,21 +2547,6 @@
3253
  "@esbuild/win32-x64": "0.21.5"
3254
  }
3255
  },
3256
- "node_modules/vite/node_modules/fsevents": {
3257
- "version": "2.3.3",
3258
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
3259
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
3260
- "dev": true,
3261
- "hasInstallScript": true,
3262
- "license": "MIT",
3263
- "optional": true,
3264
- "os": [
3265
- "darwin"
3266
- ],
3267
- "engines": {
3268
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
3269
- }
3270
- },
3271
  "node_modules/which": {
3272
  "version": "2.0.2",
3273
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -3339,16 +2618,15 @@
3339
  },
3340
  "packages/playwright-cli": {
3341
  "name": "@playwright/cli",
3342
- "version": "0.0.56",
3343
- "extraneous": true,
3344
  "license": "Apache-2.0",
3345
- "devDependencies": {
3346
- "@types/debug": "^4.1.12",
3347
- "@types/minimist": "^1.2.5",
3348
- "debug": "^4.4.3",
3349
- "esbuild": "^0.24.0",
3350
- "minimist": "^1.2.8",
3351
- "typescript": "^5.8.2"
3352
  },
3353
  "engines": {
3354
  "node": ">=18"
@@ -3359,13 +2637,11 @@
3359
  "version": "0.0.60",
3360
  "license": "Apache-2.0",
3361
  "dependencies": {
3362
- "minimist": "^1.2.5",
3363
  "playwright": "1.59.0-alpha-1769452054000",
3364
  "playwright-core": "1.59.0-alpha-1769452054000"
3365
  },
3366
  "bin": {
3367
- "mcp": "cli.js",
3368
- "playwright-cli": "playwright-cli.js"
3369
  },
3370
  "engines": {
3371
  "node": ">=18"
 
402
  }
403
  }
404
  },
405
+ "node_modules/@playwright/cli": {
406
+ "resolved": "packages/playwright-cli",
407
+ "link": true
408
+ },
409
  "node_modules/@playwright/mcp": {
410
  "resolved": "packages/playwright-mcp",
411
  "link": true
 
437
  "dev": true,
438
  "license": "MIT"
439
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
440
  "node_modules/@rollup/rollup-linux-x64-gnu": {
441
  "version": "4.56.0",
442
  "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz",
 
465
  "linux"
466
  ]
467
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
468
  "node_modules/@types/babel__core": {
469
  "version": "7.20.5",
470
  "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
 
1226
  "node": ">= 0.8"
1227
  }
1228
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1229
  "node_modules/function-bind": {
1230
  "version": "1.1.2",
1231
  "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
 
2491
  "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
2492
  }
2493
  },
2494
+ "node_modules/vite/node_modules/@esbuild/linux-x64": {
2495
  "version": "0.21.5",
2496
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
2497
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
2498
  "cpu": [
2499
+ "x64"
2500
  ],
2501
  "dev": true,
2502
  "license": "MIT",
2503
  "optional": true,
2504
  "os": [
2505
+ "linux"
2506
  ],
2507
  "engines": {
2508
  "node": ">=12"
2509
  }
2510
  },
2511
+ "node_modules/vite/node_modules/esbuild": {
2512
  "version": "0.21.5",
2513
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
2514
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
 
 
 
2515
  "dev": true,
2516
+ "hasInstallScript": true,
2517
  "license": "MIT",
2518
+ "bin": {
2519
+ "esbuild": "bin/esbuild"
2520
+ },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2521
  "engines": {
2522
  "node": ">=12"
2523
  },
 
2547
  "@esbuild/win32-x64": "0.21.5"
2548
  }
2549
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2550
  "node_modules/which": {
2551
  "version": "2.0.2",
2552
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
 
2618
  },
2619
  "packages/playwright-cli": {
2620
  "name": "@playwright/cli",
2621
+ "version": "0.0.60",
 
2622
  "license": "Apache-2.0",
2623
+ "dependencies": {
2624
+ "minimist": "^1.2.5",
2625
+ "playwright": "1.59.0-alpha-1769452054000",
2626
+ "playwright-core": "1.59.0-alpha-1769452054000"
2627
+ },
2628
+ "bin": {
2629
+ "playwright-cli": "playwright-cli.js"
2630
  },
2631
  "engines": {
2632
  "node": ">=18"
 
2637
  "version": "0.0.60",
2638
  "license": "Apache-2.0",
2639
  "dependencies": {
 
2640
  "playwright": "1.59.0-alpha-1769452054000",
2641
  "playwright-core": "1.59.0-alpha-1769452054000"
2642
  },
2643
  "bin": {
2644
+ "playwright-mcp": "cli.js"
 
2645
  },
2646
  "engines": {
2647
  "node": ">=18"
packages/playwright-cli/.gitignore ADDED
File without changes
packages/playwright-cli/.npmignore ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ **/*
2
+ !README.md
3
+ !LICENSE
4
+ !playwright-cli.js
packages/playwright-cli/LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright (c) Microsoft Corporation.
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
packages/playwright-cli/README.md ADDED
@@ -0,0 +1,391 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # playwright-cli
2
+
3
+ Playwright CLI with SKILLS
4
+
5
+ ### Playwright CLI vs Playwright MCP
6
+
7
+ This package provides CLI interface into Playwright. If you are using **coding agents**, that is the best fit.
8
+
9
+ - **CLI**: Modern **coding agents** increasingly favor CLI–based workflows exposed as SKILLs over MCP because CLI invocations are more token-efficient: they avoid loading large tool schemas and verbose accessibility trees into the model context, allowing agents to act through concise, purpose-built commands. This makes CLI + SKILLs better suited for high-throughput coding agents that must balance browser automation with large codebases, tests, and reasoning within limited context windows.
10
+
11
+ - **MCP**: MCP remains relevant for specialized agentic loops that benefit from persistent state, rich introspection, and iterative reasoning over page structure, such as exploratory automation, self-healing tests, or long-running autonomous workflows where maintaining continuous browser context outweighs token cost concerns. Learn more about [Playwright MCP](https://github.com/microsoft/playwright-mcp).
12
+
13
+ ### Key Features
14
+
15
+ - **Token-efficient**. Does not force page data into LLM.
16
+
17
+ ### Requirements
18
+ - Node.js 18 or newer
19
+ - Claude Code, GitHub Copilot, or any other coding agent.
20
+
21
+ ## Getting Started
22
+
23
+ ## Installation
24
+
25
+ ```bash
26
+ npm install -g @playwright/cli@latest
27
+ playwright-cli --help
28
+ ```
29
+
30
+ ## Demo
31
+
32
+ ```
33
+ > Use playwright skills to test https://demo.playwright.dev/todomvc/.
34
+ Take screenshots for all successful and failing scenarios.
35
+ ```
36
+
37
+ Your agent will be running commands, but it does not mean you can't play with it manually:
38
+
39
+ ```
40
+ playwright-cli open https://demo.playwright.dev/todomvc/ --headed
41
+ playwright-cli type "Buy groceries"
42
+ playwright-cli press Enter
43
+ playwright-cli type "Water flowers"
44
+ playwright-cli press Enter
45
+ playwright-cli check e21
46
+ playwright-cli check e35
47
+ playwright-cli screenshot
48
+ ```
49
+
50
+ ### Skills-less operation
51
+
52
+ Point your agent at the CLI and let it cook. It'll read the skill off `playwright-cli --help` on its own:
53
+
54
+ ```
55
+ Test the "add todo" flow on https://demo.playwright.dev/todomvc using playwright-cli.
56
+ Check playwright-cli --help for available commands.
57
+ ```
58
+
59
+ ### Installing skills
60
+
61
+ Claude Code, GitHub copilot and others will let you install the Playwright skills into the agentic loop.
62
+
63
+ #### plugin (recommended)
64
+ ```bash
65
+ /plugin marketplace add microsoft/playwright-cli
66
+ /plugin install playwright-cli
67
+ ```
68
+
69
+ #### manual
70
+
71
+ ```bash
72
+ mkdir -p .claude/skills/playwright-cli
73
+ curl -o .claude/skills/playwright-cli/SKILL.md \
74
+ https://raw.githubusercontent.com/microsoft/playwright-cli/main/skills/playwright-cli/SKILL.md
75
+ ```
76
+
77
+ ## Headed operation
78
+
79
+ Playwright CLI is headless by default. If you'd like to see the browser, pass `--headed` to `open`:
80
+
81
+ ```bash
82
+ playwright-cli open https://playwright.dev --headed
83
+ ```
84
+
85
+ ## Sessions
86
+
87
+ Playwright CLI will use a dedicated persistent profile by default. It means that
88
+ your cookies and other storage state will be preserved between the calls. You can use different
89
+ instances of the browser for different projects with sessions.
90
+
91
+ Following will result in two browsers with separate profiles being available. Pass `--session` to
92
+ the invocation to talk to a specific browser.
93
+
94
+ ```bash
95
+ playwright-cli open https://playwright.dev
96
+ playwright-cli --session=example open https://example.com
97
+ playwright-cli session-list
98
+ ```
99
+
100
+ You can run your coding agent with the `PLAYWRIGHT_CLI_SESSION` environment variable:
101
+
102
+ ```bash
103
+ PLAYWRIGHT_CLI_SESSION=todo-app claude .
104
+ ```
105
+
106
+ Or instruct it to prepend `--session` to the calls.
107
+
108
+ Manage your sessions as follows:
109
+
110
+ ```bash
111
+ playwright-cli session-list # list all sessions
112
+ playwright-cli session-stop [name] # stop session
113
+ playwright-cli session-stop-all # stop all sessions
114
+ playwright-cli session-delete [name] # delete session data along with the profiles
115
+ ```
116
+
117
+ <!-- BEGIN GENERATED CLI HELP -->
118
+
119
+ ## Commands
120
+
121
+ ### Core
122
+
123
+ ```bash
124
+ playwright-cli open <url> # open url
125
+ playwright-cli close # close the page
126
+ playwright-cli type <text> # type text into editable element
127
+ playwright-cli click <ref> [button] # perform click on a web page
128
+ playwright-cli dblclick <ref> [button] # perform double click on a web page
129
+ playwright-cli fill <ref> <text> # fill text into editable element
130
+ playwright-cli drag <startRef> <endRef> # perform drag and drop between two elements
131
+ playwright-cli hover <ref> # hover over element on page
132
+ playwright-cli select <ref> <val> # select an option in a dropdown
133
+ playwright-cli upload <file> # upload one or multiple files
134
+ playwright-cli check <ref> # check a checkbox or radio button
135
+ playwright-cli uncheck <ref> # uncheck a checkbox or radio button
136
+ playwright-cli snapshot # capture page snapshot to obtain element ref
137
+ playwright-cli eval <func> [ref] # evaluate javascript expression on page or element
138
+ playwright-cli dialog-accept [prompt] # accept a dialog
139
+ playwright-cli dialog-dismiss # dismiss a dialog
140
+ playwright-cli resize <w> <h> # resize the browser window
141
+ ```
142
+
143
+ ### Navigation
144
+
145
+ ```bash
146
+ playwright-cli go-back # go back to the previous page
147
+ playwright-cli go-forward # go forward to the next page
148
+ playwright-cli reload # reload the current page
149
+ ```
150
+
151
+ ### Keyboard
152
+
153
+ ```bash
154
+ playwright-cli press <key> # press a key on the keyboard, `a`, `arrowleft`
155
+ playwright-cli keydown <key> # press a key down on the keyboard
156
+ playwright-cli keyup <key> # press a key up on the keyboard
157
+ ```
158
+
159
+ ### Mouse
160
+
161
+ ```bash
162
+ playwright-cli mousemove <x> <y> # move mouse to a given position
163
+ playwright-cli mousedown [button] # press mouse down
164
+ playwright-cli mouseup [button] # press mouse up
165
+ playwright-cli mousewheel <dx> <dy> # scroll mouse wheel
166
+ ```
167
+
168
+ ### Save as
169
+
170
+ ```bash
171
+ playwright-cli screenshot [ref] # screenshot of the current page or element
172
+ playwright-cli pdf # save page as pdf
173
+ ```
174
+
175
+ ### Tabs
176
+
177
+ ```bash
178
+ playwright-cli tab-list # list all tabs
179
+ playwright-cli tab-new [url] # create a new tab
180
+ playwright-cli tab-close [index] # close a browser tab
181
+ playwright-cli tab-select <index> # select a browser tab
182
+ ```
183
+
184
+ ### DevTools
185
+
186
+ ```bash
187
+ playwright-cli console [min-level] # list console messages
188
+ playwright-cli network # list all network requests since loading the page
189
+ playwright-cli run-code <code> # run playwright code snippet
190
+ playwright-cli tracing-start # start trace recording
191
+ playwright-cli tracing-stop # stop trace recording
192
+ ```
193
+ <!-- END GENERATED CLI HELP -->
194
+
195
+ ## Configuration file
196
+
197
+ The Playwright CLI can be configured using a JSON configuration file. You can specify the configuration file using the `--config` command line option:
198
+
199
+ ```bash
200
+ playwright-cli --config path/to/config.json open example.com
201
+ ```
202
+
203
+ Playwright CLI will load config from `playwright-cli.json` by default so that you did not need to specify it every time.
204
+
205
+ <details>
206
+ <summary>Configuration file schema</summary>
207
+
208
+ ```typescript
209
+ {
210
+ /**
211
+ * The browser to use.
212
+ */
213
+ browser?: {
214
+ /**
215
+ * The type of browser to use.
216
+ */
217
+ browserName?: 'chromium' | 'firefox' | 'webkit';
218
+
219
+ /**
220
+ * Keep the browser profile in memory, do not save it to disk.
221
+ */
222
+ isolated?: boolean;
223
+
224
+ /**
225
+ * Path to a user data directory for browser profile persistence.
226
+ * Temporary directory is created by default.
227
+ */
228
+ userDataDir?: string;
229
+
230
+ /**
231
+ * Launch options passed to
232
+ * @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context
233
+ *
234
+ * This is useful for settings options like `channel`, `headless`, `executablePath`, etc.
235
+ */
236
+ launchOptions?: playwright.LaunchOptions;
237
+
238
+ /**
239
+ * Context options for the browser context.
240
+ *
241
+ * This is useful for settings options like `viewport`.
242
+ */
243
+ contextOptions?: playwright.BrowserContextOptions;
244
+
245
+ /**
246
+ * Chrome DevTools Protocol endpoint to connect to an existing browser instance in case of Chromium family browsers.
247
+ */
248
+ cdpEndpoint?: string;
249
+
250
+ /**
251
+ * CDP headers to send with the connect request.
252
+ */
253
+ cdpHeaders?: Record<string, string>;
254
+
255
+ /**
256
+ * Timeout in milliseconds for connecting to CDP endpoint. Defaults to 30000 (30 seconds). Pass 0 to disable timeout.
257
+ */
258
+ cdpTimeout?: number;
259
+
260
+ /**
261
+ * Remote endpoint to connect to an existing Playwright server.
262
+ */
263
+ remoteEndpoint?: string;
264
+
265
+ /**
266
+ * Paths to TypeScript files to add as initialization scripts for Playwright page.
267
+ */
268
+ initPage?: string[];
269
+
270
+ /**
271
+ * Paths to JavaScript files to add as initialization scripts.
272
+ * The scripts will be evaluated in every page before any of the page's scripts.
273
+ */
274
+ initScript?: string[];
275
+ },
276
+
277
+ /**
278
+ * If specified, saves the Playwright video of the session into the output directory.
279
+ */
280
+ saveVideo?: {
281
+ width: number;
282
+ height: number;
283
+ };
284
+
285
+ /**
286
+ * The directory to save output files.
287
+ */
288
+ outputDir?: string;
289
+
290
+ /**
291
+ * Whether to save snapshots, console messages, network logs and other session logs to a file or to the standard output. Defaults to "stdout".
292
+ */
293
+ outputMode?: 'file' | 'stdout';
294
+
295
+ console?: {
296
+ /**
297
+ * The level of console messages to return. Each level includes the messages of more severe levels. Defaults to "info".
298
+ */
299
+ level?: 'error' | 'warning' | 'info' | 'debug';
300
+ },
301
+
302
+ network?: {
303
+ /**
304
+ * List of origins to allow the browser to request. Default is to allow all. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
305
+ */
306
+ allowedOrigins?: string[];
307
+
308
+ /**
309
+ * List of origins to block the browser to request. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
310
+ */
311
+ blockedOrigins?: string[];
312
+ };
313
+
314
+ /**
315
+ * Specify the attribute to use for test ids, defaults to "data-testid".
316
+ */
317
+ testIdAttribute?: string;
318
+
319
+ timeouts?: {
320
+ /*
321
+ * Configures default action timeout: https://playwright.dev/docs/api/class-page#page-set-default-timeout. Defaults to 5000ms.
322
+ */
323
+ action?: number;
324
+
325
+ /*
326
+ * Configures default navigation timeout: https://playwright.dev/docs/api/class-page#page-set-default-navigation-timeout. Defaults to 60000ms.
327
+ */
328
+ navigation?: number;
329
+ };
330
+
331
+ /**
332
+ * Whether to allow file uploads from anywhere on the file system.
333
+ * By default (false), file uploads are restricted to paths within the MCP roots only.
334
+ */
335
+ allowUnrestrictedFileAccess?: boolean;
336
+
337
+ /**
338
+ * Specify the language to use for code generation.
339
+ */
340
+ codegen?: 'typescript' | 'none';
341
+ }
342
+ ```
343
+
344
+ </details>
345
+
346
+ ## Environment
347
+
348
+ | Environment |
349
+ |-------------|
350
+ | `PLAYWRIGHT_MCP_ALLOWED_HOSTS` comma-separated list of hosts this server is allowed to serve from. Defaults to the host the server is bound to. Pass '*' to disable the host check. |
351
+ | `PLAYWRIGHT_MCP_ALLOWED_ORIGINS` semicolon-separated list of TRUSTED origins to allow the browser to request. Default is to allow all. Important: *does not* serve as a security boundary and *does not* affect redirects. |
352
+ | `PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS` allow access to files outside of the workspace roots. Also allows unrestricted access to file:// URLs. By default access to file system is restricted to workspace root directories (or cwd if no roots are configured) only, and navigation to file:// URLs is blocked. |
353
+ | `PLAYWRIGHT_MCP_BLOCKED_ORIGINS` semicolon-separated list of origins to block the browser from requesting. Blocklist is evaluated before allowlist. If used without the allowlist, requests not matching the blocklist are still allowed. Important: *does not* serve as a security boundary and *does not* affect redirects. |
354
+ | `PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS` block service workers |
355
+ | `PLAYWRIGHT_MCP_BROWSER` browser or chrome channel to use, possible values: chrome, firefox, webkit, msedge. |
356
+ | `PLAYWRIGHT_MCP_CAPS` comma-separated list of additional capabilities to enable, possible values: vision, pdf. |
357
+ | `PLAYWRIGHT_MCP_CDP_ENDPOINT` CDP endpoint to connect to. |
358
+ | `PLAYWRIGHT_MCP_CDP_HEADER` CDP headers to send with the connect request, multiple can be specified. |
359
+ | `PLAYWRIGHT_MCP_CODEGEN` specify the language to use for code generation, possible values: "typescript", "none". Default is "typescript". |
360
+ | `PLAYWRIGHT_MCP_CONFIG` path to the configuration file. |
361
+ | `PLAYWRIGHT_MCP_CONSOLE_LEVEL` level of console messages to return: "error", "warning", "info", "debug". Each level includes the messages of more severe levels. |
362
+ | `PLAYWRIGHT_MCP_DEVICE` device to emulate, for example: "iPhone 15" |
363
+ | `PLAYWRIGHT_MCP_EXECUTABLE_PATH` path to the browser executable. |
364
+ | `PLAYWRIGHT_MCP_EXTENSION` Connect to a running browser instance (Edge/Chrome only). Requires the "Playwright MCP Bridge" browser extension to be installed. |
365
+ | `PLAYWRIGHT_MCP_GRANT_PERMISSIONS` List of permissions to grant to the browser context, for example "geolocation", "clipboard-read", "clipboard-write". |
366
+ | `PLAYWRIGHT_MCP_HEADLESS` run browser in headless mode, headed by default |
367
+ | `PLAYWRIGHT_MCP_HOST` host to bind server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces. |
368
+ | `PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS` ignore https errors |
369
+ | `PLAYWRIGHT_MCP_INIT_PAGE` path to TypeScript file to evaluate on Playwright page object |
370
+ | `PLAYWRIGHT_MCP_INIT_SCRIPT` path to JavaScript file to add as an initialization script. The script will be evaluated in every page before any of the page's scripts. Can be specified multiple times. |
371
+ | `PLAYWRIGHT_MCP_ISOLATED` keep the browser profile in memory, do not save it to disk. |
372
+ | `PLAYWRIGHT_MCP_IMAGE_RESPONSES` whether to send image responses to the client. Can be "allow" or "omit", Defaults to "allow". |
373
+ | `PLAYWRIGHT_MCP_NO_SANDBOX` disable the sandbox for all process types that are normally sandboxed. |
374
+ | `PLAYWRIGHT_MCP_OUTPUT_DIR` path to the directory for output files. |
375
+ | `PLAYWRIGHT_MCP_OUTPUT_MODE` whether to save snapshots, console messages, network logs to a file or to the standard output. Can be "file" or "stdout". Default is "stdout". |
376
+ | `PLAYWRIGHT_MCP_PORT` port to listen on for SSE transport. |
377
+ | `PLAYWRIGHT_MCP_PROXY_BYPASS` comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com" |
378
+ | `PLAYWRIGHT_MCP_PROXY_SERVER` specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080" |
379
+ | `PLAYWRIGHT_MCP_SAVE_SESSION` Whether to save the Playwright MCP session into the output directory. |
380
+ | `PLAYWRIGHT_MCP_SAVE_TRACE` Whether to save the Playwright Trace of the session into the output directory. |
381
+ | `PLAYWRIGHT_MCP_SAVE_VIDEO` Whether to save the video of the session into the output directory. For example "--save-video=800x600" |
382
+ | `PLAYWRIGHT_MCP_SECRETS` path to a file containing secrets in the dotenv format |
383
+ | `PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT` reuse the same browser context between all connected HTTP clients. |
384
+ | `PLAYWRIGHT_MCP_SNAPSHOT_MODE` when taking snapshots for responses, specifies the mode to use. Can be "incremental", "full", or "none". Default is incremental. |
385
+ | `PLAYWRIGHT_MCP_STORAGE_STATE` path to the storage state file for isolated sessions. |
386
+ | `PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE` specify the attribute to use for test ids, defaults to "data-testid" |
387
+ | `PLAYWRIGHT_MCP_TIMEOUT_ACTION` specify action timeout in milliseconds, defaults to 5000ms |
388
+ | `PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION` specify navigation timeout in milliseconds, defaults to 60000ms |
389
+ | `PLAYWRIGHT_MCP_USER_AGENT` specify user agent string |
390
+ | `PLAYWRIGHT_MCP_USER_DATA_DIR` path to the user data directory. If not specified, a temporary directory will be created. |
391
+ | `PLAYWRIGHT_MCP_VIEWPORT_SIZE` specify browser viewport size in pixels, for example "1280x720" |
packages/playwright-cli/package.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "@playwright/cli",
3
+ "version": "0.0.60",
4
+ "description": "Playwright CLI",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/microsoft/playwright-cli.git"
8
+ },
9
+ "homepage": "https://playwright.dev",
10
+ "engines": {
11
+ "node": ">=18"
12
+ },
13
+ "author": {
14
+ "name": "Microsoft Corporation"
15
+ },
16
+ "license": "Apache-2.0",
17
+ "scripts": {
18
+ "lint": "echo OK",
19
+ "build": "echo OK",
20
+ "test": "echo OK"
21
+ },
22
+ "dependencies": {
23
+ "minimist": "^1.2.5",
24
+ "playwright": "1.59.0-alpha-1769452054000",
25
+ "playwright-core": "1.59.0-alpha-1769452054000"
26
+ },
27
+ "bin": {
28
+ "playwright-cli": "./playwright-cli.js"
29
+ }
30
+ }
packages/{playwright-mcp → playwright-cli}/playwright-cli.js RENAMED
File without changes
packages/playwright-mcp/.npmignore CHANGED
@@ -2,6 +2,5 @@
2
  !README.md
3
  !LICENSE
4
  !cli.js
5
- !playwright-cli.js
6
  !index.*
7
  !config.d.ts
 
2
  !README.md
3
  !LICENSE
4
  !cli.js
 
5
  !index.*
6
  !config.d.ts
packages/playwright-mcp/package.json CHANGED
@@ -34,12 +34,10 @@
34
  }
35
  },
36
  "dependencies": {
37
- "minimist": "^1.2.5",
38
  "playwright": "1.59.0-alpha-1769452054000",
39
  "playwright-core": "1.59.0-alpha-1769452054000"
40
  },
41
  "bin": {
42
- "mcp": "cli.js",
43
- "playwright-cli": "./playwright-cli.js"
44
  }
45
  }
 
34
  }
35
  },
36
  "dependencies": {
 
37
  "playwright": "1.59.0-alpha-1769452054000",
38
  "playwright-core": "1.59.0-alpha-1769452054000"
39
  },
40
  "bin": {
41
+ "playwright-mcp": "cli.js"
 
42
  }
43
  }