From 8317c88da22911b84b5eeb481612f067f8ddbe8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thiago=20Mendon=C3=A7a?= Date: Tue, 9 Jun 2026 00:05:44 -0400 Subject: [PATCH] fix(server): use os.tmpdir() for shared state path (Windows compat) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The shared state path was hardcoded to '/tmp/mcp-pointer-shared-state.json', a POSIX path. On Windows it resolves to 'C:\tmp\...' which usually doesn't exist, so saveState() fails with ENOENT (silently swallowed by try/catch) and getPointedElement() always returns null — the tool reports "No element is currently pointed" even though the extension sent the element successfully. Use path.join(os.tmpdir(), 'mcp-pointer-shared-state.json') so it works on Windows, macOS and Linux while preserving cross-instance shared state (same user resolves to the same temp dir). Fixes #22 --- packages/server/src/services/shared-state-service.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/server/src/services/shared-state-service.ts b/packages/server/src/services/shared-state-service.ts index e71f567..77282bf 100644 --- a/packages/server/src/services/shared-state-service.ts +++ b/packages/server/src/services/shared-state-service.ts @@ -1,9 +1,11 @@ import fs from 'fs/promises'; +import os from 'os'; +import path from 'path'; import { SharedState, ProcessedPointedDOMElement } from '../types'; import logger from '../logger'; export default class SharedStateService { - static SHARED_STATE_PATH = '/tmp/mcp-pointer-shared-state.json'; + static SHARED_STATE_PATH = path.join(os.tmpdir(), 'mcp-pointer-shared-state.json'); public async saveState(state: SharedState): Promise { try {