safari-mcp
Version:
Safari browser automation for AI agents — native macOS, zero Chrome overhead. 98 tools via AppleScript + JavaScript.
35 lines (34 loc) • 1.6 kB
JavaScript
function setStatus(c, t, i) {
document.getElementById("statusDot").className = "dot " + c;
document.getElementById("statusText").textContent = t;
document.getElementById("info").textContent = i;
}
async function getVal(k, d) {
try { const r = await browser.storage.local.get(k); return r[k] !== undefined ? r[k] : d; }
catch { return d; }
}
async function check() {
const on = await getVal("mcpEnabled", true);
document.getElementById("enableToggle").checked = on;
if (!on) { setStatus("paused", "Paused", "Toggle to resume"); return; }
// Ask background script for real-time status first
try {
const resp = await browser.runtime.sendMessage({ action: "getStatus" });
if (resp) {
if (resp.connected) { setStatus("connected", "Connected", "Port 9224"); return; }
if (!resp.enabled) { setStatus("paused", "Paused", "Toggle to resume"); return; }
}
} catch {}
// Fallback: read from storage
const s = await getVal("mcpStatus", null);
if (s === "connected") setStatus("connected", "Connected", "Port 9224");
else if (s === "paused") setStatus("paused", "Paused", "Toggle to resume");
else if (s === "checking") setStatus("checking", "Connecting...", "Trying port 9224...");
else setStatus("disconnected", "Not connected", "Start the MCP server to connect");
}
document.getElementById("enableToggle").addEventListener("change", async (e) => {
await browser.storage.local.set({ mcpEnabled: e.target.checked });
try { browser.runtime.sendMessage({ action: "setEnabled", enabled: e.target.checked }); } catch {}
setTimeout(check, 500);
});
check();