--- name: weaviate-connection description: Connect to local Weaviate vector database and verify connection health version: 2.0.0 author: Scott Askinosie dependencies: - weaviate-local-setup --- # Weaviate Connection Skill This skill helps you connect to a **local Weaviate database** instance running in Docker and verify the connection is healthy. ## Important Note **This skill is designed for LOCAL Weaviate instances only.** Claude Desktop and Claude Web have network restrictions that prevent connections to external services like Weaviate Cloud. **To use these skills, you must run Weaviate locally using Docker.** See the `weaviate-local-setup` skill first. ## Purpose Establish and test connections to local Weaviate vector databases running on localhost. ## When to Use This Skill - User wants to connect to their local Weaviate database - User needs to verify their Weaviate connection is working - User asks to check Weaviate health or status - After starting Weaviate with Docker ## Prerequisites Check **BEFORE proceeding, Claude should verify:** 1. **Python environment is set up** (from `weaviate-local-setup` skill) - Virtual environment exists at `.venv/` - Dependencies are installed 2. **Weaviate Docker container is running** - Check with `docker ps | grep weaviate` - If not running, guide user to start it 3. **Environment file exists** - `.env` file is present - Has required variables set ### Automated Prerequisites Check ```python import subprocess import sys import os from pathlib import Path def check_prerequisites(): """Check all prerequisites before connecting to Weaviate""" print("šŸ” Checking prerequisites...\n") all_checks_passed = True # Check 1: Virtual environment venv_path = Path(".venv") if venv_path.exists(): print("āœ… Virtual environment found") else: print("āš ļø No virtual environment found") print(" Creating virtual environment...") subprocess.run([sys.executable, "-m", "venv", ".venv"]) print("āœ… Virtual environment created") # Check 2: Dependencies try: import weaviate from dotenv import load_dotenv print("āœ… Python dependencies installed") except ImportError: print("āš ļø Missing dependencies") print(" Installing weaviate-client and python-dotenv...") subprocess.check_call([sys.executable, "-m", "pip", "install", "-q", "weaviate-client", "python-dotenv"]) print("āœ… Dependencies installed") # Check 3: Docker container result = subprocess.run(["docker", "ps"], capture_output=True, text=True) if "weaviate" in result.stdout: print("āœ… Weaviate Docker container is running") else: print("āŒ Weaviate Docker container not found") print(" Please start Weaviate first:") print(" cd weaviate-local-setup && docker-compose up -d") all_checks_passed = False # Check 4: .env file if Path(".env").exists(): print("āœ… .env file found") else: print("āš ļø .env file not found") print(" Creating .env from template...") if Path(".env.example").exists(): import shutil shutil.copy(".env.example", ".env") print("āœ… .env file created") print(" Please edit .env and add your API keys if needed") else: print("āŒ No .env.example found") all_checks_passed = False print("\n" + "="*50) if all_checks_passed: print("āœ… All prerequisites met! Ready to connect.") else: print("āŒ Some prerequisites missing. Please resolve them first.") print("="*50 + "\n") return all_checks_passed # Run the check if __name__ == "__main__": check_prerequisites() ``` **Claude should run this check automatically when this skill is loaded.** ## Requirements - Python 3.8+ - weaviate-client library (`pip install weaviate-client`) - **Local Weaviate instance running in Docker** (see `weaviate-local-setup` skill) - Docker Desktop running ## Connection Instructions ### Step 1: Ensure Weaviate is Running Locally Before connecting, verify Weaviate Docker container is running: ```bash # Check if Weaviate is running docker ps | grep weaviate # If not running, start it with docker-compose cd weaviate-local-setup docker-compose up -d # Verify Weaviate is ready curl http://localhost:8080/v1/.well-known/ready ``` ### Step 2: Install Dependencies ```bash pip install weaviate-client python-dotenv ``` ### Step 3: Configure Environment Variables Update your `.env` file for local connection: ```bash # .env file WEAVIATE_URL=localhost:8080 WEAVIATE_API_KEY= # Leave empty for local instances # Optional: Only needed if using these vectorizers OPENAI_API_KEY=your-openai-key COHERE_API_KEY=your-cohere-key ``` ### Step 4: Create Connection Code **Basic Connection (Recommended):** ```python import weaviate import os from dotenv import load_dotenv # Load environment variables load_dotenv() # Connect to local Weaviate client = weaviate.connect_to_local( host="localhost", port=8080, grpc_port=50051 ) # Test the connection try: # Check if client is ready if client.is_ready(): print("āœ… Connected to local Weaviate successfully!") # Get cluster metadata meta = client.get_meta() print(f"šŸ“¦ Weaviate version: {meta.get('version', 'unknown')}") # List collections collections = client.collections.list_all() print(f"\nšŸ“š Found {len(collections)} collections:") for name, config in collections.items(): print(f" - {name}") else: print("āŒ Connection failed - Weaviate not ready") except Exception as e: print(f"āŒ Error connecting to Weaviate: {str(e)}") print("\nšŸ’” Make sure Weaviate is running:") print(" docker ps | grep weaviate") finally: # Always close the connection client.close() ``` **Connection with API Headers (for OpenAI/Cohere vectorizers):** ```python import weaviate import os from dotenv import load_dotenv load_dotenv() # Connect with API key headers client = weaviate.connect_to_local( host="localhost", port=8080, grpc_port=50051, headers={ "X-OpenAI-Api-Key": os.getenv("OPENAI_API_KEY"), # Optional "X-Cohere-Api-Key": os.getenv("COHERE_API_KEY") # Optional } ) try: if client.is_ready(): print("āœ… Connected to local Weaviate with API headers!") except Exception as e: print(f"āŒ Error: {str(e)}") finally: client.close() ``` ### Step 5: Verify Connection Health After connecting, check: - āœ… Client is ready (`client.is_ready()`) - āœ… Can retrieve metadata (`client.get_meta()`) - āœ… Can list collections (`client.collections.list_all()`) ## Best Practices 1. **Start Docker First**: Always ensure Weaviate container is running before connecting 2. **Use Environment Variables**: Store configuration in `.env` file 3. **Close Connections**: Always close the client when done to prevent memory leaks 4. **Error Handling**: Wrap connection code in try/except blocks 5. **Connection Reuse**: Keep one client instance per session, don't create multiple 6. **Check Docker Status**: Use `docker ps` to verify Weaviate is running ## Common Issues ### Issue: "Connection refused" or "Cannot connect to localhost:8080" **Solution**: Weaviate Docker container is not running ```bash # Check if container is running docker ps | grep weaviate # Start Weaviate cd weaviate-local-setup docker-compose up -d # Wait 10-15 seconds for startup, then verify curl http://localhost:8080/v1/.well-known/ready ``` ### Issue: "Port 8080 already in use" **Solution**: Another service is using port 8080 ```bash # Find what's using port 8080 lsof -i :8080 # Either stop that service, or modify docker-compose.yml to use a different port # Change ports: - "8081:8080" in docker-compose.yml ``` ### Issue: "Docker daemon not running" **Solution**: Start Docker Desktop application ### Issue: "Module not found: weaviate" **Solution**: Install the client library ```bash pip install weaviate-client ``` ## Environment Variables Template ```bash # .env file for LOCAL Weaviate WEAVIATE_URL=localhost:8080 WEAVIATE_API_KEY= # Leave empty for local # Optional vectorizer API keys OPENAI_API_KEY=your-openai-key COHERE_API_KEY=your-cohere-key ANTHROPIC_API_KEY=your-anthropic-key ``` ## Quick Test Script Save this as `test_connection.py`: ```python import weaviate # Connect to local Weaviate client = weaviate.connect_to_local() try: if client.is_ready(): print("āœ… Connected successfully!") meta = client.get_meta() print(f"šŸ“¦ Version: {meta.get('version')}") else: print("āŒ Not ready") except Exception as e: print(f"āŒ Error: {e}") finally: client.close() ``` Run it: ```bash python test_connection.py ``` ## Next Steps After establishing connection: - Use **weaviate-collection-manager** skill to create and manage collections - Use **weaviate-data-ingestion** skill to add data to collections - Use **weaviate-query-agent** skill to search and retrieve data ## Additional Resources - [Weaviate Python Client Docs](https://weaviate.io/developers/weaviate/client-libraries/python) - [Weaviate Docker Installation](https://weaviate.io/developers/weaviate/installation/docker-compose) - [Local Weaviate Setup Guide](../weaviate-local-setup/SKILL.md)