Dell Unity MCP Server
An MCP server for Dell Unity storage arrays that automatically generates tools from OpenAPI specifications, enabling AI assistants like Claude and n8n to interact with Unity storage systems without storing credentials.
README
Dell Unity MCP Server
A Model Context Protocol (MCP) server for Dell Unity storage arrays 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 Unity storage systems.
β¨ Features
| Feature | Description |
|---|---|
| π Automatic Tool Generation | Dynamically generates 359+ MCP tools from Dell Unity OpenAPI specs |
| π Credential-Free Architecture | No stored credentials - pass host/username/password with each tool call |
| π Multi-Host Support | Manage multiple Unity arrays from a single server |
| π‘οΈ Configurable Operations | GET-only by default, configurable to enable POST/DELETE |
| π 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-unity-mcp-server.git
cd dell-unity-mcp-server
pip install -e .
# Run HTTP/SSE server (for n8n)
export LOCAL_OPENAPI_SPEC_PATH="./openapi.json"
python -m uvicorn unity_mcp.http_server:app --host 0.0.0.0 --port 8000
# Or run stdio server (for Claude Desktop)
python -m unity_mcp.main
π¦ Installation
From Source
From PyPI (Recommended)
pip install dell-unity-mcp-server
From Source
# Clone the repository
git clone https://github.com/sachdev27/dell-unity-mcp-server.git
cd dell-unity-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
# Build the image
docker build -t dell-unity-mcp-server .
# Run with SSE transport (GET-only by default)
docker run -p 8000:8000 dell-unity-mcp-server
# Run with full access (GET, POST, DELETE)
docker run -p 8000:8000 -e ALLOWED_HTTP_METHODS="GET,POST,DELETE" dell-unity-mcp-server
Requirements
- Python: 3.10, 3.11, 3.12, or 3.13
- Dell Unity: Any supported version with REST API enabled (v5.x recommended)
βοΈ Configuration
Environment Variables
| Variable | Description | Default |
|---|---|---|
LOCAL_OPENAPI_SPEC_PATH |
Path to OpenAPI specification (required) | - |
LOG_LEVEL |
Logging level (DEBUG, INFO, WARNING, ERROR) | INFO |
HTTP_SERVER_PORT |
HTTP server port | 8000 |
ALLOWED_HTTP_METHODS |
Comma-separated list of allowed methods | GET |
UNITY_HOST |
Default Unity hostname (optional) | - |
UNITY_TLS_VERIFY |
Verify TLS certificates | false |
REQUEST_TIMEOUT |
Request timeout in milliseconds | 30000 |
MAX_RETRIES |
Maximum retry attempts | 3 |
Example .env File
# Required
LOCAL_OPENAPI_SPEC_PATH=/app/openapi.json
# Server Configuration
HTTP_SERVER_PORT=8000
LOG_LEVEL=INFO
# HTTP Methods (GET = read-only, add POST,DELETE for write operations)
ALLOWED_HTTP_METHODS=GET
# Optional Unity defaults
# UNITY_HOST=unity.example.com
# UNITY_TLS_VERIFY=false
Configuring HTTP Methods
By default, the server only exposes GET operations (read-only). To enable write operations:
# Read-only (default) - 359 tools
export ALLOWED_HTTP_METHODS="GET"
# Full access - 777 tools
export ALLOWED_HTTP_METHODS="GET,POST,PUT,PATCH,DELETE"
β οΈ Important: Unity credentials are NOT stored in configuration. They are passed securely with each tool call.
π Usage
HTTP/SSE Mode (for n8n and Web Clients)
# Using uvicorn
python -m uvicorn unity_mcp.http_server:app --host 0.0.0.0 --port 8000
# Using the main module
python -m unity_mcp.main --mode http
The server provides:
- SSE Endpoint:
http://localhost:8000/sse - Health Check:
http://localhost:8000/health - Readiness Check:
http://localhost:8000/ready - Liveness Check:
http://localhost:8000/live - Metrics:
http://localhost:8000/metrics
stdio Mode (for Claude Desktop)
# Using Python module
python -m unity_mcp.main
Docker Compose
# docker-compose.yml
version: '3.8'
services:
unity-mcp:
build: .
ports:
- "8000:8000"
environment:
- ALLOWED_HTTP_METHODS=GET
- LOG_LEVEL=INFO
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
# 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:8000/sse
- The 359+ Unity tools will be available to AI agents
Claude Desktop
Add to your Claude Desktop configuration (claude_desktop_config.json):
{
"mcpServers": {
"dell-unity": {
"command": "/path/to/venv/bin/python",
"args": ["-m", "unity_mcp.main"],
"env": {
"LOCAL_OPENAPI_SPEC_PATH": "/path/to/openapi.json"
}
}
}
}
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:8000/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")
# Get system information
result = await session.call_tool("systemCollectionQuery", {
"host": "unity.example.com",
"username": "admin",
"password": "password",
"fields": "id,name,model,serialNumber"
})
print(result)
# Get all LUNs
result = await session.call_tool("lunCollectionQuery", {
"host": "unity.example.com",
"username": "admin",
"password": "password",
"fields": "id,name,sizeTotal,pool",
"per_page": 100
})
print(result)
asyncio.run(main())
π§ Available Tools
The server dynamically generates 359+ tools (GET-only) or 777+ tools (full access) from the Unity OpenAPI specification.
Authentication Parameters
Every tool requires these authentication parameters:
| Parameter | Type | Description |
|---|---|---|
host |
string | Unity hostname or IP |
username |
string | Unity username |
password |
string | Unity password |
Tool Categories
| Category | Example Tools | Description |
|---|---|---|
| Storage | lunCollectionQuery, poolCollectionQuery |
LUN and pool management |
| System | systemCollectionQuery, licenseCollectionQuery |
System information |
| Network | ipInterfaceCollectionQuery, fcPortCollectionQuery |
Network configuration |
| File Services | nasServerCollectionQuery, fileSystemCollectionQuery |
File storage |
| Protection | snapCollectionQuery, replicationSessionCollectionQuery |
Data protection |
| Monitoring | alertCollectionQuery, eventCollectionQuery |
Alerts and events |
| Host Access | hostCollectionQuery, hostLUNCollectionQuery |
Host management |
Query Parameters
All collection endpoints support Unity query parameters:
{
"host": "unity.example.com",
"username": "admin",
"password": "password",
"fields": "id,name,sizeTotal,health",
"filter": "name lk 'prod*'",
"per_page": 100,
"page": 1,
"compact": "true"
}
Unity Filter Syntax
Unity uses a specific filter syntax for queries:
| Operator | Description | Example |
|---|---|---|
eq |
Equals | filter=severity eq 4 |
ne |
Not equals | filter=health.value ne 5 |
lt |
Less than | filter=sizeTotal lt 1073741824 |
gt |
Greater than | filter=sizeTotal gt 1073741824 |
lk |
Like (wildcard) | filter=name lk 'prod*' |
and |
Logical AND | filter=severity eq 4 and state eq 2 |
ποΈ Architecture
Credential-Free Design
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β AI Client ββββββΆβ MCP Server ββββββΆβ Dell Unity β
β (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 Unity 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 Unity arrays
- Configurable Access: Control which HTTP methods are exposed
Module Structure
unity_mcp/
βββ __init__.py # Package initialization and version
βββ api_client.py # Async Unity 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-unity-mcp-server.git
cd dell-unity-mcp-server
python -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
Running Tests
# Run all tests
pytest
# Run with verbose output
pytest -v
# Run with coverage
pytest --cov=unity_mcp --cov-report=html
# Run specific test file
pytest tests/test_tool_generator.py -v
Code Quality
# Format code
black unity_mcp tests
# Lint code
ruff check unity_mcp tests
# Type checking
mypy unity_mcp
# Security scan
bandit -r unity_mcp
Building
# Build distribution packages
python -m build
# Build Docker image
docker build -t dell-unity-mcp-server .
π€ Contributing
Contributions are welcome!
- 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
- Model Context Protocol Documentation
- Dell Unity Documentation
- Dell Unity REST API Guide
- n8n MCP Integration Guide
<p align="center"> Made with β€οΈ for the storage automation community </p>
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.