项目简介

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 应用提供稳定的服务框架。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/tableau/tableau-mcp.git
    cd tableau-mcp
  2. 安装依赖:
    npm install
  3. 构建项目:
    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': 连接应用的密钥值。
  • '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

基本使用方法

  1. 准备环境: 确保您已安装 Node.js 和 npm,并完成了上述安装和构建步骤。
  2. 配置环境变量: 在项目根目录下创建 '.env' 文件,并根据您的 Tableau 环境和认证方式配置必要的环境变量(如上所示)。
  3. 启动 MCP 服务器:
    npm start # 或者直接运行:node build/index.js
    服务器将根据 'TRANSPORT' 环境变量的设置通过 'stdio' 或 'http' 启动。如果使用 'stdio',它将等待来自 MCP 客户端的请求。如果使用 'http',它将在指定的端口上监听请求。
  4. 与 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与计算