MCP server for SSL certificate automation: ACME apply, Aliyun DNS verify, SSH deploy, remote exec, email notify
Server has 5 tools with explicit schemas and descriptions. Naming follows verb_noun convention (apply_certificate, verify_dns, deploy_certificate, execute_remote_command, send_email). Descriptions are present and substantive (100-200 chars). However, schemas lack critical details: no output schemas documented, parameter descriptions in index.ts are truncated vs. source files, no enum constraints for action parameter in verify_dns, no validation guidance for sensitive parameters (passwords, SSH keys). Error handling returns generic text responses without recovery guidance. Missing idempotency hints for irreversible operations (execute_remote_command). No tool annotations (destructiveHint, idempotentHint) despite high-risk operations.
Apply for an SSL/TLS certificate from an ACME CA (e.g., Let's Encrypt) using DNS-01 challenge via Aliyun DNS. Returns the certificate, private key, certificate chain, and expiration date.
Deploy an SSL certificate and private key to a remote server via SSH/SFTP. Supports PEM content directly or local file paths.
Execute a shell command on a remote server via SSH and return stdout, stderr, and exit code.
Send an email notification via SMTP. Supports multiple recipients and optional attachments.
Add or remove a DNS TXT record in Aliyun DNS for domain verification. Typically used for ACME DNS-01 challenges.
No output schemas documented. LLMs cannot predict what fields are returned (e.g., does apply_certificate return cert_pem, key_pem, expiration_date separately or as nested object?). Breaks downstream tool chaining.
Credentials (SSH privateKeyPath, password, SMTP credentials) exposed as tool parameters. Should use server-side secret injection via environment variables. Agent traces will log these values.
Irreversible operations (execute_remote_command, deploy_certificate) lack confirmation/dry-run support and destructiveHint annotations. Agents cannot safely plan multi-step workflows.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2025-06-18+ | v2 |
Error responses are generic text ('Error: <message>') without recovery guidance. No categorization of retryable vs. fatal errors. LLM cannot determine next action.
Parameter descriptions in index.ts are truncated/simplified vs. source files (e.g., applyCert.ts has detailed descriptions, but index.ts omits them). Inconsistent schema exposure.