SQL生成银行助手

一个概念验证的银行助手,使用模型上下文协议(MCP)安全访问AWS数据工具,将自然语言查询转换为SQL并在AWS Athena上执行。

  • by manish6007
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 manish6007/text-2-sql-mcp

使用说明

文本到SQL MCP演示🏦

使用 模型上下文协议(MCP) 安全访问AWS数据工具。该项目演示了如何将自然语言查询转换为SQL并在AWS Athena上执行。

✨ 特性

  • 智能意图检测:代理人理解您的要求并做出适当回应:

    • 简单查询(列表数据库、列表桶)得到直接答案
    • 数据查询触发完整的工作流程
  • 增强的架构发现:查看带有列详细信息的表结构

    • 显示所有表及其列和数据类型
    • 深入到特定的表模式
  • 多步骤代理工作流:对于数据查询,代理会自动:

    1. 列出可用数据库
    2. 检索表架构
    3. 从自然语言生成SQL
    4. 执行查询并返回结果
  • MCP服务器工具:

    • list_s3_buckets:列出您AWS帐户中的所有S3存储桶
    • list_athena_databases:发现可用的Glue/Athena数据库
    • get_athena_schema:获取包含列详细信息的表架构
    • get_table_schema:获取特定表的详细架构
    • run_athena_query:在Athena上执行只读SQL查询
  • 安全第一:只有 SELECT 允许查询-不允许修改数据

🏗️ 建筑

┌─────────────────────┐          ┌─────────────────────┐
│   Streamlit App     │  stdio   │    MCP Server       │
│   (MCP Client)      │◄────────►│  (FastMCP + boto3)  │
│                     │          │                     │
│   User Interface    │          │  AWS Tool Registry  │
└─────────────────────┘          └─────────────────────┘
                                           │
                                           ▼
                                 ┌─────────────────────┐
                                 │      AWS APIs       │
                                 │  (S3, Athena, Glue) │
                                 └─────────────────────┘

📸 截图

首页

用户与银行助理互动的主聊天界面。

列出数据库

只返回数据库列表而不执行查询的简单请求。

显示带列的架构

增强的模式显示,显示表及其列名和数据类型。

查询执行

完整的代理工作流程,显示推理步骤、SQL生成和查询结果。

🚀 快速开始

先决条件

  • Python 3.11+
  • 配置AWS凭据(通过环境变量或 ~/.aws/credentials)
  • 带有表的Athena数据库(用于查询功能)

安装

  1. 克隆存储库:

    git clone https://github.com/manish6007/text-2-sql-mcp.git
    cd text-2-sql-mcp
    
  2. 安装依赖项:

    pip install -r requirements.txt
    
  3. 运行Streamlit应用程序:

    streamlit run streamlit_app.py
    
  4. 打开浏览器 http://localhost:8501

📁 项目结构

text-2-sql-mcp/
├── mcp_server.py       # MCP Server with AWS tools
├── streamlit_app.py    # Streamlit UI (MCP Client)
├── requirements.txt    # Python dependencies
├── assets/             # Screenshots and media
│   ├── home_page.png
│   ├── list_databases.png
│   ├── schema_with_columns.png
│   └── query_result.png
└── README.md           # This file

🔧 配置

AWS区域

默认AWS区域设置在 mcp_server.py.修改此行以更改它:

def get_aws_client(service: str, region: str = "us-east-1"):

S3输出铲斗

Athena需要一个S3存储桶来存储查询结果。更新中的bucket名称 mcp_server.py:

bucket_name = "your-bucket-name"
output_location = f"s3://{bucket_name}/athena-results/"

🛡️ 安全

  • 只读查询:只有 SELECT 允许发表声明
  • 没有硬编码凭据:使用AWS环境变量或IAM角色
  • 显式工具调用:所有操作都以清晰的工具名称记录

📄 许可证

MIT许可证

🤝 贡献

欢迎投稿!请随时提交拉取请求。