MCP Looker集成-本地测试设置
该项目建立了一个本地模拟Looker API服务器,用于测试MCP-Looker集成,而不需要生产Looker实例。mock服务器提供了一个功能齐全的Looker API v4.0接口,可与Looker MCP工具箱一起使用。
快速开始
- 启动模拟服务器:
./start-mock-looker.sh或手动:
docker-compose up -d- 重新启动游标 加载MCP服务器
- 测试集成 通过询问AI助手:
- “列出Looker中的所有仪表板” - “显示销售概览仪表板” - “Looker有什么款式?”
设置
1.启动Mock Looker API服务器
构建并启动Docker容器:
docker-compose up -d或者使用便利脚本:
./start-mock-looker.sh模拟API服务器将在 http://localhost:9999
2.验证服务器是否正在运行
检查运行状况端点:
curl http://localhost:9999/health或访问 http://localhost:9999 在浏览器中查看可用端点。
3.在浏览器中查看仪表板
访问仪表板查看器:
http://localhost:9999/viewer这提供了一个可视化界面,可以浏览所有仪表板,并使用现代UI进行查看。
4.测试认证
模拟服务器接受任何 client_id 和 client_secret.测试登录终结点:
# JSON format
curl -X POST http://localhost:9999/api/4.0/login \
-H "Content-Type: application/json" \
-d '{"client_id": "test_client_id", "client_secret": "test_client_secret"}'
# Form-encoded format (used by toolbox)
curl -X POST http://localhost:9999/api/4.0/login \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=test_client_id&client_secret=test_client_secret"5.MCP配置
中的MCP配置 .cursor/mcp.json 已设置为使用:
- 基础URL:
http://localhost:9999 - 客户端ID:
test_client_id - 客户端密钥:
test_client_secret - SSL验证:禁用(用于本地测试)
重要提示: 在启动模拟服务器之后, 完全重新启动Cursor 加载MCP服务器并连接到模拟Looker实例。
使用MCP集成
Cursor重启并连接MCP服务器后,您可以通过自然语言与Looker交互:
查询示例:
- “列出Looker中的所有仪表板”
- “显示销售概览仪表板详细信息”
- “Looker有什么款式?”
- “搜索包含‘销售额’的仪表板”
- “从Looker获取当前用户”
AI助手将使用MCP Looker工具查询您的模拟Looker实例并返回结果。
可用模拟数据
模拟服务器提供以下示例数据:
仪表板(共3个):
- 销售概况 (ID:1)
- 说明:销售指标概述 - 浏览人次:150 - 收藏次数:12
- 营销绩效 (ID:2)
- 描述:营销活动指标 - 浏览人次:89 - 收藏次数:8
- 消费者分析 (ID:3)
- 描述:客户行为和人口统计 - 浏览人次:203 - 收藏次数:25
外观(共2个):
- 月度收入 (ID:1)
- 说明:每月收入 - 查询ID:101
- 热门产品 (ID:2)
- 描述:最畅销产品 - 查询ID:102
查询(共2个):
- 查询101:月收入数据
- 查询102:热门产品数据
API终点
mock服务器实现了以下Looker API v4.0端点:
认证
POST /api/4.0/login-OAuth身份验证(支持JSON和表单编码)
用户
GET /api/4.0/user-获取当前用户信息
仪表盘
GET /api/4.0/dashboards-列出所有仪表板GET /api/4.0/dashboards/search-搜索仪表板(由MCP工具箱使用)
- 查询参数: title, limit, offset
GET /api/4.0/dashboards/{id}-按ID或slug获取特定仪表板
外貌
GET /api/4.0/looks-列出所有外观GET /api/4.0/looks/{id}-获得特定外观
查询
GET /api/4.0/queries/{id}-获取查询定义GET /api/4.0/queries/{id}/run/{format}-运行查询(json或csv)
搜索
GET /api/4.0/search?q={query}&types={types}-跨仪表板和外观搜索内容
其他
GET /health-健康检查端点GET /viewer-仪表板查看器web界面GET /-API信息和可用端点
项目结构
mcp-experiment/
├── .cursor/
│ └── mcp.json # MCP server configuration
├── mock-looker-api/
│ ├── app.py # Flask mock API server
│ ├── dashboard-viewer.html # Web UI for viewing dashboards
│ ├── Dockerfile # Docker image definition
│ └── requirements.txt # Python dependencies
├── docker-compose.yml # Docker Compose configuration
├── start-mock-looker.sh # Quick start script
├── test-mcp-connection.md # Testing guide
└── README.md # This file停止服务器
要停止模拟服务器,请执行以下操作:
docker-compose down要停止并删除卷,请执行以下操作:
docker-compose down -v故障排除
MCP工具不可用
如果MCP Looker工具未显示:
- 完全重新启动游标 (退出并重新打开,而不仅仅是重新加载)
- 验证模拟API是否正在运行:
curl http://localhost:9999/health- 检查MCP服务器状态 在Cursor的MCP面板中
- 验证配置 在
.cursor/mcp.json - 检查工具箱是否可执行:
test -x /Users/daniel/Desktop/toolbox && echo "OK" || echo "Not executable"身份验证错误
如果您看到401未经授权的错误:
- 模拟服务器接受任何以以下开头的令牌
mock_token_ - 令牌存储在内存中,并在容器重启时重置
- 验证身份验证是否正常工作:
curl -X POST http://localhost:9999/api/4.0/login \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=test_client_id&client_secret=test_client_secret"404错误
如果你看到404错误:
- 检查容器是否正在运行:
docker ps - 验证API中是否存在终结点
- 检查Docker日志:
docker logs mock-looker-api
查看日志
要查看正在提出的请求,请执行以下操作:
docker logs mock-looker-api或者实时跟踪日志:
docker logs -f mock-looker-api技术细节
认证
模拟服务器实现了OAuth2风格的身份验证:
- 接受JSON和表单编码的登录请求
- 生成模拟令牌(格式:
mock_token_{timestamp}) - 如果令牌以以下开头,则被接受
mock_token_(为了便于测试) - 模拟令牌过期(1小时)
API兼容性
mock服务器设计为与Looker API v4.0兼容:
- 实现Looker MCP工具箱使用的端点
- 支持分页
limit和offset参数 - 处理基于ID和slug的查找
- 返回Looker API格式的数据
数据存储
- 所有数据都存储在内存中
- 容器重新启动时数据重置
- 无持久存储(按设计,用于测试)
备注
- 模拟服务器接受任何身份验证凭据(用于测试)
- 令牌在1小时后过期(模拟过期)
- 所有数据都在内存中,并在容器重新启动时重置
- 这仅用于测试,不提供完整的Looker功能
- 服务器以调试模式运行,便于开发
后续步骤
现在MCP集成正在工作,您可以:
- 测试不同的MCP Looker工具 -尝试查询、外观、仪表板等。
- 添加更多示例数据 -修改
mock-looker-api/app.py添加更多仪表板/外观 - 扩展API -根据需要添加更多端点以进行测试
- 自定义查看器 -增强
dashboard-viewer.html为了更好的可视化
