Claude can talk directly to Foreman Intelligence, so you can ask for a dashboard in plain language instead of clicking through the Looker UI. This guide walks through installing Claude, connecting the two, and then how to actually use it.
| Audience | any Foreman Intelligence user |
| Setup time | ~15 minutes |
| Requires | a Claude account |
Pick your operating system here. You'll choose between Claude Desktop and Claude Code in Step 2, and every step adjusts to show only the instructions for your combination.
Contents
1What you get
Once connected, Claude can read your Foreman Intelligence models the same way you would in Looker's Explore view, then act on what it finds. In practice that means you can ask Claude to:
- Look through available Explores, dimensions, and measures for a topic ("What miners are rebooting more frequently than others?")
- Run a query and show you the result before anything gets saved
- Build a new Look or Dashboard from a description of what you want to see
- Add tiles, filters, or a new element to a dashboard that already exists
- Hand you a link to view or embed the result
- Delete a Look, dashboard, tile, or filter you no longer need, if you add Step 10's optional add-on
Claude only sees what your own Foreman Intelligence account can see. It isn't a separate service account with broader access, so your existing model and folder permissions still apply.
2Which Claude app should I pick?
Both apps connect to Foreman Intelligence the same way, and everything in this guide works in either one. The difference is where you talk to Claude:
- Claude Desktop is a normal chat app. If you mostly want to ask questions and build dashboards without touching a terminal, pick this one.
- Claude Code (CLI) runs in a terminal. Pick this one if you already work in a terminal or want to use the same Claude setup for other technical work.
If you're not sure, choose Claude Desktop. You can always add the other later, and both can share the same connector and API key.
Make your pick here, and the rest of the guide will show only the steps for that app.
3Before you start
- A Claude account, the same login you use at
claude.ai(Claude Code needs a paid plan: Pro, Max, Team, or Enterprise) - Homebrew is installed (
brew --versionworks in a terminal) - PowerShell (built into Windows, no extra install needed)
- You have a Foreman Intelligence login at
intelligence.foreman.mnwith permission to view the models you care about
4Install Claude
Claude Desktop is the standard Claude chat app, installed like any other program.
Claude Code is Claude in your terminal. One install command, then you sign in once.
- Download the macOS app from claude.ai/download.
- Open the downloaded
.dmgand drag Claude into your Applications folder. - Launch Claude from Applications and sign in with your Claude account.
- Download the Windows installer from claude.ai/download.
- Run the installer and follow the prompts.
- Launch Claude from the Start menu and sign in with your Claude account.
Install it with Homebrew from a terminal:
brew install --cask claude-code
Confirm it installed correctly:
claude --version
Then run claude once. The first run opens a browser window to sign in with your Claude account.
Install it once from PowerShell:
irm https://claude.ai/install.ps1 | iex
Close and reopen PowerShell, then confirm it installed correctly:
claude --version
Then run claude once. The first run opens a browser window to sign in with your Claude account.
If Claude is already on this machine and signed in, skip straight to the next step.
5Install the connector
Claude reaches Foreman Intelligence through a small local program called MCP Toolbox, which speaks Looker's API on Claude's behalf. Both Claude apps use this same connector.
Install it once from a terminal:
brew install mcp-toolbox
Confirm it installed correctly:
toolbox --version
Download the connector once from PowerShell:
New-Item -ItemType Directory -Force -Path "$env:LOCALAPPDATA\mcp-toolbox" | Out-Null
Invoke-WebRequest -Uri "https://storage.googleapis.com/mcp-toolbox-for-databases/v1.10.0/windows/amd64/toolbox.exe" `
-OutFile "$env:LOCALAPPDATA\mcp-toolbox\toolbox.exe"
Confirm it downloaded correctly:
& "$env:LOCALAPPDATA\mcp-toolbox\toolbox.exe" --version
Windows may flag the file the first time because it was downloaded from the internet. That's expected for this tool. Click More info → Run anyway, or right-click the file → Properties → check Unblock.
6Get your Looker API credentials
Claude needs its own API key tied to your account, separate from your normal login password.
- Sign in to intelligence.foreman.mn
- Open your account menu → Account Settings
- Go to the Authentication section and click Manage to configure your API key.
- Click Create a new API key and save the Client ID and Client Secret shown.
If you don't have the option to manage API keys, your account doesn't have the appropriate permissions. Contact support if you think this is an error.
Anyone with your Client ID and Secret can query Foreman Intelligence as you. Don't paste it into Slack, a shared doc, or a public repo. If it's ever exposed, delete the key from Account Settings and generate a new one.
7Connect Claude
Now tell Claude how to reach the connector.
Claude Code terminal
One command does the whole thing, no file editing needed. Run this from anywhere, with your real values from Step 6 in place of the two placeholders:
claude mcp add looker-toolbox --scope user \
--env LOOKER_BASE_URL=https://intelligence.foreman.mn \
--env LOOKER_CLIENT_ID=your-client-id \
--env LOOKER_CLIENT_SECRET=your-client-secret \
--env LOOKER_VERIFY_SSL=true \
-- /opt/homebrew/bin/toolbox --stdio --prebuilt looker
If you ever need to check or fix it later, the entry lives in ~/.claude.json under "mcpServers" and should look like:
"looker-toolbox": {
"type": "stdio",
"command": "/opt/homebrew/bin/toolbox",
"args": ["--stdio", "--prebuilt", "looker"],
"env": {
"LOOKER_BASE_URL": "https://intelligence.foreman.mn",
"LOOKER_CLIENT_ID": "your-client-id",
"LOOKER_CLIENT_SECRET": "your-client-secret",
"LOOKER_VERIFY_SSL": "true"
}
}
One command does the whole thing, no file editing needed. Run this from PowerShell, with your real values from Step 6 in place of the two placeholders:
claude mcp add looker-toolbox --scope user `
--env LOOKER_BASE_URL=https://intelligence.foreman.mn `
--env LOOKER_CLIENT_ID=your-client-id `
--env LOOKER_CLIENT_SECRET=your-client-secret `
--env LOOKER_VERIFY_SSL=true `
-- "$env:LOCALAPPDATA\mcp-toolbox\toolbox.exe" --stdio --prebuilt looker
If you ever need to check or fix it later, the entry lives in %USERPROFILE%\.claude.json under "mcpServers" and should look like this, with your-username being your Windows account name (note the doubled backslashes JSON needs in the path):
"looker-toolbox": {
"type": "stdio",
"command": "C:\\Users\\your-username\\AppData\\Local\\mcp-toolbox\\toolbox.exe",
"args": ["--stdio", "--prebuilt", "looker"],
"env": {
"LOOKER_BASE_URL": "https://intelligence.foreman.mn",
"LOOKER_CLIENT_ID": "your-client-id",
"LOOKER_CLIENT_SECRET": "your-client-secret",
"LOOKER_VERIFY_SSL": "true"
}
}
Claude Code can edit its own config. Run claude and ask it to add the looker-toolbox MCP server entry shown above to your user-scope MCP config. Then open the file in a text editor and type in your real Client ID and Secret yourself. Don't paste the secret into the chat.
One note on the command above: the secret ends up in your shell history on this machine. It's the same secret that sits in the config file anyway, but clear the history entry if that bothers you.
Restart any open Claude Code session for the change to take effect.
Claude Desktop app
Open Settings → Developer → Edit Config, which opens claude_desktop_config.json
(at ~/Library/Application Support/Claude/at %APPDATA%\Claude\) in a text editor.
What you do next depends on what's already in the file:
-
The file is empty, or contains only
{}(most people): replace the entire contents with the block below, then swap in your real Client ID and Secret from Step 6. -
The file already lists other servers under
"mcpServers": don't paste the whole block. Add just the"looker-toolbox": { ... }entry inside your existing"mcpServers"section, next to the servers already there, with a comma between entries.
{
"mcpServers": {
"looker-toolbox": {
"command": "/opt/homebrew/bin/toolbox",
"args": ["--stdio", "--prebuilt", "looker"],
"env": {
"LOOKER_BASE_URL": "https://intelligence.foreman.mn",
"LOOKER_CLIENT_ID": "your-client-id",
"LOOKER_CLIENT_SECRET": "your-client-secret",
"LOOKER_VERIFY_SSL": "true"
}
}
}
}
Three things to replace in this block, not two: your-username in the "command" path has to be your Windows account name (run whoami in PowerShell and use the part after the backslash), plus the Client ID and Secret. Keep the doubled backslashes.
{
"mcpServers": {
"looker-toolbox": {
"command": "C:\\Users\\your-username\\AppData\\Local\\mcp-toolbox\\toolbox.exe",
"args": ["--stdio", "--prebuilt", "looker"],
"env": {
"LOOKER_BASE_URL": "https://intelligence.foreman.mn",
"LOOKER_CLIENT_ID": "your-client-id",
"LOOKER_CLIENT_SECRET": "your-client-secret",
"LOOKER_VERIFY_SSL": "true"
}
}
}
}
If editing JSON by hand isn't your thing, let Claude write the file for you. Copy your config file's current contents into a Claude chat along with the block above and ask: "Merge this looker-toolbox server into my Claude Desktop config and give me back the complete file." Paste the result back into the file.
Then add your real Client ID and Secret directly in the text editor, not in the chat. The secret shouldn't go into a conversation, so leave the placeholders in place until the merged file is saved.
Save the file and fully quit and reopen Claude Desktop.
8Verify it's working
Open a new conversation in Claude Desktop and ask something low-stakes, like:
Start a new claude session in your terminal (you can also type /mcp there to confirm looker-toolbox is listed as connected) and ask something low-stakes, like:
- What Explores do I have access to in Foreman Intelligence?
If Claude lists back real model and explore names, the connection is live. If it says it has no such tool, see Troubleshooting below.
9Ask for a dashboard
Once connected, describe what you want rather than how to build it. A few examples people actually use:
- Build a dashboard called "Fleet Uptime" showing GPU node availability by rack over the last 90 days.
- Add a tile to the Ops Overview dashboard breaking down ticket volume by priority.
- Make a Look of monthly recurring revenue by customer segment, filtered to this fiscal year.
- What dimensions does the shipments explore have? I want to slice by carrier.
Claude will usually run a query first and show you the numbers before saving anything as a Look or dashboard, so you can redirect it before it commits to a structure. Once it saves something, it can hand you the direct link.
10Add delete support optional
The MCP connector deliberately can't delete anything out of the box. It ships tools to create, update, and query Looks and dashboards, but none to remove them. This step adds five small tools that fill that gap, backed directly by the Looker API. Once they're loaded, deleting works exactly like everything else, you just ask.
If you skip this step, everything else in this guide still works. Claude can build, update, and query Looks and dashboards, it just can't remove anything. When you want something gone, delete it yourself in Foreman Intelligence: find the Look or dashboard, open its menu, and choose Move to Trash. Ask Claude for the link and the exact name if you're not sure which one it made.
Skipping is also the safer choice. The UI's trash can be recovered by an admin, while the API deletes this step adds are permanent. If you only clean up occasionally, doing it by hand costs you little.
1. Save the tools file
Save this as ~/.claude/looker-delete-tools.yaml%USERPROFILE%\.claude\looker-delete-tools.yaml:
kind: source
name: looker-rest
type: http
baseUrl: ${LOOKER_BASE_URL}/api/4.0
---
kind: tool
name: looker_get_token
type: http
source: looker-rest
method: POST
path: /login?client_id=${LOOKER_CLIENT_ID}&client_secret=${LOOKER_CLIENT_SECRET}
description: |
Get a short-lived Looker API access token (expires in about an hour).
Call this first, then pass the returned access_token value as
"Bearer <access_token>" into the Authorization parameter of
delete_look, delete_dashboard, delete_dashboard_element, or
delete_dashboard_filter.
---
kind: tool
name: delete_look
type: http
source: looker-rest
method: DELETE
path: /looks/{{.lookId}}
description: |
Permanently delete a Look by id. This cannot be undone. Look it up
first (e.g. with get_looks) and confirm the exact name and id with
the user before calling this. Call looker_get_token first for the
Authorization value.
pathParams:
- name: lookId
type: string
description: The id of the Look to delete, from get_looks.
headerParams:
- name: Authorization
type: string
description: Bearer token from looker_get_token, e.g. "Bearer <access_token>".
---
kind: tool
name: delete_dashboard
type: http
source: looker-rest
method: DELETE
path: /dashboards/{{.dashboardId}}
description: |
Permanently delete a dashboard by id. This skips the trash the
Looker UI normally uses and cannot be undone. Look it up first
(e.g. with get_dashboards) and confirm the exact name and id with
the user before calling this. Call looker_get_token first for the
Authorization value.
pathParams:
- name: dashboardId
type: string
description: The id of the dashboard to delete, from get_dashboards.
headerParams:
- name: Authorization
type: string
description: Bearer token from looker_get_token, e.g. "Bearer <access_token>".
---
kind: tool
name: delete_dashboard_element
type: http
source: looker-rest
method: DELETE
path: /dashboard_elements/{{.dashboardElementId}}
description: |
Permanently remove a single tile from a dashboard, without deleting
the whole dashboard. Confirm the exact tile and dashboard with the
user first. Call looker_get_token first for the Authorization value.
pathParams:
- name: dashboardElementId
type: string
description: The id of the dashboard tile (element) to remove.
headerParams:
- name: Authorization
type: string
description: Bearer token from looker_get_token, e.g. "Bearer <access_token>".
---
kind: tool
name: delete_dashboard_filter
type: http
source: looker-rest
method: DELETE
path: /dashboard_filters/{{.dashboardFilterId}}
description: |
Permanently remove a filter from a dashboard. Confirm the exact
filter and dashboard with the user first. Call looker_get_token
first for the Authorization value.
pathParams:
- name: dashboardFilterId
type: string
description: The id of the dashboard filter to remove.
headerParams:
- name: Authorization
type: string
description: Bearer token from looker_get_token, e.g. "Bearer <access_token>".
---
kind: toolset
name: looker_delete_tools
description: Delete operations for Foreman Intelligence, backed directly by the Looker REST API.
tools:
- looker_get_token
- delete_look
- delete_dashboard
- delete_dashboard_element
- delete_dashboard_filter
2. Point the connector at it
Open the config file holding the "looker-toolbox" entry Step 7 created (~/.claude.json%USERPROFILE%\.claude.jsonclaude_desktop_config.json, via Settings → Developer → Edit Config) and add a --config flag pointing at the tools file, right after --prebuilt looker. Same "looker-toolbox" entry, just extend the "args" list:
your-username below is not a real folder. It has to be your Mac account's short name, the one in your home folder path. Run whoami in Terminal to see it. If your username is jsmith, the path is /Users/jsmith/.claude/looker-delete-tools.yaml. Leaving the placeholder in is the most common reason the connector stops working after this step.
your-username below is not a real folder. It has to be your Windows account name, the one in your C:\Users\ folder. Run whoami in PowerShell to see it (use only the part after the backslash). If your username is jsmith, the path is C:\\Users\\jsmith\\.claude\\looker-delete-tools.yaml, keeping the doubled backslashes. Leaving the placeholder in is the most common reason the connector stops working after this step.
"args": [
"--stdio", "--prebuilt", "looker",
"--config", "/Users/your-username/.claude/looker-delete-tools.yaml"
]
"args": [
"--stdio", "--prebuilt", "looker",
"--config", "C:\\Users\\your-username\\.claude\\looker-delete-tools.yaml"
]
Before restarting, you can confirm the file parses by running the connector by hand. It should print a line saying it initialized 23 tools and 3 toolsets, then wait for input (press Ctrl+C to stop it). If it prints an error about the config file instead, the path or the YAML needs fixing:
/opt/homebrew/bin/toolbox --stdio --prebuilt looker --config ~/.claude/looker-delete-tools.yaml
& "$env:LOCALAPPDATA\mcp-toolbox\toolbox.exe" --stdio --prebuilt looker --config "$env:USERPROFILE\.claude\looker-delete-tools.yaml"
Restart any open Claude Code sessionFully quit and reopen Claude Desktop for the change to take effect. Deleting is just another MCP tool at this point, so it works the same in both Claude apps.
Once it's loaded, ask normally, like "delete the dashboard called Old Ops Overview", and Claude will look it up, confirm the exact name and id with you, then handle the rest itself.
These delete calls skip the trash the Looker UI normally uses, so there's no undo. Claude is instructed to always confirm the exact object with you first, but it's worth double-checking yourself before agreeing.
11Troubleshooting
| Symptom | Likely cause |
|---|---|
claude: command not found |
The install didn't finish, or the terminal was opened before the install. Close and reopen your terminal, then try claude --version again |
| Claude says it has no Looker/dashboard tools | The config file wasn't saved before restart, or the JSON has a syntax error (check for a missing comma) |
invalid_client or authentication error |
Client ID/Secret was mistyped, or the API3 key was deleted in Account Settings |
| Claude can query but can't see an Explore you expect | Your Foreman Intelligence account doesn't have model access to it. Ask your Looker admin, not Claude |
toolbox: command not found |
Homebrew install didn't finish, or the path isn't /opt/homebrew/bin/toolbox. Run which toolbox and update the config's command to match |
toolbox.exe is not recognized |
The download didn't finish, or the path in the config doesn't match where you saved it. Run Test-Path "$env:LOCALAPPDATA\mcp-toolbox\toolbox.exe" to confirm |
looker-toolbox shows Connection closed or "failed to connect" after adding Step 10 |
The connector is exiting on startup, almost always because of the --config flag. Two common causes: the path still says your-username (or an older copy's /Users/you/ or C:\Users\you\) instead of your real account name, or the last block of the YAML says kind: group instead of kind: toolset. Run the check command from Step 10 to see the exact error. Removing the --config flag and its path gets you back to a working connector without the delete tools |
Claude doesn't have delete_look/delete_dashboard tools |
The --config flag or file path from Step 10 has a typo, or the YAML file has a formatting error. Check the path matches exactly where you saved the file, then run the check command from Step 10 |
Delete request returns 404
|
The id doesn't match an existing object. Look it up again with get_dashboards/get_looks rather than guessing it |
Delete request returns 403
|
Your Foreman Intelligence account doesn't have permission to delete that content. The same restriction would apply in the Looker UI, so check with your Looker admin |
The connector runs locally on your machine and only forwards requests you (via Claude) ask it to make. Nothing about your prompts or Foreman Intelligence data is sent anywhere except between Claude, this local process, and your Foreman Intelligence instance.
Questions or issues with this setup should go to whoever administers Foreman Intelligence access on your team.
Comments
0 comments
Please sign in to leave a comment.