Skip to main content
Glama
schemas.ts8.47 kB
import { z } from 'zod'; // Common schemas const tabIdSchema = z.string().optional().describe('Tab ID to operate on (uses active tab if not specified)'); const selectorSchema = z.string().min(1).describe('CSS selector for the element'); const timeoutSchema = z.number().int().min(100).max(120000).optional().describe('Timeout in milliseconds'); const waitUntilSchema = z.enum(['load', 'domcontentloaded', 'networkidle0', 'networkidle2']).optional(); // Tab tools schemas export const listTabsSchema = z.object({}); export const newTabSchema = z.object({ url: z.string().url().optional().describe('URL to navigate to in the new tab'), }); export const closeTabSchema = z.object({ tabId: tabIdSchema, }); export const switchTabSchema = z.object({ tabId: z.string().describe('Tab ID to switch to'), }); // Navigation schemas export const navigateSchema = z.object({ url: z.string().url().describe('URL to navigate to'), waitUntil: waitUntilSchema.describe('When to consider navigation complete'), timeout: timeoutSchema, tabId: tabIdSchema, }); export const reloadSchema = z.object({ waitUntil: waitUntilSchema, timeout: timeoutSchema, tabId: tabIdSchema, }); export const goBackSchema = z.object({ waitUntil: waitUntilSchema, timeout: timeoutSchema, tabId: tabIdSchema, }); export const goForwardSchema = z.object({ waitUntil: waitUntilSchema, timeout: timeoutSchema, tabId: tabIdSchema, }); // Interaction schemas export const clickSchema = z.object({ selector: selectorSchema, button: z.enum(['left', 'right', 'middle']).optional().default('left').describe('Mouse button to click'), clickCount: z.number().int().min(1).max(3).optional().default(1).describe('Number of clicks'), delay: z.number().int().min(0).max(5000).optional().describe('Delay between mousedown and mouseup in ms'), timeout: timeoutSchema, tabId: tabIdSchema, }); export const fillSchema = z.object({ selector: selectorSchema, value: z.string().describe('Text value to fill'), clearFirst: z.boolean().optional().default(true).describe('Clear the field before filling'), timeout: timeoutSchema, tabId: tabIdSchema, }); export const selectSchema = z.object({ selector: selectorSchema, values: z.array(z.string()).min(1).describe('Option values to select'), timeout: timeoutSchema, tabId: tabIdSchema, }); export const hoverSchema = z.object({ selector: selectorSchema, timeout: timeoutSchema, tabId: tabIdSchema, }); export const focusSchema = z.object({ selector: selectorSchema, timeout: timeoutSchema, tabId: tabIdSchema, }); // Input schemas export const keyboardSchema = z.object({ key: z.string().min(1).describe('Key to press (e.g., "Enter", "Tab", "a")'), modifiers: z.array(z.enum(['Alt', 'Control', 'Meta', 'Shift'])).optional().default([]).describe('Modifier keys to hold'), tabId: tabIdSchema, }); export const mouseSchema = z.object({ x: z.number().describe('X coordinate'), y: z.number().describe('Y coordinate'), button: z.enum(['left', 'right', 'middle']).optional().default('left'), action: z.enum(['move', 'click', 'down', 'up']).optional().default('click').describe('Mouse action to perform'), tabId: tabIdSchema, }); export const scrollSchema = z.object({ direction: z.enum(['up', 'down', 'left', 'right']).optional().default('down'), amount: z.number().int().min(1).optional().default(100).describe('Scroll amount in pixels'), selector: z.string().optional().describe('Element to scroll (scrolls page if not specified)'), smooth: z.boolean().optional().default(true).describe('Use smooth scrolling'), tabId: tabIdSchema, }); // Content schemas export const evaluateSchema = z.object({ script: z.string().min(1).max(50000).describe('JavaScript code to execute'), tabId: tabIdSchema, }); export const getContentSchema = z.object({ selector: z.string().optional().describe('Element selector (returns full page content if not specified)'), type: z.enum(['html', 'text']).optional().default('text').describe('Content type to return'), tabId: tabIdSchema, }); export const querySelectorSchema = z.object({ selector: selectorSchema, tabId: tabIdSchema, }); // Waiting schemas export const waitForSelectorSchema = z.object({ selector: selectorSchema, visible: z.boolean().optional().default(false).describe('Wait for element to be visible'), hidden: z.boolean().optional().default(false).describe('Wait for element to be hidden'), timeout: timeoutSchema, tabId: tabIdSchema, }); export const waitForNavigationSchema = z.object({ waitUntil: waitUntilSchema, timeout: timeoutSchema, tabId: tabIdSchema, }); export const waitSchema = z.object({ ms: z.number().int().min(0).max(30000).describe('Time to wait in milliseconds'), }); // Media schemas export const screenshotSchema = z.object({ fullPage: z.boolean().optional().default(false).describe('Capture full scrollable page'), selector: z.string().optional().describe('Element to screenshot (screenshots viewport if not specified)'), format: z.enum(['png', 'jpeg', 'webp']).optional().default('png'), quality: z.number().int().min(0).max(100).optional().describe('Image quality (jpeg/webp only)'), width: z.number().int().min(200).max(4000).optional().describe('Viewport width in pixels (default 1024)'), height: z.number().int().min(200).max(4000).optional().describe('Viewport height in pixels (default 768)'), scale: z.number().min(0.5).max(3).optional().describe('Device scale factor (default 1, use 2 for retina)'), tabId: tabIdSchema, }); export const pdfSchema = z.object({ format: z.enum(['Letter', 'Legal', 'Tabloid', 'Ledger', 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6']).optional().default('A4'), landscape: z.boolean().optional().default(false), printBackground: z.boolean().optional().default(true), margin: z.object({ top: z.string().optional(), right: z.string().optional(), bottom: z.string().optional(), left: z.string().optional(), }).optional(), tabId: tabIdSchema, }); // Cookies schemas export const getCookiesSchema = z.object({ urls: z.array(z.string().url()).optional().describe('URLs to get cookies for (uses current page URL if not specified)'), tabId: tabIdSchema, }); export const setCookiesSchema = z.object({ cookies: z.array(z.object({ name: z.string(), value: z.string(), domain: z.string().optional(), path: z.string().optional().default('/'), expires: z.number().optional().describe('Unix timestamp when cookie expires'), httpOnly: z.boolean().optional(), secure: z.boolean().optional(), sameSite: z.enum(['Strict', 'Lax', 'None']).optional(), })).min(1), tabId: tabIdSchema, }); export const deleteCookiesSchema = z.object({ names: z.array(z.string()).min(1).describe('Cookie names to delete'), tabId: tabIdSchema, }); // Type exports export type ListTabsInput = z.infer<typeof listTabsSchema>; export type NewTabInput = z.infer<typeof newTabSchema>; export type CloseTabInput = z.infer<typeof closeTabSchema>; export type SwitchTabInput = z.infer<typeof switchTabSchema>; export type NavigateInput = z.infer<typeof navigateSchema>; export type ReloadInput = z.infer<typeof reloadSchema>; export type GoBackInput = z.infer<typeof goBackSchema>; export type GoForwardInput = z.infer<typeof goForwardSchema>; export type ClickInput = z.infer<typeof clickSchema>; export type FillInput = z.infer<typeof fillSchema>; export type SelectInput = z.infer<typeof selectSchema>; export type HoverInput = z.infer<typeof hoverSchema>; export type FocusInput = z.infer<typeof focusSchema>; export type KeyboardInput = z.infer<typeof keyboardSchema>; export type MouseInput = z.infer<typeof mouseSchema>; export type ScrollInput = z.infer<typeof scrollSchema>; export type EvaluateInput = z.infer<typeof evaluateSchema>; export type GetContentInput = z.infer<typeof getContentSchema>; export type QuerySelectorInput = z.infer<typeof querySelectorSchema>; export type WaitForSelectorInput = z.infer<typeof waitForSelectorSchema>; export type WaitForNavigationInput = z.infer<typeof waitForNavigationSchema>; export type WaitInput = z.infer<typeof waitSchema>; export type ScreenshotInput = z.infer<typeof screenshotSchema>; export type PdfInput = z.infer<typeof pdfSchema>; export type GetCookiesInput = z.infer<typeof getCookiesSchema>; export type SetCookiesInput = z.infer<typeof setCookiesSchema>; export type DeleteCookiesInput = z.infer<typeof deleteCookiesSchema>;

Implementation Reference

Latest Blog Posts

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/andytango/puppeteer-mcp'

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