目錄
- 1. 我理解的 MCP
- 2. 寫一個自己的MCP然后發布到 PyPi 上,包括加法工具和獲取當前 ip 工具
- 2.1 先碎碎念一下 uv
- 2.2 初始化項目(全程在 cmd 下運行命令)
- 2.3 添加 mcp 依賴
- 2.4 添加 server.py,先把加法功能添加上
- 2.5 運行并測試加法功能
- 2.6 再添加獲取當前本地 ip 功能并測試
- 3. 打包發布到 test PyPi
- 4. 測試已發布的包
- 5. MCP 的一些資源
1. 我理解的 MCP
- 官方的套詞就不說了,到處都是,這里說說個人的理解,僅供參考
- 目前 AI 的能力在一點一點的進步,但是 AI 的世界和真實的世界還是隔著十萬八千里,AI 知道時間是什么,但是不知道現在幾點;AI 的知識庫停留到它訓練的那一刻,它不知道最新的工具文檔和代碼包;AI 知道怎么開車,但是它看不到路,摸不到方向盤,踩不了剎車。
- 大家發現沒有,這里面 AI 缺了什么能力?對,缺乏和真實世界產生聯系的能力。而 MCP 就是用來做這個的,讓 AI 可以跟真實世界發生聯系,來回互動。這個我個人覺得就是 MCP 最大的意義。
- 有了 MCP,當你問 AI 現在幾點,它就不會再亂編了,會去調用時間 MCP,獲取真實的時間;有了 MCP,當你問 AI 一個最新出爐的技術文檔,它也不會再亂編了,會去調用網絡查詢 MCP,獲得最新的內容,整理后發給你;有了 MCP,它就可以開車,只要你把看路的能力,轉動方向盤的能力,剎車的能力給它,它就能開,能轉彎,能剎車。
2. 寫一個自己的MCP然后發布到 PyPi 上,包括加法工具和獲取當前 ip 工具
官方 Python SDK 地址
2.1 先碎碎念一下 uv
- 官方的 Python SDK 使用的是 Python 一個新的包管理工具,
uv
,已經寫了一篇前置文章把 uv 的簡單使用刷了一下,快速用 uv 模擬發布一個 Python 依賴包到 TestPyPI 上,以及常用命令 - 為什么要模擬發布呢,因為 MCP 這東西太新了,要求的 Python 版本是3.10起步,而我本地是3.9,不想不敢升級,印象中之前升級遇到坑,有一些老 Python 項目無法兼容3.10,似乎3.10刪了一些東西,無法理解,不向下兼容,坑死了。
- 拉回來,其實一開始是陷入了牛角尖,一直在琢磨如何測試 MCP 的效果,也是因為第一次接觸 MCP,對這個東西的運行機制不了解,雖然它一出來的時候就關注到了,但是網上的 MCP 例子,都是什么操控數據庫啦,操控 git 啦,操控聊天工具啦,其實都沒有什么本質上的提效(針對程序員來說),就一直沒有試用。
- 這一次正正經經的試用,起因其實是 Augment,太好用了,但也太慢了,不可能一直盯著它看進度,就想著做一個通知類的 MCP,讓 Augment 在運行結束后通知一下我,這樣可以把正在摸魚的我拉回電腦前。
- 接下來我們來嘗試開發一個簡單的 MCP,就叫 mcp-scoful-demo,功能包括加法、獲取當前本地 ip 地址
2.2 初始化項目(全程在 cmd 下運行命令)
uv init --lib mcp-scoful-demo # 初始化
cd mcp-scoful-demo # 進入初始化的目錄
2.3 添加 mcp 依賴
uv add "mcp[cli]"
2.4 添加 server.py,先把加法功能添加上
- 在
mcp-scoful-demo
目錄下,找到src/mcp-scoful-demo
,添加server.py
,內容如下:
cd src
cd mcp-scoful-demo
code server.py #假設你本地已經安裝了 vs code
- 把下面的代碼復制進 server.py
# server.py
from mcp.server.fastmcp import FastMCP# Create an MCP server
mcp = FastMCP("mcp-scoful-demo")# 不是老說 AI 不會計算嗎?那我們直接給 Ai 安排上加法功能,讓 AI 再也不會算錯了 hh
# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:"""Add two numbers"""return a + b
2.5 運行并測試加法功能
uv run mcp dev server.py
- 上面這個命令運行成功后,會自動出這樣的鏈接
- 按住 Ctrl 鍵,點擊
http://127.0.0.1:6274
,會跳轉瀏覽器,打開這樣一個界面,這個是官方出的基于 Node 的一個測試工具,可以測試本地開發的或者已經發布出去了的 MCP,使用上面的命令是直接指定要運行我們開發的 MCP,如果單純只是想運行起來這個inspector
工具,可以使用命令:npx @modelcontextprotocol/inspector
- 啥都不用管,
Command
和Arguments
已經自動配好了,直接點Connect
,出現下面這樣Connected
,就表示連上了我們開發的 mcp 了,如果報錯了,Connected
下面會出紅色的日志,但其實沒卵用,有個坑是,在server.py
里使用 print 打印,這里是不顯示的,必須引入logging
,然后使用logging.error()
,內容才會在這里顯示。另外 MCP 開發目前我還沒找到斷點debug
的方式,如果知道的大佬,麻煩評論一下。
- 接下來獲取一下我們開發的加法功能
- 測試一下加法功能
- 當當當,一個簡單的 MCP 就這樣做好了,是不是好簡單?!
2.6 再添加獲取當前本地 ip 功能并測試
- 在代碼最后加上
# 獲取當前本地 ip 地址
import httpx
@mcp.tool()
async def fetch_current_ip() -> str:"""fetch current ip"""async with httpx.AsyncClient() as client:response = await client.get(f"https://ipinfo.io/ip")return response.text
- 在
inspector
里重啟一下 MCP,因為修改代碼了
- 按照之前的步驟,
List tools
,選擇新的Tool
,再Run Tool
done
,又搞定一個 tool
3. 打包發布到 test PyPi
-
修改
__init__.py
- 清空原來的內容
- 修改內容如下:
from .server import servedef main():# Call serve functionserve()if __name__ == "__main__":main()
-
修改
pyproject.toml
- 在最后追加內容
[[tool.uv.index]] name = "testpypi" url = "https://test.pypi.org/simple/" publish-url = "https://test.pypi.org/legacy/" explicit = true[project.scripts] mcp-scoful-demo = "mcp_scoful_demo:main"
- 在最后追加內容
-
發布到
test PyPi
,按照下面的命令依次運行,具體詳細說明請看《快速用 uv 模擬發布一個 Python 依賴包到 TestPyPI 上,以及常用命令》uv sync
uv lock
uv build
uv publish --index testpypi
# 這個就是發布命令,如果是發生產,不用–index- 結果如下:
4. 測試已發布的包
- 等待5-10分鐘,需要同步一下
- 使用命令:
npx @modelcontextprotocol/inspector
,打開inspector
- 一樣點擊跳瀏覽器,然后在
Command
里輸入:uvx --default-index https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ mcp-scoful-demo
,(PS:這里可以指定版本號,mcp-scoful-demo==0.1.1
,另外如果是發布到生產環境,格式是:uvx mcp-scoful-demo
),確保Arguments
里沒內容,然后切換Tools
標簽,點擊List Tools
,隨便選一個工具,Run Tool
5. MCP 的一些資源
- 官方的開源組織 Model Context Protocol
- 官方文檔
- 幾個社區 MCP 庫(老實說,都沒啥意思,對程序員寫碼有用的沒幾個)
- https://mcp.so/
- https://cursor.directory/
- https://www.pulsemcp.com/
- https://glama.ai/mcp/servers
over, enjoy!!!
如對您有幫助,感謝投喂!