Looker MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOOKER_HOST | No | HTTP bind address | 0.0.0.0 |
| LOOKER_PORT | No | HTTP port | 8080 |
| LOOKER_TIMEOUT | No | HTTP request timeout in seconds | 60.0 |
| LOOKER_BASE_URL | Yes | Base URL of the Looker instance (required) | |
| LOOKER_MAX_ROWS | No | Default maximum rows for query tools | 5000 |
| LOOKER_MCP_MODE | No | `dev` (permissive), `public` (OAuth 2.1 resource-server), or `looker_oauth` (Looker-as-authorization-server) | dev |
| LOOKER_CLIENT_ID | No | API3 client ID for service account | |
| LOOKER_LOG_LEVEL | No | Logging level | INFO |
| LOOKER_TRANSPORT | No | `stdio` or `streamable-http` | stdio |
| LOOKER_VERIFY_SSL | No | Verify TLS certificates | true |
| LOOKER_API_VERSION | No | Looker API version | 4.0 |
| LOOKER_MCP_JWKS_URI | No | Authorization server JWK Set URL (required when LOOKER_MCP_MODE=public) | |
| LOOKER_SUDO_AS_USER | No | Enable user impersonation when identity headers are present | true |
| LOOKER_CLIENT_SECRET | No | API3 client secret for service account | |
| LOOKER_MCP_AUTH_TOKEN | No | Static bearer token for MCP-level authentication (deprecated) | |
| LOOKER_MCP_ISSUER_URL | No | Expected `iss` claim (required when LOOKER_MCP_MODE=public) | |
| LOOKER_DEPLOYMENT_TYPE | No | `self_hosted` or `google_cloud_core` | self_hosted |
| LOOKER_MCP_RESOURCE_URI | No | This server's canonical URI for RFC 8707 audience binding (required when LOOKER_MCP_MODE=public or looker_oauth) | |
| LOOKER_SUDO_ASSOCIATIVE | No | Attribute sudo activity to admin (true) or impersonated user (false) | false |
| LOOKER_USER_EMAIL_HEADER | No | HTTP header carrying user email for sudo impersonation | X-User-Email |
| LOOKER_USER_TOKEN_HEADER | No | HTTP header carrying pre-exchanged OAuth token | X-User-Token |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_modelsA | List all LookML models accessible to the current user. Returns model names, labels, associated projects, and their explores. |
| get_modelA | Get detailed information about a specific LookML model, including all its explores and their descriptions. |
| get_exploreA | Get full details of an explore including all its dimensions, measures, filters, and parameters. This is the primary tool for understanding what fields are available for querying. |
| list_dimensionsB | List dimensions in an explore. Convenience tool that returns only the dimension fields (name, label, type, description). |
| list_measuresA | List measures in an explore. Convenience tool that returns only the measure fields (name, label, type, description). |
| list_connectionsA | List all database connections configured in the Looker instance. |
| queryA | Run a query using the Looker semantic model. Specify the model, explore, fields, filters, and sorts. Looker generates the optimized SQL — you never write SQL directly. Returns data rows as JSON. |
| query_sqlA | Generate the SQL that Looker would execute for a query, without actually running it. Useful for reviewing or debugging queries. |
| run_lookB | Run the query associated with a saved Look and return its results. Looks are pre-built query configurations saved in Looker. |
| run_queryA | Run an existing saved Looker |
| run_dashboardA | Get a dashboard definition and run all its tile queries. Returns the dashboard metadata and the data for each element. |
| query_urlA | Generate a URL to a Looker Explore with pre-populated query parameters. The URL opens the Explore UI in Looker. |
| search_contentA | Search across all Looker content — dashboards, looks, explores, and more. Returns matching items with titles, descriptions, and IDs. |
| list_databasesB | List all databases accessible through a Looker connection. |
| list_schemasA | List schemas in a database accessible through a Looker connection. |
| list_tablesB | List tables in a schema accessible through a Looker connection. |
| list_columnsA | List columns for specific tables in a Looker connection. Returns column names, data types, and other metadata. |
| list_looksC | Search for saved Looks by title, description, or other criteria. |
| create_lookB | Create a new saved Look with a query definition. The Look is saved in the specified folder. |
| update_lookB | Update a Look's metadata (title, description, folder). |
| delete_lookA | Delete a saved Look. This action cannot be undone. |
| list_dashboardsC | Search for dashboards by title, description, or other criteria. |
| create_dashboardA | Create a new empty dashboard in the specified folder. |
| update_dashboardB | Update a dashboard's metadata (title, description, folder). |
| delete_dashboardB | Delete a dashboard. This action cannot be undone. |
| add_dashboard_elementA | Add a visualization tile to a dashboard. Requires a query definition (model, view, fields) or a saved Look ID. |
| add_dashboard_filterC | Add a filter to a dashboard. |
| generate_embed_urlA | Generate an embeddable SSO URL for Looker content (dashboards, Looks, or explores). The URL includes authentication so the viewer does not need separate Looker credentials. |
| validate_contentA | Run Looker's content validator across all looks and dashboards in the instance. Returns broken content references grouped by error kind (e.g. missing explore, renamed field, deleted model). Useful to audit breakage after a LookML change before users see errors. Can be slow on large instances. |
| health_pulseA | Run a health check on the Looker instance. Returns status of database connections, datagroups, and overall system health. |
| health_analyzeA | Analyze usage patterns across Looker content. Shows which models, explores, and content are most and least used. |
| health_vacuumA | Identify unused or orphaned LookML objects for cleanup. Scans for explores with no content, unreferenced views, and Looks/dashboards with zero views. |
| whoamiA | Return the Looker user this MCP session is currently authenticated as. Calls |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Ultrathink-Solutions/looker-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server