Skip to content

MCP Server for UnoPim PIM - Enable Claude Desktop to manage your product information with 24 powerful tools

Notifications You must be signed in to change notification settings

oledmansfeld/unopim-mcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

UnoPim MCP Server πŸš€

A powerful Model Context Protocol (MCP) server that enables Claude Desktop to manage your UnoPim Product Information Management system. Create products, manage attributes, upload media, and handle complex configurable products - all through natural language conversations with Claude.

✨ Features

  • πŸ”Œ Full UnoPim API Integration - Create and manage attributes, families, categories, and products
  • πŸ‘• Configurable Products - Full support for products with variants (e.g., T-shirts with color/size options)
  • πŸ“Έ Media Upload - Upload product images and category media via URL or base64
  • 🧠 Smart Product Creation - Automatically validates against family schema before creating
  • 🌐 HTTP/SSE Transport - Expose via ngrok for Claude Desktop remote access
  • πŸ”„ Automatic Token Refresh - OAuth2 with automatic token management

πŸš€ Quick Start

1. Install dependencies

npm install
npm run build

2. Configure environment

export UNOPIM_BASE_URL="http://your-unopim:8000"
export UNOPIM_CLIENT_ID="your_client_id"
export UNOPIM_CLIENT_SECRET="your_client_secret"
export UNOPIM_USERNAME="api-user@email.com"
export UNOPIM_PASSWORD="password"

3. Start the server

# HTTP mode (recommended for Claude Desktop)
node dist/index-http.js

4. Expose via ngrok (for remote access)

ngrok http 3000

πŸ“‹ Claude Desktop Configuration

Remote HTTP mode (Azure/Cloud) ⭐ Recommended

{
  "mcpServers": {
    "unopim": {
      "url": "https://your-server.azurewebsites.net/mcp"
    }
  }
}

Remote SSE mode (alternative)

{
  "mcpServers": {
    "unopim": {
      "url": "https://your-server.azurewebsites.net/sse"
    }
  }
}

Local (stdio) mode

{
  "mcpServers": {
    "unopim": {
      "command": "node",
      "args": ["/path/to/unopim-mcp/dist/index.js"],
      "env": {
        "UNOPIM_BASE_URL": "https://your-unopim.com",
        "UNOPIM_CLIENT_ID": "your_client_id",
        "UNOPIM_CLIENT_SECRET": "your_client_secret",
        "UNOPIM_USERNAME": "api-user",
        "UNOPIM_PASSWORD": "password"
      }
    }
  }
}

πŸ› οΈ Available Tools (24 tools)

Schema & Discovery

Tool Description
unopim_get_schema Fetch complete data model
unopim_get_attributes List all attributes with types
unopim_get_families List all product families
unopim_get_family_schema Get detailed schema for a specific family

Attribute Management

Tool Description
unopim_create_attribute Create attribute (text, select, boolean, price, etc.)
unopim_create_attribute_options Create options for select attributes
unopim_get_attribute_options Get options for a select attribute
unopim_get_attribute_groups List attribute groups
unopim_create_attribute_group Create attribute group

Family Management

Tool Description
unopim_create_family Create product family
unopim_update_family Update family

Category Management

Tool Description
unopim_get_categories Fetch category tree
unopim_create_category Create category

Product Management

Tool Description
unopim_get_products List products with filtering
unopim_get_product Get single product by SKU
unopim_create_product Create simple product
unopim_update_product Update product
unopim_upsert_product Create or update product
unopim_smart_create_product ⭐ Auto-validates against family schema
unopim_bulk_create_products Batch create products

Configurable Products

Tool Description
unopim_create_configurable_product Create parent product with variants
unopim_add_variant Add variant to configurable product
unopim_update_configurable_product Update configurable product

Media Upload ⭐ Automatic Linking

Tool Description
unopim_upload_product_media ⭐ Upload image and auto-link to product
unopim_upload_category_media Upload image and auto-link to category

Note: Media upload tools now automatically update the product/category with the uploaded file path. Images are immediately visible in UnoPim UI after upload!


πŸ‘• Configurable Products Workflow

Creating a configurable product (e.g., T-shirt with color variants):

Step 1: Create the configurable product (parent)

{
  "sku": "tshirt-config-001",
  "family": "default",
  "super_attributes": ["color"],
  "values": {
    "common": { "sku": "tshirt-config-001" },
    "channel_locale_specific": {
      "default": {
        "en_US": { "name": "T-Shirt Configurable" }
      }
    },
    "categories": [],
    "associations": { "up_sells": [], "cross_sells": [], "related_products": [] }
  }
}

Step 2: Add variants (one at a time)

{
  "parent": "tshirt-config-001",
  "family": "default",
  "sku": "tshirt-red-001",
  "values": {
    "common": { "sku": "tshirt-red-001", "color": "Red" },
    "channel_locale_specific": {
      "default": {
        "en_US": { "name": "T-Shirt Red" }
      }
    },
    "categories": []
  },
  "variant_attributes": { "color": "Red" }
}

