Cloak MCP server: the model surface that never sees plaintext secrets.
cloak-mcp demonstrates solid definition quality with well-structured tool schemas and clear security-focused descriptions. All 6 tools have explicit descriptions (avg 156 chars, within 10-1024 baseline) and comprehensive input schemas with typed parameters. Naming follows verb_noun convention (list_, get_, sign_, proxy_, mint_, query_). However, output schemas are not documented in the visible source, and error handling guidance is minimal. Parameter descriptions are present but could be more prescriptive about constraints and recovery paths. The security-centric design (never exposing secrets, redacting auth headers) is exemplary, but lacks explicit error classification and recovery guidance patterns.
Get metadata for a specific secret (name, kind, tags) without revealing the plaintext value.
List all secret names in the vault (names and metadata only, never plaintext values).
Mint a short-lived credential (e.g., AWS STS token) using a secret. The secret value is never revealed; only the minted token is returned.
Make an HTTP request on behalf of the user, with a secret used for authentication. The secret value is never revealed; only the response (with auth headers redacted) is returned.
Query the audit log to see which secrets have been used, when, and by which processes. The audit log never contains plaintext secret values.
Sign an HTTP request using a secret (HMAC-SHA256 or AWS SigV4). The secret value is never revealed; only the signature is returned.
Output schemas not documented. Tool descriptions state what is returned (e.g., 'signature is returned', 'response with auth headers redacted') but do not specify structured output field names, types, or pagination. LLMs cannot plan downstream tool calls without knowing response structure.
Error handling lacks recovery guidance. No tool description explains what to do if a secret is not found, if signing fails, or if the audit log is unavailable. Descriptions state what the tool does but not how to recover from failure.
Parameter constraints not fully specified. 'duration_seconds' in mint_short_lived_token lacks min/max bounds. 'limit' in query_audit states 'max 1000' in description but no JSON Schema constraint. 'headers' object in sign_request and proxy_authenticated_http_request lacks validation rules for 'credential-bearing headers are rejected'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2025-06-18+ | v2 |
Destructive/write operations lack confirmation pattern. proxy_authenticated_http_request and mint_short_lived_token modify state (WRITE risk) but descriptions do not mention dry-run, confirmation, or idempotency guarantees. Agents cannot safely retry without risk of duplicate side effects.
query_audit pagination incomplete. Tool accepts limit/offset but response structure not documented. No indication of total count, next_cursor, or whether results are truncated. Large audit logs could exceed context window without clear pagination guidance.