DOM Analyzer MCP Server
DOM Analyzer MCP Server
Introduzione
Il progetto dom-analyzer-mcp è un DOM Analyzer/E2E server MCP basato su Puppeteer per controllare un'app frontend in un URL configurabile.
Percorso:
server.tsStack: Model Context Protocol (MCP) + Puppeteer
Obiettivo: fornire comandi remoti di debug, test e ispezione DOM/CSS rete.
Configurazione esterna
File: config.json
Esempio:
{
"targetUrl": "http://localhost:4200",
"headless": true
}targetUrl: URL dell'app da esplorare (es. server dev locale)headless: booleano per avvio Puppeteer headless
Struttura generale
Variabili di stato globali:
browser: Browser(Puppeteer)page: Page(Puppeteer)networkRequests: {url, method, status?, response?}[]consoleErrors: string[]
Core:
initBrowser(url = 'http://localhost:4200'): inizializza Puppeteer con retry, intercetta request/response.main(): avvia il server MCP, registra console errors e connetteStdioServerTransport.
Tool MCP disponibili
1) take_screenshot
Scatta uno screenshot della pagina o elemento selezionato.
Input:
selector(opzionale): CSS selector dell'elemento.navigateTo(opzionale): URL da visitare prima di catturare.
Output:
contentcontexteimage(base64 PNG).
2) read_dom
Restituisce l'HTML (outerHTML) del body o elemento specificato.
Input:
selector(opzionale): CSS selector.
Output:
content[0].text= HTML.
3) get_computed_styles
Recupera gli stili computati di un elemento.
Input:
selector(required)properties(array di string, opzionale)
Output:
JSON con proprietà CSS richieste o tutte.
4) get_network_requests
Lista chiamate HTTP intercettate.
Input:
filterUrl(opzionale)filterMethod(opzionale, GET/POST/PUT/DELETE/PATCH)limit(opzionale, default 50)
Output:
JSON array richieste.
5) execute_js
Esegue JS nella pagina e ritorna il risultato.
Input:
script(string)
Output:
JSON value o errore.
6) navigate_to
Naviga a URL o route dell'app.
Input:
url(obbligatorio)
Behaviour:
page.goto+ resetnetworkRequests.
7) get_console_errors
Recupera console error/warn catturati.
Output:
lista errori (stringhe) o
Nessun errore in console.
8) click
Simula click su elemento.
Input:
selector(obbligatorio)
Behaviour:
page.waitForSelector(selector)+page.click(selector).
9) type
Inserisce testo in input.
Input:
selector(obbligatorio)text(obbligatorio)
Behaviour:
page.waitForSelector(selector)+page.type(selector, text).
10) wait_for_selector
Attende elemento nel DOM.
Input:
selector(obbligatorio)timeout(opzionale, default 10000ms)
11) reset_app
Resetta stato app e ricarica.
Behaviour:
pulisce localStorage/sessionStorage/cookie
page.goto('http://localhost:4200')reset
networkRequests
12) get_storage
Legge local/sessionStorage.
Input:
type(localStorage|sessionStorage, defaultlocalStorage)key(opzionale)
13) set_storage
Scrive local/sessionStorage.
Input:
type(localStorage|sessionStorage, defaultlocalStorage)key(string)value(string)
14) get_performance_metrics
Restituisce metriche di performance Puppeteer + window.performance.
Output:
JSON con
metricseperfTiming.
Comandi consigliati per test e debug
reset_appper stato deterministico.wait_for_selectorprima di click/type su elementi dinamici.get_network_requestsper validare API call.get_console_errorsper errori JS.get_computed_stylesper assertion visuale.
Suggerimenti operativi (migliorie future)
Aggiungere
assert_*(assertElementVisible, assertText) come tool.Aggiungere opzione
headless/headfuldinamica.Implementare
screenshot_diffepage_trace.Aggiungere supporto per multi-page
targeteframe.
Esempio d'uso rapido (MCP request)
{
"name": "take_screenshot",
"input": {"navigateTo": "http://localhost:4200"}
}{
"name": "click",
"input": {"selector": "button#submit"}
}{
"name": "get_network_requests",
"input": {"filterMethod": "GET", "limit": 20}
}Avvio server
Eseguire da terminale:
cd dom-analyzer-mcp
PUPPETEER_SKIP_DOWNLOAD=true npm i
npm run build
npm startIl server continua a leggere da stdin/stdout e risponde alle chiamate MCP.
Made by Elia at 01:15am >:)
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/sudo-elia/dom-analyzer-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server