OmniScrape MCP

OmniScrape MCP

A free, open-source point-and-click web scraper that connects your browser to Claude over the Model Context Protocol, allowing you to highlight elements on any page and scrape them without manual copying.

Category
访问服务器

README

OmniScrape MCP

A free, open-source point-and-click web scraper that plugs your browser straight into Claude over the Model Context Protocol.

Highlight elements on any page with your mouse, and Claude can read exactly what you picked — or the whole page as clean Markdown — without you copying, pasting, or handing an API key to a scraping service.

Pick one price in a list and OmniScrape finds the other 47.

How it fits together

An MCP server is a local Node process. The scraping has to happen inside a real browser, in a real page's DOM. Those two worlds cannot see each other, so the extension dials into a loopback WebSocket the server owns:

┌──────────┐   stdio    ┌──────────────────┐   ws://127.0.0.1:3000   ┌───────────────────┐
│  Claude  │◄──────────►│  MCP server      │◄───────────────────────►│ Chrome extension  │
│          │  JSON-RPC  │  (Node)          │      request/response   │  (Manifest V3)    │
└──────────┘            └──────────────────┘                         └─────────┬─────────┘
                                                                               │ scripting
                                                                     ┌─────────▼─────────┐
                                                                     │  the page's DOM   │
                                                                     └───────────────────┘

Data flows two ways:

  • Pull — Claude calls a tool, the server asks the extension, the extension scrapes and answers. Exposed as MCP tools.
  • Push — you click Send to Claude. There is no tool call in flight to attach that to, so captures land in a server-side inbox exposed as MCP resources, and the server fires resources/list_changed.

Install

Requires Node 20+ and Chrome 114+.

git clone <this-repo> && cd omniscrape-mcp
npm run install:all

Register the server with Claude Code:

claude mcp add omniscrape -- node "$(pwd)/mcp-server/src/index.js"

<details> <summary>Claude Desktop instead</summary>

{
  "mcpServers": {
    "omniscrape": {
      "command": "node",
      "args": ["<absolute-path>/mcp-server/src/index.js"]
    }
  }
}

</details>

Then load the extension — there is no build step:

  1. chrome://extensions → enable Developer mode
  2. Load unpacked → pick the extension/ folder
  3. Click the OmniScrape icon, then Grant page access

The status dot goes green when the panel reaches the server. Claude launches the server itself, so start Claude first (or run npm start in mcp-server to test standalone).

Using it

Say things like:

  • "Read the page I'm looking at and summarise the argument."
  • "Scrape what I selected and put it in a table."
  • "Pull every product name and price off this page."

Or drive it from the panel: Start Selecting Elements → click things → Send to Claude.

Selection mode swallows page clicks, so picking a product title does not navigate away. Hovering shows how many similar elements exist; clicking one row of a list captures the whole column. Each pick becomes a field you can rename, scope to All or One, or drop. Esc exits.

Tools

Tool What it does
get_active_tab_markdown Current tab as clean Markdown (Readability + Turndown, GFM tables).
scrape_selected_elements The elements you point-and-clicked, with selectors and every match.
get_bridge_status Whether the browser is connected, and which tabs it can reach.

Plus resources at omniscrape://captures for anything pushed with the button.

Full options in mcp-server/README.md.

Repository layout

mcp-server/    Node MCP server + WebSocket bridge
extension/     Manifest V3 Chrome extension (no build step)
tests/         Extension tests: engine, bridge integration, package integrity

Tests

npm test

71 tests, none of them mocking the thing under test:

  • Server (17) — spawns the real server, speaks real MCP JSON-RPC over its stdio, connects a fake extension over the real WebSocket. Covers the handshake, tool schemas and defaults, origin rejection, mid-flight disconnects, malformed frames, and pushed captures.
  • Selection engine (26) — loads the real content script and the real vendored libraries into a jsdom page and drives it through the same message interface the service worker uses. Covers selector generalisation, state-class filtering, click suppression, Markdown/table/link conversion, truncation, and that Readability never touches the live DOM.
  • Bridge integration (11) — imports the shipped WebSocket client unchanged, points it at a spawned server, and drives that same process over stdio, so a tool call travels the whole path. Includes killing the server mid-session and asserting the client reconnects on its own and still works.
  • Package integrity (11) — every file the manifest references exists, no inline scripts the extension CSP would block, vendored libraries expose their globals and are not ESM, and the two copies of the wire protocol match.

Security posture

The bridge serves the contents of whatever page you are looking at, so it is deliberately narrow:

  • Loopback only. Bound to 127.0.0.1, never the network.
  • Origin allowlist. A WebSocket is exempt from CORS, so any page you visit can open a socket to ws://127.0.0.1:3000. It cannot forge its Origin header, so requiring chrome-extension:// is what stops a malicious tab from connecting and reading your scrapes. Two tests cover this.
  • Optional token. The origin check does not prove which extension is connecting, and any local process running as you could present a plausible origin. Set OMNISCRAPE_TOKEN if that matters to you.
  • Nothing on disk. Captures live in memory for the process lifetime.
  • Page access is opt-in, requested from a button rather than demanded at install.

See Locking down the bridge.

Known limits

  • Top frame only. Content inside iframes is not scraped.
  • Selectors are structural. A page that re-renders with different markup invalidates them; the panel shows 0× when that happens.
  • Readability is all or nothing. Turn it off for dashboards, search results, and tables — it discards exactly that kind of content.
  • One browser at a time. With several profiles connected, requests go to the most recently active one.

License

MIT. Vendored libraries keep their own licenses — see extension/vendor/.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选