Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@UnoPim MCP Servercreate a new blue t-shirt with SKU TSH-01 in the apparel family"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 build2. 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.js4. 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 |
| Fetch complete data model |
| List all attributes with types |
| List all product families |
| Get detailed schema for a specific family |
Attribute Management
Tool | Description |
| Create attribute (text, select, boolean, price, etc.) |
| Create options for select attributes |
| Get options for a select attribute |
| List attribute groups |
| Create attribute group |
Family Management
Tool | Description |
| Create product family |
| Update family |
Category Management
Tool | Description |
| Fetch category tree |
| Create category |
Product Management
Tool | Description |
| List products with filtering |
| Get single product by SKU |
| Create simple product |
| Update product |
| Create or update product |
| β Auto-validates against family schema |
| Batch create products |
Configurable Products
Tool | Description |
| Create parent product with variants |
| Add variant to configurable product |
| Update configurable product |
Media Upload β Automatic Linking
Tool | Description |
| β Upload image and auto-link to product |
| 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:
β File uploads to UnoPim storage
β Attribute metadata fetched to determine scope (common/locale_specific/channel_specific/channel_locale_specific)
β Product updated with file path in correct value structure
β 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 |
| Both = 0 |
|
| locale=1, channel=0 |
|
| locale=0, channel=1 |
|
| Both = 1 |
|
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 |
Attribute options array | Returns flat array |
Variants not auto-created | Must add variants separately with |
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 API URL (e.g., |
| OAuth2 Client ID |
| OAuth2 Client Secret |
| API username |
| API password |
Optional
Variable | Default | Description |
|
| Default locale |
|
| Default channel |
|
| Default currency |
|
| 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
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
You: Upload this image for the red variant: https://example.com/red-shirt.jpg
Claude: Uploading the image to the red variant... (Uses
π License
ISC
π Credits
Built with:
Made with β€οΈ for seamless PIM management through AI