Skip to main content
Glama
sachdev27

Dell PowerStore MCP Server

by sachdev27

Dell PowerStore MCP Server

PyPI Version Python Version License: MIT Code style: black Ruff

A Model Context Protocol (MCP) server for Dell PowerStore that automatically generates tools from OpenAPI specifications with a credential-free architecture. Enables AI assistants like Claude and automation platforms like n8n to interact with PowerStore storage arrays.

✨ Features

Feature

Description

πŸ”„ Automatic Tool Generation

Dynamically generates 262+ MCP tools from Dell PowerStore OpenAPI specs

πŸ” Credential-Free Architecture

No stored credentials - pass host/username/password with each tool call

🌐 Multi-Host Support

Manage multiple PowerStore instances from a single server

πŸ›‘οΈ Safe Operations

GET-only operations for read-only PowerStore access

πŸ”Œ Multiple Transports

HTTP/SSE for n8n, stdio for Claude Desktop

πŸ“Š Health Monitoring

Built-in health checks and metrics endpoints

🐳 Docker Ready

Production-ready container images

πŸ“‹ Table of Contents

πŸš€ Quick Start

# Clone and install git clone https://github.com/sachdev27/dell-powerstore-mcp-server.git cd dell-powerstore-mcp-server pip install -e . # Run HTTP/SSE server (for n8n) powerstore-mcp-http # Or run stdio server (for Claude Desktop) powerstore-mcp

πŸ“¦ Installation

pip install dell-powerstore-mcp-server

From Source

# Clone the repository git clone https://github.com/sachdev27/dell-powerstore-mcp-server.git cd dell-powerstore-mcp-server # Create virtual environment python -m venv .venv source .venv/bin/activate # On macOS/Linux # .venv\Scripts\activate # On Windows # Install in development mode pip install -e ".[dev]"

Using Docker

docker pull ghcr.io/sachdev27/dell-powerstore-mcp-server:latest # Run with SSE transport docker run -p 3000:3000 ghcr.io/sachdev27/dell-powerstore-mcp-server:latest

Requirements

  • Python: 3.10, 3.11, 3.12, or 3.13

  • Dell PowerStore: Any supported version (for actual operations)

βš™οΈ Configuration

Environment Variables

Variable

Description

Default

LOG_LEVEL

Logging level (debug, info, warning, error)

info

LOG_FORMAT

Log format (text, json)

text

OPENAPI_SPEC_PATH

Path to OpenAPI specification

./openapi.json

HTTP_PORT

HTTP server port

3000

HTTP_HOST

HTTP server host

0.0.0.0

Example .env File

LOG_LEVEL=info LOG_FORMAT=json HTTP_PORT=3000

⚠️ Important: PowerStore credentials are NOT stored in configuration. They are passed securely with each tool call.

πŸ“– Usage

HTTP/SSE Mode (for n8n and Web Clients)

# Using the CLI powerstore-mcp-http # Using uvicorn directly uvicorn powerstore_mcp.http_server:app --host 0.0.0.0 --port 3000 # Using the start script ./start-http.sh

The server provides:

  • SSE Endpoint: http://localhost:3000/sse

  • Health Check: http://localhost:3000/health

  • Metrics: http://localhost:3000/health (detailed JSON response)

stdio Mode (for Claude Desktop)

# Using the CLI powerstore-mcp # Using Python module python -m powerstore_mcp.main # Using the start script ./start-python.sh

Docker Compose

# Start the server docker-compose up -d # View logs docker-compose logs -f # Stop the server docker-compose down

πŸ”— Integration

n8n AI Agent

  1. Add an MCP Client node to your n8n workflow

  2. Configure the connection:

    • Transport: SSE

    • URL: http://localhost:3000/sse

  3. The 262 PowerStore tools will be available to AI agents

Claude Desktop

Add to your Claude Desktop configuration (claude_desktop_config.json):

{ "mcpServers": { "dell-powerstore": { "command": "powerstore-mcp", "args": [] } } }

Or with explicit Python path:

{ "mcpServers": { "dell-powerstore": { "command": "/path/to/venv/bin/python", "args": ["-m", "powerstore_mcp.main"] } } }

Custom MCP Clients

import asyncio from mcp import ClientSession from mcp.client.sse import sse_client async def main(): async with sse_client("http://localhost:3000/sse") as (read, write): async with ClientSession(read, write) as session: await session.initialize() # List available tools tools = await session.list_tools() print(f"Found {len(tools.tools)} tools") # Call a tool result = await session.call_tool("getAppliance", { "host": "powerstore.example.com", "username": "admin", "password": "password" }) print(result) asyncio.run(main())

πŸ”§ Available Tools

The server dynamically generates 262 tools from the PowerStore OpenAPI specification.

Authentication Parameters

Every tool requires these authentication parameters:

Parameter

Type

Description

host

string

PowerStore hostname or IP

username

string

PowerStore username

password

string

PowerStore password

Tool Categories

Category

Example Tools

Description

Storage

getVolume, getHost, getVolume_group

Volume and host management

System

getAppliance, getCluster, getNode

System information

Network

getNetwork, getIp_port, getFc_port

Network configuration

File Services

getNas_server, getFile_system, getNfs_export

File storage

Protection

getSnapshot_rule, getReplication_rule

Data protection

Monitoring

getAlert, getEvent, getPerformance_rule

Alerts and events

Query Parameters

All collection endpoints support PowerStore query parameters:

{ "host": "powerstore.example.com", "username": "admin", "password": "password", "select": "id,name,size", "limit": 100, "offset": 0, "order": "name.asc" }

πŸ—οΈ Architecture

Credential-Free Design

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ AI Client │────▢│ MCP Server │────▢│ PowerStore β”‚ β”‚ (Claude/n8n) β”‚ β”‚ (No Credentials)β”‚ β”‚ Array β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ Tool Call with β”‚ Per-Request β”‚ Credentials β”‚ Authentication β–Ό β–Ό {host, user, pass} Basic Auth Header

Key Design Principles

  • No Stored Credentials: Server starts without any PowerStore connection

  • Per-Request Auth: Each tool call includes host/username/password

  • Fresh Sessions: New API client created for each request

  • Multi-Host Ready: Easily manage multiple PowerStore instances

Module Structure

powerstore_mcp/ β”œβ”€β”€ __init__.py # Package initialization and version β”œβ”€β”€ api_client.py # Async PowerStore API client with retry logic β”œβ”€β”€ config.py # Configuration management with validation β”œβ”€β”€ exceptions.py # Custom exception hierarchy β”œβ”€β”€ http_server.py # HTTP/SSE transport server β”œβ”€β”€ logging_config.py # Structured logging configuration β”œβ”€β”€ main.py # stdio transport entry point β”œβ”€β”€ server.py # Core MCP server with tool handlers └── tool_generator.py # OpenAPI parser and tool generator

πŸ§ͺ Development

Setup Development Environment

# Clone and install with dev dependencies git clone https://github.com/sachdev27/dell-powerstore-mcp-server.git cd dell-powerstore-mcp-server pip install -e ".[dev]" # Install pre-commit hooks pre-commit install

Running Tests

# Run all tests pytest # Run with coverage pytest --cov=powerstore_mcp --cov-report=html # Run specific test file pytest tests/test_tool_generator.py -v

Code Quality

# Format code black powerstore_mcp tests # Lint code ruff check powerstore_mcp tests # Type checking mypy powerstore_mcp # Security scan bandit -r powerstore_mcp

Building

# Build distribution packages python -m build # Build Docker image docker build -t dell-powerstore-mcp-server .

🀝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ“š Additional Resources


-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sachdev27/dell-powerstore-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server