An MCP (Model Context Protocol) server that lets AI agents perform authenticated API requests without exposing credentials to the LLM. It provides MCP tools for securely storing secrets (AES-256-GCM encrypted), making HTTP requests with automatic credential injection, and forwarding calls to other MCP servers with secrets resolved at runtime.
Server has 7 tools with descriptions and basic structure, but critical gaps in schema definition and parameter documentation. Only 2 of 7 tools (ping, list_secrets) have complete, visible input schemas in the code. The remaining 5 tools lack explicit JSON Schema definitions in the AddTool calls, schemas are inferred from the tool descriptions but not formally registered. Descriptions are present but vary widely in quality (ping: 13 chars, mcp_tool_request: 300+ chars). Parameter descriptions exist in the rubric summary but are NOT visible in the actual source code's AddTool registrations. No output schemas documented. Error handling and recovery guidance absent. Security-critical tools (request_secret, delete_secret, rekey_secrets) lack confirmation/dry-run patterns despite destructive operations.
Permanently delete a stored secret by its identifier. Prompts the user for confirmation before deletion. The secret is removed from the database and cannot be recovered. Use list_secrets first to verify the identifier exists.
Execute an HTTP request with optional secret injection. Supports GET, POST, PUT, PATCH, and DELETE methods. Secrets stored via request_secret can be injected into the URL, headers, or body using the <<secret:identifier>> placeholder syntax. Secrets are decrypted at request time and never logged or exposed in responses. Example header: {"Authorization": "Bearer <<secret:github-pat>>"}.
List all stored secret identifiers. Returns the names of all secrets currently stored in the database. Does not expose secret values — only identifiers are returned. Use this to check which secrets are available before making an http_request with <<secret:identifier>> placeholders.
Universal gateway to call other MCP tools securely with secret injection. Pass the MCP configuration (type, command, args, env) along with the tool name and parameters. Secrets using <<secret:identifier>> placeholders are decrypted within secure-actions and never exposed to the target MCP or LLM context. Example: {"mcpConfig": {"type": "stdio", "command": "npx", "args": ["@modelcontextprotocol/server-github"], "env": {"GITHUB_PERSONAL_ACCESS_TOKEN": "<<secret:github-pat>>"}}, "tool": "create_issue", "parameters": {"owner": "user", "repo": "repo", "title": "Issue"}}
5 of 7 tools lack explicit input schemas in source code. AddTool calls register only Name and Description; no InputSchema field visible. Schemas cannot be verified from static analysis.
No output schemas documented for any tool. LLMs cannot infer response structure, field types, or chaining IDs needed for downstream calls.
Destructive operations (delete_secret, rekey_secrets) lack confirmation or dry-run patterns. Agents can permanently delete secrets or rekey without explicit user approval beyond a description mention.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Health check tool. Returns pong to verify the MCP server is running and responsive.
Re-encrypt all stored secrets with a new master key. Use this if the master key (~/.secure-actions/master.key) is compromised or leaked. Generates a fresh 256-bit key, decrypts all secrets with the old key, re-encrypts with the new key, and replaces the key file. Requires user confirmation. Provide an optional 'reason' for the audit trail.
Securely collect and store a secret from the user. Prompts the user via an interactive form to enter a secret value (e.g. API key, token, password). The value is encrypted with AES-256-GCM before being persisted to the database. The identifier is normalized to lowercase with hyphens (e.g. 'My Token' becomes 'my-token'). If the identifier already exists, the user is prompted to confirm before the existing secret is updated. Use this before http_request when authentication credentials are needed.
No error handling guidance. Tools do not document what errors are retryable, user-fixable, or fatal. No recovery suggestions provided to LLMs on failure.
ping tool description is only 13 characters ('Health check tool. Returns pong...' truncated). Descriptions under 20 chars cannot adequately explain tool purpose and selection criteria.