A security-focused MCP server with policy enforcement, browser automation control, and gateway routing for sandboxed AI agent execution
MCP-Warden exposes 9 browser automation tools with basic schemas and descriptions. All tools have descriptions (10-50 chars, below the 50-200 char optimum), and input schemas are present but minimal. Parameters lack detailed constraints, enums, and format guidance. No output schemas documented. Error handling is absent, no recovery guidance, retryability classification, or actionable error messages. Tool naming follows verb_noun convention (browser_*) but descriptions are generic and do not explain WHEN to use each tool or what distinguishes similar operations (e.g., browser_click vs browser_type). No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Security: tools accept element selectors and filenames as parameters without visible input validation or sanitization. No audit logging or permission gates visible in provided code. Composition: tools are single-purpose but lack chaining metadata (e.g., browser_click does not document what state it leaves for browser_wait_for). Overall: functional but well below production baseline for agent-facing tools.
Controller-mediated browser click action.
Controller-mediated browser back navigation.
Controller-mediated browser navigation.
Controller-mediated browser key press action.
Controller-mediated browser select-option action.
Controller-mediated page snapshot.
Controller-mediated screenshot capture.
No output schemas documented. LLMs cannot infer what browser_navigate, browser_click, or browser_wait_for return, forcing them to guess downstream behavior and breaking tool chaining.
Descriptions are 20 - 50 characters, below the 50 - 200 char optimum. 'Controller-mediated browser click action' does not explain WHEN to use browser_click vs browser_type, or what happens on success/failure.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | <=2025-11-25 | v2 |
Controller-mediated browser typing action.
Controller-mediated browser wait action.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot determine which tools are safe to retry (browser_navigate is idempotent; browser_click may not be) or which modify state.
Parameters lack enums, format constraints, and validation guidance. 'key' in browser_press_key has no description of valid values (Enter, Escape, Tab, etc.). 'ref' parameter is undocumented, LLMs do not know what a 'reference identifier' is or how to obtain one.
No error handling or recovery guidance. If browser_navigate fails (network error, invalid URL, timeout), the response provides no actionable next step. No retryability classification or user-fixable vs fatal distinction.