2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

内容分享4天前发布
1 0 0

x

在mcp没怎么流行的时候常常听到有广子说加什么搭建本地应用场景的大模型,那种我想是用来训练数据吧,
但是对于我们新手小白来说,文档知识库 + mcp才是最合适的,那种训练 的,不敢想

给sql server写了一个mcp, 用的是 FastMCP写法,之前的写法作废了,据说这种写法更容易实现
V安装:https://docs.astral.sh/uv/getting-started/installation/
MCP Github首页:https://github.com/modelcontextprotocol
MCP Python SKD: https://github.com/modelcontextprotocol/python-sdk


from mcp.server.fastmcp import FastMCP

# Create an MCP server
mcp = FastMCP("Demo")


# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b


# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"


# Add a prompt
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
    """Generate a greeting prompt"""
    styles = {
        "friendly": "Please write a warm, friendly greeting",
        "formal": "Please write a formal, professional greeting",
        "casual": "Please write a casual, relaxed greeting",
    }

    return f"{styles.get(style, styles[ friendly ])} for someone named {name}."
def main():
    print("Hello from sqlservermcp!")


if __name__ == "__main__":
    main()

配置

第一种 UV
安装uv
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
配置目录环境

C:UsersAdministratorPycharmProjectsSqlserverMCP>uv init . -p

C:UsersAdministratorPycharmProjectsSqlserverMCP>uv python list
cpython-3.14.0b4-windows-x86_64-none                 <download available>
cpython-3.14.0b4+freethreaded-windows-x86_64-none    <download available>
cpython-3.13.5-windows-x86_64-none                   C:UsersAdministratorAppDataRoaminguvpythoncpython-3.13.5-windows-x86_64-nonepython.exe
cpython-3.13.5+freethreaded-windows-x86_64-none      <download available>
cpython-3.12.11-windows-x86_64-none                  <download available>
cpython-3.11.13-windows-x86_64-none                  <download available>
cpython-3.10.18-windows-x86_64-none                  <download available>
cpython-3.10.9-windows-x86_64-none                   D:Python310python.exe
cpython-3.9.23-windows-x86_64-none                   <download available>
cpython-3.8.20-windows-x86_64-none                   <download available>
pypy-3.11.13-windows-x86_64-none                     <download available>
pypy-3.10.16-windows-x86_64-none                     <download available>
pypy-3.9.19-windows-x86_64-none                      <download available>
pypy-3.8.16-windows-x86_64-none                      <download available>
graalpy-3.11.0-windows-x86_64-none                   <download available>
graalpy-3.10.0-windows-x86_64-none                   <download available>

C:UsersAdministratorPycharmProjectsSqlserverMCP>uv init . -p 3.13.5
Initialized project `sqlservermcp` at `C:UsersAdministratorPycharmProjectsSqlserverMCP`

C:UsersAdministratorPycharmProjectsSqlserverMCP>uv add "mcp[cli]"
Using CPython 3.13.5
error: failed to remove directory `C:UsersAdministratorPycharmProjectsSqlserverMCP.venv`: 拒绝访问。 (os error 5)

C:UsersAdministratorPycharmProjectsSqlserverMCP>uv add "mcp[cli]"
Using CPython 3.13.5
error: failed to remove directory `C:UsersAdministratorPycharmProjectsSqlserverMCP.venv`: 拒绝访问。 (os error 5)

C:UsersAdministratorPycharmProjectsSqlserverMCP>uv add "mcp[cli]"
Using CPython 3.13.5
error: Project virtual environment directory `C:UsersAdministratorPycharmProjectsSqlserverMCP.venv` cannot be used because it is not a compatible environment but cannot be recreated because it is not a virtual environment

C:UsersAdministratorPycharmProjectsSqlserverMCP>uv add "mcp[cli]"
Using CPython 3.13.5
error: Project virtual environment directory `C:UsersAdministratorPycharmProjectsSqlserverMCP.venv` cannot be used because it is not a compatible environment but cannot be recreated because it is not a virtual environment

