{"name":"com.nyx-intelligence/val","slug":"nyx-intelligence-val","title":null,"description":"QA agent for vibecoded apps. Real browser checks, your AI fixes them. Ship to green.","url":"https://mcp.market/server/nyx-intelligence-val","rating":null,"grade":"B","score":71,"certified":false,"status":"active","category":"scraping","tags":["scraping","ai"],"presence":{"score":17,"stars":0,"forks":0,"downloads_week":36,"last_push_at":"2026-05-28T07:40:32.000Z","license":"NOASSERTION"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Wakizara/val-action","website":"https://val.nyx-intelligence.com","version":"0.10.1","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@nyx-intelligence/val-mcp","version":"0.10.1","transport":{"type":"stdio"},"environmentVariables":[{"description":"Your Val license key (vk_...). Subscribe at val.nyx-intelligence.com (4.99 USD per month) if you do not have one.","isRequired":true,"format":"string","isSecret":true,"name":"VAL_LICENSE_KEY"}]}],"tools":[{"name":"val_a11y_audit","description":"Inject axe-core into the page and run a WCAG 2.0 / 2.1 A + AA audit plus best-practice checks. Returns each violation with id, impact (minor/moderate/serious/critical), a description, help URL, and up to 5 offending elements with their HTML snippets and failure summary. Use this when you want a real a11y review, not just the cheap heuristics in val_scan.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_act","description":"Run a host-LLM-planned sequence on the current session (click, type, scroll, wait, open, screenshot). Each step gets a screenshot afterward (signed 30d URL) plus the resulting URL/title/changes/errors. This is the agentic loop: the LLM plans, Val drives the browser, the LLM re-reads the transcript and decides the next step.","write_action":true,"price_micros":0,"input_schema":null},{"name":"val_capture_network","description":"Open a URL and record every HTTP request the page fires for up to 30 seconds (default 5s). Returns method, URL, status, content-type, duration, request body (capped 4KB), and a preview of the response body for JSON/text payloads. Catches the class of bug where a vibecoded app returns HTTP 200 with `{ ok: false, error: '…' }` in the JSON body, which the browser does not flag as an error.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_check","description":"Run the passive checks on a SINGLE page. Use after fixing a bug to confirm it is gone.","write_action":true,"price_micros":0,"input_schema":null},{"name":"val_click","description":"Click an element by its [ref] (from val_snapshot) or by visible text. Returns whether anything changed, where it navigated, and any errors triggered. If nothing changes and no error fires, the control is flagged as a possible dead button.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_close","description":"Close the browser session when finished walking a flow.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_compare","description":"Take a screenshot of each URL (signed 30d URLs, or base64 fallback), grab their visible text, and return a structured diff: which phrases appeared, which disappeared, character delta, same-URL flag. This is the building block for 'did the agent's fix actually land?': pass the preview URL before and after a deploy, let the host LLM judge.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_console","description":"Open a URL and capture every console.log / warn / error / info message (plus uncaught page errors) for up to 30 seconds (default 5s). Returns type, text, and source location. Use this to read what the app says about itself at runtime: deprecation warnings, missing keys, hydration mismatches, third-party SDK complaints.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_dedupe","description":"Search a repo's open + closed issues for the given query string and return up to 10 matches with number, title, URL, state. Call this BEFORE val_file_finding to skip duplicates.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_describe","description":"Open a URL and return a structured snapshot: signed 30d screenshot URL (or base64 fallback), a compressed visible-only DOM outline, visible body text (capped), and any console / page / network errors observed at load. Cheaper than a crawl, richer than a screenshot. Pass `device` to render mobile.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_detect_paywall","description":"Inspects the page for Stripe, Paddle, LemonSqueezy, or Gumroad. Returns the processor name, whether it is in test or live mode (for Stripe), and a clear go or no-go decision: can Val safely bypass this with a test card, or does it need a real subscription? Always call before val_pay_stripe_test.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_exercise","description":"Deterministically click every visible button on the current page (returning to the page after any navigation) and report which ones are DEAD (no effect, no error, no network) or which throw a JS error. The fast way to answer 'is any button broken on this screen?'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_exercise_forms","description":"Find every visible <form>, fill its inputs with plausible test data (email, password, text, etc.), submit it, and report which forms are DEAD (submit produced no effect, no API call, no DOM change), which threw a JS error, and which submitted successfully. Complements val_exercise — buttons-only sweeps miss broken signup/checkout/contact forms.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_file_finding","description":"Post a structured Val report. If `target` is a PR URL, posts as a PR comment (updating in-place if a prior Val finding exists). Otherwise treats target as 'owner/repo' and opens a new issue. Optionally embeds a screenshot URL at the top.","write_action":true,"price_micros":0,"input_schema":null},{"name":"val_invariants","description":"Observe a URL for up to 15s and report runtime invariant violations: NaN / undefined / null / [object Object] leaking into the UI, 5xx responses, uncaught JS errors. Combine with val_act to validate a whole funnel.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_lighthouse","description":"Launches a headless Chrome via chrome-launcher and runs Lighthouse against the URL with all four core categories (performance, accessibility, best-practices, seo). Returns category scores (0 to 1), the key Web Vitals (LCP, FCP, TBT, CLS, Speed Index, TTI in milliseconds), and the top 8 failing audits sorted by severity. Pass formFactor='mobile' (default) or 'desktop'.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_login","description":"Drives a login form with the email and password you pass. Finds the email/username and password fields heuristically, fills them, submits, waits for navigation, and reports success or failure. Cookies and storage are persisted in the session, so every subsequent val_* call (val_describe, val_review, val_act, val_a11y_audit, etc.) runs as the authenticated user. ALWAYS use a dedicated test account;","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_open","description":"Start (or reuse) the browser session and navigate to a URL. Returns the page state and any load errors. This begins an interactive session you drive with val_snapshot / val_click / val_type to walk a funnel (e.g. sign up, checkout).","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_pay_stripe_test","description":"If the current page is showing Stripe Elements AND Stripe is loaded in test mode (pk_test_*), Val fills card number 4242 4242 4242 4242, exp 12/35, cvc 123, postal 12345. Refuses (returns ok=false) if Stripe is in live mode so we never trigger a real charge. After this fills the form, you still need val_click to press the Pay/Subscribe button.","write_action":true,"price_micros":0,"input_schema":null},{"name":"val_pr_context","description":"Pulls everything Val (and the host LLM) needs to reason about a PR: title, body, author, base/head branches, changed files with line counts, the unified diff, commit summaries, linked issue references, and a best-effort preview deployment URL parsed from PR check details (Vercel, Netlify, Fly, etc.). Pass a PR URL or number.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_review","description":"The one-shot Val workflow: pass either a URL or a GitHub PR URL. If URL: runs describe + a11y audit + invariants on it, returns a structured report with status (green/yellow/red), findings, and a markdown summary. If PR: pulls PR context, finds the preview deployment, infers up to 3 touched routes from the diff, tests each, and posts the report as a PR comment (set postToPr=false to skip posting).","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_scan","description":"Crawl an app (localhost or live), following same-origin links, and report passive bugs: broken links/404s, uncaught JS errors, console errors, failed network requests, broken images, missing titles, horizontal layout overflow, clipped text, and janky load (layout shift / CLS). Pass `device` to test the MOBILE rendering (e.g. 'iPhone 14'). Good first pass. Does NOT click buttons — use val_open/val_","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_scan_devices","description":"Crawl the app under MULTIPLE device profiles in parallel (e.g. ['desktop', 'iPhone 14', 'Pixel 7']) and report findings. Bugs that appear on every device are tagged 'all'; mobile-only or desktop-only bugs keep their device tag so the agent knows where to fix. Use this instead of val_scan when responsive behavior matters.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_screenshot","description":"Capture a PNG of a URL so you can reason about layout/visual issues.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_snapshot","description":"Return every clickable/fillable element on the current page with a [ref] you can pass to val_click / val_type, plus its kind and label. Call this to see what you can act on before clicking or typing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_state","description":"Return the current URL/title and any console/JS/network errors captured since the last action. Use to verify a step did not break anything.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_type","description":"Fill an input/textarea (by [ref] or label) with text. Use to fill a signup or checkout form, then val_click the submit button.","write_action":false,"price_micros":0,"input_schema":null},{"name":"val_verify_fix","description":"Pulls PR context, infers which user-facing routes the changed files probably touch (Next.js app/pages router, SvelteKit), then runs val_describe + val_invariants on each route against the PR's preview URL. Returns a bundle the host LLM can use to judge: 'is the claim true?'. Pass `previewUrl` if you already have it; otherwise Val tries to read it from the PR's check details.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":71,"grade":"B","scanned_at":"2026-09-27T17:05:24.566Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T17:05:24.576Z","components":{"code":{"score":25,"max":25,"notes":["11 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":8,"max":15,"notes":["last push 122 days ago"]},"identity":{"score":7,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@nyx-intelligence/val-mcp","version":"0.10.1","found":true,"license":"UNLICENSED","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-05-29T05:39:48.817Z","weeklyDownloads":36}],"repo":{"found":true,"owner":"Wakizara","repo":"val-action","archived":false,"pushedAt":"2026-05-28T07:40:32Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/160236607?v=4","ownerCreatedAt":"2024-02-16T11:46:11Z","license":"NOASSERTION"},"icon":{"url":"https://val.nyx-intelligence.com/icon.svg?icon.0blwybyw2yt5f.svg?dpl=dpl_H1rKYcLq345yst652iSGWEULXrYT","source":"site"},"presence":{"stars":0,"forks":0,"downloadsWeek":36,"license":"NOASSERTION","lastPushAt":"2026-05-28T07:40:32.000Z","score":17}}}},"grade_history":[],"reviews":[]}