@@ -142,6 +142,101 @@ packages/
142142 └── package.json
143143```
144144
145+ ## 🏗️ System Architecture
146+
147+ MCP Pointer uses a distributed architecture with multiple server instances and leader election for high availability:
148+
149+ ``` mermaid
150+ graph TB
151+ subgraph "Browser Environment"
152+ WEB[Web Page]
153+ CS[Content Script<br/>element-pointer.ts]
154+ BG[Background Worker<br/>background.ts]
155+ ES[ElementSenderService<br/>ReconnectingWebSocket]
156+ WEB -->|Option+Click| CS
157+ CS -->|Chrome Runtime API| BG
158+ BG -->|sendElement| ES
159+ end
160+
161+ subgraph "MCP Server Instances"
162+ subgraph "Instance 1 - Leader"
163+ WS1[WebSocketService<br/>✅ Port 7007]
164+ MCP1[MCPService]
165+ SS1[SharedState<br/>Read/Write]
166+ end
167+
168+ subgraph "Instance 2 - Follower"
169+ WS2[WebSocketService<br/>⏸️ Retrying...]
170+ MCP2[MCPService]
171+ SS2[SharedState<br/>Read Only]
172+ end
173+ end
174+
175+ subgraph "Shared Resources"
176+ PORT[Port 7007<br/>First to bind wins]
177+ FS[/tmp/mcp-pointer-shared-state.json]
178+ end
179+
180+ subgraph "AI Client"
181+ CC[Claude Code]
182+ end
183+
184+ ES -->|WebSocket| WS1
185+ WS1 -->|Owns| PORT
186+ WS2 -.->|Retry every 5s| PORT
187+ SS1 -->|Write| FS
188+ SS2 -->|Read| FS
189+ CC <-->|MCP Protocol| MCP1
190+ CC <-->|MCP Protocol| MCP2
191+
192+ classDef leader fill:#90EE90
193+ classDef follower fill:#FFE4B5
194+
195+ class WS1,SS1 leader
196+ class WS2,SS2 follower
197+ ```
198+
199+ ### How It Works
200+
201+ #### Server-Side (Multiple Instances)
202+
203+ 1 . ** Leader Election:**
204+ - Multiple MCP server instances can run simultaneously
205+ - First instance to bind port 7007 becomes the leader
206+ - Other instances become followers and retry every 5 seconds
207+ - Automatic failover when leader crashes (~ 5 second recovery)
208+
209+ 2 . ** State Management:**
210+ - Leader instance saves element data to ` /tmp/mcp-pointer-shared-state.json `
211+ - All instances (leader and followers) can read shared state
212+ - MCP requests work on any instance using shared state
213+
214+ 3 . ** Service Architecture:**
215+ - ** WebSocketService** : Handles port-based leader election and WebSocket connections
216+ - ** MCPService** : Provides MCP protocol implementation for AI tools
217+ - ** SharedStateService** : Manages persistent element state via filesystem
218+
219+ #### Client-Side (Browser Extension)
220+
221+ 1 . ** Connection Management (ElementSenderService):**
222+ - Uses ReconnectingWebSocket library for robust WebSocket connections
223+ - Exponential backoff: 1s min delay, 10s max delay, 1.5x grow factor
224+ - Maximum 5 retry attempts per connection
225+ - 5-second connection timeout
226+ - Automatic idle disconnection after 2 minutes of inactivity
227+
228+ 2 . ** Element Selection Flow:**
229+ - Content script captures element data on Option+Click
230+ - Data sent to background worker via Chrome Runtime API
231+ - Background worker uses ElementSenderService to send via WebSocket
232+ - Connection status callbacks provide user feedback (CONNECTING → CONNECTED → SENDING → SENT)
233+
234+ 3 . ** Resilience Features:**
235+ - Automatic reconnection during server restarts or leader changes
236+ - Port change handling (disconnects old, connects to new)
237+ - Connection status monitoring with detailed logging
238+ - Graceful error handling with status reporting
239+
145240## 🛠 Development Workflow
146241
147242### Chrome Extension Development
0 commit comments