Skip to content

Configuration (.env)

All TaTi infrastructure (Postgres, app, MCP bridges) is driven by environment variables. The repo’s .env.example is the source of truth: it is commented line by line. Copy it to .env and customize.

Never commit .env

Slack, GitHub, OpenMetadata, cloud keys, etc. must stay out of Git and screenshots.

Basics

  • One line per key: if you duplicate a variable, only the last wins (standard .env parsers).
  • Docker / host consistency: DATABASE_URL for the app must point to the correct host (postgres in Compose, localhost if the app runs on the host outside Compose).
  • NODE_ENV: usually development in the repo Compose; production images follow the project Dockerfile.

PostgreSQL (app data)

VariableDescription
POSTGRES_USERUser created in the Postgres container.
POSTGRES_PASSWORDPassword — change outside dev.
POSTGRES_DBTaTi application database name.
POSTGRES_PORTPort exposed on the host if you map Postgres (avoid public exposure).
DATABASE_URLFull string consumed by the SSR server (postgres://user:pass@host:port/db).

Application auth

VariableDescription
TATI_AUTH_REQUIREDtrue to require login before the UI (recommended outside a personal sandbox).
TATI_SESSION_TTL_HOURSSession lifetime in hours (12 by default).

These are also passed to the app service in Compose files to avoid drift from a misread .env.


GHCR images (docker-compose.dist.yml mode)

VariableDescription
TATI_IMAGE_REGISTRYImage prefix (ghcr.io/<owner> lower-case for GitHub).
TATI_IMAGE_TAGImage tag (semver release or latest).
APP_PORTPort where you reach the UI.

Optional: mounted paths for some MCPs (e.g. filesystem in dist mode).


OpenMetadata

VariableDescription
OPENMETADATA_URLOpenMetadata API URL reachable from the MCP container (host.docker.internal on Docker Desktop if OM runs on the host).
OPENMETADATA_JWTOM API token.
OPENMETADATA_ALLOW_MUTATIONSAllow writes to OM or not.
OPENMETADATA_WRITE_CONFIRM_TOKENExpected value to confirm sensitive write tools.

MCP Postgres (SQL for the model)

VariableDescription
MCP_POSTGRES_DATABASE_URLDatabase the bridge runs SQL against (often same as TaTi or a business DB).
MCP_POSTGRES_PORTBridge HTTP port on the host.
MCP_POSTGRES_READ_ONLYtrue to restrict to reads (SELECT / introspection).

Messaging & files

Slack, Discord, PDF, Notion, filesystem: see MCP_SLACK_*, MCP_DISCORD_*, MCP_PDF_*, MCP_NOTION_TOKEN, MCP_FILESYSTEM_* in .env.example. Default ports are listed in MCP connectors.


Cloud & observability

Main groups in .env.example:

  • AWSAWS_REGION, credentials or AWS_PROFILE.
  • Azure — Service Principal or AZURE_ACCESS_TOKEN.
  • GCPGCP_PROJECT_ID, service account JSON.
  • Email SMTPSMTP_*, allowlisted recipients.
  • Dagster — Dagster GraphQL URL, API token, DAGSTER_ALLOW_MUTATIONS.
  • Apache AirflowAIRFLOW_BASE_URL, credentials or AIRFLOW_API_TOKEN, AIRFLOW_ALLOW_MUTATIONS, AIRFLOW_SSL_VERIFY.
  • dbt CloudDBT_CLOUD_DISCOVERY_URL, DBT_CLOUD_TOKEN, DBT_CLOUD_ENVIRONMENT_ID, DBT_SSL_VERIFY.
  • dbt Core (CLI bridge)DBT_CORE_HOST_PROJECT, DBT_CORE_PROJECT_DIR, DBT_PROFILES_DIR, DBT_CORE_TARGET, DBT_ALLOW_MUTATIONS.
  • Elasticsearch — cluster URL, API key or login/password.
  • Grafana / Prometheus — monitoring stack URL + tokens if needed.
  • Datadog — Datadog MCP URL + API / application keys (often as headers in TaTi UI).
  • Atlassian / Jira + Confluencehttps://mcp.atlassian.com/v1/mcp + OAuth 2.1 access token as Authorization: Bearer … header.
  • monday.comhttps://mcp.monday.com/mcp + OAuth access token as Authorization: Bearer … header (optional Api-Version header).
  • Linearhttps://mcp.linear.app/mcp + OAuth 2.1 access token as Authorization: Bearer … header.
  • Metabasehttps://<your-metabase>/api/mcp + OAuth 2.0 access token as Authorization: Bearer … header; check MB_SITE_URL in Metabase.
  • Tableaumcp-tableau service (MCP_TABLEAU_PORT=8024); TaTi URL http://mcp-tableau:3927/tableau-mcp; vars TABLEAU_SERVER_URL, TABLEAU_SITE_NAME, TABLEAU_PAT_NAME, TABLEAU_PAT_VALUE (or OAuth via TABLEAU_MCP_OAUTH_ISSUER).
  • ZendeskZENDESK_SUBDOMAIN, ZENDESK_EMAIL, ZENDESK_API_KEY, MCP_ZENDESK_PORT for the local mcp-zendesk bridge.
  • ServiceNowSERVICENOW_INSTANCE_URL, SERVICENOW_USERNAME, SERVICENOW_PASSWORD or SERVICENOW_TOKEN / OAuth, MCP_SERVICENOW_PORT for the local mcp-servicenow bridge.
  • Brevohttps://mcp.brevo.com/v1/brevo/mcp + MCP token as Authorization: Bearer … header (Settings → MCP servers).
  • HubSpothttps://mcp.hubspot.com/ + HubSpot OAuth access token as Authorization: Bearer … header (OAuth PKCE required).
  • MuleSoftANYPOINT_CLIENT_ID, ANYPOINT_CLIENT_SECRET, ANYPOINT_REGION, MCP_MULESOFT_PORT for the local mcp-mulesoft bridge.
  • SalesforceMCP_SALESFORCE_MCP_URL, SALESFORCE_OAUTH_CLIENT_ID, and OAuth access token as Authorization: Bearer … header (scope mcp_api).

Git forge

VariableDescription
MCP_GITHUB_TOKEN / MCP_GITLAB_TOKENAPI access with minimal scope.
MCP_GITLAB_URLGitLab instance (cloud or self-hosted).
MCP_WRITE_CONFIRM_TOKENString write tools may require to prevent accidents.
MCP_GITHUB_MCP_URL / MCP_GITLAB_MCP_URLOptional if your setup still references an explicit URL.

Google Workspace (remote MCP)

VariableDescription
MCP_GMAIL_MCP_URL / MCP_GOOGLE_CALENDAR_MCP_URLOfficial Google MCP endpoints.
GOOGLE_CLOUD_PROJECT_IDGCP project where APIs are enabled.
GOOGLE_OAUTH_CLIENT_ID / SECRETOAuth flow for tooling.
GOOGLE_OAUTH_ACCESS_TOKENBearer for tests or header-based integrations.

Moodle

MCP_MOODLE_MCP_URL and MCP_MOODLE_TOKEN — plugin endpoint URL and Moodle external service token.


When you’re stuck

  1. Compare your .env with .env.example from the same release tag as your images.
  2. Check MCP logs: docker compose logs mcp-<name>.
  3. Re-read the dedicated section in MCP connectors.

TaTi — delivery/ops copilot • Version vdev • Documentation under repository license