get_camera_distance
Measure the current camera distance from the origin in 3D scenes. Use this tool to query the dolly position before making relative adjustments to maintain spatial accuracy.
Instructions
Get the current camera distance from origin (dolly position). Query this before relative distance changes to ensure accuracy. For absolute changes, you may use recently queried state from context if no manual interactions occurred.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- server.js:1710-1757 (registration)Registration of the 'get_camera_distance' tool with the MCP server, including title, description, input schema, and handler functionmcpServer.registerTool( 'get_camera_distance', { title: 'Get Camera Distance', description: 'Get the current camera distance from origin (dolly position). ' + 'Query this before relative distance changes to ensure accuracy. ' + 'For absolute changes, you may use recently queried state from context if no manual interactions occurred.', inputSchema: {} }, async () => { const sessionId = getCurrentSessionId(); if (!sessionId) { return { content: [ { type: 'text', text: 'Error: No active session found.' } ], isError: true }; } try { const { state, metadata } = await getState(sessionId); const distance = state.camera?.distance ?? 0; return { content: [ { type: 'text', text: formatStateResponse(distance.toString(), 'Camera distance', sessionId, metadata) } ] }; } catch (error) { return { content: [ { type: 'text', text: `Error retrieving camera distance: ${error.message}` } ], isError: true }; } } );
- server.js:1719-1756 (handler)Handler function for get_camera_distance tool - retrieves current camera distance from browser state via WebSocket communication and returns formatted response with metadataasync () => { const sessionId = getCurrentSessionId(); if (!sessionId) { return { content: [ { type: 'text', text: 'Error: No active session found.' } ], isError: true }; } try { const { state, metadata } = await getState(sessionId); const distance = state.camera?.distance ?? 0; return { content: [ { type: 'text', text: formatStateResponse(distance.toString(), 'Camera distance', sessionId, metadata) } ] }; } catch (error) { return { content: [ { type: 'text', text: `Error retrieving camera distance: ${error.message}` } ], isError: true }; } }
- server.js:284-316 (helper)Helper function getState() - queries state from browser via WebSocket with timeout handling, returns state with metadata (source, timestamp, cache status)async function getState(sessionId) { let state; let source; let wasCached = false; // Always query browser for current state try { state = await queryStateFromBrowser(sessionId); source = 'fresh'; } catch (error) { // If query fails, fall back to cache if available (browser may be disconnected) const cached = sessionStateCache.get(sessionId); if (cached) { console.warn(`Browser query failed for session ${sessionId}, returning cached state: ${error.message}`); state = cached.state; source = 'cache'; wasCached = true; } else { // No cache available, throw error throw new Error(`Unable to retrieve state: ${error.message}. Browser may be disconnected.`); } } // Return state with metadata return { state, metadata: { source, wasCached, timestamp: new Date().toISOString() } }; }
- server.js:319-327 (helper)Helper function formatStateResponse() - formats state query responses with property name, session ID, and metadata including staleness warningsfunction formatStateResponse(value, propertyName, sessionId, metadata) { const timestamp = metadata.timestamp; const source = metadata.source; const stalenessWarning = metadata.wasCached ? ' (using cached state - browser may be disconnected)' : ''; return `${propertyName}: ${value} (queried at ${timestamp}, source: ${source}${stalenessWarning})`; }
- server.js:2882-2888 (helper)Helper function getCurrentSessionId() - retrieves the current session ID from either STDIO mode or HTTP mode contextfunction getCurrentSessionId() { if (isStdioMode) { return STDIO_SESSION_ID; } else { return sessionContext.getStore(); } }