项目简介
Tableau MCP 是一个强大的服务器端应用,它基于 Model Context Protocol (MCP) 标准构建,旨在使大型语言模型 (LLM) 能够无缝集成和利用 Tableau 平台的数据与功能。该服务器能够托管和管理 Tableau 资源、注册并执行 Tableau 相关的工具,从而让 LLM 客户端可以请求 Tableau 的数据、元数据和可视化内容,支持构建智能化的数据分析和报告应用。
主要功能点
- 数据源管理: 提供列出、查询 Tableau 数据源的功能,可以获取数据源的详细信息、元数据,并执行复杂的 VizQL 查询来获取特定数据。
- 工作簿和视图操作: 允许列出 Tableau 站点上的工作簿和视图,获取工作簿详情,甚至可以获取视图的 CSV 格式数据或渲染图像。
- Pulse 指标集成: 支持与 Tableau Pulse 指标的深度集成,包括列出指标定义、获取特定指标、管理订阅以及生成指标值洞察报告。
- 标准化协议通信: 通过 JSON-RPC 协议与 LLM 客户端进行通信,支持 Stdio 和 HTTP 等多种传输方式,确保安全、可扩展的上下文服务。
- 会话管理与能力声明: 负责管理与客户端的会话,并声明其支持的功能,为 LLM 应用提供稳定的服务框架。
安装步骤
- 克隆仓库:
git clone https://github.com/tableau/tableau-mcp.git cd tableau-mcp - 安装依赖:
npm install - 构建项目:
npm run build
服务器配置 (针对 MCP 客户端)
MCP 服务器设计用于被 MCP 客户端调用。作为 MCP 客户端的使用者,您需要配置如何启动和连接此 Tableau MCP 服务器。以下是 MCP 客户端配置 Tableau MCP 服务器的关键信息:
- 'server name': 'tableau-mcp' (此服务器的标识名称)
- 'command': 'node' (用于启动服务器进程的命令)
- 'args': '["build/index.js"]' (传递给 'node' 命令的参数,指向编译后的服务器入口文件)
服务器端环境变量配置 (位于 'tableau-mcp' 仓库的 '.env' 文件) Tableau MCP 服务器在启动时需要访问 Tableau Server/Cloud 并进行身份验证。请在服务器运行环境中(例如在 'tableau-mcp' 仓库的根目录下创建 '.env' 文件)配置以下环境变量:
- 'SERVER': 您 Tableau Server 或 Tableau Cloud 实例的完整 URL (例如:'https://your.tableau.server.com')
- 'SITE_NAME': 您 Tableau 站点的名称 (例如:'your-site-name')
- 'AUTH': 认证方式,可选值包括 'pat' (个人访问令牌) 或 'direct-trust' (直接信任)。
- 如果选择 'pat':
- 'PAT_NAME': 您的 Tableau 个人访问令牌的名称。
- 'PAT_VALUE': 您的 Tableau 个人访问令牌的密钥值。
- 如果选择 'direct-trust':
- 'JWT_SUB_CLAIM': JWT (JSON Web Token) 中的 'sub' (subject) 声明值。
- 'CONNECTED_APP_CLIENT_ID': 连接应用的客户端 ID。
- 'CONNECTED_APP_SECRET_ID': 连接应用的密钥 ID。
- 'CONNECTED_APP_SECRET_VALUE': 连接应用的密钥值。
- 如果选择 'pat':
- 'TRANSPORT': 服务器用于与客户端通信的协议。推荐使用 'stdio' 以便 MCP 客户端 SDK 直接管理其生命周期,也可以选择 'http' 用于独立运行的服务器。
- 'DEFAULT_LOG_LEVEL': 服务器日志输出级别 (例如:'debug', 'info', 'warn', 'error')。
- 'CORS_ORIGIN_CONFIG': (仅当 'TRANSPORT' 为 'http' 时相关) 配置 CORS 允许的源,可以是 'true' (允许所有)、'*' (允许所有)、'false' (禁止所有) 或特定 URL 字符串/数组。
- 'MAX_RESULT_LIMIT': 查询结果的最大限制条目数。
- 'DISABLE_LOG_MASKING': 设置为 'true' 可禁用日志敏感信息屏蔽。
- 'DISABLE_QUERY_DATASOURCE_FILTER_VALIDATION': 设置为 'true' 可禁用数据源查询过滤器的值验证。
- 'DISABLE_METADATA_API_REQUESTS': 设置为 'true' 可禁用元数据 API 请求。
示例 '.env' 文件内容:
SERVER=https://your.tableau.server.com SITE_NAME=your-site-name AUTH=pat PAT_NAME=my-tableau-token PAT_VALUE=YOUR_PERSONAL_ACCESS_TOKEN_SECRET TRANSPORT=stdio DEFAULT_LOG_LEVEL=info
基本使用方法
- 准备环境: 确保您已安装 Node.js 和 npm,并完成了上述安装和构建步骤。
- 配置环境变量: 在项目根目录下创建 '.env' 文件,并根据您的 Tableau 环境和认证方式配置必要的环境变量(如上所示)。
- 启动 MCP 服务器:
服务器将根据 'TRANSPORT' 环境变量的设置通过 'stdio' 或 'http' 启动。如果使用 'stdio',它将等待来自 MCP 客户端的请求。如果使用 'http',它将在指定的端口上监听请求。npm start # 或者直接运行:node build/index.js - 与 MCP 客户端集成:
您的 LLM 应用程序(或其他 MCP 客户端)可以使用 Model Context Protocol SDK 连接到这个 Tableau MCP 服务器。以下是一个使用 Node.js 客户端 SDK 连接和调用工具的示例:
import { Client } from '@modelcontextprotocol/sdk/client'; import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio'; async function main() { // 配置客户端以通过 Stdio 连接到 Tableau MCP 服务器 const transport = new StdioClientTransport({ command: 'node', args: ['build/index.js'], // 指向 Tableau MCP 服务器的启动命令 env: { // 这里传递 Tableau MCP 服务器所需的 Tableau 环境变量 // 这些环境变量在服务器启动时会被读取,而不是在客户端代码中直接使用 SERVER: 'https://your.tableau.server.com', SITE_NAME: 'your-site-name', AUTH: 'pat', PAT_NAME: 'my-tableau-token', PAT_VALUE: 'YOUR_PERSONAL_ACCESS_TOKEN_SECRET', TRANSPORT: 'stdio', // 确保与服务器的 TRANSPORT 配置一致 DEFAULT_LOG_LEVEL: 'info', }, }); // 创建 MCP 客户端实例 const client = new Client({ name: 'my-llm-app-client', version: '1.0.0', capabilities: { listTools: true, callTool: true, }, }); // 连接到 MCP 服务器 await client.connect(transport); console.log('Successfully connected to Tableau MCP Server.'); // 列出所有可用的工具 const tools = await client.listTools(); console.log('Available tools:', tools.tools.map(t => t.name)); // 示例:调用 'list-datasources' 工具来列出数据源 console.log('Calling "list-datasources" tool...'); const datasourcesResult = await client.callTool({ name: 'list-datasources', arguments: { filter: 'name:eq:Superstore', // 过滤名为 "Superstore" 的数据源 }, }); if (!datasourcesResult.isError) { console.log('Superstore datasources:', JSON.parse(datasourcesResult.content[0].text)); } else { console.error('Error calling list-datasources:', datasourcesResult.content[0].text); } // 断开与 MCP 服务器的连接 await client.disconnect(); console.log('Disconnected from Tableau MCP Server.'); } main().catch(console.error);
信息
分类
AI与计算