@pipeworx/crtsh
Connect: https://gateway.pipeworx.io/crtsh/mcp · Install: one-click buttons
No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.
Tools: 2
Certificate Transparency log search from crt.sh — every TLS certificate ever issued for a domain and its subdomains, with issuer, validity window, serial number and the full SAN list.
Tools
crtsh_search_domain(domain, include_subdomains?, exclude_expired?, limit?)— every logged certificate for a domain, de-duplicated by certificate id and sorted newest-first, plusunique_names: every distinct hostname seen across all of them. That list is the subdomain-enumeration answer most callers actually want.crtsh_certificate(id?, serial?, include_pem?)— one certificate by crt.sh id or by hex serial number. Returns the PEM body; a lookup byserialalso carries the logged metadata, a lookup byidreturns the PEM alone (see Traps).
Auth
Keyless.
Data sources
- https://crt.sh/?q=%25.example.com&output=json — certificate search by
identity (domain, SAN, or
%-wildcard). - https://crt.sh/?serial=…&output=json — certificate search by hex serial.
- <https://crt.sh/?d=
> — the PEM body of one certificate.
crt.sh is operated by Sectigo and is a JSON view over a PostgreSQL database of the public Certificate Transparency logs.
Traps
- crt.sh is slow. A wildcard query on a large domain routinely takes 10-20s and the server enforces no query timeout of its own. Every call in this pack is bound at 25s rather than the pack default.
output=jsonis honoured only for identity-style queries —q=,serial=,Identity=.?id=<n>&output=jsonanswers the literal stringUnsupported output type: jsonwith HTTP 200. Parsed without checking, that is a silent zero;crtJson()rejects any body that does not start with[or{.?d=<id>and?id=<id>are different parameters.dreturns the PEM;idrenders an HTML page. This is whycrtsh_certificatecan return the PEM for an id but not its metadata — there is no JSON-by-id endpoint, so metadata arrives only on theserial=path.name_valuepacks every SAN into one newline-separated field. Splitting it is the difference between reporting 8 certificates and the 40 hostnames the caller asked for.- One certificate appears as several rows — crt.sh returns one row per
(certificate, matching identity), so a cert with six matching SANs is six
rows with the same
id. De-duplicate byidor every count is inflated. - A precertificate and its final certificate are two CT entries with two
crt.sh ids and the same serial number, so an id count roughly doubles the
number of certificates actually issued.
crtsh_search_domainreports both:total_log_entries_found(distinct crt.sh ids) andunique_certificates_found(distinct serials). Quote the second one when answering “how many certificates”. - CT covers publicly trusted CAs only. A host behind an internal or private CA appears nowhere here; an empty result is not proof the host does not exist.
Tools
- crtsh_search_domain — “Find subdomains of [domain]” / “what TLS certificates exist for [domain]” / “certificate transparency for [host]” / “who issued the cert for [site]” — every certificate ever logged to the public Cert
- crtsh_certificate — “Show me certificate [crt.sh id]” / “get the PEM for cert [id]” / “which certificate has serial [hex]” — fetch one logged certificate from crt.sh by its crt.sh id or by its hex serial number. Returns
Tools
crtsh_certificate— Show me certificate [crt.sh id] / get the PEM for cert [id] / which certificate has serial [hex] — fetch one logged certificate from crt.sh by its crt.sh id or by its hex serial number. Returns the PEcrtsh_search_domain— Find subdomains of [domain] / what TLS certificates exist for [domain] / certificate transparency for [host] / who issued the cert for [site] — every certificate ever logged to the public Certificate