MCP SQL Server

MCP SQL Server

一个 FastMCP 服务器,提供与 MS SQL 数据库的自然语言交互,使用户能够通过对话式 AI 界面查询数据、列出表、描述结构以及执行数据库操作。

Category
访问服务器

README

MCP SQL Server

一个通过对话式 AI 界面提供 SQL 数据库交互工具的 FastMCP 服务器。

概述

本项目创建一个服务器,通过对话式 AI 界面公开 MS SQL Server 操作。它使用 FastMCP 框架提供用于查询和操作 SQL 数据的工具,允许用户使用自然语言与数据库进行交互。

功能

  • 执行 SQL 查询并查看结果
  • 列出数据库中可用的表
  • 描述表结构,包括列信息
  • 执行非查询操作(INSERT、UPDATE、DELETE)
  • 列出系统上可用的 ODBC 驱动程序
  • 查看数据库信息和服务器详细信息

要求

  • Python 3.7+
  • pyodbc
  • asyncio
  • FastMCP 框架
  • Microsoft SQL Server
  • ODBC Driver 17 for SQL Server

安装

  1. 安装 Python 依赖项:
pip install pyodbc asyncio fastmcp
  1. 确保已安装 Microsoft SQL Server 和 ODBC Driver 17 for SQL Server。

  2. 在脚本中配置连接设置:

# 连接参数
SERVER = "server\\instance"  # 更改为您的 SQL Server 实例
DATABASE = "db_name"              # 更改为您的数据库名称

用法

运行服务器:

python mcp_sql_server.py

服务器将初始化并建立与指定 SQL Server 数据库的连接。

可用工具

query_sql

执行 SQL 查询并返回结果。

query_sql(query: str = None) -> str
  • 如果未提供查询,则默认为 SELECT * FROM [dbo].[Table_1]
  • 以格式化的字符串形式返回查询结果

list_tables

列出数据库中所有可用的表。

list_tables() -> str
  • 以字符串形式返回表名列表

describe_table

获取特定表的结构。

describe_table(table_name: str) -> str
  • table_name: 要描述的表的名称
  • 返回列信息,包括名称和数据类型

execute_nonquery

执行 INSERT、UPDATE、DELETE 或其他非查询 SQL 语句。

execute_nonquery(sql: str) -> str
  • sql: 要执行的 SQL 语句
  • 返回操作结果,包括受影响的行数
  • 自动处理事务(提交/回滚)

list_odbc_drivers

列出系统上所有可用的 ODBC 驱动程序。

list_odbc_drivers() -> str
  • 返回已安装的 ODBC 驱动程序的逗号分隔列表

database_info

获取有关连接的数据库的常规信息。

database_info() -> str
  • 返回服务器名称、数据库名称、SQL Server 版本、当前服务器时间和表计数

架构

服务器使用异步架构来避免阻塞操作:

  1. 生命周期管理: app_lifespan 上下文管理器处理数据库连接的设置和拆卸。

  2. 非阻塞操作: 数据库操作在单独的线程中使用 asyncio.get_event_loop().run_in_executor() 运行,以防止阻塞主事件循环。

  3. 错误处理: 所有操作都包括全面的错误处理和有用的错误消息。

错误处理

服务器处理各种错误情况:

  • 数据库连接失败
  • SQL 查询语法错误
  • 找不到表错误
  • 与权限相关的问题

所有错误都会被记录,并且会将适当的错误消息返回给客户端。

自定义

要添加新的数据库工具或修改现有工具,请遵循现有工具中使用的模式:

@mcp.tool()
async def your_new_tool(ctx: Context, param1: str) -> str:
    """Documentation for your tool"""
    try:
        conn = ctx.request_context.lifespan_context["conn"]
        
        if conn is None:
            return "Database connection is not available."
            
        def your_db_operation():
            # Your database operations here
            pass
            
        loop = asyncio.get_event_loop()
        result = await loop.run_in_executor(None, your_db_operation)
        
        # Process and return results
        return "Your result"
    except Exception as e:
        return f"Error: {str(e)}"

安全注意事项

  • 服务器使用 Windows 身份验证 ("Trusted_Connection=yes")
  • 考虑为 SQL 查询实施输入验证以防止 SQL 注入
  • 根据最小权限原则限制数据库用户权限

故障排除

常见问题:

  1. 连接错误: 验证 SQL Server 实例名称并确保它正在运行
  2. ODBC 驱动程序错误: 确认已安装 ODBC Driver 17 for SQL Server
  3. 权限错误: 检查运行该应用程序的 Windows 用户是否具有适当的 SQL Server 权限

许可证

[您的许可证信息]

联系方式

[您的联系方式]

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选