cyanheads avatar

Toolkit Mcp Server

cyanheads/toolkit-mcp-server

Generate IDs, QR codes, and hashes, encode values, geolocate IPs, plus gated host diagnostics.

GitHub stars
20
tools
5
auth
Secret needed
transport
STDIO, HTTP
env vars
14
last updated
Nov 4, 2026

Install

From registry metadata
$ npx add-mcp https://toolkit.caseyjhand.com/mcp --name toolkit

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http toolkit https://toolkit.caseyjhand.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 5 tools

Verified live against the running server on Nov 6, 2026.

toolkit_hash_valueGenerate a cryptographic digest or HMAC of a value, or verify a value against an expected digest. Set operation to "generate" for a digest, or "compare" to constant-time-check value against the expected digest — compare is timing-safe and avoids manual string equality checks....8 params

Generate a cryptographic digest or HMAC of a value, or verify a value against an expected digest. Set operation to "generate" for a digest, or "compare" to constant-time-check value against the expected digest — compare is timing-safe and avoids manual string equality checks....

Parameters* required
algorithmstring
Digest algorithm. sha256 (default), sha384, or sha512 for security; md5/sha1 are for checksums and for verifying existing HMAC-SHA1 signatures only — not for new security use.one of sha256 · sha384 · sha512 · sha1 · md5default: sha256
digestEncodingstring
Form of the generated digest: lowercase hex (default), standard base64, base64url (URL-safe alphabet, unpadded — the JWS signature form), or sri (<algorithm>-<base64>, sha256/sha384/sha512 only, an...one of hex · base64 · base64url · sridefault: hex
expectedstring
The digest to compare against, recognized from its shape at the algorithm's digest length: hex (any case), standard base64, or base64url, bare or prefixed as <algorithm>:<digest> or <algorithm>=<di...
inputEncodingstring
How value is decoded before hashing: utf8 text, hex, or base64.one of utf8 · hex · base64default: utf8
operationstring
"generate" produces a digest; "compare" constant-time-checks value against expected. When omitted, resolves to "compare" if expected is supplied and "generate" otherwise.one of generate · compare
secretstring
HMAC key. When non-empty, the digest is HMAC(algorithm, secret, value) instead of a plain hash, for generate and compare alike. Read per secretEncoding and used exactly as sent, never trimmed; an e...
secretEncodingstring
How secret is written: utf8 text (default, as a webhook signing secret is), hex, base64, or base64url (as a JWK k member is). Read only when secret is non-empty.one of utf8 · hex · base64 · base64urldefault: utf8
value*string
The data to hash, interpreted per inputEncoding (raw text by default).
toolkit_generate_idMint cryptographically-random identifiers using the platform CSPRNG — the correct source for IDs that must be unpredictable, unlike model-generated values. type selects the format: uuid_v4 (random, the default), uuid_v7 (time-ordered, sortable by creation), or ulid (26-char Cr...2 params

Mint cryptographically-random identifiers using the platform CSPRNG — the correct source for IDs that must be unpredictable, unlike model-generated values. type selects the format: uuid_v4 (random, the default), uuid_v7 (time-ordered, sortable by creation), or ulid (26-char Cr...

Parameters* required
countinteger
How many identifiers to mint (1–1000). The full batch is always returned.default: 1
typestring
Identifier format: uuid_v4 (random), uuid_v7 (time-ordered), or ulid (sortable Crockford-base32).one of uuid_v4 · uuid_v7 · uliddefault: uuid_v4
toolkit_generate_qrEncode text or a URL into a QR code. data is the content to encode (a link, a generated identifier such as toolkit_generate_id's ids[0], or any string). format selects the output: svg returns inline SVG markup sized in pixels, png_base64 returns base64-encoded PNG bytes (with...5 params

Encode text or a URL into a QR code. data is the content to encode (a link, a generated identifier such as toolkit_generate_id's ids[0], or any string). format selects the output: svg returns inline SVG markup sized in pixels, png_base64 returns base64-encoded PNG bytes (with...

Parameters* required
data*string
The text or URL to encode, stored as UTF-8. Capacity is counted in bytes: 2953 UTF-8 bytes is the absolute ceiling (QR version 40, level L, byte mode). The 2953-character limit here is only an uppe...
errorCorrectionstring
Error-correction level: L (~7% recoverable) to H (~30%). Higher tolerance lowers data capacity.one of L · M · Q · Hdefault: M
formatstring
Output format: svg markup, png_base64 (raster bytes), or terminal (plain Unicode half-blocks, drawn for a dark background).one of svg · png_base64 · terminaldefault: svg
margininteger
Quiet-zone width in modules around the symbol. The spec recommends 4.default: 4
scaleinteger
Pixels per module for svg (its width and height) and png_base64. Ignored for terminal. png_base64 also bounds the whole image at 2048 px per side, so a dense symbol or a wide margin admits a lower...default: 4
toolkit_encode_valueEncode or decode a value across base64, base64url, hex, or URL (percent) encoding, in either direction. Set operation to "encode" to transform raw UTF-8 text into the chosen encoding, or "decode" to recover the original bytes from an encoded value. Decoded bytes come back as U...4 params

Encode or decode a value across base64, base64url, hex, or URL (percent) encoding, in either direction. Set operation to "encode" to transform raw UTF-8 text into the chosen encoding, or "decode" to recover the original bytes from an encoded value. Decoded bytes come back as U...

Parameters* required
encoding*string
The encoding to apply: base64, URL-safe base64url, hex, or URL percent-encoding.one of base64 · base64url · hex · url
operation*string
"encode" transforms text into the encoding; "decode" recovers the bytes from an encoded value.one of encode · decode
outputEncodingstring
Decode only: how the recovered bytes are returned. utf8 (used when omitted) returns text and fails when the bytes are not valid UTF-8; hex, base64, and base64url (unpadded) return the raw bytes re-...one of utf8 · hex · base64 · base64url
value*string
The value to transform — raw text for encode, an encoded string for decode. Whitespace is ignored when decoding hex, base64, or base64url; a url value is taken literally.
toolkit_geolocate_ipResolve a public IP or dotted hostname to country, region, city, coordinates, ASN, AS holder and name, organization, ISP, timezone, and proxy/hosting/mobile flags. Supply target for one lookup or targets for an ordered batch, never both; blank target and empty targets are unse...2 params

Resolve a public IP or dotted hostname to country, region, city, coordinates, ASN, AS holder and name, organization, ISP, timezone, and proxy/hosting/mobile flags. Supply target for one lookup or targets for an ordered batch, never both; blank target and empty targets are unse...

Parameters* required
targetvalue
One public IP or dotted hostname; mutually exclusive with nonempty targets.
targetsarray
Ordered public IPs or dotted hostnames; first 100 positions are served, every remainder is disclosed. Mutually exclusive with nonblank target.

Sponsors

Configuration

MCP_LOG_LEVELdefault: info

Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

TOOLKIT_ENABLE_NET_DIAGNOSTICSdefault: false

Register the gated toolkit_check_network tool. Off by default — leave off for hosted/shared deployments.

TOOLKIT_ENABLE_SYSTEM_INFOdefault: false

Register the gated toolkit_check_system tool. Off by default — only meaningful on a local deployment.

TOOLKIT_ALLOW_PRIVATE_NETWORKdefault: false

With network diagnostics enabled, permit private/reserved/loopback targets. The second explicit gate; off by default.

TOOLKIT_GEO_API_KEYsecret

API key for the geolocation endpoint, if it requires one. The default ip-api tier is keyless.

TOOLKIT_GEO_BASE_URLdefault: http://ip-api.com

Base URL for an ip-api-compatible geolocation endpoint. Default is the keyless ip-api endpoint, which is plaintext HTTP.

TOOLKIT_GEO_CACHE_TTL_SECONDSdefault: 3600

Geolocation cache TTL in seconds. Geolocation is stable, so repeats are cached.

TOOLKIT_GEO_RATE_LIMIT_PER_MINdefault: 45

Max geolocation requests per minute; excess requests are rejected with a retryable rate-limit error. Default 45 matches the ip-api free tier.

TOOLKIT_GEO_BATCH_RATE_LIMIT_PER_MINdefault: 15

Independent batch geolocation requests per minute; excess requests fail immediately with wait and recovery guidance.

MCP_TRANSPORT_TYPEdefault: http

Selects the HTTP transport.

MCP_HTTP_HOSTdefault: 127.0.0.1

The hostname for the HTTP server.

MCP_HTTP_PORTdefault: 3010

The port to run the HTTP server on.

MCP_HTTP_ENDPOINT_PATHdefault: /mcp

The endpoint path for the MCP server.

MCP_AUTH_MODEdefault: none

Authentication mode to use: 'none', 'jwt', or 'oauth'.

Readme

@cyanheads/toolkit-mcp-server

Generate random IDs, QR codes, and hashes, encode and decode values, and geolocate IPs, plus gated network and system diagnostics, via MCP. STDIO or Streamable HTTP.

7 Tools • 1 Skill

Details

Repository
github.com/cyanheads/toolkit-mcp-server
Package
@cyanheads/toolkit-mcp-server
Transport
STDIO, HTTP
Auth
Required
Registry
MCP registry, active
Resources
1
Tools verified
Nov 6, 2026

More from cyanheads