C:UsersAdministratorPycharmProjectsSqlserverMCP>uv init . -p 3.13.5
error: Project is already initialized in `C:UsersAdministratorPycharmProjectsSqlserverMCP` (`pyproject.toml` file exists)

C:UsersAdministratorPycharmProjectsSqlserverMCP>uv init . -p 3.13.5
Initialized project `sqlservermcp` at `C:UsersAdministratorPycharmProjectsSqlserverMCP`

C:UsersAdministratorPycharmProjectsSqlserverMCP>uv add "mcp[cli]"
Using CPython 3.13.5
Creating virtual environment at: .venv
Resolved 35 packages in 2.13s
⠇ Preparing packages... (13/15)
pygments                  ------------------------------ 329.92 KiB/1.17 MiB
pywin32                   ------------------------------ 323.83 KiB/9.05 MiB                                                                                                                                                                                                                                                                                                                                                                                  

上面刚开始是直接用开发工具创建的.venv导致的问题直接删掉关闭开发工具,重新初始化即可。
pyproject.toml
关于调试:

mcp 有两种方式链接
第一种调试:
进入指定目录之后
uv run sqlserver_mcp.server.py
如果没报错代表成功了,

[project]
name = "sqlserver-fastmcp"
version = "1.0.0"
description = "SQL Server FastMCP Server for Claude"
authors = [
    {name = "Your Name", email = "your.email@example.com"}
]
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
    "fastmcp>=0.1.0",
    "pyodbc>=4.0.0",
]

[project.optional-dependencies]
dev = [
    "pytest>=7.0.0",
    "black>=23.0.0",
    "flake8>=6.0.0",
]

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

# 添加这个部分 - 关键配置
[tool.hatch.build.targets.wheel]
packages = ["sqlserver_mcp"]

[tool.black]
line-length = 88
target-version = [ py38 ]

[tool.uv]
dev-dependencies = [
    "pytest>=7.0.0",
    "black>=23.0.0",
    "flake8>=6.0.0",
]

第二种方式:
直接用pychram打开这个项目

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

然后直接执行运行进行测试没有依赖的则安装依赖,

两种mcp 在cursor或者claude中的配置

下图是cursor的配置

cursor实则随意新建个文件夹打开之后
创建.cursor/mcp.json就行。
mcp.json内容参考底部最后 由于和cluade是通用的配置

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

claude
打开设置 进行配置,这个感觉好像比较弱

看不到支持的指令,但是他编码是最强的。所以还是比较推荐claude,

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

这是我写的项目2种写法都链接成功

{
    "mcpServers": {
        "blender": {
            "command": "uvx",
            "args": [
                "blender-mcp"
            ]
        },
        "sqlserver-mcp-uv": {
            "command": "uv",
            "type": "stdio",
            "isActive": true,
            "description": "sql server mcp 调用",
            "args": ["--directory", "C:\Users\Administrator\PycharmProjects\SqlserverMCP", "run", "sqlserver-mcp.py"],
            "env": {
                "DB_SERVER": "localhost",
                "DB_DATABASE": "X",
                "DB_USERNAME": "sa",
                "DB_PASSWORD": "123456",
                "DB_DRIVER": "ODBC Driver 17 for SQL Server"
            }
        },
        
        "sqlserver-mcp1": {
            "command": "python",
            "args": ["C:\Users\Administrator\PycharmProjects\SqlserverMCP\sqlserver-mcp.py"],
            "env": {
                "DB_SERVER": "localhost",
                "DB_DATABASE": "X",
                "DB_USERNAME": "sa",
                "DB_PASSWORD": "123456",
                "DB_DRIVER": "ODBC Driver 17 for SQL Server"
            }
        }
    }
}

调试

参数模式似乎不方便调试,
npm install -g @modelcontextprotocol/inspector
npx @modelcontextprotocol/inspector python sqlserver-mcp.py

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

