@mcp-b/extension-tools 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/BaseApiTools.ts","../src/chrome-apis/TabsApiTools.ts","../src/chrome-apis/WindowsApiTools.ts","../src/chrome-apis/BookmarksApiTools.ts","../src/chrome-apis/StorageApiTools.ts","../src/chrome-apis/HistoryApiTools.ts","../src/chrome-apis/NotificationsApiTools.ts","../src/chrome-apis/ScriptingApiTools.ts","../src/chrome-apis/CookiesApiTools.ts","../src/chrome-apis/AlarmsApiTools.ts","../src/chrome-apis/DownloadsApiTools.ts","../src/chrome-apis/RuntimeApiTools.ts","../src/chrome-apis/CommandsApiTools.ts","../src/chrome-apis/TtsApiTools.ts","../src/chrome-apis/TabGroupsApiTools.ts","../src/chromeApiRegistry.ts"],"names":["BaseApiTools","server","options","toolName","error","message","data","availability","TabsApiTools","byDomain","tab","domain","acc","tabs","a","b","z","url","active","pinned","tabId","muted","activeTab","updateProperties","tabIds","currentWindow","tabInfo","direction","bypassCache","windowId","dataUrl","language","zoomFactor","zoomSettings","mode","scope","settings","groupId","createProperties","resultGroupId","highlightInfo","window","index","moveProperties","frameId","documentId","response","WindowsApiTools","populate","windows","incognito","focused","width","height","left","top","type","createData","state","updateInfo","BookmarksApiTools","query","folderId","bookmarks","title","parentId","createDetails","bookmark","id","changes","destination","StorageApiTools","availableAreas","areas","keys","area","storage","confirm","bytesInUse","quotaInfo","bytes","k","sizes","i","HistoryApiTools","text","maxResults","startTime","endTime","results","formattedResults","item","startDate","endDate","visits","formattedVisits","visit","historyItem","NotificationsApiTools","_level","iconUrl","imageUrl","items","progress","buttons","priority","requireInteraction","notificationId","resolve","reject","_notificationId","notifications","notificationList","notification","ScriptingApiTools","match","code","allFrames","world","injectionFunction","codeToExecute","script","result","scriptId","resultPromise","listener","_sender","r","css","CookiesApiTools","name","storeId","session","secure","httpOnly","details","cookies","formattedCookies","cookie","value","path","sameSite","expirationDate","stores","formattedStores","store","AlarmsApiTools","_alarms","delayInMinutes","periodInMinutes","when","alarmInfo","createdAlarm","alarm","alarms","wasCleared","alarmsBefore","DownloadStateSchema","DangerTypeSchema","_InterruptReasonSchema","DownloadsApiTools","filename","conflictAction","saveAs","headers","method","body","downloadId","params","size","downloadQuery","RuntimeApiTools","manifest","urls","installType","info","extensionId","connectInfo","port","portInfo","filter","contexts","context","platformInfo","CommandsApiTools","formattedCommands","command","specialCommands","cmd","customCommands","shortcut","action","hasListeners","activeCommands","parts","part","lastPart","TtsApiTools","utterance","lang","voiceName","rate","pitch","volume","enqueue","requiredEventTypes","desiredEventTypes","events","errorOccurred","event","speaking","voices","filteredVoices","voice","TabGroupsApiTools","group","collapsed","color","shared","queryInfo","groups","updatedGroup","movedGroup","ChromeApi","ChromePlatformSchema","ChromeChannelSchema","ChromeContextSchema","ChromeApiMetadataSchema","CHROME_API_REGISTRY","isApiAvailable","api","manifestVersion","platform","chromeVersion","metadata","getChromeApiReference","ref","getAvailableApis"],"mappings":"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","file":"index.js","sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface ApiToolOptions {\n [toolName: string]: boolean;\n}\n\nexport interface ApiAvailability {\n available: boolean;\n message: string;\n details?: string;\n}\n\nexport abstract class BaseApiTools {\n protected abstract apiName: string;\n\n constructor(\n protected server: McpServer,\n protected options: ApiToolOptions = {}\n ) {}\n\n abstract checkAvailability(): ApiAvailability;\n abstract registerTools(): void;\n\n protected shouldRegisterTool(toolName: string): boolean {\n if (this.options[toolName] === false) {\n return false;\n }\n return true;\n }\n\n protected formatError(error: unknown): CallToolResult {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: `Error: ${message}`,\n },\n ],\n isError: true,\n };\n }\n\n protected formatSuccess(message: string, data?: any): CallToolResult {\n return {\n content: [\n {\n type: 'text',\n text: data ? `${message}\\n${JSON.stringify(data, null, 2)}` : message,\n },\n ],\n };\n }\n\n protected formatJson(data: any): CallToolResult {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(data, null, 2),\n },\n ],\n };\n }\n\n public register(): void {\n const availability = this.checkAvailability();\n if (!availability.available) {\n console.warn(`✗ ${this.apiName} API not available: ${availability.message}`);\n if (availability.details) {\n console.warn(` Details: ${availability.details}`);\n }\n return;\n }\n\n console.log(`✓ ${this.apiName} API available`);\n this.registerTools();\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class TabsApiTools extends BaseApiTools {\n protected apiName = 'Tabs';\n\n constructor(\n server: McpServer,\n options: {\n listActiveTabs?: boolean;\n createTab?: boolean;\n updateTab?: boolean;\n closeTabs?: boolean;\n getAllTabs?: boolean;\n navigateHistory?: boolean;\n reloadTab?: boolean;\n captureVisibleTab?: boolean;\n detectLanguage?: boolean;\n discardTab?: boolean;\n duplicateTab?: boolean;\n getTab?: boolean;\n getZoom?: boolean;\n setZoom?: boolean;\n groupTabs?: boolean;\n ungroupTabs?: boolean;\n highlightTabs?: boolean;\n moveTabs?: boolean;\n sendMessage?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Test basic tabs API access\n if (!chrome.tabs) {\n return {\n available: false,\n message: 'chrome.tabs API is not defined',\n details: 'This extension may not have the \"tabs\" permission in its manifest',\n };\n }\n\n // Test a basic method that should always be available with tabs permission\n if (typeof chrome.tabs.query !== 'function') {\n return {\n available: false,\n message: 'chrome.tabs.query is not available',\n details: 'The tabs API appears to be partially available. Check manifest permissions.',\n };\n }\n\n return {\n available: true,\n message: 'Tabs API is fully available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.tabs API',\n details: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('listActiveTabs')) {\n this.registerListActiveTabs();\n }\n\n if (this.shouldRegisterTool('createTab')) {\n this.registerCreateTab();\n }\n\n if (this.shouldRegisterTool('updateTab')) {\n this.registerUpdateTab();\n }\n\n if (this.shouldRegisterTool('closeTabs')) {\n this.registerCloseTabs();\n }\n\n if (this.shouldRegisterTool('getAllTabs')) {\n this.registerGetAllTabs();\n }\n\n // Navigation tools\n if (this.shouldRegisterTool('navigateHistory')) {\n this.checkAndRegisterNavigationTools();\n }\n\n if (this.shouldRegisterTool('reloadTab')) {\n this.registerReloadTab();\n }\n\n // Screenshot tool\n if (this.shouldRegisterTool('captureVisibleTab')) {\n this.checkAndRegisterScreenshotTool();\n }\n\n // New tools\n if (this.shouldRegisterTool('detectLanguage')) {\n this.registerDetectLanguage();\n }\n\n if (this.shouldRegisterTool('discardTab')) {\n this.registerDiscardTab();\n }\n\n if (this.shouldRegisterTool('duplicateTab')) {\n this.registerDuplicateTab();\n }\n\n if (this.shouldRegisterTool('getTab')) {\n this.registerGetTab();\n }\n\n if (this.shouldRegisterTool('getZoom')) {\n this.registerGetZoom();\n this.registerGetZoomSettings();\n }\n\n if (this.shouldRegisterTool('setZoom')) {\n this.registerSetZoom();\n this.registerSetZoomSettings();\n }\n\n if (this.shouldRegisterTool('groupTabs')) {\n this.registerGroupTabs();\n }\n\n if (this.shouldRegisterTool('ungroupTabs')) {\n this.registerUngroupTabs();\n }\n\n if (this.shouldRegisterTool('highlightTabs')) {\n this.registerHighlightTabs();\n }\n\n if (this.shouldRegisterTool('moveTabs')) {\n this.registerMoveTabs();\n }\n\n if (this.shouldRegisterTool('sendMessage')) {\n this.registerSendMessage();\n }\n }\n\n private checkAndRegisterNavigationTools(): void {\n try {\n if (typeof chrome.tabs.goBack === 'function' && typeof chrome.tabs.goForward === 'function') {\n this.registerNavigateHistory();\n console.log(' ✓ Navigation methods (goBack/goForward) available');\n } else {\n console.warn(' ✗ Navigation methods not available - Chrome 72+ required');\n }\n } catch {\n console.warn(' ✗ Failed to check navigation methods availability');\n }\n }\n\n private checkAndRegisterScreenshotTool(): void {\n try {\n if (typeof chrome.tabs.captureVisibleTab === 'function') {\n this.registerCaptureVisibleTab();\n console.log(' ✓ Screenshot capture available');\n } else {\n console.warn(\n ' ✗ Screenshot capture not available - requires \"activeTab\" or \"<all_urls>\" permission'\n );\n }\n } catch {\n console.warn(' ✗ Failed to check screenshot capture availability');\n }\n }\n\n private registerListActiveTabs(): void {\n this.server.registerTool(\n 'list_active_tabs',\n {\n description: 'Lists all tabs grouped by domain',\n inputSchema: {},\n },\n async () => {\n const tabs = await chrome.tabs.query({});\n\n const tabsInfo = tabs.map((tab) => {\n // Extract domain from URL\n let domain = 'unknown';\n if (tab.url) {\n try {\n const url = new URL(tab.url);\n domain = url.hostname;\n } catch {\n // Keep domain as 'unknown' for invalid URLs\n }\n }\n\n return {\n tabId: tab.id,\n domain,\n url: tab.url,\n title: tab.title,\n isActive: tab.active,\n windowId: tab.windowId,\n index: tab.index,\n pinned: tab.pinned,\n audible: tab.audible,\n mutedInfo: tab.mutedInfo,\n status: tab.status,\n };\n });\n\n const byDomain = tabsInfo.reduce(\n (acc, tab) => {\n const domain = tab.domain || 'unknown';\n if (!acc[domain]) acc[domain] = [];\n acc[domain].push(tab);\n return acc;\n },\n {} as Record<string, typeof tabsInfo>\n );\n\n // Sort tabs within each domain by their index\n for (const tabs of Object.values(byDomain)) {\n tabs.sort((a, b) => {\n // First sort by windowId, then by index\n if (a.windowId !== b.windowId) {\n return (a.windowId || 0) - (b.windowId || 0);\n }\n return (a.index || 0) - (b.index || 0);\n });\n }\n\n return this.formatJson(byDomain);\n }\n );\n }\n\n private registerCreateTab(): void {\n this.server.registerTool(\n 'create_tab',\n {\n description: 'Create a new browser tab',\n inputSchema: {\n url: z\n .string()\n .optional()\n .describe(\n `URL to open in the new tab. Fully-qualified URLs must include a scheme (i.e., 'http://www.google.com', not 'www.google.com'). Relative URLs are relative to the current page within the extension. Defaults to the New Tab Page.`\n ),\n active: z.boolean().optional().describe('Whether the tab should be active'),\n pinned: z.boolean().optional().describe('Whether the tab should be pinned'),\n },\n },\n async ({ url, active, pinned }) => {\n try {\n const tab = await chrome.tabs.create({ url, active, pinned });\n return this.formatSuccess(`Created tab ${tab.id} with URL: ${tab.url || 'about:blank'}`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerUpdateTab(): void {\n this.server.registerTool(\n 'update_tab',\n {\n description:\n 'Update properties of an existing tab. If no tabId is specified, operates on the currently active tab',\n inputSchema: {\n tabId: z.number().optional().describe('ID of the tab to update (defaults to active tab)'),\n url: z.string().optional().describe('New URL for the tab'),\n active: z.boolean().optional().describe('Whether to make the tab active'),\n pinned: z.boolean().optional().describe('Whether to pin/unpin the tab'),\n muted: z.boolean().optional().describe('Whether to mute/unmute the tab'),\n },\n },\n async ({ tabId, url, active, pinned, muted }) => {\n try {\n if (tabId === undefined) {\n const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });\n if (!activeTab || !activeTab.id) {\n return this.formatError(new Error('No active tab found'));\n }\n tabId = activeTab.id;\n }\n\n const updateProperties: chrome.tabs.UpdateProperties = {};\n if (url !== undefined) updateProperties.url = url;\n if (active !== undefined) updateProperties.active = active;\n if (pinned !== undefined) updateProperties.pinned = pinned;\n if (muted !== undefined) updateProperties.muted = muted;\n\n const tab = await chrome.tabs.update(tabId, updateProperties);\n if (!tab) {\n return this.formatError(new Error('Tab does not exist'));\n }\n\n return this.formatSuccess(`Updated tab ${tab.id}`, updateProperties);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerCloseTabs(): void {\n this.server.registerTool(\n 'close_tabs',\n {\n description: 'Close one or more tabs',\n inputSchema: {\n tabIds: z.array(z.number()).describe('Array of tab IDs to close'),\n },\n },\n async ({ tabIds }) => {\n try {\n await chrome.tabs.remove(tabIds);\n return this.formatSuccess(`Closed ${tabIds.length} tab(s): ${tabIds.join(', ')}`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetAllTabs(): void {\n this.server.registerTool(\n 'get_all_tabs',\n {\n description: 'Get information about all open tabs',\n inputSchema: {\n currentWindow: z.boolean().optional().describe('Only get tabs from current window'),\n },\n },\n async ({ currentWindow }) => {\n try {\n const tabs = await chrome.tabs.query(currentWindow ? { currentWindow: true } : {});\n const tabInfo = tabs.map((tab) => ({\n id: tab.id,\n title: tab.title,\n url: tab.url,\n active: tab.active,\n pinned: tab.pinned,\n windowId: tab.windowId,\n index: tab.index,\n }));\n\n return this.formatJson(tabInfo);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerNavigateHistory(): void {\n this.server.registerTool(\n 'navigate_tab_history',\n {\n description:\n \"Navigate forward or backward in a tab's history. If no tabId is specified, operates on the currently active tab\",\n inputSchema: {\n tabId: z.number().optional().describe('Tab ID to navigate (defaults to active tab)'),\n direction: z.enum(['back', 'forward']).describe('Navigation direction'),\n },\n },\n async ({ tabId, direction }) => {\n try {\n if (tabId === undefined) {\n const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });\n if (!activeTab || !activeTab.id) {\n return this.formatError(new Error('No active tab found'));\n }\n tabId = activeTab.id;\n }\n\n if (direction === 'back') {\n await chrome.tabs.goBack(tabId);\n } else {\n await chrome.tabs.goForward(tabId);\n }\n\n return this.formatSuccess(`Navigated ${direction} in tab ${tabId}`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerReloadTab(): void {\n this.server.registerTool(\n 'reload_tab',\n {\n description: 'Reload a tab. If no tabId is specified, operates on the currently active tab',\n inputSchema: {\n tabId: z.number().optional().describe('Tab ID to reload (defaults to active tab)'),\n bypassCache: z.boolean().optional().describe('Bypass the cache when reloading'),\n },\n },\n async ({ tabId, bypassCache }) => {\n try {\n if (tabId === undefined) {\n const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });\n if (!activeTab || !activeTab.id) {\n return this.formatError(new Error('No active tab found'));\n }\n tabId = activeTab.id;\n }\n\n await chrome.tabs.reload(tabId, { bypassCache });\n return this.formatSuccess(\n `Reloaded tab ${tabId}${bypassCache ? ' (bypassed cache)' : ''}`\n );\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerCaptureVisibleTab(): void {\n this.server.registerTool(\n 'capture_visible_tab',\n {\n description:\n 'Take a screenshot of the visible area of the currently active tab in a window',\n inputSchema: {\n windowId: z.number().optional().describe('Window ID (defaults to current window)'),\n },\n },\n async ({ windowId }) => {\n try {\n const dataUrl = windowId\n ? await chrome.tabs.captureVisibleTab(windowId, {})\n : await chrome.tabs.captureVisibleTab();\n\n return this.formatSuccess(\n `Screenshot captured (data URL length: ${dataUrl.length} characters)`\n );\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerDetectLanguage(): void {\n this.server.registerTool(\n 'detect_tab_language',\n {\n description: 'Detects the primary language of the content in a tab',\n inputSchema: {\n tabId: z.number().optional().describe('Tab ID (defaults to active tab)'),\n },\n },\n async ({ tabId }) => {\n try {\n const language = await chrome.tabs.detectLanguage(tabId!);\n return this.formatSuccess(`Tab language detected: ${language}`, { language });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerDiscardTab(): void {\n this.server.registerTool(\n 'discard_tab',\n {\n description:\n 'Discards a tab from memory. Discarded tabs are still visible but need to reload when activated',\n inputSchema: {\n tabId: z\n .number()\n .optional()\n .describe('Tab ID to discard (if omitted, browser picks least important tab)'),\n },\n },\n async ({ tabId }) => {\n try {\n const tab = await chrome.tabs.discard(tabId);\n if (!tab) {\n return this.formatError(new Error('Failed to discard tab'));\n }\n return this.formatSuccess(`Discarded tab ${tab.id}`, { tab });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerDuplicateTab(): void {\n this.server.registerTool(\n 'duplicate_tab',\n {\n description: 'Duplicates a tab',\n inputSchema: {\n tabId: z.number().describe('ID of the tab to duplicate'),\n },\n },\n async ({ tabId }) => {\n try {\n const tab = await chrome.tabs.duplicate(tabId);\n if (!tab) {\n return this.formatError(new Error('Failed to duplicate tab'));\n }\n return this.formatSuccess(`Duplicated tab ${tabId} to new tab ${tab.id}`, { tab });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetTab(): void {\n this.server.registerTool(\n 'get_tab',\n {\n description: 'Retrieves details about a specific tab',\n inputSchema: {\n tabId: z.number().describe('Tab ID'),\n },\n },\n async ({ tabId }) => {\n try {\n const tab = await chrome.tabs.get(tabId);\n return this.formatJson(tab);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetZoom(): void {\n this.server.registerTool(\n 'get_tab_zoom',\n {\n description: 'Gets the current zoom factor of a tab',\n inputSchema: {\n tabId: z.number().optional().describe('Tab ID (defaults to active tab)'),\n },\n },\n async ({ tabId }) => {\n try {\n const zoomFactor = await chrome.tabs.getZoom(tabId!);\n return this.formatSuccess(`Zoom factor: ${zoomFactor}`, { zoomFactor });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerSetZoom(): void {\n this.server.registerTool(\n 'set_tab_zoom',\n {\n description: 'Sets the zoom factor for a tab',\n inputSchema: {\n tabId: z.number().optional().describe('Tab ID (defaults to active tab)'),\n zoomFactor: z\n .number()\n .describe('New zoom factor (0 resets to default, >0 sets specific zoom)'),\n },\n },\n async ({ tabId, zoomFactor }) => {\n try {\n await chrome.tabs.setZoom(tabId!, zoomFactor);\n return this.formatSuccess(\n `Set zoom factor to ${zoomFactor === 0 ? 'default' : zoomFactor}`\n );\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetZoomSettings(): void {\n this.server.registerTool(\n 'get_tab_zoom_settings',\n {\n description: 'Gets the current zoom settings of a tab',\n inputSchema: {\n tabId: z.number().optional().describe('Tab ID (defaults to active tab)'),\n },\n },\n async ({ tabId }) => {\n try {\n const zoomSettings = await chrome.tabs.getZoomSettings(tabId!);\n return this.formatJson(zoomSettings);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerSetZoomSettings(): void {\n this.server.registerTool(\n 'set_tab_zoom_settings',\n {\n description: 'Sets zoom settings for a tab (how zoom changes are handled)',\n inputSchema: {\n tabId: z.number().optional().describe('Tab ID (defaults to active tab)'),\n mode: z\n .enum(['automatic', 'manual', 'disabled'])\n .optional()\n .describe('How zoom changes are handled'),\n scope: z\n .enum(['per-origin', 'per-tab'])\n .optional()\n .describe('Whether zoom persists across pages'),\n },\n },\n async ({ tabId, mode, scope }) => {\n try {\n const settings: chrome.tabs.ZoomSettings = {};\n if (mode) settings.mode = mode;\n if (scope) settings.scope = scope;\n\n await chrome.tabs.setZoomSettings(tabId!, settings);\n return this.formatSuccess('Updated zoom settings', settings);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGroupTabs(): void {\n this.server.registerTool(\n 'group_tabs',\n {\n description: 'Groups one or more tabs together',\n inputSchema: {\n tabIds: z.array(z.number()).min(1).describe('Tab IDs to group'),\n groupId: z.number().optional().describe('Existing group ID to add tabs to'),\n createProperties: z\n .object({\n windowId: z.number().optional().describe('Window ID for new group'),\n })\n .optional()\n .describe('Properties for creating a new group'),\n },\n },\n async ({ tabIds, groupId, createProperties }) => {\n try {\n const options: Parameters<typeof chrome.tabs.group>[0] = {\n tabIds: tabIds.length === 1 ? tabIds[0] : tabIds,\n };\n\n if (groupId !== undefined) {\n options.groupId = groupId;\n } else if (createProperties) {\n options.createProperties = createProperties;\n }\n\n const resultGroupId = await chrome.tabs.group(options);\n return this.formatSuccess(`Grouped ${tabIds.length} tabs into group ${resultGroupId}`, {\n groupId: resultGroupId,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerUngroupTabs(): void {\n this.server.registerTool(\n 'ungroup_tabs',\n {\n description: 'Removes tabs from their groups',\n inputSchema: {\n tabIds: z.array(z.number()).min(1).describe('Tab IDs to ungroup'),\n },\n },\n async ({ tabIds }) => {\n try {\n await chrome.tabs.ungroup(tabIds.length === 1 ? tabIds[0] : tabIds);\n return this.formatSuccess(`Ungrouped ${tabIds.length} tab(s)`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerHighlightTabs(): void {\n this.server.registerTool(\n 'highlight_tabs',\n {\n description: 'Highlights the given tabs and focuses on the first one',\n inputSchema: {\n tabs: z.array(z.number()).min(1).describe('Tab indices to highlight'),\n windowId: z.number().optional().describe('Window ID containing the tabs'),\n },\n },\n async ({ tabs, windowId }) => {\n try {\n const highlightInfo: chrome.tabs.HighlightInfo = {\n tabs: tabs.length === 1 ? tabs[0] : tabs,\n };\n if (windowId !== undefined) {\n highlightInfo.windowId = windowId;\n }\n\n const window = await chrome.tabs.highlight(highlightInfo);\n return this.formatSuccess(`Highlighted ${tabs.length} tab(s)`, { window });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerMoveTabs(): void {\n this.server.registerTool(\n 'move_tabs',\n {\n description: 'Moves tabs to a new position within their window or to another window',\n inputSchema: {\n tabIds: z.array(z.number()).min(1).describe('Tab IDs to move'),\n index: z.number().describe('Position to move tabs to (-1 for end)'),\n windowId: z.number().optional().describe('Target window ID'),\n },\n },\n async ({ tabIds, index, windowId }) => {\n try {\n const moveProperties: chrome.tabs.MoveProperties = { index };\n if (windowId !== undefined) {\n moveProperties.windowId = windowId;\n }\n\n const tabs = chrome.tabs.move(\n //@ts-expect-error - to lazy to fix this\n tabIds.length === 1 ? tabIds[0] : tabIds,\n moveProperties\n );\n return this.formatSuccess(`Moved ${tabIds.length} tab(s) to index ${index}`, { tabs });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerSendMessage(): void {\n this.server.registerTool(\n 'send_message_to_tab',\n {\n description: 'Sends a message to content scripts in a specific tab',\n inputSchema: {\n tabId: z.number().describe('Tab ID to send message to'),\n message: z.any().describe('Message to send (must be JSON-serializable)'),\n frameId: z.number().optional().describe('Specific frame ID to target'),\n documentId: z.string().optional().describe('Specific document ID to target'),\n },\n },\n async ({ tabId, message, frameId, documentId }) => {\n try {\n const options: chrome.tabs.MessageSendOptions = {};\n if (frameId !== undefined) options.frameId = frameId;\n if (documentId !== undefined) options.documentId = documentId;\n\n const response = await chrome.tabs.sendMessage(tabId, message, options);\n return this.formatSuccess('Message sent successfully', { response });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class WindowsApiTools extends BaseApiTools {\n protected apiName = 'Windows';\n\n constructor(\n server: McpServer,\n options: {\n getAllWindows?: boolean;\n createWindow?: boolean;\n updateWindow?: boolean;\n removeWindow?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Test basic windows API access\n if (!chrome.windows) {\n return {\n available: false,\n message: 'chrome.windows API is not defined',\n details:\n 'This extension may not have access to the windows API. Some browser environments do not support this API.',\n };\n }\n\n // Test a basic method\n if (typeof chrome.windows.getAll !== 'function') {\n return {\n available: false,\n message: 'chrome.windows.getAll is not available',\n details:\n 'The windows API appears to be partially available. This may be a restricted environment.',\n };\n }\n\n // Try to actually use the API to ensure it's functional\n chrome.windows.getCurrent({}, () => {\n if (chrome.runtime.lastError) {\n // This is handled in the catch block\n throw new Error(chrome.runtime.lastError.message);\n }\n });\n\n return {\n available: true,\n message: 'Windows API is fully available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.windows API',\n details: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('getAllWindows')) {\n this.registerGetAllWindows();\n }\n\n if (this.shouldRegisterTool('createWindow')) {\n this.registerCreateWindow();\n }\n\n if (this.shouldRegisterTool('updateWindow')) {\n this.registerUpdateWindow();\n }\n\n if (this.shouldRegisterTool('removeWindow')) {\n this.registerRemoveWindow();\n }\n }\n\n private registerGetAllWindows(): void {\n this.server.registerTool(\n 'get_all_windows',\n {\n description: 'Get information about all browser windows',\n inputSchema: {\n populate: z.boolean().optional().describe('Include tabs information'),\n },\n },\n async ({ populate }) => {\n try {\n const windows = await chrome.windows.getAll({ populate });\n return this.formatJson(windows);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerCreateWindow(): void {\n this.server.registerTool(\n 'create_window',\n {\n description: 'Create a new browser window',\n inputSchema: {\n url: z\n .union([z.string(), z.array(z.string())])\n .optional()\n .describe('URL(s) to open in the new window'),\n incognito: z.boolean().optional().describe('Open as incognito window'),\n focused: z.boolean().optional().describe('Whether window should be focused'),\n width: z.number().optional().describe('Window width in pixels'),\n height: z.number().optional().describe('Window height in pixels'),\n left: z.number().optional().describe('Left position of the window'),\n top: z.number().optional().describe('Top position of the window'),\n type: z.enum(['normal', 'popup', 'panel', 'devtools']).optional().describe('Window type'),\n },\n },\n async ({ url, incognito, focused, width, height, left, top, type }) => {\n try {\n const createData: chrome.windows.CreateData = {};\n if (url !== undefined) createData.url = url;\n if (incognito !== undefined) createData.incognito = incognito;\n if (focused !== undefined) createData.focused = focused;\n if (width !== undefined) createData.width = width;\n if (height !== undefined) createData.height = height;\n if (left !== undefined) createData.left = left;\n if (top !== undefined) createData.top = top;\n if (type !== undefined) createData.type = type as any;\n\n const window = await chrome.windows.create(createData);\n return this.formatSuccess(\n `Created window ${window.id} with ${window.tabs?.length || 0} tab(s)`\n );\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerUpdateWindow(): void {\n this.server.registerTool(\n 'update_window',\n {\n description: 'Update properties of an existing window',\n inputSchema: {\n windowId: z.number().describe('ID of the window to update'),\n focused: z.boolean().optional().describe('Whether to bring the window to the front'),\n width: z.number().optional().describe('New width in pixels'),\n height: z.number().optional().describe('New height in pixels'),\n left: z.number().optional().describe('New left position'),\n top: z.number().optional().describe('New top position'),\n state: z\n .enum(['normal', 'minimized', 'maximized', 'fullscreen'])\n .optional()\n .describe('Window state'),\n },\n },\n async ({ windowId, focused, width, height, left, top, state }) => {\n try {\n const updateInfo: chrome.windows.UpdateInfo = {};\n if (focused !== undefined) updateInfo.focused = focused;\n if (width !== undefined) updateInfo.width = width;\n if (height !== undefined) updateInfo.height = height;\n if (left !== undefined) updateInfo.left = left;\n if (top !== undefined) updateInfo.top = top;\n if (state !== undefined) updateInfo.state = state as any;\n\n const window = await chrome.windows.update(windowId, updateInfo);\n return this.formatSuccess(`Updated window ${window.id}`, updateInfo);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerRemoveWindow(): void {\n this.server.registerTool(\n 'remove_window',\n {\n description: 'Close a browser window',\n inputSchema: {\n windowId: z.number().describe('ID of the window to close'),\n },\n },\n async ({ windowId }) => {\n try {\n await chrome.windows.remove(windowId);\n return this.formatSuccess(`Closed window ${windowId}`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class BookmarksApiTools extends BaseApiTools {\n protected apiName = 'Bookmarks';\n\n constructor(\n server: McpServer,\n options: {\n getBookmarks?: boolean;\n createBookmark?: boolean;\n updateBookmark?: boolean;\n removeBookmark?: boolean;\n moveBookmark?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Test basic bookmarks API access\n if (!chrome.bookmarks) {\n return {\n available: false,\n message: 'chrome.bookmarks API is not defined',\n details:\n 'This extension needs the \"bookmarks\" permission in its manifest.json to access bookmarks',\n };\n }\n\n // Test a basic method that requires bookmarks permission\n chrome.bookmarks.getTree(() => {\n if (chrome.runtime.lastError) {\n throw new Error(chrome.runtime.lastError.message);\n }\n });\n\n return {\n available: true,\n message: 'Bookmarks API is fully available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.bookmarks API',\n details:\n error instanceof Error\n ? error.message\n : 'Missing \"bookmarks\" permission in manifest.json',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('getBookmarks')) {\n this.registerGetBookmarks();\n }\n\n if (this.shouldRegisterTool('createBookmark')) {\n this.registerCreateBookmark();\n }\n\n if (this.shouldRegisterTool('updateBookmark')) {\n this.registerUpdateBookmark();\n }\n\n if (this.shouldRegisterTool('removeBookmark')) {\n this.registerRemoveBookmark();\n }\n\n if (this.shouldRegisterTool('moveBookmark')) {\n this.registerMoveBookmark();\n }\n }\n\n private registerGetBookmarks(): void {\n this.server.registerTool(\n 'get_bookmarks',\n {\n description: 'Get bookmarks from the browser',\n inputSchema: {\n query: z.string().optional().describe('Search query for bookmarks'),\n folderId: z.string().optional().describe('Get bookmarks from a specific folder'),\n },\n },\n async ({ query, folderId }) => {\n try {\n let bookmarks;\n\n if (query) {\n bookmarks = await chrome.bookmarks.search(query);\n } else if (folderId) {\n bookmarks = await chrome.bookmarks.getSubTree(folderId);\n } else {\n bookmarks = await chrome.bookmarks.getTree();\n }\n\n return this.formatJson(bookmarks);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerCreateBookmark(): void {\n this.server.registerTool(\n 'create_bookmark',\n {\n description: 'Create a new bookmark',\n inputSchema: {\n title: z.string().describe('Bookmark title'),\n url: z.string().describe('Bookmark URL'),\n parentId: z\n .string()\n .optional()\n .describe('Parent folder ID (defaults to \"Other Bookmarks\")'),\n index: z.number().optional().describe('Position within parent folder'),\n },\n },\n async ({ title, url, parentId, index }) => {\n try {\n const createDetails: chrome.bookmarks.CreateDetails = {\n title,\n url,\n };\n\n if (parentId !== undefined) createDetails.parentId = parentId;\n if (index !== undefined) createDetails.index = index;\n\n const bookmark = await chrome.bookmarks.create(createDetails);\n return this.formatSuccess(\n `Created bookmark: ${bookmark.title} (${bookmark.url})`,\n bookmark\n );\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerUpdateBookmark(): void {\n this.server.registerTool(\n 'update_bookmark',\n {\n description: 'Update an existing bookmark',\n inputSchema: {\n id: z.string().describe('Bookmark ID to update'),\n title: z.string().optional().describe('New title'),\n url: z.string().optional().describe('New URL'),\n },\n },\n async ({ id, title, url }) => {\n try {\n const changes: chrome.bookmarks.UpdateChanges = {};\n if (title !== undefined) changes.title = title;\n if (url !== undefined) changes.url = url;\n\n const bookmark = await chrome.bookmarks.update(id, changes);\n return this.formatSuccess(`Updated bookmark ${id}`, bookmark);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerRemoveBookmark(): void {\n this.server.registerTool(\n 'remove_bookmark',\n {\n description: 'Remove a bookmark or bookmark folder',\n inputSchema: {\n id: z.string().describe('Bookmark ID to remove'),\n },\n },\n async ({ id }) => {\n try {\n await chrome.bookmarks.remove(id);\n return this.formatSuccess(`Removed bookmark ${id}`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerMoveBookmark(): void {\n this.server.registerTool(\n 'move_bookmark',\n {\n description: 'Move a bookmark to a different folder',\n inputSchema: {\n id: z.string().describe('Bookmark ID to move'),\n parentId: z.string().describe('New parent folder ID'),\n index: z.number().optional().describe('Position within new parent folder'),\n },\n },\n async ({ id, parentId, index }) => {\n try {\n const destination: chrome.bookmarks.MoveDestination = { parentId };\n if (index !== undefined) destination.index = index;\n\n const bookmark = await chrome.bookmarks.move(id, destination);\n return this.formatSuccess(`Moved bookmark ${id} to parent ${parentId}`, bookmark);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class StorageApiTools extends BaseApiTools {\n protected apiName = 'Storage';\n\n constructor(\n server: McpServer,\n options: {\n getStorage?: boolean;\n setStorage?: boolean;\n removeStorage?: boolean;\n clearStorage?: boolean;\n getBytesInUse?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Test basic storage API access\n if (!chrome.storage) {\n return {\n available: false,\n message: 'chrome.storage API is not defined',\n details:\n 'This extension needs the \"storage\" permission in its manifest.json to access storage',\n };\n }\n\n // Check which storage areas are available\n const availableAreas: string[] = [];\n if (chrome.storage.local) availableAreas.push('local');\n if (chrome.storage.sync) availableAreas.push('sync');\n if (chrome.storage.session) availableAreas.push('session');\n if (chrome.storage.managed) availableAreas.push('managed');\n\n if (availableAreas.length === 0) {\n return {\n available: false,\n message: 'No storage areas are available',\n details: 'The storage API is present but no storage areas can be accessed',\n };\n }\n\n // Test actual functionality\n chrome.storage.local.get(null, () => {\n if (chrome.runtime.lastError) {\n throw new Error(chrome.runtime.lastError.message);\n }\n });\n\n return {\n available: true,\n message: `Storage API is available with areas: ${availableAreas.join(', ')}`,\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.storage API',\n details: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('getStorage')) {\n this.registerGetStorage();\n }\n\n if (this.shouldRegisterTool('setStorage')) {\n this.registerSetStorage();\n }\n\n if (this.shouldRegisterTool('removeStorage')) {\n this.registerRemoveStorage();\n }\n\n if (this.shouldRegisterTool('clearStorage')) {\n this.registerClearStorage();\n }\n\n if (this.shouldRegisterTool('getBytesInUse')) {\n this.registerGetBytesInUse();\n }\n }\n\n private getAvailableAreas(): string[] {\n const areas: string[] = [];\n if (chrome.storage.sync) areas.push('sync');\n if (chrome.storage.local) areas.push('local');\n if (chrome.storage.session) areas.push('session');\n return areas;\n }\n\n private registerGetStorage(): void {\n const availableAreas = this.getAvailableAreas();\n\n this.server.registerTool(\n 'get_storage',\n {\n description: 'Get data from extension storage',\n inputSchema: {\n keys: z.array(z.string()).optional().describe('Specific keys to retrieve (omit for all)'),\n area: z\n .enum(availableAreas as any)\n .optional()\n .describe(\n `Storage area to use. Available: ${availableAreas.join(', ')} (default: local)`\n ),\n },\n },\n async ({ keys, area = 'local' }) => {\n try {\n const storage = chrome.storage[area as keyof typeof chrome.storage] as any;\n if (!storage || typeof storage.get !== 'function') {\n return this.formatError(new Error(`Storage area '${area}' is not available`));\n }\n\n const data = await storage.get(keys || null);\n\n // Format the response with metadata\n const response = {\n area,\n data,\n keyCount: Object.keys(data).length,\n };\n\n return this.formatJson(response);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerSetStorage(): void {\n const availableAreas = this.getAvailableAreas();\n\n this.server.registerTool(\n 'set_storage',\n {\n description: 'Set data in extension storage',\n inputSchema: {\n data: z.record(z.any()).describe('Key-value pairs to store'),\n area: z\n .enum(availableAreas as any)\n .optional()\n .describe(\n `Storage area to use. Available: ${availableAreas.join(', ')} (default: local)`\n ),\n },\n },\n async ({ data, area = 'local' }) => {\n try {\n const storage = chrome.storage[area as keyof typeof chrome.storage] as any;\n if (!storage || typeof storage.set !== 'function') {\n return this.formatError(new Error(`Storage area '${area}' is not available`));\n }\n\n await storage.set(data);\n\n return this.formatSuccess(\n `Stored ${Object.keys(data).length} key(s) in ${area} storage`,\n { keys: Object.keys(data) }\n );\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerRemoveStorage(): void {\n const availableAreas = this.getAvailableAreas();\n\n this.server.registerTool(\n 'remove_storage',\n {\n description: 'Remove specific keys from extension storage',\n inputSchema: {\n keys: z.array(z.string()).describe('Keys to remove from storage'),\n area: z\n .enum(availableAreas as any)\n .optional()\n .describe(\n `Storage area to use. Available: ${availableAreas.join(', ')} (default: local)`\n ),\n },\n },\n async ({ keys, area = 'local' }) => {\n try {\n const storage = chrome.storage[area as keyof typeof chrome.storage] as any;\n if (!storage || typeof storage.remove !== 'function') {\n return this.formatError(new Error(`Storage area '${area}' is not available`));\n }\n\n await storage.remove(keys);\n\n return this.formatSuccess(`Removed ${keys.length} key(s) from ${area} storage`, { keys });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerClearStorage(): void {\n const availableAreas = this.getAvailableAreas();\n\n this.server.registerTool(\n 'clear_storage',\n {\n description: 'Clear all data from a storage area',\n inputSchema: {\n area: z\n .enum(availableAreas as any)\n .describe(`Storage area to clear. Available: ${availableAreas.join(', ')}`),\n confirm: z.boolean().describe('Confirmation flag - must be true to clear storage'),\n },\n },\n async ({ area, confirm }) => {\n try {\n if (!confirm) {\n return this.formatError(\n new Error('Clear operation requires confirm=true to prevent accidental data loss')\n );\n }\n\n const storage = chrome.storage[area as keyof typeof chrome.storage] as any;\n if (!storage || typeof storage.clear !== 'function') {\n return this.formatError(new Error(`Storage area '${area}' is not available`));\n }\n\n await storage.clear();\n\n return this.formatSuccess(`Cleared all data from ${area} storage`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetBytesInUse(): void {\n const availableAreas = this.getAvailableAreas();\n\n this.server.registerTool(\n 'get_storage_bytes_in_use',\n {\n description: 'Get the amount of storage space used',\n inputSchema: {\n keys: z.array(z.string()).optional().describe('Specific keys to check (omit for total)'),\n area: z\n .enum(availableAreas as any)\n .optional()\n .describe(\n `Storage area to check. Available: ${availableAreas.join(', ')} (default: local)`\n ),\n },\n },\n async ({ keys, area = 'local' }) => {\n try {\n const storage = chrome.storage[area as keyof typeof chrome.storage] as any;\n if (!storage) {\n return this.formatError(new Error(`Storage area '${area}' is not available`));\n }\n\n // Not all storage areas support getBytesInUse\n if (typeof storage.getBytesInUse !== 'function') {\n return this.formatError(\n new Error(`getBytesInUse is not supported for ${area} storage area`)\n );\n }\n\n const bytesInUse = await storage.getBytesInUse(keys || null);\n\n // Get quota info if available\n let quotaInfo = null;\n if (area === 'sync' && chrome.storage.sync.QUOTA_BYTES) {\n quotaInfo = {\n quotaBytes: chrome.storage.sync.QUOTA_BYTES,\n quotaBytesPerItem: chrome.storage.sync.QUOTA_BYTES_PER_ITEM,\n maxItems: chrome.storage.sync.MAX_ITEMS,\n maxWriteOperationsPerHour: chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_HOUR,\n maxWriteOperationsPerMinute: chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_MINUTE,\n };\n } else if (area === 'local' && chrome.storage.local.QUOTA_BYTES) {\n quotaInfo = {\n quotaBytes: chrome.storage.local.QUOTA_BYTES,\n };\n }\n\n return this.formatJson({\n area,\n bytesInUse,\n humanReadable: this.formatBytes(bytesInUse),\n quota: quotaInfo,\n percentageUsed: quotaInfo?.quotaBytes\n ? ((bytesInUse / quotaInfo.quotaBytes) * 100).toFixed(2) + '%'\n : null,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private formatBytes(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class HistoryApiTools extends BaseApiTools {\n protected apiName = 'History';\n\n constructor(\n server: McpServer,\n options: {\n searchHistory?: boolean;\n addToHistory?: boolean;\n deleteFromHistory?: boolean;\n deleteHistoryRange?: boolean;\n getVisits?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Test basic history API access\n if (!chrome.history) {\n return {\n available: false,\n message: 'chrome.history API is not defined',\n details:\n 'This extension needs the \"history\" permission in its manifest.json to access browsing history',\n };\n }\n\n // Test a basic method that requires history permission\n chrome.history.search({ text: '', maxResults: 1 }, () => {\n if (chrome.runtime.lastError) {\n throw new Error(chrome.runtime.lastError.message);\n }\n });\n\n return {\n available: true,\n message: 'History API is fully available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.history API',\n details:\n error instanceof Error ? error.message : 'Missing \"history\" permission in manifest.json',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('searchHistory')) {\n this.registerSearchHistory();\n }\n\n if (this.shouldRegisterTool('addToHistory')) {\n this.registerAddToHistory();\n }\n\n if (this.shouldRegisterTool('deleteFromHistory')) {\n this.registerDeleteFromHistory();\n }\n\n if (this.shouldRegisterTool('deleteHistoryRange')) {\n this.registerDeleteHistoryRange();\n }\n\n if (this.shouldRegisterTool('getVisits')) {\n this.registerGetVisits();\n }\n }\n\n private registerSearchHistory(): void {\n this.server.registerTool(\n 'search_history',\n {\n description: 'Search browser history',\n inputSchema: {\n text: z.string().describe('Text to search for in history (empty string returns all)'),\n maxResults: z\n .number()\n .optional()\n .default(100)\n .describe('Maximum number of results (default: 100)'),\n startTime: z.number().optional().describe('Start time in milliseconds since epoch'),\n endTime: z.number().optional().describe('End time in milliseconds since epoch'),\n },\n },\n async ({ text, maxResults = 100, startTime, endTime }) => {\n try {\n const query: chrome.history.HistoryQuery = {\n text,\n maxResults,\n };\n\n if (startTime !== undefined) query.startTime = startTime;\n if (endTime !== undefined) query.endTime = endTime;\n\n const results = await chrome.history.search(query);\n\n // Format results with additional info\n const formattedResults = results.map((item) => ({\n title: item.title,\n url: item.url,\n lastVisitTime: item.lastVisitTime ? new Date(item.lastVisitTime).toISOString() : null,\n visitCount: item.visitCount,\n typedCount: item.typedCount,\n }));\n\n return this.formatJson({\n query: { text, maxResults, startTime, endTime },\n resultCount: results.length,\n results: formattedResults,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerAddToHistory(): void {\n this.server.registerTool(\n 'add_to_history',\n {\n description: 'Add a URL to browser history',\n inputSchema: {\n url: z.string().url().describe('URL to add to history'),\n },\n },\n async ({ url }) => {\n try {\n await chrome.history.addUrl({ url });\n return this.formatSuccess(`Added ${url} to browser history`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerDeleteFromHistory(): void {\n this.server.registerTool(\n 'delete_from_history',\n {\n description: 'Delete a specific URL from browser history',\n inputSchema: {\n url: z.string().url().describe('URL to delete from history'),\n },\n },\n async ({ url }) => {\n try {\n await chrome.history.deleteUrl({ url });\n return this.formatSuccess(`Deleted ${url} from browser history`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerDeleteHistoryRange(): void {\n this.server.registerTool(\n 'delete_history_range',\n {\n description: 'Delete all history within a time range',\n inputSchema: {\n startTime: z.number().describe('Start time in milliseconds since epoch'),\n endTime: z.number().describe('End time in milliseconds since epoch'),\n },\n },\n async ({ startTime, endTime }) => {\n try {\n await chrome.history.deleteRange({ startTime, endTime });\n\n const startDate = new Date(startTime).toISOString();\n const endDate = new Date(endTime).toISOString();\n\n return this.formatSuccess(`Deleted history from ${startDate} to ${endDate}`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetVisits(): void {\n this.server.registerTool(\n 'get_visits',\n {\n description: 'Get detailed visit information for a specific URL',\n inputSchema: {\n url: z.string().url().describe('URL to get visit details for'),\n },\n },\n async ({ url }) => {\n try {\n const visits = await chrome.history.getVisits({ url });\n\n // Format visit information\n const formattedVisits = visits.map((visit) => ({\n visitId: visit.visitId,\n visitTime: visit.visitTime ? new Date(visit.visitTime).toISOString() : null,\n referringVisitId: visit.referringVisitId,\n transition: visit.transition,\n }));\n\n // Get page details\n const [historyItem] = await chrome.history.search({ text: url, maxResults: 1 });\n\n return this.formatJson({\n url,\n pageInfo: historyItem\n ? {\n title: historyItem.title,\n visitCount: historyItem.visitCount,\n typedCount: historyItem.typedCount,\n }\n : null,\n visits: formattedVisits,\n visitCount: visits.length,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class NotificationsApiTools extends BaseApiTools {\n protected apiName = 'Notifications';\n\n constructor(\n server: McpServer,\n options: {\n createNotification?: boolean;\n updateNotification?: boolean;\n clearNotification?: boolean;\n getAll?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Test basic notifications API access\n if (!chrome.notifications) {\n return {\n available: false,\n message: 'chrome.notifications API is not defined',\n details: 'This extension needs the \"notifications\" permission in its manifest.json',\n };\n }\n\n // Test a basic method\n if (typeof chrome.notifications.create !== 'function') {\n return {\n available: false,\n message: 'chrome.notifications.create is not available',\n details:\n 'The notifications API appears to be partially available. Check manifest permissions.',\n };\n }\n\n // Check if we can actually use notifications\n chrome.notifications.getPermissionLevel((_level) => {\n if (chrome.runtime.lastError) {\n throw new Error(chrome.runtime.lastError.message);\n }\n });\n\n return {\n available: true,\n message: 'Notifications API is fully available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.notifications API',\n details:\n error instanceof Error\n ? error.message\n : 'Missing \"notifications\" permission in manifest.json',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('createNotification')) {\n this.registerCreateNotification();\n }\n\n if (this.shouldRegisterTool('updateNotification')) {\n this.registerUpdateNotification();\n }\n\n if (this.shouldRegisterTool('clearNotification')) {\n this.registerClearNotification();\n }\n\n if (this.shouldRegisterTool('getAll')) {\n this.registerGetAll();\n }\n }\n\n private registerCreateNotification(): void {\n this.server.registerTool(\n 'create_notification',\n {\n description: 'Create a browser notification',\n inputSchema: {\n title: z.string().describe('Notification title'),\n message: z.string().describe('Notification message'),\n type: z\n .enum(['basic', 'image', 'list', 'progress'])\n .optional()\n .default('basic')\n .describe('Notification type'),\n iconUrl: z.string().optional().describe('Icon URL (defaults to extension icon)'),\n imageUrl: z.string().optional().describe('Image URL (for image type notifications)'),\n items: z\n .array(\n z.object({\n title: z.string(),\n message: z.string(),\n })\n )\n .optional()\n .describe('List items (for list type notifications)'),\n progress: z\n .number()\n .min(0)\n .max(100)\n .optional()\n .describe('Progress percentage (for progress type notifications)'),\n buttons: z\n .array(\n z.object({\n title: z.string(),\n iconUrl: z.string().optional(),\n })\n )\n .max(2)\n .optional()\n .describe('Action buttons (max 2)'),\n priority: z.number().min(-2).max(2).optional().describe('Priority level (-2 to 2)'),\n requireInteraction: z\n .boolean()\n .optional()\n .describe('Keep notification until user interacts'),\n notificationId: z\n .string()\n .optional()\n .describe('Custom notification ID (auto-generated if not provided)'),\n },\n },\n async ({\n title,\n message,\n type = 'basic',\n iconUrl,\n imageUrl,\n items,\n progress,\n buttons,\n priority,\n requireInteraction,\n notificationId,\n }) => {\n try {\n const id = notificationId || `notification_${Date.now()}`;\n\n // Build notification options\n const options: chrome.notifications.NotificationCreateOptions = {\n type: type as any,\n title,\n message,\n iconUrl: iconUrl || chrome.runtime.getURL('icon/128.png'),\n priority,\n requireInteraction,\n };\n\n // Add type-specific options\n if (type === 'image' && imageUrl) {\n (options as any).imageUrl = imageUrl;\n }\n if (type === 'list' && items) {\n (options as any).items = items;\n }\n if (type === 'progress' && progress !== undefined) {\n (options as any).progress = progress;\n }\n if (buttons) {\n options.buttons = buttons;\n }\n\n // Create the notification\n await new Promise<void>((resolve, reject) => {\n chrome.notifications.create(id, options, (_notificationId) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve();\n }\n });\n });\n\n return this.formatSuccess(`Created notification: ${id}`, { notificationId: id, options });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerUpdateNotification(): void {\n this.server.registerTool(\n 'update_notification',\n {\n description: 'Update an existing notification',\n inputSchema: {\n notificationId: z.string().describe('ID of the notification to update'),\n title: z.string().optional().describe('New title'),\n message: z.string().optional().describe('New message'),\n progress: z\n .number()\n .min(0)\n .max(100)\n .optional()\n .describe('New progress (for progress type notifications)'),\n buttons: z\n .array(\n z.object({\n title: z.string(),\n iconUrl: z.string().optional(),\n })\n )\n .max(2)\n .optional()\n .describe('New buttons'),\n },\n },\n async ({ notificationId, title, message, progress, buttons }) => {\n try {\n const options: Partial<chrome.notifications.NotificationOptions> = {};\n\n if (title !== undefined) options.title = title;\n if (message !== undefined) options.message = message;\n if (progress !== undefined) (options as any).progress = progress;\n if (buttons !== undefined) options.buttons = buttons;\n\n const wasUpdated = await chrome.notifications.update(notificationId, options);\n\n if (!wasUpdated) {\n return this.formatError(\n new Error(`Notification ${notificationId} not found or could not be updated`)\n );\n }\n\n return this.formatSuccess(`Updated notification: ${notificationId}`, { options });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerClearNotification(): void {\n this.server.registerTool(\n 'clear_notification',\n {\n description: 'Clear a specific notification',\n inputSchema: {\n notificationId: z.string().describe('ID of the notification to clear'),\n },\n },\n async ({ notificationId }) => {\n try {\n const wasCleared = await chrome.notifications.clear(notificationId);\n\n if (!wasCleared) {\n return this.formatError(\n new Error(`Notification ${notificationId} not found or already cleared`)\n );\n }\n\n return this.formatSuccess(`Cleared notification: ${notificationId}`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetAll(): void {\n this.server.registerTool(\n 'get_all_notifications',\n {\n description: 'Get all active notifications',\n inputSchema: {},\n },\n async () => {\n try {\n const notifications = await chrome.notifications.getAll();\n\n const notificationList = Object.entries(notifications).map(([id, notification]) => ({\n id,\n ...(notification as any),\n }));\n\n return this.formatJson({\n count: notificationList.length,\n notifications: notificationList,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class ScriptingApiTools extends BaseApiTools {\n protected apiName = 'Scripting';\n\n constructor(\n server: McpServer,\n options: {\n executeScript?: boolean;\n executeUserScript?: boolean;\n insertCSS?: boolean;\n removeCSS?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n // Check chrome.scripting availability\n try {\n if (!chrome.scripting) {\n return {\n available: false,\n message: 'chrome.scripting API is not defined',\n details:\n 'This extension needs the \"scripting\" permission in its manifest.json. This API is available in Chrome 88+.',\n };\n }\n\n if (typeof chrome.scripting.executeScript !== 'function') {\n return {\n available: false,\n message: 'chrome.scripting.executeScript is not available',\n details:\n 'The scripting API appears to be partially available. Ensure you have Chrome 88+ and the \"scripting\" permission.',\n };\n }\n\n return {\n available: true,\n message: 'Scripting API is available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.scripting API',\n details: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n registerTools(): void {\n // Always register the standard scripting tool\n if (this.shouldRegisterTool('executeScript')) {\n this.registerExecuteScript();\n }\n\n // Check and register UserScripts API if available\n if (this.shouldRegisterTool('executeUserScript')) {\n this.checkAndRegisterUserScripts();\n }\n\n // CSS tools\n if (this.shouldRegisterTool('insertCSS')) {\n this.registerInsertCSS();\n }\n\n if (this.shouldRegisterTool('removeCSS')) {\n this.registerRemoveCSS();\n }\n }\n\n private checkAndRegisterUserScripts(): void {\n // Check if userScripts API is available\n if (!chrome.userScripts) {\n console.warn(' ✗ UserScripts API not available - Chrome 120+ required');\n return;\n }\n\n try {\n // Method call which throws if API permission or toggle is not enabled\n chrome.userScripts.getScripts();\n\n // Check Chrome version for execute method support\n const chromeVersion = this.getChromeVersion();\n if (chromeVersion >= 135) {\n console.log(' ✓ UserScripts execute() method available (Chrome 135+)');\n this.registerUserScriptExecute();\n } else {\n console.log(' ✓ UserScripts API available (legacy mode)');\n this.registerUserScriptLegacy();\n }\n } catch (error) {\n console.warn(\n ' ✗ UserScripts API not enabled. Users need to enable developer mode and \"User Scripts\" toggle in chrome://extensions'\n );\n }\n }\n\n private getChromeVersion(): number {\n const match = navigator.userAgent.match(/(Chrome|Chromium)\\/([0-9]+)/);\n return match ? Number(match[2]) : 0;\n }\n\n private registerExecuteScript(): void {\n this.server.registerTool(\n 'execute_script',\n {\n description:\n 'Execute JavaScript code in a specific tab using chrome.scripting API. Limited by CSP restrictions. If no tabId is specified, operates on the currently active tab',\n inputSchema: {\n tabId: z\n .number()\n .optional()\n .describe('Tab ID to execute script in (defaults to active tab)'),\n code: z.string().describe('JavaScript code to execute'),\n allFrames: z.boolean().optional().describe('Execute in all frames (default: false)'),\n world: z\n .enum(['MAIN', 'ISOLATED'])\n .optional()\n .default('MAIN')\n .describe(\n 'Execution world - MAIN runs in page context, ISOLATED runs in extension context'\n ),\n },\n },\n async ({ tabId, code, allFrames = false, world = 'MAIN' }) => {\n try {\n if (tabId === undefined) {\n const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });\n if (!activeTab || !activeTab.id) {\n return this.formatError(new Error('No active tab found'));\n }\n tabId = activeTab.id;\n }\n\n const injectionFunction = (codeToExecute: string) => {\n try {\n // For MAIN world, we need to inject via script tag to bypass some CSP restrictions\n const script = document.createElement('script');\n script.textContent = `\n (function() {\n try {\n const __result = (function() { ${codeToExecute} })();\n window.__extensionScriptResult = { success: true, result: __result };\n } catch (error) {\n window.__extensionScriptResult = { \n success: false, \n error: error.message || String(error) \n };\n }\n })();\n `;\n document.documentElement.appendChild(script);\n script.remove();\n\n const result = (window as any).__extensionScriptResult;\n delete (window as any).__extensionScriptResult;\n return result || { success: false, error: 'No result returned' };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n };\n\n const results = await chrome.scripting.executeScript({\n target: { tabId, allFrames },\n func: injectionFunction,\n args: [code],\n world: world as chrome.scripting.ExecutionWorld,\n });\n\n return this.formatJson(results);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerUserScriptExecute(): void {\n this.server.registerTool(\n 'execute_user_script',\n {\n description:\n 'Execute JavaScript using User Scripts API with no CSP restrictions (Chrome 135+). Requires user to enable developer mode. If no tabId is specified, operates on the currently active tab',\n inputSchema: {\n tabId: z\n .number()\n .optional()\n .describe('Tab ID to execute script in (defaults to active tab)'),\n code: z.string().describe('JavaScript code to execute'),\n allFrames: z.boolean().optional().describe('Execute in all frames (default: false)'),\n world: z\n .enum(['USER_SCRIPT', 'MAIN'])\n .optional()\n .default('USER_SCRIPT')\n .describe('Execution world (default: USER_SCRIPT for no CSP restrictions)'),\n },\n },\n async ({ tabId, code, allFrames = false, world = 'USER_SCRIPT' }) => {\n try {\n if (tabId === undefined) {\n const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });\n if (!activeTab || !activeTab.id) {\n return this.formatError(new Error('No active tab found'));\n }\n tabId = activeTab.id;\n }\n\n // Configure world for messaging if needed\n chrome.userScripts.configureWorld({\n messaging: true,\n csp: \"script-src 'self' 'unsafe-eval'; object-src 'self';\",\n });\n\n const results = await chrome.userScripts.execute({\n target: { tabId, allFrames },\n world: world as chrome.userScripts.ExecutionWorld,\n js: [{ code }],\n injectImmediately: true,\n });\n\n return this.formatJson(results);\n } catch (error) {\n if (error instanceof Error && error.message.includes('User Scripts')) {\n return this.formatError(\n new Error(\n 'User Scripts API is not enabled. Enable developer mode and the \"User Scripts\" toggle in chrome://extensions/?id=' +\n chrome.runtime.id\n )\n );\n }\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerUserScriptLegacy(): void {\n this.server.registerTool(\n 'execute_user_script_legacy',\n {\n description:\n 'Execute JavaScript using User Scripts API (legacy method for Chrome < 135). No CSP restrictions. If no tabId is specified, operates on the currently active tab',\n inputSchema: {\n tabId: z\n .number()\n .optional()\n .describe('Tab ID to execute script in (defaults to active tab)'),\n code: z.string().describe('JavaScript code to execute'),\n allFrames: z.boolean().optional().describe('Execute in all frames (default: false)'),\n },\n },\n async ({ tabId, code, allFrames = false }) => {\n try {\n if (tabId === undefined) {\n const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });\n if (!activeTab || !activeTab.id) {\n return this.formatError(new Error('No active tab found'));\n }\n tabId = activeTab.id;\n }\n\n const tab = await chrome.tabs.get(tabId);\n if (!tab.url) {\n return this.formatError(new Error('Tab URL not available'));\n }\n\n const scriptId = `temp_${Date.now()}`;\n\n // Configure messaging\n await chrome.userScripts.configureWorld({ messaging: true });\n\n // Set up result listener\n const resultPromise = new Promise((resolve) => {\n const listener = (message: any, _sender: any) => {\n if (message.type === 'SCRIPT_RESULT' && message.scriptId === scriptId) {\n chrome.runtime.onUserScriptMessage.removeListener(listener);\n resolve(message);\n }\n };\n chrome.runtime.onUserScriptMessage.addListener(listener);\n });\n\n // Register script\n await chrome.userScripts.register([\n {\n id: scriptId,\n matches: [new URL(tab.url).origin + '/*'],\n js: [\n {\n code: `\n (async () => {\n try {\n const result = await (async () => { ${code} })();\n chrome.runtime.sendMessage({\n type: 'SCRIPT_RESULT',\n scriptId: '${scriptId}',\n success: true,\n result\n });\n } catch (error) {\n chrome.runtime.sendMessage({\n type: 'SCRIPT_RESULT',\n scriptId: '${scriptId}',\n success: false,\n error: error.message\n });\n }\n })();\n `,\n },\n ],\n runAt: 'document_idle',\n world: 'USER_SCRIPT',\n allFrames,\n },\n ]);\n\n // Reload tab to trigger script\n await chrome.tabs.reload(tabId);\n\n // Wait for result\n const result = await Promise.race([\n resultPromise,\n new Promise((r) => setTimeout(() => r({ timeout: true }), 5000)),\n ]);\n\n // Cleanup\n await chrome.userScripts.unregister({ ids: [scriptId] });\n\n if ((result as any).timeout) {\n return this.formatError(new Error('Script execution timed out'));\n }\n\n return this.formatJson(result);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerInsertCSS(): void {\n this.server.registerTool(\n 'insert_css',\n {\n description:\n 'Insert CSS into a tab. If no tabId is specified, operates on the currently active tab',\n inputSchema: {\n tabId: z\n .number()\n .optional()\n .describe('Tab ID to insert CSS into (defaults to active tab)'),\n css: z.string().describe('CSS code to inject'),\n allFrames: z.boolean().optional().describe('Inject in all frames (default: false)'),\n },\n },\n async ({ tabId, css, allFrames = false }) => {\n try {\n if (tabId === undefined) {\n const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });\n if (!activeTab || !activeTab.id) {\n return this.formatError(new Error('No active tab found'));\n }\n tabId = activeTab.id;\n }\n\n await chrome.scripting.insertCSS({\n target: { tabId, allFrames },\n css,\n });\n\n return this.formatSuccess(`CSS injected into tab ${tabId}`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerRemoveCSS(): void {\n if (typeof chrome.scripting.removeCSS !== 'function') {\n console.warn(' ✗ removeCSS not available - Chrome 90+ required');\n return;\n }\n\n this.server.registerTool(\n 'remove_css',\n {\n description:\n 'Remove previously injected CSS from a tab. If no tabId is specified, operates on the currently active tab',\n inputSchema: {\n tabId: z\n .number()\n .optional()\n .describe('Tab ID to remove CSS from (defaults to active tab)'),\n css: z.string().describe('CSS code to remove (must match exactly)'),\n allFrames: z.boolean().optional().describe('Remove from all frames (default: false)'),\n },\n },\n async ({ tabId, css, allFrames = false }) => {\n try {\n if (tabId === undefined) {\n const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });\n if (!activeTab || !activeTab.id) {\n return this.formatError(new Error('No active tab found'));\n }\n tabId = activeTab.id;\n }\n\n await chrome.scripting.removeCSS({\n target: { tabId, allFrames },\n css,\n });\n\n return this.formatSuccess(`CSS removed from tab ${tabId}`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class CookiesApiTools extends BaseApiTools {\n protected apiName = 'Cookies';\n\n constructor(\n server: McpServer,\n options: {\n getCookies?: boolean;\n setCookie?: boolean;\n removeCookie?: boolean;\n getAllCookieStores?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Test basic cookies API access\n if (!chrome.cookies) {\n return {\n available: false,\n message: 'chrome.cookies API is not defined',\n details:\n 'This extension needs the \"cookies\" permission in its manifest.json. Also requires host permissions for the domains you want to access.',\n };\n }\n\n // Test a basic method\n if (typeof chrome.cookies.getAll !== 'function') {\n return {\n available: false,\n message: 'chrome.cookies.getAll is not available',\n details: 'The cookies API appears to be partially available. Check manifest permissions.',\n };\n }\n\n // Try to actually use the API\n chrome.cookies.getAll({}, () => {\n if (chrome.runtime.lastError) {\n throw new Error(chrome.runtime.lastError.message);\n }\n });\n\n return {\n available: true,\n message: 'Cookies API is fully available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.cookies API',\n details:\n error instanceof Error\n ? error.message\n : 'Missing \"cookies\" permission or host permissions in manifest.json',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('getCookies')) {\n this.registerGetCookies();\n }\n\n if (this.shouldRegisterTool('setCookie')) {\n this.registerSetCookie();\n }\n\n if (this.shouldRegisterTool('removeCookie')) {\n this.registerRemoveCookie();\n }\n\n if (this.shouldRegisterTool('getAllCookieStores')) {\n this.registerGetAllCookieStores();\n }\n }\n\n private registerGetCookies(): void {\n this.server.registerTool(\n 'get_cookies',\n {\n description: 'Get cookies for a specific URL or domain',\n inputSchema: {\n url: z.string().optional().describe('URL to get cookies for'),\n domain: z.string().optional().describe('Domain to get cookies for'),\n name: z.string().optional().describe('Specific cookie name'),\n storeId: z\n .string()\n .optional()\n .describe('Cookie store ID (for different profiles/containers)'),\n session: z.boolean().optional().describe('Filter by session cookies'),\n secure: z.boolean().optional().describe('Filter by secure cookies'),\n httpOnly: z.boolean().optional().describe('Filter by httpOnly cookies'),\n },\n },\n async ({ url, domain, name, storeId, session, secure, httpOnly }) => {\n try {\n const details: chrome.cookies.GetAllDetails = {};\n if (url) details.url = url;\n if (domain) details.domain = domain;\n if (name) details.name = name;\n if (storeId) details.storeId = storeId;\n if (session !== undefined) details.session = session;\n if (secure !== undefined) details.secure = secure;\n if (httpOnly !== undefined) (details as any).httpOnly = httpOnly;\n\n const cookies = await chrome.cookies.getAll(details);\n\n // Format cookies with additional metadata\n const formattedCookies = cookies.map((cookie) => ({\n name: cookie.name,\n value: cookie.value,\n domain: cookie.domain,\n path: cookie.path,\n secure: cookie.secure,\n httpOnly: cookie.httpOnly,\n sameSite: cookie.sameSite,\n session: cookie.session,\n expirationDate: cookie.expirationDate\n ? new Date(cookie.expirationDate * 1000).toISOString()\n : null,\n storeId: cookie.storeId,\n }));\n\n return this.formatJson({\n count: cookies.length,\n filters: details,\n cookies: formattedCookies,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerSetCookie(): void {\n this.server.registerTool(\n 'set_cookie',\n {\n description: 'Set a cookie',\n inputSchema: {\n url: z.string().describe('URL for the cookie (required to determine domain)'),\n name: z.string().describe('Cookie name'),\n value: z.string().describe('Cookie value'),\n domain: z.string().optional().describe('Cookie domain (defaults from URL)'),\n path: z.string().optional().default('/').describe('Cookie path'),\n secure: z.boolean().optional().describe('Secure cookie (HTTPS only)'),\n httpOnly: z\n .boolean()\n .optional()\n .describe('HTTP only cookie (not accessible to JavaScript)'),\n sameSite: z\n .enum(['no_restriction', 'lax', 'strict'])\n .optional()\n .describe('SameSite attribute'),\n expirationDate: z.number().optional().describe('Expiration date in seconds since epoch'),\n storeId: z.string().optional().describe('Cookie store ID'),\n },\n },\n async ({\n url,\n name,\n value,\n domain,\n path = '/',\n secure,\n httpOnly,\n sameSite,\n expirationDate,\n storeId,\n }) => {\n try {\n const details: chrome.cookies.SetDetails = {\n url,\n name,\n value,\n };\n\n if (domain !== undefined) details.domain = domain;\n if (path !== undefined) details.path = path;\n if (secure !== undefined) details.secure = secure;\n if (httpOnly !== undefined) details.httpOnly = httpOnly;\n if (sameSite !== undefined) details.sameSite = sameSite as chrome.cookies.SameSiteStatus;\n if (expirationDate !== undefined) details.expirationDate = expirationDate;\n if (storeId !== undefined) details.storeId = storeId;\n\n const cookie = await chrome.cookies.set(details);\n\n if (!cookie) {\n return this.formatError(\n new Error('Failed to set cookie. Check permissions and cookie attributes.')\n );\n }\n\n return this.formatSuccess(`Set cookie: ${cookie.name} for domain ${cookie.domain}`, {\n cookie: {\n name: cookie.name,\n value: cookie.value,\n domain: cookie.domain,\n path: cookie.path,\n secure: cookie.secure,\n httpOnly: cookie.httpOnly,\n sameSite: cookie.sameSite,\n session: cookie.session,\n expirationDate: cookie.expirationDate\n ? new Date(cookie.expirationDate * 1000).toISOString()\n : null,\n },\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerRemoveCookie(): void {\n this.server.registerTool(\n 'remove_cookie',\n {\n description: 'Remove a specific cookie',\n inputSchema: {\n url: z.string().describe('URL of the cookie'),\n name: z.string().describe('Name of the cookie to remove'),\n storeId: z.string().optional().describe('Cookie store ID'),\n },\n },\n async ({ url, name, storeId }) => {\n try {\n const details: chrome.cookies.CookieDetails = { url, name };\n if (storeId) details.storeId = storeId;\n\n const result = await chrome.cookies.remove(details);\n\n if (!result) {\n return this.formatError(new Error(`Cookie \"${name}\" not found for URL: ${url}`));\n }\n\n return this.formatSuccess(`Removed cookie: ${name} from ${result.url}`, result);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetAllCookieStores(): void {\n this.server.registerTool(\n 'get_all_cookie_stores',\n {\n description: 'Get all cookie stores (profiles/containers)',\n inputSchema: {},\n },\n async () => {\n try {\n const stores = await chrome.cookies.getAllCookieStores();\n\n const formattedStores = stores.map((store) => ({\n id: store.id,\n tabIds: store.tabIds,\n incognito: (store as any).incognito,\n }));\n\n return this.formatJson({\n count: stores.length,\n stores: formattedStores,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class AlarmsApiTools extends BaseApiTools {\n protected apiName = 'Alarms';\n\n constructor(\n server: McpServer,\n options: {\n createAlarm?: boolean;\n getAlarm?: boolean;\n getAllAlarms?: boolean;\n clearAlarm?: boolean;\n clearAllAlarms?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Check if API exists\n if (!chrome.alarms) {\n return {\n available: false,\n message: 'chrome.alarms API is not defined',\n details: 'This extension needs the \"alarms\" permission in its manifest.json',\n };\n }\n\n // Test a basic method\n if (typeof chrome.alarms.getAll !== 'function') {\n return {\n available: false,\n message: 'chrome.alarms.getAll is not available',\n details: 'The alarms API appears to be partially available. Check manifest permissions.',\n };\n }\n\n // Try to actually use the API\n chrome.alarms.getAll((_alarms) => {\n if (chrome.runtime.lastError) {\n throw new Error(chrome.runtime.lastError.message);\n }\n });\n\n return {\n available: true,\n message: 'Alarms API is fully available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.alarms API',\n details: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('createAlarm')) {\n this.registerCreateAlarm();\n }\n\n if (this.shouldRegisterTool('getAlarm')) {\n this.registerGetAlarm();\n }\n\n if (this.shouldRegisterTool('getAllAlarms')) {\n this.registerGetAllAlarms();\n }\n\n if (this.shouldRegisterTool('clearAlarm')) {\n this.registerClearAlarm();\n }\n\n if (this.shouldRegisterTool('clearAllAlarms')) {\n this.registerClearAllAlarms();\n }\n }\n\n private registerCreateAlarm(): void {\n this.server.registerTool(\n 'create_alarm',\n {\n description: 'Create an alarm that fires at a specific time or periodically',\n inputSchema: {\n name: z.string().optional().describe('Optional name to identify this alarm'),\n delayInMinutes: z\n .number()\n .min(0.5)\n .optional()\n .describe(\n 'Time in minutes from now when the alarm should first fire. Minimum is 0.5 minutes (30 seconds)'\n ),\n periodInMinutes: z\n .number()\n .min(0.5)\n .optional()\n .describe(\n 'If set, the alarm will repeat every periodInMinutes minutes after the initial event. Minimum is 0.5 minutes (30 seconds)'\n ),\n when: z\n .number()\n .optional()\n .describe(\n 'Time at which the alarm should fire, in milliseconds past the epoch (e.g. Date.now() + n)'\n ),\n },\n },\n async ({ name, delayInMinutes, periodInMinutes, when }) => {\n try {\n // Validate that at least one timing option is provided\n if (delayInMinutes === undefined && when === undefined) {\n return this.formatError(\n 'Either delayInMinutes or when must be specified to create an alarm'\n );\n }\n\n // Build alarm info\n const alarmInfo: chrome.alarms.AlarmCreateInfo = {};\n\n if (delayInMinutes !== undefined) {\n alarmInfo.delayInMinutes = delayInMinutes;\n }\n\n if (periodInMinutes !== undefined) {\n alarmInfo.periodInMinutes = periodInMinutes;\n }\n\n if (when !== undefined) {\n alarmInfo.when = when;\n }\n\n // Create the alarm\n await new Promise<void>((resolve, reject) => {\n if (name) {\n chrome.alarms.create(name, alarmInfo, () => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve();\n }\n });\n } else {\n chrome.alarms.create(alarmInfo, () => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve();\n }\n });\n }\n });\n\n // Get the created alarm to return its details\n const createdAlarm = await new Promise<chrome.alarms.Alarm | undefined>(\n (resolve, reject) => {\n chrome.alarms.get(name || '', (alarm) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(alarm);\n }\n });\n }\n );\n\n return this.formatSuccess('Alarm created successfully', {\n name: createdAlarm?.name || name || 'unnamed',\n scheduledTime: createdAlarm?.scheduledTime,\n periodInMinutes: createdAlarm?.periodInMinutes,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetAlarm(): void {\n this.server.registerTool(\n 'get_alarm',\n {\n description: 'Get details about a specific alarm',\n inputSchema: {\n name: z\n .string()\n .optional()\n .describe(\n 'Name of the alarm to retrieve. If not specified, gets the default unnamed alarm'\n ),\n },\n },\n async ({ name }) => {\n try {\n const alarm = await new Promise<chrome.alarms.Alarm | undefined>((resolve, reject) => {\n if (name) {\n chrome.alarms.get(name, (alarm) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(alarm);\n }\n });\n } else {\n chrome.alarms.get((alarm) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(alarm);\n }\n });\n }\n });\n\n if (!alarm) {\n return this.formatSuccess('No alarm found', { name: name || 'unnamed' });\n }\n\n return this.formatJson({\n name: alarm.name,\n scheduledTime: alarm.scheduledTime,\n scheduledTimeFormatted: new Date(alarm.scheduledTime).toISOString(),\n periodInMinutes: alarm.periodInMinutes,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetAllAlarms(): void {\n this.server.registerTool(\n 'get_all_alarms',\n {\n description: 'Get all active alarms',\n inputSchema: {},\n },\n async () => {\n try {\n const alarms = await new Promise<chrome.alarms.Alarm[]>((resolve, reject) => {\n chrome.alarms.getAll((alarms) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(alarms);\n }\n });\n });\n\n return this.formatJson({\n count: alarms.length,\n alarms: alarms.map((alarm) => ({\n name: alarm.name,\n scheduledTime: alarm.scheduledTime,\n scheduledTimeFormatted: new Date(alarm.scheduledTime).toISOString(),\n periodInMinutes: alarm.periodInMinutes,\n })),\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerClearAlarm(): void {\n this.server.registerTool(\n 'clear_alarm',\n {\n description: 'Clear a specific alarm',\n inputSchema: {\n name: z\n .string()\n .optional()\n .describe(\n 'Name of the alarm to clear. If not specified, clears the default unnamed alarm'\n ),\n },\n },\n async ({ name }) => {\n try {\n const wasCleared = await new Promise<boolean>((resolve, reject) => {\n if (name) {\n chrome.alarms.clear(name, (wasCleared) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(wasCleared);\n }\n });\n } else {\n chrome.alarms.clear((wasCleared) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(wasCleared);\n }\n });\n }\n });\n\n if (wasCleared) {\n return this.formatSuccess('Alarm cleared successfully', { name: name || 'unnamed' });\n } else {\n return this.formatSuccess('No alarm found to clear', { name: name || 'unnamed' });\n }\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerClearAllAlarms(): void {\n this.server.registerTool(\n 'clear_all_alarms',\n {\n description: 'Clear all alarms',\n inputSchema: {},\n },\n async () => {\n try {\n // Get all alarms first to know what we're clearing\n const alarmsBefore = await new Promise<chrome.alarms.Alarm[]>((resolve, reject) => {\n chrome.alarms.getAll((alarms) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(alarms);\n }\n });\n });\n\n const wasCleared = await new Promise<boolean>((resolve, reject) => {\n chrome.alarms.clearAll((wasCleared) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(wasCleared);\n }\n });\n });\n\n if (wasCleared) {\n return this.formatSuccess('All alarms cleared successfully', {\n clearedCount: alarmsBefore.length,\n clearedAlarms: alarmsBefore.map((alarm) => alarm.name),\n });\n } else {\n return this.formatSuccess('No alarms to clear');\n }\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\n// Download state enum\nconst DownloadStateSchema = z.enum(['in_progress', 'interrupted', 'complete']);\n\n// Download danger type enum for MV3\nconst DangerTypeSchema = z.enum([\n 'file',\n 'url',\n 'content',\n 'uncommon',\n 'host',\n 'unwanted',\n 'safe',\n 'accepted',\n]);\n\n// Download interrupt reason schema\n//@ts-expect-error - not used for now, might use it later 🤷‍♂️\nconst _InterruptReasonSchema = z.enum([\n 'FILE_FAILED',\n 'FILE_ACCESS_DENIED',\n 'FILE_NO_SPACE',\n 'FILE_NAME_TOO_LONG',\n 'FILE_TOO_LARGE',\n 'FILE_VIRUS_INFECTED',\n 'FILE_TRANSIENT_ERROR',\n 'FILE_BLOCKED',\n 'FILE_SECURITY_CHECK_FAILED',\n 'FILE_TOO_SHORT',\n 'FILE_HASH_MISMATCH',\n 'FILE_SAME_AS_SOURCE',\n 'NETWORK_FAILED',\n 'NETWORK_TIMEOUT',\n 'NETWORK_DISCONNECTED',\n 'NETWORK_SERVER_DOWN',\n 'NETWORK_INVALID_REQUEST',\n 'SERVER_FAILED',\n 'SERVER_NO_RANGE',\n 'SERVER_BAD_CONTENT',\n 'SERVER_UNAUTHORIZED',\n 'SERVER_CERT_PROBLEM',\n 'SERVER_FORBIDDEN',\n 'SERVER_UNREACHABLE',\n 'SERVER_CONTENT_LENGTH_MISMATCH',\n 'SERVER_CROSS_ORIGIN_REDIRECT',\n 'USER_CANCELED',\n 'USER_SHUTDOWN',\n 'CRASH',\n]);\n\nexport class DownloadsApiTools extends BaseApiTools {\n protected apiName = 'Downloads';\n\n constructor(\n server: McpServer,\n options: {\n download?: boolean;\n search?: boolean;\n pause?: boolean;\n resume?: boolean;\n cancel?: boolean;\n getFileIcon?: boolean;\n open?: boolean;\n show?: boolean;\n erase?: boolean;\n removeFile?: boolean;\n acceptDanger?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Check if API exists\n if (!chrome.downloads) {\n return {\n available: false,\n message: 'chrome.downloads API is not defined',\n details: 'This extension needs the \"downloads\" permission in its manifest.json',\n };\n }\n\n // Test a basic method that should always be available with downloads permission\n if (typeof chrome.downloads.search !== 'function') {\n return {\n available: false,\n message: 'chrome.downloads.search is not available',\n details:\n 'The downloads API appears to be partially available. Check manifest permissions.',\n };\n }\n\n // Try to actually use the API\n chrome.downloads.search({}, () => {\n if (chrome.runtime.lastError) {\n throw new Error(chrome.runtime.lastError.message);\n }\n });\n\n return {\n available: true,\n message: 'Downloads API is fully available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.downloads API',\n details: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('download')) {\n this.registerDownload();\n }\n\n if (this.shouldRegisterTool('search')) {\n this.registerSearch();\n }\n\n if (this.shouldRegisterTool('pause')) {\n this.registerPause();\n }\n\n if (this.shouldRegisterTool('resume')) {\n this.registerResume();\n }\n\n if (this.shouldRegisterTool('cancel')) {\n this.registerCancel();\n }\n\n if (this.shouldRegisterTool('getFileIcon')) {\n this.registerGetFileIcon();\n }\n\n if (this.shouldRegisterTool('open')) {\n this.checkAndRegisterOpen();\n }\n\n if (this.shouldRegisterTool('show')) {\n this.registerShow();\n }\n\n if (this.shouldRegisterTool('erase')) {\n this.registerErase();\n }\n\n if (this.shouldRegisterTool('removeFile')) {\n this.registerRemoveFile();\n }\n\n if (this.shouldRegisterTool('acceptDanger')) {\n this.registerAcceptDanger();\n }\n }\n\n private checkAndRegisterOpen(): void {\n try {\n if (typeof chrome.downloads.open === 'function') {\n this.registerOpen();\n console.log(' ✓ Open download method available');\n } else {\n console.warn(\n ' ✗ Open download method not available - requires \"downloads.open\" permission'\n );\n }\n } catch {\n console.warn(' ✗ Failed to check open download availability');\n }\n }\n\n private registerDownload(): void {\n this.server.registerTool(\n 'download_file',\n {\n description: 'Initiate a file download from a specified URL',\n inputSchema: {\n url: z.string().url().describe('The URL to download from'),\n filename: z\n .string()\n .optional()\n .describe(\n 'A file path relative to the Downloads directory. If specified, the file will be saved at this path'\n ),\n conflictAction: z\n .enum(['uniquify', 'overwrite', 'prompt'])\n .optional()\n .describe(\n 'Action to take if filename already exists. uniquify: append number to make unique, overwrite: replace existing file, prompt: ask user'\n ),\n saveAs: z\n .boolean()\n .optional()\n .describe('Use a file chooser dialog to allow the user to select a filename'),\n headers: z\n .array(\n z.object({\n name: z.string().describe('HTTP header name'),\n value: z.string().describe('HTTP header value'),\n })\n )\n .optional()\n .describe('Extra HTTP headers to send with the request'),\n method: z.enum(['GET', 'POST']).optional().describe('HTTP method (defaults to GET)'),\n body: z.string().optional().describe('Request body (for POST requests)'),\n },\n },\n async ({ url, filename, conflictAction, saveAs, headers, method, body }) => {\n try {\n const options: chrome.downloads.DownloadOptions = { url };\n\n if (filename !== undefined) options.filename = filename;\n if (conflictAction !== undefined) options.conflictAction = conflictAction;\n if (saveAs !== undefined) options.saveAs = saveAs;\n if (headers !== undefined) options.headers = headers;\n if (method !== undefined) options.method = method;\n if (body !== undefined) options.body = body;\n\n const downloadId = await chrome.downloads.download(options);\n\n return this.formatSuccess(`Download initiated with ID: ${downloadId}`, {\n downloadId,\n url,\n filename: filename || 'auto-generated',\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerSearch(): void {\n this.server.registerTool(\n 'search_downloads',\n {\n description: 'Search for downloaded files with various filters',\n inputSchema: {\n query: z\n .array(z.string())\n .optional()\n .describe('Array of search terms. Downloads must contain all terms to match'),\n startedBefore: z\n .string()\n .optional()\n .describe('Limit results to downloads started before this date (ISO string)'),\n startedAfter: z\n .string()\n .optional()\n .describe('Limit results to downloads started after this date (ISO string)'),\n endedBefore: z\n .string()\n .optional()\n .describe('Limit results to downloads ended before this date (ISO string)'),\n endedAfter: z\n .string()\n .optional()\n .describe('Limit results to downloads ended after this date (ISO string)'),\n totalBytesGreater: z\n .number()\n .optional()\n .describe('Limit results to downloads larger than this many bytes'),\n totalBytesLess: z\n .number()\n .optional()\n .describe('Limit results to downloads smaller than this many bytes'),\n filenameRegex: z\n .string()\n .optional()\n .describe('Regular expression to match against download filenames'),\n urlRegex: z\n .string()\n .optional()\n .describe('Regular expression to match against download URLs'),\n limit: z.number().optional().describe('Maximum number of results to return'),\n orderBy: z\n .array(z.string())\n .optional()\n .describe(\n 'Order results by these fields. Prefix with \"-\" for descending order. Fields: startTime, endTime, totalBytes, filename, url, state'\n ),\n id: z.number().optional().describe('Specific download ID to search for'),\n state: DownloadStateSchema.optional().describe('Download state to filter by'),\n paused: z.boolean().optional().describe('Filter by paused state'),\n danger: DangerTypeSchema.optional().describe('Filter by danger type'),\n mime: z.string().optional().describe('MIME type to filter by'),\n exists: z\n .boolean()\n .optional()\n .describe('Filter by whether the downloaded file still exists'),\n },\n },\n async (params) => {\n try {\n const query: chrome.downloads.DownloadQuery = {};\n\n // Map parameters to Chrome API format\n if (params.query !== undefined) query.query = params.query;\n if (params.startedBefore !== undefined) query.startedBefore = params.startedBefore;\n if (params.startedAfter !== undefined) query.startedAfter = params.startedAfter;\n if (params.endedBefore !== undefined) query.endedBefore = params.endedBefore;\n if (params.endedAfter !== undefined) query.endedAfter = params.endedAfter;\n if (params.totalBytesGreater !== undefined)\n query.totalBytesGreater = params.totalBytesGreater;\n if (params.totalBytesLess !== undefined) query.totalBytesLess = params.totalBytesLess;\n if (params.filenameRegex !== undefined) query.filenameRegex = params.filenameRegex;\n if (params.urlRegex !== undefined) query.urlRegex = params.urlRegex;\n if (params.limit !== undefined) query.limit = params.limit;\n if (params.orderBy !== undefined) query.orderBy = params.orderBy;\n if (params.id !== undefined) query.id = params.id;\n if (params.state !== undefined) query.state = params.state;\n if (params.paused !== undefined) query.paused = params.paused;\n if (params.danger !== undefined) query.danger = params.danger;\n if (params.mime !== undefined) query.mime = params.mime;\n if (params.exists !== undefined) query.exists = params.exists;\n\n const results = await chrome.downloads.search(query);\n\n const formattedResults = results.map((item) => ({\n id: item.id,\n url: item.url,\n finalUrl: item.finalUrl,\n filename: item.filename,\n state: item.state,\n paused: item.paused,\n danger: item.danger,\n mime: item.mime,\n startTime: item.startTime,\n endTime: item.endTime,\n bytesReceived: item.bytesReceived,\n totalBytes: item.totalBytes,\n fileSize: item.fileSize,\n exists: item.exists,\n error: item.error,\n canResume: item.canResume,\n }));\n\n return this.formatJson({\n count: results.length,\n downloads: formattedResults,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerPause(): void {\n this.server.registerTool(\n 'pause_download',\n {\n description: 'Pause an active download',\n inputSchema: {\n downloadId: z.number().describe('The ID of the download to pause'),\n },\n },\n async ({ downloadId }) => {\n try {\n await chrome.downloads.pause(downloadId);\n return this.formatSuccess(`Download ${downloadId} paused successfully`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerResume(): void {\n this.server.registerTool(\n 'resume_download',\n {\n description: 'Resume a paused download',\n inputSchema: {\n downloadId: z.number().describe('The ID of the download to resume'),\n },\n },\n async ({ downloadId }) => {\n try {\n await chrome.downloads.resume(downloadId);\n return this.formatSuccess(`Download ${downloadId} resumed successfully`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerCancel(): void {\n this.server.registerTool(\n 'cancel_download',\n {\n description: 'Cancel an ongoing download',\n inputSchema: {\n downloadId: z.number().describe('The ID of the download to cancel'),\n },\n },\n async ({ downloadId }) => {\n try {\n await chrome.downloads.cancel(downloadId);\n return this.formatSuccess(`Download ${downloadId} cancelled successfully`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetFileIcon(): void {\n this.server.registerTool(\n 'get_download_file_icon',\n {\n description: 'Get the icon for a downloaded file',\n inputSchema: {\n downloadId: z.number().describe('The ID of the download'),\n size: z.number().optional().describe('Icon size in pixels (16 or 32). Defaults to 32'),\n },\n },\n async ({ downloadId, size }) => {\n try {\n const options: chrome.downloads.GetFileIconOptions = {};\n if (size !== undefined) options.size = size as 16 | 32;\n\n const iconUrl = await chrome.downloads.getFileIcon(downloadId, options);\n\n return this.formatSuccess(`File icon retrieved`, {\n downloadId,\n iconUrl,\n size: size || 32,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerOpen(): void {\n this.server.registerTool(\n 'open_download',\n {\n description: 'Open a completed downloaded file. Requires \"downloads.open\" permission',\n inputSchema: {\n downloadId: z.number().describe('The ID of the download to open'),\n },\n },\n async ({ downloadId }) => {\n try {\n await chrome.downloads.open(downloadId);\n return this.formatSuccess(`Download ${downloadId} opened successfully`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerShow(): void {\n this.server.registerTool(\n 'show_download_in_folder',\n {\n description: 'Show the downloaded file in its folder in the file manager',\n inputSchema: {\n downloadId: z.number().describe('The ID of the download to show'),\n },\n },\n async ({ downloadId }) => {\n try {\n await chrome.downloads.show(downloadId);\n return this.formatSuccess(`Download ${downloadId} shown in file manager`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerErase(): void {\n this.server.registerTool(\n 'erase_download_history',\n {\n description: 'Remove download entries from the browser history without deleting the files',\n inputSchema: {\n query: z\n .object({\n id: z.number().optional().describe('Specific download ID to erase'),\n state: DownloadStateSchema.optional().describe('Erase downloads in this state'),\n paused: z.boolean().optional().describe('Erase paused downloads'),\n danger: DangerTypeSchema.optional().describe('Erase downloads with this danger type'),\n urlRegex: z.string().optional().describe('Erase downloads matching this URL regex'),\n filenameRegex: z\n .string()\n .optional()\n .describe('Erase downloads matching this filename regex'),\n query: z.array(z.string()).optional().describe('Search terms to match'),\n })\n .describe('Query to identify downloads to erase from history'),\n },\n },\n async ({ query }) => {\n try {\n const downloadQuery: chrome.downloads.DownloadQuery = {};\n\n if (query.id !== undefined) downloadQuery.id = query.id;\n if (query.state !== undefined) downloadQuery.state = query.state;\n if (query.paused !== undefined) downloadQuery.paused = query.paused;\n if (query.danger !== undefined) downloadQuery.danger = query.danger;\n if (query.urlRegex !== undefined) downloadQuery.urlRegex = query.urlRegex;\n if (query.filenameRegex !== undefined) downloadQuery.filenameRegex = query.filenameRegex;\n if (query.query !== undefined) downloadQuery.query = query.query;\n\n const results = await chrome.downloads.erase(downloadQuery);\n\n return this.formatSuccess(`Erased ${results.length} download(s) from history`, {\n erasedIds: results,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerRemoveFile(): void {\n this.server.registerTool(\n 'remove_downloaded_file',\n {\n description: 'Remove a downloaded file from disk and erase it from history',\n inputSchema: {\n downloadId: z.number().describe('The ID of the download to remove'),\n },\n },\n async ({ downloadId }) => {\n try {\n await chrome.downloads.removeFile(downloadId);\n return this.formatSuccess(`Download ${downloadId} file removed from disk`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerAcceptDanger(): void {\n this.server.registerTool(\n 'accept_dangerous_download',\n {\n description: 'Accept a dangerous download that was blocked',\n inputSchema: {\n downloadId: z.number().describe('The ID of the dangerous download to accept'),\n },\n },\n async ({ downloadId }) => {\n try {\n await chrome.downloads.acceptDanger(downloadId);\n return this.formatSuccess(`Dangerous download ${downloadId} accepted and will continue`);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class RuntimeApiTools extends BaseApiTools {\n protected apiName = 'Runtime';\n\n constructor(\n server: McpServer,\n options: {\n getExtensionInfo?: boolean;\n sendMessage?: boolean;\n connect?: boolean;\n openOptionsPage?: boolean;\n reload?: boolean;\n setUninstallURL?: boolean;\n getContexts?: boolean;\n getPlatformInfo?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Check if Runtime API exists\n if (!chrome.runtime) {\n return {\n available: false,\n message: 'chrome.runtime API is not defined',\n details: 'The runtime API should always be available in extension contexts',\n };\n }\n\n // Test basic methods that should always be available\n if (typeof chrome.runtime.getManifest !== 'function') {\n return {\n available: false,\n message: 'chrome.runtime.getManifest is not available',\n details: 'The runtime API appears to be partially available. This is unexpected.',\n };\n }\n\n // Test the API by getting the manifest\n try {\n const manifest = chrome.runtime.getManifest();\n if (!manifest || typeof manifest !== 'object') {\n throw new Error('Invalid manifest returned');\n }\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access runtime API methods',\n details: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n\n return {\n available: true,\n message: 'Runtime API is fully available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.runtime API',\n details: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('getExtensionInfo')) {\n this.registerGetExtensionInfo();\n }\n\n if (this.shouldRegisterTool('sendMessage')) {\n this.registerSendMessage();\n }\n\n if (this.shouldRegisterTool('connect')) {\n this.registerConnect();\n }\n\n if (this.shouldRegisterTool('openOptionsPage')) {\n this.registerOpenOptionsPage();\n }\n\n if (this.shouldRegisterTool('reload')) {\n this.registerReload();\n }\n\n if (this.shouldRegisterTool('setUninstallURL')) {\n this.registerSetUninstallURL();\n }\n\n if (this.shouldRegisterTool('getContexts')) {\n this.checkAndRegisterGetContexts();\n }\n\n if (this.shouldRegisterTool('getPlatformInfo')) {\n this.registerGetPlatformInfo();\n }\n }\n\n private checkAndRegisterGetContexts(): void {\n try {\n if (typeof chrome.runtime.getContexts === 'function') {\n this.registerGetContexts();\n console.log(' ✓ getContexts method available (MV3)');\n } else {\n console.warn(' ✗ getContexts method not available - requires Manifest V3');\n }\n } catch {\n console.warn(' ✗ Failed to check getContexts availability');\n }\n }\n\n private registerGetExtensionInfo(): void {\n this.server.registerTool(\n 'get_extension_info',\n {\n description:\n 'Get detailed information about the extension including manifest, URLs, and installation details',\n inputSchema: {},\n },\n async () => {\n try {\n const manifest = chrome.runtime.getManifest();\n const id = chrome.runtime.id;\n\n // Build URLs\n const urls = {\n extension: chrome.runtime.getURL(''),\n optionsPage: manifest.options_page\n ? chrome.runtime.getURL(manifest.options_page)\n : null,\n optionsUI: manifest.options_ui?.page\n ? chrome.runtime.getURL(manifest.options_ui.page)\n : null,\n };\n\n // Get installation type if available\n let installType = null;\n try {\n if (chrome.management && typeof chrome.management.getSelf === 'function') {\n const selfInfo = await chrome.management.getSelf();\n installType = selfInfo.installType;\n }\n } catch {\n // management API might not be available\n }\n\n const info = {\n id,\n name: manifest.name,\n version: manifest.version,\n manifestVersion: manifest.manifest_version,\n description: manifest.description,\n permissions: manifest.permissions || [],\n optionalPermissions: manifest.optional_permissions || [],\n hostPermissions: manifest.host_permissions || [],\n urls,\n installType,\n shortName: manifest.short_name,\n author: manifest.author,\n homepageUrl: manifest.homepage_url,\n updateUrl: manifest.update_url,\n icons: manifest.icons,\n action: manifest.action,\n background: manifest.background,\n contentScripts: manifest.content_scripts,\n };\n\n return this.formatJson(info);\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerSendMessage(): void {\n this.server.registerTool(\n 'send_runtime_message',\n {\n description:\n 'Send a message to the extension or another extension. Messages can be sent to content scripts, the service worker, or other extension contexts.',\n inputSchema: {\n message: z.any().describe('The message to send. Can be any JSON-serializable value'),\n extensionId: z\n .string()\n .optional()\n .describe('Target extension ID. Omit to send within the same extension'),\n options: z\n .object({\n includeTlsChannelId: z\n .boolean()\n .optional()\n .describe('Whether to include TLS channel ID'),\n })\n .optional()\n .describe('Message sending options'),\n },\n },\n async ({ message, extensionId, options }) => {\n try {\n // Use chrome.runtime.sendMessage with async/await pattern\n let response: any;\n\n if (extensionId) {\n response = await chrome.runtime.sendMessage(extensionId, message, options || {});\n } else {\n response = await chrome.runtime.sendMessage(message, options || {});\n }\n\n return this.formatSuccess('Message sent successfully', { response });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerConnect(): void {\n this.server.registerTool(\n 'create_runtime_port',\n {\n description:\n 'Create a long-lived connection port for continuous message passing between extension contexts',\n inputSchema: {\n name: z.string().optional().describe('Name for the port to help identify it'),\n extensionId: z\n .string()\n .optional()\n .describe('Target extension ID. Omit to connect within the same extension'),\n },\n },\n async ({ name, extensionId }) => {\n try {\n // Create connection info object\n const connectInfo = name ? { name } : undefined;\n\n // Create the port\n const port = extensionId\n ? chrome.runtime.connect(extensionId, connectInfo)\n : chrome.runtime.connect(connectInfo);\n\n // Get port details\n const portInfo = {\n name: port.name,\n sender: port.sender,\n disconnected: false,\n };\n\n // Set up disconnect handler\n port.onDisconnect.addListener(() => {\n portInfo.disconnected = true;\n });\n\n // Disconnect after getting info (we can't maintain ports in MCP context)\n setTimeout(() => port.disconnect(), 100);\n\n return this.formatSuccess(\n 'Port created successfully (auto-disconnected after 100ms)',\n portInfo\n );\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerOpenOptionsPage(): void {\n this.server.registerTool(\n 'open_options_page',\n {\n description:\n \"Open the extension's options page. The options page will be opened in a new tab if it's an HTML page, or in the extensions management page if using embedded options.\",\n inputSchema: {},\n },\n async () => {\n try {\n await chrome.runtime.openOptionsPage();\n return this.formatSuccess('Options page opened successfully');\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerReload(): void {\n this.server.registerTool(\n 'reload_extension',\n {\n description:\n 'Reload the extension. This will restart the extension, including the service worker and all content scripts. Use with caution as it will disconnect all active connections.',\n inputSchema: {\n confirm: z.boolean().describe('Confirmation flag - must be true to reload the extension'),\n },\n },\n async ({ confirm }) => {\n try {\n if (!confirm) {\n return this.formatError(\n new Error('Reload operation requires confirm=true to prevent accidental reloads')\n );\n }\n\n // Note: This will cause the extension to reload and the current execution will stop\n chrome.runtime.reload();\n\n // This line won't actually execute due to the reload\n return this.formatSuccess('Extension reload initiated');\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerSetUninstallURL(): void {\n this.server.registerTool(\n 'set_uninstall_url',\n {\n description:\n 'Set a URL to be opened when the extension is uninstalled. This can be used for feedback forms or cleanup instructions.',\n inputSchema: {\n url: z\n .string()\n .url()\n .describe(\n 'The URL to open when the extension is uninstalled. Must be a valid HTTP or HTTPS URL.'\n ),\n },\n },\n async ({ url }) => {\n try {\n chrome.runtime.setUninstallURL(url);\n return this.formatSuccess('Uninstall URL set successfully', { url });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetContexts(): void {\n this.server.registerTool(\n 'get_extension_contexts',\n {\n description:\n 'Get information about all contexts (pages, tabs, workers) associated with the extension (Manifest V3 only)',\n inputSchema: {\n filter: z\n .object({\n contextTypes: z\n .array(z.enum(['TAB', 'POPUP', 'BACKGROUND', 'OFFSCREEN_DOCUMENT', 'SIDE_PANEL']))\n .optional()\n .describe('Filter by context types'),\n documentIds: z.array(z.string()).optional().describe('Filter by document IDs'),\n documentOrigins: z\n .array(z.string())\n .optional()\n .describe('Filter by document origins'),\n documentUrls: z.array(z.string()).optional().describe('Filter by document URLs'),\n frameIds: z.array(z.number()).optional().describe('Filter by frame IDs'),\n incognito: z.boolean().optional().describe('Filter by incognito state'),\n tabIds: z.array(z.number()).optional().describe('Filter by tab IDs'),\n windowIds: z.array(z.number()).optional().describe('Filter by window IDs'),\n })\n .optional()\n .describe('Filter criteria for contexts'),\n },\n },\n async ({ filter }) => {\n try {\n // Type assertion needed as getContexts is not in the type definitions yet\n const contexts = await (chrome.runtime as any).getContexts(filter || {});\n\n return this.formatJson({\n count: contexts.length,\n contexts: contexts.map((context: any) => ({\n contextId: context.contextId,\n contextType: context.contextType,\n documentId: context.documentId,\n documentOrigin: context.documentOrigin,\n documentUrl: context.documentUrl,\n frameId: context.frameId,\n incognito: context.incognito,\n tabId: context.tabId,\n windowId: context.windowId,\n })),\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetPlatformInfo(): void {\n this.server.registerTool(\n 'get_platform_info',\n {\n description: 'Get information about the current platform/operating system',\n inputSchema: {},\n },\n async () => {\n try {\n const platformInfo = await chrome.runtime.getPlatformInfo();\n\n return this.formatJson({\n os: platformInfo.os,\n arch: platformInfo.arch,\n nacl_arch: platformInfo.nacl_arch,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class CommandsApiTools extends BaseApiTools {\n protected apiName = 'Commands';\n\n constructor(\n server: McpServer,\n options: {\n getAllCommands?: boolean;\n getCommand?: boolean;\n updateCommandShortcut?: boolean;\n resetCommandShortcut?: boolean;\n onCommandListener?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Check if the commands API exists\n if (!chrome.commands) {\n return {\n available: false,\n message: 'chrome.commands API is not defined',\n details:\n 'The commands API is available to all extensions by default. This error suggests a critical issue with the extension environment.',\n };\n }\n\n // Test basic method availability\n if (typeof chrome.commands.getAll !== 'function') {\n return {\n available: false,\n message: 'chrome.commands.getAll is not available',\n details:\n 'The commands API appears to be partially available. This may indicate a compatibility issue.',\n };\n }\n\n // Test event listener availability\n if (\n !chrome.commands.onCommand ||\n typeof chrome.commands.onCommand.addListener !== 'function'\n ) {\n return {\n available: false,\n message: 'chrome.commands.onCommand is not available',\n details:\n 'Command event handling is not available. This is required for the commands API to function properly.',\n };\n }\n\n // Try to actually use the API\n chrome.commands.getAll(() => {\n if (chrome.runtime.lastError) {\n throw new Error(chrome.runtime.lastError.message);\n }\n });\n\n return {\n available: true,\n message: 'Commands API is fully available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.commands API',\n details: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('getAllCommands')) {\n this.registerGetAllCommands();\n }\n\n if (this.shouldRegisterTool('getCommand')) {\n this.registerGetCommand();\n }\n\n if (this.shouldRegisterTool('updateCommandShortcut')) {\n this.registerUpdateCommandShortcut();\n }\n\n if (this.shouldRegisterTool('resetCommandShortcut')) {\n this.registerResetCommandShortcut();\n }\n\n if (this.shouldRegisterTool('onCommandListener')) {\n this.registerOnCommandListener();\n }\n }\n\n private registerGetAllCommands(): void {\n this.server.registerTool(\n 'get_all_commands',\n {\n description:\n 'Get all registered commands for the extension with their current keyboard shortcuts',\n inputSchema: {},\n },\n async () => {\n try {\n const commands = await chrome.commands.getAll();\n\n // Format the commands with additional metadata\n const formattedCommands = commands.map((command) => ({\n name: command.name || 'unnamed',\n description: command.description || 'No description',\n shortcut: command.shortcut || 'Not assigned',\n hasShortcut: !!command.shortcut,\n }));\n\n // Group commands by type\n const specialCommands = formattedCommands.filter((cmd) => cmd.name.startsWith('_'));\n const customCommands = formattedCommands.filter((cmd) => !cmd.name.startsWith('_'));\n\n return this.formatJson({\n totalCommands: formattedCommands.length,\n specialCommands: {\n count: specialCommands.length,\n commands: specialCommands,\n },\n customCommands: {\n count: customCommands.length,\n commands: customCommands,\n },\n allCommands: formattedCommands,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetCommand(): void {\n this.server.registerTool(\n 'get_command',\n {\n description: 'Get information about a specific command by name',\n inputSchema: {\n name: z\n .string()\n .describe(\n 'The name of the command to retrieve (e.g., \"toggle-feature\", \"_execute_action\")'\n ),\n },\n },\n async ({ name }) => {\n try {\n const commands = await chrome.commands.getAll();\n const command = commands.find((cmd) => cmd.name === name);\n\n if (!command) {\n return this.formatError(\n new Error(\n `Command \"${name}\" not found. Use get_all_commands to see available commands.`\n )\n );\n }\n\n return this.formatJson({\n name: command.name || 'unnamed',\n description: command.description || 'No description',\n shortcut: command.shortcut || 'Not assigned',\n hasShortcut: !!command.shortcut,\n isSpecialCommand: command.name?.startsWith('_') || false,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerUpdateCommandShortcut(): void {\n this.server.registerTool(\n 'update_command_shortcut',\n {\n description:\n 'Get instructions for updating a command keyboard shortcut. Note: Chrome extension API does not support programmatic shortcut updates - users must update manually.',\n inputSchema: {\n name: z.string().describe('The name of the command to update'),\n shortcut: z\n .string()\n .describe(\n 'The new keyboard shortcut (e.g., \"Ctrl+Shift+Y\", \"Alt+Shift+P\"). Use empty string to remove the shortcut.'\n ),\n },\n },\n async ({ name, shortcut }) => {\n try {\n // Validate shortcut format if provided\n if (shortcut && !this.isValidShortcut(shortcut)) {\n return this.formatError(\n new Error(\n 'Invalid shortcut format. Shortcuts must include Ctrl or Alt, and can optionally include Shift. ' +\n 'Examples: \"Ctrl+Shift+Y\", \"Alt+P\", \"Ctrl+Alt+1\"'\n )\n );\n }\n\n // Note: The update method is not available in the current Chrome types\n // This would be the ideal approach but falls back to user instructions\n // await chrome.commands.update({ name, shortcut });\n\n return this.formatSuccess('Command shortcut update requested', {\n name,\n requestedShortcut: shortcut || 'None',\n note: 'Users can manually update keyboard shortcuts in chrome://extensions/shortcuts',\n instructions: [\n '1. Open chrome://extensions/shortcuts in a new tab',\n '2. Find this extension',\n `3. Set the shortcut for \"${name}\" to \"${shortcut || 'None'}\"`,\n ],\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerResetCommandShortcut(): void {\n this.server.registerTool(\n 'reset_command_shortcut',\n {\n description:\n 'Get instructions for resetting a command shortcut to its default value defined in manifest.json',\n inputSchema: {\n name: z.string().describe('The name of the command to reset'),\n },\n },\n async ({ name }) => {\n try {\n // Note: The reset method is not available in the current Chrome types\n // This would be the ideal approach but falls back to user instructions\n // await chrome.commands.reset(name);\n\n return this.formatSuccess('Command shortcut reset requested', {\n name,\n note: 'Users can manually reset keyboard shortcuts in chrome://extensions/shortcuts',\n instructions: [\n '1. Open chrome://extensions/shortcuts in a new tab',\n '2. Find this extension',\n `3. Click the X button next to the \"${name}\" command to reset it to default`,\n '4. Or set it back to the default value defined in manifest.json',\n ],\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerOnCommandListener(): void {\n this.server.registerTool(\n 'listen_for_commands',\n {\n description:\n 'Get information about the command event listener. Note: Actual command handling is implemented in the extension background script.',\n inputSchema: {\n action: z\n .enum(['status', 'info'])\n .describe(\n 'Action to perform: \"status\" checks if listener is active, \"info\" provides details about command handling'\n ),\n },\n },\n async ({ action }) => {\n try {\n if (action === 'status') {\n // Check if the onCommand event has listeners\n const hasListeners = chrome.commands.onCommand.hasListeners();\n\n return this.formatJson({\n listenerActive: hasListeners,\n message: hasListeners\n ? 'Command listener is active and ready to handle keyboard shortcuts'\n : 'No command listener is currently registered',\n recommendation: !hasListeners\n ? 'The extension should register a listener using chrome.commands.onCommand.addListener() in the background script'\n : null,\n });\n } else {\n // Provide information about command handling\n const commands = await chrome.commands.getAll();\n const activeCommands = commands.filter((cmd) => cmd.shortcut);\n\n return this.formatJson({\n info: 'Command handling in Chrome extensions',\n howItWorks: [\n '1. Define commands in manifest.json with suggested keyboard shortcuts',\n '2. Register an onCommand listener in the background script',\n '3. When user presses a shortcut, the listener receives the command name',\n '4. The extension executes the corresponding action',\n ],\n activeCommands: {\n count: activeCommands.length,\n commands: activeCommands.map((cmd) => ({\n name: cmd.name,\n shortcut: cmd.shortcut,\n description: cmd.description,\n })),\n },\n exampleListener:\n 'chrome.commands.onCommand.addListener((command, tab) => { /* handle command */ });',\n });\n }\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private isValidShortcut(shortcut: string): boolean {\n // Basic validation for keyboard shortcuts\n const parts = shortcut.split('+').map((part) => part.trim());\n\n // Must have at least 2 parts (modifier + key)\n if (parts.length < 2) return false;\n\n // Must include Ctrl or Alt\n const hasRequiredModifier = parts.some((part) => /^(Ctrl|Alt|Command|MacCtrl)$/i.test(part));\n\n if (!hasRequiredModifier) return false;\n\n // Last part should be a valid key\n const lastPart = parts[parts.length - 1];\n const validKey =\n /^[A-Z0-9]$/.test(lastPart) ||\n /^(Up|Down|Left|Right|Home|End|PageUp|PageDown|Space|Tab|Insert|Delete)$/i.test(lastPart) ||\n /^F([1-9]|1[0-2])$/i.test(lastPart);\n\n return validKey;\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class TtsApiTools extends BaseApiTools {\n protected apiName = 'Tts';\n\n constructor(\n server: McpServer,\n options: {\n speak?: boolean;\n stop?: boolean;\n pause?: boolean;\n resume?: boolean;\n isSpeaking?: boolean;\n getVoices?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Check if API exists\n if (!chrome.tts) {\n return {\n available: false,\n message: 'chrome.tts API is not defined',\n details: 'This extension needs the \"tts\" permission in its manifest.json',\n };\n }\n\n // Test a basic method\n if (typeof chrome.tts.getVoices !== 'function') {\n return {\n available: false,\n message: 'chrome.tts.getVoices is not available',\n details: 'The tts API appears to be partially available. Check manifest permissions.',\n };\n }\n\n // Try to actually use the API\n chrome.tts.getVoices(() => {\n if (chrome.runtime.lastError) {\n throw new Error(chrome.runtime.lastError.message);\n }\n });\n\n return {\n available: true,\n message: 'TTS API is fully available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.tts API',\n details: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('speak')) {\n this.registerSpeak();\n }\n\n if (this.shouldRegisterTool('stop')) {\n this.registerStop();\n }\n\n if (this.shouldRegisterTool('pause')) {\n this.registerPause();\n }\n\n if (this.shouldRegisterTool('resume')) {\n this.registerResume();\n }\n\n if (this.shouldRegisterTool('isSpeaking')) {\n this.registerIsSpeaking();\n }\n\n if (this.shouldRegisterTool('getVoices')) {\n this.registerGetVoices();\n }\n }\n\n private registerSpeak(): void {\n this.server.registerTool(\n 'tts_speak',\n {\n description: 'Speak text using a text-to-speech engine',\n inputSchema: {\n utterance: z\n .string()\n .describe(\n 'The text to speak, either plain text or a complete SSML document. Maximum length is 32,768 characters'\n ),\n lang: z\n .string()\n .optional()\n .describe('The language to use for synthesis (e.g. \"en\", \"en-US\", \"en-GB\", \"zh-CN\")'),\n voiceName: z.string().optional().describe('The name of the voice to use for synthesis'),\n rate: z\n .number()\n .min(0.1)\n .max(10.0)\n .optional()\n .describe(\n 'Speaking rate relative to default (1.0 is default, 2.0 is twice as fast, 0.5 is half as fast)'\n ),\n pitch: z\n .number()\n .min(0)\n .max(2)\n .optional()\n .describe('Speaking pitch between 0 and 2 inclusive (1.0 is default)'),\n volume: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe('Speaking volume between 0 and 1 inclusive (1.0 is default)'),\n enqueue: z\n .boolean()\n .optional()\n .describe(\n 'If true, enqueues this utterance. If false (default), interrupts current speech'\n ),\n extensionId: z\n .string()\n .optional()\n .describe('The extension ID of the speech engine to use'),\n requiredEventTypes: z\n .array(z.string())\n .optional()\n .describe('TTS event types the voice must support'),\n desiredEventTypes: z\n .array(z.string())\n .optional()\n .describe('TTS event types to listen to'),\n },\n },\n async ({\n utterance,\n lang,\n voiceName,\n rate,\n pitch,\n volume,\n enqueue,\n extensionId,\n requiredEventTypes,\n desiredEventTypes,\n }) => {\n try {\n // Build TTS options\n const options: chrome.tts.TtsOptions = {};\n\n if (lang !== undefined) options.lang = lang;\n if (voiceName !== undefined) options.voiceName = voiceName;\n if (rate !== undefined) options.rate = rate;\n if (pitch !== undefined) options.pitch = pitch;\n if (volume !== undefined) options.volume = volume;\n if (enqueue !== undefined) options.enqueue = enqueue;\n if (extensionId !== undefined) options.extensionId = extensionId;\n if (requiredEventTypes !== undefined) options.requiredEventTypes = requiredEventTypes;\n if (desiredEventTypes !== undefined) options.desiredEventTypes = desiredEventTypes;\n\n // Track speech events\n const events: any[] = [];\n let errorOccurred: string | null = null;\n\n options.onEvent = (event: chrome.tts.TtsEvent) => {\n events.push({\n type: event.type,\n charIndex: event.charIndex,\n errorMessage: event.errorMessage,\n length: event.length,\n });\n\n if (event.type === 'error') {\n errorOccurred = event.errorMessage || 'Unknown error';\n }\n };\n\n // Speak the text\n await new Promise<void>((resolve, reject) => {\n chrome.tts.speak(utterance, options, () => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n // Wait a bit for events to be processed\n setTimeout(() => {\n if (errorOccurred) {\n reject(new Error(errorOccurred));\n } else {\n resolve();\n }\n }, 100);\n }\n });\n });\n\n return this.formatSuccess('Text-to-speech initiated successfully', {\n utterance: utterance.substring(0, 100) + (utterance.length > 100 ? '...' : ''),\n options: Object.keys(options).filter(\n (k) => k !== 'onEvent' && options[k as keyof chrome.tts.TtsOptions] !== undefined\n ),\n events: events,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerStop(): void {\n this.server.registerTool(\n 'tts_stop',\n {\n description: 'Stop any current speech and flush the queue of pending utterances',\n inputSchema: {},\n },\n async () => {\n try {\n chrome.tts.stop();\n\n return this.formatSuccess('Speech stopped successfully');\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerPause(): void {\n this.server.registerTool(\n 'tts_pause',\n {\n description: 'Pause speech synthesis, potentially in the middle of an utterance',\n inputSchema: {},\n },\n async () => {\n try {\n chrome.tts.pause();\n\n return this.formatSuccess('Speech paused successfully');\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerResume(): void {\n this.server.registerTool(\n 'tts_resume',\n {\n description: 'Resume speaking where it left off if speech was paused',\n inputSchema: {},\n },\n async () => {\n try {\n chrome.tts.resume();\n\n return this.formatSuccess('Speech resumed successfully');\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerIsSpeaking(): void {\n this.server.registerTool(\n 'tts_is_speaking',\n {\n description: 'Check whether the engine is currently speaking',\n inputSchema: {},\n },\n async () => {\n try {\n const speaking = await new Promise<boolean>((resolve, reject) => {\n chrome.tts.isSpeaking((speaking) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(speaking);\n }\n });\n });\n\n return this.formatJson({\n speaking,\n status: speaking ? 'TTS engine is currently speaking' : 'TTS engine is not speaking',\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerGetVoices(): void {\n this.server.registerTool(\n 'tts_get_voices',\n {\n description: 'Get all available voices for speech synthesis',\n inputSchema: {\n lang: z.string().optional().describe('Filter voices by language (e.g. \"en\", \"en-US\")'),\n },\n },\n async ({ lang }) => {\n try {\n const voices = await new Promise<chrome.tts.TtsVoice[]>((resolve, reject) => {\n chrome.tts.getVoices((voices) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(voices);\n }\n });\n });\n\n // Filter by language if specified\n let filteredVoices = voices;\n if (lang) {\n filteredVoices = voices.filter(\n (voice) =>\n voice.lang &&\n (voice.lang === lang ||\n voice.lang.startsWith(lang + '-') ||\n lang.startsWith(voice.lang + '-'))\n );\n }\n\n return this.formatJson({\n count: filteredVoices.length,\n totalAvailable: voices.length,\n voices: filteredVoices.map((voice) => ({\n voiceName: voice.voiceName,\n lang: voice.lang,\n remote: voice.remote,\n extensionId: voice.extensionId,\n eventTypes: voice.eventTypes,\n })),\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ApiAvailability, BaseApiTools } from '../BaseApiTools';\n\nexport class TabGroupsApiTools extends BaseApiTools {\n protected apiName = 'TabGroups';\n\n constructor(\n server: McpServer,\n options: {\n get?: boolean;\n query?: boolean;\n update?: boolean;\n move?: boolean;\n } = {}\n ) {\n super(server, options);\n }\n\n checkAvailability(): ApiAvailability {\n try {\n // Check if API exists\n if (!chrome.tabGroups) {\n return {\n available: false,\n message: 'chrome.tabGroups API is not defined',\n details:\n 'This extension needs the \"tabGroups\" permission in its manifest.json and requires Chrome 89+ with Manifest V3',\n };\n }\n\n // Test a basic method\n if (typeof chrome.tabGroups.query !== 'function') {\n return {\n available: false,\n message: 'chrome.tabGroups.query is not available',\n details:\n 'The tabGroups API appears to be partially available. Check manifest permissions.',\n };\n }\n\n // Try to actually use the API\n chrome.tabGroups.query({}, () => {\n if (chrome.runtime.lastError) {\n throw new Error(chrome.runtime.lastError.message);\n }\n });\n\n return {\n available: true,\n message: 'TabGroups API is fully available',\n };\n } catch (error) {\n return {\n available: false,\n message: 'Failed to access chrome.tabGroups API',\n details: error instanceof Error ? error.message : 'Unknown error occurred',\n };\n }\n }\n\n registerTools(): void {\n if (this.shouldRegisterTool('get')) {\n this.registerGet();\n }\n\n if (this.shouldRegisterTool('query')) {\n this.registerQuery();\n }\n\n if (this.shouldRegisterTool('update')) {\n this.registerUpdate();\n }\n\n if (this.shouldRegisterTool('move')) {\n this.registerMove();\n }\n }\n\n private registerGet(): void {\n this.server.registerTool(\n 'get_tab_group',\n {\n description: 'Get details about a specific tab group',\n inputSchema: {\n groupId: z.number().describe('The ID of the tab group to retrieve'),\n },\n },\n async ({ groupId }) => {\n try {\n const group = await new Promise<chrome.tabGroups.TabGroup>((resolve, reject) => {\n chrome.tabGroups.get(groupId, (group) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(group);\n }\n });\n });\n\n return this.formatJson({\n id: group.id,\n title: group.title,\n color: group.color,\n collapsed: group.collapsed,\n shared: (group as any).shared,\n windowId: group.windowId,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerQuery(): void {\n this.server.registerTool(\n 'query_tab_groups',\n {\n description: 'Search for tab groups that match specified criteria',\n inputSchema: {\n collapsed: z.boolean().optional().describe('Whether the groups are collapsed'),\n color: z\n .enum(['grey', 'blue', 'red', 'yellow', 'green', 'pink', 'purple', 'cyan', 'orange'])\n .optional()\n .describe('The color of the groups'),\n shared: z.boolean().optional().describe('Whether the group is shared (Chrome 137+)'),\n title: z.string().optional().describe('Pattern to match group titles against'),\n windowId: z\n .number()\n .optional()\n .describe('The ID of the parent window, or use -2 for the current window'),\n },\n },\n async ({ collapsed, color, shared, title, windowId }) => {\n try {\n // Build query info\n const queryInfo: any = {};\n\n if (collapsed !== undefined) queryInfo.collapsed = collapsed;\n if (color !== undefined) queryInfo.color = color;\n if (shared !== undefined) queryInfo.shared = shared;\n if (title !== undefined) queryInfo.title = title;\n if (windowId !== undefined) {\n // -2 represents WINDOW_ID_CURRENT in Chrome extensions\n queryInfo.windowId = windowId === -2 ? chrome.windows.WINDOW_ID_CURRENT : windowId;\n }\n\n const groups = await new Promise<chrome.tabGroups.TabGroup[]>((resolve, reject) => {\n chrome.tabGroups.query(queryInfo, (groups) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(groups);\n }\n });\n });\n\n return this.formatJson({\n count: groups.length,\n groups: groups.map((group) => ({\n id: group.id,\n title: group.title,\n color: group.color,\n collapsed: group.collapsed,\n shared: (group as any).shared,\n windowId: group.windowId,\n })),\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerUpdate(): void {\n this.server.registerTool(\n 'update_tab_group',\n {\n description: 'Modify properties of a tab group',\n inputSchema: {\n groupId: z.number().describe('The ID of the group to modify'),\n collapsed: z.boolean().optional().describe('Whether the group should be collapsed'),\n color: z\n .enum(['grey', 'blue', 'red', 'yellow', 'green', 'pink', 'purple', 'cyan', 'orange'])\n .optional()\n .describe('The color of the group'),\n title: z.string().optional().describe('The title of the group'),\n },\n },\n async ({ groupId, collapsed, color, title }) => {\n try {\n // Build update properties\n const updateProperties: any = {};\n\n if (collapsed !== undefined) updateProperties.collapsed = collapsed;\n if (color !== undefined) updateProperties.color = color;\n if (title !== undefined) updateProperties.title = title;\n\n const updatedGroup = await new Promise<chrome.tabGroups.TabGroup | undefined>(\n (resolve, reject) => {\n chrome.tabGroups.update(groupId, updateProperties, (group) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(group);\n }\n });\n }\n );\n\n if (!updatedGroup) {\n return this.formatError('Failed to update tab group');\n }\n\n return this.formatSuccess('Tab group updated successfully', {\n id: updatedGroup.id,\n title: updatedGroup.title,\n color: updatedGroup.color,\n collapsed: updatedGroup.collapsed,\n shared: (updatedGroup as any).shared,\n windowId: updatedGroup.windowId,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n\n private registerMove(): void {\n this.server.registerTool(\n 'move_tab_group',\n {\n description: 'Move a tab group within its window or to a new window',\n inputSchema: {\n groupId: z.number().describe('The ID of the group to move'),\n index: z\n .number()\n .describe('The position to move the group to. Use -1 to place at the end'),\n windowId: z\n .number()\n .optional()\n .describe('The window to move the group to. Defaults to current window'),\n },\n },\n async ({ groupId, index, windowId }) => {\n try {\n // Build move properties\n const moveProperties: any = {\n index: index,\n };\n\n if (windowId !== undefined) {\n moveProperties.windowId = windowId;\n }\n\n const movedGroup = await new Promise<chrome.tabGroups.TabGroup | undefined>(\n (resolve, reject) => {\n chrome.tabGroups.move(groupId, moveProperties, (group) => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve(group);\n }\n });\n }\n );\n\n if (!movedGroup) {\n return this.formatError('Failed to move tab group');\n }\n\n return this.formatSuccess('Tab group moved successfully', {\n id: movedGroup.id,\n title: movedGroup.title,\n color: movedGroup.color,\n collapsed: movedGroup.collapsed,\n shared: (movedGroup as any).shared,\n windowId: movedGroup.windowId,\n newIndex: index,\n });\n } catch (error) {\n return this.formatError(error);\n }\n }\n );\n }\n}\n","import { z } from 'zod';\n\n/**\n * Enum of all Chrome Extension APIs\n */\nexport enum ChromeApi {\n ACCESSIBILITY_FEATURES = 'accessibilityFeatures',\n ACTION = 'action',\n ALARMS = 'alarms',\n AUDIO = 'audio',\n BOOKMARKS = 'bookmarks',\n BROWSING_DATA = 'browsingData',\n CERTIFICATE_PROVIDER = 'certificateProvider',\n COMMANDS = 'commands',\n CONTENT_SETTINGS = 'contentSettings',\n CONTEXT_MENUS = 'contextMenus',\n COOKIES = 'cookies',\n DEBUGGER = 'debugger',\n DECLARATIVE_CONTENT = 'declarativeContent',\n DECLARATIVE_NET_REQUEST = 'declarativeNetRequest',\n DESKTOP_CAPTURE = 'desktopCapture',\n DEVTOOLS_INSPECTED_WINDOW = 'devtools.inspectedWindow',\n DEVTOOLS_NETWORK = 'devtools.network',\n DEVTOOLS_PANELS = 'devtools.panels',\n DEVTOOLS_PERFORMANCE = 'devtools.performance',\n DEVTOOLS_RECORDER = 'devtools.recorder',\n DNS = 'dns',\n DOCUMENT_SCAN = 'documentScan',\n DOM = 'dom',\n DOWNLOADS = 'downloads',\n ENTERPRISE_DEVICE_ATTRIBUTES = 'enterprise.deviceAttributes',\n ENTERPRISE_HARDWARE_PLATFORM = 'enterprise.hardwarePlatform',\n ENTERPRISE_NETWORKING_ATTRIBUTES = 'enterprise.networkingAttributes',\n ENTERPRISE_PLATFORM_KEYS = 'enterprise.platformKeys',\n EVENTS = 'events',\n EXTENSION = 'extension',\n EXTENSION_TYPES = 'extensionTypes',\n FILE_BROWSER_HANDLER = 'fileBrowserHandler',\n FILE_SYSTEM_PROVIDER = 'fileSystemProvider',\n FONT_SETTINGS = 'fontSettings',\n GCM = 'gcm',\n HISTORY = 'history',\n I18N = 'i18n',\n IDENTITY = 'identity',\n IDLE = 'idle',\n INPUT_IME = 'input.ime',\n INSTANCE_ID = 'instanceID',\n LOGIN_STATE = 'loginState',\n MANAGEMENT = 'management',\n NOTIFICATIONS = 'notifications',\n OFFSCREEN = 'offscreen',\n OMNIBOX = 'omnibox',\n PAGE_CAPTURE = 'pageCapture',\n PERMISSIONS = 'permissions',\n PLATFORM_KEYS = 'platformKeys',\n POWER = 'power',\n PRINTER_PROVIDER = 'printerProvider',\n PRINTING = 'printing',\n PRINTING_METRICS = 'printingMetrics',\n PRIVACY = 'privacy',\n PROCESSES = 'processes',\n PROXY = 'proxy',\n READING_LIST = 'readingList',\n RUNTIME = 'runtime',\n SCRIPTING = 'scripting',\n SEARCH = 'search',\n SESSIONS = 'sessions',\n SIDE_PANEL = 'sidePanel',\n STORAGE = 'storage',\n SYSTEM_CPU = 'system.cpu',\n SYSTEM_DISPLAY = 'system.display',\n SYSTEM_MEMORY = 'system.memory',\n SYSTEM_STORAGE = 'system.storage',\n SYSTEM_LOG = 'systemLog',\n TAB_CAPTURE = 'tabCapture',\n TAB_GROUPS = 'tabGroups',\n TABS = 'tabs',\n TOP_SITES = 'topSites',\n TTS = 'tts',\n TTS_ENGINE = 'ttsEngine',\n TYPES = 'types',\n USER_SCRIPTS = 'userScripts',\n VPN_PROVIDER = 'vpnProvider',\n WALLPAPER = 'wallpaper',\n WEB_AUTHENTICATION_PROXY = 'webAuthenticationProxy',\n WEB_NAVIGATION = 'webNavigation',\n WEB_REQUEST = 'webRequest',\n WINDOWS = 'windows',\n}\n\n/**\n * Supported platforms for Chrome APIs\n */\nexport const ChromePlatformSchema = z.enum(['all', 'chromeos']);\nexport type ChromePlatform = z.infer<typeof ChromePlatformSchema>;\n\n/**\n * Channel requirements for Chrome APIs\n */\nexport const ChromeChannelSchema = z.enum(['stable', 'dev']);\nexport type ChromeChannel = z.infer<typeof ChromeChannelSchema>;\n\n/**\n * Context where the API can run\n */\nexport const ChromeContextSchema = z.enum(['background', 'content', 'devtools', 'all']);\nexport type ChromeContext = z.infer<typeof ChromeContextSchema>;\n\n/**\n * Metadata for each Chrome API\n */\nexport const ChromeApiMetadataSchema = z.object({\n /** Minimum Chrome version required */\n minChromeVersion: z.number().optional(),\n /** Platform restrictions */\n platform: ChromePlatformSchema,\n /** Channel requirement */\n channel: ChromeChannelSchema,\n /** Manifest version requirement (2, 3, or both) */\n manifestVersions: z.array(z.literal(2).or(z.literal(3))),\n /** Whether this API requires enterprise policy */\n requiresPolicy: z.boolean(),\n /** Whether this API is foreground only */\n foregroundOnly: z.boolean(),\n /** Contexts where this API can run */\n contexts: z.array(ChromeContextSchema),\n /** API namespace in chrome object */\n namespace: z.string(),\n});\n\nexport type ChromeApiMetadata = z.infer<typeof ChromeApiMetadataSchema>;\n\n/**\n * Registry of all Chrome APIs with their metadata\n */\nexport const CHROME_API_REGISTRY = {\n [ChromeApi.ACCESSIBILITY_FEATURES]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'accessibilityFeatures',\n },\n [ChromeApi.ACTION]: {\n minChromeVersion: 88,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'action',\n },\n [ChromeApi.ALARMS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'alarms',\n },\n [ChromeApi.AUDIO]: {\n minChromeVersion: 59,\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'audio',\n },\n [ChromeApi.BOOKMARKS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background', 'content'],\n namespace: 'bookmarks',\n },\n [ChromeApi.BROWSING_DATA]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'browsingData',\n },\n [ChromeApi.CERTIFICATE_PROVIDER]: {\n minChromeVersion: 46,\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'certificateProvider',\n },\n [ChromeApi.COMMANDS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'commands',\n },\n [ChromeApi.CONTENT_SETTINGS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'contentSettings',\n },\n [ChromeApi.CONTEXT_MENUS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'contextMenus',\n },\n [ChromeApi.COOKIES]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background', 'content'],\n namespace: 'cookies',\n },\n [ChromeApi.DEBUGGER]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'debugger',\n },\n [ChromeApi.DECLARATIVE_CONTENT]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'declarativeContent',\n },\n [ChromeApi.DECLARATIVE_NET_REQUEST]: {\n minChromeVersion: 84,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'declarativeNetRequest',\n },\n [ChromeApi.DESKTOP_CAPTURE]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'desktopCapture',\n },\n [ChromeApi.DEVTOOLS_INSPECTED_WINDOW]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['devtools'],\n namespace: 'devtools.inspectedWindow',\n },\n [ChromeApi.DEVTOOLS_NETWORK]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['devtools'],\n namespace: 'devtools.network',\n },\n [ChromeApi.DEVTOOLS_PANELS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['devtools'],\n namespace: 'devtools.panels',\n },\n [ChromeApi.DEVTOOLS_PERFORMANCE]: {\n minChromeVersion: 129,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['devtools'],\n namespace: 'devtools.performance',\n },\n [ChromeApi.DEVTOOLS_RECORDER]: {\n minChromeVersion: 105,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['devtools'],\n namespace: 'devtools.recorder',\n },\n [ChromeApi.DNS]: {\n platform: 'all',\n channel: 'dev',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'dns',\n },\n [ChromeApi.DOCUMENT_SCAN]: {\n minChromeVersion: 44,\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'documentScan',\n },\n [ChromeApi.DOM]: {\n minChromeVersion: 88,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['content'],\n namespace: 'dom',\n },\n [ChromeApi.DOWNLOADS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'downloads',\n },\n [ChromeApi.ENTERPRISE_DEVICE_ATTRIBUTES]: {\n minChromeVersion: 46,\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: true,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'enterprise.deviceAttributes',\n },\n [ChromeApi.ENTERPRISE_HARDWARE_PLATFORM]: {\n minChromeVersion: 71,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: true,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'enterprise.hardwarePlatform',\n },\n [ChromeApi.ENTERPRISE_NETWORKING_ATTRIBUTES]: {\n minChromeVersion: 85,\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: true,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'enterprise.networkingAttributes',\n },\n [ChromeApi.ENTERPRISE_PLATFORM_KEYS]: {\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: true,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'enterprise.platformKeys',\n },\n [ChromeApi.EVENTS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['all'],\n namespace: 'events',\n },\n [ChromeApi.EXTENSION]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['all'],\n namespace: 'extension',\n },\n [ChromeApi.EXTENSION_TYPES]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['all'],\n namespace: 'extensionTypes',\n },\n [ChromeApi.FILE_BROWSER_HANDLER]: {\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: true,\n contexts: ['background'],\n namespace: 'fileBrowserHandler',\n },\n [ChromeApi.FILE_SYSTEM_PROVIDER]: {\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'fileSystemProvider',\n },\n [ChromeApi.FONT_SETTINGS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'fontSettings',\n },\n [ChromeApi.GCM]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'gcm',\n },\n [ChromeApi.HISTORY]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background', 'content'],\n namespace: 'history',\n },\n [ChromeApi.I18N]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['all'],\n namespace: 'i18n',\n },\n [ChromeApi.IDENTITY]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'identity',\n },\n [ChromeApi.IDLE]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'idle',\n },\n [ChromeApi.INPUT_IME]: {\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'input.ime',\n },\n [ChromeApi.INSTANCE_ID]: {\n minChromeVersion: 44,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'instanceID',\n },\n [ChromeApi.LOGIN_STATE]: {\n minChromeVersion: 78,\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'loginState',\n },\n [ChromeApi.MANAGEMENT]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'management',\n },\n [ChromeApi.NOTIFICATIONS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'notifications',\n },\n [ChromeApi.OFFSCREEN]: {\n minChromeVersion: 109,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'offscreen',\n },\n [ChromeApi.OMNIBOX]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'omnibox',\n },\n [ChromeApi.PAGE_CAPTURE]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'pageCapture',\n },\n [ChromeApi.PERMISSIONS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background', 'content'],\n namespace: 'permissions',\n },\n [ChromeApi.PLATFORM_KEYS]: {\n minChromeVersion: 45,\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'platformKeys',\n },\n [ChromeApi.POWER]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'power',\n },\n [ChromeApi.PRINTER_PROVIDER]: {\n minChromeVersion: 44,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'printerProvider',\n },\n [ChromeApi.PRINTING]: {\n minChromeVersion: 81,\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'printing',\n },\n [ChromeApi.PRINTING_METRICS]: {\n minChromeVersion: 79,\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: true,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'printingMetrics',\n },\n [ChromeApi.PRIVACY]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'privacy',\n },\n [ChromeApi.PROCESSES]: {\n platform: 'all',\n channel: 'dev',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'processes',\n },\n [ChromeApi.PROXY]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'proxy',\n },\n [ChromeApi.READING_LIST]: {\n minChromeVersion: 120,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'readingList',\n },\n [ChromeApi.RUNTIME]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['all'],\n namespace: 'runtime',\n },\n [ChromeApi.SCRIPTING]: {\n minChromeVersion: 88,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'scripting',\n },\n [ChromeApi.SEARCH]: {\n minChromeVersion: 87,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'search',\n },\n [ChromeApi.SESSIONS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'sessions',\n },\n [ChromeApi.SIDE_PANEL]: {\n minChromeVersion: 114,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'sidePanel',\n },\n [ChromeApi.STORAGE]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['all'],\n namespace: 'storage',\n },\n [ChromeApi.SYSTEM_CPU]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'system.cpu',\n },\n [ChromeApi.SYSTEM_DISPLAY]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'system.display',\n },\n [ChromeApi.SYSTEM_MEMORY]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'system.memory',\n },\n [ChromeApi.SYSTEM_STORAGE]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'system.storage',\n },\n [ChromeApi.SYSTEM_LOG]: {\n minChromeVersion: 125,\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: true,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'systemLog',\n },\n [ChromeApi.TAB_CAPTURE]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'tabCapture',\n },\n [ChromeApi.TAB_GROUPS]: {\n minChromeVersion: 89,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'tabGroups',\n },\n [ChromeApi.TABS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background', 'content'],\n namespace: 'tabs',\n },\n [ChromeApi.TOP_SITES]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'topSites',\n },\n [ChromeApi.TTS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'tts',\n },\n [ChromeApi.TTS_ENGINE]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'ttsEngine',\n },\n [ChromeApi.TYPES]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['all'],\n namespace: 'types',\n },\n [ChromeApi.USER_SCRIPTS]: {\n minChromeVersion: 120,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'userScripts',\n },\n [ChromeApi.VPN_PROVIDER]: {\n minChromeVersion: 43,\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'vpnProvider',\n },\n [ChromeApi.WALLPAPER]: {\n minChromeVersion: 43,\n platform: 'chromeos',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'wallpaper',\n },\n [ChromeApi.WEB_AUTHENTICATION_PROXY]: {\n minChromeVersion: 115,\n platform: 'all',\n channel: 'stable',\n manifestVersions: [3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'webAuthenticationProxy',\n },\n [ChromeApi.WEB_NAVIGATION]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'webNavigation',\n },\n [ChromeApi.WEB_REQUEST]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'webRequest',\n },\n [ChromeApi.WINDOWS]: {\n platform: 'all',\n channel: 'stable',\n manifestVersions: [2, 3],\n requiresPolicy: false,\n foregroundOnly: false,\n contexts: ['background'],\n namespace: 'windows',\n },\n} as const satisfies Record<ChromeApi, ChromeApiMetadata>;\n\n/**\n * Helper function to check if an API is available in the current context\n */\nexport function isApiAvailable(\n api: ChromeApi,\n context: ChromeContext,\n manifestVersion: 2 | 3,\n platform: ChromePlatform = 'all',\n chromeVersion?: number\n): boolean {\n const metadata = CHROME_API_REGISTRY[api];\n\n // Check context\n // @ts-expect-error - this is a hack to get the type to work\n if (!metadata.contexts.includes(context) && !metadata.contexts.includes('all')) {\n return false;\n }\n\n // Check manifest version\n // @ts-expect-error - this is a hack to get the type to work\n if (!metadata.manifestVersions.includes(manifestVersion)) {\n return false;\n }\n\n // Check platform\n if (metadata.platform !== 'all' && metadata.platform !== platform) {\n return false;\n }\n\n // @ts-expect-error - this is a hack to get the type to work\n // Check Chrome version\n if (metadata.minChromeVersion && chromeVersion && chromeVersion < metadata.minChromeVersion) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Get the Chrome API object reference by API enum\n */\nexport function getChromeApiReference(api: ChromeApi): any {\n const metadata = CHROME_API_REGISTRY[api];\n const parts = metadata.namespace.split('.');\n\n let ref: any = chrome;\n for (const part of parts) {\n ref = ref?.[part];\n if (!ref) return undefined;\n }\n\n return ref;\n}\n\n/**\n * Get all available APIs for a given context and manifest version\n */\nexport function getAvailableApis(\n context: ChromeContext,\n manifestVersion: 2 | 3,\n platform: ChromePlatform = 'all',\n chromeVersion?: number\n): ChromeApi[] {\n return Object.values(ChromeApi).filter((api) =>\n isApiAvailable(api, context, manifestVersion, platform, chromeVersion)\n );\n}\n"]}