使用说明
🎯 带智能代理的多数据库(MySql)MCP服务器
一个强大的模型上下文协议服务器,可以智能地在多个MySQL数据库之间路由查询,并具有跨数据库协作功能。
📖 目录
🌟 概述
此MCP服务器提供 智能数据库路由 跨三个不同的MySQL数据库,允许Claude Desktop无缝查询和分析以下数据:
- 🎓 学校_企业 -学校管理系统(学生、教师、费用、出勤)
- 🎵 支奴干直升机 -音乐商店数据库(专辑、艺术家、曲目、客户)
- 🎬 萨基拉 -电影租赁数据库(电影、演员、租赁、库存)
内置 AI 代理 自动检测您的问题与哪个数据库相关,并智能地路由查询,支持 跨数据库协作.
✨ 特性
🤖 智能代理路由
- 多相位检测:关键词→ 表名→ 列名
- 信心评分:知道系统有多确定
- 无任意默认值:需要时要求澄清
- 处理歧义:检测并报告冲突匹配
🔗 跨数据库协作
- 查询多个数据库 在单个请求中
- 统一搜索 同时跨所有数据库
- 汇总统计 来自多个来源
- 智能结果组合 分析
🎯 自然语言处理
- 用简单的英语提问
- 每个数据库自动生成SQL
- 上下文感知查询优化
- 人类可读的响应
🛡️ 坚固安全
- 所有数据库的连接池
- 优雅的错误处理
- SQL注入预防
- 详细的日志记录和调试
🏗️ 建筑
┌─────────────────────────────────────────────────────────────┐
│ Claude Desktop │
└───────────────────────────┬─────────────────────────────────┘
│ MCP Protocol
▼
┌─────────────────────────────────────────────────────────────┐
│ Multi-Database MCP Server │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Intelligent Agent Router │ │
│ │ • Keyword Analysis • Confidence Scoring │ │
│ │ • Table Detection • Ambiguity Resolution │ │
│ │ • Column Matching • Cross-DB Coordination │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────┼──────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ school │ │ Chinook │ │ Sakila │ │
│ │ _erp │ │ │ │ │ │
│ │ (School) │ │ (Music) │ │ (Movies) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
📦 安装
先决条件
- Python 3.8+
- MySQL服务器8.0+
- Claude桌面应用程序
步骤1:安装依赖项
# Install required Python packages
pip install mcp mysql-connector-python
步骤2:下载服务器
# Clone or download the repository
git clone https://github.com/subhash-adak/MCP.git
cd MCP
步骤3:数据库设置
该存储库包含一个统一的模式文件,用于创建和填充所有三个示例数据库。
从架构文件导入数据库:
# Import all databases from the unified schema file
mysql -u root -p < schema.sql
这将创建并填充以下数据库:
school_erp(学校管理系统)chinook(音乐商店)sakila(电影租赁)
验证安装:
# Login to MySQL
mysql -u root -p
# Check databases
SHOW DATABASES;
你应该看看 school_erp, chinook,以及 sakila 上市的。
验证每个数据库的近似表计数:
USE school_erp;
SHOW TABLES; -- Should show ~40 tables
USE chinook;
SHOW TABLES; -- Should show ~11 tables
USE sakila;
SHOW TABLES; -- Should show ~23 tables
⚙️ 配置
1.更新数据库凭据
编辑 DB_CONFIGS Python文件中的部分:
DB_CONFIGS = {
'school_erp': {
'host': 'localhost',
'database': 'school_erp',
'user': 'your_username', # ← Change this
'password': 'your_password', # ← Change this
'port': 3306
},
'chinook': {
'host': 'localhost',
'database': 'chinook',
'user': 'your_username', # ← Change this
'password': 'your_password', # ← Change this
'port': 3306
},
'sakila': {
'host': 'localhost',
'database': 'sakila',
'user': 'your_username', # ← Change this
'password': 'your_password', # ← Change this
'port': 3306
}
}
2.配置克劳德桌面
窗户: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"multi-database": {
"command": "python",
"args": [
"C:/full/path/to/app.py"
]
}
}
}
3.重新启动克劳德桌面
关闭并重新打开Claude Desktop以加载MCP服务器。
🚀 用法示例
基本查询-单个数据库
You: "How many students are in the school?"
Agent: Detects 'students' → Routes to school_erp
Result: 6,735 students
跨数据库比较
You: "Compare total customers across all systems"
Agent: Detects need for all databases
Result:
• School: 6,735 students
• Music Store: 59 customers
• Movie Rental: 599 customers
• Total: 7,393 users
统一搜索
You: "Search for anyone named 'John' everywhere"
Agent: Searches all databases simultaneously
Result:
• school_erp: 12 students/teachers
• chinook: 8 customers
• sakila: 25 customers/actors
• Total: 45 matches
汇总统计
You: "Show me total revenue across all business units"
Agent: Aggregates payment data
Result:
• School Fees: ₹15,000 (7 payments)
• Music Sales: $2,328.60 (412 invoices)
• Movie Rentals: $67,416.51 (16,049 payments)
模糊查询处理
You: "Show me all payments"
Agent: Detects ambiguity (payments in all 3 DBs)
Response: "Found 'payments' in multiple databases.
Please specify: school fees, music invoices,
or movie rentals?"
📚 API 参考
可用工具
1. query -自然语言查询
用简单的英语提问,客服会自动安排路线。
{
"question": "How many teachers are active?"
}
答复:
{
"success": true,
"detected_database": "school_erp",
"confidence": 95.5,
"reasoning": "Matched keywords: teachers, active",
"data": [{"count": 150}],
"row_count": 1
}
2. cross_database_query -多数据库分析
查询多个数据库并获得组合结果。
{
"query_description": "Compare customer counts",
"databases": ["school_erp", "chinook", "sakila"]
}
答复:
{
"databases_queried": ["school_erp", "chinook", "sakila"],
"individual_results": {
"school_erp": {"data": [...], "row_count": 1},
"chinook": {"data": [...], "row_count": 1},
"sakila": {"data": [...], "row_count": 1}
},
"combined_analysis": {
"summary": [...],
"totals": {"count": 7393}
}
}
3. unified_search -到处搜索
在所有数据库中搜索一个术语。
{
"search_term": "john",
"search_type": "name"
}
答复:
{
"search_term": "john",
"total_matches": 45,
"results_by_database": {
"school_erp": {"matches": [...], "count": 12},
"chinook": {"matches": [...], "count": 8},
"sakila": {"matches": [...], "count": 25}
}
}
搜索类型:
name-在名称字段中搜索email-在电子邮件字段中搜索title-在标题/姓名字段中搜索id-按ID搜索all-到处搜索
4. aggregate_stats -获取统计信息
汇总所有数据库的统计数据。
{
"metric": "entity_counts"
}
可用指标:
total_records-统计所有记录customers-客户/用户总数payments-付款/收入汇总entity_counts-主要实体数量
答复:
{
"metric": "entity_counts",
"by_database": {
"school_erp": {
"students": 6735,
"teachers": 150,
"classes": 78
},
"chinook": {
"artists": 275,
"albums": 347,
"tracks": 3503
},
"sakila": {
"films": 1000,
"actors": 200
}
}
}
5. sql -直接SQL执行
在特定数据库上执行原始SQL。
{
"database": "chinook",
"query": "SELECT * FROM artist LIMIT 10"
}
6. schema -数据库架构信息
获取有关数据库结构的信息。
{
"database": "sakila",
"table": "film"
}
7. databases -列出所有数据库
获取可用数据库及其描述的列表。
{}
答复:
{
"databases": [
{
"name": "school_erp",
"description": "School Management System"
},
{
"name": "chinook",
"description": "Music Store"
},
{
"name": "sakila",
"description": "Movie Rental"
}
]
}
🎨 高级功能
多相位检测算法
该代理使用复杂的4阶段方法:
Phase 1: Keyword Matching
↓ (if no match)
Phase 2: Table Name Detection
↓ (if no match)
Phase 3: Column Name Analysis
↓ (if no match)
Phase 4: Request Clarification
信心评分
每次检测都包括一个置信度得分:
{
"database": "chinook",
"confidence": 87.5,
"reasoning": "Matched keywords: album, artist, music",
"scores": {
"school_erp": 0,
"chinook": 7,
"sakila": 0
}
}
自动查询优化
系统为每个数据库生成最佳SQL:
Question: "Get customer emails"
# Different SQL for each database:
school_erp: SELECT email FROM sms_students
chinook: SELECT Email FROM customer
sakila: SELECT email FROM customer
🎯 真实世界用例
1.商业智能仪表板
"Show me aggregate stats for all systems"
→ Get complete overview of all operations
2.客户支持
"Find customer with email support@example.com"
→ Search across all customer databases
3.收入分析
"Compare revenue from school fees vs entertainment sales"
→ Cross-database financial analysis
4.用户管理
"How many active users do we have total?"
→ Aggregate user counts from all platforms
5.数据验证
"Check if email exists in multiple systems"
→ Detect duplicate registrations
🐛 故障排除
连接问题
问题: “数据库连接失败”
解决方案:
# Test MySQL connection
mysql -u your_username -p -h localhost
# Check if databases exist
SHOW DATABASES;
# Verify credentials in code
MCP未加载
问题: Claude Desktop未显示MCP
解决方案:
- 检查配置文件语法(有效的JSON)
- 在配置中使用绝对路径
- 完全重新启动克劳德桌面
- 检查日志:克劳德菜单→ 设置→ 开发者→ 查看日志
导入错误
问题: “ModuleNotFoundError:没有名为'mcp'的模块”
解决方案:
# Install in correct Python environment
python --version # Check Python version
pip install mcp mysql-connector-python
# Or use python3 explicitly
python3 -m pip install mcp mysql-connector-python
查询路由不正确
问题: 查询转到错误的数据库
解决方案:
- 使用更具体的关键字
- 明确提及数据库名称
- 检查代理人的信心评分
- 直接使用
sql带有数据库参数的工具
📊 性能提示
1.连接池
服务器保持与所有数据库的持久连接,以获得最佳性能。
2.结果限制
为了快速响应,默认查询限制为50-100行。
3.模式缓存
表和列信息被缓存以加快检测速度。
4.并行查询
如果可能,跨数据库查询将并行执行。
🔒 安全考虑
最佳实践
✅ 做:
- 尽可能使用只读数据库用户
- 将凭据保存在环境变量中
- 定期更新MySQL和Python包
- 监控可疑活动的查询日志
❌ 不要:
- 将凭据提交到版本控制
- 使用MySQL根帐户
- 允许不受限制的DELETE/DROP操作
- 使用凭据共享配置文件
推荐的MySQL用户设置
-- Create read-only user
CREATE USER 'mcp_readonly'@'localhost' IDENTIFIED BY 'secure_password';
-- Grant SELECT only
GRANT SELECT ON school_erp.* TO 'mcp_readonly'@'localhost';
GRANT SELECT ON chinook.* TO 'mcp_readonly'@'localhost';
GRANT SELECT ON sakila.* TO 'mcp_readonly'@'localhost';
FLUSH PRIVILEGES;
📈 监控和记录
启用调试日志
# In the code, change logging level
logging.basicConfig(level=logging.DEBUG)
检查日志
# Run server manually to see logs
python app.py
监控查询性能
# Add timing to queries
import time
start = time.time()
result = execute_sql(db, query)
logger.info(f"Query took {time.time() - start:.2f}s")
🤝 贡献
欢迎投稿!以下是您可以提供帮助的方式:
添加新数据库
- 将数据库配置添加到
DB_CONFIGS - 添加关键字
DatabaseAgent.database_keywords - 在中实现查询模式
natural_to_sql() - 更新文档
改进检测
- 向现有数据库添加更多关键字
- 增强列匹配算法
- 添加上下文感知规则
- 提高信心评分
错误报告
请包括:
- Python版本
- MySQL版本
- 错误消息
- 重现步骤
📝 许可证
麻省理工学院许可证-请在您的项目中自由使用!
🙏 致谢
- Anthropic 适用于Claude和MCP协议
- MySQL 可靠的数据库引擎
- 奇努克和萨基拉 用于示例数据库
📧 支持
有问题吗?需要帮助?
🎉 接下来是什么?
计划的功能
- []PostgreSQL支持
- []MongoDB集成
- []Redis缓存层
- []查询历史和分析
- []基于Web的管理面板
- []将结果导出到CSV/Excel
- []预定查询
- []电子邮件提醒
- []GraphQL端点
⭐ 如果你觉得这个仓库有用,就把它标上! ⭐
由以下材料制成❤️ 克劳德桌面社区