在這篇文章中,我們將討論模型上下文協議,為什麼它可能很重要,並逐步構建MCP 伺服器來幫助我們與Jina.ai 對話,並能夠在Claude 中添加網絡搜索和事實檢查功能使用Python和FastMCP 的桌面。
模型上下文協定
Anthropic去年感恩節前後宣布。儘管它引起了一些關注,但考慮到它可能是開發下一層人工智慧軟體堆疊的關鍵墊腳石,它所獲得的認可可能還不夠。
什麼
模型上下文協定(MCP)是專為大型語言模型(LLM)設計的標準化通訊協定。
將其視為「AI 的 HTTP」——就像 HTTP 標準化了 Web 瀏覽器與 Web 伺服器的通訊方式一樣,MCP 標準化了 LLM 應用程式與工具和資料來源的通訊方式。
為什麼我們需要 MCP?
目前LLM的發展面臨幾個障礙:
-
工具整合複雜度:每個LLM服務(如OpenAI、Anthropic等)都有其實現工具呼叫和函數呼叫的方式,使得建立可移植工具變得複雜。
上下文管理:法學碩士需要存取各種資料來源和工具,但安全有效地管理此存取權限一直具有挑戰性。
標準化:如果沒有標準協議,開發人員必須為他們想要支援的每個 LLM 平台重建整合層。
MCP 透過提供以下功能來解決這些挑戰:
- 向法學碩士公開工具和數據的標準化方法
- 安全的客戶端-伺服器架構
- 無論底層 LLM 如何,都有一致的介面
MCP 如何運作?
MCP 遵循客戶端-伺服器架構,有三個主要元件:
-
MCP 伺服器:公開的服務:
- 工具(LLM可以呼叫的函數)
- 資源(資料來源)
- 提示(範本說明)
- 上下文(動態資訊)
MCP 客戶端:應用程式連接到 MCP 伺服器並管理 LLM 和伺服器之間的通訊。客戶端支援還處於早期階段,到目前為止,只有少數工具可以實現協議規範的任何部分,並且尚無客戶端支援一些功能。
當然還有法學碩士...
工作流程很簡單:
- MCP 伺服器註冊其功能(工具、資源等)
- 客戶端連線到伺服器
- 法學碩士可以透過標準化介面使用這些功能
傳輸協定
- 多種運輸機制
- SSE(伺服器發送事件)
- 透過 HTTP 雙向通信,伺服器程序與客戶端隔離
- Stdio(標準輸入/輸出)
- 透過標準輸入/輸出管道進行通信,伺服器程序本質上是客戶端的子程序
- SSE(伺服器發送事件)
安全
安全局勢更加微妙。雖然使用 stdio 傳輸的伺服器通常與用戶端位於相同位置,因此 API 金鑰不一定會暴露在網路上。在我看來,它們確實似乎相當隨意地被傳播。
這些金鑰需要在伺服器啟動時載入到客戶端,以便將它們傳遞給子進程,它們甚至出現在桌面應用程式日誌中,這是…令人擔憂的。
API 金鑰的廣泛使用是影響 Gen AI 服務、平台和工具的更廣泛問題。 Okta 和 Auth0 等公司正在開發一種無需依賴金鑰即可管理和授權 Gen AI 的解決方案。
軟體開發工具包
Anthropic 官方支援 TypeScript、Python 和 Kotlin 的低階 SDK。最近創建的一些樣板包裝器已經涵蓋了一些樣板文件,並具有其他不錯的功能,例如用於調試、檢查和在客戶端上安裝伺服器的 CLI,以使開發 MCP 伺服器變得更容易。
FastMCP 入門
傑洛文
/
快速MCP
建構模型上下文協定伺服器的快速、Pythonic 方法?
FastMCP?
建構 MCP 伺服器的快速、Python 方式。
模型上下文協定 (MCP) 伺服器是一種為 LLM 提供上下文和工具的全新標準化方式,FastMCP 讓建置 MCP 伺服器變得簡單直觀。使用乾淨的 Python 程式碼建立工具、公開資源並定義提示:
# demo.py from fastmcp import FastMCP mcp = FastMCP("Demo ?") @<span>mcp.tool()</span> def add(a: int, b: int) -> int: """Add two numbers""" return a + b
就是這樣!透過執行以下命令授予 Claude 存取伺服器的權限:
fastmcp install demo.py
FastMCP 處理所有複雜的協定細節和伺服器管理,因此您可以專注於建立出色的工具。它被設計為高級且Pythonic - 在大多數情況下,裝飾一個函數就足夠了。
主要特點:
- 快速:進階介面意味著更少的程式碼和更快的開發
- 簡單…
FastMCP 就是這樣一個框架。我們現在將探討如何創建一個幾乎實用的工具來閱讀網站、透過網路回答搜尋查詢以及事實檢查資訊。我們將使用 Jina.ai。
這是一項非常巧妙的服務,提供了一個結合了“嵌入、重新排名和小語言模型”的“搜尋基礎平台”,以幫助企業建立 Gen AI 和多模式搜尋體驗。
先決條件
- 紫外線
您需要安裝 uv。這是建立和管理 Python 專案的推薦方法。它是一個相對較新但令人興奮的 Python 工具鏈 astral.sh 的一部分。我建議你檢查一下。
它的目標是成為管理專案、依賴項、虛擬環境、版本、linting 以及執行 Python 腳本和模組的一站式商店。它是用 Rust 寫的。你會用這些資訊做什麼?
- 克勞德桌面應用程式
您還需要安裝 Claude 桌面應用程式。就我們的目的而言,Claude 桌面應用程式將充當 MCP 用戶端,並且是 Anthropic 的關鍵目標用戶端。
阿斯拉加布
/
mcp-jinaai-閱讀器
Jina.ai Reader API 的模型上下文協定 (MCP) 伺服器
Jina.ai Reader API 的 MCP 伺服器
完整演練在這裡:
https://dev.to/asragab/building-a-model-context-protocol-server-using-jinaai-and-fastmcp-in-python-1od8
項目設定
使用 uv 您可以使用以下方式初始化項目:
# demo.py from fastmcp import FastMCP mcp = FastMCP("Demo ?") @<span>mcp.tool()</span> def add(a: int, b: int) -> int: """Add two numbers""" return a + b
這將建立一個名為 mcp-jinaai-reader 的資料夾和一個 .python-version 以及 pyproject.toml。
fastmcp install demo.py
這將創建一個與我們選擇的 python 版本相對應的虛擬環境。
建立環境後,它將提供有關如何為會話啟動它的說明。
uv init mcp-jinaai-reader --python 3.11
新增一個 src 目錄並安裝我們需要的一個依賴
cd mcp-jinaai-reader uv venv
在專案根目錄建立一個 .env 檔案並將您的 JINAAI_API_KEY 新增到該檔案中。您可以透過在 Jina 註冊來免費獲得一份。一般來說,您的伺服器需要執行的任何 API 金鑰或其他環境變數都會放入此文件中。
source .venv/bin/activate
在 src 目錄中,建立一個 server.py 檔案...我們應該可以取得程式碼。
伺服器程式碼
uv add fastmcp
從導入開始:httpx,將是我們在這裡用來發出 http 請求的函式庫;我們需要 urlparse 方法來幫助我們確定字串是否可能是有效的 URL。
JINAAI_API_KEY=jina_*************
這會初始化伺服器;第一個參數是工具的名稱。我不是 100% 確定為什麼 uvicorn 需要在這裡明確添加為依賴項,因為它是 FastMCP 的傳遞依賴項,但它似乎確實是必需的。
這可能是由於 fastmcp cli(稍後會詳細介紹)安裝伺服器的方式造成的。如果您還有其他依賴項,則必須在此處新增它們,以便客戶端知道您需要在執行客戶端之前安裝它們;我們稍後會看到它是如何運作的。
from fastmcp import FastMCP import httpx from urllib.parse import urlparse import os
您可能可以在這裡找出模式,但 Jina 使用不同的子網域來路由特定請求。搜尋端點需要一個查詢,讀取器端點需要一個 URL,而接地端點可以向 llm 提供特定的回應或答案。
接地是一個更大的主題,與 RAG 和微調等其他技術一起使用,以幫助法學碩士減少幻覺並改善決策。
我們的第一個工具
# Initialize the MCP server mcp = FastMCP("search", dependencies=["uvicorn"])
註釋@mcp.tool 完成了很多繁重的工作。庫中存在類似的資源和提示註釋。此註解提取函數簽名和傳回類型的詳細信息,以建立供 llm 呼叫該工具的輸入和輸出架構。它配置該工具,以便客戶端了解伺服器的功能。它還將函數呼叫註冊為已配置工具的處理程序。
接下來,您會注意到該函數是非同步的。不需要運行時配置,也不需要 asyncio.run 的東西。如果出於某種原因您需要將伺服器作為獨立服務運行,您確實需要自己處理其中的一些問題。 FastMCP 儲存庫中有一個範例說明如何執行此操作。
函數體相當無趣;它驗證是否正在接收 URL、設定適當的標頭、呼叫 Jina 端點並傳回文字。
# demo.py from fastmcp import FastMCP mcp = FastMCP("Demo ?") @<span>mcp.tool()</span> def add(a: int, b: int) -> int: """Add two numbers""" return a + b
第二個工具
fastmcp install demo.py
就是這樣...
測試與調試
uv init mcp-jinaai-reader --python 3.11
執行上述命令將啟動 mcp 檢查器,它是 sdk 提供的一個工具,用於測試和偵錯伺服器回應。 --with-editable 標誌可讓您對伺服器進行更改,而無需重新啟動檢查器(強烈建議)
你應該看到:
cd mcp-jinaai-reader uv venv
預設情況下,檢查器在連接埠 5173 上運行,而伺服器(您剛剛編寫的程式碼)將在連接埠 3000 上運行,您可以透過在呼叫前設定 SERVER_PORT 和 CLIENT_PORT 來變更此設定。
source .venv/bin/activate
督察
如果一切順利你應該看到類似下面的內容,在左側你可以添加你需要的環境變量,這裡 JINAAI_API_KEY 是唯一的。
如果您單擊頂部功能表列上的“工具”,然後單擊“列出工具”,您應該列出我們創建的工具,請注意文檔字串作為該工具的描述。
點擊特定工具將彈出文字框,供您輸入呼叫該工具所需的參數。
安裝伺服器
當您對一切按預期工作感到滿意後,您現在就可以在 Claude 桌面應用程式用戶端上安裝伺服器了。
uv add fastmcp
會這樣做,我相信將來它會支援其他客戶端,但現在,這就是你需要做的。 -f .env 會將環境變數傳遞給應用程式用戶端。
這在幕後的作用是更新 claude_desktop_config.json 並提供執行伺服器所需的命令和參數。預設情況下,這使用 uv ,它必須在您的 PATH 上可用。
如果您現在打開 Claude 桌面應用程序,然後轉到功能表列並單擊 Claude >設置,然後單擊開發人員,您應該會看到初始化伺服器時設置的工具的名稱。
點選它應該會顯示它的配置。您不僅可以了解它是如何執行的,而且在「進階選項」中將看到已設定的環境變數。
你也可以直接編輯這個配置,但我不一定在這裡推薦它。
運行它
如果一切順利,當您進入桌面應用程式時,您應該不會看到任何錯誤(如果出現錯誤,則轉到「設定」應該會為您提供一個按鈕來檢查日誌並從那裡進行調查) 。
此外,您應該會看到一個錘子符號,其中包含您可以使用的單個工具的數量(注意:除非您安裝了其他 MCP 伺服器,否則您的工具可能應該是兩個)
您不像平常那樣直接呼叫該工具,而是與應用程式聊天,當它遇到推斷該工具有幫助的情況時,它會詢問您是否要使用它。這裡不需要額外的程式碼或配置。
我認為它依賴工具名稱和描述來決定它是否合適,因此值得為該工具的功能製作一個清晰簡單的描述。
您將收到以下提示:
你可以與它“聊天”,不可否認,編寫的工具有時會遇到問題。有時它會決定無法上網,有時無法檢索結果,但有時您會得到以下結果:
這有一個自然的流程,它讀取頁面,提供摘要,然後你要求它轉到一篇特定的文章並閱讀該文章。
最後的註釋
希望這能讓您對 MCP 伺服器有一些了解。有很多內容可供閱讀和觀看,但我推薦的另一個網站是glama.ai,他們保留了一份相當全面的可用MCP 伺服器清單供下載和試用,其中包括比我們的玩具範例更可靠的其他網絡搜尋工具。看看吧,感謝您的關注。
以上是在 Python 中使用 Jina.ai 和 FastMCP 建構模型上下文協定伺服器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本教程演示如何使用Python處理Zipf定律這一統計概念,並展示Python在處理該定律時讀取和排序大型文本文件的效率。 您可能想知道Zipf分佈這個術語是什麼意思。要理解這個術語,我們首先需要定義Zipf定律。別擔心,我會盡量簡化說明。 Zipf定律 Zipf定律簡單來說就是:在一個大型自然語言語料庫中,最頻繁出現的詞的出現頻率大約是第二頻繁詞的兩倍,是第三頻繁詞的三倍,是第四頻繁詞的四倍,以此類推。 讓我們來看一個例子。如果您查看美國英語的Brown語料庫,您會注意到最頻繁出現的詞是“th

