From 3817645919b8b1e4f414685406b4c2647a186abc Mon Sep 17 00:00:00 2001 From: josedario87 Date: Sat, 14 Feb 2026 17:32:58 -0600 Subject: [PATCH] fix: Only register MCP tools when connected via torch - Tools only register when connected to MCP (has torch) - Store current page for tool activation when torch is obtained - Add onTorchConnected to activate page tools after MCP connection - Add onTorchDisconnected to clear tools when losing torch - Page changes only update tools if connected, otherwise store for later --- frontend/src/services/toolRegistry.ts | 64 ++++++++++++++++++++++++--- frontend/src/services/torch.ts | 5 ++- 2 files changed, 62 insertions(+), 7 deletions(-) diff --git a/frontend/src/services/toolRegistry.ts b/frontend/src/services/toolRegistry.ts index a876a7c..5e21588 100644 --- a/frontend/src/services/toolRegistry.ts +++ b/frontend/src/services/toolRegistry.ts @@ -8,9 +8,11 @@ import { initWebMCP, getRegisteredTools as getWebMCPTools, - clearAllTools as clearWebMCPTools + clearAllTools as clearWebMCPTools, + getWebMCP } from './webmcp' import { useToolsStore } from '../stores/tools' +import { useCanvasStore } from '../stores/canvas' import { createGlobalHandlers, createCanvasHandlers, @@ -158,6 +160,14 @@ const pageCategories: Record = { let currentPage: PageName | null = null let isInitialized = false +/** + * Check if connected to MCP + */ +function isConnectedToMCP(): boolean { + const canvasStore = useCanvasStore() + return canvasStore.isConnected +} + /** * Initialize the tool registry with Vue router */ @@ -182,14 +192,22 @@ export function clearSourceCodeCredentials() { /** * Activate tools for a specific page + * Only works when connected to MCP */ -export async function activatePageTools(pageName: PageName) { +export async function activatePageTools(pageName: PageName, force: boolean = false) { if (!isInitialized) { console.warn('[ToolRegistry] Not initialized') return } - if (currentPage === pageName) { + // Only register tools if connected to MCP + if (!isConnectedToMCP()) { + console.log(`[ToolRegistry] Not connected to MCP, storing page "${pageName}" for later`) + currentPage = pageName + return + } + + if (!force && currentPage === pageName) { console.log(`[ToolRegistry] Already on "${pageName}", skipping`) return } @@ -238,6 +256,7 @@ export async function activatePageTools(pageName: PageName) { /** * Initialize tools on page refresh + * Just stores the current page, actual registration happens when connected */ export async function initToolsOnRefresh(pageName: PageName) { if (!isInitialized) { @@ -245,11 +264,44 @@ export async function initToolsOnRefresh(pageName: PageName) { return } - console.log(`[ToolRegistry] Initializing on refresh for "${pageName}"`) + console.log(`[ToolRegistry] Storing current page "${pageName}" for when connected`) + currentPage = pageName + // Only activate if already connected + if (isConnectedToMCP()) { + internalClearAllTools() + await activatePageTools(pageName, true) + } +} + +/** + * Called when torch is obtained and MCP is connected + * Activates tools for the current page + */ +export async function onTorchConnected() { + if (!isInitialized) { + console.warn('[ToolRegistry] Not initialized') + return + } + + if (!currentPage) { + console.warn('[ToolRegistry] No current page set') + return + } + + console.log(`[ToolRegistry] Torch connected, activating tools for "${currentPage}"`) internalClearAllTools() - currentPage = null - await activatePageTools(pageName) + await activatePageTools(currentPage, true) +} + +/** + * Called when torch is lost and MCP is disconnected + * Clears all tools + */ +export function onTorchDisconnected() { + console.log('[ToolRegistry] Torch disconnected, clearing tools') + internalClearAllTools() + syncStoreWithActiveTools() } /** diff --git a/frontend/src/services/torch.ts b/frontend/src/services/torch.ts index f241ae4..e9ee046 100644 --- a/frontend/src/services/torch.ts +++ b/frontend/src/services/torch.ts @@ -1,5 +1,6 @@ import { useTorchStore } from '../stores/torch' import { autoConnect, disconnectWebMCP } from './webmcp' +import { onTorchConnected, onTorchDisconnected } from './toolRegistry' import { endpoints } from '../config/endpoints' let torchWs: WebSocket | null = null @@ -150,7 +151,8 @@ async function connectToMCP(): Promise { console.log('[Torch] Connecting to MCP...') const success = await autoConnect() if (success) { - console.log('[Torch] Connected to MCP') + console.log('[Torch] Connected to MCP, activating tools') + await onTorchConnected() } else { console.error('[Torch] Failed to connect to MCP') } @@ -161,6 +163,7 @@ async function connectToMCP(): Promise { */ function disconnectFromMCP(): void { console.log('[Torch] Disconnecting from MCP...') + onTorchDisconnected() disconnectWebMCP() }