Connecting Channels
Channels connect Themis to external services. All channel credentials are configured per-space by space owners or managers.
Available Channels
| Channel | Capabilities | Auth |
|---|---|---|
| GitHub | Review PRs, check CI status, browse code, create issues | GitHub App install |
| Linear | Create and manage issues, track projects, triage bugs | Per-space API key |
| Sentry | Monitor errors, triage alerts, update issue status | Per-space API token |
| Metabase | Query databases, generate charts, analyze business data | Per-space API key |
| Google Drive | Search and read documents from shared drives | Per-user OAuth |
| Google Calendar | Inspect and manage events, free/busy lookups, OOO + focus time | Per-user OAuth |
| Gmail | Read, search, label, archive; does not send | Per-user OAuth |
| Google Analytics | Query GA4 properties, custom reports, realtime metrics | Per-space service account |
| Google Maps | Geocoding, places, directions, distance matrix, weather, air quality | Per-space API key |
| Flight Search | Search flights and flexible dates via Google Flights | No credentials (opt-in) |
| Microsoft Teams | Chat with Themis in Teams channels and DMs | Per-space bot app |
| Telegram | Chat with Themis via Telegram bot, send voice messages | Per-space bot token |
Setting Up a Channel
- Go to Space Settings (gear icon in the sidebar)
- Select Channels
- Choose the service you want to connect
- Enter the required credentials (API tokens, secrets)
- Save — Themis will validate the connection
Each channel shows its required and optional fields with hints about where to find them. Credentials are stored encrypted and displayed as masked values after saving.
GitHub
Themis authenticates via the Themis AI Agent GitHub App — no Personal Access Tokens. Click Install GitHub App in channel settings; once the install completes, the space stores its installation_id and tokens are minted on demand. See GitHub App Setup for deployment-level registration.
Bot aliases (optional, used for self-mention filtering):
| Field | Purpose |
|---|---|
| Bot Aliases | Extra GitHub logins that should trigger Themis — matched in @-mentions and as PR reviewer requests. Comma-separated. The app’s own bot is already included, so this is only needed when you also want an alternate handle (e.g. a staging install) to trigger the agent. |
Code-generation commits are attributed to the triggering user’s git identity (set in Profile), with the GitHub App as the pusher.
Linear
Uses an API key from Linear’s Settings > API. The Linear MCP server is hosted by Linear — no local installation needed.
Linear settings:
| Field | Purpose |
|---|---|
| Organization Slug | Your Linear org slug (e.g., my-org). Used to build issue URLs in PR descriptions and the inbox. Falls back to THEMIS_LINEAR_ORG_SLUG. Leave blank and Linear links are omitted silently. |
| Bot Display Names | Comma-separated Linear display names or email fragments that identify this bot (e.g., Themis,themis@). Used for self-reply prevention and to detect when an issue is assigned to the bot. Falls back to the agent’s display name. |
Assigning a Linear issue to a user matching one of the Bot Display Names triggers code generation on the issue.
Sentry
Requires an auth token with project and issue permissions. Optionally configure an organization slug for scoped access.
Metabase
Requires the Metabase Instance URL and an API Key (Metabase Admin > Settings > Authentication > API Keys). The Metabase MCP server must be installed on the host and on the application’s PATH (override with METABASE_MCP_COMMAND if needed).
Teams
Requires a Bot Framework app registration with app ID, password, and tenant ID. See the Microsoft Teams Bot Framework documentation for setup.
Telegram
Requires a bot token from @BotFather. Themis provides buttons to set up and verify the webhook automatically. Configure an allowed chat IDs list to restrict which groups the bot responds in.
Google Drive, Google Calendar, and Gmail
Three Google Workspace channels share a single per-user OAuth flow — each user connects their own Google account via Profile > Connections. No space-level credentials needed; each channel has its own scope and toolset:
| Channel | Scope | Tools |
|---|---|---|
| Google Drive | Read-only | Search, list, read file contents, permissions, shareable links |
| Google Calendar | Read + write | List calendars, read/create/update/delete events, free/busy, OOO, focus time |
| Gmail | Organize (read + label + archive; no send) | Search, read messages, label management, archive, trash |
Enable each channel in the space and have each user authorize through their profile. Channels are available in chat only while the speaker has connected their Google account.
Google Analytics
Requires a GCP service account JSON with the Analytics Admin API and Analytics Data API enabled in the same project. In GA4 admin, grant the service-account email Viewer on the property you want to query.
| Field | Purpose |
|---|---|
| Service Account JSON | Full JSON body of the service-account key. Stored encrypted; materialized on disk only when the MCP server spawns, keyed by a SHA of the content. |
| GCP Project ID (optional) | Sets GOOGLE_CLOUD_PROJECT on the MCP process. |
Exposes GA4 account discovery, property details, custom dimensions/metrics, core reports, and realtime reports.
Google Maps
Requires a Google Cloud API key with the Maps Platform APIs enabled (Places, Geocoding, Directions, Distance Matrix, Elevation, Time Zone, Weather, Air Quality). Generate a key in the GCP console and paste it into the channel.
Exposes nearby + text search, place details, geocoding (forward/reverse/batch), directions, distance matrix, route planning, elevation, timezone lookup, weather, and air quality. High-token composite tools are disabled by default.
Flight Search
No credentials — the MCP server hits Google Flights’ public API. Spaces must still enable the channel explicitly, otherwise the tools would burn tokens in contexts that don’t need them. Exposes search_flights (specific dates) and search_dates (flexible-date calendar). Results are capped at 20 by default (FLI_MCP_MAX_RESULTS) so chat context stays tight.
Webhooks
To receive real-time events, register webhook URLs in your external services:
| Service | Webhook URL | Events |
|---|---|---|
| GitHub | https://yourhost/webhooks/github | Pull requests, issues, comments, pushes |
| Linear | https://yourhost/webhooks/linear | Issues, comments |
| Sentry | https://yourhost/webhooks/sentry | Issue alerts |
| Teams | https://yourhost/webhooks/teams | Channel messages |
| Telegram | https://yourhost/webhooks/telegram | Messages, voice notes |
Webhook authentication is handled automatically — GitHub uses HMAC signatures, Linear uses JWT, Telegram uses signed requests. Themis resolves the target space by matching the webhook secret.