【TRAE调教指南之MCP篇】FastMCP:快速制作自己的MCP服务
【TRAE调教指南之MCP篇】FastMCP:快速制作自己的MCP服务
- 1. 解决的痛点
- 2. 核心功能解析
- 3. 安装与配置步骤
- 3.1 安装 FastMCP (开发环境)
- 3.2 创建并运行自定义服务器
- 3.3 客户端配置
- 4. 使用教程
- 4.1 示例一:内部 API 查询工具
- 4.2 示例二:数据库查询工具
- 4.3 示例三:代码仓库操作工具
- 5. 应用场景
1. 解决的痛点
在利用现有 MCP 工具的同时,您是否曾有过这些想法?
- ✅ 内部工具连接:能否让 AI 助手直接查询公司内部的文档、数据库或 API?
- ✅ 定制化工具:能否为特定工作流(如提交代码、部署预览)创建一个专属的 AI 助手工具?
- ✅ 开发复杂度:开发一个正式的 MCP 服务器需要一定的协议理解和开发量,有没有更快的办法?
- ✅ 快速原型验证:能否在几分钟内快速验证一个 MCP 工具的想法是否可行?
FastMCP 正是为了解决这些痛点而生。它不像前述工具那样提供开箱即用的具体功能,而是一个强大的“工具箱”或“开发框架”,旨在让开发者能够极其快速、简单地将任何资源、工具或 API 转换为 AI 助手可以调用的 MCP 服务器。
核心定位:
FastMCP 就像一个 “MCP 服务器的超级充电器” 或 “万能转换器”。它本身不直接提供功能,但它赋能你,为你的任何自定义需求(无论是内部系统、独特工作流还是新奇想法)快速构建一个专属的 MCP 工具。
2. 核心功能解析
FastMCP 是一个基于 Python 的、用于快速开发 Model Context Protocol (MCP) 服务器的框架。其核心能力包括:
- ✅极简开发模式:通过简单的装饰器(如
@tool
)和 Python 函数,即可将任何功能暴露为 MCP 工具,无需深入理解 MCP 协议细节。 - ✅多种数据源支持:内置了对常见数据源的简单支持,可作为工具的来源或参考:
- 静态资源(Resources):提供静态文本、文件内容等。
- 向量数据库(Vector Stores):支持集成 ChromaDB 等,快速为 AI 助手提供知识库检索能力。
- 动态工具(Tools):任何可通过 Python 函数实现的功能,如调用 API、执行 shell 命令、处理数据等。
- ✅开箱即用的模板:提供项目模板,一条命令即可创建新的 MCP 服务器项目,大幅降低启动成本。
- ✅高性能与异步支持:基于现代异步 Python 框架构建,能够处理高并发请求,保证响应速度。
3. 安装与配置步骤
FastMCP 的安装配置过程与其他 MCP 服务器不同,它分为服务器开发和客户端配置两部分。
3.1 安装 FastMCP (开发环境)
首先,您需要在项目目录下的 Python 环境中(推荐使用虚拟环境)安装 fastmcp
库来开发和运行您的自定义服务器。
# 创建虚拟环境
uv venv --python 3.12 .venv
# 激活虚拟环境
.venv\Scripts\activate
# 使用 uv安装fastmcp
uv pip install fastmcp
# 检查是否安装成功
fastmcp version
uv工具的安装使用可以参考手把手教你安装配置使用UV工具的保姆级教程
3.2 创建并运行自定义服务器
FastMCP 提供了命令行工具来快速创建项目和运行服务器。
- 创建新项目:
创建mymcp目录,在目录下创建my_mcp_server.py
文件,内容如下:
from hmac import trans_36
from fastmcp import FastMCP# 1. Create the server
mcp = FastMCP(name="My First MCP Server")# 2. Add a tool
@mcp.tool
def add(a: int, b: int) -> int:"""Adds two integer numbers together."""return a + b# 3. Add a static resource
@mcp.resource("resource://config")
def get_config() -> dict:"""Provides the application's configuration."""return {"version": "1.0", "author": "MyTeam"}# 4. Add a resource template for dynamic content
@mcp.resource("greetings://{name}")
def personalized_greeting(name: str) -> str:"""Generates a personalized greeting for the given name."""return f"Hello, {name}! Welcome to the MCP server."# 5. Make the server runnable
if __name__ == "__main__":# 6. Run the server# mcp.run(transport="stdio")mcp.run(transport="http", host="127.0.0.1", port=8000, path="/mcp")
- 运行mcp服务器:
服务器默认会在 http://localhost:8000 启动。您需要记下这个地址(或 socket 路径)用于客户端配置。python my_mcp_server.py
3.3 客户端配置
在您的 IDE(如 Cursor)的 MCP 配置文件中(通常是 mcp.json
),添加您自定义的 FastMCP 服务器。
"my-custom-server": {"command": "python","args": ["-m","uvicorn","server:app","--port","8000"],"env": {}}
或者,如果服务器已经运行,您也可以配置为连接到现有的 SSH 或 TCP 服务器。
4. 使用教程
FastMCP 的使用高度依赖于您自己开发的工具。以下是几个常见场景的示例,展示如何在 server.py
中定义工具并被 AI 调用。
4.1 示例一:内部 API 查询工具
假设您有一个内部系统状态查询的 API,您可以将其包装为 MCP 工具。
服务器端代码 (server.py
):
from fastmcp import FastMCP
import httpxmcp = FastMCP("Internal-Tools")# 定义一个查询服务器状态的工具
@mcp.tool()
async def get_server_status(server_name: str) -> str:"""根据服务器名称获取其当前状态(如在线、离线、负载)。"""# 这里模拟调用内部APIasync with httpx.AsyncClient() as client:response = await client.get(f"https://internal-api.example.com/status/{server_name}")return response.json().get("status", "Unknown")if __name__ == "__main__":mcp.run()
客户端使用:
请检查一下「payment-service」服务器的当前状态。use my-custom-server。
4.2 示例二:数据库查询工具
您可以创建一个工具,让 AI 助手能够安全地查询数据库(如获取用户信息)。
服务器端代码 (server.py
):
from fastmcp import FastMCP
import sqlite3mcp = FastMCP("Database-Query")@mcp.tool()
def get_user_email(user_id: int) -> str:"""根据用户ID从数据库查询其邮箱地址。"""conn = sqlite3.connect('example.db')cursor = conn.cursor()cursor.execute("SELECT email FROM users WHERE id = ?", (user_id,))result = cursor.fetchone()conn.close()return result[0] if result else "User not found"if __name__ == "__main__":mcp.run()
客户端使用:
帮我查一下用户ID为12345的邮箱地址是什么。use my-custom-server。
4.3 示例三:代码仓库操作工具
创建一个与 Git 仓库交互的工具,如创建新分支。
服务器端代码 (server.py
):
from fastmcp import FastMCP
import subprocess
from pathlib import Pathmcp = FastMCP("Repo-Manager")@mcp.tool()
def create_git_branch(branch_name: str, repo_path: str) -> str:"""在指定的本地代码仓库中基于当前主分支创建一个新分支。"""try:result = subprocess.run(['git', '-C', repo_path, 'checkout', '-b', branch_name],capture_output=True,text=True,check=True)return f"Branch '{branch_name}' created successfully!"except subprocess.CalledProcessError as e:return f"Error: {e.stderr}"if __name__ == "__main__":mcp.run()
客户端使用:
请为「项目X」在路径「~/projects/x」下创建一个名为「feat/new-ai-button」的新功能分支。use my-custom-server。
5. 应用场景
FastMCP 并非直接与其他MCP 工具竞争,而是扮演着强大的“赋能者”和“补充者”角色。它在整个 MCP 生态中的定位非常独特:
- 当现有工具无法满足你的特定需求时:无论是连接公司内部系统、自动化独特工作流,还是集成小众工具,FastMCP 给你了自己动手实现的能力。
- 当你需要高度定制化和自动化时:它将 AI 助手的能力从“通用辅助”扩展到“专属操作”,可以直接对系统和环境进行安全可控的操作。
- 快速原型验证:在投入大量时间开发完整 MCP 服务器前,可以用 FastMCP 在几分钟内搭建一个原型,验证想法的可行性。
总之,FastMCP 为你提供了将 MCP 潜力完全释放的钥匙,让你能够为任何想象得到的工作流构建桥梁,最终形成一个无缝衔接、高度自动化、深度集成的智能开发环境。