TLS Radar

com.tlsradarPublished by tlsradar.comOfficial publisherv0.5.1Updated Oct 24, 2026

SSL/TLS scanning, free Let's Encrypt issuance, and certificate-expiry monitoring.

VerifiedStreamable HTTPWeb executableCloud & InfrastructureSecurity & Monitoring

Overview

AI-generated overview

Remote MCP server for SSL/TLS scanning, free Let's Encrypt certificate issuance, and certificate-expiry monitoring with alerts.

What you can do
  • Scan a hostname anonymously and get certificate details and scan history
  • Issue, check propagation of, finalize, renew and track status of free Let's Encrypt certificates via DNS or HTTP challenges
  • Add, bulk-add, list and remove monitored domains, and list certificates expiring within N days
  • Export and import monitor configurations as JSON for backup or infrastructure-as-code
  • Read plan, limits and usage, and invite teammates by email
When to use it
Useful when you want an assistant to check a site's TLS configuration, obtain or renew a free Let's Encrypt certificate, or keep track of certificate expiry across several domains without a separate dashboard.
Requirements
A remote streamable HTTP endpoint; no local runtime or package. Scanning and certificate issuance work without an account. Monitoring, plan, export/import and team tools need a one-time OAuth sign-in (run /mcp in Claude Code, or sign in when adding the connector). Issuing a certificate with a locally generated key requires a client that can run openssl locally, such as Claude Code or Cowork.
Before you install
Monitoring, team and export/import tools act on your account and write data (adding or removing monitors, inviting people by email). Free plan is limited to one monitor and one alert per month, and responses may carry upgrade prompts. DNS-provider credentials such as CLOUDFLARE_API_TOKEN or the AWS CLI are read locally for automated DNS challenges. An anonymous install id is sent as a client_id argument unless the local install_id file is removed. Certificate issuance is proxied through the…

Installation

In SourceWeft

  1. Open TLS Radar in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.tlsradar%2Ftlsradar/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "tls-radar": {
      "type": "http",
      "url": "https://tlsradar.com/api/v1/mcp"
    }
  }
}

README

TLS Radar plugin for Claude Code & Cowork

[MIT License] [Claude Code plugin] [smithery badge]

Run SSL/TLS scans, issue free Let's Encrypt certificates, and manage cert monitoring from inside Claude Code or Claude Cowork - through a single MCP server, with nothing to configure.

Independent monitoring from a vendor that doesn't sell certificates - built for the 90-day-cert era, where manual renewal tracking is already finished.

[Installing the plugin and issuing a free cert with /tls-cert]

# Public - no account, no setup/tls-scan example.com                       # free SSL/TLS scan/tls-cert mydomain.dev                      # free 90-day Let's Encrypt cert (private key stays local)/tls-renew mydomain.dev                     # renew a cert
# Connect once for monitoring (OAuth via /mcp)/mcp                                        # built-in Claude Code OAuth flow/tls-monitor add api.foo.io                 # one or many: /tls-monitor add a.com b.com c.com/tls-monitor list/tls-monitor remove api.foo.io/tls-diagnose                               # health check (use when something's off)/tls-upgrade                                # open pricing page

See real output before installing: sample scan report

Other actions - "what's expiring soon," "scan history for X," "what plan am I on," "export/import my monitors," "invite a teammate" - just ask in plain language; the plugin's skill routes them to the right tool. No slash command needed.

How it works

Claude Code's MCP client talks to one remote server:

  • tlsradar.com/api/v1/mcp

Certificate issuance is proxied through that server to the Let's Encrypt backend (Beacon), so there's a single connection and a single auth model - no second server, no token to paste into your shell.

  • Public tools (scan, create_certificate, check_certificate_propagation, finalize_certificate, get_certificate_status, renew_certificate) work with no account.
  • Authenticated tools (monitoring, plan info, export/import, team) use Claude Code's built-in OAuth 2.0 + PKCE. Run /mcp once, pick the tlsradar server, approve in the browser; the token is managed by Claude Code.

When you run /mcp, Claude Code fetches tlsradar.com/.well-known/oauth-authorization-server (RFC 8414), dynamically registers as a public client (RFC 7591), opens the browser for consent (PKCE / RFC 7636), and includes the token on subsequent requests automatically.

Certificates keep your private key local

