通过 Model Context Protocol (MCP) 直接连接到 Metabase 和 PostgreSQL 数据库,为 Claude Desktop 和 Claude Code 提供支持。使用 Metabase API 和直接数据库连接创建模型、SQL 查询、指标和仪表板。
🚀 适用于 Claude Desktop & Claude Code 的 MCP 服务器 - Metabase + 直接数据库访问
⭐ 如果你觉得这个项目有用,请给它一个星! ⭐
# 克隆仓库
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 中。
该项目通过 Model Context Protocol (MCP) 与 Claude Desktop 和 Claude Code 集成:
~/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 Code 可以通过全局安装直接使用此 MCP 服务器:
# 全局安装 MCP 服务器
npm link
# 验证安装
which metabase-ai-mcp
npm list -g | grep metabase-ai-assistant
确保你的 .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
# 直接测试 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
在 Claude Code 中询问:“你有哪些可用的 MCP 工具?”
你应该看到有 27 个 Metabase AI 助手工具 可用:
📊 数据库工具:
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 功能工具:
ai_sql_generate - 从自然语言生成 SQLai_sql_optimize - 优化 SQL 性能ai_sql_explain - 解释 SQL 查询📚 文档工具:
web_explore_metabase_docs - 爬取 Metabase 文档web_search_metabase_docs - 搜索文档该服务器提供了全面的 Metabase 和 PostgreSQL 集成,包括 27 个工具:
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'
});
// 启动 AI 助手
const assistant = new MetabaseAIAssistant({
metabaseClient: client,
aiProvider: 'anthropic',
anthropicApiKey: 'your-key'
});
// 创建模型
const model = await assistant.createModel(
'客户细分模型',
databaseId
);
// 生成 SQL 查询
const sql = await assistant.generateSQL(
'过去30天的销售总额',
schema
);
// 创建销售模型
await assistant.createModel(
'每日销售摘要 - 产品、类别、金额',
databaseId
);
// 定义指标
await assistant.createMetric(
'平均购物车价值',
tableId
);
// 创建仪表板
await assistant.createDashboard(
'电子商务经理面板',
questions
);
// 客户细分查询
const sql = await assistant.generateSQL(
'基于 RFM 分析的客户细分',
schema
);
// 客户流失预测模型
await assistant.createModel(
'客户流失预测模型',
databaseId
);
// 收入支出分析
await assistant.createQuestion(
'月度损益表',
databaseId
);
// 预算对比仪表板
await assistant.createDashboard(
'预算 vs 实际',
budgetQuestions
);
交互式 CLI 中可用的命令:
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
// 数据库
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)
// AI 操作
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
.env 文件中.env 文件排除在版本控制之外claude_ai_ 前缀以保证安全npm link 成功运行which metabase-ai-mcpecho $METABASE_URLnode src/mcp/server.js.env 文件提交到版本控制系统# 全局安装 PM2
npm install -g pm2
# 使用 PM2 启动 MCP 服务器
npm run pm2:start
# 监控和管理
npm run pm2:logs
npm run pm2:restart
npm run pm2:stop
# 系统重启时自动重启
pm2 startup
pm2 save
# 使用 Docker Compose 构建和运行
npm run docker:run
# 监控日志
npm run docker:logs
# 停止容器
npm run docker:stop
railway.jsondeploy/heroku-deploy.md)# 复制服务文件
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 # 代码质量检查
如果你喜欢这个项目并希望为其发展做出贡献:
git checkout -b feature/new-feature)git commit -m 'feat: 新功能添加')git push origin feature/new-feature)MIT 许可 - 详情请