feat: add uixt tool terminate_app

This commit is contained in:
lilong.129
2025-05-21 16:42:53 +08:00
parent 03553a4962
commit 0d6a37ecef
4 changed files with 38 additions and 6 deletions
+1 -1
View File
@@ -1 +1 @@
v5.0.0-beta-2505211637 v5.0.0-beta-2505211642
+32
View File
@@ -122,6 +122,17 @@ func (ums *MCPServer4XTDriver) addTools() {
ums.tools = append(ums.tools, launchAppTool) ums.tools = append(ums.tools, launchAppTool)
ums.handlerMap[launchAppTool.Name] = ums.handleLaunchApp ums.handlerMap[launchAppTool.Name] = ums.handleLaunchApp
// TerminateApp Tool
terminateAppParams := append(
[]mcp.ToolOption{mcp.WithDescription("Stop and terminate an app on mobile device")},
commonToolOptions...,
)
terminateAppParams = append(terminateAppParams, generateMCPOptions(types.AppTerminateRequest{})...)
terminateAppTool := mcp.NewTool("terminate_app", terminateAppParams...)
ums.mcpServer.AddTool(terminateAppTool, ums.handleTerminateApp)
ums.tools = append(ums.tools, terminateAppTool)
ums.handlerMap[terminateAppTool.Name] = ums.handleTerminateApp
// TapXY Tool // TapXY Tool
tapParams := append( tapParams := append(
[]mcp.ToolOption{mcp.WithDescription("Taps on the device screen at the given coordinates.")}, []mcp.ToolOption{mcp.WithDescription("Taps on the device screen at the given coordinates.")},
@@ -237,6 +248,27 @@ func (ums *MCPServer4XTDriver) handleLaunchApp(ctx context.Context, request mcp.
return mcp.NewToolResultText(fmt.Sprintf("Launched app success: %s", packageName)), nil return mcp.NewToolResultText(fmt.Sprintf("Launched app success: %s", packageName)), nil
} }
// handleTerminateApp handles the terminate_app tool call.
func (ums *MCPServer4XTDriver) handleTerminateApp(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
driverExt, err := ums.setupXTDriver(ctx, request.Params.Arguments)
if err != nil {
return nil, err
}
var appTerminateReq types.AppTerminateRequest
if err := mapToStruct(request.Params.Arguments, &appTerminateReq); err != nil {
return mcp.NewToolResultError("parse parameters error: " + err.Error()), nil
}
packageName := appTerminateReq.PackageName
if packageName == "" {
return mcp.NewToolResultError("package_name is required"), nil
}
_, err = driverExt.AppTerminate(packageName)
if err != nil {
return mcp.NewToolResultError("Terminate app failed: " + err.Error()), nil
}
return mcp.NewToolResultText(fmt.Sprintf("Terminated app success: %s", packageName)), nil
}
// handleTapXY handles the tap_xy tool call. // handleTapXY handles the tap_xy tool call.
func (ums *MCPServer4XTDriver) handleTapXY(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { func (ums *MCPServer4XTDriver) handleTapXY(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
driverExt, err := ums.setupXTDriver(ctx, request.Params.Arguments) driverExt, err := ums.setupXTDriver(ctx, request.Params.Arguments)
+3 -3
View File
@@ -88,8 +88,8 @@ func (r *Router) launchAppHandler(c *gin.Context) {
} }
func (r *Router) terminalAppHandler(c *gin.Context) { func (r *Router) terminalAppHandler(c *gin.Context) {
var appTerminalReq types.AppTerminalRequest var appTerminateReq types.AppTerminateRequest
if err := c.ShouldBindJSON(&appTerminalReq); err != nil { if err := c.ShouldBindJSON(&appTerminateReq); err != nil {
RenderErrorValidateRequest(c, err) RenderErrorValidateRequest(c, err)
return return
} }
@@ -97,7 +97,7 @@ func (r *Router) terminalAppHandler(c *gin.Context) {
if err != nil { if err != nil {
return return
} }
_, err = driver.AppTerminate(appTerminalReq.PackageName) _, err = driver.AppTerminate(appTerminateReq.PackageName)
if err != nil { if err != nil {
RenderError(c, err) RenderError(c, err)
return return
+2 -2
View File
@@ -23,6 +23,6 @@ type AppLaunchRequest struct {
PackageName string `json:"packageName" binding:"required" desc:"The package name of the app to launch"` PackageName string `json:"packageName" binding:"required" desc:"The package name of the app to launch"`
} }
type AppTerminalRequest struct { type AppTerminateRequest struct {
PackageName string `json:"packageName" binding:"required"` PackageName string `json:"packageName" binding:"required" desc:"The package name of the app to terminate"`
} }