Policy-bounded local MCP server for OpenAPI/Swagger inspection, discovery, and read-intent scanning with embedded-secret detection
SwaggerVu exposes 7 tools with consistent naming (verb_noun pattern: inspect_spec, audit_spec, discover_docs, plan_scan, run_readonly_scan, get_finding, render_report). All tools have descriptions (avg ~80 chars, within baseline 34-392). Input schemas are visible and typed (sourceArgs, discoverArgs, findingArgs, reportArgs). However, parameter descriptions are minimal (e.g., 'local OpenAPI file under an allowed root, or an allowlisted http(s) URL' is adequate but terse). Output schemas are well-structured (InspectOutput, DiscoverOutput, ScanOutput, etc.) with typed fields. No error handling guidance visible in tool definitions, errors are not documented as retryable/user-fixable/fatal. Security is strong (allowlist-based, no secrets in params), but error messages are not shown in source. Tool composition is clean (each does one thing), but no pagination or result-limiting parameters visible for discovery/scan tools that could return large result sets.
Inspect a description and report redacted embedded-secret signals
Probe a bounded high-confidence path set on one startup-allowlisted host
Retrieve one sanitized finding by server-minted ID
Parse and inventory an allowed OpenAPI/Swagger source without executing its operations
List the exact GET/HEAD requests a read-intent scan would send; sends none
Render a sanitized Markdown report for a completed run
Execute the startup-authorized GET/HEAD request profile within fixed scope and budget
No error handling guidance in tool definitions. Error responses do not indicate whether failures are retryable, user-fixable, or fatal. LLMs cannot determine recovery strategy.
Parameter descriptions are terse and lack actionable constraints. E.g., 'source' param says 'local OpenAPI file under an allowed root, or an allowlisted http(s) URL' but does not explain what happens if the file is not found, or how to discover allowed roots/hosts.
discover_docs and run_readonly_scan may return large result sets but lack pagination or result-limiting parameters in the visible schema. DiscoverOutput and ScanOutput do not show total_count or next_cursor fields.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Tool descriptions do not state whether operations are idempotent or have side effects. E.g., run_readonly_scan claims 'read-intent' but does not explicitly state it is safe to retry or that it generates no side effects.
Output schemas (InspectOutput, DiscoverOutput, etc.) are well-typed but lack documentation in tool descriptions. LLMs cannot infer what fields to expect or how to chain results to downstream tools.