Overview
ULID Generator works by combining a timestamp component (10 characters) with random data (16 characters) using Crockford's Base32 alphabet. Results are case-insensitive, sortable, and URL-safe.
Live Test ULID Generator Skill Skill →
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as ULIDGeneratorSkill. 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": "ULIDGeneratorSkill",
"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 ULIDs to generate default 1 · range 1–100 |
timestampOptional | integer | Custom timestamp in milliseconds (optional, uses current time if not specified) |
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": {
"ulids": [
"01KCMMK564DMMCC17AVBZTVNT1",
"01KCMMK565ZE4681DFAEWBF95G",
"01KCMMK566K1REYH0JEK4Q8DKW",
"01KCMMK5670W9EHFNX76R8FKWH",
"01KCMMK568SFRY6DCZTZYMR66Y"
],
"count": 5,
"timestamp": 1765924246724,
"format": "26 characters (10 timestamp + 16 random)",
"sortable": true,
"case_insensitive": 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 |
|---|---|---|---|
ulids | array | ["01KCMMK564DMMCC17AVBZTVNT1","01KCMMK565ZE4681DFAEWBF95G","01KCMMK566K1REYH0JEK4Q8DKW"] | Array of generated ULID strings in proper format |
count | number | 5 | Number of ULIDs generated in this request |
timestampPremium | number | 1765924246724 | Timestamp in milliseconds used for generation |
format | string | 26 characters (10 timestamp + 16 random) | ULID format specification and component breakdown details |
sortable | boolean | true | Whether generated ULIDs maintain natural chronological sorting |
case_insensitive | boolean | true | Whether ULIDs are case-insensitive for comparison purposes |
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
- Database Keys
- Generate sortable primary keys for databases that maintain chronological order
- Distributed Systems
- Create unique identifiers across distributed systems with time-based sorting
- Log Aggregation
- Generate sortable IDs for log entries and event tracking systems
- API Resources
- Create resource identifiers that reveal creation time and sort naturally
Other ways to use ULID Generator Skill
Set up ULID 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: