mcp-api-pentest
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| parse_api_specA | Reads a local OpenAPI/Swagger file (JSON or YAML), auto-detects format, and selectively extracts routes and methods. Strips verbose descriptions to save up to 70% of LLM tokens. |
| execute_security_requestB | Async resilient HTTP client with anti-blocking (WAF) protection and rate limiting. Supports multiple auth types: bearer, basic, api_key_header, api_key_query, cookie. When stealth mode is enabled, uses random delay between STEALTH_MIN and STEALTH_MAX to evade WAF detection patterns. |
| analyze_access_controlA | Executes the same HTTP request with two different tokens (privileged vs unprivileged) and compares responses to detect authorization failures (BOLA/IDOR). Automatically cleans volatile fields (timestamps, session_ids, etc.) and calculates structural similarity. Marks as 'is_suspicious_success' if both return 200 OK with >85% similarity. When stealth mode is enabled, uses random delay to evade WAF detection patterns. Supports multiple auth types: bearer, basic, api_key_header, api_key_query, cookie. |
| capture_contextA | Stores a dynamic value in the session cache. Use after POST/PUT responses to save resource IDs for later use in DELETE/GET requests with a different auth token. |
| get_contextA | Retrieves a previously stored value from the session cache. Returns not_found if the key does not exist. Use to inject dynamic IDs into attack URLs. |
| list_contextA | Returns all key-value pairs stored in the session cache. Useful for the LLM to see what dynamic IDs are available for chained attack flows. |
| clear_contextA | Clears all stored values from the session cache. Use at the start of a new audit cycle to avoid stale data contamination. |
| extract_json_valueA | Extracts a specific value from a JSON response using dot-notation path. Essential for chained attacks where the LLM needs to grab a dynamically created resource ID from a POST response (e.g. 'data.id' → 42). |
| save_security_findingD | – |
| generate_reportD | – |
| export_report_jsonD | – |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 11 tools
Most tools have clear, distinct purposes (e.g., parse_api_spec vs execute_security_request), but generate_report, export_report_json, and save_security_finding lack descriptions, making their boundaries unclear. Additionally, analyze_access_control and execute_security_request both perform HTTP requests, though their intent differs.
All tool names follow a consistent verb_noun snake_case pattern (extract_json_value, save_security_finding, analyze_access_control, etc.). The naming is predictable and uniform across the set.
11 tools is a well-scoped size for an API pentest server. Each tool covers a distinct aspect of the workflow (spec parsing, request execution, access control analysis, context caching, reporting) without excessive overlap or unnecessary additions.
The tool set covers a complete pentest lifecycle: parse spec, execute requests, analyze access control, manage dynamic values, save findings, and generate/export reports. Minor gaps exist, such as no explicit tool for fuzzing or editing requests, but these can be worked around with execute_security_request and context tools.