数据库元数据管理框架

MCP Server是一个用于管理和标准化跨多个数据库服务器的元数据的框架,特别支持Microsoft SQL Server环境,提供集中式元数据存储和可扩展的查询管理功能。

  • by FlavorFlav-github
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 FlavorFlav-github/sql-server-mcp

使用说明

MCP 服务器

模型上下文协议(MCP)是一个旨在管理和标准化多个数据库服务器之间元数据的框架。

此项目实现了一个MCP服务器,专门支持Microsoft SQL Server环境,使您能够:

  • 连接到多个 SQL Server 实例

  • 每个服务器处理多个数据库

  • 每个数据库处理多个架构

  • 在PostgreSQL中维护一个集中式的元数据存储

  • 为在所有连接的服务器上查询和管理模式、表和列提供可扩展的基础

该项目的目标是提供一个通用、可维护且可扩展的MCP(管理控制协议)服务器,该服务器可作为多服务器、多数据库、多架构SQL Server环境的骨干。

这个项目使用Docker Compose进行了容器化,支持初始化脚本,并通过Makefile提供了便捷的命令。

🚀 特性

  • 连接到一个或多个 SQL Server 实例(本地或远程)

  • 在 PostgreSQL 中存储有关服务器、数据库、模式、表和列的元数据

  • 定期的元数据同步功能

  • Redis 缓存支持

  • 完全容器化,便于本地开发和测试

  • 已准备好进行密钥管理集成(AWS/GCP/Azure)

📦 项目结构

.
├── src/                  # Application source code
│   ├── app.py            # FastAPI entrypoint
│   ├── init_metadata.py  # Metadata initialization
│   ├── core/
│   │   ├── db/
│   │   │   ├── postgres_client.py
│   │   │   ├── mssql_client.py
│   │   │   └── orm/
│   │   └── utils/
│   │       └── crypto_utils.py
│   └── config/           # Configuration files (servers.yml)
├── sql/                  # SQL scripts for initializing databases
├── scripts/
│   └── init-db.sh        # Database seeding script
├── docker-compose.yml
├── Dockerfile
├── Dockerfile.init       # For database initialization
├── Makefile
└── .env                  # Environment variables

⚙️ 先决条件

  • Docker ≥ 20.10

  • Docker Compose 版本 ≥ 2.0

  • 容器内 Python ≥ 3.12

🛠 环境变量


All sensitive or environment-specific values should go in the .env file:

POSTGRES_USER=mcp_user
POSTGRES_PASSWORD=<YourPassword>
POSTGRES_DB=mcp_meta
POSTGRES_HOST=postgres
POSTGRES_PORT=5432

REDIS_HOST=redis
REDIS_PORT=6379

SQLSERVER_HOST=sqlserver
SQLSERVER_PORT=1433
SQLSERVER_DB=master
SQLSERVER_USER=sa
SQLSERVER_PASSWORD=<YourPassword>

MCP_SERVER_PORT=8080

# Optional: Fernet key for encrypting server passwords
ENCRYPTION_KEY=<generated_fernet_key>

# Optional SQL Server passwords for metadata initialization
MSSQL_PASS_1=<YourPassword>

🐳 Docker Compose(用于定义和运行多容器Docker应用)

该项目提供四项主要服务:

服务 描述
MCP FastAPI服务器,元数据同步,API端点
postgres PostgreSQL 元数据存储库
Redis Redis 缓存
sqlserver 用于测试的本地 SQL Server
init-db 数据库初始化脚本(启动时运行一次)

启动所有服务:

make build       # Build images
make up          # Start containers

停止所有服务:

make down

尾部MCP服务器日志:

make logs

📝 Makefile 命令

命令 描述
make build 构建 Docker 镜像
构成 启动所有容器
make down 停止所有容器
make restart 重启所有容器和卷
生成日志 查看MCP服务器日志尾部
make psql 打开 PostgreSQL 交互式 shell
构建 sqlcmd 打开 SQL Server 交互式外壳
make seed 运行数据库播种(init-db.sh)
make init_metadata 运行MCP元数据初始化

⚡ 元数据初始化

启动容器后,初始化元数据存储:

make init_metadata

这将:

  • 加载 servers.yml 配置文件(src/config/servers.yml)

  • 使用crypto_utils加密服务器密码

  • 如果服务器不存在,则将其插入到服务器表中

  • 可选地,为后续阶段同步数据库、模式、表和列

🔒 密码加密

存储在 PostgreSQL 中的密码使用 Fernet 进行加密。

  • 生成一个密钥:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
  • 将密钥存储在 .env 文件中,变量名为 ENCRYPTION_KEY

🗓 高层时间线/路线图

阶段 描述 可交付成果 状态
(无) (无) (无) (无)
基础与环境设置 Docker Compose、项目脚手架搭建、配置与密钥管理 ✅ 已完成 **
根据全局信息,翻译目标语言为中文,且“API”必须翻译为“API”。以下是原文内容的翻译: ⚡ 第三阶段
缓存层(Redis) 元数据缓存、查询结果缓存、失效处理、指标 🔜 下一步 🧠 第四阶段
核心查询执行引擎 查询规划器、连接管理器、调度器、执行器、结果聚合器、规范化器、断路器、可观测性模块 🔜 下一步 🌐 第五阶段
根据上述信息,以下是原文内容的翻译:MCP API层 API服务器、请求验证、认证/访问控制列表、流处理、错误处理 🔜 下一个 ** 🧩(一个拼图或积木的图标)** 第六阶段
可观测性与管理工具 指标、日志、追踪、管理界面、命令行工具 🔜 下一步 🧪 第七阶段

| 测试与质量保证 | 单元测试、集成测试、负载测试、故障注入测试、性能调优 | 🔜 下一步 |

  • 💡 小贴士

  • 将 servers.yml 文件保存在 /config 文件夹中,以便于移植和环境隔离

  • 使用 .env 文件来覆盖密码或敏感设置