FastMCP实战案例教程
一、地图查询AI工具
1.1 项目介绍
我们将构建一个简单的地图查询服务,用户输入城市名称,大模型调用FastMCP工具,通过地理API查询该城市的经纬度,并将结果返回。
1.2 安装与环境准备
创建虚拟环境(推荐)
python3 -m venv mcp-env
source mcp-env/bin/activate安装FastMCP
pip install fastmcp安装地图查询依赖(使用OpenStreetMap Nominatim API)
pip install requests1.3 完整代码实现:地图查询工具
创建文件map_mcp_server.py:
from fastmcp import FastMCP
import requests
# 创建MCP实例
mcp = FastMCP("MapLookup")
# 定义地图查询工具
@mcp.tool()
def geo_lookup(location: str) -> dict:
"""
查询地理位置,返回经纬度等信息
"""
url = "https://nominatim.openstreetmap.org/search"
params = {
"q": location,
"format": "json",
"limit": 1
}
headers = {"User-Agent": "FastMCP-Demo/1.0"}
response = requests.get(url, params=params, headers=headers)
data = response.json()
if not data:
return {"error": f"未找到位置: {location}"}
result = data[0]
return {
"display_name": result["display_name"],
"latitude": result["lat"],
"longitude": result["lon"]
}
# 启动MCP服务
if __name__ == "__main__":
mcp.run()1.4 运行MCP服务
在终端执行:
python map_mcp_server.py默认会在http://localhost:3000启动MCP服务。你将看到如下启动日志:
✅ Server 'MapLookup' running at http://localhost:30001.5 测试运行效果(模拟模型调用)
你可以使用Postman或CURL模拟模型调用MCP工具:
curl -X POST http://localhost:3000/tools/geo_lookup \
-H "Content-Type: application/json" \
-d '{"location": "上海"}'返回结果示例:
{
"display_name": "上海市, 中国",
"latitude": "31.230416",
"longitude": "121.473701"
}1.6 集成到大模型(如Claude、ChatGPT)
如果你使用支持MCP的大模型(如Claude 3、OpenAI GPT - 4.5 with MCP),你只需将MCP服务器地址注册为工具服务,模型即可通过自然语言调用它。示例Prompt:“请告诉我北京的经纬度”,模型会自动选择geo_lookup工具并返回准确坐标。
二、企业级MCP服务
2.1 为什么选择FastMCP
极速开发体验:仅需3行代码即可创建具备完整功能的MCP服务器。
from fastmcp import FastMCP
mcp = FastMCP("智能客服系统")
@mcp.tool()
def query_order(order_id: str) -> str:
return f"订单{order_id}状态:已发货"原生Python支持:类型注解自动验证输入参数,支持
async/await异步处理,无缝集成Pydantic数据模型,兼容Pillow等主流图像库。企业级协议支持:完整实现Model Context Protocol标准,提供资源(Resources)安全访问控制、工具(Tools)执行审计追踪、上下文(Context)进度管理、图像(Image)自动格式转换。
2.2 五分钟快速入门指南
2.2.1 环境准备
推荐使用uv进行依赖管理:
uv pip install fastmcp2.2.2 创建首个MCP服务
新建server.py文件:
# 企业知识库服务
from fastmcp import FastMCP
mcp = FastMCP("知识引擎", dependencies=["pymysql"])
@mcp.resource("kb://{doc_id}")
def get_document(doc_id: str) -> str:
"""获取知识库文档内容"""
return f"文档{doc_id}内容:AI应用最佳实践..."
@mcp.tool()
def search_docs(keyword: str) -> list[str]:
"""全文检索知识库"""
return [f"相关文档1({keyword})", f"相关文档2({keyword})"]2.2.3 部署与测试
开发模式实时调试:
fastmcp dev server.py --with pymysql生产环境部署:
fastmcp install server.py -e DB_PASSWORD=your_password2.3 六大核心功能深度解析
2.3.1 资源(Resources)管理
企业数据的安全访问通道:
@mcp.resource("sales://2023/Q4")
def get_sales_report() -> str:
"""生成季度销售分析报告"""
return "Q4销售额同比增长35%..."
# 动态路径参数支持
@mcp.resource("employee://{id}/profile")
def get_employee(id: int) -> str:
return f"员工{id}信息:张三|研发部"2.3.2 智能工具(Tools)开发
支持复杂业务逻辑的原子操作:
from pydantic import BaseModel
class Order(BaseModel):
items: list[str]
address: str
@mcp.tool()
def create_order(order: Order) -> str:
"""创建新订单(支持JSON自动解析)"""
return f"已创建包含{len(order.items)}件商品的订单"2.3.3 对话提示(Prompts)模板
标准化LLM交互流程:
@mcp.prompt()
def customer_service(query: str) -> list[dict]:
return [
{"role": "system", "content": "你是一名专业客服"},
{"role": "user", "content": query}
]2.3.4 图像处理(Images)
多媒体数据无缝集成:
from fastmcp import Image
from PIL import Image as PILImage
@mcp.tool()
def generate_watermark(image_path: str) -> Image:
"""添加企业水印"""
img = PILImage.open(image_path)
# 添加水印逻辑...
return Image(data=img.tobytes(), format="png")2.3.5 上下文(Context)管理
执行过程全生命周期控制:
async def process_data(ctx: Context):
await ctx.report_progress(0, 100)
data = await ctx.read_resource("data://raw")
# 处理逻辑...
ctx.info("数据处理完成")2.3.6 多环境部署策略
开发调试
fastmcp dev server.py
实时热更新、交互测试
Claude集成
fastmcp install server.py
生产环境部署
独立运行
uv run python server.py
自定义容器化部署
2.4 企业级应用案例:智能财务助手
@mcp.resource("finance://reports/{year}")
def get_financial_report(year: int) -> str:
"""获取年度财务报告"""
return f"{year}年财报:营收10亿元..."三、谷歌图片搜索MCP Server
3.1 项目背景
在实际业务中,有时需要让AI搜索图片,例如自媒体写公众号、AI写文章批量发布等场景。本案例将指导你如何利用Fastapi - MCP快速搭建一个MCP服务器,以实现谷歌图片搜索功能。
3.2 实现步骤
3.2.1 先跑通代码
在谷歌创建项目project:有两种方式,方式1到谷歌云的后台创建,打开网站
https://console.cloud.google.com/apis/credentials点「Create project」;方式2(推荐)直接新建一个Gemini的api key,会自动创建Project,网站https://aistudio.google.com/apikey。获取谷歌搜索的api key:打开网站
https://developers.google.com/custom-search/v1/overview?hl=zh - cn#api_key,点获取密钥,选择第一步中创建好的项目。获取谷歌搜索引擎的id,也是cx:网站
https://programmablesearchengine.google.com/controlpanel/create,填写相关信息后点「创建」,就能看到cx的值。 然后让DeepSeek帮你写谷歌图片搜索的代码。
3.2.2 把这个代码封装成Fastapi接口
安装Fastapi:
pip install uvicorn, fastapi让Deepseek帮你把之前的代码改成Fastapi代码。
运行
python main.py,在浏览器打开端口后添加/docs的地址,就是接口的文档,见到正常的Fastapi部署页面就表示部署成功。
3.2.3 用Fastapi - MCP改造服务端
安装Fastapi - MCP,在上述fastapi代码的基础上添加相关代码。运行后可以通过http://你服务器地址:9797/mcp来访问MCP,注意如果是在本地跑,服务器地址就是localhost。
3.2.4 在AI软件中使用MCP
在Cursor可以直接用url,配置MCP Server,确保「Tools」里有对应的工具。
3.2.5 直接在对话中使用
在AI对话中输入搜索图片的提示词,例如“搜索马斯克的照片”,AI就能正确调用我们的工具。
四、总结
通过以上几个实战案例,我们可以看到FastMCP在不同场景下的强大应用能力。它可以帮助开发者快速构建MCP服务器和客户端,使得大语言模型能够更好地与外部系统进行交互,获取实时信息,执行特定任务。在实际开发中,你可以根据具体需求选择合适的案例进行参考和扩展。
最后更新于