Overview
Returns puzzles with answers, letter counts, and optional hints. Includes printable HTML for offline use.
Live Test Fill-in-the-Blanks Skill Skill →
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as Fill-in-the-BlanksSkill. 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": "Fill-in-the-BlanksSkill",
"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 |
|---|---|---|
categoryOptional | string | Puzzle categoryrandomidiomsproverbsquotessciencegeographydefault random |
countOptional | integer | Number of puzzles default 5 · range 1–20 |
difficultyOptional | string | Difficulty leveleasymediumharddefault medium |
imageOptionalPremium | boolean | Set to true to generate a downloadable puzzle image |
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": {
"puzzles": [
{
"id": 1,
"sentence": "A penny saved is a penny ___.",
"answer": "EARNED",
"letterCount": 6,
"hint": "gained/obtained",
"firstLetter": null
},
{
"id": 2,
"sentence": "Actions speak louder than ___.",
"answer": "WORDS",
"letterCount": 5,
"hint": "what we say",
"firstLetter": null
},
{
"id": 3,
"sentence": "Don't count your chickens before they ___.",
"answer": "HATCH",
"letterCount": 5,
"hint": "come out of eggs",
"firstLetter": null
},
{
"id": 4,
"sentence": "The early bird catches the ___.",
"answer": "WORM",
"letterCount": 4,
"hint": "a crawling creature",
"firstLetter": null
},
{
"id": 5,
"sentence": "Don't put all your eggs in one ___.",
"answer": "BASKET",
"letterCount": 6,
"hint": "a container",
"firstLetter": null
}
],
"count": 5,
"difficulty": "medium",
"category": "idioms",
"html": "<html><head><title>Fill in the Blanks</title><style>body {font-family: Arial, sans-serif; padding: 20px; max-width: 700px; margin: 0 auto;}h1 {text-align: center; color: #673AB7;}.puzzle {background: #f5f5f5; padding: 20px; margin: 15px 0; border-radius: 10px;}.number {font-weight: bold; color: #673AB7; margin-bottom: 10px;}.sentence {font-size: 18px; line-height: 1.8;}.blank {display: inline-block; min-width: 100px; border-bottom: 2px solid #673AB7; margin: 0 5px;}.hint {font-size: 13px; color: #888; font-style: italic; margin-top: 10px;}.info {font-size: 12px; color: #999; margin-top: 5px;}</style></head><body><h1>Fill in the Blanks</h1><div class='puzzle'><div class='number'>#1</div><div class='sentence'>A penny saved is a penny <span class='blank'></span>.</div><div class='info'>6 letters</div><div class='hint'>Hint: gained/obtained</div></div><div class='puzzle'><div class='number'>#2</div><div class='sentence'>Actions speak louder than <span class='blank'></span>.</div><div class='info'>5 letters</div><div class='hint'>Hint: what we say</div></div><div class='puzzle'><div class='number'>#3</div><div class='sentence'>Don't count your chickens before they <span class='blank'></span>.</div><div class='info'>5 letters</div><div class='hint'>Hint: come out of eggs</div></div><div class='puzzle'><div class='number'>#4</div><div class='sentence'>The early bird catches the <span class='blank'></span>.</div><div class='info'>4 letters</div><div class='hint'>Hint: a crawling creature</div></div><div class='puzzle'><div class='number'>#5</div><div class='sentence'>Don't put all your eggs in one <span class='blank'></span>.</div><div class='info'>6 letters</div><div class='hint'>Hint: a container</div></div></body></html>",
"image": {
"imageName": "ba85c6d6-4376-4171-841d-8b4bc97e1095_fillblanks.png",
"format": ".png",
"downloadURL": "https://storage.googleapis.com/apiverve/APIData/fillintheblanks/ba85c6d6-4376-4171-841d-8b4bc97e1095_fillblanks.png?GoogleAccessId=635500398038-compute%40developer.gserviceaccount.com&Expires=1766010206&Signature=YRHfh28GKDNvEM4Q07qRcNyg3WnPs7Ee7yg0xXKxKRTmT%2Bg3x%2FThpfWsFTeYScpZlgQTVQ3SU1tZMGH74sZJvAHdVkG6IGA9V2lwIfhHzcfu4Uf4VGKL8%2FIa%2FaLupdtrgDqXSFWOJ9EHHeMKnImAhli1qhlMu%2BIuWAiqfPitDlN5pMklv4R5FACKkZld4LXyA82%2BX8bt%2FESyHciZ5jzlqY1JTacL4kW5uK09bpoo9Ytvs8XOOOjB0my1s%2BIq5z0JEwZzw1Jag%2F5vd09wTXzSXeQMzfo%2FDj73kpU7SilAxEGh%2BuflilyDQTXK7krXcdFUGcD5Nd4Wm%2BW7dP8tQKmbAA%3D%3D",
"expires": 1766010206793
}
}
}
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 |
|---|---|---|---|
puzzles | array[5] | Array of fill-in-the-blanks puzzle objects | |
puzzles.0.id | number | 1 | Unique identifier for the puzzle |
puzzles.0.sentence | string | A penny saved is a penny ___. | Full sentence with blank to be filled in |
puzzles.0.answer | string | EARNED | Correct answer word to fill the blank |
puzzles.0.letterCount | number | 6 | Number of letters in the answer |
puzzles.0.hint | string | gained/obtained | Helpful hint describing the answer |
puzzles.0.firstLetter | object | null | First letter of answer or null if not provided |
count | number | 5 | Total number of puzzles generated |
difficulty | string | medium | Difficulty level of the puzzles |
category | string | idioms | Category of the puzzles |
htmlPremium | string | <html><head><title>Fill in the Blanks</title><style>body {font-family: Arial, sans-serif; padding: 20px; max-width: 700px; margin: 0 auto;}h1 {text-align: center; color: #673AB7;}.puzzle {background: #f5f5f5; padding: 20px; margin: 15px 0; border-radius: 10px;}.number {font-weight: bold; color: #673AB7; margin-bottom: 10px;}.sentence {font-size: 18px; line-height: 1.8;}.blank {display: inline-block; min-width: 100px; border-bottom: 2px solid #673AB7; margin: 0 5px;}.hint {font-size: 13px; color: #888; font-style: italic; margin-top: 10px;}.info {font-size: 12px; color: #999; margin-top: 5px;}</style></head><body><h1>Fill in the Blanks</h1><div class='puzzle'><div class='number'>#1</div><div class='sentence'>A penny saved is a penny <span class='blank'></span>.</div><div class='info'>6 letters</div><div class='hint'>Hint: gained/obtained</div></div><div class='puzzle'><div class='number'>#2</div><div class='sentence'>Actions speak louder than <span class='blank'></span>.</div><div class='info'>5 letters</div><div class='hint'>Hint: what we say</div></div><div class='puzzle'><div class='number'>#3</div><div class='sentence'>Don't count your chickens before they <span class='blank'></span>.</div><div class='info'>5 letters</div><div class='hint'>Hint: come out of eggs</div></div><div class='puzzle'><div class='number'>#4</div><div class='sentence'>The early bird catches the <span class='blank'></span>.</div><div class='info'>4 letters</div><div class='hint'>Hint: a crawling creature</div></div><div class='puzzle'><div class='number'>#5</div><div class='sentence'>Don't put all your eggs in one <span class='blank'></span>.</div><div class='info'>6 letters</div><div class='hint'>Hint: a container</div></div></body></html> | Printable HTML rendering of all puzzles |
imagePremium | object | {…} | Generated puzzle image details and download information |
image.imageNamePremium | string | ba85c6d6-4376-4171-841d-8b4bc97e1095_fillblanks.png | Unique filename of generated puzzle image |
image.formatPremium | string | .png | Image file format (.png, .jpg, etc) |
image.downloadURLPremium | string | https://storage.googleapis.com/apiverve/APIData/fillintheblanks/ba85c6d6-4376-4171-841d-8b4bc97e1095_fillblanks.png?GoogleAccessId=635500398038-compute%40developer.gserviceaccount.com&Expires=1766010206&Signature=YRHfh28GKDNvEM4Q07qRcNyg3WnPs7Ee7yg0xXKxKRTmT%2Bg3x%2FThpfWsFTeYScpZlgQTVQ3SU1tZMGH74sZJvAHdVkG6IGA9V2lwIfhHzcfu4Uf4VGKL8%2FIa%2FaLupdtrgDqXSFWOJ9EHHeMKnImAhli1qhlMu%2BIuWAiqfPitDlN5pMklv4R5FACKkZld4LXyA82%2BX8bt%2FESyHciZ5jzlqY1JTacL4kW5uK09bpoo9Ytvs8XOOOjB0my1s%2BIq5z0JEwZzw1Jag%2F5vd09wTXzSXeQMzfo%2FDj73kpU7SilAxEGh%2BuflilyDQTXK7krXcdFUGcD5Nd4Wm%2BW7dP8tQKmbAA%3D%3D | Temporary download URL for puzzle image |
image.expiresPremium | number | 1766010206793 | Timestamp when download URL expires |
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 2 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- Education
- Create vocabulary and comprehension tests
- Language Learning
- Build idiom and proverb exercises
- Trivia Games
- Generate knowledge-testing puzzles
- Worksheets
- Produce printable educational materials
Other ways to use Fill-in-the-Blanks Skill
Set up Fill-in-the-Blanks 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 Games: