MCP server for Faction penetration testing management platform
13 tools with consistent verb-noun naming (get_, create_, update_, list_, add_). All have descriptions (avg ~100 chars, within baseline 34-392). Input schemas present for all tools with proper type definitions. However, output schemas are undocumented, LLMs cannot predict response structure for chaining. Error handling is minimal (generic try-catch). Parameter descriptions are adequate but lack constraints (enums, ranges, format specs). No tool annotations (readOnlyHint/destructiveHint). Risk levels are resolved server-side (good), but image handling via base64 vs URI references adds complexity without clear guidance on when to use each.
Add a vulnerability from a template to an assessment
Create a new vulnerability in an assessment
Get a single assessment by ID with full details
Get the user's active assessment queue (assessments assigned to the user that are not completed)
Get or generate an assessment report (PDF, DOCX, or HTML)
Get completed assessments (closed/finished work). Supports filtering by date range and other criteria
Output schemas undocumented. No tool returns a documented response structure. LLMs cannot predict fields for downstream chaining (e.g., what does get_assessment return? Does it include vulnerability_ids for chaining to get_vulnerabilities?).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe reads from destructive writes without reading descriptions. create_vulnerability and update_vulnerability should be marked destructiveHint=true.
Parameter constraints missing. 'severity', 'impact', 'likelihood' accept string names but no enum or validation. 'format' in get_assessment_report should be enum('pdf', 'docx', 'html'). LLMs will hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Get completed assessments in condensed format (closed/finished work with minimal details)
Retrieve an image by ID (used internally for embedded image references)
Get the list of risk/severity levels configured for this Faction instance
Get vulnerabilities from an assessment
List available vulnerability templates
Update an existing vulnerability
Upload an image file to an assessment
Error handling is generic. All errors caught and returned as plain text. No recovery guidance (e.g., 'If assessment not found, try get_assessment_queue() to list available assessments'). No error categorization (retryable vs user-fixable).
Image handling ambiguity. include_base64_images parameter present on 5 tools but no guidance on when to use base64 vs URI references. No documented output format for image fields. Agents cannot predict response structure.