mcp.tool
註冊工具和傳輸方式本文件說明如何使用 mcp.tool
註冊工具,以及 MCP 中可用的三種不同傳輸方式。
mcp.tool
註冊工具mcp.tool
裝飾器用於將 Python 函式註冊為可由 AI 模型呼叫的工具。這使您可以使用自訂函式擴展 AI 模型的功能。
這邊示範一個依據使用者使用時間,進行不同招呼方式的function:
from mcp.server.fastmcp import FastMCP
from datetime import datetime
mcp = FastMCP(name="greeting")
@mcp.tool(description="這是一個打招呼的工具")
async def greeting():
now_time = int(datetime.now().hour)
if 7 < now_time < 12:
return "早安"
elif 12 < now_time < 17:
return "下午好啊!"
elif 17 < now_time < 23:
return "哈囉!晚上了呢!"
else:
return "哇!怎麼還沒睡?"
if __name__ == "__main__":
mcp.run(transport="stdio")
在此範例中,greeting
函式被註冊為一個工具,可以在description中描述工具用途,為之後整個Graph製作鋪路(強烈推薦把description寫清楚,可以讓llm更加清楚工具的使用時機)。
AI 模型現在可以按名稱呼叫此工具,並提供必要的參數。函式的說明字串將作為工具的描述供 AI 模型使用。
mcp.tool()
只是一個將函式設定成一個MCP TOOL的方式,但真正執行這個工具的是Server。
要怎麼讓Server跑起來呢?目前FastMCP支援兩種主要的傳輸模式(transport),外加一個未來可能被拿掉的。
stdio
stdio
是最廣泛、預設使用的,非常適合本地工具、命令列整合以及 Claude Desktop 等客戶端。
但缺點就是必須在本地端運行,若要提供給第三方使用則需使用streamble-http。
if __name__ == "__main__":
mcp.run(transport="stdio")
# transport="stdio"是官方預設
streamable-http
streamble-http
相對於stdio
,可以提供給更多人使用
stdio
是只能給本地使用,但streamble-http
的方式可以提供網址,讓第三方去使用你的Server
if __name__ == "__main__":
mcp.run(transport="http", host="0.0.0.0", port=8000, path="/mcp")
# 要寫transport="http"或transport="streamble-http"都可以
sse
(未來可能被拿掉)因官方警告sse
未來會被拿掉,推薦大家使用streamble-http
,這邊就不多介紹sse
,仍想了解這部分,請參閱官方文件