Auto-sync: 20260107-000953
This commit is contained in:
@@ -72,6 +72,7 @@ This document tracks all IP addresses in the homelab infrastructure.
|
|||||||
| Excalidraw | excalidraw.htsn.io | 10.10.10.206:8080 | Traefik-Primary |
|
| Excalidraw | excalidraw.htsn.io | 10.10.10.206:8080 | Traefik-Primary |
|
||||||
| MetaMCP | metamcp.htsn.io | 10.10.10.207:12008 | Traefik-Primary |
|
| MetaMCP | metamcp.htsn.io | 10.10.10.207:12008 | Traefik-Primary |
|
||||||
| n8n | n8n.htsn.io | 10.10.10.207:5678 | Traefik-Primary |
|
| n8n | n8n.htsn.io | 10.10.10.207:5678 | Traefik-Primary |
|
||||||
|
| PA API | pa.htsn.io | 10.10.10.207:8401 | Traefik-Primary (Tailscale only) |
|
||||||
| Crafty Controller | mc.htsn.io | 10.10.10.207:8443 | Traefik-Primary |
|
| Crafty Controller | mc.htsn.io | 10.10.10.207:8443 | Traefik-Primary |
|
||||||
| Plex | plex.htsn.io | 10.10.10.100:32400 | Traefik-Saltbox |
|
| Plex | plex.htsn.io | 10.10.10.100:32400 | Traefik-Saltbox |
|
||||||
| Sonarr | sonarr.htsn.io | 10.10.10.100:8989 | Traefik-Saltbox |
|
| Sonarr | sonarr.htsn.io | 10.10.10.100:8989 | Traefik-Saltbox |
|
||||||
@@ -132,6 +133,7 @@ This document tracks all IP addresses in the homelab infrastructure.
|
|||||||
|
|
||||||
| Service | Port | Purpose |
|
| Service | Port | Purpose |
|
||||||
|---------|------|---------|
|
|---------|------|---------|
|
||||||
|
| PA API | 8401 | Personal Assistant API (pa.htsn.io) - Tailscale only |
|
||||||
| MetaMCP | 12008 | MCP Aggregator/Gateway (metamcp.htsn.io) |
|
| MetaMCP | 12008 | MCP Aggregator/Gateway (metamcp.htsn.io) |
|
||||||
| n8n | 5678 | Workflow automation |
|
| n8n | 5678 | Workflow automation |
|
||||||
| Crafty Controller | 8443 | Minecraft server management (mc.htsn.io) |
|
| Crafty Controller | 8443 | Minecraft server management (mc.htsn.io) |
|
||||||
@@ -149,6 +151,16 @@ This document tracks all IP addresses in the homelab infrastructure.
|
|||||||
| Android Phone | 10.10.10.54 | 8384 | Xxz3jDT4akUJe6psfwZsbZwG2LhfZuDM |
|
| Android Phone | 10.10.10.54 | 8384 | Xxz3jDT4akUJe6psfwZsbZwG2LhfZuDM |
|
||||||
| TrueNAS | 10.10.10.200 | 8384 | (check TrueNAS config) |
|
| TrueNAS | 10.10.10.200 | 8384 | (check TrueNAS config) |
|
||||||
|
|
||||||
|
## Mac Mini Services (10.10.10.125)
|
||||||
|
|
||||||
|
| Service | Port | Purpose |
|
||||||
|
|---------|------|---------|
|
||||||
|
| MCP Bridge | 8400 | HTTP bridge for MCP tool execution (PA API backend) |
|
||||||
|
| Beeper Desktop | 23373 | Message aggregation (Telegram, iMessage, SMS) |
|
||||||
|
| Proton Bridge IMAP | 1143 | Personal email access |
|
||||||
|
| Proton Bridge SMTP | 1025 | Personal email sending |
|
||||||
|
| Syncthing | 8384 | File sync API |
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
- **MTU 9000** (jumbo frames) enabled on storage networks
|
- **MTU 9000** (jumbo frames) enabled on storage networks
|
||||||
|
|||||||
339
PA-API.md
Normal file
339
PA-API.md
Normal file
@@ -0,0 +1,339 @@
|
|||||||
|
# Personal Assistant API
|
||||||
|
|
||||||
|
Backend API for the Personal Assistant system - provides Claude-powered voice/text interface to all PA capabilities (calendar, tasks, messages, smart home, etc.).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
| Setting | Value |
|
||||||
|
|---------|-------|
|
||||||
|
| **Domain** | pa.htsn.io |
|
||||||
|
| **Local IP** | 10.10.10.207:8401 |
|
||||||
|
| **Server** | docker-host2 (PVE2 VMID 302) |
|
||||||
|
| **Compose** | `/opt/pa-api/docker-compose.yml` |
|
||||||
|
| **Access** | Tailscale only (not publicly exposed) |
|
||||||
|
| **GitHub** | Private repo: `pa-api` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
Android/Telegram
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌─────────────────┐
|
||||||
|
│ PA API │ ← Claude SDK, model routing
|
||||||
|
│ docker-host2 │
|
||||||
|
│ :8401 │
|
||||||
|
└────────┬────────┘
|
||||||
|
│
|
||||||
|
┌────┴────┐
|
||||||
|
│ │
|
||||||
|
▼ ▼
|
||||||
|
┌───────┐ ┌──────────┐
|
||||||
|
│ Rube │ │MCP Bridge│ ← Mac Mini (Beeper, Proton, etc.)
|
||||||
|
│ Exa │ │ :8400 │
|
||||||
|
│ etc. │ └──────────┘
|
||||||
|
└───────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**PA API handles:**
|
||||||
|
- Claude SDK integration (no CLI startup delay)
|
||||||
|
- Model routing (Haiku/Sonnet/Opus)
|
||||||
|
- Session management
|
||||||
|
- Direct API tools (Exa, Ref, Rube, Airtable)
|
||||||
|
|
||||||
|
**MCP Bridge handles:**
|
||||||
|
- Tools requiring Mac Mini (Beeper, Proton Bridge, filesystem)
|
||||||
|
- Runs on Mac Mini at 10.10.10.125:8400
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## API Endpoints
|
||||||
|
|
||||||
|
| Endpoint | Method | Purpose |
|
||||||
|
|----------|--------|---------|
|
||||||
|
| `/chat` | POST | Main query endpoint (streaming SSE) |
|
||||||
|
| `/health` | GET | Health check |
|
||||||
|
|
||||||
|
### POST /chat
|
||||||
|
|
||||||
|
**Request:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"message": "What's on my calendar today?",
|
||||||
|
"session_id": "abc123"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Response (Server-Sent Events):**
|
||||||
|
```
|
||||||
|
data: {"type": "model", "name": "sonnet"}
|
||||||
|
data: {"type": "chunk", "text": "You have "}
|
||||||
|
data: {"type": "chunk", "text": "3 meetings today..."}
|
||||||
|
data: {"type": "done", "full_text": "You have 3 meetings today..."}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Model Routing
|
||||||
|
|
||||||
|
| Query Type | Model | Examples |
|
||||||
|
|------------|-------|----------|
|
||||||
|
| Simple facts | Haiku | "How old is X?", "What's 15% of 80?" |
|
||||||
|
| PA queries | Sonnet | "What's on my calendar?", "Add task" |
|
||||||
|
| Complex reasoning | Opus | "Help me plan my week" |
|
||||||
|
|
||||||
|
**Override:** Say "Use Opus" to force model selection (sticky per session).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
### Docker Compose
|
||||||
|
|
||||||
|
Location: `/opt/pa-api/docker-compose.yml`
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
pa-api:
|
||||||
|
image: pa-api:latest
|
||||||
|
build: .
|
||||||
|
container_name: pa-api
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8401:8401"
|
||||||
|
environment:
|
||||||
|
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
|
||||||
|
- MCP_BRIDGE_URL=http://10.10.10.125:8400
|
||||||
|
- EXA_API_KEY=${EXA_API_KEY}
|
||||||
|
# Add other API keys as needed
|
||||||
|
volumes:
|
||||||
|
- ./data:/app/data
|
||||||
|
networks:
|
||||||
|
- pa-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
pa-network:
|
||||||
|
driver: bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
### Environment Variables
|
||||||
|
|
||||||
|
| Variable | Purpose |
|
||||||
|
|----------|---------|
|
||||||
|
| `ANTHROPIC_API_KEY` | Claude API access |
|
||||||
|
| `MCP_BRIDGE_URL` | Mac Mini bridge endpoint |
|
||||||
|
| `EXA_API_KEY` | Exa web search |
|
||||||
|
| `AIRTABLE_API_KEY` | Airtable access |
|
||||||
|
|
||||||
|
Store in `/opt/pa-api/.env` (not committed to git).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Traefik Configuration
|
||||||
|
|
||||||
|
File: `/etc/traefik/conf.d/pa-api.yaml` (on CT 202)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
http:
|
||||||
|
routers:
|
||||||
|
pa-api:
|
||||||
|
rule: "Host(`pa.htsn.io`)"
|
||||||
|
entryPoints:
|
||||||
|
- websecure
|
||||||
|
service: pa-api
|
||||||
|
tls:
|
||||||
|
certResolver: cloudflare
|
||||||
|
|
||||||
|
services:
|
||||||
|
pa-api:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: "http://10.10.10.207:8401"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note:** This service is Tailscale-only. The Traefik route exists for convenience but should not be exposed publicly via Cloudflare.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Common Tasks
|
||||||
|
|
||||||
|
### Start/Stop Service
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# SSH to docker-host2
|
||||||
|
ssh docker-host2
|
||||||
|
|
||||||
|
# Start
|
||||||
|
cd /opt/pa-api && docker-compose up -d
|
||||||
|
|
||||||
|
# Stop
|
||||||
|
cd /opt/pa-api && docker-compose down
|
||||||
|
|
||||||
|
# View logs
|
||||||
|
docker logs -f pa-api
|
||||||
|
|
||||||
|
# Restart
|
||||||
|
docker-compose restart pa-api
|
||||||
|
```
|
||||||
|
|
||||||
|
### Update Service
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh docker-host2
|
||||||
|
cd /opt/pa-api
|
||||||
|
git pull
|
||||||
|
docker-compose build
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Health Check
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# From any machine on network
|
||||||
|
curl http://10.10.10.207:8401/health
|
||||||
|
|
||||||
|
# Test chat endpoint
|
||||||
|
curl -X POST http://10.10.10.207:8401/chat \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"message": "Hello", "session_id": "test"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## MCP Bridge (Mac Mini)
|
||||||
|
|
||||||
|
The MCP Bridge runs on Mac Mini and exposes MCP tools as HTTP endpoints.
|
||||||
|
|
||||||
|
| Setting | Value |
|
||||||
|
|---------|-------|
|
||||||
|
| **Location** | Mac Mini (10.10.10.125) |
|
||||||
|
| **Port** | 8400 |
|
||||||
|
| **Purpose** | Execute MCP tools (Beeper, Proton, TickTick, HA, etc.) |
|
||||||
|
|
||||||
|
### Bridge Endpoints
|
||||||
|
|
||||||
|
| Endpoint | Method | Purpose |
|
||||||
|
|----------|--------|---------|
|
||||||
|
| `/tools` | GET | List available tools |
|
||||||
|
| `/execute` | POST | Execute a tool |
|
||||||
|
| `/health` | GET | Health check |
|
||||||
|
|
||||||
|
### Start MCP Bridge
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# SSH to Mac Mini
|
||||||
|
ssh macmini
|
||||||
|
|
||||||
|
# Start bridge (managed by launchd)
|
||||||
|
launchctl load ~/Library/LaunchAgents/com.hutson.mcp-bridge.plist
|
||||||
|
|
||||||
|
# Check status
|
||||||
|
curl http://localhost:8400/health
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Integration Points
|
||||||
|
|
||||||
|
### Related Services
|
||||||
|
|
||||||
|
| Service | Relationship |
|
||||||
|
|---------|--------------|
|
||||||
|
| n8n | Telegram bot uses n8n → Claude CLI (separate path) |
|
||||||
|
| MetaMCP | PA API does NOT use MetaMCP (direct MCP Bridge) |
|
||||||
|
| Home Assistant | Controlled via MCP Bridge |
|
||||||
|
| Claude-Mem | Shared memory database for context |
|
||||||
|
|
||||||
|
### Clients
|
||||||
|
|
||||||
|
| Client | Connection |
|
||||||
|
|--------|------------|
|
||||||
|
| Android App | HTTPS via Tailscale → pa.htsn.io |
|
||||||
|
| (Future) Web UI | Same endpoint |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Monitoring
|
||||||
|
|
||||||
|
### Health Checks
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# PA API
|
||||||
|
curl -s http://10.10.10.207:8401/health | jq
|
||||||
|
|
||||||
|
# MCP Bridge
|
||||||
|
curl -s http://10.10.10.125:8400/health | jq
|
||||||
|
```
|
||||||
|
|
||||||
|
### Logs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# PA API logs
|
||||||
|
ssh docker-host2 'docker logs -f pa-api --tail 100'
|
||||||
|
|
||||||
|
# MCP Bridge logs (Mac Mini)
|
||||||
|
ssh macmini 'tail -f ~/Library/Logs/mcp-bridge.log'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### PA API Not Responding
|
||||||
|
|
||||||
|
1. Check container status:
|
||||||
|
```bash
|
||||||
|
ssh docker-host2 'docker ps | grep pa-api'
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Check logs for errors:
|
||||||
|
```bash
|
||||||
|
ssh docker-host2 'docker logs pa-api --tail 50'
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Verify network:
|
||||||
|
```bash
|
||||||
|
curl http://10.10.10.207:8401/health
|
||||||
|
```
|
||||||
|
|
||||||
|
### MCP Bridge Not Responding
|
||||||
|
|
||||||
|
1. Check if Mac Mini is reachable:
|
||||||
|
```bash
|
||||||
|
ping 10.10.10.125
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Check bridge process:
|
||||||
|
```bash
|
||||||
|
ssh macmini 'pgrep -f mcp-bridge'
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Restart bridge:
|
||||||
|
```bash
|
||||||
|
ssh macmini 'launchctl unload ~/Library/LaunchAgents/com.hutson.mcp-bridge.plist'
|
||||||
|
ssh macmini 'launchctl load ~/Library/LaunchAgents/com.hutson.mcp-bridge.plist'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Model Routing Issues
|
||||||
|
|
||||||
|
- Check Claude API key is valid
|
||||||
|
- Verify Haiku classifier is responding
|
||||||
|
- Check session storage for stuck model overrides
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Related Documentation
|
||||||
|
|
||||||
|
- [IP-ASSIGNMENTS.md](IP-ASSIGNMENTS.md) - Service IP mapping
|
||||||
|
- [VMS.md](VMS.md) - docker-host2 VM details
|
||||||
|
- [TRAEFIK.md](TRAEFIK.md) - Reverse proxy configuration
|
||||||
|
- [Personal Assistant Project](~/Projects/personal-assistant/CLAUDE.md) - PA system overview
|
||||||
|
- [Services Matrix](~/Projects/personal-assistant/docs/services-matrix.md) - All MCP tools
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated**: 2026-01-07
|
||||||
@@ -33,6 +33,7 @@ Documentation for Hutson's home infrastructure - two Proxmox servers running VMs
|
|||||||
| [SERVICES.md](SERVICES.md) | Complete service inventory with URLs and credentials |
|
| [SERVICES.md](SERVICES.md) | Complete service inventory with URLs and credentials |
|
||||||
| [TRAEFIK.md](TRAEFIK.md) | Reverse proxy setup, adding services, SSL certificates |
|
| [TRAEFIK.md](TRAEFIK.md) | Reverse proxy setup, adding services, SSL certificates |
|
||||||
| [HOMEASSISTANT.md](HOMEASSISTANT.md) | Home Assistant API, automations, integrations |
|
| [HOMEASSISTANT.md](HOMEASSISTANT.md) | Home Assistant API, automations, integrations |
|
||||||
|
| [PA-API.md](PA-API.md) | Personal Assistant API, MCP Bridge, Claude integration |
|
||||||
| [SYNCTHING.md](SYNCTHING.md) | File sync across all devices, API access, troubleshooting |
|
| [SYNCTHING.md](SYNCTHING.md) | File sync across all devices, API access, troubleshooting |
|
||||||
| [SALTBOX.md](#) | Media automation stack (Plex, *arr apps) (coming soon) |
|
| [SALTBOX.md](#) | Media automation stack (Plex, *arr apps) (coming soon) |
|
||||||
|
|
||||||
@@ -83,6 +84,7 @@ Documentation for Hutson's home infrastructure - two Proxmox servers running VMs
|
|||||||
| **Plex** | Saltbox VM | https://plex.htsn.io |
|
| **Plex** | Saltbox VM | https://plex.htsn.io |
|
||||||
| **Home Assistant** | VM 110 | https://homeassistant.htsn.io |
|
| **Home Assistant** | VM 110 | https://homeassistant.htsn.io |
|
||||||
| **Gitea** | VM 300 | https://git.htsn.io |
|
| **Gitea** | VM 300 | https://git.htsn.io |
|
||||||
|
| **PA API** | docker-host2 | https://pa.htsn.io (Tailscale) |
|
||||||
| **Pi-hole** | CT 200 | http://10.10.10.10/admin |
|
| **Pi-hole** | CT 200 | http://10.10.10.10/admin |
|
||||||
| **Traefik** | CT 202 | http://10.10.10.250:8080 |
|
| **Traefik** | CT 202 | http://10.10.10.250:8080 |
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user