6.7 KiB
Claude Code Marketplace Setup
This document explains the Claude Code marketplace and plugin structure for the Unraid MCP project.
What Was Created
1. Marketplace Manifest (.claude-plugin/marketplace.json)
The marketplace catalog that lists all available plugins in this repository.
Location: .claude-plugin/marketplace.json
Contents:
- Marketplace metadata (name, version, owner, repository)
- Plugin catalog with the "unraid" plugin
- Categories and tags for discoverability
2. Plugin Manifest (.claude-plugin/plugin.json)
The individual plugin configuration for the Unraid MCP server.
Location: .claude-plugin/plugin.json
Contents:
- Plugin name (
unraid), version (1.1.2), author - Repository and homepage links
mcpServersblock that configures the server to run viauv run unraid-mcp-serverin stdio mode
3. Validation Script
scripts/validate-marketplace.sh— Automated validation of marketplace structure
MCP Tools Exposed
The plugin registers 3 MCP tools:
| Tool | Purpose |
|---|---|
unraid |
Primary tool — action (domain) + subaction (operation) routing, ~107 subactions across 15 domains |
diagnose_subscriptions |
Inspect WebSocket subscription connection states and errors |
test_subscription_query |
Test a specific GraphQL subscription query (allowlisted fields only) |
Calling Convention
All Unraid operations go through the single unraid tool:
unraid(action="docker", subaction="list")
unraid(action="system", subaction="overview")
unraid(action="array", subaction="parity_status")
unraid(action="vm", subaction="list")
unraid(action="live", subaction="cpu")
Domains (action=)
| action | example subactions |
|---|---|
system |
overview, array, network, metrics, services, ups_devices |
health |
check, test_connection, diagnose, setup |
array |
parity_status, parity_start, start_array, add_disk |
disk |
shares, disks, disk_details, logs |
docker |
list, details, start, stop, restart |
vm |
list, details, start, stop, pause, resume |
notification |
overview, list, create, archive, archive_all |
key |
list, get, create, update, delete |
plugin |
list, add, remove |
rclone |
list_remotes, config_form, create_remote |
setting |
update, configure_ups |
customization |
theme, set_theme, sso_enabled |
oidc |
providers, configuration, validate_session |
user |
me |
live |
cpu, memory, array_state, log_tail, notification_feed |
Destructive subactions (e.g. stop_array, force_stop, delete) require confirm=True.
Installation Methods
Method 1: GitHub Distribution (Recommended for Users)
Once pushed to GitHub, users install via:
# Add the marketplace
/plugin marketplace add jmagar/unraid-mcp
# Install the Unraid plugin
/plugin install unraid @unraid-mcp
Method 2: Local Installation (Development)
For testing locally before publishing:
# Add local marketplace
/plugin marketplace add /home/jmagar/workspace/unraid-mcp
# Install the plugin
/plugin install unraid @unraid-mcp
Method 3: Direct URL
Install from a specific branch or commit:
# From specific branch
/plugin marketplace add jmagar/unraid-mcp#main
# From specific commit
/plugin marketplace add jmagar/unraid-mcp#abc123
Plugin Structure
unraid-mcp/
├── .claude-plugin/ # Plugin manifest + marketplace manifest
│ ├── plugin.json # Plugin configuration (name, version, mcpServers)
│ └── marketplace.json # Marketplace catalog
├── unraid_mcp/ # Python package (the actual MCP server)
│ ├── main.py # Entry point
│ ├── server.py # FastMCP server registration
│ ├── tools/unraid.py # Consolidated tool (all 3 tools registered here)
│ ├── config/ # Settings management
│ ├── core/ # GraphQL client, exceptions, shared types
│ └── subscriptions/ # Real-time WebSocket subscription manager
└── scripts/
└── validate-marketplace.sh # Validation tool
Marketplace Metadata
Categories
infrastructure— Server management and monitoring tools
Tags
unraid— Unraid-specific functionalitymonitoring— System monitoring capabilitieshomelab— Homelab automationgraphql— GraphQL API integrationdocker— Docker container managementvirtualization— VM management
Publishing Checklist
Before publishing to GitHub:
-
Validate Structure
./scripts/validate-marketplace.sh -
Update Version Numbers (must be in sync)
pyproject.toml→version = "X.Y.Z"under[project].claude-plugin/plugin.json→"version": "X.Y.Z".claude-plugin/marketplace.json→"version"in bothmetadataandplugins[]
-
Test Locally
/plugin marketplace add . /plugin install unraid @unraid-mcp -
Commit and Push
git add .claude-plugin/ git commit -m "chore: bump marketplace to vX.Y.Z" git push origin main -
Create Release Tag
git tag -a vX.Y.Z -m "Release vX.Y.Z" git push origin vX.Y.Z
User Experience
After installation, users can:
-
Invoke Unraid operations directly in Claude Code
unraid(action="system", subaction="overview") unraid(action="docker", subaction="list") unraid(action="health", subaction="check") -
Use the credential setup tool on first run
unraid(action="health", subaction="setup")This triggers elicitation to collect and persist credentials to
~/.unraid-mcp/.env. -
Monitor live data via subscriptions
unraid(action="live", subaction="cpu") unraid(action="live", subaction="log_tail")
Maintenance
Updating the Plugin
To release a new version:
- Make changes to the plugin code
- Update version in
pyproject.toml,.claude-plugin/plugin.json, and.claude-plugin/marketplace.json - Run validation:
./scripts/validate-marketplace.sh - Commit and push
Users with the plugin installed will see the update available and can upgrade:
/plugin update unraid
Support
- Repository: https://github.com/jmagar/unraid-mcp
- Issues: https://github.com/jmagar/unraid-mcp/issues
- Destructive Actions:
docs/DESTRUCTIVE_ACTIONS.md
Validation
Run the validation script anytime to ensure marketplace integrity:
./scripts/validate-marketplace.sh
This checks:
- Manifest file existence and validity
- JSON syntax
- Required fields
- Plugin structure
- Source path accuracy
- Documentation completeness