MCP開發入門
官方文檔: https://modelcontextprotocol.io/introduction
入門教程: https://github.com/liaokongVFX/MCP-Chinese-Getting-Started-Guide
- 本文源代碼:https://github.com/youngqqcn/mcp-server-demo
什么是MCP?
模型上下文協議(MCP)是一個創新的開源協議,它重新定義了大語言模型(LLM)與外部世界的互動方式。MCP 提供了一種標準化方法,使任意大語言模型能夠輕松連接各種數據源和工具,實現信息的無縫訪問和處理。MCP 就像是 AI 應用程序的 USB-C 接口,為 AI 模型提供了一種標準化的方式來連接不同的數據源和工具。
MCP 有以下幾個核心功能:
- Resources 資源
- Prompts 提示詞(模板), 用于給客戶端提供提示詞模板
- Tools 工具
- Sampling 采樣
- Roots 根目錄
- Transports 傳輸層
- stdio 用于本地
- 通過 uvx 或 npx 跑一個本地服務供mcp客戶端(也是大模型客戶端)調用
- streamable http 最新的
- http + sse : 已廢棄,老的mcp依然使用
- stdio 用于本地
MCP客戶端:
- Claude App (要翻墻)
- Cusor
- Vscode
- Cherry Studio
- …
mcp的資源
目前 MCP 非常火爆,很多開發者參與:
-
https://github.com/modelcontextprotocol/servers/tree/main/src
-
https://mcp.so/
-
https://www.modelscope.cn/mcp
-
https://github.com/punkpeye/awesome-mcp-servers/tree/main
MCP的工作原理
關于mcp工作過程 https://zhuanlan.zhihu.com/p/29001189476
- 1, 用戶使用客戶端(如 Cursor, Cherry Studio), 并指定開啟的mcp工具,并向大模型提出問題
- 2, 客戶端將問題發大模型,同時附帶上可使用的mcp工具列表
- 3, 如果大模型需要調用mcp工具獲取外部數據,大模型會中斷并返回需要調用的工具列表, 并包含一個中斷原因: tool_call; 如果不需要調用工具,則直接返回結果
- 4, 客戶端根據大模型返回的工具列表,調用相應的mcp工具, 獲取外部數據
- 5, 客戶端將獲取到的數據,傳遞給大模型
- 6, 大模型根據獲取到的數據,繼續處理問題
- 7, 大模型返回結果
- 8, 客戶端將結果返回給用戶
MCP server 開發
官方文檔: https://modelcontextprotocol.io/introduction
Python SDK: https://github.com/modelcontextprotocol/python-sdk
支持 Python, Typescript, Java …
這里以 Python 為例, 用 uv
創建一個項目
如果沒有安裝 uv
, 請先安裝 uv
: https://docs.astral.sh/uv/getting-started/installation/
uv init mcp-server-democd mcp-server-demouv add "mcp[cli]"source .venv/bin/activate
創建一個 add_server.py
, 代碼:
# server.py
from mcp.server.fastmcp import FastMCP# Create an MCP server
mcp = FastMCP("Demo")# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:"""Add two numbers"""return a + b# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:"""Get a personalized greeting"""return f"Hello, {name}!"if __name__ == "__main__":# Start the servermcp.run(transport="streamable-http")
調試 MCP server:
-
測試/調試MCP程序, 啟動2個終端
-
在一個終端運行 mcp 服務,
streamable-http
默認監聽8000
端口 和mcp
端點python add_server.py
-
在另外一個終端中, 啟動一個測試客戶端
mcp dev add_server.py
-
瀏覽器打開
http://127.0.0.1:6274
-
Transport 選擇
streamable-http
-
URL 填入
http://localhost:8000/mcp
-
點擊
Connect
, 可以看到連接成功 -
然后點擊
Tools
, 點擊List Tools
列出所有的工具 -
點擊
add
進行測試, 輸入a
和b
的值, 點擊Run Tool
, 可以看到返回結果
在客戶端使用 MCP server
在 Cherry Studio 中使用上面的 add MCP server
- 下載 Cherry Studio
在 Cherry Studio 中選擇支持工具調用的大模型(帶工具icon的模型)
在對話中,開啟我們剛才添加的 my_test_add工具:
因為我們這個add工具過于簡單,如果直接問大模型 100 + 3 等于多少,模型會直接返回結果,而不會調用我們添加的 add 工具 , 因此,我們這里需要換種方式提問,以便大模型能夠調用我們添加的 add 工具
可見, 大模型調用了我們添加的 add 工具,并返回了正確結果