← Back to search

io.github.cyanheads/toolkit-mcp-server

cyanheads Scanned 22d ago

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

B
87.1 / 100

Versions

2.0.1latest
Jun 28, 2026
2.0.0
Jun 28, 2026
1.0.1
Jan 25, 2025
1.0.0
Jan 25, 2025
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 7

toolkit_hash_value
annotations: verified low

Generate a cryptographic digest of a value, or verify a value against an expected digest. Set operation to "generate" for a lowercase-hex digest, or "compare" to constant-time-check value against the expected digest — compare is timing-safe and avoids manual string equality checks. Algorithm defaults to sha256; sha512 is also secure, while md5 and sha1 are exposed for checksum and file-integrity compatibility ONLY and must not be used for passwords, signatures, or any security purpose. inputEncoding controls how value and expected are read before hashing (utf8 default, or hex/base64 for raw binary data) so binary blobs need no decode round-trip. The canonical use is matching a download against a vendor-published checksum.

input object output object algorithm enum operation enum
readOnlyHint true openWorldHint false idempotentHint true
toolkit_check_network
annotations: verified low

Run a read-only network diagnostic from the server host. mode selects the probe: ping (ICMP round-trip), traceroute (the hop path to the target), connectivity (a raw TCP connect to target on port), or public_ip (the host's own egress IP, where target is absent and ignored). target takes an IPv4/IPv6 address or a hostname (resolved server-side) and is required for every mode except public_ip; port is required only for connectivity and is passed separately, never as host:port. count sets ping echo requests and timeoutMs the per-probe deadline. A host that does not respond is reported as reachable:false — a valid result, not an error. The populated output fields depend on mode. This tool diagnoses the SERVER's own network, so it is useful only on a local/self-hosted deployment; reaching a private/reserved/internal target additionally requires the operator to enable TOOLKIT_ALLOW_PRIVATE_NETWORK.

input object output object
readOnlyHint true openWorldHint true idempotentHint false
toolkit_generate_qr
annotations: verified low

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, png_base64 returns base64-encoded PNG bytes (with mimeType and byteLength), and terminal returns a block of Unicode block characters renderable in a monospace terminal. errorCorrection (L/M/Q/H) trades data capacity for damage tolerance, margin sets the quiet-zone width, and scale sets pixels per module for raster output. The returned version (1–40) reflects how dense the encoded data is. png_base64 renders (modules + 2 × margin) × scale pixels per side and rejects anything past ${QR_MAX_PNG_EDGE_PX} px with a typed raster_too_large error, so a dense symbol needs a lower scale; svg carries no such limit.

input object
readOnlyHint true openWorldHint false idempotentHint true
toolkit_encode_value
annotations: verified low

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 text from an encoded value. base64url uses the URL-safe alphabet (- and _ instead of + and /); url applies encodeURIComponent / decodeURIComponent. Decoding a value that is malformed for the chosen encoding is reported as a recoverable error, not a silent best-effort.

input object output object result string operation enum
readOnlyHint true openWorldHint false idempotentHint true
toolkit_geolocate_ip
annotations: verified low

Resolve a public IP address (or hostname) to geographic and network metadata: country, region, city, latitude/longitude, the owning ASN and organization, timezone, and the proxy/hosting/mobile quality flags. target accepts an IPv4/IPv6 address or a hostname — a hostname is DNS-resolved first and the resolvedIp field echoes which IP was actually located. The provider is called directly (never the target), so this is SSRF-free and safe to expose anywhere. Results are best-effort and provider-bounded: VPNs, proxies, mobile NAT, and anycast all defeat IP-to-location, accuracy is city-level at best, and many fields can be absent for reserved or thinly-documented ranges — absent fields are reported as unknown, never invented. Read proxy, hosting, and mobile before trusting the coordinates: a true on any of them means the location describes infrastructure, not the user. Private/reserved addresses have no public geolocation and are rejected. The source field names which provider answered.

input object output object target string latitude number
readOnlyHint true openWorldHint true idempotentHint true
toolkit_check_system
annotations: verified low

Report a facet of the server host's system state, read-only. what selects the facet: os (platform, release, architecture, hostname, uptime, Node version), cpu (model, core count, speed), memory (total/free/used bytes), load (1/5/15-minute load averages, all zero on Windows), or interfaces (non-internal network interfaces with their addresses and families). Exactly one facet object is populated per call, matching what; the others are absent. All values describe the host this server runs on, NOT the calling client — so this is useful only on a local or self-hosted deployment. interfaces and os disclose host topology and version details, which is why this tool is gated off by default.

arch string cores number input object model string output object release string hostname string platform string speedMhz number freeBytes number usedBytes number totalBytes number nodeVersion string uptimeSeconds number
readOnlyHint true openWorldHint false idempotentHint false
toolkit_generate_id
annotations: verified low

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 Crockford-base32, lexicographically sortable). Set count to mint a batch in one call (up to 1000); the returned ids array always contains exactly count values and is never truncated. For uuid_v7 and ulid, a batch is monotonic — strictly increasing even within the same millisecond — so the ids array stays in sorted creation order. IDs from this tool feed into toolkit_generate_qr (pass ids[0] as data) to create a scannable code.

