Skip to main content
Glama
TKMD
by TKMD

page.analyze

Read-onlyIdempotent

Analyze web pages by detecting layout structure, extracting motion patterns, and evaluating quality in parallel for unified results.

Instructions

Analyze a web page URL with layout detection, motion pattern extraction, and quality evaluation. Executes layout.ingest, motion.detect, and quality.evaluate in parallel and returns unified results. Supports MCP streaming progress via _meta.progressToken for real-time phase notifications.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesTarget URL to analyze (required)
asyncNoAsync mode (default: auto). true: enqueue a BullMQ job and return a jobId immediately (poll with page.getJobStatus). false: synchronous processing. When omitted, auto-enabled if Vision is on and Redis is available (Vision LLM exceeds the MCP timeout in CPU mode). Requires Redis when true.
summaryNoReturn summary response (default: true). Set to false for full details.
timeoutNoOverall timeout in ms (default: 600000)
featuresNoFeature flags for analysis (default: all true)
waitUntilNoPage load completion criteria (default: networkidle)networkidle
auto_retryNoEnable staged auto-retry on HTML fetch failure (default: true). Retries with progressively longer timeouts and relaxed waitUntil.
sourceTypeNoSource type: award_gallery or user_provided (default)user_provided
usageScopeNoUsage scope: inspiration_only (default) or owned_assetinspiration_only
max_retriesNoMaximum retry attempts when auto_retry is true (default: 3).
auto_timeoutNoEnable Pre-flight Probe for dynamic timeout calculation (v0.1.0). Analyzes page complexity (WebGL, SPA, heavy frameworks) before analysis and calculates optimal timeout. Results are included in preflightProbe response field.
layout_firstNoLayout-first mode for WebGL/Three.js sites (default: auto). auto: prioritise layout when WebGL is detected. always: always prioritise layout. never: legacy parallel processing.auto
auto_snapshotNoAuto-save design snapshot after analysis (default: false). Creates a point-in-time record for design.track_changes comparison.
layoutOptionsNoLayout analysis options
layoutTimeoutNoPer-phase timeout for layout analysis in ms (default: 120000).
motionOptionsNoMotion detection options
motionTimeoutNoPer-phase timeout for motion detection in ms (default: 300000).
visionOptionsNoVision CPU completion-guarantee options (Phase 3). Controls Vision model (Ollama llama3.2-vision) inference timeout, image optimisation, CPU forcing, and graceful degradation.
qualityOptionsNoQuality evaluation options
qualityTimeoutNoPer-phase timeout for quality evaluation in ms (default: 60000).
partial_resultsNoAllow partial results on timeout (default: true). When true, returns results from completed phases on timeout.
narrativeOptionsNoNarrative analysis options. Analyzes the page's worldview/atmosphere and layout structure. enabled=true to activate.
timeout_strategyNoTimeout strategy. strict: fail completely on timeout. progressive: return partial results on timeout (default).progressive
responsiveOptionsNoResponsive layout analysis options. Captures layouts at multiple viewport sizes (desktop/tablet/mobile) and detects differences in typography, spacing, navigation, and layout structure.
performanceOptionsNoPerformance evaluation options (v0.3.0 Phase 7.5b, opt-in). Core Web Vitals (LCP/FID/CLS/INP/TTFB) measurement. Timeout: 40s. Disabled by default.
respect_robots_txtNoRespect robots.txt (RFC 9309). Set to false to ignore.
accessibilityOptionsNoAccessibility audit options (v0.3.0 Phase 7.5a, opt-in). WCAG 2.1 AA compliance audit via axe-core. Timeout: 10s. Disabled by default.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed32 schema fields changedv0.6.0
    • addedInput schema / properties / async
      Added value: +{
      +  "description": "Async mode (default: auto). true: enqueue a BullMQ job and return a jobId immediately (poll with page.getJobStatus). false: synchronous processing. When omitted, auto-enabled if Vision is on and Redis is available (Vision LLM exceeds the MCP timeout in CPU mode). Requires Redis when true.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / auto_retry
      Added value: +{
      +  "default": true,
      +  "description": "Enable staged auto-retry on HTML fetch failure (default: true). Retries with progressively longer timeouts and relaxed waitUntil.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / layoutOptions / properties / perSectionVision
      Added value: +{
      +  "default": true,
      +  "description": "Enable per-section Vision analysis for more accurate semantic search. Requires useVision=true. Increases processing time. (default: true) / セクション単位のVision解析を有効化(処理時間増加、デフォルト: true)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / layoutOptions / properties / scrollVision
      Added value: +{
      +  "default": true,
      +  "description": "Scroll-position Smart Capture + Vision analysis at section boundaries (async mode only, default: true) / スクロール位置スマートキャプチャ + Vision解析(asyncモードのみ、デフォルト: true)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / layoutOptions / properties / scrollVisionMaxCaptures
      Added value: +{
      +  "default": 10,
      +  "description": "Maximum number of scroll positions to capture (default: 10) / キャプチャするスクロール位置の最大数(デフォルト: 10)",
      +  "maximum": 20,
      +  "minimum": 2,
      +  "type": "number"
      +}
    • addedInput schema / properties / layoutOptions / properties / visionBatchSize
      Added value: +{
      +  "default": 5,
      +  "description": "Maximum concurrent Vision API calls when perSectionVision is enabled (default: 5) / perSectionVision有効時の最大並列Vision API呼び出し数(デフォルト: 5)",
      +  "maximum": 10,
      +  "minimum": 1,
      +  "type": "number"
      +}
    • addedInput schema / properties / layoutTimeout
      Added value: +{
      +  "default": 120000,
      +  "description": "Per-phase timeout for layout analysis in ms (default: 120000).",
      +  "maximum": 300000,
      +  "minimum": 5000,
      +  "type": "number"
      +}
    • addedInput schema / properties / layout_first
      Added value: +{
      +  "default": "auto",
      +  "description": "Layout-first mode for WebGL/Three.js sites (default: auto). auto: prioritise layout when WebGL is detected. always: always prioritise layout. never: legacy parallel processing.",
      +  "enum": [
      +    "auto",
      +    "always",
      +    "never"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / max_retries
      Added value: +{
      +  "default": 3,
      +  "description": "Maximum retry attempts when auto_retry is true (default: 3).",
      +  "maximum": 3,
      +  "minimum": 1,
      +  "type": "number"
      +}
    • addedInput schema / properties / motionOptions / properties / detect_webgl_animations
      Added value: +{
      +  "default": true,
      +  "description": "Enable WebGL/Canvas animation detection (Three.js etc.) via frame-based analysis (requires Playwright, default: true) / WebGL/Canvasアニメーション検出(Three.js等、Playwright必要、デフォルト: true)",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / motionOptions / properties / js_animation_options / properties / waitTime / default
      Previous value: -1000New value: +2000
    • changedInput schema / properties / motionOptions / properties / js_animation_options / properties / waitTime / description
      Previous value: -"Wait time in ms after page load before detecting animations (default: 1000)"New value: +"Wait time in ms after page load before detecting animations (default: 2000)"
    • changedInput schema / properties / motionOptions / properties / maxPatterns / default
      Previous value: -100New value: +500
    • changedInput schema / properties / motionOptions / properties / maxPatterns / description
      Previous value: -"Maximum patterns to detect (default: 100)"New value: +"Maximum patterns to detect (default: 500)"
    • addedInput schema / properties / motionOptions / properties / runtime_options
      Added value: +{
      +  "description": "Runtime detection options (active when detection_mode='runtime' or 'hybrid') / ランタイム検出オプション(detection_mode='runtime'または'hybrid'時のみ有効)",
      +  "properties": {
      +    "wait_for_animations": {
      +      "default": 5000,
      +      "description": "Animation wait time in ms (default: 5000) / アニメーション待機時間",
      +      "maximum": 30000,
      +      "minimum": 0,
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / motionOptions / properties / timeout / default
      Previous value: -180000New value: +300000
    • changedInput schema / properties / motionOptions / properties / timeout / description
      Previous value: -"Motion detection timeout in milliseconds. MCP Protocol has a 60-second tool call limit. In async mode (page.analyze with async=true), this limit does not apply, allowing longer detection times for heavy WebGL/Three.js sites. (default: 180000 = 3 minutes, max: 600000 = 10 minutes)"New value: +"Motion detection timeout in milliseconds. MCP Protocol has a 60-second tool call limit. In async mode (page.analyze with async=true), this limit does not apply, allowing longer detection times for heavy WebGL/Three.js sites. (default: 300000 = 5 minutes, max: 600000 = 10 minutes)"
    • addedInput schema / properties / motionOptions / properties / video_options
      Added value: +{
      +  "description": "Video recording + frame analysis options (active when detection_mode='video') / 動画録画+フレーム解析オプション(detection_mode='video'時のみ有効)",
      +  "properties": {
      +    "frame_analysis": {
      +      "description": "Frame analysis options / フレーム解析オプション",
      +      "properties": {
      +        "change_threshold": {
      +          "default": 0.005,
      +          "description": "Change detection threshold (0-1, default: 0.005) / 変化検出閾値",
      +          "maximum": 1,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "fps": {
      +          "default": 15,
      +          "description": "Frame rate (1-30fps, default: 15) / フレームレート",
      +          "maximum": 30,
      +          "minimum": 1,
      +          "type": "number"
      +        },
      +        "gap_tolerance_ms": {
      +          "default": 50,
      +          "description": "Gap tolerance in ms (default: 50) / ギャップ許容時間",
      +          "maximum": 1000,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "min_motion_duration_ms": {
      +          "default": 50,
      +          "description": "Minimum motion duration in ms (default: 50) / 最小モーション継続時間",
      +          "maximum": 10000,
      +          "minimum": 0,
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "move_mouse": {
      +      "default": true,
      +      "description": "Perform mouse-move operations (default: true) / マウス移動操作を行うか",
      +      "type": "boolean"
      +    },
      +    "record_duration": {
      +      "default": 10000,
      +      "description": "Recording duration in ms (default: 10000) / 録画時間",
      +      "maximum": 60000,
      +      "minimum": 1000,
      +      "type": "number"
      +    },
      +    "scroll_page": {
      +      "default": true,
      +      "description": "Perform scroll operations (default: true) / スクロール操作を行うか",
      +      "type": "boolean"
      +    },
      +    "timeout": {
      +      "default": 30000,
      +      "description": "Page load timeout in ms (default: 30000) / ページ読み込みタイムアウト",
      +      "maximum": 120000,
      +      "minimum": 1000,
      +      "type": "number"
      +    },
      +    "viewport": {
      +      "description": "Viewport size / ビューポートサイズ",
      +      "properties": {
      +        "height": {
      +          "maximum": 4096,
      +          "minimum": 240,
      +          "type": "number"
      +        },
      +        "width": {
      +          "maximum": 4096,
      +          "minimum": 320,
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "wait_until": {
      +      "default": "domcontentloaded",
      +      "description": "Page load completion strategy (default: domcontentloaded) / ページロード完了待機戦略",
      +      "enum": [
      +        "load",
      +        "domcontentloaded",
      +        "networkidle"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / motionOptions / properties / webgl_animation_options
      Added value: +{
      +  "description": "WebGL animation detection options (active when detect_webgl_animations=true) / WebGLアニメーション検出オプション(detect_webgl_animations=true時のみ有効)",
      +  "properties": {
      +    "change_threshold": {
      +      "default": 0.005,
      +      "description": "Change detection threshold (0.001-0.5, default: 0.005) / 変化検出閾値",
      +      "maximum": 0.5,
      +      "minimum": 0.001,
      +      "type": "number"
      +    },
      +    "sample_frames": {
      +      "default": 50,
      +      "description": "Number of frames to sample (default: 50) / サンプリングフレーム数",
      +      "maximum": 100,
      +      "minimum": 5,
      +      "type": "number"
      +    },
      +    "sample_interval_ms": {
      +      "default": 100,
      +      "description": "Frame interval in ms (default: 100) / フレーム間隔",
      +      "maximum": 500,
      +      "minimum": 50,
      +      "type": "number"
      +    },
      +    "timeout_ms": {
      +      "default": 120000,
      +      "description": "Detection timeout in ms (default: 120000) / 検出タイムアウト",
      +      "maximum": 180000,
      +      "minimum": 5000,
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / motionTimeout
      Added value: +{
      +  "default": 300000,
      +  "description": "Per-phase timeout for motion detection in ms (default: 300000).",
      +  "maximum": 300000,
      +  "minimum": 5000,
      +  "type": "number"
      +}
    • addedInput schema / properties / narrativeOptions
      Added value: +{
      +  "description": "Narrative analysis options. Analyzes the page's worldview/atmosphere and layout structure. enabled=true to activate.",
      +  "properties": {
      +    "enabled": {
      +      "default": true,
      +      "description": "Enable narrative analysis (default: true)",
      +      "type": "boolean"
      +    },
      +    "generateEmbedding": {
      +      "default": true,
      +      "description": "Generate embeddings as part of narrative analysis (default: true)",
      +      "type": "boolean"
      +    },
      +    "includeVision": {
      +      "default": true,
      +      "description": "Use Vision LLM for higher-precision narrative analysis (default: true)",
      +      "type": "boolean"
      +    },
      +    "saveToDb": {
      +      "default": true,
      +      "description": "Save narrative analysis results to DB (default: true)",
      +      "type": "boolean"
      +    },
      +    "visionTimeoutMs": {
      +      "default": 300000,
      +      "description": "Narrative Vision analysis timeout in ms (default: 300000).",
      +      "maximum": 600000,
      +      "minimum": 30000,
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / partial_results
      Added value: +{
      +  "default": true,
      +  "description": "Allow partial results on timeout (default: true). When true, returns results from completed phases on timeout.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / qualityTimeout
      Added value: +{
      +  "default": 60000,
      +  "description": "Per-phase timeout for quality evaluation in ms (default: 60000).",
      +  "maximum": 60000,
      +  "minimum": 5000,
      +  "type": "number"
      +}
    • addedInput schema / properties / respect_robots_txt
      Added value: +{
      +  "description": "Respect robots.txt (RFC 9309). Set to false to ignore.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / responsiveOptions / properties / breakpoint_resolution
      Added value: +{
      +  "default": "range",
      +  "description": "Breakpoint resolution: 'range' (CSS media query + VP diff estimate) or 'precise' (binary search, ±8px, 3-5x slower). (default: range) / ブレークポイント解像度(preciseは処理時間3-5倍)",
      +  "enum": [
      +    "range",
      +    "precise"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / timeout / default
      Previous value: -60000New value: +600000
    • changedInput schema / properties / timeout / description
      Previous value: -"Overall timeout in ms (default: 60000)"New value: +"Overall timeout in ms (default: 600000)"
    • changedInput schema / properties / timeout / maximum
      Previous value: -300000New value: +600000
    • addedInput schema / properties / timeout_strategy
      Added value: +{
      +  "default": "progressive",
      +  "description": "Timeout strategy. strict: fail completely on timeout. progressive: return partial results on timeout (default).",
      +  "enum": [
      +    "strict",
      +    "progressive"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / visionOptions
      Added value: +{
      +  "description": "Vision CPU completion-guarantee options (Phase 3). Controls Vision model (Ollama llama3.2-vision) inference timeout, image optimisation, CPU forcing, and graceful degradation.",
      +  "properties": {
      +    "visionEnableProgress": {
      +      "default": false,
      +      "description": "Enable progress reporting during long Vision processing (default: false).",
      +      "type": "boolean"
      +    },
      +    "visionFallbackToHtmlOnly": {
      +      "default": true,
      +      "description": "Continue with HTML-only analysis when Vision times out / fails (Graceful Degradation, default: true) / Vision失敗時にHTML解析のみで続行(Graceful Degradation、デフォルト: true)",
      +      "type": "boolean"
      +    },
      +    "visionForceCpu": {
      +      "default": false,
      +      "description": "Force CPU mode even when a GPU is available (default: false).",
      +      "type": "boolean"
      +    },
      +    "visionImageMaxSize": {
      +      "description": "Maximum image size in bytes passed to Vision analysis. Larger images are auto-compressed.",
      +      "maximum": 10000000,
      +      "minimum": 1024,
      +      "type": "number"
      +    },
      +    "visionTimeoutMs": {
      +      "description": "Vision analysis timeout in ms. Auto-calculated from hardware detection when omitted.",
      +      "maximum": 1200000,
      +      "minimum": 1000,
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / waitUntil / default
      Previous value: -"load"New value: +"networkidle"
    • changedInput schema / properties / waitUntil / description
      Previous value: -"Page load completion criteria (default: load)"New value: +"Page load completion criteria (default: networkidle)"
  2. Changed3 schema fields changedv0.3.0
    • addedInput schema / properties / accessibilityOptions
      Added value: +{
      +  "description": "Accessibility audit options (v0.3.0 Phase 7.5a, opt-in). WCAG 2.1 AA compliance audit via axe-core. Timeout: 10s. Disabled by default.",
      +  "properties": {
      +    "enabled": {
      +      "default": false,
      +      "description": "Enable accessibility audit (default: false)",
      +      "type": "boolean"
      +    },
      +    "include_contrast": {
      +      "default": true,
      +      "description": "Include OKLCH contrast ratio check (default: true)",
      +      "type": "boolean"
      +    },
      +    "level": {
      +      "default": "AA",
      +      "description": "WCAG conformance level (default: AA)",
      +      "enum": [
      +        "A",
      +        "AA",
      +        "AAA"
      +      ],
      +      "type": "string"
      +    },
      +    "save_to_db": {
      +      "default": true,
      +      "description": "Save audit results to DB (default: true)",
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / auto_snapshot
      Added value: +{
      +  "default": false,
      +  "description": "Auto-save design snapshot after analysis (default: false). Creates a point-in-time record for design.track_changes comparison.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / performanceOptions
      Added value: +{
      +  "description": "Performance evaluation options (v0.3.0 Phase 7.5b, opt-in). Core Web Vitals (LCP/FID/CLS/INP/TTFB) measurement. Timeout: 40s. Disabled by default.",
      +  "properties": {
      +    "budget": {
      +      "description": "Custom performance budget (default: Google recommended LCP<2.5s, CLS<0.1, FID<100ms, TTFB<800ms, INP<200ms)",
      +      "type": "object"
      +    },
      +    "enabled": {
      +      "default": false,
      +      "description": "Enable performance evaluation (default: false)",
      +      "type": "boolean"
      +    },
      +    "include_screenshots": {
      +      "default": false,
      +      "description": "Include screenshots in response (default: false)",
      +      "type": "boolean"
      +    },
      +    "save_to_db": {
      +      "default": true,
      +      "description": "Save evaluation results to DB (default: true)",
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
  3. Addedv0.1.8

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Aligns with annotations (readOnlyHint, openWorldHint, idempotentHint). Adds behavioral details: parallel execution, MCP streaming progress, async mode, timeouts. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise with no wasted words. Two sentences cover purpose, execution model, and streaming support.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 27 parameters, nested objects, and no output schema, the description is too brief. It lacks return value description, error handling, and guidance on interpreting results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds minimal extra meaning beyond the schema, such as explaining the three phases that the 'features' parameter controls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's verb 'Analyze', the resource 'web page URL', and the three main analysis phases (layout, motion, quality). It also differentiates itself from sibling tools like layout.ingest and motion.detect by being a unified parallel execution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use page.analyze versus calling the individual sub-tools directly. Missing when-not-to-use or alternatives for partial analyses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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/TKMD/ReftrixMCP'

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