get_local_storage
Retrieve specific or all localStorage values from a browser tab. Specify a key to get a single entry or omit to fetch all stored data.
Instructions
Read localStorage entries for the current page
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Specific key to read (returns all if omitted) | |
| tabId | No | Target tab ID (defaults to active tab) | |
| apiKey | No | API key for authentication |
Implementation Reference
- src/tools/devtools-storage.ts:68-72 (handler)The handler function for the 'get_local_storage' tool. Sends a 'get_local_storage' command via the WebSocket bridge to the Chrome extension, which reads localStorage entries for the current page. Supports an optional 'key' parameter (returns all if omitted), optional 'tabId', and optional 'apiKey'. Returns the result as a JSON string.
async ({ key, tabId, apiKey }) => { const result = await bridge.sendCommand({ command: 'get_local_storage', params: { key }, tabId, apiKey }); if (!result.success) return { content: [{ type: 'text' as const, text: `Error: ${result.error?.message}` }], isError: true }; return { content: [{ type: 'text' as const, text: JSON.stringify(result.data, null, 2) }] }; } - src/tools/devtools-storage.ts:63-67 (schema)Zod schema definition for the 'get_local_storage' tool parameters: optional 'key' (string), optional 'tabId' (number), and optional 'apiKey' (string).
{ key: z.string().optional().describe('Specific key to read (returns all if omitted)'), tabId: z.number().optional().describe('Target tab ID (defaults to active tab)'), apiKey: z.string().optional().describe('API key for authentication'), }, - src/tools/devtools-storage.ts:60-73 (registration)Registration of the 'get_local_storage' tool via server.tool(), binding the tool name, description, schema, and handler together.
server.tool( 'get_local_storage', 'Read localStorage entries for the current page', { key: z.string().optional().describe('Specific key to read (returns all if omitted)'), tabId: z.number().optional().describe('Target tab ID (defaults to active tab)'), apiKey: z.string().optional().describe('API key for authentication'), }, async ({ key, tabId, apiKey }) => { const result = await bridge.sendCommand({ command: 'get_local_storage', params: { key }, tabId, apiKey }); if (!result.success) return { content: [{ type: 'text' as const, text: `Error: ${result.error?.message}` }], isError: true }; return { content: [{ type: 'text' as const, text: JSON.stringify(result.data, null, 2) }] }; } ); - src/tools/index.ts:29-55 (registration)The registerAllTools function that calls registerDevtoolsStorageTools (line 42) to register all devtools storage tools including get_local_storage.
export function registerAllTools(server: McpServer, bridge: WebSocketBridge) { registerNavigationTools(server, bridge); registerTabManagementTools(server, bridge); registerKeyboardTools(server, bridge); registerScreenshotTools(server, bridge); registerClickTools(server, bridge); registerInputTools(server, bridge); registerDragDropTools(server, bridge); registerHoverTools(server, bridge); registerDevtoolsSourcesTools(server, bridge); registerDevtoolsModifyTools(server, bridge); registerDevtoolsNetworkTools(server, bridge); registerDevtoolsStorageTools(server, bridge); registerDevtoolsConsoleTools(server, bridge); registerAccessibilityTools(server, bridge); registerEmulationTools(server, bridge); registerElementTools(server, bridge); registerAuditTools(server, bridge); registerInteractionTools(server, bridge); registerMonitoringTools(server, bridge); registerQaTools(server, bridge); registerGestureTools(server, bridge); registerMacroTools(server, bridge); registerVisualRegressionTools(server, bridge); }