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
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
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.