/tls-cert generates the key + CSR on your machine (via a bundled, tested helper that writes the key with 0600 permissions and never overwrites an existing key - it backs it up) and sends only the CSR. The private key never leaves your computer and no passphrase is ever typed into the chat. Before presenting the issued certificate, the plugin verifies locally that the returned chain actually covers your domain. If you want a .p12 bundle (e.g. for Windows/Java import), the plugin packages it locally too.

An interrupted issuance is resumable: the order state is saved to ~/.config/tlsradar/orders/<domain>.json, so you can close the session mid-flow and later say "finish my cert for example.com" (or re-run /tls-cert) to pick up where you left off. /tls-renew reuses the saved email and challenge method from that file, with confirmation.

You choose how to prove control of the domain, and the plugin remembers your choice (in ~/.config/tlsradar/config.json):

  • dns-01 - you add a TXT record by hand (works anywhere).
  • dns-01-cloudflare / dns-01-route53 - the plugin sets the TXT record for you via the provider API, reading your token from the local environment (CLOUDFLARE_API_TOKEN, or your configured aws CLI). Those credentials stay on your machine - they're never sent to TLS Radar or Beacon.
  • http-01 - serve a file on http://yourdomain (port 80); issues the apex only.

When a cert is issued, TLS Radar emails you about ongoing monitoring - the cert → monitoring handoff is fully automatic and server-side.

Works in Claude Code and Cowork

This is a standard plugin, so it runs in both Claude Code and Claude Cowork. Scanning, certificate issuance, and monitoring all work in either client: the tools come from one MCP server, and the certificate flow runs openssl plus a bundled helper script locally (both clients can run local commands and the bundled script via ${CLAUDE_PLUGIN_ROOT}). Connecting for monitoring uses your client's built-in OAuth - /mcp in Claude Code, or the equivalent connect step in Cowork.

Use in Claude.ai (custom connector)

You don't need Claude Code to scan and monitor from Claude. TLS Radar is a standard remote MCP server, so you can add it as a custom connector in the Claude.ai apps (web, desktop, mobile) on any plan - Free included (Free allows one connector).

  1. Open Settings → Connectors (Team/Enterprise: Organization settings → Connectors, Owner only).
  2. Click Add custom connector.
  3. Paste the connector URL: https://tlsradar.com/api/v1/mcp/connect
  4. Save, then sign in to TLS Radar when the OAuth prompt appears (the connector is an authenticated surface - sign-in connects your account once, then scanning and monitoring both work).

Then just ask in plain language - "scan example.com", "what certs are expiring soon", "monitor api.foo.io". There are no slash commands in Claude.ai; the tool descriptions route your request.

No account? Use Claude Code instead. The anonymous, no-signup scanning and free cert issuance live in the Claude Code plugin (below), which talks to the public …/api/v1/mcp endpoint. The Claude.ai connector requires a one-time sign-in because hosted connectors must authenticate.

Certificate issuance stays a Claude Code / Cowork feature. /tls-cert generates your private key locally with openssl, which the Claude.ai apps can't do (no local shell). In a connector you get scanning and monitoring; to issue a Let's Encrypt cert with the key staying on your machine, use the plugin in Claude Code/Cowork, or the web form at beacon.tlsradar.com.

Install

In Claude Code, add the marketplace and install - two commands, no clone, no paths:

/plugin marketplace add TLS-Radar/tlsradar-claude-plugin/plugin install tlsradar@tlsradar

(Or browse it in the /plugin menu after adding the marketplace.) In Claude Cowork, add it from the plugin catalog (search "TLS Radar"). That's it - scanning and cert issuance work immediately. Run /mcp (or Cowork's connect step) when you want monitoring.

Manual install (no marketplace)
bash
git clone https://github.com/TLS-Radar/tlsradar-claude-plugin ~/.claude/plugins/tlsradar

Free plan limits

  • 1 monitor included free
  • 1 alert per month, delivered at 7 days before expiry
  • Unlimited free scans (rate-limited)
  • Free Let's Encrypt issuance
  • REST API access on every plan, including Free

When you hit the monitor limit, the tool's response includes the recommended upgrade and a pricing URL.

Configuration

