This commit adds a complete deployment solution for running Claude OS's MCP (Model Context Protocol) server as a standalone service, separate from the full coding environment. This allows other applications to access the knowledge bases without requiring the CLI or coding tools. Features: - Docker-based deployment with Ollama integration - Automated setup script with model pulling - Read-only database mounting by default - CORS and authentication configuration - Complete API documentation and examples - Python and JavaScript client examples Also includes alternative Cloudflare Workers implementation: - TypeScript starter template - D1 and Vectorize integration examples - Migration scripts and documentation - Deployment comparison guide Files added: - deployment/mcp-only/Dockerfile - deployment/mcp-only/docker-compose.yml - deployment/mcp-only/requirements.txt - deployment/mcp-only/setup.sh - deployment/mcp-only/.env.example - deployment/mcp-only/.dockerignore - deployment/mcp-only/README.md - deployment/mcp-only/DEPLOYMENT_COMPARISON.md - deployment/mcp-only/examples/chat-integration.py - deployment/mcp-only/examples/chat-integration.js - deployment/mcp-only/cloudflare-workers/* This addresses the need to expose MCP data to other applications (knowledge base access, live chat) without deploying the full Claude OS environment to production servers.
178 lines
4.8 KiB
Bash
Executable file
178 lines
4.8 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Claude OS MCP-Only Setup Script
|
|
# This script helps with first-time deployment
|
|
|
|
set -e
|
|
|
|
echo "🚀 Claude OS MCP-Only Deployment Setup"
|
|
echo "======================================="
|
|
echo ""
|
|
|
|
# Check if Docker is installed
|
|
if ! command -v docker &> /dev/null; then
|
|
echo "❌ Docker is not installed. Please install Docker first."
|
|
echo " Visit: https://docs.docker.com/get-docker/"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if docker-compose is installed
|
|
if ! command -v docker-compose &> /dev/null; then
|
|
echo "❌ docker-compose is not installed. Please install docker-compose first."
|
|
echo " Visit: https://docs.docker.com/compose/install/"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ Docker and docker-compose are installed"
|
|
echo ""
|
|
|
|
# Check if database exists
|
|
DB_PATH="../../data/claude-os.db"
|
|
if [ ! -f "$DB_PATH" ]; then
|
|
echo "⚠️ Database not found at: $DB_PATH"
|
|
echo ""
|
|
echo " This deployment expects your existing Claude OS database."
|
|
echo " Please ensure Claude OS is set up locally first, or"
|
|
echo " adjust the volume mount in docker-compose.yml"
|
|
echo ""
|
|
read -p " Continue anyway? (y/n) " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "✅ Database found at: $DB_PATH"
|
|
# Get database size
|
|
DB_SIZE=$(du -h "$DB_PATH" | cut -f1)
|
|
echo " Size: $DB_SIZE"
|
|
fi
|
|
echo ""
|
|
|
|
# Create .env from example if it doesn't exist
|
|
if [ ! -f ".env" ]; then
|
|
echo "📝 Creating .env from .env.example..."
|
|
cp .env.example .env
|
|
echo "✅ Created .env file"
|
|
echo " Please review and update .env with your settings"
|
|
echo ""
|
|
else
|
|
echo "✅ .env file already exists"
|
|
echo ""
|
|
fi
|
|
|
|
# Prompt for CORS origins
|
|
echo "🔧 Configuration"
|
|
echo "---------------"
|
|
read -p "Enter CORS origins (comma-separated, or * for all) [*]: " CORS_INPUT
|
|
CORS_INPUT=${CORS_INPUT:-*}
|
|
|
|
# Update .env
|
|
sed -i.bak "s|CORS_ORIGINS=.*|CORS_ORIGINS=$CORS_INPUT|" .env && rm .env.bak
|
|
echo "✅ CORS_ORIGINS set to: $CORS_INPUT"
|
|
echo ""
|
|
|
|
# Ask about authentication
|
|
read -p "Enable authentication? (y/n) [n]: " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
# Generate a random secret
|
|
JWT_SECRET=$(openssl rand -hex 32 2>/dev/null || echo "CHANGE-THIS-SECRET-$(date +%s)")
|
|
|
|
read -p "Enter API username [admin]: " API_USER
|
|
API_USER=${API_USER:-admin}
|
|
|
|
read -s -p "Enter API password: " API_PASS
|
|
echo
|
|
|
|
if [ -z "$API_PASS" ]; then
|
|
echo "❌ Password cannot be empty"
|
|
exit 1
|
|
fi
|
|
|
|
# Uncomment and set auth variables in .env
|
|
sed -i.bak "s|# JWT_SECRET_KEY=.*|JWT_SECRET_KEY=$JWT_SECRET|" .env && rm .env.bak
|
|
sed -i.bak "s|# JWT_ALGORITHM=.*|JWT_ALGORITHM=HS256|" .env && rm .env.bak
|
|
sed -i.bak "s|# API_USERNAME=.*|API_USERNAME=$API_USER|" .env && rm .env.bak
|
|
sed -i.bak "s|# API_PASSWORD=.*|API_PASSWORD=$API_PASS|" .env && rm .env.bak
|
|
|
|
echo "✅ Authentication enabled"
|
|
else
|
|
echo "⚠️ Authentication disabled (not recommended for production)"
|
|
fi
|
|
echo ""
|
|
|
|
# Start services
|
|
echo "🐳 Starting Docker containers..."
|
|
echo "-------------------------------"
|
|
docker-compose up -d
|
|
|
|
echo ""
|
|
echo "⏳ Waiting for services to start..."
|
|
sleep 5
|
|
|
|
# Wait for Ollama to be ready
|
|
echo "Checking Ollama status..."
|
|
OLLAMA_READY=0
|
|
for i in {1..30}; do
|
|
if docker exec claude-os-ollama ollama list &>/dev/null; then
|
|
OLLAMA_READY=1
|
|
break
|
|
fi
|
|
echo " Waiting for Ollama... ($i/30)"
|
|
sleep 2
|
|
done
|
|
|
|
if [ $OLLAMA_READY -eq 0 ]; then
|
|
echo "⚠️ Ollama is taking longer than expected to start"
|
|
echo " You can check logs with: docker-compose logs ollama"
|
|
else
|
|
echo "✅ Ollama is ready"
|
|
fi
|
|
echo ""
|
|
|
|
# Pull required models
|
|
echo "📥 Pulling required Ollama models..."
|
|
echo "-----------------------------------"
|
|
echo "This may take a few minutes on first run..."
|
|
echo ""
|
|
|
|
echo "Pulling nomic-embed-text (embeddings)..."
|
|
docker exec claude-os-ollama ollama pull nomic-embed-text
|
|
|
|
echo "Pulling llama3.1:latest (LLM)..."
|
|
docker exec claude-os-ollama ollama pull llama3.1:latest
|
|
|
|
echo ""
|
|
echo "✅ Models downloaded successfully"
|
|
echo ""
|
|
|
|
# Check MCP server health
|
|
echo "🏥 Checking MCP server health..."
|
|
sleep 3
|
|
|
|
if curl -f http://localhost:8051/health &>/dev/null; then
|
|
echo "✅ MCP server is healthy!"
|
|
else
|
|
echo "⚠️ MCP server is not responding yet"
|
|
echo " Check logs with: docker-compose logs mcp-server"
|
|
fi
|
|
|
|
echo ""
|
|
echo "========================================="
|
|
echo "✨ Setup Complete!"
|
|
echo "========================================="
|
|
echo ""
|
|
echo "Your MCP server is now running at:"
|
|
echo " http://localhost:8051"
|
|
echo ""
|
|
echo "Test it with:"
|
|
echo " curl http://localhost:8051/health"
|
|
echo ""
|
|
echo "View logs:"
|
|
echo " docker-compose logs -f mcp-server"
|
|
echo ""
|
|
echo "Stop services:"
|
|
echo " docker-compose down"
|
|
echo ""
|
|
echo "See README.md for usage examples and API documentation"
|
|
echo ""
|