System overview
Architecture diagram
┌─────────────────────────────────────────────────────────────┐│ Your AI Agent (Claude, ChatGPT, Claude Code, any MCP client)│└────────────────────────────┬────────────────────────────────┘│ MCP Protocol (streamable-http)┌────────────────────────────▼────────────────────────────────┐│ SignalPilot Gateway ││ ┌────────────┐ ┌──────────────┐ ┌───────────────────────┐ ││ │ Governance │ │ Schema │ │ dbt Project │ ││ │ • LIMIT │ │ • DDL │ │ • Map / Validate │ ││ │ • DDL block│ │ • Explore │ │ • Model verification │ ││ │ • Audit │ │ • Join paths │ │ • Date boundaries │ ││ └────────────┘ └──────────────┘ └───────────────────────┘ │└────────────────────────────┬────────────────────────────────┘│┌────────────────────┼────────────────────┐▼ ▼ ▼┌─────────┐ ┌──────────┐ ┌──────────┐│ DuckDB │ │ Postgres │ │Snowflake │└─────────┘ └──────────┘ └──────────┘
In motion





Components
| Component | Responsibility |
|---|---|
| Gateway | FastAPI backend. Exposes 62 MCP tools over streamable-http. Handles auth, rate limiting, SQL governance, query execution, and audit logging. Port 3300. |
| Chat worker | Separate process from the same image. Claims and runs chat and agent jobs. |
| Web UI | Next.js 16 frontend. Connections, chat, notebooks, query history, dashboards. Port 3200. |
| Engine | SQL governance: AST parsing, DDL/DML blocking, dangerous function denial, LIMIT injection, dialect normalization. |
| Connectors | 12 database connectors with pooling and SSH tunneling: DuckDB, PostgreSQL, MySQL, SQLite, SQL Server, Snowflake, Databricks, BigQuery, Redshift, ClickHouse, Trino, and Xata. |
| Auth | Clerk JWT (cloud) or API key (local and cloud). Org-scoped with brute-force protection. |
| Sandboxes | Per-session isolated microVMs for notebooks and chat. Local mode uses one shared notebook container. |
| Plugin | Claude Code plugin: 24 skills and 2 verifier agents. Installed separately with claude plugin. |
| sp-sandbox | Sandbox manager for DuckDB and SQLite queries over local files. |
| Cloud | SignalPilot Cloud: hosted gateway with SSO, multi-tenant isolation, managed history. |
Project structure
signalpilot/├── signalpilot/│ ├── gateway/ # FastAPI backend: MCP server, REST API, governance│ │ └── gateway/│ │ ├── api/ # REST API modules│ │ ├── connectors/ # 12 database connectors + pooling + SSH tunneling│ │ ├── governance/ # Budget, cache, PII redaction, annotations│ │ ├── mcp/ # 62 MCP tool definitions (modular package)│ │ ├── engine/ # SQL validation, LIMIT injection, function denylist│ │ ├── dbt/ # Project scanning, validation, hazard detection│ │ ├── db/ # SQLAlchemy models, async engine, Alembic migrations│ │ └── auth/ # Clerk JWT (cloud) / local auth + org role enforcement│ ├── notebook-server/ # Notebook runtime that runs inside each sandbox│ └── web/ # Next.js 16 frontend│ ├── app/ # App router pages (chat, connections, notebooks, etc.)│ ├── components/ # UI components│ └── lib/ # API client, auth context, hooks├── signalpilot-plugin/ # Canonical agent plugin (24 skills, 2 verifier agents)│ ├── agents/ # Structure and value verifier agents│ └── skills/ # dbt workflow, SQL, domain, and reporting skills├── sp-sandbox/ # DuckDB/SQLite sandbox manager├── benchmark/ # Spider 2.0-DBT benchmark suite (SOTA: 51.56%)└── docker-compose.yml # Full local stack
Deployment modes
Self-hosted (Docker Compose)
$ docker compose up -d# Web UI: http://localhost:3200# Gateway: http://localhost:3300
One docker-compose.yml brings up the web UI, gateway, chat worker, notebook container, Postgres, MinIO object storage, a mail catcher, the sandbox manager, and a read-only object proxy for evals. Every port binds to loopback. Auth is API-key based. See Self-host with Docker Compose.
SignalPilot Cloud
Multi-tenant. Clerk JWT for SSO. Org-scoped API keys. Managed history, dashboards, and encrypted credential storage. Notebooks and chat run in per-session isolated microVMs. See SignalPilot Cloud plans and the client guides for Claude, ChatGPT, and Claude Code.
MCP transport
SignalPilot uses streamable-http, the current MCP standard. The endpoint is mounted at:
/mcp(canonical)/(backward compatibility)
MCP tool calls are stateless per request. Your client keeps the session context; the gateway holds no open stream between tool calls.