Encrypted secret storage with a unified REST, CLI and MCP surface, and a policy-enforcing proxy for AI agents
CipherGate defines 4 tools with basic schemas and descriptions. All tools have names starting with action verbs (get_, list_, rotation_) and descriptions present. However, critical gaps exist: parameter descriptions are sparse or missing (e.g., 'tag' in list_secrets and get_env lack descriptions; 'names' in get_env has no description). Output schemas are completely undocumented, callers cannot know what fields to expect. Error handling is absent from tool definitions. The server is READ_ONLY (low risk), but lacks the rigor expected of production tools. Average tool score: 52/100.
Generate environment variable block for a set of secrets
Retrieve a secret value by name from the secrets gateway
List all secrets accessible to this consumer, with optional tag filter
Show which secrets are due or overdue for rotation
Output schemas completely undocumented. LLMs cannot predict what fields to expect from tool responses (e.g., does list_secrets return {secrets: [...]} or {items: [...], total: N}?). This forces agents to guess and parse unstructured output.
Parameter descriptions missing or incomplete. 'tag' parameter in list_secrets and get_env has no description. 'names' array in get_env lacks description. LLMs cannot infer what these parameters control or when to use them.
No error handling guidance in tool definitions. If get_secret fails (secret not found, permission denied, network error), the tool provides no recovery hints. LLMs cannot self-correct or suggest alternatives.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
No pagination support documented. list_secrets and rotation_report may return large result sets, but no limit, offset, or cursor parameters are defined. Large responses will exhaust context windows.
Tool descriptions lack context on when to use each tool. 'List all secrets accessible to this consumer' does not explain when to call list_secrets vs get_secret, or what the tag filter does. Descriptions should guide tool selection.