# Looker Admin MCP
MCP server for **Looker administration**. Provides 60+ admin tools for user, group, role, schedule, alert, and content access management through the Model Context Protocol (MCP).
> **Note**: This server focuses on **administration** tasks, complementing [Google's MCP Toolbox for Databases](https://github.com/googleapis/genai-toolbox) which handles analytics and data querying.
## Features
| Category | Tools | Operations |
|----------|-------|------------|
| **User Management** | 9 | CRUD, role assignment |
| **Group Management** | 9 | CRUD, membership |
| **Role Management** | 11 | Roles, permissions, model sets |
| **Scheduled Plans** | 8 | CRUD, run-once |
| **Alerts** | 7 | CRUD, follow/unfollow |
| **Content Access** | 8 | Folders, permissions |
| **System** | 8 | Sessions, user attributes |
## Safety
Destructive operations (`delete_user`, `delete_group`, `delete_role`, etc.) require `confirm=True` parameter to execute.
```
# Example: Delete a user
delete_user(user_id=123) # Returns warning, doesn't delete
delete_user(user_id=123, confirm=True) # Actually deletes
```
## Prerequisites
- [Python 3.11+](https://www.python.org/)
- [uv](https://github.com/astral-sh/uv) (Python package manager)
- [Docker Desktop](https://www.docker.com/products/docker-desktop/) (Recommended)
## Quick Start
1. **Clone and setup:**
```sh
git clone <repository-url>
cd looker-mcp
uv venv && source .venv/bin/activate
uv pip install -e .
```
2. **Configure credentials:**
```sh
cp .env.example .env
# Edit .env with your Looker credentials
```
3. **Build Docker image:**
```sh
./docker-build-run.sh build
```
## MCP Client Configuration
Add to your client's MCP config (e.g., `.cursor/mcp.json`):
```json
{
"mcpServers": {
"looker-admin": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "MCP_MODE=stdio",
"-e", "LOOKERSDK_BASE_URL=${.env:LOOKERSDK_BASE_URL}",
"-e", "LOOKERSDK_CLIENT_ID=${.env:LOOKERSDK_CLIENT_ID}",
"-e", "LOOKERSDK_CLIENT_SECRET=${.env:LOOKERSDK_CLIENT_SECRET}",
"-e", "LOOKERSDK_VERIFY_SSL=${.env:LOOKERSDK_VERIFY_SSL}",
"looker-mcp:latest"
]
}
}
}
```
## Available Tools
### User Management (9 tools)
- `looker_me` - Get current authenticated user
- `list_users` - List all users with pagination
- `search_users` - Search by email, name, status
- `get_user` - Get user details
- `create_user` - Create new user
- `update_user` - Update user info
- `delete_user` - Delete user (requires confirm=True)
- `get_user_roles` - Get user's roles
- `set_user_roles` - Assign roles to user
### Group Management (9 tools)
- `list_groups` - List all groups
- `search_groups` - Search groups by name
- `get_group` - Get group details
- `create_group` - Create new group
- `update_group` - Rename group
- `delete_group` - Delete group (requires confirm=True)
- `list_group_users` - List members in group
- `add_user_to_group` - Add user to group
- `remove_user_from_group` - Remove user from group
### Role Management (11 tools)
- `list_roles` - List all roles
- `get_role` - Get role details with permissions
- `create_role` - Create new role
- `update_role` - Update role
- `delete_role` - Delete role (requires confirm=True)
- `list_permission_sets` - List permission sets
- `get_permission_set` - Get permission set details
- `list_model_sets` - List model sets
- `get_model_set` - Get model set details
- `create_model_set` - Create new model set
- `list_role_users` - List users with a role
### Scheduled Plans (8 tools)
- `list_scheduled_plans` - List all schedules
- `get_scheduled_plans_for_dashboard` - Get dashboard schedules
- `get_scheduled_plans_for_look` - Get look schedules
- `get_scheduled_plan` - Get schedule details
- `create_scheduled_plan` - Create new schedule
- `update_scheduled_plan` - Update schedule
- `delete_scheduled_plan` - Delete schedule (requires confirm=True)
- `run_scheduled_plan_once` - Run schedule immediately
### Alerts (7 tools)
- `search_alerts` - Find alerts
- `get_alert` - Get alert details
- `create_alert` - Create new alert
- `update_alert` - Update alert
- `delete_alert` - Delete alert (requires confirm=True)
- `follow_alert` - Subscribe to alert
- `unfollow_alert` - Unsubscribe from alert
### Content Access (8 tools)
- `list_folders` - List folders
- `get_folder` - Get folder details
- `get_folder_children` - Get folder contents
- `get_folder_ancestors` - Get folder hierarchy
- `search_folders` - Search folders
- `get_content_metadata_access` - Get permissions
- `update_content_metadata_access` - Set permissions
- `get_content_access` - Get detailed access rules
### System Admin (8 tools)
- `list_user_sessions` - List active sessions
- `delete_user_session` - Kill session (requires confirm=True)
- `list_user_attributes` - List user attributes
- `get_user_attribute` - Get attribute details
- `get_user_attribute_values` - Get user's attribute values
- `set_user_attribute_value` - Set attribute value
- `get_api_versions` - Get API versions
- `get_looker_version` - Get Looker instance version
## Project Structure
```
src/looker_admin_mcp/
├── client/
│ ├── sdk.py # SDK initialization
│ └── models.py # TypedDicts for responses
├── server/
│ ├── looker.py # Main server + error handling
│ ├── main.py # Entry point
│ └── transports.py # Stdio/SSE transport
└── tools/
├── user.py # User management (9 tools)
├── groups.py # Group management (9 tools)
├── roles.py # Role management (11 tools)
├── schedules.py # Scheduled plans (8 tools)
├── alerts.py # Alert management (7 tools)
├── content_access.py # Folder/permissions (8 tools)
└── system.py # System admin (8 tools)
```
## Environment Variables
```sh
LOOKERSDK_BASE_URL=https://your-looker-instance.com
LOOKERSDK_CLIENT_ID=your_client_id
LOOKERSDK_CLIENT_SECRET=your_client_secret
LOOKERSDK_VERIFY_SSL=true
LOOKERSDK_TIMEOUT=120 # Optional
```
## Complementary Tools
This server handles **administration**. For **analytics/data**:
- [Google MCP Toolbox](https://github.com/googleapis/genai-toolbox) - Query data, explore models, create dashboards