大語言模型 19 - MCP FastAPI-MCP 實現自己的MCP服務 快速接入API

MCP

基本介紹

官方地址:

  • https://modelcontextprotocol.io/introduction
    “MCP 是一種開放協議,旨在標準化應用程序向大型語言模型(LLM)提供上下文的方式。可以把 MCP 想象成 AI 應用程序的 USB-C 接口。就像 USB-C 提供了一種標準化的方式,讓你的設備能夠連接各種外設和配件一樣,MCP 也提供了一種標準化的方式,讓 AI 模型能夠連接不同的數據源和工具。”

在這里插入圖片描述

● MCP 主機(MCP Hosts):像 Claude Desktop、IDE 或 AI 工具等程序,它們希望通過 MCP 訪問數據。
● MCP 客戶端(MCP Clients):維護與服務器 1:1 連接的協議客戶端。
● MCP 服務器(MCP Servers):輕量級程序,它們通過標準化的模型上下文協議(Model Context Protocol)公開特定的功能。
● 本地數據源(Local Data Sources):你的計算機上的文件、數據庫和服務,MCP 服務器可以安全地訪問這些數據。
● 遠程服務(Remote Services):通過互聯網可用的外部系統(例如 API),MCP 服務器可以與其連接。

https://www.anthropic.com/news/model-context-protocol

在這里插入圖片描述

MCP

之前已經介紹過了,這里就不做復雜介紹了。
重點要提一下,MCP的 Server 和 Client 有兩種交互方式:
● 標準輸入輸出(stdio)通信:在本地環境中,MCP 客戶端通常將服務器程序作為子進程啟動,雙方通過標準輸入(stdin)和標準輸出(stdout)進行數據交換,采用 JSON-RPC 2.0 格式的消息進行通信。
● 服務器發送事件(SSE)通信:在遠程環境中,MCP 客戶端與服務器通過 HTTP 協議進行通信,利用 SSE 實現服務器向客戶端的實時數據推送,同樣使用 JSON-RPC 2.0 格式的消息進行交互。

平常通過標準的輸入輸出通信,但是可能有些環境本地是沒有的,就算有我們也需要自己實現。
所以如果有別人封裝好的 SSE 的 Server,我們就可以直接調用了。

FastAPI

FastAPI 是一個用于構建 API 的現代化、高性能的 Python Web 框架。
https://fastapi.tiangolo.com/

該項目的特性:
● 高性能:得益于 Starlette 和 Pydantic 的支持,FastAPI 的性能可與 NodeJS 和 Go 相媲美,是最快的 Python Web 框架之一。
● 高效編碼:通過自動生成交互式 API 文檔、數據驗證和序列化等功能,開發效率可提高約 200% 至 300%。
● 減少錯誤:利用標準的 Python 類型提示,減少約 40% 的人為錯誤,并提供出色的編輯器支持,如自動補全和類型檢查,降低調試時間。
● 自動生成文檔:FastAPI 自動為您的 API 生成交互式文檔,支持 Swagger UI 和 ReDoc,方便測試和使用。

FastAPI-MCP

將 FastAPI + MCP 組合起來,可以快速實現 SSE:

  • https://github.com/tadata-org/fastapi_mcp
    在這里插入圖片描述
    兩這結合后:
    ● 直接集成:直接將 MCP 服務器掛載到您的 FastAPI 應用中。
    ● 無需配置:只需指向您的 FastAPI 應用即可運行,無需額外配置。
    ● 自動發現并轉換:自動發現所有 FastAPI 的端點,并將其轉換為 MCP 工具。
    ● 保留模式:保留您的請求模型和響應模型的模式。
    ● 保留文檔:保留所有端點的文檔,與 Swagger 中的保持一致。
    ● 擴展功能:除了自動生成的工具外,還可添加自定義的 MCP 工具。

安裝配置

默認你已經配置好了 uv,如果沒有用pip也可以。

uv init fastapimcp
cd fastapimcpuv venv
source .venv/bin/activateuv add fastapi-mcp

對應的結果如下所示:
在這里插入圖片描述

測試服務端

回顧之前

