Skip to main content
Glama
ARCHITECTURE.md8.81 kB
# Architecture Overview ## System Design The Shortcut MCP is designed as a bridge between Large Language Models and macOS Shortcuts, following the Model Context Protocol specification. The architecture is modular, secure, and extensible. ## High-Level Architecture ```mermaid graph TB subgraph "LLM Client" A[Claude/GPT/Other LLM] end subgraph "MCP Protocol Layer" B[MCP Client] C[JSON-RPC Transport] end subgraph "Shortcut MCP Server" D[MCP Server Core] E[Tool Registry] F[Request Router] G[Security Layer] end subgraph "Shortcut Interface Layer" H[Shortcut Manager] I[Execution Engine] J[Result Parser] K[CLI Interface] end subgraph "macOS System" L[Shortcuts App] M[AppleScript Engine] N[System Automation] end A --> B B --> C C --> D D --> E E --> F F --> G G --> H H --> I I --> J J --> K K --> L K --> M L --> N ``` ## Component Breakdown ### 1. MCP Server Core (`src/server.ts`) The central component that implements the MCP protocol: ```typescript interface MCPServer { // Protocol implementation handleRequest(request: MCPRequest): Promise<MCPResponse>; // Tool management registerTool(tool: Tool): void; listTools(): Tool[]; // Resource management listResources(): Resource[]; readResource(uri: string): Promise<ResourceContent>; } ``` **Responsibilities:** - Implement MCP protocol specification - Handle incoming JSON-RPC requests - Manage tool registration and discovery - Coordinate with other components - Handle errors and responses ### 2. Tool Registry (`src/tools/registry.ts`) Manages available tools and their definitions: ```typescript interface ToolRegistry { registerTool(tool: ToolDefinition): void; getTool(name: string): ToolDefinition | null; listTools(): ToolDefinition[]; validateToolCall(call: ToolCall): ValidationResult; } ``` **Available Tools:** - `list_shortcuts`: Discover available shortcuts - `run_shortcut`: Execute shortcuts with parameters - `get_shortcut_info`: Retrieve shortcut metadata - `validate_shortcut`: Check shortcut availability and permissions ### 3. Security Layer (`src/security/`) Implements comprehensive security controls: ```typescript interface SecurityManager { validateRequest(request: MCPRequest): SecurityResult; authorizeShortcut(name: string): boolean; sanitizeInput(input: any): any; filterOutput(output: any): any; auditLog(operation: string, details: any): void; } ``` **Security Features:** - Input validation and sanitization - Shortcut allowlist/blocklist management - Execution timeout enforcement - Audit logging - Permission verification ### 4. Shortcut Manager (`src/shortcuts/manager.ts`) Central component for shortcut operations: ```typescript interface ShortcutManager { discoverShortcuts(): Promise<Shortcut[]>; getShortcutInfo(name: string): Promise<ShortcutInfo>; validateShortcut(name: string): Promise<ValidationResult>; executeShortcut(request: ExecutionRequest): Promise<ExecutionResult>; } ``` **Features:** - Shortcut discovery and caching - Metadata extraction - Permission checking - Execution coordination ### 5. Execution Engine (`src/shortcuts/executor.ts`) Handles the actual execution of shortcuts: ```typescript interface ExecutionEngine { execute(shortcut: Shortcut, input?: any): Promise<ExecutionResult>; prepareInput(shortcut: Shortcut, input: any): ProcessedInput; handleTimeout(execution: Promise<any>): Promise<any>; parseOutput(rawOutput: string): ParsedOutput; } ``` **Execution Flow:** 1. Input validation and preparation 2. Security checks and permissions 3. Shortcut execution via CLI 4. Output parsing and formatting 5. Error handling and logging ### 6. CLI Interface (`src/cli/interface.ts`) Interfaces with macOS shortcuts command-line tools: ```typescript interface CLIInterface { runShortcut(name: string, input?: string): Promise<string>; listShortcuts(): Promise<string>; getShortcutInfo(name: string): Promise<string>; checkPermissions(): Promise<boolean>; } ``` **Implementation:** - Uses macOS `shortcuts` command-line tool - Falls back to AppleScript for advanced operations - Handles process management and timeouts - Formats output for consumption ## Data Flow ### 1. Shortcut Discovery Flow ```mermaid sequenceDiagram participant LLM participant MCP as MCP Server participant SM as Shortcut Manager participant CLI as CLI Interface participant macOS LLM->>MCP: list_shortcuts tool call MCP->>SM: discoverShortcuts() SM->>CLI: listShortcuts() CLI->>macOS: shortcuts list macOS-->>CLI: shortcut data CLI-->>SM: parsed shortcuts SM-->>MCP: formatted shortcuts MCP-->>LLM: shortcut list response ``` ### 2. Shortcut Execution Flow ```mermaid sequenceDiagram participant LLM participant MCP as MCP Server participant SEC as Security Layer participant EE as Execution Engine participant CLI as CLI Interface participant macOS LLM->>MCP: run_shortcut tool call MCP->>SEC: validateRequest() SEC-->>MCP: validation result MCP->>EE: executeShortcut() EE->>CLI: runShortcut() CLI->>macOS: shortcuts run "name" -i "input" macOS-->>CLI: execution result CLI-->>EE: raw output EE-->>MCP: parsed result MCP-->>LLM: execution response ``` ## Error Handling Strategy ### Error Types 1. **Protocol Errors**: MCP specification violations 2. **Validation Errors**: Invalid inputs or parameters 3. **Security Errors**: Permission denied or security violations 4. **Execution Errors**: Shortcut runtime failures 5. **System Errors**: macOS or CLI interface issues ### Error Handling Hierarchy ```typescript abstract class MCPError extends Error { abstract code: string; abstract httpStatus: number; } class ValidationError extends MCPError { code = 'VALIDATION_ERROR'; httpStatus = 400; } class SecurityError extends MCPError { code = 'SECURITY_ERROR'; httpStatus = 403; } class ExecutionError extends MCPError { code = 'EXECUTION_ERROR'; httpStatus = 500; } ``` ## Configuration Architecture ### Configuration Layers 1. **Default Configuration**: Built-in sensible defaults 2. **File Configuration**: JSON/YAML configuration files 3. **Environment Variables**: Runtime overrides 4. **Command Line Arguments**: Immediate overrides ### Configuration Schema ```typescript interface Configuration { server: ServerConfig; shortcuts: ShortcutConfig; security: SecurityConfig; logging: LoggingConfig; performance: PerformanceConfig; } ``` ## Performance Considerations ### Caching Strategy 1. **Shortcut Metadata Cache**: Cache shortcut information 2. **Execution Result Cache**: Cache deterministic results 3. **Permission Cache**: Cache authorization decisions ### Optimization Techniques 1. **Lazy Loading**: Load shortcuts on demand 2. **Connection Pooling**: Reuse system connections 3. **Batching**: Group multiple operations 4. **Streaming**: Handle large outputs efficiently ## Extensibility Points ### Plugin Architecture ```typescript interface Plugin { name: string; version: string; initialize(server: MCPServer): Promise<void>; registerTools(): ToolDefinition[]; registerResources(): ResourceDefinition[]; } ``` ### Custom Tool Development Tools can be added by implementing the `Tool` interface: ```typescript interface Tool { name: string; description: string; inputSchema: JSONSchema; execute(input: any): Promise<ToolResult>; } ``` ## Security Architecture ### Defense in Depth 1. **Input Validation**: Strict parameter validation 2. **Authorization**: Permission-based access control 3. **Sandboxing**: Isolated execution environment 4. **Audit Logging**: Comprehensive operation logging 5. **Rate Limiting**: Prevent abuse and DoS ### Trust Model - **LLM Client**: Trusted but validated - **MCP Server**: Trusted intermediary - **Shortcut Content**: Untrusted, requires validation - **System Integration**: Privileged but controlled ## Deployment Architecture ### Development Environment - Local development with hot reload - Mocked shortcut responses for testing - Debug logging and introspection ### Production Environment - Standalone binary or npm package - Comprehensive logging and monitoring - Resource limits and security controls ### Integration Patterns 1. **Direct Integration**: MCP client directly connects 2. **Proxy Integration**: Through MCP proxy server 3. **Service Integration**: As part of larger automation platform This architecture provides a solid foundation for secure, reliable, and extensible shortcut automation through the MCP protocol.

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/aezizhu/shortcut-mcp'

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