hoverify-mcp 0.0.0-stage → 0.1.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 UnveelWorks
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,140 @@
1
- # Temporary Holding Version
1
+ # hoverify-mcp
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Lets coding agents use [Hoverify](https://tryhoverify.com) in your own browser: audit a page for SEO, accessibility and AI search, inspect an element's HTML and CSS, and take screenshots. It works on logged-in pages, staging and `localhost`, because it runs in the browser you already have open.
4
+
5
+ It's a standard MCP server over stdio, so any MCP client can use it. Tested end to end with Claude Code.
6
+
7
+ ## Requirements
8
+
9
+ - The Hoverify extension for Chrome or Firefox, signed in with an active license
10
+ - Node.js 18 or later
11
+
12
+ ## Setup
13
+
14
+ 1. In the Hoverify popup, open **AI agent** and switch on **Connect to agent**.
15
+ 2. Add the server to your agent. For Claude Code:
16
+
17
+ ```sh
18
+ claude mcp add hoverify -- npx -y hoverify-mcp
19
+ ```
20
+
21
+ For other agents, add this to their MCP config:
22
+
23
+ ```json
24
+ {
25
+ "mcpServers": {
26
+ "hoverify": {
27
+ "command": "npx",
28
+ "args": ["-y", "hoverify-mcp"]
29
+ }
30
+ }
31
+ }
32
+ ```
33
+
34
+ Or, in Claude Code, install it as a plugin, which adds a skill that teaches the agent the audit-and-fix loop:
35
+
36
+ ```sh
37
+ claude plugin marketplace add UnveelWorks/hoverify-mcp
38
+ claude plugin install hoverify@hoverify
39
+ ```
40
+
41
+ 3. The first time the agent connects, the Hoverify icon shows a **!**. Click it and choose **Allow**.
42
+
43
+ You only allow once per computer: every agent on it shares the same key, so the next ones connect without asking. **Forget** on the AI agent page disconnects them all, and Hoverify asks again next time. The connection switches itself off after 30 minutes without calls.
44
+
45
+ ### More than one browser
46
+
47
+ Hoverify can be on in several browsers at once, say Chrome and Helium. Give each a name under **Browser name** on its AI agent page. Browsers built on Chromium call themselves Chrome, so this is how agents tell them apart. Each agent session then picks a browser like this:
48
+
49
+ 1. **You ask for one.** Tell the agent "do it in Helium", and it passes `browser: "helium"` to the tool. The session stays in that browser afterwards, even if it's renamed, ahead of the project's config or a browser keeping the project, until it's asked for another one. If that browser closes, calls say so instead of moving elsewhere.
50
+ 2. **The project's config names one.** Add `--browser` and the name to the args in that project's MCP config, and every session in the project uses that browser:
51
+
52
+ ```json
53
+ "args": ["-y", "hoverify-mcp", "--browser", "Helium"]
54
+ ```
55
+
56
+ `HOVERIFY_BROWSER=Helium` in the environment does the same. A browser picked either way is never swapped for another: if it isn't connected, the call fails and says so.
57
+ 3. **You keep the project in a browser.** The **Sessions** tab on a browser's AI agent page lists the connected agent sessions by project folder. Switch one on to keep that project there, and its sessions work in that browser from their next call. **Only kept projects** makes the browser turn every other project away, even when an agent asks for it. A project's MCP config still wins over a browser keeping it.
58
+ 4. **Otherwise**, a session's first call goes to the browser you used last, and the session stays there. If that browser goes away, its next call moves to another one and says so.
59
+
60
+ `get_status` shows which browser the session uses, why, its project, and which other browsers are connected. Sessions in the same browser each reach the tab you're viewing plus only the tabs they opened.
61
+
62
+ ## Tools
63
+
64
+ | Tool | What it does |
65
+ |---|---|
66
+ | `get_status` | Checks the connection and shows the active tab |
67
+ | `open_url` | Opens a URL for the agent to work on and returns its tab id |
68
+ | `reload_tab` | Reloads a tab and waits for it to load |
69
+ | `close_tab` | Closes one or all of the tabs the agent opened |
70
+ | `audit_seo` | Meta tags, headings, images, links and structured data, plus broken links (`check_links: true`) and PageSpeed Insights (`page_speed: true`) |
71
+ | `audit_accessibility` | axe-core plus Hoverify's checks, with selectors, snippets and contrast fixes |
72
+ | `audit_geo` | How well AI search can read and cite the page, with a score |
73
+ | `get_site_stack` | Frameworks, libraries, hosting, DNS and SSL |
74
+ | `inspect_element` | An element's HTML, authored CSS, custom properties and box |
75
+ | `get_selected_element` | The element you pinned or are hovering in the Hoverify inspector |
76
+ | `capture` | A screenshot of the viewport, the full page, an element or an area, with its page context, optionally marked up with annotations pointing at elements by selector |
77
+ | `design_screenshot` | A finished, shareable image made in Hoverify's screenshot editor: a background built from glows, gradients, patterns, type, photos and grain, padding, browser or device frame, tilt, annotations pointing at elements by selector, and headlines, text and logos placed on the canvas, or the same without a screenshot |
78
+ | `get_design` | Reads a design the user has open in the screenshot editor, as they have it now: a preview, its choices in `design_screenshot`'s terms, which of the agent's choices the user changed, and every annotation with whose it is and where it sits |
79
+ | `capture_devices` | The page on up to 6 phones, tablets and desktop sizes, each loaded fresh at its screen size with its own browser's user agent and shown in the device with its browser bars, as Hoverify's Responsive view draws it; or each device's full page |
80
+ | `get_fonts` | Font families with weights, sizes, where they're used and where they load from, plus fonts that didn't load |
81
+ | `get_colors` | Colour variables, the colours used for text, backgrounds and borders, and every declared colour |
82
+ | `list_assets` | Images, inline SVGs, videos, Lottie files, PDFs and the favicon, with sizes and dimensions |
83
+ | `download_assets` | Saves chosen assets from the page to local files |
84
+
85
+ Audits return a ranked fix list in Markdown by default; pass `format: "json"` for the raw result.
86
+
87
+ `capture`, `capture_devices`, `design_screenshot` and `get_design` follow your capture settings in Hoverify: with "Hide sensitive content" on, emails, phone numbers, card numbers, keys and filled-in fields found on the page are pixelated in the image before it leaves the browser, and with "Hide clutter" on, cookie banners and chat widgets are hidden while it captures. The agent can pass `raw: true` to `capture` when it needs those exact pixels, and the result then says the settings were skipped.
88
+
89
+ You can switch off individual tools, PageSpeed and the GEO AI review in the Hoverify popup, on the AI agent page. A tool that's switched off tells the agent so instead of running.
90
+
91
+ The agent can reach the tab you're viewing and tabs it opened with `open_url`, nothing else. It can close only the tabs it opened, it can download only assets that are on the page, and it can't click or type on pages.
92
+
93
+ ## What leaves your machine
94
+
95
+ The server listens on `127.0.0.1` only, and it makes no network requests of its own. Web pages can't connect to it.
96
+
97
+ On first run it writes a random key to `~/.hoverify/agent.key`, readable only by you. When you allow an agent, Hoverify keeps a copy, and after that the extension and the server each prove they hold the key on every connection without sending it. A program that grabs the port can't drive your browser without Hoverify asking you first.
98
+
99
+ What the tools return goes to your agent, and from there to the agent's model provider, like anything else the agent reads. Some tools also reach outside services, the same way they do in the extension:
100
+
101
+ - `get_site_stack` looks up the page's hostname for hosting (check-host.net, or Hoverify's own server when that fails), DNS (Google Public DNS) and SSL (decoder.link).
102
+ - `audit_seo` with `check_links: true` requests every link on the page from your browser.
103
+ - `audit_seo` with `page_speed: true` sends the page's URL to Google PageSpeed Insights and the Chrome UX Report.
104
+ - `audit_geo` with `ai: true` sends the page's text to the model provider you set up in Hoverify.
105
+
106
+ Screenshots are saved as PNG files in your system's temp folder, under `hoverify/`.
107
+
108
+ ## Troubleshooting
109
+
110
+ | The agent says | What to do |
111
+ |---|---|
112
+ | Hoverify isn't connected | Switch on **Connect to agent** in the popup. It switches off after 30 idle minutes and when you sign out. |
113
+ | Hoverify is asking whether to let this agent connect | Click the Hoverify icon and choose **Allow**. |
114
+ | Hoverify isn't connected, and another app already uses port 47862 | Pick a free port under **Port** on Hoverify's AI agent page, then add the server to your agent again with the snippets there. They set `HOVERIFY_MCP_PORT` to the same port. |
115
+ | Another agent session holds the connection and uses a different key file | The agents run with different home folders, so each made its own key. Set `HOVERIFY_HOME` to the same folder for all of them. |
116
+ | Helium isn't connected, or the browser this session was asked to use isn't connected | The session was asked for a browser, or its config names one, and that browser isn't connected. Switch on **Connect to agent** in it, have the agent pass `browser` to use another connected one, or check the name under **Browser name** on its AI agent page. |
117
+ | Helium only works for the projects the user keeps in it | That browser has **Only kept projects** on. Keep this project there on its **Sessions** tab, or switch the option off. |
118
+ | More than one connected browser is named Chrome | Give the browsers different names on their AI agent pages. |
119
+ | Hoverify and hoverify-mcp are different versions | Update the extension, and restart the agent so `npx` runs the latest hoverify-mcp. |
120
+ | Another agent session holds the connection to Hoverify and runs a different version of hoverify-mcp | An agent session started before an update still holds the connection. Restart your agent sessions. A newer session also takes over on its own once no browser is connected through the older one, which happens when Hoverify updates. |
121
+ | The tab never became visible | Chrome can only screenshot a tab that's on screen. Bring the browser window forward, or keep it beside your editor. |
122
+
123
+ ## Running from source
124
+
125
+ Straight from GitHub, without cloning (it builds on install):
126
+
127
+ ```sh
128
+ claude mcp add hoverify -- npx -y github:UnveelWorks/hoverify-mcp
129
+ ```
130
+
131
+ Or from a clone:
132
+
133
+ ```sh
134
+ npm install
135
+ npm run build
136
+ claude mcp add hoverify -- node /path/to/hoverify-mcp/dist/index.js
137
+ npm test
138
+ ```
139
+
140
+ A release bumps the version in `package.json`, `server.json` (twice), `.claude-plugin/plugin.json` and the pinned `npx` version in `.mcp.json`.