Skip to main content
Glama

Tiendanube MCP Server - Docker Setup

A complete Model Context Protocol (MCP) server for Tiendanube/Nuvemshop API with Docker support and SSE transport.

πŸš€ Features

Resources

  • Products: Full CRUD with advanced filtering (stock, price, categories, SKU)

  • Orders: Complete order management with history tracking

  • Customers: Customer management with addresses and billing

  • Categories: Category hierarchy management

  • Coupons: Discount coupon management

  • Store: Store information and settings

Transport Modes

  • βœ… SSE (Server-Sent Events) - For web-based clients

  • βœ… Streamable HTTP - Modern HTTP transport

  • βœ… STDIO - For CLI/terminal usage

πŸ“‹ Prerequisites

  • Docker and Docker Compose

  • Tiendanube API credentials:

    • Access Token

    • Store ID

πŸ”§ Setup

1. Clone or Create Project Structure

mkdir tiendanube-mcp
cd tiendanube-mcp

Create the following files:

  • tiendanube_server.py (main server code)

  • Dockerfile

  • docker-compose.yml

  • requirements.txt

  • .env (from .env.example)

2. Configure Environment Variables

Create .env file:

TIENDANUBE_ACCESS_TOKEN=your_access_token_here
TIENDANUBE_STORE_ID=your_store_id_here
TIENDANUBE_BASE_URL=https://api.tiendanube.com/v1

# Server Configuration
MCP_TRANSPORT=sse
MCP_HOST=0.0.0.0
MCP_PORT=8080
LOG_LEVEL=INFO

3. Build and Run

# Build the Docker image
docker-compose build

# Start the server
docker-compose up -d

# View logs
docker-compose logs -f

# Stop the server
docker-compose down

🌐 Accessing the Server

SSE Transport (Default)

URL: http://localhost:8080/sse

Streamable HTTP Transport

Change .env:

MCP_TRANSPORT=streamable-http
URL: http://localhost:8080/mcp

πŸ” Health Check

curl http://localhost:8080/health

πŸ“Š API Endpoints

Products

  • list_products - List/search products with filters

  • get_product - Get product by ID

  • get_product_by_sku - Get product by SKU

  • create_product - Create new product with variants

  • update_product - Update product information

  • delete_product - Delete product

  • update_product_stock_price - Bulk update stock/prices

Orders

  • list_orders - List orders with filters

  • get_order - Get order details

  • get_order_history_values - Get value change history

  • get_order_history_editions - Get edition changelog

  • create_order - Create new order

  • update_order - Update order

  • close_order - Close order

  • open_order - Reopen order

  • cancel_order - Cancel order

Customers

  • list_customers - List/search customers

  • get_customer - Get customer details

  • create_customer - Create new customer

  • update_customer - Update customer

  • delete_customer - Delete customer

Categories

  • list_categories - List all categories

  • get_category - Get category details

  • create_category - Create category

  • update_category - Update category

  • delete_category - Delete category

Coupons

  • list_coupons - List all coupons

  • get_coupon - Get coupon details

  • create_coupon - Create discount coupon

Store

  • get_store - Get store information

🎯 Usage Examples

Connect from Python Client

import requests
import json

# SSE endpoint
url = "http://localhost:8080/sse"

# List products
payload = {
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
        "name": "list_products",
        "arguments": {
            "query": "shirt",
            "per_page": 10
        }
    },
    "id": 1
}

response = requests.post(url, json=payload)
print(response.json())

Connect from cURL

# List products
curl -X POST http://localhost:8080/sse \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "list_products",
      "arguments": {
        "published": true,
        "per_page": 20
      }
    },
    "id": 1
  }'

Advanced Examples

# Get low stock products
curl -X POST http://localhost:8080/sse \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "list_products",
      "arguments": {
        "max_stock": 10,
        "published": true
      }
    },
    "id": 1
  }'

# Create order
curl -X POST http://localhost:8080/sse \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "create_order",
      "arguments": {
        "products": [{"variant_id": 123456, "quantity": 2}],
        "customer": {
          "name": "John Doe",
          "email": "john@example.com"
        },
        "payment_status": "paid"
      }
    },
    "id": 1
  }'

🐳 Docker Commands

# Build
docker-compose build

# Start
docker-compose up -d

# Logs
docker-compose logs -f tiendanube-mcp

# Restart
docker-compose restart

# Stop
docker-compose down

# Remove everything
docker-compose down -v --rmi all

# Shell access
docker exec -it tiendanube-mcp-server bash

πŸ” Security Notes

  1. Never commit - Add to .gitignore

  2. Use environment-specific tokens - Separate dev/prod credentials

  3. Enable HTTPS - Use reverse proxy (nginx/traefik) for production

  4. Rate limiting - Consider adding rate limits for production

  5. CORS configuration - Configure allowed origins if exposing publicly

πŸ”„ Updating

# Pull latest changes
git pull

# Rebuild
docker-compose down
docker-compose build --no-cache
docker-compose up -d

πŸ“ Logging

Logs are configured with rotation:

  • Max size: 10MB per file

  • Max files: 3

  • Location: Docker logs (use docker-compose logs)

View logs:

# All logs
docker-compose logs -f

# Last 100 lines
docker-compose logs --tail=100

# Specific service
docker-compose logs -f tiendanube-mcp

πŸ› Troubleshooting

Server won't start

# Check logs
docker-compose logs tiendanube-mcp

# Verify environment variables
docker-compose config

# Test API credentials
curl -H "Authentication: bearer YOUR_TOKEN" \
  https://api.tiendanube.com/v1/YOUR_STORE_ID/store

Connection refused

  • Verify port 8080 is not in use: netstat -tuln | grep 8080

  • Check firewall settings

  • Ensure container is running: docker ps

Permission errors

# Fix permissions
chmod +x start.sh

🌟 Production Deployment

With Nginx Reverse Proxy

server {
    listen 443 ssl http2;
    server_name mcp.yourdomain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location /sse {
        proxy_pass http://localhost:8080/sse;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        
        # SSE specific
        proxy_buffering off;
        proxy_read_timeout 86400;
    }
}

With Docker Swarm

docker stack deploy -c docker-compose.yml tiendanube

Environment Variables for Production

TIENDANUBE_ACCESS_TOKEN=prod_token
TIENDANUBE_STORE_ID=prod_store_id
MCP_TRANSPORT=sse
MCP_HOST=0.0.0.0
MCP_PORT=8080
LOG_LEVEL=WARNING

πŸ“š Resources

πŸ“„ License

MIT License - See LICENSE file for details

🀝 Contributing

Contributions are welcome! Please open an issue or submit a pull request.

πŸ“§ Support

For issues related to:

  • This MCP Server: Open a GitHub issue

  • Tiendanube API: Contact Tiendanube support

  • MCP Protocol: Check MCP documentation

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AlexandreProenca/nuvemshop-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server