适用于JS功能终端浏览的Browsh模型上下文协议服务器
blowsh-mcp是一个模型上下文协议(MCP)服务器,它将Browsh(一个完全支持JavaScript的终端浏览器)的能力暴露给任何AI代理、IDE代理或MCP客户端。这个项目允许您的AI获取并渲染任何现代网页,包括那些需要JavaScript的页面,并以易于解析的纯文本、HTML或Markdown形式接收结果。
助记符:“blowsh” = 使用Browsh的MCP服务器。
fetch_web发出MCP请求,提供URL和输出类型(plain、html或markdown)。X-Browsh-Raw-Mode: PLAIN(对于文本)、DOM(对于HTML),或者获取HTML然后转换为Markdown。来自Claude、Cursor或其他启用MCP的代理:
{
"tool": "fetch_web",
"params": { "url": "https://coindesk.com/price/bitcoin/", "type": "plain" }
}
// → 返回可读的纯文本(实时价格表格等)
{
"tool": "fetch_web",
"params": { "url": "https://coindesk.com/price/bitcoin/", "type": "html" }
}
// → 返回JS渲染后的HTML标记字符串
{
"tool": "fetche_web",
"params": { "url": "https://coindesk.com/price/bitcoin/", "type": "markdown" }
}
// → 返回Markdown("# 比特币价格\n\n| 时间 | 价格 | ..."),适合直接LLM总结、语义搜索或输出格式化。
AI接收:
type: plain时:纯可读文本(表格、列表、主要内容;适合NLP/总结或终端上下文摄入)。type: html时:完整的HTML标记,经过所有JavaScript处理。用于元素解析、链接图构建、复杂抓取等。type: markdown时:干净的Markdown版本——最适合LLM上下文块、语义管道和AI友好的消费/工作流程。src/server.ts — 暴露工具的MCP服务器。src/browshManager.ts — 启动、监控、关闭Browsh。src/tools/fetchWeb.ts — fetchWeb工具实现(处理纯文本、HTML、Markdown)。src/tools/html2markdownManager.ts — html2markdown CLI的包装器。README.md — 此文件。Dockerfile — 用于容器启动(自动安装html2markdown CLI)。.env — 配置覆盖。根据需要设置BROWSH_FIREFOX_PATH或HTML2MARKDOWN_PATH。需求:
wget -O /tmp/html2markdown.deb "https://github.com/JohannesKaufmann/html-to-markdown/releases/download/v2.3.3/html2markdown_2.3.3_linux_amd64.deb"
sudo apt-get install -y /tmp/html2markdown.deb
rm /tmp/html2markdown.deb
git clone https://github.com/mokhtarabadi/blowsh-mcp.git
cd blowsh-m
npm install
npm run build
构建完成后,使用以下命令启动服务器:
node dist/server.js
如果您的构建输出路径不同,请替换dist/server.js为正确的路径。
创建一个.env文件以进行配置。例如:
MCP_TRANSPORT=stdio
BROWSH_FIREFOX_PATH=/usr/bin/firefox
HTML2MARKDOWN_PATH=html2markdown
NODE_ENV=production
BROWSH_FIREFOX_PATH允许您自定义Browsh在无头/HTTP操作期间使用的Firefox可执行文件。HTML2MARKDOWN_PATH允许您指定html2markdown二进制文件的自定义路径(默认:PATH中的html2markdown)。| 名称 | 参数 | AI用例/描述 |
|---|---|---|
| fetch_web | { url: string, type: "plain"|"html"|"markdown" } | 统一工具:从页面中提取可读的、JS渲染的终端纯文本、完整的HTML DOM或Markdown。使用type来选择输出。 |
返回值
type: plain:终端风格的JS执行可读文本(或错误字符串)。type: html:JS后的HTML标记字符串(或错误字符串)。type: markdown:DOM的Markdown转换(或错误字符串)。保留链接、标题、列表和页面结构,以便于AI理解的上下文。type: plain: 您需要快速、可读的输出用于总结、分类或简单的解析——其中表格布局和细节比标记更重要。type: html: 您想要解析元素、关系、数据表或导航信息,或需要对页面结构和链接的完全控制。type: markdown: 您想要一个Markdown格式的上下文,用于分块到LLMs、语义搜索、检索增强生成,或将内容传递给其他AI链。Markdown输出模仿了AIs在高信号语言任务中“看到”的内容。错误处理: 每个工具都会返回可操作的错误:例如,无效协议、404错误、渲染失败——永远不会静默。
在配置您的AI客户端(如Claude、Cursor等)之前,您必须
- 安装依赖项:
npm install- 构建项目:
npm run build- 从编译输出启动MCP服务器:
node dist/server.js
Claude Desktop或Cursor的示例配置:
{
"mcpServers": {
"blowsh": {
"command": "node",
"args": ["dist/server.js"],
"env": {}
}
}
}
blowsh-mcp捕获SIGINT/SIGTERM信号,并确保Browsh被干净地终止——没有孤儿浏览器。
在src/tools/中添加新工具,在src/server.ts中导出它们,并进行文档记录。
AI客户端会自动发现docstrings。
.env中设置BROWSH_FIREFOX_PATH以指定Firefox安装的完整路径。MIT
作者: Mohammad Reza Mokhtarabadi mmokhtarabadi@gmail.com