MCP Server

toolkit-mcp-server

io.github.cyanheads/toolkit-mcp-server
Developer Tools Maps & Location Security Public & reachable MCP 2025-11-25

What this MCP does

Generates identifiers and QR codes, encodes values, computes hashes, geolocates IPs, and provides limited host diagnostics.

toolkit_encode_value
toolkit-mcp-server: encode value
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 UTF-8 text by default; set outputEncoding to "hex" or "base64" to receive them re-encoded instead, which is lossless for binary data and transcodes between encodings (a base64 digest to hex, for example). Decoding never substitutes replacement characters: bytes that are not valid UTF-8 text are reported as a recoverable error that points at outputEncoding. Whitespace in hex, base64, and base64url values is ignored, so line-wrapped MIME bodies and PEM bodies decode as-is (drop PEM's -----BEGIN/END----- lines, which are not base64). base64url uses the URL-safe alphabet (- and _ instead of + and /); url applies encodeURIComponent and percent-decoding. A value that is malformed for the chosen encoding is reported as a recoverable error, not a silent best-effort.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['operation', 'encoding', 'value'], 'properties': {'value': {'type': 'string', 'description': 'The value to transform â\x80\x94 raw text for encode, an encoded string for decode. Whitespace is ignored when decoding hex, base64, or base64url; a url value is taken literally.'}, 'encoding': {'enum': ['base64', 'base64url', 'hex', 'url'], 'type': 'string', 'description': 'The encoding to apply: base64, URL-safe base64url, hex, or URL percent-encoding.'}, 'operation': {'enum': ['encode', 'decode'], 'type': 'string', 'description': '"encode" transforms text into the encoding; "decode" recovers the bytes from an encoded value.'}, 'outputEncoding': {'enum': ['utf8', 'hex', 'base64'], 'type': 'string', 'description': '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 and base64 return the raw bytes re-encoded, losslessly. Rejected when operation is "encode".'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['encoding', 'operation', 'result']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['decode_failed', 'decode_not_utf8', 'output_encoding_not_applicable'], 'description': 'Machine-readable failure mode. Declared by this tool: `decode_failed`: operation is "decode" but value is malformed for the chosen encoding. `decode_not_utf8`: operation is "decode", outputEncoding is utf8 (or omitted), and the decoded bytes are not valid UTF-8 text. `output_encoding_not_applicable`: operation is "encode" and outputEncoding was supplied; it selects how decoded bytes are returned. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'result': {'type': 'string', 'description': 'The transformed value: encoded text for encode; for decode, the recovered bytes as UTF-8 text, hex, or base64 per outputEncoding.'}, 'encoding': {'enum': ['base64', 'base64url', 'hex', 'url'], 'type': 'string', 'description': 'The encoding that was applied.'}, 'operation': {'enum': ['encode', 'decode'], 'type': 'string', 'description': 'The operation that was performed.'}, 'outputEncoding': {'enum': ['utf8', 'hex', 'base64'], 'type': 'string', 'description': 'How result renders the decoded bytes: utf8 text, hex, or base64. Present for operation "decode".'}}, 'additionalProperties': False}
toolkit_generate_id
toolkit-mcp-server: generate id
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 minted in the same millisecond are separated by random gaps, so no id in a batch can be derived from another. IDs from this tool feed into toolkit_generate_qr (pass ids[0] as data) to create a scannable code.
Read only
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'type': {'enum': ['uuid_v4', 'uuid_v7', 'ulid'], 'type': 'string', 'default': 'uuid_v4', 'description': 'Identifier format: uuid_v4 (random), uuid_v7 (time-ordered), or ulid (sortable Crockford-base32).'}, 'count': {'type': 'integer', 'default': 1, 'maximum': 1000, 'minimum': 1, 'description': 'How many identifiers to mint (1â\x80\x931000). The full batch is always returned.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['type', 'ids', 'count']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'ids': {'type': 'array', 'items': {'type': 'string', 'description': 'A single minted identifier.'}, 'description': 'The minted identifiers â\x80\x94 exactly count of them, in mint order; for uuid_v7 and ulid that order is strictly increasing (sorted by creation), with random gaps between ids minted in the same millisecond.'}, 'type': {'enum': ['uuid_v4', 'uuid_v7', 'ulid'], 'type': 'string', 'description': 'The identifier format that was minted.'}, 'count': {'type': 'number', 'description': 'The number of identifiers minted (equals the requested count).'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'description': 'Machine-readable failure mode.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}}, 'additionalProperties': False}
toolkit_generate_qr
toolkit-mcp-server: generate QR code
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 mimeType and byteLength), and terminal returns plain Unicode half-block characters (no escape codes) for a monospace display, drawn for a dark background: light modules, quiet zone included, are blocks and dark modules are spaces. errorCorrection (L/M/Q/H) trades data capacity for damage tolerance, margin sets the quiet-zone width in modules, and scale sets pixels per module for svg and png_base64, so both are (modules + 2 × margin) × scale pixels per side. The returned version (1–40) reflects how dense the encoded data is. png_base64 rejects an image past 2048 px per side with a typed raster_too_large error, so a dense symbol needs a lower scale; svg is vector markup and carries no such limit.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['data'], 'properties': {'data': {'type': 'string', 'maxLength': 2953, 'minLength': 1, 'description': '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 upper bound, since a non-ASCII character takes 2â\x80\x934 bytes. Usable capacity drops at higher errorCorrection levels, so over-capacity data is rejected with a typed data_too_large error rather than a generic failure.'}, 'scale': {'type': 'integer', 'default': 4, 'maximum': 32, 'minimum': 1, 'description': '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 scale than 32 there.'}, 'format': {'enum': ['svg', 'png_base64', 'terminal'], 'type': 'string', 'default': 'svg', 'description': 'Output format: svg markup, png_base64 (raster bytes), or terminal (plain Unicode half-blocks, drawn for a dark background).'}, 'margin': {'type': 'integer', 'default': 4, 'maximum': 20, 'minimum': 0, 'description': 'Quiet-zone width in modules around the symbol. The spec recommends 4.'}, 'errorCorrection': {'enum': ['L', 'M', 'Q', 'H'], 'type': 'string', 'default': 'M', 'description': 'Error-correction level: L (~7% recoverable) to H (~30%). Higher tolerance lowers data capacity.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['format', 'content', 'version']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['data_too_large', 'raster_too_large'], 'description': 'Machine-readable failure mode. Declared by this tool: `data_too_large`: data exceeds the QR capacity for the chosen errorCorrection level and encoding mode. `raster_too_large`: format is png_base64 and (modules + 2 Ã\x97 margin) Ã\x97 scale exceeds the pixel budget. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'format': {'enum': ['svg', 'png_base64', 'terminal'], 'type': 'string', 'description': 'The format that was produced.'}, 'content': {'type': 'string', 'description': 'The QR artifact: SVG markup, the terminal half-block grid (newline-separated rows), or base64 PNG bytes for png_base64.'}, 'version': {'type': 'number', 'description': 'QR symbol version (1â\x80\x9340); higher versions hold denser data and indicate denser content.'}, 'mimeType': {'enum': ['image/svg+xml', 'image/png'], 'type': 'string', 'description': 'MIME type of content for image formats. Absent for the terminal format.'}, 'byteLength': {'type': 'number', 'description': 'Decoded byte size of the PNG. Present only for png_base64.'}}, 'additionalProperties': False}
toolkit_geolocate_ip
toolkit-mcp-server: geolocate IP
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.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['target'], 'properties': {'target': {'anyOf': [{'type': 'string', 'format': 'ipv4', 'pattern': '^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$', 'description': 'A raw IPv4 address.'}, {'type': 'string', 'format': 'ipv6', 'pattern': '^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$', 'description': 'A raw IPv6 address.'}, {'type': 'string', 'pattern': '^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$', 'description': 'A dotted hostname, e.g. "example.com".'}], 'description': 'A public IPv4/IPv6 address or a hostname (e.g. "8.8.8.8" or "example.com").'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['target', 'resolvedIp', 'source']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'asn': {'type': 'string', 'maxLength': 256, 'description': 'Autonomous System number, e.g. "AS15169". Absent on providers that omit it.'}, 'org': {'type': 'string', 'maxLength': 256, 'description': 'Owning organization or ISP, e.g. "Google LLC". Absent when unknown.'}, 'city': {'type': 'string', 'maxLength': 256, 'description': 'City name. Absent when unknown.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unresolvable_host', 'private_target'], 'description': 'Machine-readable failure mode. Declared by this tool: `unresolvable_host`: A hostname target failed DNS resolution. `private_target`: The target resolves to a private/reserved IP with no public geolocation. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'proxy': {'type': 'boolean', 'description': 'True when the address is a known proxy, VPN, or Tor exit â\x80\x94 the location describes the exit node, not the user. Absent when the provider does not report it.'}, 'mobile': {'type': 'boolean', 'description': 'True when the address belongs to a mobile carrier network, where NAT can place the location far from the device. Absent when unreported.'}, 'region': {'type': 'string', 'maxLength': 256, 'description': 'Region or state name. Absent when unknown.'}, 'source': {'type': 'string', 'description': 'The provider that answered the lookup, e.g. "ip-api".'}, 'target': {'type': 'string', 'description': 'The target as supplied (IP or hostname).'}, 'country': {'type': 'string', 'maxLength': 256, 'description': 'Country name. Absent when the provider does not report it.'}, 'hosting': {'type': 'boolean', 'description': 'True when the address belongs to a hosting or datacenter network, so the location is a facility rather than a person. Absent when unreported.'}, 'latitude': {'type': 'number', 'description': 'Latitude in decimal degrees. Absent when unknown.'}, 'timezone': {'type': 'string', 'maxLength': 256, 'description': 'IANA timezone, e.g. "America/Los_Angeles". Absent when unknown.'}, 'longitude': {'type': 'number', 'description': 'Longitude in decimal degrees. Absent when unknown.'}, 'resolvedIp': {'type': 'string', 'description': 'The IP that was actually located (a supplied hostname is resolved to this first).'}, 'countryCode': {'type': 'string', 'maxLength': 256, 'description': 'ISO 3166-1 alpha-2 country code. Absent when unknown.'}}, 'additionalProperties': False}
toolkit_hash_value
toolkit-mcp-server: hash value
Generate a cryptographic digest 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. Omitting operation compares when expected is supplied and generates otherwise. Algorithm defaults to sha256; sha384 and sha512 are 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. digestEncoding selects the generated digest form: lowercase hex (default), base64, or sri (<algorithm>-<base64>, the npm lockfile integrity and Subresource Integrity form, sha256/sha384/sha512 only). expected is accepted as hex, base64, or SRI, recognized by its shape at the algorithm's digest length, so a published checksum can be pasted as-is; an SRI value may hold several space-separated entries, as an npm integrity field can, and matches when any entry for algorithm does. inputEncoding controls how value is 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 or a lockfile integrity entry.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['value'], 'properties': {'value': {'type': 'string', 'description': 'The data to hash, interpreted per inputEncoding (raw text by default).'}, 'expected': {'type': 'string', 'description': 'The digest to compare against, as hex (any case), standard base64, or SRI (<algorithm>-<base64>); the form is recognized from its shape at the algorithm\'s digest length, and a string of only hex digits is always read as hex. An SRI value may carry several space-separated entries: entries for other algorithms are skipped, and it matches when any entry for algorithm matches. Supplying it with operation omitted runs a compare; it is rejected with operation "generate".'}, 'algorithm': {'enum': ['sha256', 'sha384', 'sha512', 'sha1', 'md5'], 'type': 'string', 'default': 'sha256', 'description': 'Digest algorithm. sha256 (default), sha384, or sha512 for security; md5/sha1 are checksum/compat only â\x80\x94 not for security.'}, 'operation': {'enum': ['generate', 'compare'], 'type': 'string', 'description': '"generate" produces a digest; "compare" constant-time-checks value against expected. When omitted, resolves to "compare" if expected is supplied and "generate" otherwise.'}, 'inputEncoding': {'enum': ['utf8', 'hex', 'base64'], 'type': 'string', 'default': 'utf8', 'description': 'How value is decoded before hashing: utf8 text, hex, or base64.'}, 'digestEncoding': {'enum': ['hex', 'base64', 'sri'], 'type': 'string', 'default': 'hex', 'description': 'Form of the generated digest: lowercase hex (default), standard base64, or sri (<algorithm>-<base64>, sha256/sha384/sha512 only). Applies to operation "generate".'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['algorithm', 'operation']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['missing_expected', 'expected_without_compare', 'expected_malformed', 'expected_length_mismatch', 'expected_algorithm_mismatch', 'sri_unsupported_algorithm', 'invalid_input_encoding'], 'description': 'Machine-readable failure mode. Declared by this tool: `missing_expected`: operation is "compare" but no expected digest was supplied. `expected_without_compare`: operation is "generate" but an expected digest was also supplied, so it would be ignored. `expected_malformed`: expected is not a hex, standard base64, or sha256/sha384/sha512 SRI digest, or an SRI value holds a token that is not an SRI entry. `expected_length_mismatch`: expected is a recognized digest form but its length does not match the algorithm, so compare would always fail. `expected_algorithm_mismatch`: expected is SRI and none of its entries names the chosen algorithm. `sri_unsupported_algorithm`: digestEncoding is "sri" and algorithm is md5 or sha1, which SRI does not define. `invalid_input_encoding`: value is not valid for the declared inputEncoding (e.g. non-hex characters with inputEncoding "hex"). Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'digest': {'type': 'string', 'description': 'Digest of value in the requested digestEncoding: lowercase hex, base64, or <algorithm>-<base64>. Present for operation "generate".'}, 'matches': {'type': 'boolean', 'description': 'Constant-time equality of the computed digest against expected. Present for operation "compare".'}, 'algorithm': {'enum': ['sha256', 'sha384', 'sha512', 'sha1', 'md5'], 'type': 'string', 'description': 'The algorithm used.'}, 'operation': {'enum': ['generate', 'compare'], 'type': 'string', 'description': 'The operation performed, after resolving an omitted operation.'}, 'lengthInBytes': {'type': 'number', 'description': 'Digest size in bytes (32 for sha256, 48 for sha384, 64 for sha512, 20 for sha1, 16 for md5). Present for "generate".'}}, 'additionalProperties': False}
Changed
toolkit_encode_value
Sept. 25, 2026, 2:51 a.m.
Changed
toolkit_generate_qr
Sept. 25, 2026, 2:51 a.m.
Changed
toolkit_generate_id
Sept. 25, 2026, 2:51 a.m.
Changed
toolkit_hash_value
Sept. 25, 2026, 2:51 a.m.
Added
toolkit_geolocate_ip
Sept. 17, 2026, 12:41 p.m.
Added
toolkit_encode_value
Sept. 17, 2026, 12:41 p.m.
Added
toolkit_generate_qr
Sept. 17, 2026, 12:41 p.m.
Added
toolkit_generate_id
Sept. 17, 2026, 12:41 p.m.
Added
toolkit_hash_value
Sept. 17, 2026, 12:41 p.m.

hyperion

com.thetempleofdoom.hyperion/hyperion

Acts as a paid MCP tool marketplace and utility gateway with server discovery, HTTP and JavaScript tools, research, data conversi…

Vee3

io.github.Vee3io/vee3

Manages Clerk authentication infrastructure, including users, organizations, domains, sessions, tokens, OAuth, SSO, machines, per…

IA-QA — 130+ QA & Dev Tools for AI Agents

io.github.JcJamet/ia-qa-toolbox

Provides deterministic QA, evaluation, testing, code analysis, prompt and RAG checks, model comparison, and web security diagnost…

validoria-mcp

com.validoria/validoria-mcp

Runs continuous website, API, and webshop tests covering security, SEO, performance, accessibility, browser journeys, and inciden…

HubVibe: Pay-per-Call Tools for AI Agents: Web Search, Email Verify, KYC, Stocks, Crypto, News, Data

io.github.Its-fortunatefolly/hubvibe

Offers paid utilities for web audits, HTTP fetching and extraction, BigQuery analysis, LLM processing, code execution, blockchain…

developer-tools

net.programmes/developer-tools

Provides general-purpose developer utilities for encoding, hashing, encryption, JSON, HTML, CSS, networking, and related data tra…

Qiniso

io.github.qinisolabs/qiniso

Provides deterministic formatting, parsing, holiday and tax lookups, address handling, and checksum or structure validation for i…

ContrastAPI

com.contrastcyber/api

Provides security research and assessment tools covering CVEs, IOCs, dependencies, secrets, injection risks, HTTP headers, domain…