我們上次在 MCP 中寫了一個 Client 和 Server,這里進行改寫。
放一段上次的 Server 代碼,幫助你回憶,這里的代碼我們不動:
在這里插入圖片描述

編寫代碼

我們修改 main.py,寫入如下的內容:

from fastapi import FastAPI
from fastapi_mcp import add_mcp_serverapp = FastAPI()mcp_server = add_mcp_server(app,# 路徑mount_path="/now",# 名字name="wzk-icu API MCP",
)# 編寫一個獲取時間戳的服務
@mcp_server.tool()
async def get_server_time() -> str:"""獲取服務器當前時間"""from datetime import datetimereturn datetime.now().isoformat()if __name__ == "__main__":import uvicornuvicorn.run(app, host="127.0.0.1", port=8000)

如下所示:
在這里插入圖片描述

啟動測試

# 當前在 fastapimcp 目錄下
python main.py

效果如下:
在這里插入圖片描述

我們直接訪問:

http://127.0.0.1:8000/now

可以看到標準的訪問格式:
在這里插入圖片描述

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

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

相關文章

用Matlab對單目相機參數的標定步驟(保姆級教程)

前言 在圖像測量及機器視覺應用中,為確定空間物體表面某點的三維幾何位置與其在圖像中對應點之間的相互關系,必須建立相機成像的幾何模型,這些幾何模型參數就是相機參數。 ??在大多數條件下這些參數必須通過實驗與計算才能得到&#xff…

【后端高階面經:架構篇】46、分布式架構:如何應對高并發的用戶請求

一、架構設計原則:構建可擴展的系統基石 在分布式系統中,高并發場景對架構設計提出了極高要求。 分層解耦與模塊化是應對復雜業務的核心策略,通過將系統劃分為客戶端、CDN/邊緣節點、API網關、微服務集群、緩存層和數據庫層等多個層次,實現各模塊的獨立演進與維護。 1.1 …

SQL每日一題(5)

前言:五更!五更琉璃!不對!是,五更佩可! 原始數據: new_hires reasonother_column1other_column2校園招聘信息 11社會招聘信息 22內部推薦信息 33獵頭推薦信息 44校園招聘信息 55社會招聘信息…

Kafka Kraft模式集群 + ssl

文章目錄 啟用集群資源規劃準備證書創建相關文件夾配置文件啟動各Kafka節點 故障轉移測試spring boot集成 啟用集群 配置集群時關鍵就是提前梳理好需要的網絡資源,完成對應server.properties文件的配置。在執行前先把這些梳理好,可以方便后面的配置&…

watchEffect

在處理復雜異步邏輯時,Vue 3 的 watchEffect 相比傳統的 watch 具有以下優勢: 1. 自動追蹤依賴 watchEffect 會自動收集其回調中使用的所有響應式依賴,無需手動指定監聽源: import { ref, watchEffect } from vue;const count …

Linux系統平均負載與top、uptime命令詳解

介紹 在Linux系統運維中,系統平均負載是一個重要的性能指標。通過 top和 uptime命令,可以實時監控系統的負載情況,幫助運維人員及時發現并解決系統性能問題。本文將詳細介紹Linux系統平均負載的概念及其計算方法,并深入解析 top和…

前端配置nginx代理

