Skip to main content
Glama
README.md
# 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