Step 3: Add product image

{
  "sku": "tshirt-red-001",
  "attribute": "image",
  "file_url": "https://example.com/tshirt-red.jpg"
}

πŸ“Έ Media Upload

Upload product images via URL or base64 - images are automatically linked to the product:

// Via URL
{
  "sku": "PROD001",
  "attribute": "image",
  "file_url": "https://example.com/product.jpg"
}

// Via Base64
{
  "sku": "PROD001",
  "attribute": "image",
  "file_base64": "iVBORw0KGgo...",
  "filename": "product-image.jpg"
}

What happens automatically:

  1. βœ… File uploads to UnoPim storage
  2. βœ… Attribute metadata fetched to determine scope (common/locale_specific/channel_specific/channel_locale_specific)
  3. βœ… Product updated with file path in correct value structure
  4. βœ… Image immediately visible in UnoPim UI

No manual product update needed - the tool handles everything!


⚠️ Important API Notes

Attribute Value Structure

UnoPim attributes have different scoping based on value_per_locale and value_per_channel:

Scope When Structure
common Both = 0 values.common.attr
locale_specific locale=1, channel=0 values.locale_specific.en_US.attr
channel_specific locale=0, channel=1 values.channel_specific.default.attr
channel_locale_specific Both = 1 values.channel_locale_specific.default.en_US.attr

Example: The name attribute typically requires channel_locale_specific:

{
  "values": {
    "common": { "sku": "PROD001" },
    "channel_locale_specific": {
      "default": {
        "en_US": { "name": "Product Name" }
      }
    }
  }
}

πŸ› Known API Quirks

Issue Workaround
Configurable endpoint typo API uses /configrable-products (missing 'u') - MCP server handles this
Attribute options array Returns flat array [...] not { data: [...] }
Variants not auto-created Must add variants separately with unopim_add_variant
Case-sensitive options Option codes like "Red" must match exactly

πŸ”§ Development

# Build
npm run build

# Watch mode
npm run watch

# Type check
npm run typecheck

# Test with MCP Inspector
npx @modelcontextprotocol/inspector dist/index.js

πŸ“Š Environment Variables

Required

Variable Description
UNOPIM_BASE_URL UnoPim API URL (e.g., http://localhost:8000)
UNOPIM_CLIENT_ID OAuth2 Client ID
UNOPIM_CLIENT_SECRET OAuth2 Client Secret
UNOPIM_USERNAME API username
UNOPIM_PASSWORD API password

Optional

Variable Default Description
UNOPIM_DEFAULT_LOCALE en_US Default locale
UNOPIM_DEFAULT_CHANNEL default Default channel
UNOPIM_DEFAULT_CURRENCY USD Default currency
PORT 3000 HTTP server port

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Claude Desktop │────▢│   ngrok      │────▢│  MCP Server β”‚
β”‚                 β”‚ SSE β”‚              β”‚     β”‚  (Node.js)  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
                                                     β”‚
                                                     β”‚ OAuth2
                                                     β”‚ REST API
                                                     β–Ό
                                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                              β”‚   UnoPim    β”‚
                                              β”‚    PIM      β”‚
                                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“ Project Structure

src/
β”œβ”€β”€ index-http.ts      # HTTP server with SSE (for ngrok)
β”œβ”€β”€ index.ts           # stdio server (for local)
β”œβ”€β”€ config.ts          # Configuration loader
β”œβ”€β”€ auth/
β”‚   └── oauth.ts       # OAuth2 token management
β”œβ”€β”€ client/
β”‚   └── unopim-client.ts  # HTTP client with retry logic
β”œβ”€β”€ tools/
β”‚   β”œβ”€β”€ attributes.ts  # Attribute CRUD
β”‚   β”œβ”€β”€ categories.ts  # Category management
β”‚   β”œβ”€β”€ families.ts    # Family management
β”‚   β”œβ”€β”€ groups.ts      # Attribute groups
β”‚   β”œβ”€β”€ products.ts    # Product CRUD + media upload
β”‚   └── schema.ts      # Schema discovery
└── types/
    β”œβ”€β”€ errors.ts      # Error handling
    β”œβ”€β”€ oauth.ts       # OAuth types
    └── unopim.ts      # API types

πŸŽ‰ Example Conversation with Claude

You: Create a T-shirt product family with name, description, price and color attributes

Claude: I'll create the family with those attributes... (Uses unopim_create_family, unopim_create_attribute, etc.)

You: Now create a configurable T-shirt with red, blue and green variants at $29.99

Claude: I'll create the configurable product and add the color variants... (Uses unopim_create_configurable_product, unopim_add_variant)

You: Upload this image for the red variant: https://example.com/red-shirt.jpg

Claude: Uploading the image to the red variant... (Uses unopim_upload_product_media)


πŸ“„ License

ISC


πŸ™ Credits

Built with:

Made with ❀️ for seamless PIM management through AI

About

MCP Server for UnoPim PIM - Enable Claude Desktop to manage your product information with 24 powerful tools

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •