基于Java开发的浏览器自动化MCP服务器
这是使用 Java 语言开发的一个简单的浏览器自动化 MCP 服务器,并通过 Cherry Studio 进行测试。
功能概述
- 支持导航到指定 URL
- 提供截图功能以捕获页面状态
- 支持点击、选择、填写表单字段等常见浏览器操作
- 集成日志记录和异常处理机制
安装依赖
将以下 Maven 依赖添加到你的项目中:
添加playwright依赖
xml
<dependency>
<groupId>com.microsoft.playwright</groupId>
<artifactId>playwright</artifactId>
<version>1.41.2</version>
</dependency>
使用 MCP 官方的 Java SDK
xml
<dependency>
<groupId>io.modelcontextprotocol.sdk</groupId>
<artifactId>mcp</artifactId>
<version>0.10.0</version>
</dependency>
对于 HTTP SSE 传输实现,添加以下依赖之一:
基于 Spring WebFlux 的 SSE 客户端和服务器传输
xml
<dependency>
<groupId>io.modelcontextprotocol.sdk</groupId>
<artifactId>mcp-spring-webflux</artifactId>
</dependency>
基于 Spring WebMVC 的 SSE 服务器传输
xml
<dependency>
<groupId>io.modelcontextprotocol.sdk</groupId>
<artifactId>mcp-spring-webmvc</artifactId>
</dependency>
代码实现
初始化Playwright
- 创建 Playwright 实例并启动一个无头 Edge 浏览器。
- 打开一个新的页面对象 (Page) 用于后续操作。
java
private Playwright playwright;
private Browser browser;
private Page page;
/**
* 初始化Playwright
*/
private void initializePlaywright() {
if (playwright == null) {
playwright = Playwright.create();
}
if (browser == null) {
browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setChannel("msedge").setHeadless(false));
}
if (page == null) {
page = browser.newPage();
}
}
工具方法
创建MCP服务中的工具,这里只展示navigate
导航到指定 URL。
java
/**
* 创建一个工具,用于导航到指定URL
* @return 工具结果
*/
private McpServerFeatures.SyncToolSpecification navigate(){
String desc = """
navigate to a URL
""";
String schema = """
{
"type" : "object",
"properties" : {
"url" : {
"type" : "string"
}
}
}
""";
return new McpServerFeatures.SyncToolSpecification(
new McpSchema.Tool("navigate", desc, schema),
(exchange, arguments) -> {
List<McpSchema.Content> result = new ArrayList<>();
try {
String url = (String) arguments.get("url");
initializePlaywright();
page.navigate(url);
result.add(new McpSchema.TextContent("Navigated to " + url));
return new McpSchema.CallToolResult(result, false);
}catch (Exception e){
// 处理异常
result.add(new McpSchema.TextContent(e.getMessage()));
return new McpSchema.CallToolResult(result, true);
}
}
);
}
启动MCP服务
- 在 Spring 的 @PostConstruct 注解下启动 MCP 同步服务器。
- 配置了服务器信息(名称、版本)和能力(支持工具、日志等)。
- 添加多个工具到服务器中,每个工具都对应一种网页操作,如导航、截图、点击等。
java
@PostConstruct
public void start() {
// 创建并配置MCP同步服务器
McpSyncServer syncServer = McpServer.sync(transportProvider)
.serverInfo("PlayWright-Mcp-Server", "1.0.0")
.capabilities(McpSchema.ServerCapabilities.builder()
.tools(true)
.logging()
.build())
.build();
try {
// 添加工具、资源和提示
syncServer.addTool(navigate());
syncServer.addTool(parseThePage());
syncServer.addTool(screenshot());
syncServer.addTool(click());
syncServer.addTool(iframeClick());
syncServer.addTool(select());
syncServer.addTool(fill());
syncServer.addTool(hover());
syncServer.addTool(evaluate());
syncServer.addTool(consoleLogs());
syncServer.addTool(closePage());
// 发送日志通知
syncServer.loggingNotification(McpSchema.LoggingMessageNotification.builder()
.level(McpSchema.LoggingLevel.DEBUG)
.logger("custom-logger")
.data("Server initialized")
.build());
}catch (Exception e){
// 处理异常,例如打印错误信息
log.error("创建JSON Schema时发生错误: {}" , e.getMessage());
e.printStackTrace();
}
}
关闭资源
- 使用 @PreDestroy 注解确保在 Bean 销毁前释放 Playwright 资源(关闭页面、浏览器、Playwright 实例)。
java
@PreDestroy
public void close() {
if (page != null) {
page.close();
page = null;
}
if (browser != null) {
browser.close();
browser = null;
}
if (playwright != null) {
playwright.close();
playwright = null;
}
}
驱动安装
PlayWright需要浏览器驱动,程序自动检测是否存在驱动,不存在就会自动安装,但安装取决于网路,经常会失败,所以还是手动安装的好。
bash
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install"
默认安装三大浏览器驱动webkit、chromium、firefox。
你还可以通过提供参数来安装特定的浏览器:
bash
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install chromium"
客户端测试
- 配置mcp服务

- 提问