Nothing is required. Optional environment variables:

  • TLSRADAR_BASE_URL - override the TLS Radar URL (default https://tlsradar.com). Useful for staging/self-host.

Anonymous usage id. The first time you run a scan or cert command, the plugin mints a random id at ~/.config/tlsradar/install_id and passes it (as a client_id argument) so anonymous usage can be attributed to one install. It identifies an install, not a person. The plugin runs no startup hook, does not modify your shell config, and sends no tracking header - the id travels only as that argument, read from the local file.

To opt out: rm ~/.config/tlsradar/install_id. With the file gone, no id is sent.

Privacy & security

  • This plugin ships no tokens or credentials - there's nothing secret in this repo. See SECURITY.md.
  • The OAuth token is managed by Claude Code's MCP client, not by this plugin.
  • Certificate private keys are generated locally and never sent to any server.
  • DNS-provider credentials (CLOUDFLARE_API_TOKEN, AWS CLI) are read from your local environment and never sent to TLS Radar or Beacon.
  • An anonymous install id is sent for usage attribution, passed as a tool argument read from ~/.config/tlsradar/install_id (see Configuration to opt out). The plugin modifies no shell files and sends no tracking header. It identifies an install, not a person.
  • To revoke access: https://tlsradar.com/oauth/authorized_applications or remove the MCP server in /mcp.
  • Access tokens expire in 2 hours; refresh tokens rotate on use, capped at 90 days.

Layout

.├── README.md                        # this file├── CLAUDE.md                        # architecture / funnel / contracts (humans + AI agents)├── CONTRIBUTING.md                  # dev loop + how to add commands├── CHANGELOG.md                     # version history├── SECURITY.md                      # reporting + why the plugin holds no secrets├── LICENSE                          # MIT├── .claude-plugin/plugin.json       # plugin manifest├── .claude-plugin/marketplace.json  # self-hosting marketplace entry├── .mcp.json                        # MCP server config (one remote URL)├── commands/                        # slash commands (how to add one: CONTRIBUTING.md)├── skills/                          # NL skill router (with its own README)├── tools/manifest.json              # single source of truth for tool names├── scripts/                         # CI guards + tested local helpers (DNS provider, cert CSR/chain)└── evals/                           # tool-routing evals (prompt → expected tool)

Contributing

Start with CONTRIBUTING.md for the dev loop (all checks are offline and run with python3). For architecture, the funnel, contract pitfalls, and the release process, read CLAUDE.md - useful for both humans and AI agents. Changes are tracked in CHANGELOG.md.

Security reports: [email protected] (never a public issue) - see SECURITY.md.

License

MIT © TLS Radar

Source: README.md at commit 1fdc122

Tools

16

scan_domain

SSL/TLS Scan

Run a free, anonymous SSL/TLS scan against a hostname and return certificate details. No account required.

Parametersdomainrequiredclient_id

create_certificate

Start Certificate Issuance

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.

Parametersemailrequireddomainrequiredchallengeclient_idmarketing_consent

check_certificate_propagation

Check Challenge Propagation

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.

Parametersorder_idrequired

finalize_certificate

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.

Parameterscsr_pemorder_idrequiredpassphraseresume_tokenmax_wait_seconds

get_certificate_status

Certificate Order Status

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.

Parametersorder_idrequired

renew_certificate

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.

Parametersorder_idrequired

get_account

Account & Plan Info

Return the current user's plan, limits, and usage so the client can render upgrade nudges proactively.

Takes no parameters.

list_monitors

List Monitored Domains

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.

Takes no parameters.

add_monitor

Add Domain to Monitoring

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.

Parametersdomainrequired

add_monitors

Add Multiple Domains

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.

Parametersdomainsrequired

remove_monitor

Stop Monitoring a Domain

Stop monitoring a domain. Accepts the domain name or the host_id returned by list_monitors.

Parametersdomainhost_id

list_expiring_certificates

Expiring Certificates

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.

Parameterswithin

get_scan_history

Scan History

Return recent scan results for a domain the user monitors. Useful for spotting issuer changes, grade drops, or vulnerability appearances over time.

Parameterslimitdomainrequired

export_monitors

Export Monitors

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.

Takes no parameters.

import_monitors

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.

Parameterspayloadrequired

invite_team_member

Invite Teammate

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).

Parametersroleemailrequiredteam_id

Version history

1
  1. v0.5.1LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts