火柴人武林大会
156.74M · 2026-02-04
这篇笔记我们记录: 我们使用FastMCP新建一个MCP server, 并在Cursor IDE里调用的过程。主要分为2部分
会有一些概念,MCP、FastMCP、MCP Host(主机)、MCP Client(客户端)、MCP Server(服务端)),还有uvpython的新型包管理工具,@tool、@resource、@prompt 是 FastMCP(以及整个 MCP 协议生态)中最核心的三个服务器端装饰器,需要了解。
文档主要介绍实际操作的过程,没去介绍那些概念(感兴趣多查下MCP官网),希望通过操作的成果来反过来理解 这些概念,也更生动一点。
uv init mcp-server-demo
使用 uv 工具初始化一个名为 mcp-server-demo 的全新 Python 项目,会自动创建项目目录、标准化的配置文件和基础的项目结构,替代传统的手动创建 pyproject.toml、虚拟环境等操作。
uv add fastmcp
安装FastMcp依赖 可以看到我用的是 最新稳定版Python 3.14.2 安装依赖后自动创建了虚拟环境, 安装FastMCP会自动安装MCP
uv 给我们初始化的项目结构截图
打开main.py, 复制如下代码,这就是我们的mcp server 代码了
# server.py 或你的主文件
from fastmcp import FastMCP
mcp = FastMCP("演示 ")
@mcp.tool()
def add(a: int, b: int) -> int:
"""将两个数字相加"""
return a + b
@mcp.tool()
def greet(name: str, style: str = "friendly") -> str:
"""按照选择的语气向某人问好"""
style_key = (style or "friendly").strip().lower()
if style_key == "formal":
return f"{name},您好!祝您一切顺利,工作生活皆如意。"
if style_key == "casual":
return f"{name},嘿!祝你今天心情超好,啥事都顺!"
# 默认:友好风格
return f"{name},你好!很高兴见到你,愿你今天平安喜乐、心想事成。"
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""获取个性化的问候语"""
return f"你好,{name}!"
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
"""生成问候提示词"""
styles = {
"friendly": "请写一段温暖、友好的问候语",
"formal": "请写一段正式、专业的问候语",
"casual": "请写一段轻松、随意的问候语",
}
return f"{styles.get(style, styles['friendly'])},对方名字是 {name}。"
if __name__ == "__main__":
# mcp.run(transport="streamable-http", json_response=True)
# 或者本地调试最常用:
mcp.run(transport="stdio")
上面的代码中,我有一个tool 问候,还有一个prompt 问候,tool问候会严格按照我的传参、定义的内容返回,prompt会由大模型自由发挥。
执行下面命令
uv run python main.py
是通过 uv 工具在项目的虚拟环境中执行 python main.py 命令,核心作用是保证脚本运行时使用的是项目专属的 Python 解释器和依赖环境,避免全局环境的依赖冲突。
我们的FastMCP
启动成功:️
当前运行中:️(只要终端没关闭、没报错退出)
通信方式:通过 stdio(命令行输入输出),适合本地快速测试
版本:在用 2.14.4(3.0 还没正式发布,提示先 pin < 3 版本以保证生产稳定)
Cursor 调用server.py(里面有 mcp = FastMCP(...) 和各种 @tool / @prompt), 打开Cursor 找到MCP 配置
在mcp.json里写如下代码
{
"mcpServers": {
"demo-mcp-local": {
"name": "Demo MCP (Local uv run)",
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"/Users/gongzemin/Documents/playground/mcp-server-demo",
"run",
"main.py"
],
"description": "我的 FastMCP 本地演示服务器(包含加法、问候、提示模板等工具)",
"isActive": true,
"env": {
"PYTHONIOENCODING": "utf-8",
"PYTHONUNBUFFERED": "1"
}
}
}
}
看到我们这个MCP配置的灯是绿色的 就表示配置成功了
新建一个对话框,选择agent,提问
使用demo-mcp-local 友好的方式问候刘亦菲
就会调用我们写好的mcp-server里面@tool 这个方法,并且能识别出参数 name是刘亦菲 style是友好的
@mcp.tool()
def greet(name: str, style: str = "friendly") -> str:
"""按照选择的语气向某人问好"""
style_key = (style or "friendly").strip().lower()
if style_key == "formal":
return f"{name},您好!祝您一切顺利,工作生活皆如意。"
if style_key == "casual":
return f"{name},嘿!祝你今天心情超好,啥事都顺!"
# 默认:友好风格
return f"{name},你好!很高兴见到你,愿你今天平安喜乐、心想事成。"
可以接着提问,都不用说使用demo-mcp-local
再调用下我们那个求和工具
用user-demo-mcp-local 计算1109+10
我们就成功的新建了MCP server, 并在Cursor调用~
服役约 23 年:微软退役 Win10/Win11 部署工具 MDT
消息称 Anthropic 及 OpenAI 的 AI 爬虫“蚕食”互联网,内容网站被“吸血”后回报寥寥
2026-02-04
2026-02-04