---
name: "Database Connection Info"
description: "Centralized database connection configuration for all agents"
---

# Database Connection Information
**FOR ALL AGENTS - UPDATED 2026-01-17**

---

## Current Database Configuration

### Production Database (RMM Server)
- **Host:** 172.16.3.30
- **Port:** 3306
- **Database:** claudetools
- **User:** claudetools
- **Password:** CT_e8fcd5a3952030a79ed6debae6c954ed
- **Character Set:** utf8mb4
- **Tables:** 43 tables (all migrated)

### Connection String
```
mysql+pymysql://claudetools:CT_e8fcd5a3952030a79ed6debae6c954ed@172.16.3.30:3306/claudetools?charset=utf8mb4
```

### Environment Variable
```bash
DATABASE_URL=mysql+pymysql://claudetools:CT_e8fcd5a3952030a79ed6debae6c954ed@172.16.3.30:3306/claudetools?charset=utf8mb4
```

---

## ClaudeTools API

### Production API (RMM Server)
- **Base URL:** http://172.16.3.30:8001
- **Documentation:** http://172.16.3.30:8001/api/docs
- **Health Check:** http://172.16.3.30:8001/health
- **Authentication:** JWT Bearer Token (required for all endpoints)

### JWT Token Location
- **File:** `D:\ClaudeTools\.claude\context-recall-config.env`
- **Variable:** `JWT_TOKEN`
- **Expiration:** 2026-02-16 (30 days from creation)

### Authentication Header
```bash
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJpbXBvcnQtc2NyaXB0Iiwic2NvcGVzIjpbImFkbWluIiwiaW1wb3J0Il0sImV4cCI6MTc3MTI2NzQzMn0.7HddDbQahyRvaOq9o7OEk6vtn6_nmQJCTzf06g-fv5k
```

---

## Database Access Methods

### Method 1: Direct MySQL Connection (from RMM server)
```bash
# SSH to RMM server
ssh guru@172.16.3.30

# Connect to database
mysql -u claudetools -p'CT_e8fcd5a3952030a79ed6debae6c954ed' -D claudetools

# Example query
SELECT COUNT(*) FROM conversation_contexts;
```

### Method 2: Via ClaudeTools API (preferred for agents)
```bash
# Get contexts
curl -s "http://172.16.3.30:8001/api/conversation-contexts?limit=10" \
  -H "Authorization: Bearer $JWT_TOKEN"

# Create context
curl -X POST "http://172.16.3.30:8001/api/conversation-contexts" \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{...}'
```

### Method 3: Python with SQLAlchemy
```python
from sqlalchemy import create_engine, text

DATABASE_URL = "mysql+pymysql://claudetools:CT_e8fcd5a3952030a79ed6debae6c954ed@172.16.3.30:3306/claudetools?charset=utf8mb4"

engine = create_engine(DATABASE_URL)

with engine.connect() as conn:
    result = conn.execute(text("SELECT COUNT(*) FROM conversation_contexts"))
    count = result.scalar()
    print(f"Contexts: {count}")
```

---

## OLD vs NEW Configuration

### [WARNING] DEPRECATED - Old Jupiter Database (DO NOT USE)
- **Host:** 172.16.3.20 (Jupiter - Docker MariaDB)
- **Status:** Deprecated, data not migrated
- **Contains:** 68 old conversation contexts (pre-2026-01-17)

### [OK] CURRENT - New RMM Database (USE THIS)
- **Host:** 172.16.3.30 (RMM - Native MariaDB)
- **Status:** Production, current
- **Contains:** 7+ contexts (as of 2026-01-17)

**Migration Date:** 2026-01-17
**Reason:** Centralized architecture - all clients connect to RMM server

---

## For Database Agent

When performing operations, use:

### Read Operations
```python
# Use API for reads
import requests

headers = {
    "Authorization": f"Bearer {jwt_token}"
}

response = requests.get(
    "http://172.16.3.30:8001/api/conversation-contexts",
    headers=headers,
    params={"limit": 10}
)

contexts = response.json()
```

### Write Operations
```python
# Use API for writes
payload = {
    "context_type": "session_summary",
    "title": "...",
    "dense_summary": "...",
    "relevance_score": 8.5,
    "tags": "[\"tag1\", \"tag2\"]"
}

response = requests.post(
    "http://172.16.3.30:8001/api/conversation-contexts",
    headers=headers,
    json=payload
)

result = response.json()
```

### Direct Database Access (if API unavailable)
```bash
# SSH to RMM server first
ssh guru@172.16.3.30

# Then query database
mysql -u claudetools -p'CT_e8fcd5a3952030a79ed6debae6c954ed' -D claudetools \
  -e "SELECT id, title FROM conversation_contexts LIMIT 5;"
```

---

## Common Database Operations

### Count Records
```sql
SELECT COUNT(*) FROM conversation_contexts;
SELECT COUNT(*) FROM clients;
SELECT COUNT(*) FROM sessions;
```

### List Recent Contexts
```sql
SELECT id, title, relevance_score, created_at
FROM conversation_contexts
ORDER BY created_at DESC
LIMIT 10;
```

### Search Contexts by Tag
```bash
# Via API (preferred)
curl "http://172.16.3.30:8001/api/conversation-contexts/recall?tags=migration&limit=5" \
  -H "Authorization: Bearer $JWT_TOKEN"
```

---

## Health Checks

### Check Database Connectivity
```bash
# From RMM server
mysql -u claudetools -p'CT_e8fcd5a3952030a79ed6debae6c954ed' \
  -h 172.16.3.30 \
  -e "SELECT 1"
```

### Check API Health
```bash
curl http://172.16.3.30:8001/health
# Expected: {"status":"healthy","database":"connected"}
```

### Check API Service Status
```bash
ssh guru@172.16.3.30 "sudo systemctl status claudetools-api"
```

---

## Troubleshooting

### Cannot Connect to Database
```bash
# Check if MariaDB is running
ssh guru@172.16.3.30 "sudo systemctl status mariadb"

# Check if port is open
curl telnet://172.16.3.30:3306
```

### API Returns 401 Unauthorized
```bash
# JWT token may be expired - regenerate
python D:\ClaudeTools\create_jwt_token.py

# Update config file
# Edit: D:\ClaudeTools\.claude\context-recall-config.env
```

### API Returns 404 Not Found
```bash
# Check if API service is running
ssh guru@172.16.3.30 "sudo systemctl status claudetools-api"

# Check API logs
ssh guru@172.16.3.30 "sudo journalctl -u claudetools-api -n 50"
```

---

## Important Notes

1. **Always use the API when possible** - Better for access control and validation
2. **JWT tokens expire** - Regenerate monthly (currently valid until 2026-02-16)
3. **Database is centralized** - All machines connect to RMM server
4. **No local database** - Don't try to connect to localhost:3306
5. **Use parameterized queries** - Prevent SQL injection

---

**Last Updated:** 2026-01-17
**Current Database:** 172.16.3.30:3306 (RMM)
**Current API:** http://172.16.3.30:8001
