Skip to content

Architecture

This document describes how TaTi is structured when you run the official repo: application database, web server, MCP bridges, and user configuration.

Overview

TaTi architecture — browser, TanStack / Vite SSR app, PostgreSQL, MCP bridges

Legend: HTTP flows to the app; SQL to Postgres (app data); MCP uses streamable HTTP to bridges (Slack, Postgres, GitHub, OM…). The diagram distinguishes presentation, business logic, data, and MCP.

Application layer

  • Frontend + SSR: chat UI, settings (including MCP servers), login screen when TATI_AUTH_REQUIRED=true.
  • API: user sessions and enabled MCP URLs are persisted server-side (schema in the repo; migrations via scripts or deployment).
  • DATABASE_URL: Postgres connection string used by the app — distinct from MCP_POSTGRES_DATABASE_URL, which is only for the Postgres MCP server to run SQL on behalf of the model.

MCP layer

Each connector is a separate process (often a Docker container) implementing MCP over HTTP (“streamable” transport). In TaTi settings you register:

  • a base URL pointing at the /mcp path (or the vendor URL for Gmail, Datadog, etc.);
  • optional headers (API tokens, Datadog keys, Moodle Bearer, Google OAuth…).

When the user sends a chat message, the app may invoke those servers depending on configuration and the tools each bridge exposes.

Example: Tableau + Atlassian

MCP architecture diagram connecting an MCP client, Tableau MCP, Atlassian MCP, Tableau Server/Cloud, and Confluence

This diagram shows the general pattern for business connectors: the MCP client orchestrates the exchange with the LLM, then calls specialized MCP servers. Tableau MCP turns requests into Tableau API calls (REST, Metadata, VizQL, Pulse), while Atlassian MCP handles Confluence/Jira. Responses come back to the LLM as JSON or Markdown before being synthesized for the user.

Docker networking

On the same docker-compose.yml, services resolve by name:

  • Example: http://mcp-postgres:8002/mcp from the app container.
  • From your host (curl tests), use http://localhost:<port>/mcp with the port from .env (MCP_*_PORT).

Filesystem MCP security

The Filesystem MCP mounts a host directory (./ in dev) into the container at FILESYSTEM_ROOT (often /workspace). Reads/writes stay under that root: lock this down in production (dedicated volume, OS permissions).

Local auth

Local authentication does not replace MCP network security: even with user login, MCP services on an open network could be called directly. Keep MCPs on a private network or behind a firewall. Sessions are driven by TATI_SESSION_TTL_HOURS and the repo’s cookie / server-side storage.

Next reads

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