方法2,直接改写为 sse模式
这样的话直接开发工具运行python项目,然后 这边连接上就能看到调试日志了,

另外cursor不支持sse了。 直接改用cherry来玩,调试通过之后再思考换回来就行。

   """主函数"""
    args = parse_arguments()

    # 设置日志级别
    logging.getLogger().setLevel(getattr(logging, args.log_level))

    try:
        if args.transport == "stdio":
            logger.info("启动 stdio 模式")
            # FastMCP 默认支持 stdio,直接运行
            app.run()

        elif args.transport == "sse":
            port = args.port or 3001
            logger.info(f"启动 SSE 模式,监听 {args.host}:{port}")
            # FastMCP 的 SSE 模式
            app.run(transport="sse", host=args.host, port=port)

        else:
            port = args.port or 3002
            logger.info(f"启动 {args.transport}模式,监听 {args.host}:{port}")
            # FastMCP 的 WebSocket 模式
            app.run(transport=args.transport, host=args.host, port=port)

    except KeyboardInterrupt:
        logger.info("服务器已停止")
    except Exception as e:
        logger.error(f"服务器运行错误: {e}")
        raise

python .sqlserver-mcp.py --transport sse

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

相关配置:

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

       "sqlserver-sse": {
   
                "type": "sse",
                "url": "http://localhost:3001/sse"
        },
        "sqlserver-streamable-http": {
   
                "type": "streamableHtttp",
                "url": "http://localhost:3001/sse",
        "headers":{
        "Content-Type":"application/json",
        "Authorization":"Bearer xx"
        }
        },

如果路径填写错了可以看到如下图 显示404 ,必定要加上/sse
然后下图后面就200 ok了,然后这边的开关也成功的打开了。

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

最后切换为mcp即可

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

由于许多的模型配置api都附小,最后用的google 的chat api进行调试mvp 我发送了一个 让他帮我查询下用户表,根据本地文件夹的表来分析是哪个然后他本地没找到(由于这个读取配置的地方没弄好) 最后自动连接数据库 分析出来了用户表 然后执行了查询。

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

但是我总感觉这玩意好笨cherry studio, 不好用 总是不自动调用mcp
很显然cursor比那玩意机智太多了,

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

cursor mcp 执行数据库查询 强如狗 稳如狗 ,

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

最后我找到了cursor的mcp文档,理论上也支持sse
Cursor – 模型上下文协议 (MCP)

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

{
    "mcpServers": {
        "blender": {
            "command": "uvx",
            "args": [
                "blender-mcp"
            ]
        },
        "sqlserver-mcp-uv": {
            "command": "uv",
            "type": "stdio",
            "isActive": true,
            "description": "sql server mcp 调用",
            "args": ["--directory", "C:\Users\Administrator\PycharmProjects\SqlserverMCP", "run", "sqlserver-mcp.py"],
            "env": {
                "DB_SERVER": "localhost",
                "DB_DATABASE": "xxx",
                "DB_USERNAME": "sa",
                "DB_PASSWORD": "12345678",
                "DB_DRIVER": "ODBC Driver 17 for SQL Server"
            }
        },
        "mcp-sqlserver-sse": {
            "url": "http://localhost:3001/sse",
            "headers": {
              "API_KEY": "value"
            }
          }

        

 
    }
}

叹为观止,可以不需要知道是什么表,我写过的一个拉取存储 视图到本地 ,也支持搜索本地脚本和在线脚本,他能智能分析出是哪个表,然后自动写查询语句并实现查询。

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

最后 我看了下, 也有人开发了实时查询数据库的,但是能不能直接分析存储过程从而直接推断查询关联语句就不知道了, 我这个是能直接分析代码来自动写查询语句的。

2天搞定一个mcp python ai模型的本地业务扩展能力 编写mcp 两种io方式和其他 实现一个mcp 实时查询sql server

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...