periscope-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_projectB | Create a new website testing project. Each project represents a website to test. |
| list_projectsA | List all testing projects. |
| get_projectC | Get details of a specific project. |
| delete_projectA | Delete a project and its associated data. |
| set_form_loginA | Configure form-based login for a project. Use this for sites with username/password forms. |
| set_basic_authB | Configure HTTP Basic Auth for a project. |
| set_cookiesA | Set session cookies for a project. Use this to bypass login with existing session. |
| login_projectA | Execute login for a project using configured credentials. Must call set_form_login, set_basic_auth, or set_cookies first. |
| interactive_loginA | Open a VISIBLE browser window for a human to log in by hand — the way to authenticate flows that can't be automated (2FA/MFA, SSO/OAuth redirects, CAPTCHA, magic links, device confirmation). After you finish logging in, call save_login to capture the session; future headless sessions on the project reuse it. Requires a display on the server (DISPLAY set). |
| save_loginA | Capture the authenticated session (cookies + localStorage) from an in-progress interactive_login, save it to the project, and close the visible window. The project then opens authenticated sessions headlessly. Re-run interactive_login when the session expires. |
| test_urlA | Test a single URL. Takes screenshot and runs checks for visual issues, accessibility, functionality, SEO, performance, and GEO (AI/agentic search readiness: robots.txt AI-crawler access, llms.txt, WebMCP, JSON-LD). |
| crawl_projectC | Discover all pages in a project by crawling from the base URL. |
| test_projectA | Full project test: crawls all pages and runs all checks. Returns comprehensive report. |
| get_screenshotC | Get the file path to a screenshot for a tested URL. |
| list_reportsA | List all test reports for a project. |
| get_reportC | Get the contents of a specific test report. |
| open_sessionA | Open a persistent browser session for interactive testing. The session stays alive across tool calls so you can observe, click, fill forms, and decide next actions. |
| close_sessionA | Close a persistent browser session and free its resources. |
| list_sessionsA | List all active browser sessions with their URLs and idle times. |
| click_elementA | Click an element in a session page. Returns a screenshot and the new URL/title after click. Use force=true to bypass actionability checks (useful when overlays intercept pointer events). |
| fill_formA | Fill form fields in a session page and optionally submit. Use force=true to bypass actionability checks when overlays or dialogs block the inputs. |
| interact_and_testA | Execute a multi-step interaction workflow. Supports 25 actions: click, force_click, fill, force_fill, type, select, select_option, wait, wait_for, wait_for_text, screenshot, navigate, hover, press_key, check, uncheck, scroll_to, scroll_within, evaluate_js, drag, right_click, go_back, go_forward, upload_file, wait_for_network. Can work on an existing session or create an ephemeral page. |
| get_page_elementsA | List elements matching a CSS selector with their attributes (tag, text, id, class, href, value, visible, enabled, aria_label, role). Pass 'attributes' for extra HTML attributes (data-, aria-, style, ...) and 'full_text' for complete text content instead of the 80-char preview. Works on a session or a URL. Standard CSS selectors only — Playwright-specific pseudo-classes (:has-text, :visible) are not supported here. |
| test_form_validationA | Analyze forms on a page: find all forms, check required fields, collect validation messages from :invalid fields and custom error elements. |
| compare_screenshotsA | Compare two screenshots pixel-by-pixel. Returns difference percentage and a diff image highlighting changes. |
| test_responsiveA | Test a URL at multiple viewport sizes (mobile, tablet, desktop). Takes screenshots at each size and optionally runs checks. |
| check_linksC | Comprehensive link checker. Finds all links on a page and checks their status. Can check external links too. |
| measure_interactionA | Click an element and measure time until a condition is met (networkidle or a selector appears). Returns timing in ms. |
| record_sessionB | Record a workflow as video. Executes steps while recording with Playwright's built-in video capture. |
| test_keyboard_navigationA | Tab through a page and track focus order. Checks for visible focus indicators and reports the tab sequence. |
| get_console_errorsA | Get all console errors and logs captured on a session since it was opened (or since last call to this tool). Useful for passive monitoring without running steps. |
| copy_authA | Copy authentication config from one project to another. Useful when multiple projects share the same domain/credentials. |
| set_viewportA | Change the viewport size of a session page to test at different screen sizes. Use device presets or custom width/height. Takes a screenshot after resizing. |
| screenshot_sessionB | Take a screenshot of the current session page state. No actions performed — just captures what's on screen. |
| navigate_sessionA | Browser history navigation on a session: go back, go forward, or reload the page. Returns new URL/title + screenshot. Reload is useful for testing state persistence. |
| run_checks_on_sessionA | Run visual/accessibility/functionality/seo/performance checks on an active session page. Unlike test_url, this doesn't open a new page — it checks the current state after interactions. |
| handle_dialogA | Set up handling for JavaScript dialogs (alert, confirm, prompt) on a session. Must be called BEFORE the action that triggers the dialog. |
| upload_fileC | Set file(s) on a file input element. Works with elements. |
| wait_for_networkC | Wait for a specific network request to complete. Use URL pattern matching (substring) to wait for API calls instead of blind timeouts. |
| intercept_networkA | Mock API responses on a session. Intercept requests matching a URL pattern and return custom responses. Use to test error states, empty states, loading states without needing the real backend. Call BEFORE the action that triggers the request. |
| clear_interceptsA | Remove network mocks set by intercept_network. Clears all intercepts on the session, or only those matching a URL pattern. |
| get_local_storageA | Read localStorage or sessionStorage from a session page. Returns all entries or specific keys. |
| set_local_storageB | Write to localStorage or sessionStorage on a session page. |
| select_iframeA | Switch into an iframe to interact with embedded content. Returns a new session scoped to the iframe. Use close_session on the returned session when done. |
| get_computed_styleA | Get actual rendered CSS property values for elements matching a selector. Verify colors, fonts, spacing, display, opacity programmatically. |
| emulate_networkA | Throttle network speed on a session to simulate slow connections. Use to test loading spinners, offline fallbacks, timeout handling. |
| test_dark_modeA | Toggle prefers-color-scheme between light and dark on a session. Takes a screenshot showing the result. |
| assert_conditionA | Programmatic assertion — check a condition on the page and return pass/fail instantly without needing a screenshot. Supports: text_contains, text_equals, element_exists, element_visible, element_count, url_contains, title_contains, attribute_equals. |
| find_elementA | Smart element finder — search by text content, role, or partial match. Returns the best CSS selector to use. Saves the agent from guessing selectors. |
| auto_fill_formA | Auto-detect all form fields, infer their types (email, phone, name, address, etc.), fill with smart test data, and optionally submit. Replaces 5-10 tool calls with one. |
| get_network_logB | Get all network requests/responses captured during a session. See what API calls were made, status codes, methods, and response sizes. Optionally filter by URL pattern. |
| get_cookiesA | Read all cookies from a session. Essential for debugging auth issues. |
| page_stateA | Named page-state checkpoints. action=snapshot saves URL + cookies + storage + DOM signature under a name; action=restore navigates back to it and restores cookies/storage; action=diff compares the current DOM against the snapshot (added/removed/changed elements + tag count changes). Enables testing multiple paths from the same starting point. |
| get_interaction_logA | Export the real INP (Interaction to Next Paint) time series for a session — one record per interaction Periscope drove (click/typing), each with its input-to-next-paint latency, event type, target, timestamp, and URL. Saves a JSON (for graphing) or CSV file and returns percentile stats (p50/p75/p90/p98/worst). Use after driving interactions (interact_and_test, click_element, fill_form…) — ideal for a long interactive test where you want to see all INP times, not just the worst. Unlike Lighthouse (which can't measure INP in lab mode and falls back to TBT), this is measured from actual Event Timing entries. |
| run_lighthouseA | Run a real Google Lighthouse audit against a URL. Returns 0-100 category scores, Core Web Vitals lab metrics (LCP, TBT, CLS, Speed Index), and the failed audits, and saves the full JSON report. Requires Node.js — finds it on PATH or auto-detects nvm installs (~/.nvm); if none exists, returns the exact nvm install commands. Launches its own headless Chrome: no session or project auth state applies. |
| check_color_contrastA | Check WCAG color contrast ratios for text elements on the page. Samples one element per unique text style (color/background/size), so repeated nav items don't exhaust the budget — 'checked' counts style groups, 'elements_represented' the elements they cover. Reports failures against AA or AAA thresholds. |
| scroll_into_viewA | Scroll an element into the viewport without clicking it. Useful for lazy-loaded content or scrolling to a section. |
| wait_for_goneA | Wait for an element to disappear (removed from DOM or hidden). Useful for waiting for modals/dialogs/spinners to close. |
| get_page_htmlA | Return raw outerHTML of matching elements, or full page HTML if no selector. Useful for inspecting component structure. Standard CSS selectors only — Playwright-specific pseudo-classes (:has-text, :visible) are not supported here. |
| get_table_dataB | Parse an HTML table into structured JSON with headers mapped to cell values. Returns {headers, rows, total_rows}. |
| get_toast_messagesB | Capture visible toast/notification/alert messages on page. Checks common toast selectors ([role=alert], [role=status], [aria-live], .toast, .notification, Toastify, Sonner, Radix). |
| select_optionA | Select from native or custom dropdown (Radix/shadcn combobox). Auto-detects type. For custom dropdowns: clicks to open, then finds option by text cascade. |
| get_response_bodyA | Get the actual API response body text for a request matching a URL pattern. Critical for diagnosing 400/500 errors. Response bodies are captured automatically for fetch/xhr/document requests. |
| web_searchA | Search DuckDuckGo and return titles, URLs, and snippets. Useful for looking up documentation, verifying external content, or researching during testing workflows. |
| web_fetchA | Fetch a URL and extract readable text content. Use to read documentation pages, verify external link content, or inspect page text without a browser. |
| describe_toolsA | Get a structured guide to all available tools — grouped by category, with workflow examples and tips. Call this first if you've never used this server before. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- 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/segentic-lab/periscope-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server