Skip to main content
Glama

Solve AWS WAF CAPTCHA

capskip_solve_amazon_waf

Solves AWS WAF CAPTCHA challenges using a sitekey and page URL, then returns the captcha_voucher and existing_token pair needed to obtain an aws-waf-token.

Instructions

Solve an AWS WAF (Amazon WAF) CAPTCHA — the image-grid or toy-car puzzle Amazon's firewall shows on a 405 challenge page (window.gokuProps plus challenge.js/captcha.js from an awswaf.com host) or in a JS-API widget (jsapi.js plus AwsWafCaptcha.renderCaptcha). Only sitekey and url are required. IMPORTANT: the answer is NOT the cookie. It is a pair, captcha_voucher and existing_token, which only work together: POST them as JSON {"captcha_voucher":…,"existing_token":…} to the voucher endpoint in the same folder as the page's challenge.js (replace 'challenge.js' with 'voucher'), and the response's token field is the aws-waf-token. Send that as the aws-waf-token cookie on the protected domain (some widget pages use an x-aws-waf-token header instead) and repeat the request. Exchange the pair immediately rather than storing it.

Input Schema

NameRequiredDescriptionDefault
ivNogokuProps.iv from a challenge page. Send it together with context, or leave both out and CapSkip reads them from the page at solve time — the safer choice when your copy of the page is more than a few minutes old. Never send it for a widget page.
urlYesFull URL of the page the captcha appears on, including scheme.
proxyNoSolve through this proxy. Sites behind AWS WAF usually pair the CAPTCHA with rate limits and IP reputation rules, so use one when solving at volume.
contextNogokuProps.context from a challenge page. Send it together with iv, or leave both out.
sitekeyYesOn a challenge page (the HTTP 405 page carrying window.gokuProps), the gokuProps.key value — a long key usually starting 'AQIDAH'. On a widget page (AwsWafCaptcha.renderCaptcha), the apiKey passed to renderCaptcha — a long key ending in a short suffix such as '_0_1'.
timeoutNoSeconds to wait before giving up. Maximum 600.
jsapiScriptNoThe full https URL of the page's jsapi.js (widget pages only — sending it without iv/context is what marks the solve as a widget), exactly as it appears in the script tag's src. It must be on an awswaf.com host: CapSkip refuses any other script, because it is not an AWS WAF integration.
captcha_scriptNoThe full https URL of the page's captcha.js, exactly as it appears in the script tag's src. It must be on an awswaf.com host: CapSkip refuses any other script, because it is not an AWS WAF integration.
challenge_scriptNoThe full https URL of the page's challenge.js, exactly as it appears in the script tag's src. It must be on an awswaf.com host: CapSkip refuses any other script, because it is not an AWS WAF integration.

Output Schema

NameRequiredDescriptionDefault
codeYes
captchaIdYes
solveSecondsYes
existing_tokenNo
captcha_voucherNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.5.0

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations, which only say this is a non-destructive, open-world operation. It discloses the non-obvious result shape — that the answer is a captcha_voucher/existing_token pair, not the cookie — the exact exchange step against the voucher endpoint, where the aws-waf-token lands (cookie vs x-aws-waf-token header), and that the pair should be exchanged immediately rather than stored.

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

Conciseness4/5

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

Front-loaded with the tool's identity and the critical post-solve instruction, and nearly every clause carries actionable detail. The opening sentence is long and parenthetical-heavy, and 'Only sitekey and url are required' partially restates the schema's required list, costing a little tightness.

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

Completeness5/5

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

For a 9-parameter tool with a nested proxy object and an output schema, this covers what the agent actually needs: mode selection, minimum inputs, and a complete end-to-end follow-up procedure for the returned credentials. Return-value documentation is correctly left to the output schema, and the proxy guidance is handled in the schema.

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

Parameters4/5

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

Schema coverage is already 100%, so the schema carries the field-level detail. The description still adds cross-parameter meaning by framing the two operating modes (challenge page vs widget) and which parameters belong to which, and it flags that only sitekey and url are mandatory. It does not explain the proxy or timeout parameters, which remain schema-only.

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?

States a specific verb and resource ('Solve an AWS WAF CAPTCHA') and immediately disambiguates the two concrete variants it handles: the 405 challenge page with window.gokuProps and the JS-API widget with AwsWafCaptcha.renderCaptcha. Against sibling tools like capskip_solve_image_captcha or capskip_solve_hcaptcha, the awswaf.com host markers make the target unambiguous.

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

Usage Guidelines4/5

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

Gives the agent recognizable on-page criteria for when this tool applies (gokuProps/challenge.js/captcha.js on an awswaf.com host, or jsapi.js plus renderCaptcha) and states the minimum viable call ('Only sitekey and url are required'). It does not name a sibling or spell out a when-not-to-use case, so it stops short of the top mark.

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