运行您的FastMCP服务器
学习如何使用STDIO、可流式HTTP和SSE等多种传输协议来运行和部署您的FastMCP服务器。
FastMCP服务器可以根据应用程序的需求以不同方式运行,从本地命令行工具到持久化Web服务。本指南涵盖了运行服务器的主要方法,重点介绍可用的传输协议:STDIO、可流式HTTP和SSE。
run() 方法
可以通过在FastMCP实例上调用run()方法直接从Python运行FastMCP服务器。
为了获得最佳的兼容性,最佳实践是将run()调用放在if __name__ == "__main__":代码块中。这样可以确保服务器仅在脚本直接执行时启动,而不是在被作为模块导入时启动。
现在你可以通过执行python my_server.py来运行这个MCP服务器。
MCP服务器可以根据应用程序的需求,使用多种不同的传输选项运行。run()方法可以接收transport参数和其他特定于传输的关键字参数,用于配置服务器的运行方式。
FastMCP 命令行界面
FastMCP 还提供了无需修改源代码即可运行服务器的命令行界面。安装 FastMCP 后,您可以直接从命令行运行服务器:
重要提示:使用fastmcp run时,它会完全忽略if __name__ == "__main__"代码块。相反,它会查找名为mcp、server或app的FastMCP对象,并直接调用其run()方法,同时使用您指定的传输选项。
这意味着你可以使用fastmcp run来覆盖代码中指定的传输方式,这对于测试或更改部署方法而无需修改代码特别有用。
您可以指定传输选项和其他配置:
为了开发和测试,你可以使用dev命令来运行带有MCP检查器的服务器:
查看CLI文档获取所有可用命令和选项的详细信息。
传输选项
以下是可用传输选项的对比,帮助您根据需求选择合适的方式:
| 传输方式 | 使用场景 | 推荐方案 |
|---|---|---|
| STDIO | 本地工具、命令行脚本以及与Claude Desktop等客户端的集成 | 最适合本地工具及由客户端管理服务器进程的场景 |
| 可流式HTTP | 基于Web的部署、微服务、通过网络暴露MCP | 基于Web部署的推荐选择 |
| SSE | 现有基于网页的部署依赖SSE | 已弃用 - 新项目建议使用Streamable HTTP |
标准输入输出
STDIO传输是本地MCP服务器执行的默认且兼容性最广的选项。它非常适合本地工具、命令行集成以及像Claude Desktop这样的客户端。然而,它的缺点是需要本地运行MCP代码,这可能带来第三方服务器的安全隐患。
STDIO是默认传输方式,因此在调用run()时无需特别指定。不过,你可以显式地指定它以明确你的意图:
使用Stdio传输时,通常不需要将服务器作为独立进程运行。相反,您的客户端会为每个会话启动一个新的服务器进程。因此,无需额外配置。
可流式传输的HTTP
New in version: 2.3.0
Streamable HTTP 是一种现代化的高效传输协议,用于通过HTTP公开您的MCP服务器。它是基于Web部署场景的推荐传输方案。
要使用Streamable HTTP运行服务器,可以使用run()方法,并将transport参数设置为"streamable-http"。这将在默认主机(127.0.0.1)、端口(8000)和路径(/mcp)上启动一个Uvicorn服务器。
要自定义主机、端口、路径或日志级别,请向run()方法提供适当的关键字参数。
SSE
SSE传输方式已被弃用,可能在未来的版本中移除。 新应用程序应改用可流式HTTP传输。
Server-Sent Events (SSE) 是一种基于HTTP的服务器到客户端流传输协议。虽然FastMCP仍支持SSE,但该协议已被弃用,在新项目中建议使用Streamable HTTP。
要使用SSE运行服务器,可以使用run()方法并将transport参数设置为"sse"。这将在默认主机(127.0.0.1)、默认端口(8000)上启动一个Uvicorn服务器,并使用默认的SSE路径(/sse)和消息路径(/messages/)。
请注意,上述示例中的客户端使用了显式的SSETransport来连接服务器。FastMCP会尝试根据提供的配置推断合适的传输方式,但从FastMCP 2.3.0版本开始,HTTP URL默认会被视为可流式HTTP。
要自定义主机、端口或日志级别,请向run()方法提供适当的关键字参数。您还可以调整SSE路径(客户端应连接的位置)和消息POST端点(客户端用于发送后续消息)。
异步使用
FastMCP为运行您的服务器提供了同步和异步两种API。前面示例中看到的run()方法是一个同步方法,它在内部使用anyio.run()来运行异步服务器。对于已经在异步上下文中运行的应用程序,FastMCP提供了run_async()方法。
run()方法不能从异步函数内部调用,因为它已经在内部创建了自己的异步事件循环。如果尝试从异步函数内部调用run(),将会收到关于事件循环已在运行中的错误。
在异步函数中始终使用run_async(),在同步上下文中使用run()。
run() 和 run_async() 都接受相同的传输参数,因此上述所有示例都适用于这两种方法。
自定义路由
您还可以向FastMCP服务器添加自定义Web路由,这些路由将与MCP端点一起暴露。为此,请使用@custom_route装饰器。请注意,这比使用完整的ASGI框架灵活性较低,但对于向独立服务器添加健康检查等简单端点非常有用。