Docker
Deploy the vCon MCP Server using Docker for consistent, portable deployments.
Quick Start
Pull from ECR Public
# Pull the latest image
docker pull public.ecr.aws/r4g1k2s3/vcon-dev/vcon-mcp:main
# Run the server
docker run -p 3000:3000 \
-e SUPABASE_URL=https://your-project.supabase.co \
-e SUPABASE_SERVICE_ROLE_KEY=your-service-role-key \
-e SUPABASE_ANON_KEY=your-anon-key \
-e MCP_HTTP_STATELESS=true \
public.ecr.aws/r4g1k2s3/vcon-dev/vcon-mcp:mainBuild Locally
# Clone and build
git clone https://github.com/vcon-dev/vcon-mcp.git
cd vcon-mcp
docker build -t vcon-mcp .
# Run
docker run -p 3000:3000 --env-file .env vcon-mcpImage Tags
main
Latest stable build from main branch
main-<sha>
Specific commit (e.g., main-abc1234)
1.2.3
Semantic version release
1.2
Minor version (latest patch)
1
Major version (latest minor/patch)
Running the Server
Basic Usage
With Environment File
Multi-Client Support
For multiple clients to connect simultaneously, enable stateless mode:
Note: Without
MCP_HTTP_STATELESS=true, only one MCP client can connect at a time due to session tracking limitations in the MCP SDK.
Running Scripts
The Docker image includes all utility scripts from the /scripts directory:
List Available Scripts
Run a Script
Run TypeScript Directly
Environment Variables
Required
SUPABASE_URL
Your Supabase project URL
SUPABASE_SERVICE_ROLE_KEY
Supabase service role key (full database access, bypasses RLS)
SUPABASE_ANON_KEY
Supabase anonymous key (restricted access with RLS)
Note: You need at least one of
SUPABASE_SERVICE_ROLE_KEYorSUPABASE_ANON_KEY. The service role key is recommended for server-side deployments as it provides full database access.
MCP Transport
MCP_TRANSPORT
http
Transport type: http or stdio
MCP_HTTP_HOST
0.0.0.0
HTTP host to bind
MCP_HTTP_PORT
3000
HTTP port to listen on
MCP_HTTP_STATELESS
false
Enable stateless mode for multi-client
MCP_HTTP_JSON_ONLY
false
Disable SSE, JSON responses only
Tool Configuration
MCP_TOOLS_PROFILE
full
Preset: full, readonly, user, admin, minimal
MCP_ENABLED_CATEGORIES
(all)
Comma-separated: read,write,schema,analytics,infra
MCP_DISABLED_TOOLS
(none)
Comma-separated tool names to disable
Optional Services
REDIS_URL
Redis URL for caching (e.g., redis://localhost:6379)
OPENAI_API_KEY
OpenAI API key for embeddings
OTEL_ENABLED
Enable OpenTelemetry (true/false)
OTEL_ENDPOINT
OTLP collector endpoint
Docker Compose
Basic Setup
With Redis Caching
With Observability
Connecting to Local Services
When running in Docker and connecting to services on your host machine (like local Supabase), use host.docker.internal:
Note:
host.docker.internalworks on Docker Desktop (Mac/Windows). On Linux, use--network hostor the host's actual IP.
Health Checks
The image includes a built-in health check:
Production Deployment
Kubernetes
AWS ECS
Image Details
Base Image: Node.js 20 Alpine
Size: ~680 MB
Platforms: linux/amd64, linux/arm64
User: Non-root (
vcon:nodejs)Working Directory:
/app
Troubleshooting
Container Exits Immediately
Check logs for missing environment variables:
Common causes:
Missing
SUPABASE_URLor Supabase keys (SUPABASE_SERVICE_ROLE_KEY/SUPABASE_ANON_KEY)Invalid credentials
Connection Refused to Database
If connecting to local Supabase:
Multiple Clients Failing
Enable stateless mode:
View Container Logs
Building Custom Images
Build and run:
Last updated