export const tools = [
{
name: 'navigate',
description: 'Navega para uma URL específica e carrega a página completamente',
inputSchema: {
type: 'object',
properties: {
url: {
type: 'string',
description: 'URL completa para navegar (deve incluir http:// ou https://)',
},
waitUntil: {
type: 'string',
enum: ['load', 'domcontentloaded', 'networkidle0', 'networkidle2'],
description: 'Condição de espera (padrão: networkidle2)',
default: 'networkidle2',
},
timeout: {
type: 'number',
description: 'Timeout em milissegundos (padrão: 30000)',
default: 30000,
},
},
required: ['url'],
},
},
{
name: 'get_dom',
description: 'Extrai o HTML completo do DOM atual da página',
inputSchema: {
type: 'object',
properties: {
prettify: {
type: 'boolean',
description: 'Se true, formata o HTML de forma legível',
default: true,
},
},
},
},
{
name: 'get_element',
description: 'Inspeciona um elemento específico usando seletor CSS',
inputSchema: {
type: 'object',
properties: {
selector: {
type: 'string',
description: "Seletor CSS do elemento (ex: '#id', '.class', 'div.container')",
},
includeStyles: {
type: 'boolean',
description: 'Incluir estilos computados do elemento',
default: true,
},
includeAttributes: {
type: 'boolean',
description: 'Incluir todos os atributos do elemento',
default: true,
},
},
required: ['selector'],
},
},
{
name: 'execute_js',
description: 'Executa código JavaScript arbitrário no contexto da página',
inputSchema: {
type: 'object',
properties: {
code: {
type: 'string',
description: 'Código JavaScript para executar',
},
returnValue: {
type: 'boolean',
description: 'Se true, retorna o valor da execução',
default: true,
},
},
required: ['code'],
},
},
{
name: 'screenshot',
description: 'Captura uma screenshot da página ou de um elemento específico',
inputSchema: {
type: 'object',
properties: {
selector: {
type: 'string',
description: 'Seletor CSS do elemento (opcional, captura página inteira se omitido)',
},
fullPage: {
type: 'boolean',
description: 'Capturar página inteira incluindo scroll',
default: false,
},
path: {
type: 'string',
description: "Caminho para salvar a screenshot (ex: './screenshot.png')",
},
},
},
},
{
name: 'get_console_logs',
description: 'Recupera todos os logs do console capturados desde a última navegação',
inputSchema: {
type: 'object',
properties: {
filterType: {
type: 'string',
enum: ['all', 'log', 'error', 'warning', 'info'],
description: 'Filtrar por tipo de log',
default: 'all',
},
clear: {
type: 'boolean',
description: 'Limpar logs após recuperação',
default: false,
},
},
},
},
{
name: 'get_network_activity',
description: 'Recupera todas as requisições de rede capturadas',
inputSchema: {
type: 'object',
properties: {
filterType: {
type: 'string',
enum: ['all', 'request', 'response'],
description: 'Filtrar por tipo',
default: 'all',
},
clear: {
type: 'boolean',
description: 'Limpar histórico após recuperação',
default: false,
},
},
},
},
{
name: 'get_page_source',
description: 'Extrai todo o código fonte da página incluindo scripts, styles e recursos',
inputSchema: {
type: 'object',
properties: {
includeScripts: {
type: 'boolean',
description: 'Incluir conteúdo de todos os scripts',
default: true,
},
includeStyles: {
type: 'boolean',
description: 'Incluir conteúdo de todos os estilos',
default: true,
},
},
},
},
{
name: 'query_selector_all',
description: 'Busca todos os elementos que correspondem ao seletor CSS',
inputSchema: {
type: 'object',
properties: {
selector: {
type: 'string',
description: 'Seletor CSS',
},
limit: {
type: 'number',
description: 'Limitar número de resultados',
default: 100,
},
},
required: ['selector'],
},
},
{
name: 'get_page_info',
description: 'Obtém informações gerais sobre a página atual',
inputSchema: {
type: 'object',
properties: {},
},
},
{
name: 'click_element',
description: 'Clica em um elemento da página',
inputSchema: {
type: 'object',
properties: {
selector: {
type: 'string',
description: 'Seletor CSS do elemento para clicar',
},
waitForNavigation: {
type: 'boolean',
description: 'Aguardar navegação após o clique',
default: false,
},
},
required: ['selector'],
},
},
{
name: 'type_text',
description: 'Digita texto em um campo de input',
inputSchema: {
type: 'object',
properties: {
selector: {
type: 'string',
description: 'Seletor CSS do campo de input',
},
text: {
type: 'string',
description: 'Texto para digitar',
},
clearFirst: {
type: 'boolean',
description: 'Limpar campo antes de digitar',
default: true,
},
},
required: ['selector', 'text'],
},
},
{
name: 'get_local_storage',
description: 'Obtém todos os dados do localStorage',
inputSchema: {
type: 'object',
properties: {},
},
},
{
name: 'get_cookies',
description: 'Obtém todos os cookies da página atual',
inputSchema: {
type: 'object',
properties: {},
},
},
{
name: 'evaluate_xpath',
description: 'Avalia uma expressão XPath e retorna os elementos correspondentes',
inputSchema: {
type: 'object',
properties: {
xpath: {
type: 'string',
description: 'Expressão XPath',
},
},
required: ['xpath'],
},
},
{
name: 'get_browser_status',
description:
'SEMPRE USE ESTA FERRAMENTA PRIMEIRO! Verifica se o browser está aberto ou fechado. NUNCA abra um novo browser se ele já estiver aberto, isso fecharia a sessão atual e perderia o login.',
inputSchema: {
type: 'object',
properties: {},
},
},
{
name: 'close_browser',
description:
'Fecha o browser e encerra a sessão. ⚠️ ATENÇÃO: Isso irá perder todos os cookies, localStorage e sessões de login! Use apenas quando o usuário pedir explicitamente para fechar o browser.',
inputSchema: {
type: 'object',
properties: {},
},
},
{
name: 'open_browser',
description:
'Abre o browser em modo VISÍVEL (headful) APENAS se ele estiver FECHADO. ⚠️ IMPORTANTE: Use get_browser_status ANTES para verificar se já existe um browser aberto! Se já estiver aberto, NÃO use esta ferramenta pois isso fechará a sessão atual.',
inputSchema: {
type: 'object',
properties: {
url: {
type: 'string',
description: 'URL para abrir (opcional, se não fornecido abre em about:blank)',
},
headless: {
type: 'boolean',
description: 'Se false, o browser fica visível (recomendado: false)',
default: false,
},
width: {
type: 'number',
description: 'Largura da janela do browser',
default: 1920,
},
height: {
type: 'number',
description: 'Altura da janela do browser',
default: 1080,
},
},
},
},
{
name: 'login',
description:
'Faz login automatizado em um site web usando seletores CSS. A sessão permanece ativa para uso posterior.',
inputSchema: {
type: 'object',
properties: {
url: {
type: 'string',
description: 'URL da página de login',
},
usernameSelector: {
type: 'string',
description:
'Seletor CSS do campo de username/email (ex: "#username", "input[name=email]")',
},
passwordSelector: {
type: 'string',
description: 'Seletor CSS do campo de senha (ex: "#password", "input[type=password]")',
},
submitSelector: {
type: 'string',
description: 'Seletor CSS do botão de submit (ex: "button[type=submit]", ".login-btn")',
},
username: {
type: 'string',
description: 'Username ou email para login',
},
password: {
type: 'string',
description: 'Senha para login',
},
waitForSelector: {
type: 'string',
description:
'Seletor CSS para confirmar login bem-sucedido (opcional, ex: ".user-dashboard")',
},
timeout: {
type: 'number',
description: 'Timeout em milissegundos (padrão: 30000)',
default: 30000,
},
delayAfterType: {
type: 'number',
description: 'Delay após digitar em ms, útil para SPAs/React (padrão: 500)',
default: 500,
},
},
required: [
'url',
'usernameSelector',
'passwordSelector',
'submitSelector',
'username',
'password',
],
},
},
] as const;