# display-catalog

MPM Display Catalog skill for Claude — decodes MP.TV model numbers, generates marketing descriptions, purchase descriptions, and Odoo knowledge base articles for the full range of MP.TV digital signage displays.

**Version:** 0.1.0  
**Author:** Message Point Media  
**Repo:** https://git.alwisp.com/jason/display-catalog-plugin  
**CoWork Project:** CW-007 — Display Catalog

---

## Overview

The display-catalog skill gives Claude complete knowledge of MPM's MP.TV display product line, including all model families (Bus, Rail, Indoor, Outdoor, LED), controller specifications, panel lookup tables, and description assembly formulas. It operates in two modes: decoding an existing model number to generate all associated catalog artifacts, or running an interview to build a new model number from scratch. The skill assembles four standard outputs — a decoded model summary, a Part Number, a full marketing Display Description, and a short Purchase Description suitable for procurement — and can generate a complete Odoo Knowledge Base article as clean HTML ready to paste into Odoo's WYSIWYG editor. No MCP server or external API is required; all logic is embedded in the skill and reference files.

---

## Skills

| Skill | What It Does |
|---|---|
| `display-catalog` | Decodes MP.TV model numbers or builds new ones via interview. Generates Part Number, Display Description, Purchase Description, and Odoo KB article HTML. Triggers on: any MPTV/MP.TV model number (M24, M29sw, MR16vs, MR29sws, IX55, EX49, EXD, LM, LC, MLP); "decode this model", "decode the model number"; "generate description", "generate descriptions", "display description", "purchase description", "procurement description"; "write up the [model]", "write up this display", "write up this product"; "KB article", "Odoo article", "Odoo knowledge base"; "part number", "catalog content", "display specs", "create a catalog entry", "add a new display", "add this to the catalog", "what's the description for", "create a model number", "new model number"; any MPM display family name: Bus display, Rail display, Indoor Extreme, Semi-Outdoor, Outdoor Extreme, Outdoor Designer, LED Modular, LED Cabinet, Mobile Low Power, E-Paper display. |

---

## Tools Reference

This is a skill-only plugin — it has no MCP server or external tool integrations. All functionality is delivered through Claude's reasoning using the embedded reference files.

| Reference File | Purpose |
|---|---|
| `references/description-formulas.md` | Assembly formulas for Part Number, Display Description, Purchase Description, and KB Article; Family Pattern Rules table; HS Code logic; notes on secondary (SDI/USB), Dual, and LED models |
| `references/panel-descriptions.md` | Panel description lookup table indexed by Family + Resolution; covers M, MR, MLP, IX, I, E, EX, EXD, LM, LC families with full marketing text and short purchase-line text |
| `references/controller-descriptions.md` | Full description text and structured spec tables for all controllers: MP180, MP185, MP190, MP200, MP205L, MP205, MP210, SDI, USB; chipset suffix table for purchase descriptions |
| `assets/KB-Article-Template.html` | Master HTML template for Odoo KB articles; 13 sections including controller specs, panel specs, physical dimensions, deployment notes, connectivity, block diagram, shop diagram, generation changelog, warranty, compliance, ordering, and related items |

---

## Setup Instructions

**Step-by-step:**
1. Download `display-catalog-v0.1.0.plugin` from the CW-007 Drive folder (or the Gitea repo)
2. Open Claude CoWork
3. Go to **Settings → Plugins**
4. Click **Install Plugin** and select the downloaded `.plugin` file
5. Confirm installation when prompted
6. Restart CoWork if prompted
7. Verify: start a new conversation and ask "decode M24" — Claude should respond with a full model summary, Part Number, Display Description, and Purchase Description

### Setup Checklist
- [ ] Download `display-catalog-v0.1.0.plugin`
- [ ] Install via CoWork Settings → Plugins
- [ ] Restart CoWork if prompted
- [ ] Verify with a test decode (e.g., "decode M24")

---

## Connection Details

| Field | Value |
|---|---|
| Plugin type | Skill-only (no MCP server) |
| External API | None required |
| Auth method | None |
| Reference data | Embedded in plugin files |
| Target system | Odoo KB (output is HTML for manual paste) |

---

## Workflow Notes

**Two operating modes:**

1. **Decode mode** — User provides an existing model number (e.g., `M29sw`, `MR16vs`, `EX49`). Claude parses the family, size, aspect, resolution, controller, and generation from the model string, looks up the matching panel description and controller description, then assembles all four outputs.

2. **New model interview mode** — User asks to create a new model or provides a partial spec. Claude runs a structured interview covering: family, screen size, aspect ratio, resolution, controller, generation, and any special features. After gathering all required fields, Claude assembles the model number and all outputs identically to decode mode.

**Missing data handling:** If a panel description for the requested family + resolution combination is not in `panel-descriptions.md`, Claude conducts a targeted interview to collect the missing specs (brightness, cover glass, impact rating, special features) and adds the new entry to the table before proceeding.

**KB Article output rules:**
- Output is clean HTML (no `<html>`, `<head>`, `<body>` tags)
- All special characters use HTML entities (`&mdash;`, `&times;`, `&deg;`, etc.)
- Block diagram and shop diagram sections contain placeholder comments only — diagrams are created separately in Excalidraw or Draw.io
- Block diagram component labels must never include part numbers or chipset model numbers (e.g., RK3399, NEO-M8N, EC25AF) — use human-readable names only

**Family coverage:** M (Bus), MR (Rail), MLP (Low Power/E-Paper), I (Indoor Standard), IX (Indoor Extreme), E (Semi-Outdoor), EX (Outdoor Extreme), EXD (Outdoor Designer), LM (LED Modular), LC (LED Cabinet)

---

## Requirements

- Claude CoWork (any version supporting `.plugin` installation)
- No external dependencies, API keys, or network access required

---

## Troubleshooting

| Symptom | Fix |
|---|---|
| Skill not triggering on model number | Restart CoWork after installation; ensure plugin shows as active in Settings → Plugins |
| Panel description missing for a family/resolution | Skill will prompt for specs via interview — provide brightness, cover glass, and impact rating when asked |
| KB article HTML shows garbled characters | Check that the HTML was copied from the raw output, not from a rendered preview that re-encoded entities |
| Model number decode returns wrong family | Verify the model string spelling — MR (Rail) vs M (Bus) prefix matters; single-letter vs two-letter prefix determines family |
| Purchase description missing chipset suffix | Confirm controller code — MP185=RK3566, MP190=RK3399, MP200=RK3568, MP210=RK3588; all others have no suffix |
