A local browser hand for MCP-capable coding agents. One persistent broker owns the Chrome extension connection while multiple clients connect over standard MCP Streamable HTTP. Each MCP session may control only tabs that it created.
MCP clients ── http://127.0.0.1:32146/mcp ─┐
stdio clients ── server.mjs ───────────────┤
▼
local broker + policy
│
ws://127.0.0.1:32145
│
Chrome MV3 extension
Both listeners are loopback-only. The extension authenticates to the broker with a locally generated pairing credential. Browser data is processed locally and is not sent to Tenmomo.
npm ci
npm run setup
setup generates local configuration but does not load or restart a service.
Load extension/ as an unpacked extension for development. Packaged builds use
manifest.store.json and prompt from the side panel for optional page access.
Start the broker directly for development:
npm start
Connect MCP clients to http://127.0.0.1:32146/mcp. Stdio-only clients can run:
node server.mjs
mcp-session-id is a loopback bearer credential. See SECURITY.md.The store profile statically requests activeTab, sidePanel, storage, and
tabs. It requests scripting and <all_urls> only through a user gesture.
The local development profile has static all-site access.
npm test
npm run validate
npm run package
Packaging emits a Chrome Web Store profile ZIP in dist/, strips source-only
manifests and local examples, and writes an empty pairing credential.
codex mcp add browser-agent --url http://127.0.0.1:32146/mcppi-extension/, then add its absolute path to
Pi’s extensions setting.See PRIVACY-POLICY.md. This project is licensed under the MIT License.