Skip to main content
Glama

MCPControl

mouse.ts4.66 kB
import { MousePosition } from '../types/common.js'; import { WindowsControlResponse } from '../types/responses.js'; import { createAutomationProvider } from '../providers/factory.js'; import { MousePositionSchema, MouseButtonSchema, ScrollAmountSchema } from './validation.zod.js'; import { createLogger } from '../logger.js'; // Get the automation provider const provider = createAutomationProvider(); // Create a logger for mouse module const logger = createLogger('mouse'); // Define button types type MouseButton = 'left' | 'right' | 'middle'; export function moveMouse(position: MousePosition): WindowsControlResponse { try { // Validate the position MousePositionSchema.parse(position); // Additional screen bounds check if not in test environment if (!(process.env.NODE_ENV === 'test' || process.env.VITEST)) { try { const screenSizeResponse = provider.screen.getScreenSize(); if (screenSizeResponse.success && screenSizeResponse.data) { const screenSize = screenSizeResponse.data as { width: number; height: number }; if ( position.x < 0 || position.x >= screenSize.width || position.y < 0 || position.y >= screenSize.height ) { throw new Error( `Position (${position.x},${position.y}) is outside screen bounds (0,0)-(${screenSize.width - 1},${screenSize.height - 1})`, ); } } } catch (screenError) { logger.warn('Error checking screen bounds', screenError); // Continue without screen bounds check } } return provider.mouse.moveMouse(position); } catch (error) { return { success: false, message: `Failed to move mouse: ${error instanceof Error ? error.message : String(error)}`, }; } } export function clickMouse(button: MouseButton = 'left'): WindowsControlResponse { try { // Validate button MouseButtonSchema.parse(button); const validatedButton = button; return provider.mouse.clickMouse(validatedButton); } catch (error) { return { success: false, message: `Failed to click mouse: ${error instanceof Error ? error.message : String(error)}`, }; } } export function doubleClick(position?: MousePosition): WindowsControlResponse { try { // Validate position if provided if (position) { MousePositionSchema.parse(position); } return provider.mouse.doubleClick(position); } catch (error) { return { success: false, message: `Failed to double click: ${error instanceof Error ? error.message : String(error)}`, }; } } export function getCursorPosition(): WindowsControlResponse { try { return provider.mouse.getCursorPosition(); } catch (error) { return { success: false, message: `Failed to get cursor position: ${error instanceof Error ? error.message : String(error)}`, }; } } export function scrollMouse(amount: number): WindowsControlResponse { try { // Validate amount ScrollAmountSchema.parse(amount); return provider.mouse.scrollMouse(amount); } catch (error) { return { success: false, message: `Failed to scroll mouse: ${error instanceof Error ? error.message : String(error)}`, }; } } export function dragMouse( from: MousePosition, to: MousePosition, button: MouseButton = 'left', ): WindowsControlResponse { try { // Validate positions MousePositionSchema.parse(from); MousePositionSchema.parse(to); // Validate button MouseButtonSchema.parse(button); const validatedButton = button; return provider.mouse.dragMouse(from, to, validatedButton); } catch (error) { return { success: false, message: `Failed to drag mouse: ${error instanceof Error ? error.message : String(error)}`, }; } } export function clickAt( x: number, y: number, button: MouseButton = 'left', ): WindowsControlResponse { // Special case for test compatibility (match original implementation) if (typeof x !== 'number' || typeof y !== 'number' || isNaN(x) || isNaN(y)) { return { success: false, message: 'Invalid coordinates provided', }; } try { // Validate position against screen bounds MousePositionSchema.parse({ x, y }); // Validate button MouseButtonSchema.parse(button); const validatedButton = button; return provider.mouse.clickAt(x, y, validatedButton); } catch (error) { return { success: false, message: `Failed to click at position: ${error instanceof Error ? error.message : String(error)}`, }; } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/claude-did-this/MCPControl'

If you have feedback or need assistance with the MCP directory API, please join our Discord server