本文解釋瞭如何使用美麗的湯庫來解析html。 它詳細介紹了常見方法,例如find(),find_all(),select()和get_text(),以用於數據提取,處理不同的HTML結構和錯誤以及替代方案(SEL)

處理嘈雜的圖像是一個常見的問題,尤其是手機或低分辨率攝像頭照片。 本教程使用OpenCV探索Python中的圖像過濾技術來解決此問題。 圖像過濾:功能強大的工具圖像過濾器

Python是數據科學和處理的最愛,為高性能計算提供了豐富的生態系統。但是,Python中的並行編程提出了獨特的挑戰。本教程探討了這些挑戰,重點是全球解釋

本文比較了Tensorflow和Pytorch的深度學習。 它詳細介紹了所涉及的步驟:數據準備,模型構建,培訓,評估和部署。 框架之間的關鍵差異,特別是關於計算刻度的

本教程演示了在Python 3中創建自定義管道數據結構,利用類和操作員超載以增強功能。 管道的靈活性在於它能夠將一系列函數應用於數據集的能力,GE

Python 對象的序列化和反序列化是任何非平凡程序的關鍵方面。如果您將某些內容保存到 Python 文件中,如果您讀取配置文件,或者如果您響應 HTTP 請求,您都會進行對象序列化和反序列化。 從某種意義上說,序列化和反序列化是世界上最無聊的事情。誰會在乎所有這些格式和協議?您想持久化或流式傳輸一些 Python 對象,並在以後完整地取回它們。 這是一種在概念層面上看待世界的好方法。但是,在實際層面上,您選擇的序列化方案、格式或協議可能會決定程序運行的速度、安全性、維護狀態的自由度以及與其他系

Python的statistics模塊提供強大的數據統計分析功能,幫助我們快速理解數據整體特徵,例如生物統計學和商業分析等領域。無需逐個查看數據點,只需查看均值或方差等統計量,即可發現原始數據中可能被忽略的趨勢和特徵,並更輕鬆、有效地比較大型數據集。 本教程將介紹如何計算平均值和衡量數據集的離散程度。除非另有說明,本模塊中的所有函數都支持使用mean()函數計算平均值,而非簡單的求和平均。 也可使用浮點數。 import random import statistics from fracti


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版
中文版,非常好用