從零構建MCP服務器:FastMCP實戰指南

引言:MCP協議與FastMCP框架

Model Context Protocol(MCP)是連接AI模型與外部服務的標準化協議,允許LLM(如Claude、Gemini)調用工具、訪問數據。然而,直接實現MCP協議需要處理JSON-RPC、會話管理等繁瑣細節。FastMCP作為Python框架,封裝了這些底層邏輯,讓開發者專注于業務功能。本文將通過分步實戰,從零構建一個完整的MCP服務器,涵蓋工具、資源、動態模板等核心功能。

一、環境準備:安裝FastMCP

首先確保安裝FastMCP框架,推薦使用pip:

pip install fastmcp

二、Step 1:創建基礎服務器

所有FastMCP應用的起點是FastMCP類實例,它作為工具、資源的容器。

代碼示例

# my_mcp_server.py
from fastmcp import FastMCP# 初始化MCP服務器,指定名稱(用于標識服務)
mcp = FastMCP(name="My First MCP Server")

說明

  • 這行代碼創建了一個空的MCP服務器,暫時不包含任何功能。
  • 名稱參數(name)用于區分不同服務器,便于客戶端識別。

三、Step 2:添加工具(Tools)

工具是LLM可調用的函數(如計算、數據處理),通過@mcp.tool裝飾器定義。

代碼示例

from fastmcp import FastMCPmcp = FastMCP(name="My First MCP Server")@mcp.tool
def add(a: int, b: int) -> int:"""Adds two integer numbers together."""return a + b

FastMCP自動處理的細節

  • 工具名稱:默認使用函數名(如add)。
  • 描述:從函數文檔字符串(docstring)提取,供LLM理解用途。
  • 輸入 schema:通過類型注解(a: intb: int)生成JSON schema,確保LLM傳入正確類型的參數。

優勢:無需手動定義協議格式,專注函數邏輯即可。

四、Step 3:添加靜態資源(Resources)

資源是LLM可訪問的只讀數據(如配置、知識庫),通過@mcp.resource裝飾器定義,并綁定唯一URI。

代碼示例

@mcp.resource("resource://config")
def get_config() -> dict:"""Provides the application's configuration."""return {"version": "1.0", "author": "MyTeam"}

說明

  • URIresource://config是資源的唯一標識,客戶端通過該路徑訪問。
  • 懶加載:函數get_config僅在客戶端請求時執行,避免不必要的計算。
  • 返回格式:支持字典、字符串等,FastMCP自動序列化為JSON返回給客戶端。

五、Step 4:添加動態資源模板(Resource Templates)

資源模板允許通過URI參數生成動態內容,URI中的占位符(如{name})會映射為函數參數。

代碼示例

@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."

