SQL Server管理工具

一个通过自然语言访问AWS VPC内Windows EC2实例上运行的SQL Server的MCP服务器,无需公开数据库。

  • by jesseeastern
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 jesseeastern/claude-mcp-aws-sqlserver

使用说明

claude mcp aws sqlserver

MCP服务器 这使Claude能够以自然语言访问在AWS VPC内的Windows EC2实例上运行的SQL Server,而不需要公开公共数据库。


概述

该项目演示了如何构建 MCP(模型上下文协议)服务器 它将Claude Desktop连接到AWS托管的SQL Server环境。所有数据库流量都通过私有VPC网络流动——SQL Server端口永远不会暴露在公共互联网上。

克劳德可以用简单的英语:

  • 检查和管理EC2实例(启动、停止、列出)
  • 通过AWS SSM在任何实例上运行PowerShell或bash命令
  • 使用T-SQL查询SQL Server上的任何数据库
  • 列出所有数据库及其运行状况

建筑

Claude Desktop
     |
     | MCP (streamable-HTTP)
     v
┌─────────────────────────────────┐
│         server.py               │
│         (FastMCP)               │
│                                 │
│  ┌──────────┐  ┌─────────────┐  │
│  │  boto3   │  │   pyodbc    │  │
│  └────┬─────┘  └──────┬──────┘  │
└───────┼───────────────┼─────────┘
        │               │
   AWS API         VPC-internal TCP
        │               │
 ┌──────┴──────┐  ┌─────┴──────────────┐
 │  EC2 + SSM  │  │  Windows EC2       │
 │  (control)  │  │  SQL Server 2019+  │
 └─────────────┘  └────────────────────┘

关键设计决策:

  • SSM用于远程命令执行,而不是RDP/SSH——实例上不需要入站端口。
  • 平台检测会自动选择正确的SSM文档(PowerShell与bash)。
  • pyodbc 通过私有VPC IP连接到SQL Server,使数据库远离公共互联网。

MCP工具

工具 说明
list_instances 列出所有EC2实例,包括状态、类型和公共IP
start_instance 按ID启动已停止的EC2实例
stop_instance 按ID停止正在运行的EC2实例
run_command 通过SSM运行shell或PowerShell命令(自动检测操作系统)
sql_query 对命名数据库执行任何T-SQL查询
list_databases 列出所有具有状态和恢复模式的SQL Server数据库

先决条件

AWS端

  • 至少有一个EC2实例运行SQL Server(Windows)的AWS帐户
  • SSM代理 在所有托管EC2实例上安装并运行
  • IAM角色通过以下方式附加到每个EC2实例 AmazonSSMManagedInstanceCore 政策
  • 运行此服务器的计算机需要具有以下权限的AWS凭据 ec2:Describe*, ec2:StartInstances, ec2:StopInstances, ssm:SendCommand,以及 ssm:GetCommandInvocation

本地计算机


设置

1.克隆存储库

git clone https://github.com/jesseeastern/claude-mcp-aws-sqlserver.git
cd claude-mcp-aws-sqlserver

2.安装Python依赖项

pip install -r requirements.txt

3.配置凭据

编辑 server.py 并填写文件顶部的常量:

WINDOWS_INSTANCE_ID = "i-XXXXXXXXXXXXXXXXX"   # Your Windows EC2 instance ID
SQL_SERVER_IP       = "10.0.0.X"              # Private VPC IP of the SQL Server
SQL_SERVER_PORT     = 1433
SQL_USER            = "sa"
SQL_PASSWORD        = "your-password-here"

提示: 对于生产使用,请从环境变量或AWS Secrets Manager加载这些值,而不是对其进行硬编码。

4.配置AWS凭据

服务器使用标准boto3凭据链。最简单的方法:

aws configure
# or set environment variables:
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_DEFAULT_REGION=us-east-2

5.在克劳德桌面注册

将以下内容添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "vpc-mcp": {
      "command": "python",
      "args": ["/absolute/path/to/server.py"],
      "transport": "streamable-http",
      "url": "http://localhost:8000/mcp"
    }
  }
}

6.启动服务器

python server.py

示例提示

连接后,您可以问Claude以下问题:

  • “列出我的所有EC2实例,并告诉我哪些实例正在运行。”
  • “启动实例i-0abc123def456789a并等待其可用。”
  • “SQL Server上存在哪些数据库?”
  • “对AdventureWorks2019运行此查询:从Sales.SalesOrderHeader ORDER BY TotalDue DESC中选择前10名*”
  • “使用PowerShell检查Windows实例上的可用磁盘空间。”

安全说明

  • 切勿提交真实密码或AWS凭据 源代码控制。使用环境变量或机密管理器。
  • 中的占位符值 server.py (i-XXXXXXXXXXXXXXXXX, YOUR_SA_PASSWORD_HERE)是故意的——只在本地副本中替换它们。
  • 使用最小权限原则将IAM角色限制为所需的最小权限。
  • 考虑启用AWS CloudTrail来审核所有SSM命令执行。

技术栈

  • FastMCP --Python MCP服务器框架
  • 肉毒杆菌3 --AWS Python SDK
  • pyodbc --ODBC数据库连接
  • AWS EC2 --云中的虚拟机
  • AWS系统经理(SSM) --无需打开入站端口即可安全执行远程命令

许可证

该项目根据 MIT许可证.