一、定義靜態文件的路徑的兩種方式 1. root 指令 (1)作用 指定文件系統的 基礎路徑,location 的 URI 會 追加到該路徑后 形成完整路徑。 (2)語法 location /uri/ {root /path/to/files; } (3&#xf…

語音識別技術在人工智能中的應用

姓名:成杰 學號:21021210653 學院:電子工程學院 【嵌牛導讀】 應用語音智能這項識別技術是為了使計算機可以聽懂人類的語言,并執行人類的某項操作。現階段這項技術已經成為人工智能領域的重點研究方向和實現人機語音交互的…

uniapp實現大視頻文件上傳-- 阿里云oss直傳方式 - app、H5、微信小程序

之前的項目文件上傳比較慢,使用預簽名方式上傳H5正常,微信小程序和app使用axios時出現了各種報錯,配置完后還是不行。所以換一種oss直傳方式。 找到一個 實現了的 參考:https://blog.csdn.net/qq_44860866/article/details/129670188

【Java學習筆記】抽象類

抽象類 引入關鍵字:abstract 應用場景:當子類中共有的部分 / 特性可以放到抽象類中 1. 通過子類的方法重寫實現不同的功能 2. 編寫一個方法把共有的部分放入其中,在該方法中調用抽象方法(動態綁定機制) 3. 便可以實…

EPT(Efficient Prompt Tuning)方法,旨在解決提示調優(Prompt Tuning)中效率與準確性平衡和跨任務一致性的問題

EPT(Efficient Prompt Tuning)方法,旨在解決提示調優(Prompt Tuning)中效率與準確性平衡和跨任務一致性的問題 一、核心原理:分解提示與多空間投影 1. 提示分解:用低秩矩陣壓縮長提示 傳統問題: 長提示(如100個token)精度高但訓練慢,短提示(如20個token)速度快但…

深入剖析Java中的偽共享:原理、檢測與解決方案

在高性能Java應用的開發中,尤其是多線程環境下,開發者往往會關注鎖競爭、線程調度等顯性問題,但有一個隱蔽的性能殺手——偽共享(False Sharing)?,卻容易被忽視。本文將通過原理分析、代碼案例與實戰工具&…

JMeter 教程:響應斷言

目錄 JMeter 教程:響應斷言的簡單介紹【輕松上手】 ? 什么是響應斷言? 📌 使用場景示例 🛠? 添加響應斷言步驟 1. 選中 HTTP 請求 → 右鍵 → Add → Assertions → Response Assertion 2. 設置斷言內容: ? …

11.11 TypedDict與Pydantic實戰:Python高效狀態管理秘籍

使用 TypedDict 和 Pydantic 管理狀態 關鍵詞:LangGraph 狀態管理, TypedDict 類型化字典, Pydantic 數據模型, 狀態持久化, 多輪對話設計 1. 狀態管理的核心挑戰 在復雜 AI Agent 系統中,狀態管理需要解決三個關鍵問題: #mermaid-svg-0sX3763L7VP2RvuX {font-family:&quo…

ThreadLocal線程本地變量在dubbo服務使用時候遇到的一個坑

我昨天遇到一個問題,就是我springboot項目里面有一個提供代辦服務審核的dubbo接口,這個接口給房源項目調用,但是碰到一個問題就是,房源項目每天凌晨5點會查詢滿足條件過期的數據,然后調用我這邊的代辦審核dubbo接口&am…

[Java實戰]Spring Boot整合達夢數據庫連接池配置(三十四)

[Java實戰]Spring Boot整合達夢數據庫連接池配置(三十四) 一、HikariCP連接池配置(默認) 1. 基礎配置(application.yml) spring:datasource:driver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:dm://…

【MySQL】08.視圖

視圖就是一個由查詢到的內容定義的虛擬表。它和真實的表一樣,視圖包含一系列帶有名稱的列和行數據。視圖的數據變化會影響到基表,基表的數據變化也會影響到視圖。 1. 基本使用 mysql> select * from user; -------------------- | id | age | name …

4 通道1250MSPS‐16bit DAC 回放板

簡介 4 通道1250MSPS‐16bit DAC 回放板 是一款4 路轉換速率最高為1250MSPS 的DAC 回放板, DAC 位數16bit;板卡支持觸發輸出/觸發輸入;DAC 采樣時鐘源支持內部參考時 鐘、外部參考時鐘、外部采樣時鐘三種方式,可通過SPI 總線實現時…

C/C++---類型轉換運算符

在C中,類型轉換運算符(Type Conversion Operator)允許類對象在需要時自動轉換為其他類型。這是一種特殊的成員函數,能夠增強類的靈活性和交互性。 1. 基本語法 類型轉換運算符的聲明格式為: operator 目標類型() co…

大模型Agent

手撕 Agent 1、功能描述 設計一個 Agent,自動選擇使用以下工具回答用戶的問題: 查看目錄下的文件基于給定的文檔回答用戶問題查看與分析 Excel 文件撰寫文檔調用 Email 客戶端發郵件2、演示用例 實驗中使用三個文檔演示 Agent 的能力 ./data|__2023年8月-9月銷售記錄.xlsx…