@bool01master/gemini-web-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,33 @@
1
+ {
2
+ "manifest_version": 3,
3
+ "name": "Gemini Local MCP Bridge",
4
+ "version": "0.1.0",
5
+ "description": "Bridge gemini.google.com to a local MCP server running on localhost.",
6
+ "permissions": [
7
+ "tabs",
8
+ "activeTab"
9
+ ],
10
+ "background": {
11
+ "service_worker": "background.js"
12
+ },
13
+ "host_permissions": [
14
+ "https://gemini.google.com/*",
15
+ "https://*.googleusercontent.com/*",
16
+ "https://*.usercontent.google.com/*"
17
+ ],
18
+ "content_scripts": [
19
+ {
20
+ "matches": [
21
+ "https://gemini.google.com/*"
22
+ ],
23
+ "js": [
24
+ "content.js"
25
+ ],
26
+ "run_at": "document_idle"
27
+ }
28
+ ],
29
+ "action": {
30
+ "default_title": "Gemini MCP Bridge",
31
+ "default_popup": "popup.html"
32
+ }
33
+ }
@@ -0,0 +1,43 @@
1
+ body {
2
+ margin: 0;
3
+ background: #f4efe6;
4
+ color: #211d17;
5
+ font: 13px/1.45 "Avenir Next", "Helvetica Neue", sans-serif;
6
+ }
7
+
8
+ .popup {
9
+ width: 360px;
10
+ padding: 16px;
11
+ }
12
+
13
+ h1 {
14
+ margin: 0 0 8px;
15
+ font-size: 18px;
16
+ }
17
+
18
+ .hint {
19
+ margin: 0 0 12px;
20
+ }
21
+
22
+ button {
23
+ appearance: none;
24
+ border: 0;
25
+ border-radius: 999px;
26
+ background: #1d6b57;
27
+ color: #fff9ef;
28
+ padding: 8px 14px;
29
+ font: inherit;
30
+ cursor: pointer;
31
+ }
32
+
33
+ pre {
34
+ white-space: pre-wrap;
35
+ word-break: break-word;
36
+ background: #fff9ef;
37
+ border: 1px solid #d4c6b2;
38
+ border-radius: 12px;
39
+ padding: 12px;
40
+ margin: 12px 0 0;
41
+ max-height: 320px;
42
+ overflow: auto;
43
+ }
@@ -0,0 +1,18 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Gemini MCP Bridge</title>
7
+ <link rel="stylesheet" href="popup.css" />
8
+ </head>
9
+ <body>
10
+ <main class="popup">
11
+ <h1>Gemini MCP Bridge</h1>
12
+ <p class="hint">Keep a Gemini tab open. The content script will connect to `http://127.0.0.1:8765` automatically.</p>
13
+ <button id="refreshButton" type="button">Refresh Status</button>
14
+ <pre id="statusBox">Loading…</pre>
15
+ </main>
16
+ <script src="popup.js"></script>
17
+ </body>
18
+ </html>
@@ -0,0 +1,37 @@
1
+ async function getActiveGeminiTab() {
2
+ const [tab] = await chrome.tabs.query({
3
+ active: true,
4
+ currentWindow: true,
5
+ url: ["https://gemini.google.com/*"],
6
+ });
7
+ return tab || null;
8
+ }
9
+
10
+ async function refreshStatus() {
11
+ const statusBox = document.getElementById("statusBox");
12
+ const tab = await getActiveGeminiTab();
13
+
14
+ if (!tab?.id) {
15
+ statusBox.textContent = "Open an active Gemini tab first.";
16
+ return;
17
+ }
18
+
19
+ try {
20
+ const response = await chrome.tabs.sendMessage(tab.id, {
21
+ type: "popup:get_status",
22
+ });
23
+ statusBox.textContent = JSON.stringify(response, null, 2);
24
+ } catch (error) {
25
+ statusBox.textContent = `Unable to reach the Gemini content script.\n${String(error)}`;
26
+ }
27
+ }
28
+
29
+ document.getElementById("refreshButton").addEventListener("click", () => {
30
+ refreshStatus().catch((error) => {
31
+ document.getElementById("statusBox").textContent = String(error);
32
+ });
33
+ });
34
+
35
+ refreshStatus().catch((error) => {
36
+ document.getElementById("statusBox").textContent = String(error);
37
+ });
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@bool01master/gemini-web-mcp",
3
+ "version": "1.0.0",
4
+ "description": "Local MCP server that automates gemini.google.com via a Chrome extension bridge.",
5
+ "type": "module",
6
+ "main": "src/index.js",
7
+ "bin": {
8
+ "gemini-web-mcp": "src/index.js"
9
+ },
10
+ "files": [
11
+ "src/",
12
+ "extension/",
13
+ "README.md"
14
+ ],
15
+ "scripts": {
16
+ "start": "node src/index.js",
17
+ "extension:path": "node src/index.js --extension-path",
18
+ "release": "bash scripts/release.sh",
19
+ "release:dry-run": "bash scripts/release.sh --dry-run",
20
+ "list:profiles": "node scripts/list-profiles.js",
21
+ "smoke": "node scripts/smoke.js",
22
+ "smoke:browser": "node scripts/smoke-browser.js",
23
+ "open:profile": "node scripts/open-profile.js",
24
+ "open:debug-profile": "GEMINI_WEB_REMOTE_DEBUGGING_PORT=9222 node scripts/open-profile.js",
25
+ "trace:gemini": "node scripts/trace-gemini.js"
26
+ },
27
+ "keywords": ["mcp", "gemini", "chrome-extension", "ai", "image-generation"],
28
+ "author": "",
29
+ "license": "ISC",
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "dependencies": {
34
+ "@modelcontextprotocol/sdk": "^1.27.1",
35
+ "playwright-core": "^1.58.2",
36
+ "zod": "^4.3.6"
37
+ }
38
+ }