Connect Looker to Claude: Orchestrate Dashboards via MCP
Learn how to connect Looker to Claude using a managed MCP server. Automate inline queries, dashboard generation, and scheduled BI alerts with AI agents.
If you need to connect Looker to Claude to orchestrate dashboard creation, automate scheduled reporting, or query business intelligence data directly via chat, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's function calls and Looker's REST API. You can either build and maintain this infrastructure yourself, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL.
If your team uses ChatGPT, check out our guide on connecting Looker to ChatGPT or explore our broader architectural overview on connecting Looker to AI Agents.
Giving a Large Language Model (LLM) read and write access to a sprawling enterprise BI tool like Looker is an engineering challenge. You have to handle session authentication, map massive LookML schemas to MCP tool definitions, and deal with Looker's unique asynchronous query execution models. Every time a new view is added to a model, your tools need to reflect that.
This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Looker, connect it natively to Claude, and execute complex data orchestration workflows using natural language.
The Engineering Reality of the Looker API
A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against Looker's API requires dealing with significant domain specific quirks.
If you decide to build a custom MCP server for Looker, you own the entire API lifecycle. Here are the specific challenges you will face:
The Asynchronous Query Execution Trap
Unlike a standard CRUD API where a GET request immediately returns data, Looker queries can take minutes to execute depending on the underlying data warehouse. The Looker API frequently requires an asynchronous pattern: you create an async query task, receive a query_task_id, and then poll the API until the status is complete. Exposing this raw polling mechanism to Claude results in context window exhaustion and hallucinated task IDs. Truto handles the underlying schema translation to make query execution look like a synchronous tool call to the model.
Complex Nested Visualization Configurations
When you create or update a dashboard element in Looker, the vis_config payload is notoriously complex. It is effectively a loosely typed JSON blob that dictates chart types, axis labeling, and color palettes. LLMs struggle to generate this from scratch. A properly configured MCP server needs to provide highly specific JSON schemas for these nested objects, otherwise the Looker API will reject the payload with a generic 400 error.
Strict Rate Limiting and Backoff Penalties
Looker imposes strict rate limits, often capping API calls per minute or concurrent query limits depending on your Looker instance sizing. If your AI agent loops through hundreds of dashboards to summarize them, it will quickly hit a wall. Note on Truto's architecture: Truto does not retry, throttle, or apply backoff on rate limit errors. When Looker returns an HTTP 429 Too Many Requests, Truto passes that error directly to Claude. However, Truto normalizes the upstream rate limit information into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF spec. Your agent is responsible for interpreting this and pausing execution.
Instead of building schema translation and authentication from scratch, you can use Truto. Truto derives tool definitions directly from the integration's resource configurations and automatically exposes Looker's endpoints as ready-to-use MCP tools.
How to Generate a Looker MCP Server with Truto
Truto creates MCP servers dynamically based on your connected Looker instance. The tools are not hard-coded; they are generated on the fly from the integration's documentation and schema records.
You can generate the Looker MCP server using either the Truto UI or the API.
Method 1: Via the Truto UI
- Navigate to the Integrated Accounts page in your Truto dashboard and select your connected Looker instance.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Configure the server (e.g., set it to "Read Only" or apply specific tags).
- Copy the generated MCP server URL (it will look like
https://api.truto.one/mcp/a1b2c3d4...).
Method 2: Via the Truto API
If you are dynamically provisioning AI capabilities for your own end-users, you can create the server via an API call. The backend validates the configuration, stores a hashed token in a distributed key-value store, and returns a ready-to-use URL.
curl -X POST https://api.truto.one/integrated-account/{integrated_account_id}/mcp \
-H "Authorization: Bearer YOUR_TRUTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Looker BI Agent",
"config": {
"methods": ["read", "write"],
"require_api_token_auth": false
}
}'Response:
{
"id": "mcp-123",
"name": "Looker BI Agent",
"url": "https://api.truto.one/mcp/a1b2c3d4e5f67890"
}This URL is fully self-contained. It encodes the specific Looker account, the allowed tools, and the authentication layer.
How to Connect the MCP Server to Claude
Once you have the Truto MCP URL, you need to register it with your Claude client. You can do this through the Claude user interface or by directly modifying the configuration file.
Method A: Via the Claude UI
If you are using Claude's web interface or a similar UI supporting custom connectors:
- Open Settings -> Integrations (or Connectors).
- Click Add MCP Server or Add custom connector.
- Paste the Truto MCP URL into the Server URL field.
- Click Add. Claude will immediately issue an
initializerequest to discover the available Looker tools.
Method B: Via Manual Configuration File (Claude Desktop)
If you are running Claude Desktop locally or configuring a headless agent environment, edit the claude_desktop_config.json file. Truto provides an SSE (Server-Sent Events) bridge to translate the HTTP-based MCP server into a standard IO stream.
{
"mcpServers": {
"looker_truto": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"https://api.truto.one/mcp/a1b2c3d4e5f67890"
]
}
}
}Restart Claude Desktop. The model will now have native access to Looker.
Hero Tools for Looker
Truto exposes dozens of Looker API endpoints as tools. Here are the highest-leverage tools your AI agents can use to orchestrate BI workflows.
(Note: These are snake_case representations generated dynamically by Truto's tool generation engine).
looker_query_run_inline
This is the most powerful tool for an LLM. It allows Claude to define a query on the fly using Looker's Model, View, and Fields paradigm, and return the results immediately without saving the query to the database.
"Query the 'ecommerce' model, 'orders' view. Return the count of orders grouped by 'users.state'. Limit to the top 10 and return the results as JSON."
create_a_looker_dashboard
Allows the model to scaffold a new dashboard. This is typically step one in an orchestration workflow before appending specific visualization elements or query results to the board.
"Create a new Looker dashboard called 'Q3 Executive Summary' in folder ID 14. Add a description explaining this tracks quarterly revenue metrics."
create_a_looker_scheduled_plan
Enables Claude to automate reporting by creating a cron-based schedule. The model can configure email delivery or webhook destinations for a specific Look or Dashboard.
"Create a daily scheduled plan for Dashboard ID 42. Set it to run at 8:00 AM UTC and email the results to the finance-team@company.com alias."
looker_dashboards_search
Essential for discovery. Claude uses this to locate existing dashboards by title, slug, or folder ID before attempting to modify them or extract data from them.
"Search our Looker instance for any dashboards containing 'Customer Churn' in the title. Return their IDs and descriptions."
create_a_looker_alert
Lets the model define threshold-based alerts on specific dashboard elements. This allows the AI to act as an active monitoring agent, setting up tripwires on key performance indicators.
"Create an alert on dashboard element ID 105. Set the condition to trigger if the 'revenue' field drops below 5000, and send the notification to the marketing team."
list_all_looker_users
Used for directory synchronization, security audits, and permission management. Returns detailed information about user roles, group memberships, and credentials.
"List all Looker users who are currently active but have not logged in for the past 90 days. Extract their email addresses and role IDs."
For the complete inventory of available Looker tools, schemas, and required parameters, review the Looker integration page.
Workflows in Action
Here is how an AI agent strings these tools together to execute multi-step Looker workflows.
Scenario 1: Ad-Hoc Data Request to Dashboard Scaffolding
The User Prompt:
"Pull the total revenue by product category from the 'sales' model for the last 30 days. If any category is over $100k, create a new dashboard called 'High Value Categories' and add those results to it."
The Execution:
- Claude calls
looker_query_run_inlinepassing themodel,view, andfieldsarray for revenue and category, with a date filter applied. - The model analyzes the JSON response in memory, identifying categories exceeding the $100k threshold.
- Claude calls
create_a_looker_dashboardspecifying the title "High Value Categories". - Claude calls
create_a_looker_dashboard_elementto attach the query parameters as a persistent chart to the newly created dashboard ID.
The Result: The user gets a conversational summary of the data, plus a link to a brand new, fully functioning Looker dashboard built specifically for their request.
Scenario 2: Automated KPI Monitoring Setup
The User Prompt:
"Find the 'Daily Active Users' dashboard. Set up a daily email schedule for it at 9am, and also create a threshold alert if DAU drops below 10,000."
The Execution:
- Claude calls
looker_dashboards_searchwithtitle: "Daily Active Users"to retrieve the dashboard ID. - Claude calls
get_single_looker_dashboard_by_idto inspect the dashboard's elements and find the specific element ID representing the DAU metric. - Claude calls
create_a_looker_scheduled_planusing the dashboard ID, a crontab string (0 9 * * *), and the email destination configuration. - Claude calls
create_a_looker_alertapplying the< 10000threshold to the identified dashboard element ID.
The Result: The agent fully provisions enterprise reporting schedules and data quality alerts without the user having to click through Looker's complex admin UI.
Security and Access Control
Giving an LLM access to your core business intelligence platform requires strict guardrails. Truto provides several mechanisms to lock down the MCP server at the configuration level:
- Method Filtering: By passing
methods: ["read"]during server creation, you completely disablecreate,update, anddeleteoperations. The LLM can run queries and read dashboards, but cannot alter the Looker environment. - Tag Filtering: You can restrict the server to specific functional areas using tags. For example,
tags: ["dashboards"]ensures the LLM can only interact with dashboard resources, preventing it from touching user permissions or integration hub settings. - Extra Authentication (
require_api_token_auth): If enabled, possessing the MCP URL is not enough. The client must also send a valid Truto API token via a Bearer header. This secures the endpoint even if the URL leaks in logs. - Expiration (
expires_at): You can set an exact ISO datetime for the server to self-destruct. This is ideal for granting a contractor or temporary AI agent time-boxed access to Looker. The cleanup is handled automatically by backend alarms.
Orchestrating BI with AI
Building an MCP server for Looker from scratch means spending weeks mapping vis_config schemas, handling polling loops for async queries, and managing OAuth lifecycles. By using a documentation-driven tool generator like Truto, you strip away the boilerplate.
You simply connect the account, generate the token, and let the LLM handle the logic.
FAQ
- How does Claude authenticate with the Looker API?
- Claude authenticates using a Model Context Protocol (MCP) server URL generated by Truto. This URL contains a cryptographically signed token that maps to your specific Looker integration and credentials, handling the underlying API authentication automatically.
- Does Truto cache my Looker dashboard data?
- No. Truto operates as a pass-through proxy. When Claude calls a Looker tool, the request is routed directly to the Looker API, and the response is passed back to Claude. Truto does not store your underlying business intelligence data.
- How do you handle Looker API rate limits?
- Truto does not retry, throttle, or absorb rate limits. If Looker returns a 429 Too Many Requests error, Truto passes it directly to Claude alongside standardized IETF rate limit headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The caller or AI agent is responsible for implementing retry and backoff logic.
- Can I restrict Claude to read-only Looker access?
- Yes. When generating the MCP server in Truto, you can pass a configuration filter like `methods: ["read"]`. This ensures Claude can only access read operations (like searching dashboards or running queries) and cannot create, update, or delete resources.