mcp 学习第二篇
在上一篇文章中我们简要的介绍了MCP协议的要素,并使用python动手写了一个mcp demo程序,实现了mcp client和mcp server,调用新出的Qwen3-32b模型,实现了使用自然语言对本地sqlite数据库的查询和修改。今天我们将使用mcp协议的规则和官方提供的工具,将昨天demo代码改造为一个可以发布的mcp server,并加载到通义灵码和cherry studio中。
在上一篇文章中我们简要的介绍了MCP协议的要素,并使用python动手写了一个mcp demo程序,实现了mcp client和mcp server,调用新出的Qwen3-32b模型,实现了使用自然语言对本地sqlite数据库的查询和修改。今天我们将使用mcp协议的规则和官方提供的工具,将昨天demo代码改造为一个可以发布的mcp server,并加载到通义灵码和cherry studio中。
mcp的官方文档中提供了非常详细的说明和例子代码。MCP 简介 - MCP 中文文档。
mcp官方推荐的python运行工具是uv,uv是一个用rust开发的python项目和包管理工具。
一、搭建开发环境
我这里使用的环境是
- windows11
- vscode(版本: 1.100.2)
- 通义灵码(vscode插件)
- cherry studio 国人开发无需科学上网
安装uv
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
之后请务必重启你的终端,以确保 uv 命令被识别
# 为我们的项目创建一个新 directory
uv init sqlite_mcp
cd sqlite_mcp
# 创建 virtual environment 并激活它
uv venv
.venv\Scripts\activate
# 安装依赖库
uv add mcp[cli]
二、编写mcp server代码
将上篇的代码做适当改造即可。
在sqlite_mcp目录下创建代码文件sqlite_mcp.py,可以看到下面的两个工具函数加上了@mcp_tool的装饰器,这种调用方式感觉像flask。
import os
import sqlite3
from typing import Any
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("sqlite_mcp") # 初始化 FastMCP server
def get_all_tables(db_path="mcp_test.db"):
"""获取SQLite数据库中所有表的名称"""
# 连接到SQLite数据库
conn = sqlite3.connect(db_path)
# 创建一个游标对象,用于执行SQL命令
cursor = conn.cursor()
# 执行SQL命令,获取所有表的名称
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
# 从查询结果中提取表名,存储到列表中
tables = [table[0] for table in cursor.fetchall()]
# 关闭游标
cursor.close()
# 关闭数据库连接
conn.close()
# 返回包含所有表名称的列表
return tables
@mcp.tool()
def get_all_table_structures():
"""
获取SQLite数据库中所有表的结构信息
"""
db_path="mcp_test.db"
# 获取数据库中的所有表名
tables = get_all_tables(db_path)
# 初始化一个字典来存储所有表的结构信息
all_structures = {}
# 连接到SQLite数据库
conn = sqlite3.connect(db_path)
# 创建一个游标对象来执行SQL命令
cursor = conn.cursor()
# 遍历每一张表
for table in tables:
# 执行PRAGMA命令获取表的结构信息
cursor.execute(f"PRAGMA table_info({table})")
# 获取所有列信息并存储到字典中
columns = cursor.fetchall()
all_structures[table] = columns
# 关闭游标和数据库连接
cursor.close()
conn.close()
# 返回包含所有表结构信息的字典
return all_structures
@mcp.tool()
def execute_query(sql, params=None):
"""
执行SQL查询并返回结果
:param sql: SQL查询语句
:param params: SQL查询参数
"""
db_path="mcp_test.db"
try:
conn = sqlite3.connect(db_path)
conn.row_factory = sqlite3.Row # 结果转字典
cursor = conn.cursor()
# 执行查询(带参数校验)
cursor.execute(sql, params or ())
# 自动判断是否为SELECT语句
if sql.strip().upper().startswith('SELECT'):
results = cursor.fetchall()
return [dict(row) for row in results]
else:
conn.commit()
return {"affected_rows": cursor.rowcount}
except sqlite3.Error as e:
conn.rollback()
print(f"数据库错误: {e}")
return f"数据库错误: {e}"
finally:
cursor.close()
conn.close()
if __name__ == "__main__":
# 初始化并运行 server
mcp.run(transport='stdio')
将上一篇文章中使用测试数据库mcp_test.db也拷贝过来。
使用uv run sqlite_mcp.py来测试一下代码,若没有报错,说明代码没有问题。
三、通义灵码添加mcp server
在vscode中打开通义灵码的智能体对话窗口,模型选择qwen3,点击MCP工具。

点击下面的小图标,打开通义灵码的mcp配置文件。

在mcp配置文件中添加下面的内容,里面的路径为开发目录。
"sqlite_mcp": {
"command": "uv",
"args": [
"--directory",
"D:\\博客\\mcp1\\sqlite_mcp",
"run",
"sqlite_mcp.py"
]
}
添加完成后,就会自动识别出代码中的工具。

下面就可以和数据库对话了,如下图所示,效果还不错。

四、在cherry studio添加mcp server
首先在Cherry Studio官网下载安装 cherry studio。
安装完成,打开页面,点击左下脚的设置按钮,设置要使用的模型,这里选择阿里的qwen3-32b模型,这里要填上api key。

在cherry studio中安装uv工具

在mcp服务器的配置文件中添加上我们的配置项。

添加完成后,选择开启。

这样就配置完成了就可以使用这个mcp server了。
进入对话界面,添加sqlite_mcp这个服务器,就可以与数据库进行对话了。

效果还是很不错的。

参考资料
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)