多数据库智能路由服务器

一个支持跨MySQL数据库智能查询路由和协作的MCP协议服务器,具备自然语言处理和多数据库联合分析能力。

  • by subhash-adak
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 subhash-adak/MCP

使用说明

🎯 带智能代理的多数据库(MySql)MCP服务器

一个强大的模型上下文协议服务器,可以智能地在多个MySQL数据库之间路由查询,并具有跨数据库协作功能。

特性 • 安装 • 用法 • 示例 • API 参考


📖 目录


🌟 概述

此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

解决方案:

  1. 检查配置文件语法(有效的JSON)
  2. 在配置中使用绝对路径
  3. 完全重新启动克劳德桌面
  4. 检查日志:克劳德菜单→ 设置→ 开发者→ 查看日志

导入错误

问题: “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")

🤝 贡献

欢迎投稿!以下是您可以提供帮助的方式:

添加新数据库

  1. 将数据库配置添加到 DB_CONFIGS
  2. 添加关键字 DatabaseAgent.database_keywords
  3. 在中实现查询模式 natural_to_sql()
  4. 更新文档

改进检测

  1. 向现有数据库添加更多关键字
  2. 增强列匹配算法
  3. 添加上下文感知规则
  4. 提高信心评分

错误报告

请包括:

  • Python版本
  • MySQL版本
  • 错误消息
  • 重现步骤

📝 许可证

麻省理工学院许可证-请在您的项目中自由使用!


🙏 致谢

  • Anthropic 适用于Claude和MCP协议
  • MySQL 可靠的数据库引擎
  • 奇努克和萨基拉 用于示例数据库

📧 支持

有问题吗?需要帮助?

  1. 检查 故障排除 章节
  2. 审查 示例
  3. 查看Claude的MCP文档
  4. 在GitHub上打开一个问题

🎉 接下来是什么?

计划的功能

  • []PostgreSQL支持
  • []MongoDB集成
  • []Redis缓存层
  • []查询历史和分析
  • []基于Web的管理面板
  • []将结果导出到CSV/Excel
  • []预定查询
  • []电子邮件提醒
  • []GraphQL端点

⭐ 如果你觉得这个仓库有用,就把它标上! ⭐

由以下材料制成❤️ 克劳德桌面社区

🔝 返回页首