Runtime behavioral security for Agentic Skills — traces what a skill actually does, not what it declares, and pauses consequential actions for human authorization before they execute.
SkillFence is a security proxy, not a primary MCP server. The 4 tools are defined in a fake test server (fake_server.py) for demonstration purposes. Tool definitions are minimal: descriptions are present but generic (10-30 chars), parameter descriptions are missing entirely, and no output schemas are documented. The tools lack the depth expected of production-grade definitions. read_file, run_command, and web_fetch have single-parameter schemas with no parameter descriptions. mystery_tool has an empty schema. No error handling guidance, no idempotent hints, no security annotations. The toolmap.py configuration system is well-designed for security policy, but the actual tool definitions it governs are skeletal.
Deliberately not in tool-map.yaml, to demo the unmapped-tool policy.
Read a file's contents.
Execute a shell command.
Fetch a URL.
Parameter descriptions completely missing. 'path', 'command', 'url' parameters have no descriptions explaining format, constraints, or usage context. LLMs cannot infer whether 'path' is absolute/relative, whether 'command' supports pipes/redirects, or whether 'url' must be HTTPS.
No output schemas documented. Tools return canned success messages in the fake server, but no schema describes what fields the LLM should expect. This violates the pattern that LLMs need to know output structure for downstream chaining.
Tool descriptions are too short (10-30 chars). 'Read a file's contents' and 'Execute a shell command' lack context on when to use each tool, prerequisites, or side effects. Baseline for A+ tools is 50-200 chars.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 34 | 2026-07-28+ | v2 |
mystery_tool has empty inputSchema (no properties). This is a deliberate demo of unmapped-tool policy, but it violates the requirement that every tool must have a schema. Even a demo tool should model proper structure.
No error handling guidance. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next. run_command in particular (IRREVERSIBLE risk) should warn about consequences and offer dry-run or confirmation patterns.