Skip to main content
Glama

Peekaboo MCP

by steipete
service-api-reference.mdβ€’12.5 kB
# PeekabooCore Service API Reference This document provides a comprehensive reference for all services available in PeekabooCore. These services are used by both the CLI and Mac app to provide consistent functionality with optimal performance. ## Table of Contents 1. [ScreenCaptureService](#screencaptureservice) 2. [ApplicationService](#applicationservice) 3. [WindowManagementService](#windowmanagementservice) 4. [UIAutomationService](#uiautomationservice) 5. [MenuService](#menuservice) 6. [DockService](#dockservice) 7. [ProcessService](#processservice) 8. [DialogService](#dialogservice) 9. [FileService](#fileservice) 10. [SessionManager](#sessionmanager) 11. [ConfigurationManager](#configurationmanager) 12. [EventGenerator](#eventgenerator) --- ## ScreenCaptureService Handles all screen capture operations including windows, screens, and areas. ### Methods #### `captureWindow(element:savePath:options:)` Captures a screenshot of a specific window. ```swift func captureWindow( element: Element, savePath: String, options: CaptureOptions = .init() ) async throws -> CaptureResult ``` **Parameters:** - `element`: The window element to capture - `savePath`: Path where the image should be saved - `options`: Capture options (format, quality, etc.) **Returns:** `CaptureResult` containing capture metadata **Example:** ```swift let result = try await service.captureWindow( element: windowElement, savePath: "~/Desktop/window.png" ) ``` #### `captureScreen(displayIndex:savePath:options:)` Captures a full screen or specific display. ```swift func captureScreen( displayIndex: Int = 0, savePath: String, options: CaptureOptions = .init() ) async throws -> CaptureResult ``` #### `captureArea(rect:savePath:options:)` Captures a specific rectangular area of the screen. ```swift func captureArea( rect: CGRect, savePath: String, options: CaptureOptions = .init() ) async throws -> CaptureResult ``` #### `captureAllWindows(for:savePath:options:)` Captures all windows for a specific application. ```swift func captureAllWindows( for app: RunningApplication, savePath: String, options: CaptureOptions = .init() ) async throws -> [CaptureResult] ``` --- ## ApplicationService Manages application lifecycle and information. ### Methods #### `listApplications()` Lists all running applications. ```swift func listApplications() -> [RunningApplication] ``` **Returns:** Array of running applications with metadata #### `findApplication(identifier:)` Finds an application by name or bundle ID. ```swift func findApplication(identifier: String) throws -> RunningApplication ``` **Parameters:** - `identifier`: App name or bundle identifier **Throws:** `ApplicationError.notFound` if not found #### `launchApplication(identifier:)` Launches an application. ```swift func launchApplication(identifier: String) async throws -> RunningApplication ``` #### `quitApplication(_:force:)` Quits an application gracefully or forcefully. ```swift func quitApplication(_ app: RunningApplication, force: Bool = false) async throws ``` #### `hideApplication(_:)` Hides an application. ```swift func hideApplication(_ app: RunningApplication) async throws ``` #### `unhideApplication(_:)` Shows a hidden application. ```swift func unhideApplication(_ app: RunningApplication) async throws ``` --- ## WindowManagementService Handles window manipulation and queries. ### Methods #### `listWindows(for:)` Lists all windows for an application. ```swift func listWindows(for app: RunningApplication) throws -> [WindowInfo] ``` #### `findWindow(app:title:index:)` Finds a specific window by title or index. ```swift func findWindow( app: RunningApplication, title: String? = nil, index: Int? = nil ) throws -> Element ``` #### `closeWindow(_:)` Closes a window. ```swift func closeWindow(_ window: Element) async throws ``` #### `minimizeWindow(_:)` Minimizes a window. ```swift func minimizeWindow(_ window: Element) async throws ``` #### `maximizeWindow(_:)` Maximizes a window. ```swift func maximizeWindow(_ window: Element) async throws ``` #### `moveWindow(_:to:)` Moves a window to a specific position. ```swift func moveWindow(_ window: Element, to position: CGPoint) async throws ``` #### `resizeWindow(_:to:)` Resizes a window. ```swift func resizeWindow(_ window: Element, to size: CGSize) async throws ``` #### `focusWindow(_:)` Brings a window to the front and focuses it. ```swift func focusWindow(_ window: Element) async throws ``` --- ## UIAutomationService Provides UI element interaction and automation. ### Methods #### `findElement(matching:in:timeout:)` Finds UI elements matching criteria. ```swift func findElement( matching criteria: ElementCriteria, in container: Element? = nil, timeout: TimeInterval = 5.0 ) async throws -> Element ``` #### `clickElement(_:at:clickCount:)` Clicks on a UI element. ```swift func clickElement( _ element: Element, at point: CGPoint? = nil, clickCount: Int = 1 ) async throws ``` #### `typeText(_:in:clearFirst:)` Types text into an element. ```swift func typeText( _ text: String, in element: Element? = nil, clearFirst: Bool = false ) async throws ``` #### `scrollElement(_:direction:amount:)` Scrolls within an element. ```swift func scrollElement( _ element: Element, direction: ScrollDirection, amount: CGFloat ) async throws ``` #### `dragElement(from:to:duration:)` Performs a drag operation. ```swift func dragElement( from startPoint: CGPoint, to endPoint: CGPoint, duration: TimeInterval = 0.5 ) async throws ``` #### `swipeElement(_:direction:distance:)` Performs a swipe gesture. ```swift func swipeElement( _ element: Element, direction: SwipeDirection, distance: CGFloat ) async throws ``` --- ## MenuService Handles menu bar and context menu interactions. ### Methods #### `clickMenuItem(app:menuPath:)` Clicks a menu item by path. ```swift func clickMenuItem( app: RunningApplication, menuPath: [String] ) async throws ``` **Example:** ```swift try await service.clickMenuItem( app: app, menuPath: ["File", "Save As..."] ) ``` #### `listMenuItems(app:)` Lists all menu items for an application. ```swift func listMenuItems(app: RunningApplication) throws -> [MenuItemInfo] ``` #### `openContextMenu(at:)` Opens a context menu at a specific location. ```swift func openContextMenu(at point: CGPoint) async throws ``` --- ## DockService Manages Dock interactions. ### Methods #### `listDockItems()` Lists all items in the Dock. ```swift func listDockItems() throws -> [DockItem] ``` #### `clickDockItem(identifier:)` Clicks a Dock item. ```swift func clickDockItem(identifier: String) async throws ``` #### `rightClickDockItem(identifier:)` Right-clicks a Dock item to show its menu. ```swift func rightClickDockItem(identifier: String) async throws ``` --- ## ProcessService Manages system processes and shell commands. ### Methods #### `runCommand(_:arguments:environment:currentDirectory:)` Executes a shell command. ```swift func runCommand( _ command: String, arguments: [String] = [], environment: [String: String]? = nil, currentDirectory: String? = nil ) async throws -> ProcessResult ``` #### `killProcess(pid:signal:)` Terminates a process. ```swift func killProcess(pid: Int32, signal: Int32 = SIGTERM) throws ``` #### `checkProcessRunning(name:)` Checks if a process is running. ```swift func checkProcessRunning(name: String) -> Bool ``` --- ## DialogService Handles system dialogs and alerts. ### Methods #### `findDialog(withTitle:timeout:)` Finds a dialog by title. ```swift func findDialog( withTitle title: String? = nil, timeout: TimeInterval = 5.0 ) async throws -> Element ``` #### `clickDialogButton(_:in:)` Clicks a button in a dialog. ```swift func clickDialogButton( _ buttonTitle: String, in dialog: Element ) async throws ``` #### `dismissDialog(_:)` Dismisses a dialog using keyboard shortcuts. ```swift func dismissDialog(_ dialog: Element) async throws ``` #### `handleFileDialog(_:path:)` Handles file selection dialogs. ```swift func handleFileDialog( _ dialog: Element, path: String ) async throws ``` --- ## FileService Provides file system operations. ### Methods #### `cleanFiles(at:matching:dryRun:)` Cleans files matching criteria. ```swift func cleanFiles( at path: String, matching criteria: CleanCriteria, dryRun: Bool = false ) async throws -> CleanResult ``` #### `listFiles(at:recursive:)` Lists files in a directory. ```swift func listFiles( at path: String, recursive: Bool = false ) throws -> [FileInfo] ``` #### `createDirectory(at:)` Creates a directory. ```swift func createDirectory(at path: String) throws ``` --- ## SessionManager Manages automation sessions for the Mac app. ### Properties ```swift var currentSession: Session? { get } var isSessionActive: Bool { get } ``` ### Methods #### `startSession(mode:)` Starts a new automation session. ```swift func startSession(mode: SessionMode) async throws -> Session ``` #### `endSession()` Ends the current session. ```swift func endSession() async ``` #### `executeInSession(_:)` Executes a block within the current session context. ```swift func executeInSession<T>(_ block: () async throws -> T) async throws -> T ``` --- ## ConfigurationManager Manages application configuration. ### Properties ```swift static let shared: ConfigurationManager var currentConfiguration: Configuration { get } ``` ### Methods #### `loadConfiguration()` Loads configuration from disk. ```swift func loadConfiguration() -> Configuration ``` #### `saveConfiguration(_:)` Saves configuration to disk. ```swift func saveConfiguration(_ config: Configuration) throws ``` #### `resetToDefaults()` Resets configuration to defaults. ```swift func resetToDefaults() throws ``` --- ## EventGenerator Low-level event generation for automation. ### Methods #### `createMouseEvent(type:at:)` Creates mouse events. ```swift static func createMouseEvent( type: CGEventType, at point: CGPoint ) -> CGEvent? ``` #### `createKeyboardEvent(keyCode:down:)` Creates keyboard events. ```swift static func createKeyboardEvent( keyCode: UInt16, down: Bool ) -> CGEvent? ``` #### `typeText(_:)` Types text using keyboard events. ```swift static func typeText(_ text: String) async throws ``` --- ## Error Handling All services throw typed errors for better error handling: ```swift enum ScreenCaptureError: Error { case permissionDenied case invalidWindow case captureF ailed case fileWriteError(Error) } enum ApplicationError: Error { case notFound(String) case ambiguousIdentifier([RunningApplication]) case launchFailed(Error) } enum UIAutomationError: Error { case elementNotFound case interactionFailed case timeout } ``` ## Usage Example Here's a complete example showing how to use multiple services together: ```swift import PeekabooCore // Initialize services let appService = ApplicationService() let windowService = WindowManagementService() let captureService = ScreenCaptureService() let uiService = UIAutomationService() // Find and focus Safari let safari = try appService.findApplication(identifier: "Safari") let windows = try windowService.listWindows(for: safari) if let firstWindow = windows.first { try await windowService.focusWindow(firstWindow.element) } // Capture the window let result = try await captureService.captureWindow( element: firstWindow.element, savePath: "~/Desktop/safari.png" ) // Click on a button let criteria = ElementCriteria(role: .button, title: "Reload") let button = try await uiService.findElement(matching: criteria) try await uiService.clickElement(button) ``` ## Performance Notes - Services are designed to be lightweight and efficient - They eliminate process spawning overhead compared to CLI invocations - All async operations use Swift's native concurrency - Services maintain minimal state for optimal performance - The Mac app sees 100x+ performance improvement using services directly ## Thread Safety - All services are thread-safe and can be used from any thread - UI operations are automatically dispatched to the main thread - Async methods use Swift's concurrency model for safety - Shared state is protected with appropriate synchronization

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/steipete/Peekaboo'

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