Connectors¶
Gaby talks to your systems via MCP — every external integration
speaks the standard initialize + tools/list handshake, either as a
local subprocess over stdio or a remote server over HTTP. First-party
connectors ship with Gaby and pass a shared contract suite
(connectors/_contract/).
First-party connectors¶
| Connector | Scope | Source |
|---|---|---|
| Postgres | read | connectors/postgres/ |
| Keycloak | read | connectors/keycloak/ |
| Redis | read | connectors/redis/ |
| Sentry | read | connectors/sentry/ |
| Stripe | read + simulate-only refund | connectors/stripe/ |
| Zoho Desk (ticket source) | inbound + writeback | backend/src/gaby/ticketing/zoho_desk.py |
| Slack (MCP ticket source) | inbound | mcp-servers/gaby-mcp-slack/ |
Community + bring-your-own¶
Beyond the first-party set, the catalogue is open:
- Community catalogue — curated third-party MCP servers (GitHub, GitLab, Linear, Notion, Atlassian, Slack, Filesystem, Cloudflare, PagerDuty, Datadog) that the Connectors page pre-fills for you.
- Bring your own MCP — a local command (
mcp_custom) or a remote server at a URL (mcp_http), e.g. a consolidated internal MCP. - One MCP vs many — whether to federate or consolidate.
The full, current list with status lives on the Connectors page in the app.
Contract¶
Every connector — first-party or community — must pass the 8-test
suite in connectors/_contract/test_contract.py:
initializereturns within 2 s.tools/listreturns at least one tool.- Tool descriptions declare a
scope=read|write|adminmarker. healthcheckis implemented and returns{ok: bool}.- Re-init within the same process is idempotent.
- Stdio frames are clean JSON-RPC (no stray prints to stdout).
- Healthcheck never echoes secrets from env vars.
- Disconnect closes cleanly within 1 s.
The Python tests parametrise across every entry in the CONNECTORS
list; adding a connector is two lines.