MCP Server for Dell PowerStore with automatic OpenAPI tool generation - Credential-free mode
Project description
Dell PowerStore MCP Server
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
- Installation
- Configuration
- Usage
- Integration
- Available Tools
- Architecture
- Development
- Contributing
- License
๐ 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
From PyPI (Recommended)
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
- Add an MCP Client node to your n8n workflow
- Configure the connection:
- Transport: SSE
- URL:
http://localhost:3000/sse
- 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.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Additional Resources
Made with โค๏ธ for the storage automation community
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dell_powerstore_mcp_server-1.0.1.tar.gz.
File metadata
- Download URL: dell_powerstore_mcp_server-1.0.1.tar.gz
- Upload date:
- Size: 46.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
519a9c3c6b07792b7499f7c1cf953f929d91d2efaf18884f1fed0df957326d45
|
|
| MD5 |
839403699ab1353932fc6ceea6b4b55c
|
|
| BLAKE2b-256 |
af9f0d233d25a626f553c7cd82a8cfc3ae551e251fab49fa61270ad0874244b3
|
File details
Details for the file dell_powerstore_mcp_server-1.0.1-py3-none-any.whl.
File metadata
- Download URL: dell_powerstore_mcp_server-1.0.1-py3-none-any.whl
- Upload date:
- Size: 33.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
059be7731caf57ce2c590a0e5709aa35f1c962cd59f21a07cd4017d5a20de8da
|
|
| MD5 |
07ec87de568c9108aece542c837481f3
|
|
| BLAKE2b-256 |
435b6669445b6e503018453e58059be98548f29193d74ad8bdfbe9048d3c0f67
|