
Create a Looker alert with comparison type, field, threshold, and optional destinations. Monitors dashboard elements for condition changes.
Get a Looker alert by ID. Returns comparison type, threshold, field, and notification settings.
Update a Looker alert threshold or enabled status. Use is_disabled to enable or disable.
Delete a Looker alert by ID. This stops all future notifications.
Search Looker alerts with offset pagination. Returns matching alerts.
List Looker boards with offset pagination. Returns board titles, descriptions, and metadata.
Search Looker boards by title, creator, or favorites. Title filter uses substring matching by default. Include % in your value for custom wildcard matching. Use list_boards for unfiltered listing.
Create a Looker board with title and description. Boards organize looks and dashboards into collections.
Get a Looker board by ID. Returns title, description, sections, and items.
Update a Looker board title or description. Use get_board to verify changes.
Delete a Looker board by ID. This action is permanent. Use get_board to verify before deleting.
Get all board sections across all boards. Use get_board to get sections for a specific board.
Create a section within a Looker board. Sections group board items. Use list_boards to find board IDs.
Get a Looker board section by ID. Returns section title, description, and items.
Update a Looker board section title or description. Use getboardsection to verify changes.
Delete a Looker board section by ID. This action is permanent and removes all items in the section.
Get all board items across all sections. Use getboard or getboard_section to get items for a specific board/section.
Add an item to a board section. Link a dashboard, look, or custom URL. Use getallboard_sections to find section IDs.
Get a Looker board item by ID. Returns linked dashboard/look info and custom fields.
Update a Looker board item. Change linked dashboard/look or custom title/description/URL.
Delete a Looker board item by ID. This removes the item from its section permanently.
List Looker database connections. Requires admin permissions. Returns connection names, dialects, and hosts.
Create a Looker database connection. Requires admin permissions. Specify name, dialect, host, port, database, and credentials.
Get a Looker database connection by name. Requires admin permissions. Use list_connections to find valid names.
Update a Looker database connection host, port, database, or credentials. Requires admin permissions.
Delete a Looker database connection by name. This action is permanent. Requires admin permissions.
List all elements (tiles) on a Looker dashboard. Returns element titles, types, and query IDs.
Create a dashboard element (tile). Specify dashboardid, type ('vis', 'text'), and queryid or bodytext. Use createquery to get a query ID first.
Get a dashboard element by ID. Returns title, type, query, and display settings.
Update a dashboard element title, text, query, or display settings.
Delete a dashboard element by ID. This removes the tile from the dashboard.
List all filters on a Looker dashboard. Returns filter names, types, and default values.
Create a dashboard filter. Requires dashboardid, name, title, and type ('datefilter', 'numberfilter', 'stringfilter', or 'fieldfilter'). For 'fieldfilter', also provide model, explore, and dimension.
Get a dashboard filter by ID. Returns name, type, default value, and configuration.
Update a dashboard filter name, title, type, default value, or required setting.
Delete a dashboard filter by ID. This removes the filter from the dashboard.
List all layout components for a dashboard layout. Returns element positions (row, column, width, height).
Get a dashboard layout component by ID. Returns element ID and position (row, column, width, height).
Update a dashboard layout component position. Set row, column, width, and height to arrange tiles on the dashboard.
List all layouts for a Looker dashboard. Returns layout types, active status, and dimensions.
Create a dashboard layout. Specify dashboard_id, type, and dimensions.
Get a dashboard layout by ID. Returns type, active status, and dimensions.
Update a dashboard layout active status or dimensions.
Delete a dashboard layout by ID.
List Looker dashboards with offset pagination. Returns titles, IDs, and metadata. Use offset from page_info for next page.
Create a Looker dashboard with title, description, and folder. Use list_folders to find valid folder IDs.
Get a Looker dashboard by ID. Returns title, elements, filters, and metadata. Use listdashboards or searchdashboards to find valid IDs.
Update a Looker dashboard title, description, folder, timezone, refresh interval, or visibility. Use get_dashboard to verify changes.
Delete a Looker dashboard by ID. This action is permanent. Use get_dashboard to verify before deleting.
Copy a Looker dashboard to a different folder. Returns the new dashboard. Use list_folders to find valid folder IDs.
Move a Looker dashboard to a different folder. Use list_folders to find valid folder IDs.
Search Looker dashboards by title or folder. Text filters use substring matching by default. Include % in your value for custom wildcard matching. Returns matching dashboards with pagination.
List Looker folders with offset pagination. Returns folder names, IDs, and hierarchy. Use offset from page_info for next page.
Create a Looker folder with name and parent folder. Use list_folders to find valid parent folder IDs.
Get a Looker folder by ID. Returns name, parent, child count, and metadata.
Update a Looker folder name. Use get_folder to verify changes.
Delete a Looker folder by ID. This action is permanent. Use get_folder to verify before deleting.
Search Looker folders by name or parent. Text filters use substring matching by default. Include % in your value for custom wildcard matching. Returns matching folders with pagination.
Get child folders of a Looker folder. Returns sub-folders with pagination.
Get all looks in a Looker folder. Returns looks with their titles, IDs, and metadata.
Get all dashboards in a Looker folder. Returns dashboards with their titles, IDs, and metadata.
List Looker groups with offset pagination. Requires admin permissions. Returns group names and user counts.
Create a Looker group with name and optional parent group. Requires admin permissions.
Get a Looker group by ID. Requires admin permissions. Returns name, user count, and metadata.
Update a Looker group name or content metadata access. Requires admin permissions. Use get_group to verify changes.
Delete a Looker group by ID. This action is permanent. Requires admin permissions.
Search Looker groups by name, external group ID, or management flags. Supports sorting and pagination. Requires admin permissions.
Search Looker groups and include role information in results. Filter by name, external group ID, or management flags. Requires admin permissions.
Search Looker groups and include parent group hierarchy in results. Filter by name, external group ID, or management flags. Requires admin permissions.
Get all groups that are members of a Looker group. Supports sorting. Requires admin permissions. Use list_groups to find valid group IDs.
Add a group as a member of another Looker group. Requires admin permissions. Use list_groups to find valid group IDs.
Remove a member group from a Looker group. This action is permanent. Requires admin permissions.
Get all users in a Looker group with pagination. Supports sorting. Requires admin permissions. Use list_groups to find valid group IDs.
Add a user to a Looker group. Requires admin permissions. Use listusers to find valid user IDs and listgroups for group IDs.
Remove a user from a Looker group. This action is permanent. Requires admin permissions.
Set the value of a user attribute for a Looker group. Requires admin permissions. Use list_groups and list user attributes to find valid IDs.
Delete a group-level user attribute value in Looker. This action is permanent. Requires admin permissions.
List Looker looks with offset pagination. Returns titles, IDs, and metadata. Use offset from page_info for next page.
Create a Looker look with title, description, folder, and query. Use listfolders to find valid folder IDs. Use createquery to create a query first.
Get a Looker look by ID. Returns title, description, query details, and metadata. Use listlooks or searchlooks to find valid IDs.
Update a Looker look title, description, folder, query, visibility, or owner. Use get_look to verify changes.
Delete a Looker look by ID. This action is permanent. Use get_look to verify before deleting.
Copy a Looker look to a different folder. Returns the new look. Use list_folders to find valid folder IDs.
Move a Looker look to a different folder. Use list_folders to find valid folder IDs.
Run a Looker look and return results. Supports json, csv, and other formats. Use list_looks to find valid IDs.
Search Looker looks by title, description, or folder. Text filters use substring matching by default. Include % in your value for custom wildcard matching. Returns matching looks with pagination.
Import a LookML dashboard into a folder as a user-defined dashboard. The imported dashboard will be linked to the LookML dashboard for syncing.
Sync all linked user-defined dashboards to match a LookML dashboard. Updates elements, filters, and layout to match the LookML definition.
Search LookML dashboards in production. Filter by title (supports % wildcards) or folder. Returns dashboard IDs and LookML content.
Create a dashboard from LookML YAML code. The dashboard is NOT linked to any LookML dashboard. Provide valid LookML YAML and optional folder ID.
Get the LookML YAML representation of a user-defined dashboard. Useful for exporting or duplicating dashboards via LookML.
Get aggregate table LookML for each query on a dashboard. Useful for optimizing dashboard performance with persistent derived tables.
List available LookML models and their explores. Use model names with createquery or runinline_query to build queries.
Create a LookML model with a name, project, and database connections. Use list_connections to find valid connection names.
Get a LookML model by name. Returns explores, project, and label. Use listlookmlmodels to find valid names.
Update a LookML model's project or database connections. Use listlookmlmodels to find valid names.
Delete a LookML model by name. This action is permanent. Use getlookmlmodel to verify before deleting.
Get a LookML explore with its dimensions, measures, and relationships. Use getlookmlmodel to find valid explore names.
Create a Looker query with model, view, fields, filters, and sorts. Use listlookmlmodels to find valid model names. Returns query ID for use with run_query.
Get a Looker query definition by ID. Returns model, view, fields, filters, and sorts.
Get a Looker query by its slug identifier (found in Looker URLs). Returns the full query definition.
Run a saved Looker query and return results. Use create_query first to get an ID. Supports json, csv, and other formats.
Run an inline Looker query without saving it. Specify model, view, fields, filters, and sorts directly. Use listlookmlmodels to find valid model names.
Run a Looker query asynchronously. Returns a task ID to check status with getquerytask and fetch results with getquerytask_results. Use for long-running queries.
Check the status of an async Looker query task. Returns status (pending, running, complete, error). Use createquerytask first to get a task ID.
Get results of a completed async Looker query task. Task must have status 'complete'. Use getquerytask to check status first.
Get results of multiple completed async Looker query tasks at once. All tasks must be complete. Pass a list of task IDs.
Create a merge query that combines results from multiple Looker queries. Each source query needs a queryid and optionally mergefields to define join conditions.
Get a Looker merge query definition by ID. Returns source queries and merge configuration.
List all currently running Looker queries. Shows query ID, user, runtime, and status. Useful for monitoring and identifying long-running queries.
Terminate a running Looker query by its task ID. Use listrunningqueries to find task IDs of queries to kill.
Create a SQL Runner query with raw SQL. Specify connectionname OR modelname (mutually exclusive). Use listconnections to find valid connection names. Returns a slug for use with runsql_query.
Get a SQL Runner query by its slug. Returns the SQL text and connection details.
Execute a SQL Runner query and return results. Use createsqlquery first to get a slug. Supports json, csv, and other formats.
List Looker roles. Requires admin permissions. Returns role names, permission sets, and model sets.
Create a Looker role with name, permission set, and model set. Requires admin permissions.
Get a Looker role by ID. Requires admin permissions. Use list_roles to find valid IDs.
Update a Looker role name, permission set, or model set. Requires admin permissions.
Delete a Looker role by ID. This action is permanent. Requires admin permissions.
Search Looker roles by name with pagination. Requires admin permissions. Use offset from page_info for next page.
Search Looker roles by name, including user count per role. Requires admin permissions. Use offset from page_info for next page.
Get all users assigned to a Looker role. Supports pagination. Use directassociationonly to exclude users assigned via groups.
Set users for a Looker role. Replaces all current user assignments. Requires admin permissions. Use list_users to find valid user IDs.
Get all groups assigned to a Looker role. Requires admin permissions. Use list_roles to find valid role IDs.
Set groups for a Looker role. Replaces all current group assignments. Requires admin permissions. Use list_groups to find valid group IDs.
Create a Looker permission set with name and permissions. Use list_permissions to see available permissions.
List all Looker permission sets. Returns names and permissions for each set. Requires admin permissions.
Get a Looker permission set by ID. Returns permissions in the set. Use listpermissionsets to find valid IDs.
Update a Looker permission set name or permissions. Requires admin permissions. Use list_permissions to see available permissions.
Delete a Looker permission set by ID. This action is permanent. Requires admin permissions.
Create a Looker model set with name and models. Use listlookmlmodels to see available models.
List all Looker model sets. Returns names and models for each set. Requires admin permissions.
Get a Looker model set by ID. Returns models in the set. Use listmodelsets to find valid IDs.
Update a Looker model set name or models. Requires admin permissions. Use listlookmlmodels to see available models.
Delete a Looker model set by ID. This action is permanent. Requires admin permissions.
List all available Looker permissions. Useful to see what permissions exist before creating permission sets.
List Looker scheduled plans with offset pagination. Returns schedule names, cron expressions, and associated content.
Create a Looker scheduled plan to deliver look or dashboard results on a schedule. Provide lookid or dashboardid, cron expression, and destinations.
Get a Looker scheduled plan by ID. Returns name, schedule, destinations, and status.
Update a Looker scheduled plan name, cron expression, or enabled status.
Delete a Looker scheduled plan by ID. This stops all future deliveries.
List Looker users with offset pagination. Requires admin permissions. Use offset from page_info for next page.
Create a Looker user. Requires admin permissions. Optionally assign roles with roleids. Use listroles to find valid role IDs.
Get a Looker user by ID. Returns name, email, roles, and status. Requires admin permissions. Use listusers or searchusers to find valid IDs.
Update a Looker user's name, email, roles, or status. Requires admin permissions. Use get_user to verify changes.
Delete a Looker user by ID. This action is permanent. Requires admin permissions.
Search Looker users by email, first name, last name, disabled status, or group. Text filters use substring matching by default. Include % for custom wildcard matching. Requires admin permissions.
Get the currently authenticated Looker user. Returns your name, email, roles, and permissions.
Search Looker users by name or email pattern. Simpler than search_users for quick lookups. Requires admin permissions.
Get roles assigned to a Looker user. Requires admin permissions. Use listusers or searchusers to find valid user IDs.
Set roles for a Looker user. Replaces all current roles. Requires admin permissions. Use list_roles to find valid role IDs.
Get all user attribute values for a Looker user. Returns attribute values with their source (User, Group, or Default).
Set a user attribute value for a Looker user. Overrides group or default values. Use getuserattribute_values to see current values.
Remove a user-level attribute value override for a Looker user. The attribute will fall back to group or default value.
Send a password reset email to a Looker user. The user must have email credentials configured.
Create email credentials for a Looker user. Required before the user can log in with email/password.
Get email credentials for a Looker user. Returns email address and login status.
Delete email credentials for a Looker user. The user will no longer be able to log in with email/password.
Validate Looker credentials by fetching the current user. Returns success status and message.
List all Looker workspaces (production and dev). Returns workspace IDs and their associated projects.
Get a Looker workspace by ID ('production' or 'dev'). Returns workspace details and associated projects.
Get the current API session. Returns the active workspace ID ('production' or 'dev') and sudo user if impersonating.
Switch the API session workspace to 'production' or 'dev'. Affects which LookML content is used for subsequent API calls.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}It's an MCP server that connects your agents to Looker's business intelligence platform via tools. Your agents can invoke these tools to run queries against saved looks, retrieve dashboards, schedule report delivery, manage folders, and more.
Looker offers an official MCP server, but you can also use one from a third-party platform, like Merge Agent Handler.
The use cases naturally depend on the agent you've built, but here are a few common ones:
Here are some of the most commonly used tools:
list_looks: retrieves saved looks from the Looker instance with optional filters by folder or title. Useful for agents that need to inventory available reports or locate the right look before running a queryrun_look: executes a saved look and returns the query results in a specified format. Call this when an agent needs to fetch current data for a report, alert check, or downstream data operationlist_dashboards: fetches available dashboards with metadata including title, folder, and last updated time. Good for agents that need to present a directory of available reporting assets or locate a dashboard by namesearch_dashboards: searches dashboards by title, description, or folder. Use this when an agent needs to resolve a user's natural language request to a specific Looker dashboard before presenting or running itcreate_scheduled_plan: sets up a recurring delivery schedule for a look or dashboard to a specified destination such as email or Slack. Helpful when an agent is configuring automated reporting on behalf of a user without requiring them to navigate the Looker UIlist_scheduled_plans: returns existing scheduled delivery configurations for looks and dashboards. Call this when an agent needs to audit what recurring reports are running or check whether a delivery plan already exists before creating a duplicateWhat sets Merge Agent Handler's Looker MCP server apart from building your own or using an alternative comes down to a few things:
You can take the following steps:
1. Create or log into your Merge Agent Handler account.
2. Install the Merge CLI by running pipx install merge-api, then run merge configure to link the CLI to your Merge account and merge login to authenticate your session.
3. Register the Agent Handler MCP server with Claude Code by running claude mcp add --transport http agent-handler https://ah-api.merge.dev/mcp, then open Claude Code and run /mcp to confirm agent-handler appears with a connected status.
4. Select agent-handler from the MCP list. This opens a browser window where you select which integrations to authenticate. Choose Looker and complete the auth flow. Merge stores and manages the credentials going forward.
5. Open a Claude Code session and start querying Looker data directly. The first time you use a Looker tool, a Magic Link may appear to complete connector authentication.
If you want to connect Merge Agent Handler's Looker MCP with internal or customer-facing agentic products, you can follow the steps in our docs.
Yes, Agent Handler for Employees lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, and other MCP-compatible AI tools to Looker without bypassing IT governance.
Instead of setting up direct connections with personal credentials that IT can't monitor or revoke, each employee authenticates through Agent Handler and gets individual credentials tied to their identity.
IT also provisions access by role or group via SCIM. A data analyst, for example, gets Looker access to run queries and retrieve dashboards, Google Sheets to export results for stakeholder review, and Slack to share data summaries with the team; while a business operations manager gets Looker access to monitor key business metrics, Notion to document findings, and Google Calendar to schedule reporting reviews.
Every tool call an employee's AI makes to Looker is also inspected against your DLP rules and logged to a searchable audit trail, giving security teams full visibility into what data was accessed and by whom.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now