About prowler-mcp
prowler-mcp is a skill for developing Prowler's MCP server. It documents tool implementation and response-model conventions, with separate guidance for Prowler management, security catalog, and documentation search tools.
Key features
- 01Prowler tool implementation conventions
- 02Response model and API client guidance
- 03Automatic tool registration guidance
- 04Hub and Docs tool patterns
- 05Testing and QA checklist
Use cases
- 01Adding a Prowler management tool
- 02Implementing security catalog or docs tools
- 03Reviewing MCP tool changes and tests
MCP support
The skill describes a Prowler MCP server with three namespaced sub-servers: Prowler management tools, Prowler Hub security checks catalog, and Prowler Docs search.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ prowler-cloud/ prowler --skill prowler-mcpAfter installing, type/prowler-mcpin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
assets/base_tool.pymodels.pytool_implementation.pyDetails
From the project READMEOverview
The Prowler MCP Server uses three sub-servers with prefixed namespacing:
| Sub-Server | Prefix | Auth | Purpose |
|---|---|---|---|
| Prowler | prowler_* | Required | Prowler Cloud, Private Cloud & Local Server management tools |
| Prowler Hub | prowler_hub_* | No | Security checks catalog |
| Prowler Docs | prowler_docs_* | No | Documentation search |
For complete architecture, patterns, and examples, see docs/developer-guide/mcp-server.mdx.
Critical Rules (Prowler Tools Only)
Tool Implementation
- ALWAYS: Extend
BaseTool(auto-registered viatool_loader.py, only public methods from the class are exposed as a tool) - NEVER: Manually register BaseTool subclasses
- NEVER: Import tools directly in server.py
Models
- ALWAYS: Use
MinimalSerializerMixinfor responses - ALWAYS: Implement
from_api_response()factory method - ALWAYS: Use two-tier models (Simplified for lists, Detailed for single items)
- NEVER: Return raw API responses
API Client
- ALWAYS: Use
self.api_clientsingleton - ALWAYS: Use
build_filter_params()for query parameters - NEVER: Create new httpx clients
Hub/Docs Tools
Use @mcp.tool() decorator directly—no BaseTool or models required.
Quick Reference: New Prowler Tool
- Create tool class in
prowler_app/tools/extendingBaseTool - Create models in
prowler_app/models/usingMinimalSerializerMixin - Tools auto-register via
tool_loader.py
QA Checklist (Prowler Tools)
- Tool docstrings describe LLM-relevant behavior
- Models use
MinimalSerializerMixin - API responses transformed to simplified models
- Failures are raised, never returned. A returned error dict is reported
as a success. Raise
InvalidArgumentfor a bad argument, letProwlerAPIError/ProwlerAPIUnreachablepropagate, and raiseToolErrorwithout afromclause only for a sentencelib/errors.pycannot know (a resource name, a precondition, the next tool to call) - Parameters use
Field()with descriptions - No hardcoded secrets
- Tests added under
mcp_server/tests/
Resources
- Full Guide: docs/developer-guide/mcp-server.mdx
- Templates: See assets/ for tool and model templates
- Testing: See prowler-test-mcp for fixtures and test patterns