Cert Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Cert Mcp Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A standalone Python MCP (Model Context Protocol) server for managing SSL/TLS certificates across multiple device types using Let's Encrypt with Cloudflare DNS-01 challenges.
| Device Type | Protocol | Authentication |
|---|---|---|
| FortiGate | REST API | API Token / Username+Password |
| FortiManager | JSON-RPC | API Token / Username+Password |
| FortiAnalyzer | JSON-RPC | API Token / Username+Password |
| Windows | WinRM/PowerShell | NTLM / Basic / Kerberos |
| Linux | SSH | Password / SSH Key |
# Clone the repository
cd /home/twingate/CERT-MCP-SERVER
# Install with uv
uv sync
# Or install with pip
pip install -e .export CERT_MCP_CONFIG=/path/to/config.json
export CLOUDFLARE_API_TOKEN=your_cloudflare_token
export [email protected]
export ACME_ACCOUNT_KEY_PATH=~/.acme/account.keyCreate a config.json file:
{
"server": {
"host": "0.0.0.0",
"port": 8815,
"name": "cert-mcp-server",
"version": "1.0.0"
},
"devices": {
"fortigate": {
"fw-01": {
"host": "192.168.1.1",
"api_token": "your_api_token",
"vdom": "root"
}
},
"linux": {
"nginx-01": {
"host": "192.168.1.10",
"username": "admin",
"ssh_key_path": "~/.ssh/id_rsa",
"service_type": "nginx"
}
}
},
"acme": {
"email": "[email protected]",
"staging": false,
"account_key_path": "~/.acme/account.key"
},
"logging": {
"level": "INFO",
"console": true
}
}# Run the server
uv run python -m cert_mcp.server
# Or use the entry point
cert-mcp# Run the HTTP server
uv run python -m cert_mcp.server_http
# Or use the entry point
cert-mcp-httpThe HTTP server provides a REST API at http://localhost:8815.
list_devices - List all registered devicesadd_device - Add a new deviceremove_device - Remove a devicetest_device_connection - Test connectivityget_device_info - Get device detailslist_devices_by_type - Filter devices by typelist_certificates - List certificates on a deviceget_certificate_detail - Get certificate detailscheck_certificate_expiry - Check expiry statuscheck_all_expiring - Find all expiring certificatesverify_certificate_chain - Verify chain validityrequest_certificate - Request new certificatelist_cloudflare_zones - List DNS zonesverify_cloudflare_token - Verify Cloudflare tokenget_acme_account_info - Get ACME account infoimport_certificate - Import certificate to devicerequest_and_install - Request and install in one stepimport_ca_certificate - Import CA certificatecopy_certificate - Copy between devicesreplace_certificate - Replace existing certificaterenew_certificate - Renew with Let's Encryptauto_renew_check - Check and renew expiring certsdelete_certificate - Delete from devicedelete_certificate_batch - Delete from multiple devicesfmg_list_managed_devices - List managed FortiGatesfmg_get_certificates_all - Get certs from all managed devicesfmg_push_certificate - Push cert to managed devicesfmg_check_certificate_status - Check cert status on deviceshealth_check - Server health statusget_server_info - Server informationAdd to your MCP client configuration:
{
"mcpServers": {
"cert-mcp": {
"command": "uv",
"args": ["run", "--directory", "/home/twingate/CERT-MCP-SERVER", "python", "-m", "cert_mcp.server"],
"env": {
"CERT_MCP_CONFIG": "/path/to/config.json",
"CLOUDFLARE_API_TOKEN": "your_token"
}
}
}
}# Using MCP tool
await request_and_install(
device_id="fw-01",
domains=["example.com", "www.example.com"],
cert_name="example-cert",
staging=False
)# Find all certificates expiring in 30 days
result = await check_all_expiring(days_threshold=30)await add_device(
device_id="nginx-02",
device_type="linux",
host="192.168.1.20",
username="admin",
ssh_key_path="~/.ssh/id_rsa",
service_type="nginx"
)# Install dev dependencies
uv sync --dev
# Run tests
uv run pytest
# Format code
uv run black src/
uv run ruff check src/MIT License
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.