使用方式

  • 客戶端請求greetings://Alice時,FastMCP自動調用personalized_greeting(name="Alice"),返回"Hello, Alice!..."
  • 占位符與函數參數名必須一致(如{name}對應name: str),支持多個參數(如greetings://{name}/{title})。

六、Step 5:運行服務器

通過mcp.run()啟動服務器,默認使用STDIO傳輸(適合本地客戶端如Claude Desktop)。

完整代碼

from fastmcp import FastMCP# 1. 初始化服務器
mcp = FastMCP(name="My First MCP Server")# 2. 添加工具
@mcp.tool
def add(a: int, b: int) -> int:"""Adds two integer numbers together."""return a + b# 3. 添加靜態資源
@mcp.resource("resource://config")
def get_config() -> dict:"""Provides the application's configuration."""return {"version": "1.0", "author": "MyTeam"}# 4. 添加動態資源模板
@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. 啟動服務器
if __name__ == "__main__":mcp.run()

啟動命令

python my_mcp_server.py

傳輸方式擴展

  • 默認STDIO傳輸適用于本地客戶端。
  • 如需HTTP服務,可通過mcp.http_app()創建ASGI應用,搭配uvicorn運行(詳見FastMCP部署文檔)。

七、服務器功能驗證

客戶端(如Claude Desktop)可通過以下方式交互:

  1. 調用工具:請求調用add工具,傳入a=3b=5,返回8
  2. 訪問靜態資源:請求resource://config,返回配置字典。
  3. 訪問動態資源:請求greetings://Bob,返回"Hello, Bob!..."

八、總結:FastMCP的核心優勢

  1. 極簡開發:用Python函數+裝飾器定義工具和資源,無需關注協議細節。
  2. 自動適配:自動生成schema、處理序列化,確保與MCP客戶端兼容。
  3. 靈活擴展:支持靜態資源、動態模板、多傳輸方式(STDIO/HTTP)。

通過本文的步驟,你已構建了一個功能完整的MCP服務器。后續可擴展更復雜的工具(如數據庫查詢、API調用)和資源(如實時數據),為LLM提供更強大的外部能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913647.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913647.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913647.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于FPGA的智能小車設計(包含代碼)/ 全棧FPGA智能小車:Verilog實現藍牙/語音/多傳感器融合的移動平臺

首先先聲明一下,本項目已經歷多輪測試,可以放心根據我的設計進行二次開發和直接套用!!! 代碼有詳細的注釋,方便同學進行學習!! 制作不易,記得三連哦,給我動…

Object.defineProperties 詳解

Object.defineProperties 詳解 Object.defineProperties 是 JavaScript 中用于在一個對象上定義或修改多個屬性的方法。它是 Object.defineProperty 的復數版本,允許你一次性定義多個屬性。 基本語法 Object.defineProperties(obj, props)obj:要在其上定…

MyBatis-Plus:深入探索與最佳實踐

MyBatis-Plus作為MyBatis的增強版,已經在Java開發中得到了廣泛應用。它不僅繼承了MyBatis的所有功能,還提供了許多強大的擴展功能,幫助開發者提升開發效率和代碼質量。本文將深入探討MyBatis-Plus的高級特性及其在實際項目中的最佳實踐。一、…

勞斯萊斯數字孿生技術:重構航空發動機運維的綠色革命

在航空工業邁向智能化的浪潮中,勞斯萊斯以數字孿生技術為核心,構建了發動機全生命周期管理的創新范式。這項技術不僅重新定義了航空發動機的維護策略,更通過數據驅動的決策體系,實現了運營效率與生態效益的雙重突破。本文將從技術…

NPM組件 querypilot 等竊取主機敏感信息

【高危】NPM組件 querypilot 等竊取主機敏感信息 漏洞描述 當用戶安裝受影響版本的 querypilot 等NPM組件包時會竊取用戶的主機名、用戶名、工作目錄、IP地址等信息并發送到攻擊者可控的服務器地址。 MPS編號MPS-2kgq-v17b處置建議強烈建議修復發現時間2025-07-05投毒倉庫np…

創業商業融資計劃書PPT模版

創業商業融資計劃書PPT模版:https://pan.quark.cn/s/25a043e4339e

解決GitHub倉庫推送子文件夾后打不開的問題

從你描述的情況來看,IELTS_AI_Assessment 很可能被識別為了 Git 子模塊(submodule),而不是普通文件夾,這會導致在 GitHub 上無法直接打開查看內容。以下是具體原因和解決辦法:為什么文件夾無法打開&#xf…

Web后端開發-請求響應

文章目錄概述請求Postman簡單參數原始方式SpringBootRequestParam注解小結實體參數數組集合參數日期參數Json參數路徑參數總結響應響應-案例概述 請求 Postman 簡單參數 原始方式 // 1. 簡單參數 // 原始方式RequestMapping("/simpleParam")public String …

Javascript基礎內容回顧—變量提升、事件循環和閉包等內容

以下是前端面試中 JavaScript 基礎易錯問題的詳解,結合常見考點和易混淆概念進行解析: ?? 一、變量作用域與提升 var vs let/const ? 變量提升:var 聲明的變量會提升到作用域頂部(值為 undefined),而 …

UNIX程序設計基本概念和術語

unix體系結構從嚴格意義上說,可將操作系統定義為一種軟件,它控制計算機硬件資源,提供程序運行環境。我們通常將這種軟件稱為內核(kernel),因為它相對較小,而且位于環境的核心。內核的接口被稱為…

【WEB】Polar靶場 16-20題 詳細筆記

目錄 十六.簽到題 十七.簽到 十八.session文件包含 PHP 偽協議(PHP Stream Wrappers) base64加解密獲取源代碼 Session文件包含 namenameShell 是什么? 十九.Dont touch me 二十.robots robots.txt 十六.簽到題 把didino改成didiy…

數據結構*搜索樹

什么是搜索樹 搜索樹是一種樹形數據結構,用于高效地存儲和檢索數據。其核心特點是每個節點包含一個鍵(Key),并遵循特定的排序規則。常見的搜索樹有二叉搜索樹、自平衡二叉樹、多叉搜索樹等。AVL樹、紅黑樹、Splay樹都屬于自平衡二…

語音交互新紀元:Hugging Face LeRobot如何讓機器人真正“懂你”

機器人之言:早在2024年,Hugging Face正式進軍真實世界機器人應用領域,推出了開源機器人項目LeRobot。LeRobot不僅僅是一個模型庫,它是一個完整的機器人學習平臺,融合了模仿學習、強化學習、數據可視化以及仿真環境。其…

搭建個人博客系列--MySql

前期提要:搭建個人博客系列--docker-CSDN博客 目前已經擁有了docker所以只需要將MySql安裝在docker上即可。 一、在docker安裝mysql docker pull mysql 二、查詢docker內的mysql鏡像 三、啟動msql docker run -d -p 33060:3306 -v /home/mysql/conf:/mysql/conf.d…

【Spring】Spring Boot + OAuth2 + JWT + Gateway的完整落地方案,包含認證流程設計

Spring Boot OAuth2 JWT Gateway的完整落地方案,包含認證流程設計網關在服務中的使用一、整體架構設計二、核心組件實現1. OAuth2認證服務器(auth-service)2. JWT自定義增強(存儲用戶信息)三、Gateway全局攔截&…

第一個小程序

一、前言隨著移動互聯網的發展,用戶對“即用即走”的輕量級應用需求日益增長,而傳統 App 在下載安裝、更新維護等方面存在一定的門檻。小程序應運而生,它是一種無需下載即可使用的應用程序形態。本文將帶你完成人生中第一個微信小程序的開發全…

【辦公類-54-07】20250901 2025學年第一學期班級點名冊模版(雙休國定假涂成灰色、修改標題和頁眉,批量導出PDF)

背景需求: 制作了校歷單后,第二個要制作的就是點名冊(灰色版) 【辦公類-54-03】20240828班級點名冊模版(雙休國定假涂成灰色)2024學年第一學期_姓名周一到周五的點名冊怎么畫-CSDN博客文章瀏覽閱讀2.1k次,點贊24次,收藏4次。【辦公類-54-03】20240828班級點名冊模版(…

iOS App首次啟動請求異常調試:一次冷啟動鏈路抓包與初始化流程修復

在一次 iOS App 大版本更新后,部分用戶反饋首次打開 App 時會出現“無法連接服務器”的提示,需要重啟 App 才能正常使用。而后續使用過程中接口調用都正常。服務器端并未記錄請求到達,日志中只有 sporadic(零星)斷連記…

【Linux網絡篇】:網絡中的其他重要協議或技術——DNS,ICMP協議,NAT技術等

?感謝您閱讀本篇文章,文章內容是個人學習筆記的整理,如果哪里有誤的話還請您指正噢? ? 個人主頁:余輝zmh–CSDN博客 ? 文章所屬專欄:Linux篇–CSDN博客 文章目錄其他重要協議或技術1.DNS2.ICMP協議3.NAT技術4.代理服務器其他重…

HarmonyOS學習4 --- 創建一個頁面

1、聲明式UI語法Entry Component struct My_page {State isLogin: boolean falsebuild() {Row() {Image(this.isLogin ? $r(app.media.icon_leon) : $r(app.media.icon)).height(60).width(60).onClick(() > {this.isLogin !this.isLogin})Text(this.isLogin ? $r(app.s…