Three main components:
- Streaming - Real-time Snapchain events via gRPC → Redis → PostgreSQL
- Backfill - Historical data via queue/worker pattern
- MCP - AI assistant data access
Waypoint supports three service modes for horizontal scaling:
waypoint start # Both producer and consumer (default)
waypoint start producer # Producer only: Hub → Redis
waypoint start consumer # Consumer only: Redis → PostgreSQLThis enables independent scaling of producers and consumers via HPA or similar.
sequenceDiagram
participant Hub as Snapchain
participant Sub as Subscriber
participant Redis
participant Consumer
participant DB as PostgreSQL
Hub->>Sub: gRPC stream
Sub->>Redis: Publish by type (casts, reactions, etc.)
Consumer->>Redis: XREADGROUP
Consumer->>DB: Store
Consumer->>Redis: XACK
Flow:
- Subscriber connects to Snapchain gRPC, filters spam, groups by type
- Redis streams provide durability and backpressure
- Consumer groups enable parallel processing
- Stale messages get reclaimed via XCLAIM
sequenceDiagram
participant Queue as Redis Queue
participant Worker
participant Hub as Snapchain
participant DB as PostgreSQL
Queue->>Worker: Job with FIDs
Worker->>Hub: Fetch messages per FID
Worker->>DB: Store
Worker->>Queue: Complete
Flow:
- Queue service populates Redis with FID batches
- Workers pull jobs atomically (BRPOP)
- Each job reconciles all message types for its FIDs
- Multiple workers scale horizontally
sequenceDiagram
participant AI
participant MCP as MCP Adapter
participant Query as WaypointQuery
participant Hub as Snapchain
participant DB as PostgreSQL
AI->>MCP: Tool call / resource read
MCP->>Query: Transport mapping
Query->>Hub: Fetch
Query->>DB: Optional fallback (adapter-dependent)
MCP->>AI: JSON response
McpServicehandles runtime lifecycle and server startup.WaypointMcpToolsis a thin protocol adapter (rmcpschemas + routing).WaypointQueryowns transport-agnostic query/business logic shared across transports.WaypointQueryreturns typed query results;WaypointMcpToolsserializes JSON for MCP responses.
See mcp.md for tool details.
Uses DataContext pattern with Hub-primary, DB-fallback strategy:
DataContext<DB, HC>
├── database: Option<DB> # PostgreSQL
└── hub_client: Option<HC> # Snapchain gRPC
See data-architecture.md for schema.