Dell Unity MCP Server

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.

Category
访问服务器

README

Dell Unity MCP Server

PyPI version PyPI downloads CI Python Version License: MIT Code style: black Ruff

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

# 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

  1. Add an MCP Client node to your n8n workflow
  2. Configure the connection:
    • Transport: SSE
    • URL: http://localhost:8000/sse
  3. 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!

  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


<p align="center"> Made with ❤️ for the storage automation community </p>

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选