Inspiration

I work in technical support and frequently help users of Tableau Cloud. I often encounter extract refresh errors that span multiple systems — Tableau itself, and external data sources like Snowflake. Since the data source environment is outside our scope, we have to ask customers to investigate it themselves. But most customers aren't technical experts, and digging into Snowflake logs is a big ask.

I wanted to build something that lets anyone diagnose cross-system errors in natural language, directly inside Slack — without needing deep technical knowledge of Tableau or Snowflake.

What it does

Tableau Extract Error Diagnostics Agent automatically diagnoses Tableau Cloud extract refresh errors by:

  • Detecting failures via Tableau Cloud email notifications posted to Slack
  • Allowing anyone in the workspace to @mention @Tableau Error Agent in Slack for instant diagnosis
  • Using Tableau REST API to retrieve failed job details from Tableau Cloud
  • Using Snowflake connector to query QUERY_HISTORY for related errors

For deeper investigation, Slackbot is connected to both Snowflake MCP and Tableau MCP, enabling natural language queries:

  • Snowflake MCP: Query QUERY_HISTORY directly in natural language
  • Tableau MCP: Identify affected workbooks and dashboards (connected via Slack's MCP Server integration, as no official Tableau app for Slack exists yet)
  • Real-Time Search API: Search #data-ops-questions for similar past cases and resolved incidents
  • Delivering a structured incident report with root cause, resolution steps, and impact scope — all inside Slack

How I built it

  • Slack: Event Subscriptions (@mention triggers), MCP Server integration (Snowflake MCP + Tableau MCP), Real-Time Search API
  • @Tableau Error Agent: Python/Flask backend deployed on Railway. Receives @mention events via Event Subscriptions, calls Tableau REST API to retrieve failed job details, queries Snowflake for related errors, and posts a diagnostic report in the thread.
  • Slackbot MCP: Connected Snowflake Managed MCP Server and Tableau MCP (via mcp.tableau.com) to Slackbot using Slack's MCP Server integration. Enables natural language investigation across both systems.
  • Snowflake: Set up a Managed MCP Server with SYSTEM_EXECUTE_SQL tool, created a dedicated OAuth integration and MCP_ROLE for secure access.
  • Tableau Cloud: REST API for failed job details, Tableau MCP for workbook impact analysis.

Challenges I ran into

  • Snowflake Managed MCP Server requires an upgraded account — trial accounts block MCP tool execution entirely
  • Slack Socket Mode must be disabled for Event Subscriptions to work with an external backend (Railway)
  • Tableau Cloud MCP OAuth required configuring the correct SSO authorization URL (sso.online.tableau.com) — the standard Tableau Cloud URL didn't work
  • Slackbot MCP integration is in gradual rollout and not available in all environments — which is why I also built @Tableau Error Agent as a universally accessible alternative

Accomplishments that I'm proud of

  • Successfully connecting both Snowflake MCP and Tableau MCP to Slackbot for cross-system natural language diagnosis
  • Building a dual-agent system: @Tableau Error Agent for anyone in the workspace, Slackbot for deeper investigation
  • Getting Slackbot to generate a comprehensive incident report combining Snowflake QUERY_HISTORY, Tableau job logs, and past Slack Q&A in a single response

What I learned

  • How Slack's MCP Client works and its current limitations (gradual rollout, OAuth configuration)
  • How to set up Snowflake Managed MCP Server with custom OAuth integration and role-based access
  • The power of combining multiple MCP servers for cross-system diagnosis in natural language

What's next

  • Connect additional data sources via MCP (SQL Server, BigQuery, Salesforce, etc.)
  • Enable real-time automatic triggering when errors are detected (currently requires manual @mention or Slackbot query)
  • Expand diagnostic coverage beyond extract refresh errors to authentication, performance, and governance issues

Built With

  • flask
  • python
  • railway
  • restapi
  • slack-api
  • slack-real-time-search-api
  • snowflake
  • snowflake-mcp
  • tableau-cloud
  • tableau-mcp
Share this project:

Updates