RPG Character Skill
The tool
Includes races (Human, Elf, Dwarf, etc.), classes (Warrior, Mage, Rogue, etc.), and randomized stats using 3d6.
Once your client is connected to the VerveKit MCP server, this appears in its tool list as RPGCharacterSkill. It is read-only and open-world: it fetches, it never mutates anything on your side, so most clients will call it without asking you to confirm.
{
"name": "RPGCharacterSkill",
"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 Desktop, 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.
| Argument | Type | Example | Description |
|---|---|---|---|
race | string | elf | Character race: Human, Elf, Dwarf, Halfling, Orc, Gnome, Tiefling, Dragonborn, Half-Elf, Goblin |
class | string | mage | Character class: Warrior, Mage, Rogue, Cleric, Ranger, Paladin, Barbarian, Bard, Druid, Monk, Warlock, Necromancer |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client can read fields without parsing prose. status is "ok" on success and error is null; a null field means the value wasn't available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"name": "Nimara Goldenbough",
"race": {
"name": "Elf",
"traits": [
"Graceful",
"Keen Senses",
"Long-lived"
]
},
"class": {
"name": "Mage",
"description": "Wielder of arcane magic",
"primaryStat": "intelligence",
"hitDie": "d6"
},
"background": "Criminal",
"personality": "Ambitious and driven",
"motivation": "Protect the innocent",
"stats": {
"strength": {
"value": 13,
"modifier": 1
},
"dexterity": {
"value": 12,
"modifier": 1
},
"constitution": {
"value": 9,
"modifier": -1
},
"intelligence": {
"value": 11,
"modifier": 0
},
"wisdom": {
"value": 4,
"modifier": -3
},
"charisma": {
"value": 8,
"modifier": -1
}
},
"hp": 5,
"totalStatPoints": 57,
"highestStat": "strength",
"lowestStat": "wisdom"
}
}Fields
| Field | Type | Example | Description |
|---|---|---|---|
name | string | Nimara Goldenbough | Generated character name combining race and fantasy elements |
race | object | {…} | The character's race, with its traits |
race.name | string | Elf | Character race type selected from available options |
race.traits | array | ["Graceful","Keen Senses","Long-lived"] | Array of racial traits and bonuses specific to race |
class | object | {…} | The character's class, with its description and primary attribute |
class.name | string | Mage | Character class determining abilities and role |
class.description | string | Wielder of arcane magic | Character class role and primary purpose description |
class.primaryStat | string | intelligence | Primary ability score stat for class abilities |
class.hitDiePremium | string | d6 | Hit die size determining health points per level |
backgroundPremium | string | Criminal | Character background determining skills and expertise |
personality | string | Ambitious and driven | Character personality traits and behavioral characteristics |
motivation | string | Protect the innocent | Character motivation driving actions and goals |
stats | object | {…} | Rolled ability scores, each with its value and derived modifier |
stats.strength | object | {…} | Strength score and modifier |
stats.strength.value | number | 13 | Strength ability score (base 3-18 from 3d6) |
stats.strength.modifier | number | 1 | Strength modifier derived from ability score |
stats.dexterity | object | {…} | Dexterity score and modifier |
stats.dexterity.value | number | 12 | Dexterity ability score (base 3-18 from 3d6) |
stats.dexterity.modifier | number | 1 | Dexterity modifier derived from ability score |
stats.constitution | object | {…} | Constitution score and modifier |
stats.constitution.value | number | 9 | Constitution ability score (base 3-18 from 3d6) |
stats.constitution.modifier | number | -1 | Constitution modifier derived from ability score |
stats.intelligence | object | {…} | Intelligence score and modifier |
stats.intelligence.value | number | 11 | Intelligence ability score (base 3-18 from 3d6) |
stats.intelligence.modifier | number | 0 | Intelligence modifier derived from ability score |
stats.wisdom | object | {…} | Wisdom score and modifier |
stats.wisdom.value | number | 4 | Wisdom ability score (base 3-18 from 3d6) |
stats.wisdom.modifier | number | -3 | Wisdom modifier derived from ability score |
stats.charisma | object | {…} | Charisma score and modifier |
stats.charisma.value | number | 8 | Charisma ability score (base 3-18 from 3d6) |
stats.charisma.modifier | number | -1 | Charisma modifier derived from ability score |
hp | number | 5 | Hit points determined by class hit die and constitution |
totalStatPointsPremium | number | 57 | Sum of all six ability scores combined |
highestStatPremium | string | strength | Name of the ability score with highest value |
lowestStatPremium | string | wisdom | Name of the ability score with lowest value |
Failure modes
Errors come back as tool errors with a sentence the model can act on, not a bare status code.
| Status | What it means |
|---|---|
400 / 422 | The arguments didn't validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Out of credits. Not a bad key — the month's allowance is spent. |
404 | This skill isn't part of VerveKit. Check the catalog. |
429 | Brief rate limit. Retrying after a moment succeeds. |
Other ways to use RPG Character Skill
Set up RPG Character 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.
Frequently asked questions
Do I have to tell the agent to use RPGCharacterSkill?
No. The tool's name and description are in the model's context once the server is connected, so it selects the tool when the question calls for it. Naming it explicitly works too and is useful when you want to force the call.
Does connecting the server expose every tool at once?
Yes — one connection lists the whole VerveKit catalog. Clients with a tool budget can usually filter the list; the credit cost is per call, so an unused tool costs nothing.
What does a call cost?
1 credit each time the tool actually runs. A model that reasons about the tool without calling it costs nothing.
Is there a REST version of this?
Yes — the same source is available as a plain HTTPS endpoint on APIVerve, linked above. Same data, same credits, same account.