Building an AI Chatbot for Tableau with Claude and MCP
Part 1: Problem and Architecture
The Problem
Every BI tool in 2025 now has an AI button. Tableau is no exception: Pulse, Tableau Agent, AI-driven analytics. These are solid features. But they come with a significant limitation: all of them are Cloud-exclusive. If you’re running Tableau Server on-premises, and a significant number of organizations still are, you don’t get any of this.
I wanted to build an AI assistant that sits directly inside a Tableau dashboard, queries your actual data in real time, and works on both Cloud and Server. Not a third-party tool in a separate tab. Not a BI copilot that requires exporting data first. A native Tableau extension that lives inside the dashboard itself.
The result has two core modes. The first is a chatbot: you type a question in natural language, the AI queries the datasource and responds with real numbers and an appropriate chart. The second is dashboard generation: you describe what you want in a single prompt, and the AI builds a full dashboard on a drag-and-drop canvas with KPI cards, charts, tables, and insights.
Architecture
At the center of the system is the MCP server. MCP stands for Model Context Protocol, an open standard from Anthropic that lets AI models interact with external tools. Tableau has released an official MCP server with three core capabilities: listing available datasources, retrieving field metadata (dimensions, measures, types), and executing data queries.
The data flow works as follows. The Tableau extension (written in React) is embedded in the dashboard and communicates with a Python backend (built on FastAPI). When a user asks a question, the backend forwards it to Claude (Anthropic’s large language model). Claude analyzes the request, determines it needs data, and invokes the Tableau MCP server. The MCP server authenticates using a Personal Access Token (PAT) and runs the query against the datasource via VDS API. The results travel back through the chain, Claude formulates a response, and the extension renders it.
What makes this approach universal is the authentication layer. The MCP server uses PAT and communicates through standard Tableau APIs, specifically REST API and VDS API. These APIs are identical on Cloud and Server. The same setup works regardless of the platform. For on-prem environments, this is, to my knowledge, the only approach available today for bringing AI capabilities into Tableau dashboards.
For this demo, the backend and MCP server are deployed as external web services, but they can just as easily run internally, behind a firewall.
In the next article, I cover the extension in action: the chatbot, the canvas, and dashboard generation.