# Custom Theme Standards
Place `.json` files in this directory to add custom theme coding standards.
**Default directory:** `~/.magento-mcp/themes/`
**Override with:** `MAGENTO_MCP_THEME_DIR` environment variable
## JSON Schema
```json
{
"id": "my-theme",
"name": "My Custom Theme",
"version": "1.0.0",
"description": "Custom standards for my project",
"technologies": {
"use": ["React", "TailwindCSS"],
"avoid": ["jQuery"]
},
"validationRules": [
{
"pattern": "\\$\\(",
"fileTypes": ["js", "phtml"],
"severity": 8,
"type": "warning",
"message": "jQuery detected. My Theme uses React.",
"rule": "MyTheme.JS.NoJQuery",
"suggestion": "Use React components instead",
"mode": "discourage"
}
],
"patternOverrides": [
{
"taskKeyword": "jquery widget",
"correctPattern": "Use React components",
"example": "import React from 'react';\n\nfunction MyWidget() {\n return <div>Widget</div>;\n}",
"avoidPatterns": [
{ "pattern": "$.widget()", "reason": "Use React instead" }
],
"explanation": "My Theme uses React for all interactive components."
}
],
"bestPractices": [
"Use React for interactive UI",
"Use TailwindCSS for styling"
]
}
```
## Fields
| Field | Required | Description |
|-------|----------|-------------|
| `id` | Yes | Unique theme identifier (used with `manage_theme`) |
| `name` | Yes | Display name |
| `version` | No | Version string (defaults to "1.0.0") |
| `description` | No | Short description |
| `technologies.use` | No | Technologies to use |
| `technologies.avoid` | No | Technologies to avoid |
| `validationRules` | No | Array of validation rules |
| `patternOverrides` | No | Array of pattern overrides |
| `bestPractices` | No | Array of best practice strings |
## Validation Rule Fields
| Field | Required | Type | Description |
|-------|----------|------|-------------|
| `pattern` | Yes | string | Regex pattern to detect violations |
| `fileTypes` | Yes | array | File types: `php`, `phtml`, `js`, `less`, `css` |
| `severity` | Yes | number | 1-10 (10 = most critical) |
| `type` | Yes | string | `error` or `warning` |
| `message` | Yes | string | Message shown when pattern matches |
| `rule` | Yes | string | Rule identifier (e.g., `MyTheme.JS.NoJQuery`) |
| `suggestion` | No | string | Fix suggestion |
| `mode` | Yes | string | Always `"discourage"` |
## Notes
- Invalid JSON files are silently skipped
- Invalid regex patterns in rules are silently skipped
- Custom themes appear alongside built-in presets in `manage_theme({ action: "list" })`
- Custom theme IDs override built-in presets if they share the same ID