🚀 Metabase AI Assistant 🤖
Metabase AI Assistant是一款由人工智能驱动的助手,它通过模型上下文协议(MCP) 直接连接到Metabase和PostgreSQL数据库,适用于Claude Desktop和Claude Code。该助手能够利用Metabase API和直接数据库连接来创建模型、SQL查询、指标和仪表板。
🚀 适用于Claude Desktop和Claude Code的MCP服务器 - 支持Metabase和直接数据库访问
⭐ 如果您觉得这个项目有用,请给它点个星! ⭐
🚀 快速开始
本项目可通过以下简单步骤快速启动。首先,按照安装指南完成项目的安装和依赖配置;接着,根据配置说明设置好环境变量;然后,依据Claude Desktop和Claude Code集成步骤完成与这两个工具的集成;最后,根据不同的使用场景选择交互式CLI或者编程式使用方式来使用本项目。
✨ 主要特性
🔌 MCP集成(Claude Desktop和Claude Code)
- 模型上下文协议:与Claude Desktop和Claude Code进行原生集成
- 直接数据库访问:可直接连接到PostgreSQL数据库
- Metabase API集成:与Metabase实例进行全面集成
- 模式发现:自动发现和分析数据库模式
- 关系检测:检测表之间的关系并提供建议
🤖 人工智能驱动的特性
- 自然语言SQL:根据自然语言描述生成SQL查询
- 智能模型构建:在人工智能的辅助下创建Metabase模型
- 智能仪表板:自动布局仪表板并提供小部件建议
- 查询优化:优化SQL查询的性能
- 数据洞察:进行数据分析并检测数据模式
🛠️ 开发者工具
- DDL操作:安全地创建表、视图和索引(带有前缀保护)
- 批量操作:进行批量数据处理操作
- 连接管理:混合连接管理(API + 直接连接)
- 安全控制:通过人工智能对象前缀控制和审批工作流确保安全
- 性能监控:控制操作的时间和超时
📦 安装指南
git clone https://github.com/onmartech/metabase-ai-assistant.git
cd metabase-ai-assistant
npm install
cp .env.example .env
⚙️ 配置
编辑 .env 文件:
# Metabase配置
METABASE_URL=http://your-metabase-instance.com
METABASE_USERNAME=your_username
METABASE_PASSWORD=your_password
METABASE_API_KEY=your_metabase_api_key
# AI提供商(至少需要一个)
ANTHROPIC_API_KEY=your_anthropic_key
# 或者
OPENAI_API_KEY=your_openai_key
# 应用设置
LOG_LEVEL=info
⚠️ 重要提示
切勿将 .env 文件提交到版本控制中,该文件已包含在 .gitignore 中。
💻 使用示例
交互式CLI
npm start
编程式使用
import { MetabaseClient } from './src/metabase/client.js';
import { MetabaseAIAssistant } from './src/ai/assistant.js';
const client = new MetabaseClient({
url: 'http://your-metabase.com',
username: 'user',
password: 'pass'
});
const assistant = new MetabaseAIAssistant({
metabaseClient: client,
aiProvider: 'anthropic',
anthropicApiKey: 'your-key'
});
const model = await assistant.createModel(
'客户细分模型',
databaseId
);
const sql = await assistant.generateSQL(
'最近30天的销售总额',
schema
);
示例场景
1. 电子商务仪表板
await assistant.createModel(
'每日销售摘要 - 产品、类别、金额',
databaseId
);
await assistant.createMetric(
'平均订单价值',
tableId
);
await assistant.createDashboard(
'电子商务管理面板',
questions
);
2. 客户分析
const sql = await assistant.generateSQL(
'通过RFM分析进行客户细分',
schema
);
await assistant.createModel(
'客户流失预测模型',
databaseId
);
3. 财务报告
await assistant.createQuestion(
'月度损益表',
databaseId
);
await assistant.createDashboard(
'预算与实际情况对比',
budgetQuestions
);
📚 详细文档
📋 要求
🖥️ 系统
- Node.js 18+
- Claude Desktop(用于MCP支持)或 Claude Code
- PostgreSQL数据库(用于直接连接)
🔗 服务
- Metabase实例(v0.48+)
- Anthropic API(包含在Claude Desktop/Code中)
🛠️ CLI命令
在交互式CLI中可用的命令如下:
- 📊 创建模型:使用人工智能创建模型
- ❓ 创建问题:创建SQL查询
- 📈 创建指标:定义指标
- 📋 创建仪表板:准备仪表板
- 🔍 探索模式:探索数据库模式
- 🚀 执行SQL:执行SQL查询
- 🔧 优化查询:优化查询
- 💡 AI查询构建器:使用自然语言创建查询
📂 项目结构
metabase-ai-assistant/
├── src/
│ ├── mcp/
│ │ └── server.js # MCP服务器(Claude Desktop集成)
│ ├── metabase/
│ │ └── client.js # Metabase API客户端
│ ├── database/
│ │ ├── direct-client.js # 直接PostgreSQL客户端
│ │ └── connection-manager.js # 混合连接管理器
│ ├── ai/
│ │ └── assistant.js # AI辅助函数
│ ├── cli/
│ │ └── interactive.js # 交互式CLI(独立运行)
│ ├── utils/
│ │ └── logger.js # 日志记录工具
│ └── index.js # 主入口点(CLI模式)
├── tests/ # 测试文件
├── .env.example # 环境模板
├── package.json
└── README.md
🔍 API参考
MetabaseClient
getDatabases()
getDatabase(id)
getDatabaseSchemas(databaseId)
getDatabaseTables(databaseId)
getModels()
createModel(modelData)
getQuestions(collectionId)
createQuestion(questionData)
executeNativeQuery(databaseId, sql)
getMetrics()
createMetric(metricData)
getDashboards()
createDashboard(dashboardData)
addCardToDashboard(dashboardId, cardId, options)
MetabaseAIAssistant
analyzeRequest(userRequest)
generateSQL(description, schema)
suggestVisualization(data, questionType)
optimizeQuery(sql)
explainQuery(sql)
createModel(description, databaseId)
createQuestion(description, databaseId, collectionId)
createMetric(description, tableId)
createDashboard(description, questions)
🧪 测试
npm test
npm run test:connection
npm run test:coverage
🔌 Claude Desktop和Claude Code集成(MCP)
本项目通过模型上下文协议(MCP)与Claude Desktop和Claude Code集成。
对于Claude Desktop:
- 编辑Claude Desktop配置:
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"metabase-ai-assistant": {
"command": "node",
"args": ["/path/to/your/metabase-ai-assistant/src/mcp/server.js"],
"env": {
"METABASE_URL": "http://your-metabase-instance.com",
"METABASE_USERNAME": "your_username",
"METABASE_PASSWORD": "your_password",
"ANTHROPIC_API_KEY": "your_anthropic_key"
}
}
}
}
- 重启Claude Desktop,即可使用MCP工具。
对于Claude Code:
Claude Code可以通过全局安装直接使用此MCP服务器。
步骤1:全局安装
npm link
which metabase-ai-mcp
npm list -g | grep metabase-ai-assistant
步骤2:环境设置
确保您的 .env 文件已正确配置Metabase凭证:
METABASE_URL=http://your-metabase-instance.com
METABASE_USERNAME=your_username
METABASE_PASSWORD=your_password
METABASE_API_KEY=your_api_key
ANTHROPIC_API_KEY=your_anthropic_key
步骤3:测试MCP服务器
node src/mcp/server.js
export METABASE_URL="http://your-instance.com"
export METABASE_USERNAME="your_username"
export METABASE_PASSWORD="your_password"
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | node src/mcp/server.js
步骤4:验证集成
在Claude Code中,询问:"您有哪些可用的MCP工具?"
您应该会看到 27个Metabase AI Assistant工具 可用:
📊 数据库工具:
db_list - 列出所有Metabase数据库
db_schemas - 获取模式信息
db_tables - 列出带有详细信息的表
sql_execute - 运行SQL查询
🎯 Metabase工具:
mb_question_create - 创建问题/图表
mb_dashboard_create - 创建仪表板
mb_dashboard_template_executive - 自动生成执行仪表板
mb_question_create_parametric - 创建参数化问题
🔍 人工智能驱动的工具:
ai_sql_generate - 根据自然语言生成SQL
ai_sql_optimize - 优化SQL性能
ai_sql_explain - 解释SQL查询
📚 文档工具:
web_explore_metabase_docs - 爬取Metabase文档
web_search_metabase_docs - 搜索文档
该服务器提供了全面的Metabase和PostgreSQL集成,拥有 27个工具,可用于:
- 数据库模式探索和分析
- 自然语言SQL查询生成和优化
- 执行仪表板模板和参数化问题
- 带有安全控制的直接DDL操作
- Metabase文档爬取和搜索
- 表关系检测和映射
🔧 技术细节
🔒 安全
数据安全
- 环境变量:所有敏感数据(API密钥、密码)都存储在
.env 文件中
- Git忽略:
.env 文件被排除在版本控制之外
- SQL注入防护:使用参数化查询和输入验证
- 速率限制:对API请求应用速率限制
- 审计日志:记录所有数据库操作以进行安全监控
- 无硬编码凭证:采用安全优先的方法防止凭证泄露
数据库安全
- AI对象前缀:所有由人工智能创建的对象都带有
claude_ai_ 前缀以确保安全
- 模式隔离:操作仅限于指定的模式
- 只读模式:默认具有只读权限,修改操作需要明确批准
- DDL审批系统:数据库更改需要明确确认
- 前缀验证:只有带有AI前缀的对象才能被修改或删除
MCP安全
- 安全传输:MCP通信通过安全通道进行
- 环境隔离:通过环境变量传递凭证
- 工具验证:在执行所有工具输入之前进行验证
- 错误处理:从错误消息中过滤敏感信息
生产部署
- 使用特定于环境的配置文件
- 所有数据库通信都使用SSL/TLS连接
- 为数据库用户授予最小必要的权限
- 使用身份验证和授权保护API端点
- 定期轮换API密钥和数据库密码
- 监控和记录所有工具使用情况以进行安全审计
🐛 故障排除
连接错误
- 验证Metabase URL是否可访问
- 确保API密钥和凭证有效
- 检查网络连接和防火墙设置
- 确认环境变量已正确设置
MCP集成问题
- 确保
npm link 已成功运行
- 验证MCP服务器二进制文件是否在PATH中:
which metabase-ai-mcp
- 检查环境变量是否已导出:
echo $METABASE_URL
- 直接测试MCP服务器:
node src/mcp/server.js
- 全局安装后重启Claude Code
查询错误
- 验证SQL语法和格式
- 确认表和列名是否存在
- 检查数据库权限和模式访问
- 确保操作选择了正确的模式
安全警告
- 切勿将
.env 文件提交到版本控制中
- 避免在源代码中硬编码凭证
- 对人工智能创建的对象使用前缀验证
- 监控数据库操作以确保安全合规
🚀 生产部署
选项1:PM2进程管理器(推荐)
npm install -g pm2
npm run pm2:start
npm run pm2:logs
npm run pm2:restart
npm run pm2:stop
pm2 startup
pm2 save
选项2:Docker容器
npm run docker:run
npm run docker:logs
npm run docker:stop
选项3:云部署
- Railway:使用
railway.json 进行一键部署
- Heroku:使用Heroku CLI进行部署(请参阅
deploy/heroku-deploy.md)
- DigitalOcean:使用App Platform和Docker
- AWS:使用ECS Fargate或EC2和systemd服务
选项4:Systemd服务(Linux)
sudo cp metabase-ai-mcp.service /etc/systemd/system/
sudo systemctl enable metabase-ai-mcp
sudo systemctl start metabase-ai-mcp
sudo systemctl status metabase-ai-mcp
sudo journalctl -u metabase-ai-mcp -f
生产脚本
npm run mcp:prod
npm run test:connection
npm run lint
📈 路线图
- [ ] 自然语言处理改进
- [ ] 可视化查询构建器
- [ ] 自动仪表板推荐系统
- [ ] 多数据库支持
- [ ] 实时数据流
- [ ] 高级机器学习模型
🤝 贡献
如果您喜欢这个项目并希望为其发展做出贡献,可以参考以下内容:
⭐ 支持项目
- 在GitHub上点星:如果您觉得项目有用,请点个 ⭐ 星
- 关注我们:关注 @onmartech 账号以获取更新
- 分享项目:在社交媒体上分享并推荐给您的朋友
🔧 参与开发
- Fork 项目
- 创建 功能分支 (
git checkout -b feature/new-feature)
- 提交更改 (
git commit -m 'feat: 添加新功能')
- 推送更改 (
git push origin feature/new-feature)
- 创建拉取请求
💡 贡献想法
- 集成新的AI模型
- 开发仪表板模板
- 开发Metabase连接器
- 改进文档
- 修复Bug和优化性能
📋 贡献规则
📄 许可证
本项目采用MIT许可证,详情请参阅 LICENSE 文件。
版权所有 (c) 2024 ONMARTECH LLC
👥 支持与联系
🐛 Bug报告和功能请求
- GitHub Issues:问题页面
- Bug模板:在创建问题时使用模板
- 功能请求:详细描述您需要的功能
💬 社区
- GitHub讨论:用于问答和分享想法
- 文档:为Wiki页面做出贡献
- 示例:分享示例使用案例
🚀 商业支持
ONMARTECH LLC提供专业的支持和定制服务。
🏆 贡献者
感谢所有使这个项目成为可能的人:
- ONMARTECH LLC - 项目开发和维护
- Metabase团队 - 提供优秀的平台
- 开源社区 - 持续的灵感和反馈
🌟 名人堂
做出重要贡献的开发者将在此列出。
如果您觉得这个项目有用,请不要忘记点个 ⭐ 星并 🔄 分享!