type enum count number input object output object
readOnlyHint true openWorldHint false idempotentHint false

Permissions 2

shell high
Server uses shell capabilities via: child_process, spawn(), spawnSync()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 33

info
Tool 'toolkit_hash_value' annotations are consistent annotation_checker · 80%
info
Tool 'toolkit_check_network' annotations are consistent annotation_checker · 80%
info
Tool 'toolkit_generate_qr' annotations are consistent annotation_checker · 80%
info
Tool 'toolkit_encode_value' annotations are consistent annotation_checker · 80%
info
Tool 'toolkit_geolocate_ip' annotations are consistent annotation_checker · 80%
info
Tool 'toolkit_check_system' annotations are consistent annotation_checker · 80%
info
Tool 'toolkit_generate_id' annotations are consistent annotation_checker · 80%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
medium
Buffer.from base64 in cyanheads-toolkit-mcp-server-c0734d5/src/mcp-server/tools/definitions/hash-value.tool.ts:31 entropy_analyzer · 75%
medium
Buffer.from base64 in cyanheads-toolkit-mcp-server-c0734d5/tests/tools/generate-qr.tool.test.ts:45 entropy_analyzer · 75%
medium
Buffer.from base64 in cyanheads-toolkit-mcp-server-c0734d5/tests/tools/generate-qr.tool.test.ts:149 entropy_analyzer · 75%
medium
Hex string literal (>50 chars) in cyanheads-toolkit-mcp-server-c0734d5/tests/tools/wire-contract.test.ts:147 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in cyanheads-toolkit-mcp-server-c0734d5/tests/tools/hash-value.tool.test.ts:33 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in cyanheads-toolkit-mcp-server-c0734d5/tests/tools/hash-value.tool.test.ts:55 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in cyanheads-toolkit-mcp-server-c0734d5/tests/tools/hash-value.tool.test.ts:65 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in cyanheads-toolkit-mcp-server-c0734d5/tests/tools/hash-value.tool.test.ts:146 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in cyanheads-toolkit-mcp-server-c0734d5/tests/tools/hash-value.tool.test.ts:158 entropy_analyzer · 70%
medium
Hex string literal (>50 chars) in cyanheads-toolkit-mcp-server-c0734d5/tests/tools/hash-value.tool.test.ts:163 entropy_analyzer · 70%
info
package.json metadata manifest_parser · 100%
info
Tool: toolkit_hash_value manifest_parser · 75%
info
Tool: toolkit_check_network manifest_parser · 75%
info
Tool: toolkit_generate_qr manifest_parser · 75%
info
Tool: toolkit_encode_value manifest_parser · 75%
info
Tool: toolkit_geolocate_ip manifest_parser · 75%
info
Tool: toolkit_check_system manifest_parser · 75%
info
Tool: toolkit_generate_id manifest_parser · 75%
info
Required env vars (4) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
info
SBOM generated: 13 components sbom_generator · 100%
high
Hardcoded Password found in cyanheads-toolkit-mcp-server-c0734d5/framework-skills/api-utils/references/security.md secret_scanner · 65%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%