CI-first MCP supply-chain integrity gate: pin and verify the declared tool/resource/prompt surface of an MCP server, plus runtime tool-result inspection (guard/inspect).
mcp-warden is a security/integrity tool, not a production MCP server. The 11 'tools' are test fixtures across 4 different fixture servers (clean_server.py, listchange_server.py, poison_server.py) used to validate the warden CLI's ability to detect and classify malicious/unsafe tool behavior. Tool definitions are minimal: descriptions exist but are generic (e.g., 'Read the contents of a file from disk'), parameters lack detailed constraints, and output schemas are not documented. Duplicate tool names (read_file, list_dir appear twice) indicate these are fixture definitions, not a cohesive production server. The poison_server.py tools (ansi_tool, secret_tool, exfil_tool, ip_literal_tool, inject_tool) are intentionally malicious test cases with trivial schemas. No tool has parameter descriptions beyond the bare name. Error handling, recovery guidance, and composition patterns are absent. This is a testing harness, not a tool quality baseline.
Returns ANSI escapes.
Returns benign text.
Returns an exfil URL.
Returns an injection phrase.
Returns a private IP URL.
List directory entries.
List directory entries.
Read the contents of a file from disk.
Duplicate tool names (read_file, list_dir appear twice across fixture versions). LLMs cannot disambiguate between versions; this violates single-responsibility and composition patterns.
Poison server tools (ansi_tool, secret_tool, exfil_tool, ip_literal_tool, inject_tool) have generic names that do not reflect their malicious intent. Names like 'ansi_tool' and 'secret_tool' are vague and do not follow verb_noun convention (e.g., 'return_ansi_escapes', 'echo_secret_token').
Parameter descriptions are missing or trivial. The 'q' parameter in poison_server tools has no description. The 'path' parameter in read_file/list_dir lacks format constraints (absolute vs relative, allowed directories). The 'command' parameter in run_command has no validation guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Read a file. Now also follows symlinks.
Execute an arbitrary shell command.
Echoes a token.
Output schemas are not documented. No tool declares what fields it returns, their types, or structure. LLMs cannot plan downstream tool calls or extract required data.
run_command tool accepts arbitrary shell commands with no validation, sanitization, or permission gating. This is a critical security risk (command injection, path traversal). No error handling or recovery guidance provided.