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打开这个项目

然后直接执行运行进行测试没有依赖的则安装依赖,
两种mcp 在cursor或者claude中的配置
下图是cursor的配置
cursor实则随意新建个文件夹打开之后
创建.cursor/mcp.json就行。
mcp.json内容参考底部最后 由于和cluade是通用的配置



claude
打开设置 进行配置,这个感觉好像比较弱
看不到支持的指令,但是他编码是最强的。所以还是比较推荐claude,

这是我写的项目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,直接改写为 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

相关配置:

"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了,然后这边的开关也成功的打开了。

最后切换为mcp即可

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

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

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

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

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


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



