A security daemon that intercepts and approves/denies MCP tool calls and shell commands before execution. Provides approval workflows, policy evaluation, and event logging for IDE integrations (Cursor, Claude).
SideGuard is a security approval daemon with 10 tools. Most tools have descriptions (8/10), but parameter schemas are severely incomplete. Only 3 tools (CreateApprovalRequest, IngestEvent, AnalyzeCommand) show full input schemas with typed fields and descriptions. The remaining 7 tools have minimal or missing parameter documentation. Tool names are clear and action-oriented (Create, Wait, Decide, List, Get, Set, Ingest, Query, Analyze, Health), but parameter quality is inconsistent. Error handling is not visible in the provided code. Output schemas are not documented. The server is HTTP-based (good for protocol readiness) but definition quality lags significantly behind production baselines.
Analyze a command for security risks and policy violations.
Submit a command or MCP tool call for approval. Returns a pending approval ID that can be waited on or decided.
Record an allow or deny decision for a pending approval request.
Retrieve the current approval mode (auto_allow, auto_deny, or ask).
Health check endpoint for daemon availability.
Record a command execution event (approval decision, action taken, latency) for audit and analytics.
Retrieve all pending approval requests awaiting user decision.
Query recorded command execution events with filtering by action, working directory, and pagination.
7 of 10 tools have incomplete or missing input schemas. ListPending, GetApprovalMode, and Health declare empty input objects with no type information. WaitApproval and DecideApproval lack full parameter type definitions visible in source.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., approval ID from CreateApprovalRequest response). This violates the documented-output-schema pattern.
Error handling and recovery guidance not visible in provided code. No evidence of actionable error messages, error classification (retryable vs fatal), or recovery hints. Agents cannot self-correct on failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Set the approval mode to auto_allow, auto_deny, or ask.
Long-poll for approval decision on a pending request. Blocks until user decides or timeout occurs.
WaitApproval and ListPending lack pagination parameters (limit, offset, cursor). QueryEvents has limit and before cursor, but no total count or next_cursor in documented output. Large result sets will blow context windows.
SetApprovalMode accepts 'mode' as a free-form string. Should be an enum (auto_allow, auto_deny, ask) to prevent hallucinated invalid values and guide LLM selection.