Skip to main content
Glama
mario-andreschak

MCP Windows Desktop Automation

keyboard.ts4.4 kB
/** * Keyboard-related tools for MCP Windows Desktop Automation */ import * as autoIt from 'node-autoit-koffi'; import { z } from 'zod'; import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { createToolResponse, createErrorResponse } from '../utils/types'; import { log } from '../utils/logger/logger'; /** * Register keyboard-related tools with the MCP server */ export function registerKeyboardTools(server: McpServer): void { // send - Send keystrokes to the active window server.tool( 'send', { text: z.string().describe('Text or keys to send'), mode: z.number().optional().default(0).describe('Send mode flag') }, async ({ text, mode }) => { try { log.verbose('send called', { text, mode }); await autoIt.init(); await autoIt.send(text, mode); return createToolResponse(`Sent keystrokes: "${text}" with mode ${mode}`); } catch (error) { log.error('send failed', error); return createErrorResponse(error instanceof Error ? error : String(error)); } } ); // clipGet - Get the text from the clipboard server.tool( 'clipGet', { bufSize: z.number().optional().describe('Buffer size for clipboard content') }, async ({ bufSize }) => { try { log.verbose('clipGet called', { bufSize }); await autoIt.init(); const clipboardContent = await autoIt.clipGet(bufSize); log.verbose('clipGet result', JSON.stringify({ clipboardContent })); return createToolResponse(`Clipboard content: "${clipboardContent}"`); } catch (error) { log.error('clipGet failed', error); return createErrorResponse(error instanceof Error ? error : String(error)); } } ); // clipPut - Put text into the clipboard server.tool( 'clipPut', { text: z.string().describe('Text to put in the clipboard') }, async ({ text }) => { try { log.verbose('clipPut called', { text }); await autoIt.init(); await autoIt.clipPut(text); return createToolResponse(`Text set to clipboard: "${text}"`); } catch (error) { log.error('clipPut failed', error); return createErrorResponse(error instanceof Error ? error : String(error)); } } ); // autoItSetOption - Set AutoIt options server.tool( 'autoItSetOption', { option: z.string().describe('Option name'), value: z.number().describe('Option value') }, async ({ option, value }) => { try { log.verbose('autoItSetOption called', { option, value }); await autoIt.init(); const result = await autoIt.autoItSetOption(option, value); return createToolResponse(`AutoIt option "${option}" set to ${value} with result: ${result}`); } catch (error) { log.error('autoItSetOption failed', error); return createErrorResponse(error instanceof Error ? error : String(error)); } } ); // opt - Alias for autoItSetOption server.tool( 'opt', { option: z.string().describe('Option name'), value: z.number().describe('Option value') }, async ({ option, value }) => { try { log.verbose('opt called', { option, value }); await autoIt.init(); const result = await autoIt.opt(option, value); return createToolResponse(`AutoIt option "${option}" set to ${value} with result: ${result}`); } catch (error) { log.error('opt failed', error); return createErrorResponse(error instanceof Error ? error : String(error)); } } ); // toolTip - Display a tooltip server.tool( 'toolTip', { text: z.string().describe('Tooltip text'), x: z.number().optional().describe('X coordinate'), y: z.number().optional().describe('Y coordinate') }, async ({ text, x, y }) => { try { log.verbose('toolTip called', { text, x, y }); await autoIt.init(); await autoIt.toolTip(text, x, y); const position = x !== undefined && y !== undefined ? ` at position (${x}, ${y})` : ''; return createToolResponse(`Tooltip displayed: "${text}"${position}`); } catch (error) { log.error('toolTip failed', error); return createErrorResponse(error instanceof Error ? error : String(error)); } } ); }

Latest Blog Posts

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/mario-andreschak/mcp-windows-desktop-automation'

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