前言¶
DSH 桌面端及各類 MCP 客戶端在處理網頁任務時,通常面臨 API Key 限制、付費門檻或功能不全的問題。hermes-web-mcp 是一個 Keyless MCP 服務器,它通過本地服務鏈路實現了網頁搜索、內容提取以及基於真實瀏覽器的自動化操作,無需調用外部付費 API 即可完成基礎的網頁交互任務。
插件簡介¶
hermes-web-mcp 是一個 MCP (Model Context Protocol) 服務器,由 ShadowMiner 維護,採用 MIT 許可證。它爲 DSH 及其他 MCP 客戶端提供了一套完整的網頁工具集,核心價值在於“免 Key”和“本地化渲染”。
核心能力¶
該插件提供 9 個工具,分爲三類:
- 網頁搜索:
web_search- 通過直接連接 cn.bing 或 DuckDuckGo 進行搜索,無需搜索 API Key。
- 網頁提取:
web_extract- 通過本地
playwright-service渲染頁面,再經由html-to-md轉換爲 Markdown,無需抓取 API Key。
- 通過本地
- 真實瀏覽器自動化:
page_*系列(共 7 個)- 在隔離上下文中通過 CDP (Chrome DevTools Protocol) 連接共享的 Chrome 實例進行操作,不干擾宿主瀏覽器標籤頁。
工作原理¶
服務端依賴三個本地組件構成處理鏈路:
- Playwright Service:負責實際渲染網頁,暴露
/scrape接口。 - HTML-to-MD Service:負責將 HTML 轉換爲 Markdown,暴露
/convert接口。 - CDP Chrome 實例:提供真實瀏覽器環境,分爲
direct(端口 9333) 和proxy(端口 9334) 兩個實例,用於處理不同網絡環境。
web_extract 會優先嚐試 CDP 渲染,失敗後自動降級爲普通 fetch。page_* 工具通過 playwright chromium.connectOverCDP 連接同一組 Chrome 實例,確保操作在隔離環境中進行。
環境變量¶
運行前需配置以下環境變量,默認值如下:
| 變量名 | 默認值 | 說明 |
|---|---|---|
WEBMCP_PW |
D:/path/to/playwright-service/node_modules/playwright |
Playwright 安裝路徑,用於 connectOverCDP |
WEBMCP_SCRAPE |
http://127.0.0.1:3003/scrape |
Playwright Service 抓取接口 |
WEBMCP_CONVERT |
http://127.0.0.1:8080/convert |
HTML 轉 Markdown 接口 |
WEBMCP_CDP_DIRECT |
http://127.0.0.1:9333 |
直連 CDP Chrome 端點 |
WEBMCP_CDP_PROXY |
http://127.0.0.1:9334 |
代理 CDP Chrome 端點 |
部署前置條件¶
在配置 DSH 之前,需確保本地環境滿足以下依賴:
- Node.js:版本需 >= 22。
- playwright-service:本地運行的爬取服務。
- html-to-md:本地運行的轉換服務。
- CDP Chrome 實例:啓動兩個 Chrome 實例,分別監聽
9333和9334端口(支持直連和代理)。 - Playwright 安裝:需在
WEBMCP_PW指定的路徑下存在chromium驅動。
配置示例¶
在 MCP 客戶端(如 Claude Desktop)中,服務器名稱配置爲 hermes-web。
{
"mcpServers": {
"hermes-web": {
"command": "node",
"args": ["D:/path/to/hermes-web-mcp/hermes-web-mcp.js"],
"env": {
"WEBMCP_PW": "D:/path/to/playwright-service/node_modules/playwright",
"WEBMCP_SCRAPE": "http://127.0.0.1:3003/scrape",
"WEBMCP_CONVERT": "http://127.0.0.1:8080/convert",
"WEBMCP_CDP_DIRECT": "http://127.0.0.1:9333",
"WEBMCP_CDP_PROXY": "http://127.0.0.1:9334"
}
}
}
}
在 DSH 的 SQLite 註冊表中插入記錄(需根據實際表結構調整字段):
INSERT INTO mcp_servers (name, command, args, env) VALUES (
'hermes-web',
'node',
JSON_ARRAY('D:/path/to/hermes-web-mcp/hermes-web-mcp.js'),
JSON_OBJECT(
'WEBMCP_PW', 'D:/path/to/playwright-service/node_modules/playwright',
'WEBMCP_SCRAPE', 'http://127.0.0.1:3003/scrape',
'WEBMCP_CONVERT', 'http://127.0.0.1:8080/convert',
'WEBMCP_CDP_DIRECT', 'http://127.0.0.1:9333',
'WEBMCP_CDP_PROXY', 'http://127.0.0.1:9334'
)
);
典型用法¶
依賴所有前置服務運行後,可使用以下命令進行測試:
node smoke.js
工具調用示例:
- 搜索:
web_search("DeepSeek", max_results=5) - 提取:
web_extract("https://example.com", via_proxy=false, wait_ms=2500) - 自動化:
page_open("https://example.com")page_type("#input", "test", enter=true)page_shot(full_page=true)page_read()
注意事項¶
- 權限隔離:
page_*工具運行在隔離上下文中,不會觸碰宿主瀏覽器的標籤頁。 - 依賴完整性:插件運行依賴於本地多個服務(playwright-service、html-to-md、CDP Chrome)的可用性。
- 源碼審查:插件以當前進程權限運行,建議在啓用前檢查源碼與許可證。
該插件旨在提供輕量級的網頁交互能力,適合需要本地化處理、規避 API Key 限制的開發場景。更多詳情可查閱 GitHub 倉庫:https://github.com/ShadowMiner/hermes-web-mcp