[AI工作流搭建笔记]基于cursor+MCP+python(1)
本文介绍了如何利用Cursor和MCP协议搭建一个简单的AI工作流,实现文件读取功能。作者通过实习项目探索了嵌入式代码管理与迁移的自动化方案,展示了最小化的MCP工具实现模板。文章详细说明了环境搭建步骤(包括uv工具安装和项目初始化)、代码编写方法(基于FastMCP的文件读取服务)以及Cursor端的配置流程。最终效果是通过Cursor中的大模型调用MCP工具读取指定文件内容并返回结果,为开发者
简介
最近在进行实习,完成了一些嵌入式的代码开发后需要对客户的代码进行管理与迁移,主管和我说可以尝试使用AI搭建工作流,所以就了解了一下,感觉还是很有意义的。
本文将实现一个最简单的基于MCP协议的AI工具,具体功能是通过cursor的大模型调用MCP工具输入文件路径,然后工具返回文件内容,cursor中的大模型获取返回值并打印。该项目内容较官方展示的范例体量更小,更好展示cursor是怎么通过MCP调用这些工具的。
效果
cursor中的LLM调取MCP工具并返回工具返回内容。(Ciallo~ (∠・ω< )⌒★)
环境搭建
环境搭建跟着官网来也是可以的,新建一个文件然后打开文件的powershell,在powershell里面输入
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
安装成功后会有以下反馈
C:\Users\senmiao.zhang>powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Downloading uv 0.8.16 (x86_64-pc-windows-msvc)
Installing to C:\Users\senmiao.zhang\.local\bin
uv.exe
uvx.exe
uvw.exe
everything's installed!
To add C:\Users\senmiao.zhang\.local\bin to your PATH, either restart your shell or run:
set Path=C:\Users\senmiao.zhang\.local\bin;%Path% (cmd)
$env:Path = "C:\Users\senmiao.zhang\.local\bin;$env:Path" (powershell)
接下来根据官方的示例进行生成项目
# 为我们的项目创建一个新 directory
uv init read_file
cd read_file
# 创建 virtual environment 并激活它
uv venv
.venv\Scripts\activate
# 安装 dependencies
uv add mcp[cli] httpx
# 创建我们的 server file
new-item read_file.py
这样我们的项目初始化就完成了,然后我在项目文件夹里面加了一个code_store
文件夹,里面放着了一个txt文件。以下是文件架构。
编写代码
打开read_file.py
文件,把以下代码复制进去
# read_file.py
import asyncio
from mcp.server.fastmcp import FastMCP
# 初始化 FastMCP Server
mcp = FastMCP("file-reader")
# 定义工具
@mcp.tool()
async def read_file(path: str) -> str:
"""
读取指定文件内容并返回
Args:
path: 文件路径
"""
try:
with open(path, "r", encoding="utf-8") as f:
content = f.read()
print(f"[MCP] 成功读取文件: {path}, 内容长度={len(content)}")
return content # 直接返回字符串
except Exception as e:
print(f"[MCP] 读取文件失败: {path}, 错误: {e}")
return f"Error reading file: {e}"
# 运行 MCP Server
if __name__ == "__main__":
print("[MCP] File Reader Server 启动中...")
mcp.run(transport="stdio")
然后打开cursor打开设置并添加mcp
点击添加后会打开一个mcp.json
的文件,初始应该是
{
"mcpServers": {
}
}
替换为以下代码
{
"mcpServers": {
"file-reader": {
"type": "stdio",
"command": "python",
"args": ["C:/Users/senmiao.zhang/Desktop/ai-workflow-demo/read_file/read_file.py"],
"cwd": "C:/Users/senmiao.zhang/Desktop/ai-workflow-demo/read_file"
}
}
}
这样我们就搭建好了mcp服务器和cursor端的调用(颇有一种ROS的感觉)
如果mcp工具栏中有正常显示绿灯的化就可以正常调用了,把AI调成自动模式他就会自己调用MCP。
最小实现架构
我让AI生成了一个MCP工具的最小实现模板,这样我们就可以知道cursor中的AI是怎么调用的
"""
MCP 工具最小实现模板
说明:
1. 使用 FastMCP 可以自动注册工具,无需手动管理 list_tools 或 call_tool。
2. 工具函数直接返回结果即可,不需要 ToolResult 类型。
3. 通过 STDIO 方式启动,方便被 Cursor 等 MCP 客户端调用。
"""
import asyncio
from mcp.server.fastmcp import FastMCP
# -------------------------------
# 1. 初始化 FastMCP Server
# -------------------------------
# 参数 "tool-server" 是 MCP Server 名称,可随意命名
mcp = FastMCP("tool-server")
# -------------------------------
# 2. 定义工具
# -------------------------------
# 使用 @mcp.tool() 装饰器注册工具
# 工具函数可以是同步或异步函数
@mcp.tool()
async def read_file(path: str) -> str:
"""
读取指定文件的内容并返回字符串
Args:
path: 文件路径(字符串)
Returns:
文件内容,如果出错返回错误信息字符串
"""
try:
# 打开文件并读取内容
with open(path, "r", encoding="utf-8") as f:
content = f.read()
print(f"[MCP] 成功读取文件: {path}, 内容长度={len(content)}")
return content # 直接返回字符串
except Exception as e:
# 出错时打印日志并返回错误信息
print(f"[MCP] 读取文件失败: {path}, 错误: {e}")
return f"Error reading file: {e}"
# 可以在这里继续定义更多工具
# 例如:
# @mcp.tool()
# async def write_file(path: str, content: str) -> str:
# ...
# -------------------------------
# 3. 启动 MCP Server
# -------------------------------
# transport="stdio" 表示通过标准输入输出与客户端通信
if __name__ == "__main__":
print("[MCP] Tool Server 启动中...")
mcp.run(transport="stdio")
cursor端mcp.json
的代码
{
"mcpServers": {
"file-reader": {
"type": "stdio",
"command": "python",
"args": ["C:/Users/senmiao.zhang/Desktop/ai-workflow-demo/read_file/read_file.py"],
"cwd": "C:/Users/senmiao.zhang/Desktop/ai-workflow-demo/read_file"
}
}
}
字段 | 作用 |
---|---|
file-reader |
MCP Server 名称,Cursor 内部用这个名字调用工具 |
type |
启动方式,这里用 "stdio" ,表示通过标准输入输出与 Server 通信 |
command |
启动命令,这里是 "python" ,表示使用 Python 运行 MCP Server 脚本 |
args |
命令参数,这里是 MCP Server 的 Python 文件路径 |
cwd |
工作目录,Cursor 启动 Python 脚本时的当前目录,保证相对路径正确 |
可能的坑
- 一个是我使用powershell的时候出现了一下报错,可能是因为我的电脑是办公电脑
.venv\Scripts\activate : 无法加载文件 C:\Users\senmiao.zhang\Desktop\ai-workflow-demo\test1\.venv\Scripts\activate.ps1
,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_P
olicies。
所在位置 行:1 字符: 1
+ .venv\Scripts\activate
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [],PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
输入一下指令解决
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
- 还有一个是MCP版本的问题,这个我还不是很清楚,我使用官方最新的库编译一直不过,后面直接选择FastMCP了,这个还是可以使用的。
小结:我觉得MCP是一个非常有意思的协议,感觉就像是AI领域的ROS。这个博客只是大概调用了一下让我体会到了AI工具运作起来的效果,感觉还是不错的。对于MCP的细节这些我还没有怎么看,接下来几篇应该会仔细的剖析MCP的细节。希望这篇博客对正在尝试搭建工作流的朋友有所启发。
更多推荐
所有评论(0)