<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      15 分鐘用 FastMCP 搭建你的第一個 MCP Server(附完整代碼)

      0
      分享至

      Model Context Protocol 是一個開放標準,它的目標是給 LLM 一種干凈、統一的方式去發現和調用外部工具。不用再寫自定義解析、不用再維護脆弱的膠水代碼,就是一個好用的協議。

      大多數 MCP 教程上來就講 JSON-RPC 規范、傳輸層協議,搞得很復雜。其實用 MCP 不需要理解協議內部構造就像寫 Web 應用不需要去讀 HTTP 規范一樣。

      真正需要掌握的東西就三個概念,花 15 分鐘就夠了。



      三個核心概念

      MCP 的核心就三樣東西:

      Server:對外暴露工具的服務端,本質上是一個 Python 腳本,聲明"這些函數可以被 LLM 調用",跑起來之后就在監聽請求。

      Tool:希望 LLM 使用的函數,可以是任何東西:查天氣、查數據庫、發郵件。這跟寫普通 Python 函數沒什么區別,加個裝飾器剩下的交給 MCP。

      Client:連接 Server 并調用工具的客戶端。生產環境里一般就是 LLM 應用本身。測試階段可以用 FastMCP 自帶的客戶端,開箱即用。

      Server 暴露工具,Client 調用工具。就這么簡單。

      傳輸方式、JSON-RPC、能力協商這些都是實現細節,上生產之前不用管。

      步驟 1:安裝 FastMCP

      FastMCP 是讓 MCP 用起來簡單的 Python 框架。裝一下就行,不需要任何配置。

      pip install fastmcp

      本教程不需要虛擬環境,生產環境建議還是用一個。

      步驟 2:創建 Server

      新建一個 my_server.py 文件:

      from fastmcp import FastMCP
      # Initialize the server with a name
      mcp = FastMCP("my-first-server")
      # Define a tool using the @mcp.tool decorator
      @mcp.tool
      def get_weather(city: str) -> dict:
      """Get the current weather for a city."""
      # In production, you'd call a real weather API
      # For now, we'll return mock data
      weather_data = {
      "new york": {"temp": 72, "condition": "sunny"},
      "london": {"temp": 59, "condition": "cloudy"},
      "tokyo": {"temp": 68, "condition": "rainy"},
      }
      city_lower = city.lower()
      if city_lower in weather_data:
      return {"city": city, **weather_data[city_lower]}
      else:
      return {"city": city, "temp": 70, "condition": "unknown"}
      # Run the server
      if __name__ == "__main__":
      mcp.run(transport="stdio")

      FastMCP("my-first-server") 創建一個帶名稱的服務器實例。@mcp.tool 裝飾器把普通函數注冊為 MCP 工具。函數的 docstring 會變成工具描述——LLM 靠這個來判斷什么時候該調用它。類型提示(city: str、-> dict)告訴 MCP 輸入輸出的類型。transport="stdio" 表示通過標準輸入輸出通信,本地測試夠用了。

      整個 Server 就這些,實際代碼 15 行。

      步驟 3:寫個 Client 測試一下

      新建 test_client.py:

      import asyncio
      from fastmcp import Client
      async def main():
      # Point the client at your server file
      client = Client("my_server.py")
      # Connect to the server
      async with client:
      # List available tools
      tools = await client.list_tools()
      print("Available tools:")
      for tool in tools:
      print(f" - {tool.name}: {tool.description}")
      print("\n" + "="*50 + "\n")
      # Call the weather tool
      result = await client.call_tool(
      "get_weather",
      {"city": "Tokyo"}
      )
      print(f"Weather result: {result}")
      if __name__ == "__main__":
      asyncio.run(main())

      Client("my_server.py") 指定要連接的 Server 文件;async with client: 自動管理連接生命周期;list_tools() 負責動態發現可用工具,這是 MCP 的核心能力之一;call_tool("get_weather", {"city": "Tokyo"}) 帶參數調用具體工具。

      步驟 4:跑起來

      終端里執行:

      python test_client.py

      輸出應該是這樣的:

      Available tools:
      - get_weather: Get the current weather for a city.
      ==================================================Weather result: {'city': 'Tokyo', 'temp': 68, 'condition': 'rainy'}

      到這里就完成了。一個 MCP Server 搭好了Client 也成功調用了它。

      步驟 5:增加更多工具

      MCP 真正好用的地方在于擴展成本極低,再往 Server 里再加兩個工具:

      from fastmcp import FastMCP
      from datetime import datetime
      mcp = FastMCP("my-first-server")
      @mcp.tool
      def get_weather(city: str) -> dict:
      """Get the current weather for a city."""
      weather_data = {
      "new york": {"temp": 72, "condition": "sunny"},
      "london": {"temp": 59, "condition": "cloudy"},
      "tokyo": {"temp": 68, "condition": "rainy"},
      }
      city_lower = city.lower()
      if city_lower in weather_data:
      return {"city": city, **weather_data[city_lower]}
      return {"city": city, "temp": 70, "condition": "unknown"}
      @mcp.tool
      def get_time(timezone: str = "UTC") -> str:
      """Get the current time in a specified timezone."""
      # Simplified - in production use pytz or zoneinfo
      return f"Current time ({timezone}): {datetime.now().strftime('%H:%M:%S')}"
      @mcp.tool
      def calculate(expression: str) -> dict:
      """Safely evaluate a mathematical expression."""
      try:
      # Only allow safe math operations
      allowed_chars = set("0123456789+-*/.() ")
      if not all(c in allowed_chars for c in expression):
      return {"error": "Invalid characters in expression"}
      result = eval(expression) # Safe because we validated input
      return {"expression": expression, "result": result}
      except Exception as e:
      return {"error": str(e)}
      if __name__ == "__main__":
      mcp.run(transport="stdio")

      再跑一次測試客戶端,三個工具全部自動發現:

      Available tools:
      - get_weather: Get the current weather for a city.
      - get_time: Get the current time in a specified timezone.
      - calculate: Safely evaluate a mathematical expression.

      不需要改配置,不需要寫路由。加了工具就直接可用。

      最后:接入 LLM

      前面寫的 Client 是測試用的。生產環境里,LLM 框架本身充當 Client 角色。概念上大概是這樣:



      How MCP connects your LLM to external tools: the framework calls the client, which discovers and invokes tools from your server.

      Server 端的代碼完全不用動,這正是 MCP 的價值所在——工具寫一次,任何兼容 MCP 的客戶端都能用。

      生產部署時需要把傳輸方式從 stdio 換成 http:

      if __name__ == "__main__":
      mcp.run(transport="http", host="0.0.0.0", port=8000)

      這樣 MCP Server 就以 HTTP 端點的形式對外暴露,遠程客戶端可以直接連接。

      總結

      現在你手頭已經有一個能跑的 MCP Server 了,前后也就 15 分鐘。下一步就是把它接到實際的 LLM 上,做點真正有用的東西出來。

      https://avoid.overfit.cn/post/c9314c34543a4ed1a1bb15b92d1c6ca2

      by Paolo Perrone

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      伊朗最大“內鬼”被抓?革命衛隊:勾結以色列,指揮官卡尼被拘!

      伊朗最大“內鬼”被抓?革命衛隊:勾結以色列,指揮官卡尼被拘!

      青青子衿
      2026-03-05 11:57:03
      打瘋了!東契奇首節狂轟22+5三分 生涯30次單節20+升歷史第四

      打瘋了!東契奇首節狂轟22+5三分 生涯30次單節20+升歷史第四

      醉臥浮生
      2026-03-07 12:13:33
      伊拉克庫爾德第一夫人宣言:我們不是任人驅使的炮灰!

      伊拉克庫爾德第一夫人宣言:我們不是任人驅使的炮灰!

      勝研集
      2026-03-06 13:44:23
      廣東一女子不愿上班常年坐街邊,因長得好看被路人投喂:又懶又饞

      廣東一女子不愿上班常年坐街邊,因長得好看被路人投喂:又懶又饞

      明智家庭教育
      2026-03-06 17:19:16
      美以伊軍事沖突最大副作用,是斬斷了俄羅斯的“救命稻草”

      美以伊軍事沖突最大副作用,是斬斷了俄羅斯的“救命稻草”

      廖保平
      2026-03-05 12:08:52
      “不想為以色列賣命”:帝國最后的遮羞布,美式民主終成笑話

      “不想為以色列賣命”:帝國最后的遮羞布,美式民主終成笑話

      怪口歷史的K先生
      2026-03-06 15:22:51
      為何關閉霍爾木茲海峽就能掐全球脖子?因為伊朗原油是全世界最好的

      為何關閉霍爾木茲海峽就能掐全球脖子?因為伊朗原油是全世界最好的

      風向觀察
      2026-03-06 21:31:15
      兩會不到3天,5大好消息傳來!老百姓暗暗叫好:希望國家盡快落實

      兩會不到3天,5大好消息傳來!老百姓暗暗叫好:希望國家盡快落實

      談史論天地
      2026-03-07 06:54:29
      1979年,張國燾凍死在養老院,許世友:除了主席,沒人是他的對手

      1979年,張國燾凍死在養老院,許世友:除了主席,沒人是他的對手

      文史季季紅
      2026-03-05 13:35:03
      寫入教科書的一天:F-35在德黑蘭完成全球首次實戰空對空擊殺

      寫入教科書的一天:F-35在德黑蘭完成全球首次實戰空對空擊殺

      斌聞天下
      2026-03-06 07:30:03
      伊方:因美以襲擊喪生的伊朗人三成為青少年

      伊方:因美以襲擊喪生的伊朗人三成為青少年

      環球網資訊
      2026-03-07 06:39:29
      為什么美國的華人華裔地位那么低 網友從各方面分析 真就那樣

      為什么美國的華人華裔地位那么低 網友從各方面分析 真就那樣

      侃神評故事
      2026-03-06 07:10:03
      我包養過一個女大學生,七年花了一千多萬

      我包養過一個女大學生,七年花了一千多萬

      煙火人間故事匯
      2026-03-06 23:05:03
      性壓抑已經變態至此了?

      性壓抑已經變態至此了?

      黯泉
      2026-03-07 11:28:43
      蘿莉島,是進入核心圈層的投名狀,你猜他們為什么都穿紅皮鞋

      蘿莉島,是進入核心圈層的投名狀,你猜他們為什么都穿紅皮鞋

      百曉生談歷史
      2026-03-05 22:00:08
      一份“煮熟的三文魚”火了,原來低認知的家長,真能搞出人命!

      一份“煮熟的三文魚”火了,原來低認知的家長,真能搞出人命!

      妍妍教育日記
      2026-03-07 08:45:06
      伊朗萬萬沒想到,自家王牌武器遭到破解,美軍多了一張底牌

      伊朗萬萬沒想到,自家王牌武器遭到破解,美軍多了一張底牌

      空天力量
      2026-03-06 13:09:18
      上次被發現還是1911年!上海寶山驚現1只,專家:可能是坐船來的

      上次被發現還是1911年!上海寶山驚現1只,專家:可能是坐船來的

      萬象硬核本尊
      2026-03-06 23:54:22
      女子實名舉報某團外賣:不上大額券就讓我變成“凌晨營業”,你們真黑!

      女子實名舉報某團外賣:不上大額券就讓我變成“凌晨營業”,你們真黑!

      回旋鏢
      2026-03-06 21:13:59
      塔圖姆復出15分12板7助攻凱爾特人大勝獨行俠,布朗24分7板7助

      塔圖姆復出15分12板7助攻凱爾特人大勝獨行俠,布朗24分7板7助

      湖人崛起
      2026-03-07 10:25:09
      2026-03-07 13:43:00
      deephub incentive-icons
      deephub
      CV NLP和數據挖掘知識
      1940文章數 1456關注度
      往期回顧 全部

      科技要聞

      OpenClaw爆火,六位"養蝦人"自述與AI共生

      頭條要聞

      特朗普突然放話"先解決伊朗后解決古巴" 梅西聽懵了

      頭條要聞

      特朗普突然放話"先解決伊朗后解決古巴" 梅西聽懵了

      體育要聞

      塔圖姆歸來:凱爾特人的春之綠

      娛樂要聞

      周杰倫田馥甄的“JH戀” 被扒得底朝天

      財經要聞

      針對"不敢休、不讓休"怪圈 國家出手了

      汽車要聞

      逃離ICU,上汽通用“止血”企穩

      態度原創

      本地
      健康
      房產
      教育
      手機

      本地新聞

      食味印象|一口入魂!康樂烤肉串起千年絲路香

      轉頭就暈的耳石癥,能開車上班嗎?

      房產要聞

      傳統學區房熄火?2月海口二手房爆火的板塊竟然是…

      教育要聞

      兩會速遞|教育部部長:將實施新一輪學生心理健康促進行動

      手機要聞

      歐加驍龍8系小平板4月來襲,Find X9系列配件已備好!

      無障礙瀏覽 進入關懷版