annotation-overlay-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@annotation-overlay-mcpread annotations from the overlay and list all issues found"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Annotation Overlay MCP
DOM-aware visual annotation overlay for web feedback. Draw arrows, boxes, text, freehand strokes, click elements, and annotate text selections — all in one toolbar. Submit structured annotations to Claude Code via MCP.
6 interaction modes. Zero JS dependencies. Chrome Extension + MCP Server.
[Browser Page] ←→ [Chrome Extension] ←→ [MCP Server] ←→ [Claude Code]
overlay.js bridge.js HTTP + stdio read/clear toolsQuick Start
1. Install & Start MCP Server
git clone https://github.com/cc10143/annotation-overlay-mcp.git
cd annotation-overlay-mcp
npm install
npm start
# → HTTP server on port 3847 + MCP stdio transport connected2. Load Chrome Extension
Open
chrome://extensionsEnable Developer mode
Click Load unpacked
Select the
extension/directory
The overlay now auto-injects on every page. Press Ctrl+Shift+A to toggle the toolbar.
3. Configure Claude Code MCP
// ~/.claude/settings.json
{
"mcpServers": {
"annotation-overlay-mcp": {
"command": "node",
"args": ["D:/KaiFa/annotation-overlay/server/index.js"]
}
}
}Or use the CLI:
claude mcp add annotation-overlay-mcp -- node D:/KaiFa/annotation-overlay/server/index.jsRelated MCP server: gotham-browser
Usage
Annotation Workflow
Open any page — the overlay auto-injects via Chrome extension
Annotate — use any of the 6 tools to mark issues
Submit — click Submit to send structured JSON to the MCP server
Agent reads — Claude Code calls
read_annotations→ processes feedbackPage refreshes — extension auto-reinjects overlay → next round
Tools
Tool | Label | How | DOM Link |
Arrow | ➤ | Click & drag → arrow with comment | Element under arrowhead |
Box | □ | Click & drag → rectangle with comment | Element under box center |
Text | T | Click → floating text label | Element under click point |
Freehand | ✎ | Click & drag → freeform drawing | Element under bbox center |
Select | + | Hover highlights blue → click to pin numbered badge | Clicked element |
TextSel | [ ] | Select page text → comment input at selection | Containing element |
Keyboard Shortcuts
Key | Action |
| Toggle overlay |
| Undo last annotation |
| Cancel drawing / close overlay |
| Confirm comment |
| Newline in comment |
Colors
5 preset colors: red #e94560, blue #4080f0, green #2ecc71, yellow #f1c40f, purple #9b59b6.
MCP Tools
read_annotations
Read all pending annotations. Each annotation includes:
{
"id": "uuid",
"type": "arrow | circle | text | freehand | select | textsel",
"comment": "user feedback text",
"selector": "div.card:nth-child(1) > button.btn-primary",
"fallbackSelectors": [
{ "type": "id", "value": "#submit-btn" },
{ "type": "cssPath", "value": "div.card:nth-child(1) > ..." },
{ "type": "contentHash", "value": "Buy Now-a3f8b2c1" }
],
"tagName": "BUTTON",
"classes": ["btn-primary"],
"elementText": "Buy Now",
"contentHash": "Buy Now-a3f8b2c1",
"position": { "start": {"x":100,"y":200}, "end": {"x":300,"y":400} },
"color": "#e94560"
}clear_annotations
Clear all stored annotations. Call after processing feedback.
Selector Fallback Chain
When the agent regenerates the page, CSS selectors may break. Each annotation carries a fallback chain:
id —
#element-id(most stable)cssPath —
div.card:nth-child(1) > button.btn-primarycontentHash —
Buy Now-a3f8b2c1(first 40 chars of text + djb2 hash)
The agent should try each fallback in order when resolving elements after page changes.
Standalone Use (Without Extension)
The overlay can be injected into any page via script tag or browser console:
<script src="annotation-overlay.js"></script>Or via Tandem evaluate / Playwright:
// Tandem
tandem_devtools_evaluate({ function: "..." }) // paste annotation-overlay.js contents
// Playwright
await page.evaluate(fs.readFileSync('annotation-overlay.js', 'utf-8'));Public API:
__annotationOverlay.activate() // show toolbar
__annotationOverlay.deactivate() // hide overlay
__annotationOverlay.serialize() // → JSON string
__annotationOverlay.clear() // remove all annotations
__annotationOverlay.submit() // send to MCP server via direct fetchArchitecture
┌──────────────────────────────────────────────────────┐
│ annotation-overlay.js (src/, ~700 lines) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Toolbar │ │ Canvas │ │ DOM Bridge │ │
│ │ 6 tools │ │ 2D ctx │ │ elementFromPoint │ │
│ │ 5 colors│ │ DPR │ │ CSS selector gen │ │
│ │ Submit │ │ undo │ │ contentHash │ │
│ └────┬─────┘ └────┬─────┘ └────────┬─────────┘ │
│ │ │ │ │
│ └─────────────┴───────┬────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Annotation Model│ │
│ │ + Serializer │ │
│ │ + Fallback │ │
│ └────────┬────────┘ │
└─────────────────────────────┼────────────────────────┘
│ postMessage
┌─────────────────────────────┼────────────────────────┐
│ Chrome Extension ▼ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ bridge.js │ │ service- │ │
│ │ (ISOLATED) │ │ worker.js │ │
│ │ inject + │ │ badge + │ │
│ │ relay │ │ relay │ │
│ └──────┬───────┘ └──────┬───────┘ │
└─────────┼──────────────────┼──────────────────────────┘
│ │ HTTP (port 3847)
┌─────────▼──────────────────▼──────────────────────────┐
│ MCP Server (Node.js, single process) │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Express API │ │ MCP stdio │ │
│ │ POST/GET/ │ │ read_ │ │
│ │ DELETE ann │ │ clear tools │ │
│ └──────┬───────┘ └──────┬───────┘ │
│ └────────┬─────────┘ │
│ ┌────────▼────────┐ │
│ │ In-memory Store│ │
│ └─────────────────┘ │
└────────────────────────────────────────────────────────┘Comparison
Annotation Overlay MCP | Vibe Annotations | Dongke-X/redline | |
Drawing tools | 4 (arrow/box/text/freehand) | None | Full HTML editor |
Click-to-select | Yes (+ badge) | Yes | Full edit |
Text selection annotation | Yes | No | No |
MCP automation | Yes (stdio) | Yes (SSE/HTTP) | No (file-based) |
Selector fallback | id→cssPath→contentHash | source maps | id→cssPath→contentHash |
License | MIT | PolyForm Shield | Apache 2.0 |
Dependencies | 3 (Express + cors + MCP SDK) | Many (WXT, etc.) | Many (React, etc.) |
Configuration
Env Var | Default | Description |
|
| HTTP server port |
License
MIT — Copyright (c) 2026 gaogao
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityAmaintenanceMCP server that exposes web page annotations to AI coding agents, enabling automated implementation of visual feedback and design tweaks.1124
- Flicense-qualityBmaintenanceEnables Claude Code to control a real browser using AI for web scraping, competitive intelligence, and UX auditing through the MCP protocol.
- Alicense-qualityBmaintenanceEnables visual annotation on web pages for Claude Code, allowing element selection, comment addition, screenshot capture, and structured UI feedback for code fixes via an MCP server.MIT
- Flicense-qualityAmaintenanceEnables visual browser feedback collection directly into Claude Code. Users can point at elements in their browser and send annotated feedback that Claude can act on immediately.1
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
Screenshot, diff, audit and sitemap-capture any web page — 5 MCP tools for AI agents.
Human feedback for AI agents: share HTML, get a live review link, read anchored notes as markdown.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cc10143/annotation-overlay-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server