Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FIGMA_TOKENNoFigma access token for sync_figma.
GITHUB_TOKENNoFallback GitHub token for error reporting.
GEMINI_API_KEYNoAPI key for optional Gemini AI critique.
QA_SCREENS_PROFILENoOverrides the default_profile config. Name of the auth profile to use by default.
QA_SCREENS_BASE_URLNoOverrides the base_url config. The base URL of the site under test.http://localhost:8080
QA_SCREENS_STATE_DIRNoDirectory for storing profiles and reports. Defaults to ~/.local/state/qa-screens.
QA_SCREENS_THRESHOLDNoOverrides the threshold config. Minimum SSIM score to pass.0.90
QA_SCREENS_ISSUE_REPONoRepository to file issues against, e.g. 'owner/repo'.astuanax/qa-screens
QA_SCREENS_GITHUB_TOKENNoGitHub token for filing issues. Falls back to GITHUB_TOKEN.
QA_SCREENS_REFERENCES_DIRNoOverrides the references_dir config. Directory with reference screenshots.screenshots
QA_SCREENS_ROUTE_TEMPLATENoOverrides the route_template config. Template mapping page names to URLs./{name}/
QA_SCREENS_ERROR_REPORTINGNoControl error reporting: on, local, or off.on

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
qa_configA

Show the effective configuration (base URL, reference dir, route mapping), the reference screenshots found and the available auth profiles. Start here.

run_qaA

Capture pages from the running site and SSIM-compare them with the reference screenshots.

pages: reference names (file names without extension); default all references. viewport: all | desktop | mobile (names ending in "-mobile" use a 390px mobile context). profile: auth profile for pages behind a login. align: how to handle different image sizes — resize (default, legacy), crop, or pad (pad makes page-height changes count as differences). A page FAILs when SSIM < threshold OR more than max_changed_ratio of its pixels clearly changed colour (catches local changes such as a recoloured header that SSIM averages away). Returns a JSON summary (failures first, with changed regions in px) plus side-by-side reference|live preview images of up to max_images failing pages.

qa_pageB

QA a single page against its reference (fast iteration while fixing). url overrides the route mapping for this call. Returns the result and, on failure, a reference|live side-by-side preview cropped around the changed regions.

captureA

Screenshot any URL (desktop or mobile viewport, optionally logged in via profile). clip_selector captures a single element. Saved under runtime/captures/.png.

compare_imagesA

SSIM-compare two image files (e.g. a Figma export vs a capture). Paths may be relative to the project root. Returns score, changed regions, a heatmap path and an a|b preview.

capture_setA

Capture a named set of pages (e.g. label="before" before a refactor, "after" after it). Pages default to all reference names; any names work if you pass pages and the route mapping resolves them. Use compare_sets afterwards. Proves a refactor is pixel-neutral without depending on golden references.

compare_setsB

Diff two capture sets (labels from capture_set, or directories). identical: true means every page scored >= threshold. Returns previews of the most-changed pages.

ab_compareC

Compare two running servers (e.g. main branch on :8080 vs a worktree on :8091) page by page.

update_referenceA

Make the current look of a page its reference screenshot: from source (an image), else the latest qa_page capture, else a fresh capture right now (so this also creates a first baseline for a page that has no reference yet). The old reference is backed up. Only do this when the USER has confirmed the look is intended; set confirm=true.

sync_figmaA

Download Figma frames into the references directory (needs FIGMA_TOKEN). Frame names become reference names; overwrites existing references with the same name.

auth_profilesA

List auth profiles, or show one (secrets are never shown).

auth_update_profileA

Create or update an auth profile. Only the fields you pass change (dicts are merged).

Any secret may be given as "env:VAR_NAME" so it is read from the server's environment instead of passing through the conversation — prefer that.

origins: origins that receive headers/tokens, e.g. ["https://app.example.com"] (default: the base_url's origin). Credentials are never sent to other origins. access_token/token_type/expires_in/refresh_token: a bearer token you already have. apply_token_as: where the app expects the token — any of "header" (Authorization: Bearer), "header:X-Api-Key", "local_storage:", "session_storage:", "local_storage_json:" (whole token object as JSON), "cookie:". oauth: {grant_type: client_credentials|password|refresh_token|authorization_code, token_url, client_id, client_secret, scope, audience, username, password, authorize_url, redirect_uri, client_auth: post|basic, extra_params}. For client_credentials/password a token is fetched immediately and refreshed automatically. For authorization_code, call auth_oauth_login next. cookies: Playwright cookies [{name, value, url} or {name, value, domain, path}]. local_storage/session_storage: {origin: {key: value}} injected before page scripts run. http_credentials: {username, password} for HTTP basic auth. clear: field names to remove, e.g. ["token", "cookies", "storage_state"].

auth_browser_loginA

Log in with a real browser and save the session (cookies, localStorage and sessionStorage) into profile name. Works for any login incl. SSO/MFA/OAuth redirects.

headed=true opens a visible window where the user logs in (or finishes MFA); if username/password are given (use "env:VAR" for secrets) the form is filled first. Completion is detected by success_url_pattern (regex on the URL), success_selector, or — if neither is given — by leaving the login page's URL.

auth_oauth_loginA

Run the OAuth authorization-code + PKCE flow for profile name (configure oauth with grant_type "authorization_code", authorize_url, token_url, client_id, redirect_uri first). The user signs in in the opened window; the redirect is intercepted, the code exchanged, and the token (with refresh_token if issued) stored and auto-refreshed.

auth_import_storage_stateB

Import a Playwright storage-state JSON (cookies + localStorage), e.g. from a Playwright test setup's storageState output, into profile name.

auth_checkA

Open url (default: the base URL) with profile name and report whether the session works: HTTP status, final URL (a redirect to a login page means it expired) and a screenshot.

auth_delete_profileB

Delete an auth profile and its saved session.

error_reportsA

Show automatic error-reporting status (pending/reported crash and error reports, target repo). flush=true posts pending reports to GitHub now.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.5/5.0

Scored across 18 tools

Disambiguation4/5

Most tools have clearly distinct purposes: run_qa vs qa_page, capture vs capture_set, and compare_images vs compare_sets vs ab_compare are separated by scope. The main ambiguity is between auth_browser_login and auth_oauth_login, though their descriptions clarify the different login flows.

Naming Consistency4/5

Tool names follow a mostly predictable snake_case style, with useful prefixes like qa_ and auth_. However, the pattern is not strictly verb_noun: capture and ab_compare stand out, and names like qa_config or error_reports are noun-style rather than action-first.

Tool Count3/5

18 tools is on the heavy side, especially considering the 7-tool auth sub-system alongside the core screenshot/compare workflow. It is not excessive in absolute terms, but it crosses into the range where the set starts to feel bloated.

Completeness4/5

The core visual QA lifecycle is well covered: references, captures, comparisons, set diffs, and running-server diffs are all present, and auth profile management is thorough. Minor gaps exist such as no direct tool for deleting references or listing capture sets, but these can be worked around.

Maintenance

ActivityMaintained
ResponsivenessNo issues