Get MCIP running locally in under 5 minutes with Docker.
Before we dive in, make sure you have:
| Requirement | Version | Check Command |
|---|---|---|
| Docker | 20+ | docker --version |
| Docker Compose | 2.x | docker compose version |
| OpenAI API Key | β | Get one here |
Don't have Docker? Install it here β it takes about 5 minutes.
Ready? Let's get MCIP running.
git clone https://github.com/CloverDynamics/mcip.git
cd mcipCreate your environment file:
cp .env.example .envNow open .env and add your OpenAI API key:
# Required β this powers the semantic search
OPENAI_API_KEY=sk-proj-your-api-key-here
# Data source (we'll use the demo store for now)
SOURCE_URL=https://demo.vendure.io/shop-api
STORE_PROVIDER=VENDURE
# Security β change this in production!
ADMIN_API_KEY=your-secret-admin-keyThat's the minimum configuration. MCIP will use sensible defaults for everything else.
docker compose up -dThis spins up three containers:
| Service | Port | Purpose |
|---|---|---|
| mcip | 8080 | The MCIP server |
| qdrant | 6333 | Vector database for semantic search |
| redis | 6379 | Queue backend for async processing |
First startup takes 30-60 seconds while containers initialize.
Check the health endpoint:
curl http://localhost:8080/healthYou should see:
{"status":"ok"}π Congratulations! MCIP is running. But we're not done yet β we need products to search.
MCIP doesn't store products itself. It fetches them from your e-commerce platform, transforms them, and indexes them for semantic search. Let's trigger that sync:
curl -X POST http://localhost:8080/admin/sync \
-H "x-admin-api-key: your-secret-admin-key"You'll see:
{
"status": "success",
"message": "Queued 150 products from URL",
"count": 150
}What just happened?
This runs asynchronously. Give it 30-60 seconds for the demo store's ~150 products.
Now the fun part β let's search:
curl "http://localhost:8080/search?q=laptop"You'll get results like:
{
"meta": {
"count": 5,
"take": 10,
"skip": 0,
"q": "laptop"
},
"items": [
{
"externalId": "prod_123",
"title": "Gaming Laptop Pro",
"price": { "amount": 1299.99, "currency": "USD" },
"score": 0.892
}
]
}Notice the score field? That's semantic similarity β how well each product matches your intent, not just keywords.
Your Docker Compose setup includes everything you need:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Your Machine β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ ββββββββββββ ββββββββββββββββββββ β
β β MCIP βββββΆβ Qdrant β β Redis β β
β β :8080 β β :6333 ββββββ :6379 β β
β ββββββ¬ββββββ ββββββββββββ ββββββββββββββββββββ β
β β β
β βΌ β
β OpenAI API (external) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββProblem: MCIP hasn't finished starting.
Solution: Wait 30-40 seconds and try again. Check logs:
docker compose logs mcipProblem: Qdrant is still initializing.
Solution: MCIP retries Qdrant connection 10 times on startup. Check Qdrant status:
docker compose logs qdrantProblem: Invalid or rate-limited API key.
Solution: Verify your key works:
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY"If you're on a free tier, you may hit rate limits. Wait a minute and retry.
Problem: Products are still processing.
Solution:
docker compose logs mcipProblem: Missing environment variables.
Solution: Ensure .env has at least OPENAI_API_KEY set.
Prefer to run without Docker? Here's how:
# Install dependencies
npm install
# Start infrastructure only
docker compose up redis qdrant -d
# Create local environment
cat > .env << EOF
OPENAI_API_KEY=sk-proj-your-key
REDIS_HOST=localhost
QDRANT_URL=http://localhost:6333
ADMIN_API_KEY=dev-admin-key
EOF
# Run in development mode (with hot reload)
npm run start:devHere's what you can configure:
| Variable | Required | Default | Description |
|---|---|---|---|
OPENAI_API_KEY | Yes | β | Powers embeddings and AI features |
SOURCE_URL | No | Vendure demo | Where to fetch products |
STORE_PROVIDER | No | VENDURE | Adapter to use |
GRAPHQL_QUERY | No | β | Custom query for GraphQL sources |
ADMIN_API_KEY | No | secret-admin-key | Protects admin endpoints |
PORT | No | 8080 | Server port |
REDIS_HOST | No | redis | Redis hostname |
QDRANT_URL | No | http://qdrant:6333 | Vector database URL |
For the complete list, see the Configuration Guide.