使用说明
MCP浏览器服务器——clojure中的代理编码实验
这是什么东西?
这个项目是一个用clojure编写的MCP服务器,它通过MCP向LLM公开了一些工具。特别是,公开的工具允许代理通过基于文本的浏览器w3m和lynx访问URL。
将其视为赋予你的法学硕士以文本形式实际浏览网络的能力——非常适合研究、文档阅读或任何需要人工智能获取当前网络内容的任务。
警告!!!
这是通过LLM使用代理编程100%编码的vibe。我以前从未用clojure编写过项目,我几乎不理解这种语言和MCP协议。
我不应该得到这东西的钥匙;)
使用风险自负!你真的被警告了!
也就是说,它有38个测试,264个断言,全部通过。所以它是 可能 好的。可能。
特性
- 浏览网页 -获取任何URL作为纯文本(无JavaScript,无广告,只有内容)
- 会话管理 -创建持久浏览会话以浏览多个页面
- 双浏览器支持 -使用w3m或lynx(由您选择,我们不评判)
- 跨平台 -适用于Linux、macOS和Windows(通过WSL2)
- 模拟模式 -即使未安装浏览器,也能运行测试
- 综合录井 -看看LLM到底想要什么
- 符合MCP标准 -适用于Claude Desktop、gptel或任何MCP客户端
可用工具
1. browse_page
获取一个网页并返回其文本内容。快速简单。
参数:
url(必填):要获取的URLbrowser(可选):“w3m”或“lynx”(默认值:“w3 m”)
例子:
{
"name": "browse_page",
"arguments": {
"url": "https://example.com",
"browser": "w3m"
}
}
2. create_session
启动浏览会话以进行多页导航。
参数:
browser(可选):“w3m”或“lynx”(默认值:“w3 m”)
退货: 用于其他会话命令的会话ID
3. navigate
导航到现有会话中的URL。
参数:
session_id(必填):create_Session中的会话IDurl(必填):要导航到的URL
4. get_session_info
获取浏览会话的详细信息(历史记录、正常运行时间、当前页面等)
参数:
session_id(必填):要查询的会话ID
5. close_session
关闭会话并清理资源。
参数:
session_id(必填):要关闭的会话ID
安装
先决条件
-
莱宁根 (Clojure构建工具)
# Linux/WSL2 curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein > ~/bin/lein chmod +x ~/bin/lein lein # macOS brew install leiningen -
w3m和/或猞猁 (基于文本的浏览器)
# Ubuntu/Debian/WSL2 sudo apt install w3m lynx # macOS brew install w3m lynx # Arch Linux (because of course you'd mention that) sudo pacman -S w3m lynx -
Java (版本8或更高版本)
# Ubuntu/Debian sudo apt install openjdk-11-jdk # macOS (probably already installed) brew install openjdk@11
设置
# Clone or download this repo
cd mcp-browser
# Install dependencies
lein deps
# Run tests (because we're responsible developers... sometimes)
lein test
# Should see: "Ran 38 tests containing 264 assertions. 0 failures, 0 errors."
用法
运行服务器
服务器使用JSON-RPC 2.0通过stdin/stdout进行通信:
# Start the server
lein run
服务器将在stdin上等待JSON-RPC消息,并在stdout上响应。
手动测试
创建测试文件 test.json:
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}
然后:
cat test.json | lein run
您应该得到一个具有服务器功能的JSON响应。
与Claude Desktop一起使用
将此添加到您的Claude Desktop MCP设置中(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"browser": {
"command": "lein",
"args": ["run"],
"cwd": "/path/to/mcp-browser"
}
}
}
重新启动Claude Desktop,浏览器工具应该会出现!
在Emacs中使用gptel
现在你只能靠自己了,但毫无疑问,我会带着一个氛围编码教程回来。我在emacs中使用gptel和mcp来使用该工具。我把它连接到双子座,它似乎按预期工作。
(翻译:我能用,但记不清具体是怎么用的。稍后会记录。也许吧。可能不会。)
与任何MCP客户端一起使用
由于这是一个标准的MCP服务器,它可以与任何支持该协议的客户端一起使用:
# Generic MCP client example
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | lein run
服务器实现:
initialize-MCP握手tools/list-列出可用工具tools/call-执行工具ping-健康检查
与LLM的对话示例
人类: 你能查一下example.com上有什么吗?
克劳德(通过MCP): 让我帮你浏览一下那个页面。 [调用browse_page工具]
结果:
Example Domain
This domain is for use in documentation examples without needing permission.
Avoid use in operations.
Learn more
克劳德: 该页面显示example.com是为文档保留的域。..
项目结构
mcp-browser/
+-- project.clj # Leiningen project config
+-- README.md # This file!
+-- src/
¦ +-- mcp_browser/
¦ +-- core.clj # Main entry point
¦ +-- browser_management.clj # Browser process management
¦ +-- protocol.clj # MCP/JSON-RPC protocol
¦ +-- tools.clj # Tool implementations
+-- test/
+-- mcp_browser/
+-- browser_management_test.clj # Browser tests
+-- protocol_test.clj # Protocol tests
+-- tools_test.clj # Tool tests
+-- integration_test.clj # End-to-end tests
建筑
第1层:浏览器管理
- 生成和管理w3m/lynx流程
- 使用历史记录跟踪浏览会话
- 处理流程生命周期和清理
- 无浏览器测试的模拟模式
第二层:MCP协议
- JSON-RPC 2.0消息处理
- 请求路由和验证
- 错误处理和响应
- 工具注册和发现
第3层:工具
- 实现5个浏览工具
- 在MCP和浏览器层之间进行转换
- 格式化LLM的响应
发展
运行测试
# Run all tests
lein test
# Run specific test namespace
lein test mcp-browser.protocol-test
# Run with auto-reload (requires lein-test-refresh)
lein test-refresh
REPL开发
# Start REPL
lein repl
# Load and test functions
(require '[mcp-browser.browser-management :as bm])
(bm/fetch-url :w3m "https://example.com")
# Create a session
(def session-id (bm/create-session :w3m))
(bm/navigate-session session-id "https://example.com")
(bm/get-session-stats session-id)
(bm/cleanup-session session-id)
建造Uberjar
# Create standalone JAR
lein uberjar
# Run it
java -jar target/uberjar/mcp-browser-0.1.0-SNAPSHOT-standalone.jar
故障排除
“无法运行程序'w3m'”
安装w3m或lynx。或者两者都有。越多越好。
“未找到会话”
会议是短暂的。如果重新启动服务器,所有会话都将丢失。这是设计(或懒惰编码,由您决定)。
测试失败,显示“进程未激活”
您使用的是没有WSL2的Windows,或者未安装浏览器。如果浏览器不可用,测试会自动使用模拟模式。
“打开的文件太多”
关闭一些浏览器会话。或者增加你的ulimit。或者停止浏览这么多。
它不起作用了
- 检查是否安装了lein和Java
- 确保w3m或lynx从命令行工作
- 跑
lein test验证一切正常 - 阅读日志(它们冗长是有原因的)
- 记住本README顶部的警告
已知限制
- 不支持JavaScript -w3m和lynx不运行JavaScript(这是一个特性,而不是一个bug)
- 无图像渲染 -这只是文本(再次强调,功能不是bug)
- 会话不会持续 -重新启动服务器,丢失所有会话
- 不支持身份验证 -尚无法登录网站
- 速率限制 -未实施(请善待网站)
- robots.txt -未经检查(我们就是这样的叛逆者)
为什么存在
因为有时你只想让你的LLM阅读网页,而不需要启动整个浏览器自动化框架。此外,通过其他LLM的积极提示来学习Clojure也是一种有趣的方式。
贡献
欢迎公关,但请记住:这一切都是氛围编码的。你的公关可能会被法学硕士审查。或者我,喝了三杯咖啡后。同样不可靠。
许可证
EPL-2.0(与Clojure相同)
致谢
- Clojure社区,创造一种即使你不理解也能正常工作的语言
- w3m和lynx开发人员,适用于只做一件事的浏览器
- 对于MCP和克劳德(以及耐心地回答我可怕的问题)
- 当我点头假装理解时,写了大部分代码的LLM
支持
如果出现问题,请提交问题。或者不起作用。或者起作用但不应该。或者如果你对为什么这是一个好主意有疑问。
记得: 这是100%的代理编码。如果它坏了,那就怪人工智能。如果它奏效了,我将获得全部荣誉。这就是它的工作原理,对吧?
与克劳德一起建造,用决心测试,用希望部署。
