Overview
Call it with no parameters for five random letters in a 200×70 GIF, plus the solution, an id and a 24-hour download link. Set type=math for a question like 7 + 4 = ?, and tune length, character set, difficulty, size and format to fit your form. Add audio=true for a spoken version in a clear recorded voice, with optional background noise. Audio and math are free on every plan; paid plans can also set colors. Keep the solution on your server and compare it with what the visitor types, ignoring case.
Live Test Captcha Generator Skill Skill →
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as CaptchaGeneratorSkill. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "CaptchaGeneratorSkill",
"arguments": {}
}Connecting
One server URL covers every skill in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervekit": {
"url": "https://api.vervekit.com/v1/mcp"
}
}
}https://api.vervekit.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
typeOptional | string | text draws random characters; math draws an arithmetic question such as 7 + 4 = ? and the solution is the answer. length, charset and unambiguous apply to text onlytextmathdefault text |
lengthOptional | integer | Number of characters in the captcha (4-8) (text only) default 5 · range 4–8 |
charsetOptional | string | Characters to draw from: lowercase letters, uppercase letters, mixed-case letters, digits, or letters and digits (text only)lowercaseuppercasemixeddigitsalphanumericdefault lowercase |
unambiguousOptional | boolean | Leave out characters that are easy to misread: 0, O, o, 1, l, I, i and Q (text only) |
difficultyOptional | string | Distortion level. Harder levels add more rotation, warp, noise lines, background texture and a line through the text. For type=math it also sets the numbers: small additions and subtractions at easy, larger ones at medium, multiplication at hard. It does not change the audio; see audioNoiseeasymediumharddefault medium |
widthOptional | integer | Image width in pixels (100-400) default 200 · range 100–400 |
heightOptional | integer | Image height in pixels (40-150) default 70 · range 40–150 |
formatOptional | string | Image formatgifpngdefault gif |
colorOptionalPremium | string | Text color as a hex code (e.g. #1d3557). By default each character gets a random dark color |
backgroundColorOptionalPremium | string | Background color as a hex code (e.g. #ffffff) default #ffffff |
audioOptional | boolean | Also return a spoken WAV version of the same challenge in audioURL, for visitors who cannot see the image. Text captchas are read character by character; math questions are read aloud without the answer |
audioNoiseOptional | string | Background noise in the audio, with audio=true: none (clearest, best for accessibility), low, medium or high. Higher levels make automated transcription harder and the audio harder to follownonelowmediumhighdefault none |
inlineOptional | boolean | Return the image as a base64 data URI in dataURI (and the audio in audioDataURI) instead of storing them; downloadURL and audioURL are then null |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"id": "e183c54c-5bf6-455e-bc96-195685cee71c",
"expires": 1766010041360,
"solution": "fwvct",
"downloadURL": "https://storage.googleapis.com/apiverve/APIData/captchagenerator/e183c54c-5bf6-455e-bc96-195685cee71c.gif?GoogleAccessId=635500398038-compute%40developer.gserviceaccount.com&Expires=1766010041&Signature=LLBhTrpVAk%2Bzx%2B2U7sdbIfjUOm%2FEe4hP7ebqGfphThctFRbHs9oyHPJ3J7BCAu71WswQr1qOKh%2BQddOPTGFCVUVL%2BlN1Qxt%2BlIBXYVM7%2FzW3YlfbHmFbXaesr%2BC7pFW6ekZ88fobbOP%2FcGbKdtVL1Vz9ceomtqUw%2Bl9Mwy3FCkpmwPHzGxW56%2BAHB%2B5TQgH2S%2FcmkJkPUxMSGnztQerMNB7V2JrhpuBLZl7N%2FPRucwJswVX6LYYOfNlvrFuxwJwS%2BBot9TesdYlPPDZgOfBo0%2FGgGMzIc753aPUIzkJoeMyPZgJGRilPQNrWJgp%2F7mmx4WNq6QgdIZPlQ36FlDHMsg%3D%3D"
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
id | string | e183c54c-5bf6-455e-bc96-195685cee71c | Unique identifier for the generated captcha |
expires | number | 1766010041360 | Unix timestamp in milliseconds when the image link expires (24 hours) |
solution | string | fwvct | The correct answer: the characters drawn, or for type=math the answer as a string of digits. Compare it with the visitor's answer ignoring case |
downloadURL | string | https://storage.googleapis.com/apiverve/APIData/captchagenerator/e183c54c-5bf6-455e-bc96-195685cee71… | Signed URL of the captcha image, valid for 24 hours. Null when inline=true |
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This skill is not part of VerveKit. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 10 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- Registration Form Protection
- To block automated spam registrations, web apps fetch a challenge image for the signup form and check submitted text against the returned solution.
- Failed Login Throttling
- When visitors trigger multiple failed login attempts, authentication services display a captcha image to verify that a person is behind the keyboard.
- Contact Form Verification
- Community forums attach challenge images to public inquiry forms, using the millisecond expiration timestamp to invalidate stale submissions.
- Password Reset Defense
- Require visitors to solve a visual challenge before sending password reset links to prevent bad actors from triggering bulk recovery emails.
Other ways to use Captcha Generator Skill
Set up Captcha Generator Skill on VerveKit, or reach the same source a different way. Your VerveKit account and credits work on all of them — one key, one balance.
Related
More in Data Generation: