Hosted MCP server · #119 most used on Smithery
tls-radar
slmusayev/tls-radar
Run SSL/TLS scans, issue free Let's Encrypt certificates (private key stays local), and monitor certificate expiry from inside Claude Code or Cowork - through a single MCP server, no account needed for scans and issuance.
- Uses
- 4.8k
- Tools
- 17
- Runs
- Hosted
- Listed
- 5mo ago
Get started
Add it to your agent
npx -y @smithery/cli@latest install slmusayev/tls-radar --client claudeSwap --client claude for cursor, vscode, windsurf or another client. The CLI asks for any required settings.
claude mcp add --transport http tls-radar https://server.smithery.ai/slmusayev/tls-radar/mcpA hosted server: nothing to install. Run /mcp in Claude Code to sign in if it asks.
[mcp_servers.tls-radar]
url = "https://server.smithery.ai/slmusayev/tls-radar/mcp"Add to ~/.codex/config.toml.
{
"mcpServers": {
"tls-radar": {
"url": "https://server.smithery.ai/slmusayev/tls-radar/mcp"
}
}
}Add to ~/.cursor/mcp.json.
{
"servers": {
"tls-radar": {
"type": "http",
"url": "https://server.smithery.ai/slmusayev/tls-radar/mcp"
}
}
}Add to .vscode/mcp.json.
gemini mcp add --transport http tls-radar https://server.smithery.ai/slmusayev/tls-radar/mcpSaved to .gemini/settings.json.
What it can do
17 tools
scan_domain2 paramsRun a free, anonymous SSL/TLS scan against a hostname and return certificate details. No account required.
| Parameter | Type | Description |
|---|---|---|
domain | string | Hostname to scan (e.g. example.com). No scheme, no path. |
client_id | string | Optional anonymous install id from ~/.config/tlsradar/install_id. Pass it for funnel attribution. If you omit it, the response's install_id is a fresh one to save there. |
create_certificate5 paramsStart issuing a FREE 90-day Let's Encrypt certificate for a domain (no account required). Step 1 of 3. Pick a validation method with `cha…
Start 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
| Parameter | Type | Description |
|---|---|---|
email | string | Contact email for Let's Encrypt expiry notices and the monitoring handoff. |
domain | string | Apex domain, no scheme/www (e.g. example.com). |
challenge | string | Validation method: dns-01 (default) or http-01. |
client_id | string | Optional anonymous install id from ~/.config/tlsradar/install_id (funnel attribution). If omitted, the response's install_id is a fresh one to save there. |
marketing_consent | boolean | Only true if the user explicitly opts in to a free account + reminder email. Default false. |
check_certificate_propagation1 paramCheck whether the DNS TXT records for a certificate order have propagated (Cloudflare/Google/Quad9). Step 2 of issuance — poll until all_…
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.
| Parameter | Type | Description |
|---|---|---|
order_id | string | The order_id from create_certificate. |
finalize_certificate5 paramsFinalize and issue a certificate order in one call: validates the DNS challenges, waits for Let's Encrypt, and returns the issued cert. S…
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",
| Parameter | Type | Description |
|---|---|---|
csr_pem | string | PEM CERTIFICATE REQUEST covering exactly {domain, www.domain}. Preferred — key stays local. |
order_id | string | The order_id from create_certificate. |
passphrase | string | Fallback only: ≥8 chars, protects a returned PKCS#12 bundle. Omit when using csr_pem. |
resume_token | string | Optional. The resume_token from create_certificate; pass it to finalize an order whose row Beacon already purged (~24h). |
max_wait_seconds | integer | How long to wait for validation server-side. Default 60, capped at 75. |
get_certificate_status1 paramReturn the current state of a certificate order (dns_pending, validating, ready, completed, failed) and per-authorization Let's Encrypt s…
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.
| Parameter | Type | Description |
|---|---|---|
order_id | string | The order_id from create_certificate. |
renew_certificate1 paramRenew a certificate by cloning a recent order (requires the original order_id; Beacon purges orders after ~24h). Returns a new order_id a…
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 90-day renewal time), call create_certificate for the domain instead; that IS the renewal.
| Parameter | Type | Description |
|---|---|---|
order_id | string | The original order_id to clone. If you don't have one, use create_certificate instead. |
register_beacon_order4 paramsOBSOLETE — do not call. The cert→monitoring handoff is server-side now (issue via create_certificate, which records the order itself). Th…
OBSOLETE — do not call. The cert→monitoring handoff is server-side now (issue via create_certificate, which records the order itself). This tool is kept only so old plugin versions that still call it don't error; it remains idempotent and harmless.
| Parameter | Type | Description |
|---|---|---|
email | string | Contact email the user gave Beacon |
domain | string | Domain the cert was requested for |
order_id | string | The order_id from beacon.create_order |
webhook_secret | string | Per-order HMAC secret Beacon returned (used to verify the subsequent webhook). Optional — without it, this server can't verify webhooks for the order and will drop them. |
get_accountReturn the current user's plan, limits, and usage so the client can render upgrade nudges proactively.
list_monitorsList all certificates currently being monitored across the user's teams. If the response's structuredContent includes a `nudge` object, t…
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.
add_monitor1 paramAdd a domain to ongoing certificate monitoring with expiry alerts. Requires authentication (the user runs /mcp once). If the plan's monit…
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
| Parameter | Type | Description |
|---|---|---|
domain | string | Hostname to monitor (e.g. example.com). No scheme, no path. |
add_monitors1 paramAdd multiple domains to monitoring in one call. Returns a per-domain status so the caller can show partial-success outcomes. Honors the s…
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.
| Parameter | Type | Description |
|---|---|---|
domains | array | List of hostnames to monitor |
remove_monitor2 paramsStop monitoring a domain. Accepts the domain name or the host_id returned by list_monitors.
| Parameter | Type | Description |
|---|---|---|
domain | string | Domain to stop monitoring |
host_id | string | UUID of the host (alternative to domain) |
list_expiring_certificates1 paramReturn monitored certificates expiring within N days. Defaults to 30. If the response's structuredContent includes a `nudge` object, the …
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.
| Parameter | Type | Description |
|---|---|---|
within | integer | Days from now to look ahead |
get_scan_history2 paramsReturn recent scan results for a domain the user monitors. Useful for spotting issuer changes, grade drops, or vulnerability appearances …
Return recent scan results for a domain the user monitors. Useful for spotting issuer changes, grade drops, or vulnerability appearances over time.
| Parameter | Type | Description |
|---|---|---|
limit | integer | Max results to return |
domain | string | Domain name as it appears in list_monitors |
export_monitorsDump the user's monitors as a JSON structure suitable for backup, migration, or infrastructure-as-code workflows. Tokens and PII are NEVE…
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.
import_monitors1 paramCreate monitors from a JSON structure (typically produced by `export`). Skips domains the user is already monitoring; honors the plan's d…
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.
| Parameter | Type | Description |
|---|---|---|
payload | object | Export payload, version 1.0. Use the `export` tool to generate one. |
invite_team_member3 paramsInvite 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 …
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).
| Parameter | Type | Description |
|---|---|---|
role | string | Invitee role: guest or admin. Defaults to guest. |
email | string | Email address of the person to invite |
team_id | string | Team UUID; defaults to the current team |