Search / com.tlsradar/tlsradar
TLS Radar
R0· no sign-inSSL/TLS scanning, free Let's Encrypt issuance, and certificate-expiry monitoring.
v0.5.1 · active · repository · website · descriptor JSON · versions
Search / com.tlsradar/tlsradar
R0· no sign-inSSL/TLS scanning, free Let's Encrypt issuance, and certificate-expiry monitoring.
v0.5.1 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"tlsradar": {
"type": "http",
"url": "https://tlsradar.com/api/v1/mcp"
}
}
}claude mcp add --transport http tlsradar https://tlsradar.com/api/v1/mcp[mcp_servers.tlsradar]
url = "https://tlsradar.com/api/v1/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"tlsradar": {
"type": "remote",
"url": "https://tlsradar.com/api/v1/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"tlsradar": {
"type": "http",
"url": "https://tlsradar.com/api/v1/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=tlsradar&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vdGxzcmFkYXIuY29tL2FwaS92MS9tY3AifQ%3D%3D"
}{
"servers": {
"tlsradar": {
"type": "http",
"url": "https://tlsradar.com/api/v1/mcp"
}
}
}{
"mcpServers": {
"tlsradar": {
"httpUrl": "https://tlsradar.com/api/v1/mcp"
}
}
}extensions:
"tlsradar":
enabled: true
name: "tlsradar"
type: streamable_http
uri: "https://tlsradar.com/api/v1/mcp"
timeout: 300
protocol.modernnewest supported version is 2024-11-05; 2026-07-28 not supported, older versions are deprecated until 2027-07-28protocol.statelessonly applies to 2026-07-28 serversprotocol.transportstreamable HTTPprotocol.list_ttlonly applies to 2026-07-28 serversauth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_length1 tools have descriptions over 1,024 characters, which crowds the contexttools.schemasevery tool has an object input schematools.annotations16 of 16 tools declare readOnlyHint or destructiveHinttools.directory_hints2 of 16 tools declare all four hints; missing: scan_domain (destructiveHint, idempotentHint); check_certificate_propagation (destructiveHint); finalize_certificate (destructiveHint); …tools.token_costabout 2,684 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes2 tool changes in 30 daysstability.rug_pullno tool changed its meaning under the same namedeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packagerenew_certificatechangeddescriptionRenew a certificate by cloning a recent order (requires the original order_id; Beacon purges orders after ~24h). Returns a new order_id and fresh DNS TXT records - then poll check_certificate_propagation and call finalize_certificate. If you don't have an order_id (the usual case at 90-day renewal time), call create_certificate for the domain instead; that IS the renewal.
Renew a certificate by cloning a recent order (requires the original order_id; Beacon purges orders after ~24h). Returns a new order_id and fresh DNS TXT records - then poll check_certificate_propagation and call finalize_certificate. If you don't have an order_id (the usual case at renewal time), call create_certificate for the domain instead; that IS the renewal.
create_certificatechangeddescriptionStart issuing a FREE 90-day Let's Encrypt certificate for a domain (no account required). Step 1 of 3. Pick a validation method with `challenge`: "dns-01" (default; publish a TXT record; covers apex + www) or "http-01" (serve a file over HTTP on port 80; issues the exact domain only). dns-01 with a DNS-provider API token is the most automatable; http-01 suits a server you control on port 80. Returns an order_id plus either dns_records (dns-01) or http_files (http-01) to put in place. Next: poll `check_certificate_propagation` until all_found, then call `finalize_certificate`. Strongly prefer the CSR path at finalize (the private key never leaves the user's machine). Issuing automatically offers the user ongoing monitoring by email once it completes - don't add a monitor manually afterward.
Start issuing a FREE Let's Encrypt certificate for a domain (no account required). Step 1 of 3. Lifetime is Let's Encrypt's default: 90 days today, 64 days from 2027-02-10; read the real expiry from the issued certificate. Pick a validation method with `challenge`: "dns-01" (default; publish a TXT record; covers apex + www) or "http-01" (serve a file over HTTP on port 80; issues the exact domain only). dns-01 with a DNS-provider API token is the most automatable; http-01 suits a server you control on port 80. Returns an order_id plus either dns_records (dns-01) or http_files (http-01) to put in place. Next: poll `check_certificate_propagation` until all_found, then call `finalize_certificate`. Strongly prefer the CSR path at finalize (the private key never leaves the user's machine). Issuing automatically offers the user ongoing monitoring by email once it completes - don't add a monitor manually afterward.
Full history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +dns-namespace +website +reachable +uptime-97% ~updated-127d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://tlsradar.com/api/v1/mcp streamable-http | none | yes | 97% | 260 ms | 2024-11-05 | 2026-10-20 |
add_monitor | Add a domain to ongoing certificate monitoring with expiry alerts. Requires authentication (the user runs /mcp once). If the plan's monitor limit is reached, the response's structuredContent carries a limit-reached payload - when relaying it, LEAD with `recommended_upgrade` (typically Starter, $9.99/mo), mention `also_available` tiers in a single closing line, and offer removing an existing monitor as the free alternative. Don't dump a full tier comparison; that's choice paralysis at the moment of action. |
add_monitors | Add multiple domains to monitoring in one call. Returns a per-domain status so the caller can show partial-success outcomes. Honors the same plan-limit checks as add_monitor. |
check_certificate_propagationread-only | Check whether the DNS TXT records for a certificate order have propagated (Cloudflare/Google/Quad9). Step 2 of issuance - poll until all_found is true, then call finalize_certificate. Returns per-record resolver results. |
create_certificate | Start issuing a FREE Let's Encrypt certificate for a domain (no account required). Step 1 of 3. Lifetime is Let's Encrypt's default: 90 days today, 64 days from 2027-02-10; read the real expiry from the issued certificate. Pick a validation method with `challenge`: "dns-01" (default; publish a TXT record; covers apex + www) or "http-01" (serve a file over HTTP on port 80; issues the exact domain only). dns-01 with a DNS-provider API token is the most automatable; http-01 suits a server you control on port 80. Returns an order_id plus either dns_records (dns-01) or http_files (http-01) to put in place. Next: poll `check_certificate_propagation` until all_found, then call `finalize_certificate`. Strongly prefer the CSR path at finalize (the private key never leaves the user's machine). Issuing automatically offers the user ongoing monitoring by email once it completes - don't add a monitor manually afterward. |
export_monitorsread-only | Dump the user's monitors as a JSON structure suitable for backup, migration, or infrastructure-as-code workflows. Tokens and PII are NEVER included - only domain configuration. |
finalize_certificate | Finalize and issue a certificate order in one call: validates the DNS challenges, waits for Let's Encrypt, and returns the issued cert. Step 3 of issuance - call after check_certificate_propagation reports all_found. STRONGLY PREFER passing csr_pem (generate the key + CSR locally with openssl so the private key never leaves the machine). Returns leaf_pem/chain_pem/fullchain_pem. If you must, pass a passphrase instead to get a PKCS#12 bundle - but a CSR is safer. If it replies "still validating", DNS hasn't fully propagated: re-check check_certificate_propagation and call again. Needs a locally-generated CSR (csr_pem) - requires a local shell with openssl. On a surface without one (e.g. a Claude.ai custom connector) this can't complete; it returns guidance to finish in Claude Code/Cowork or the web form. Scanning and monitoring work everywhere. On success the structuredContent carries a `handoff` object - relay `handoff.message` to the user and do NOT separately call add_monitor; the cert→monitoring handoff is automatic and server-side. |
get_accountread-only | Return the current user's plan, limits, and usage so the client can render upgrade nudges proactively. |
get_certificate_statusread-only | Return the current state of a certificate order (dns_pending, validating, ready, completed, failed) and per-authorization Let's Encrypt statuses. Use it to resume an interrupted issuance. |
get_scan_historyread-only | Return recent scan results for a domain the user monitors. Useful for spotting issuer changes, grade drops, or vulnerability appearances over time. |
import_monitors | Create monitors from a JSON structure (typically produced by `export`). Skips domains the user is already monitoring; honors the plan's domain limit. Returns a per-domain status. |
invite_team_member | Invite a user to a team by email. Defaults to the user's current team. Honors the plan's seat limit (returns the same upgrade payload as add_monitor when the cap is hit). |
list_expiring_certificatesread-only | Return monitored certificates expiring within N days. Defaults to 30. If the response's structuredContent includes a `nudge` object, the user is watching enough soon-to-expire certs to benefit from a higher tier - mention it casually ONCE (lead with `nudge.recommended_upgrade`); skip it if it doesn't fit. |
list_monitorsread-only | List all certificates currently being monitored across the user's teams. If the response's structuredContent includes a `nudge` object, the user is at their monitor cap - surface it casually ONCE (lead with `nudge.recommended_upgrade`, mention `nudge.also_available` in one closing line); don't force it if it doesn't fit the conversation. |
remove_monitordestructive | Stop monitoring a domain. Accepts the domain name or the host_id returned by list_monitors. |
renew_certificate | Renew a certificate by cloning a recent order (requires the original order_id; Beacon purges orders after ~24h). Returns a new order_id and fresh DNS TXT records - then poll check_certificate_propagation and call finalize_certificate. If you don't have an order_id (the usual case at renewal time), call create_certificate for the domain instead; that IS the renewal. |
scan_domainread-only | Run a free, anonymous SSL/TLS scan against a hostname and return certificate details. No account required. |
Schemas: list_tools.
{
"name": "com.tlsradar/tlsradar",
"title": "TLS Radar",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://tlsradar.com/api/v1/mcp",
"type": "streamable-http"
}
],
"version": "0.5.1",
"repository": {
"url": "https://github.com/TLS-Radar/tlsradar-claude-plugin",
"source": "github"
},
"websiteUrl": "https://tlsradar.com/cli",
"description": "SSL/TLS scanning, free Let's Encrypt issuance, and certificate-expiry monitoring."
}