Overview
Each ID follows the original CUID layout, built from five parts concatenated in order: the letter `c`; the current time in milliseconds written in base 36; a four-character base-36 counter; a four-character fingerprint; and two four-character random blocks.
The counter increments for every ID the serving instance creates and wraps back to zero after 36^4 values, so IDs made in the same millisecond on the same instance still differ. The fingerprint is derived from the server process ID and the length of its hostname, which separates IDs made by different instances at the same moment. The random blocks come from the JavaScript runtime's standard random number generator, which is not a cryptographic source: treat CUIDs as unique identifiers, not as secrets or unguessable tokens. Use a password or token generator for those.
Because the timestamp comes first and is the same length for any current date, IDs sort roughly by creation time. Ordering within the same millisecond is reliable only for IDs from the same instance, since separate instances keep separate counters.
`count` sets how many IDs are returned, from 1 to 100, defaulting to 1, and `cuids` holds them in generation order. `format`, `collision_resistant` and `sortable` are fixed descriptive values that are the same on every response; they are null on the Free plan.
Live Test CUID Generator Skill Skill →
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as CUIDGeneratorSkill. 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": "CUIDGeneratorSkill",
"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 |
|---|---|---|
countOptional | integer | Number of Cuids to generate default 1 · range 1–100 |
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": {
"cuids": [
"cmj95ed27000000145v116use",
"cmj95ed2700010014uuounuyc",
"cmj95ed27000200147pwbz35y",
"cmj95ed27000300142h9ivqrz",
"cmj95ed27000400149ingh73n",
"cmj95ed2700050014mg9alsah",
"cmj95ed27000600149utx0fy3",
"cmj95ed270007001467kspfhp",
"cmj95ed2700080014n7ykgwxf",
"cmj95ed2700090014rrnfehcn"
],
"count": 10,
"format": "c + timestamp + counter + fingerprint + random",
"collision_resistant": true,
"sortable": true
}
}
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 |
|---|---|---|---|
cuids | array | ["cmj95ed27000000145v116use","cmj95ed2700010014uuounuyc","cmj95ed27000200147pwbz35y"] | Array of generated collision-resistant unique identifier strings |
count | number | 10 | Total count of CUIDs generated in this request |
formatPremium | string | c + timestamp + counter + fingerprint + random | Description of CUID component composition and structure format |
collision_resistantPremium | boolean | true | Indicates whether generated CUIDs provide collision resistance guarantee |
sortablePremium | boolean | true | Indicates whether CUIDs are naturally sortable by timestamp component |
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 1 credit each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- Distributed Databases
- Generate safe unique keys across distributed database systems and shards
- Horizontal Scaling
- Create identifiers that work reliably across horizontally scaled applications
- Event Sourcing
- Generate sortable event identifiers for event sourcing and CQRS patterns
- Multi-tenant Systems
- Create unique identifiers across multiple tenants and isolated environments
Other ways to use CUID Generator Skill
Set up CUID 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: