Skip to main content
Glama

firefox-devtools-mcp

smoke.test.ts5.81 kB
/** * Smoke tests for firefox-devtools-mcp * * These tests verify basic functionality without requiring a Firefox instance. * More comprehensive integration tests should be added as the project matures. */ import { describe, it, expect } from 'vitest'; import { SERVER_NAME, SERVER_VERSION } from '../src/config/constants.js'; describe('Smoke Tests', () => { describe('Constants', () => { it('should have correct server name', () => { expect(SERVER_NAME).toBe('firefox-devtools'); }); it('should have valid server version', () => { expect(SERVER_VERSION).toMatch(/^\d+\.\d+\.\d+/); expect(SERVER_VERSION).toBe('0.2.1'); }); }); describe('Module imports', () => { it('should import tools without errors', async () => { const { listPagesTool } = await import('../src/tools/pages.js'); const { takeSnapshotTool } = await import('../src/tools/snapshot.js'); const { listConsoleMessagesTool } = await import('../src/tools/console.js'); const { listNetworkRequestsTool } = await import('../src/tools/network.js'); expect(listPagesTool).toBeDefined(); expect(listPagesTool.name).toBe('list_pages'); expect(takeSnapshotTool).toBeDefined(); expect(takeSnapshotTool.name).toBe('take_snapshot'); expect(listConsoleMessagesTool).toBeDefined(); expect(listConsoleMessagesTool.name).toBe('list_console_messages'); expect(listNetworkRequestsTool).toBeDefined(); expect(listNetworkRequestsTool.name).toBe('list_network_requests'); }); it('should import utils without errors', async () => { const responseHelpers = await import('../src/utils/response-helpers.js'); expect(responseHelpers.successResponse).toBeDefined(); expect(responseHelpers.errorResponse).toBeDefined(); expect(responseHelpers.jsonResponse).toBeDefined(); }); }); describe('Tool schemas', () => { it('should have valid inputSchema for pages tools', async () => { const { listPagesTool, selectPageTool, navigatePageTool } = await import( '../src/tools/pages.js' ); expect(listPagesTool.inputSchema).toBeDefined(); expect(listPagesTool.inputSchema.type).toBe('object'); expect(selectPageTool.inputSchema).toBeDefined(); expect(selectPageTool.inputSchema.type).toBe('object'); expect(navigatePageTool.inputSchema).toBeDefined(); expect(navigatePageTool.inputSchema.type).toBe('object'); }); it('should have valid inputSchema for snapshot tool', async () => { const { takeSnapshotTool } = await import('../src/tools/snapshot.js'); expect(takeSnapshotTool.inputSchema).toBeDefined(); expect(takeSnapshotTool.inputSchema.type).toBe('object'); expect(takeSnapshotTool.inputSchema.properties).toBeDefined(); expect(takeSnapshotTool.inputSchema.properties?.maxLines).toBeDefined(); expect(takeSnapshotTool.inputSchema.properties?.includeAttributes).toBeDefined(); expect(takeSnapshotTool.inputSchema.properties?.includeText).toBeDefined(); expect(takeSnapshotTool.inputSchema.properties?.maxDepth).toBeDefined(); }); it('should have valid inputSchema for console tool', async () => { const { listConsoleMessagesTool } = await import('../src/tools/console.js'); expect(listConsoleMessagesTool.inputSchema).toBeDefined(); expect(listConsoleMessagesTool.inputSchema.type).toBe('object'); expect(listConsoleMessagesTool.inputSchema.properties).toBeDefined(); expect(listConsoleMessagesTool.inputSchema.properties?.level).toBeDefined(); expect(listConsoleMessagesTool.inputSchema.properties?.textContains).toBeDefined(); expect(listConsoleMessagesTool.inputSchema.properties?.source).toBeDefined(); expect(listConsoleMessagesTool.inputSchema.properties?.format).toBeDefined(); }); it('should have valid inputSchema for network tool', async () => { const { listNetworkRequestsTool } = await import('../src/tools/network.js'); expect(listNetworkRequestsTool.inputSchema).toBeDefined(); expect(listNetworkRequestsTool.inputSchema.type).toBe('object'); expect(listNetworkRequestsTool.inputSchema.properties).toBeDefined(); expect(listNetworkRequestsTool.inputSchema.properties?.urlContains).toBeDefined(); expect(listNetworkRequestsTool.inputSchema.properties?.method).toBeDefined(); expect(listNetworkRequestsTool.inputSchema.properties?.format).toBeDefined(); }); }); describe('Response helpers', () => { it('should create success response', async () => { const { successResponse } = await import('../src/utils/response-helpers.js'); const response = successResponse('Test message'); expect(response).toHaveProperty('content'); expect(response.content).toEqual([ { type: 'text', text: 'Test message', }, ]); }); it('should create error response', async () => { const { errorResponse } = await import('../src/utils/response-helpers.js'); const response = errorResponse('Test error'); expect(response).toHaveProperty('content'); expect(response.content).toEqual([ { type: 'text', text: 'Error: Test error', }, ]); expect(response).toHaveProperty('isError', true); }); it('should create JSON response', async () => { const { jsonResponse } = await import('../src/utils/response-helpers.js'); const data = { foo: 'bar', count: 42 }; const response = jsonResponse(data); expect(response).toHaveProperty('content'); expect(response.content).toEqual([ { type: 'text', text: JSON.stringify(data, null, 2), }, ]); }); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/freema/firefox-devtools-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server