MCP Server
NewCall every Vothlab tool directly from Claude, Cursor, or any MCP-compatible LLM client — no copy-pasting into a browser tab.
What is MCP?
The Model Context Protocol is an open standard that lets LLM clients — Claude Desktop, Claude Code, Cursor, and others — call external tools during a conversation. The Vothlab MCP server exposes 16 of our developer tools (encoding, hashing, generation, format conversion, regex, diff) as MCP tools, so an LLM can call hash_generate oruuid_generate mid-conversation instead of you switching tabs. All tools are free and deterministic — no LLM calls happen inside the server itself, no data is retained.
Install & Connect
Point any client that supports remote (Streamable HTTP) MCP servers straight at the hosted endpoint — nothing to install.
claude mcp add --transport http vothlab https://mcp.vothlab.comOr add it manually to your client's MCP config (Claude Desktop, Cursor, etc.):
{
"mcpServers": {
"vothlab": {
"url": "https://mcp.vothlab.com"
}
}
}Quick Example
Once connected, just ask your LLM client naturally — e.g. “generate a UUID and hash it with SHA-256”. Under the hood, the client sends a JSON-RPC tools/call request like this:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "hash_generate",
"arguments": {
"input": "vothlab",
"algorithm": "sha256"
}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "0ae85bf797ef2a640186a5c056aac0e57143ff368414f71b297441e4f2da6f3c"
}
],
"isError": false
}
}Full API Reference — 16 Tools
Encode & Decode
base64_encode
Encode UTF-8 text to Base64.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| input* | string | — | Text to encode |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "base64_encode",
"arguments": {
"input": "hello world"
}
}
}Response
aGVsbG8gd29ybGQ=base64_decode
Decode a Base64 string to UTF-8 text.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| input* | string | — | Base64 string to decode |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "base64_decode",
"arguments": {
"input": "aGVsbG8gd29ybGQ="
}
}
}Response
hello worldurl_encode
URL-encode a string (percent-encoding).
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| input* | string | — | Text to encode |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "url_encode",
"arguments": {
"input": "a b/c"
}
}
}Response
a%20b%2Fcurl_decode
URL-decode a percent-encoded string.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| input* | string | — | Percent-encoded text to decode |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "url_decode",
"arguments": {
"input": "a%20b%2Fc"
}
}
}Response
a b/cjwt_decode
Decode a JWT's header, payload, and expiry. Does NOT verify the signature.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| token* | string | — | The JWT to decode |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "jwt_decode",
"arguments": {
"token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.sig"
}
}
}Response
{
"header": { "alg": "HS256" },
"payload": { "sub": "1234" },
"expiresAt": null,
"issuedAt": null
}Generate
hash_generate
Generate a cryptographic hash of the given text.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| input* | string | — | Text to hash |
| algorithm | enum | sha256 | md5 | sha1 | sha256 | sha384 | sha512 |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "hash_generate",
"arguments": {
"input": "hello",
"algorithm": "sha256"
}
}
}Response
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b982uuid_generate
Generate one or more random UUIDs (v4).
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| count | integer | 1 | How many UUIDs to generate (1–1000) |
| uppercase | boolean | false | Return uppercase UUIDs |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "uuid_generate",
"arguments": {
"count": 2
}
}
}Response
c4fb1c02-6005-412f-9763-c1692566311d
ef797f7b-c205-4f68-80f7-67a6d3bfd57epassword_generate
Generate a strong random password with configurable character sets.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| length | integer | 16 | Password length (4–256) |
| uppercase | boolean | true | Include A–Z |
| lowercase | boolean | true | Include a–z |
| numbers | boolean | true | Include 0–9 |
| symbols | boolean | true | Include !@#$%^&* etc. |
| excludeAmbiguous | boolean | false | Exclude 0, O, l, 1, I |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "password_generate",
"arguments": {
"length": 20
}
}
}Response
xQ8!kLp2$mZr9@wTv3NbConvert
yaml_to_json
Convert YAML to JSON.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| yaml* | string | — | YAML source |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "yaml_to_json",
"arguments": {
"yaml": "a: 1\nb:\n - x\n - y"
}
}
}Response
{
"a": 1,
"b": ["x", "y"]
}json_to_yaml
Convert JSON to YAML.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| json* | string | — | JSON source |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "json_to_yaml",
"arguments": {
"json": "{\"a\":1,\"b\":[\"x\",\"y\"]}"
}
}
}Response
a: 1
b:
- x
- yjson_to_csv
Convert a JSON array of flat objects to CSV.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| json* | string | — | JSON array of flat objects |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "json_to_csv",
"arguments": {
"json": "[{\"a\":1,\"b\":\"x\"},{\"a\":2,\"b\":\"y,z\"}]"
}
}
}Response
a,b
1,x
2,"y,z"csv_to_json
Convert CSV (with header row) to a JSON array of objects.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| csv* | string | — | CSV source, first row is the header |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "csv_to_json",
"arguments": {
"csv": "a,b\n1,x\n2,\"y,z\""
}
}
}Response
[
{ "a": "1", "b": "x" },
{ "a": "2", "b": "y,z" }
]timestamp_convert
Convert between Unix epoch (seconds or ms) and a human-readable date, or get the current time.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| input | string | — | Epoch or parseable date string. Omit for "now". |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "timestamp_convert",
"arguments": {
"input": "1700000000"
}
}
}Response
{
"iso": "2023-11-14T22:13:20.000Z",
"utc": "Tue, 14 Nov 2023 22:13:20 GMT",
"epochSeconds": 1700000000,
"epochMillis": 1700000000000
}color_convert
Convert a color between HEX, RGB, and HSL.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| color* | string | — | HEX (#rrggbb), rgb(r,g,b), or hsl(h,s%,l%) |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "color_convert",
"arguments": {
"color": "#6366f1"
}
}
}Response
{
"hex": "#6366f1",
"rgb": "rgb(99, 102, 241)",
"hsl": "hsl(239, 84%, 67%)"
}Text & Regex
regex_test
Test a regular expression against text and return all matches with capture groups and indices.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| pattern* | string | — | Regex pattern, without slashes |
| flags | string | g | Regex flags, e.g. 'gi' |
| input* | string | — | Text to test against |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regex_test",
"arguments": {
"pattern": "(\\w+)@(\\w+)",
"input": "a@b c@d"
}
}
}Response
{
"matchCount": 2,
"matches": [
{ "match": "a@b", "index": 0, "groups": ["a", "b"] },
{ "match": "c@d", "index": 4, "groups": ["c", "d"] }
]
}text_diff
Compute a diff between two texts, line- or word-based.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| before* | string | — | Original text |
| after* | string | — | Modified text |
| mode | enum | line | line | word |
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "text_diff",
"arguments": {
"before": "hello world",
"after": "hello there"
}
}
}Response
- hello world
+ hello thereThis is the free tier — deterministic tools, no external API calls, no data retention. Premium AI-powered tools (natural-language → regex/SQL, debug assistant) are planned behind an API key on the same MCP endpoint.