從0到1開發一個自己的工具 MCP 并發布到 test PyPi(Python個人版)

目錄

  • 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
    在這里插入圖片描述
  • 啥都不用管,CommandArguments已經自動配好了,直接點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!!!
如對您有幫助,感謝投喂!
微信感謝投喂版

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

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

相關文章

RabbitMQ緩存詳解:由來、發展、核心場景與實戰應用

一、RabbitMQ的由來與發展歷程 1.1 RabbitMQ的誕生背景 RabbitMQ誕生于金融行業的需求,最初由Rabbit Technologies Ltd開發,后被SpringSource收購,最終成為Pivotal的一部分。它的設計初衷是為了解決分布式系統中消息可靠傳輸的問題。在早期金融交易系統中,系統間的通信需…

機器學習與深度學習18-線性代數01

目錄 前文回顧1.特征向量和特征值2.矩陣與模型3.內積和外積4.向量的范數5.正交矩陣 前文回顧 上一篇文章地址:鏈接 1.特征向量和特征值 在機器學習中,特征向量和特征值是用于描述數據集中的特征或變量之間關系的重要概念。它們在降維技術(…

如何讓 VS Code 僅通過滾輪放大字體,而不縮放整個界面?

在 VS Code 中,默認情況下使用 Ctrl滾輪(Windows/Linux)或 Cmd滾輪(Mac)會同時縮放整個界面(包括 UI 元素和編輯器字體)。如果你希望僅放大編輯器字體而不影響界面縮放,可以通過以下…

Vue3中v-bind指令用法詳解

在 Vue 3 中&#xff0c;v-bind 是一個核心指令&#xff0c;用于動態綁定 HTML 屬性或組件的 props 到 Vue 實例的數據。以下是詳細講解&#xff1a; 一、基礎用法 1. 綁定單個屬性 vue 復制 下載 <template><!-- 綁定 img 的 src 屬性 --><img v-bind:src…

算法題(169):最大子段和(分治思想)

審題&#xff1a; 本題需要我們找到區間的最大子段和并輸出結果 思路&#xff1a; 方法一&#xff1a;分治思想 我們可以把給定區間平均分成兩部分&#xff0c;然后獲取左段區間的最大子段和&#xff0c;右段區間的最大子段和&#xff0c;以及跨區間的最大子段和。最后比較出他…

Linux 線程深度解析:從內存管理到線程控制的核心機制

文章目錄 引言一、Linux 線程概念1.1 什么是線程1.2 分頁式存儲管理1.2.1 虛擬地址和頁表的由來1.2.2 物理內存管理struct page 的主要用途 1.2.3 頁表1.2.4 頁目錄結構1.2.5 兩級頁表的地址轉換1.2.6 缺頁異常 1.3 線程的優點1.4 線程缺點1.5 線程異常1.6 線程用途 二、Linux進…

玩轉計算機視覺——按照配置部署paddleOCR(英偉達環境與昇騰300IDUO環境)

英偉達環境安裝 創建虛擬環境 conda create -n paddleOCR python3.10 -y conda activate paddleOCRconda install jupyterlab -y conda install ipykernel -y python -m ipykernel install --user --name paddleOCR --display-name "paddle OCR"下載PaddleOCR的GPU…

Java機器學習全攻略:從基礎原理到實戰案例詳解

在當今AI驅動的技術浪潮中,機器學習已成為Java開發者必須掌握的核心技能之一。本文將系統性地介紹Java機器學習的原理基礎、常用框架,并通過多個實戰案例展示如何在實際項目中應用這些技術。無論你是剛接觸機器學習的Java開發者,還是希望鞏固基礎的中級工程師,這篇文章都將…

eBPF 技術詳解及其在網絡安全領域的應用與挑戰

摘要 eBPF&#xff08;extended Berkeley Packet Filter&#xff09;是 Linux 內核中的一項革命性技術&#xff0c;它允許用戶在不修改內核代碼或加載內核模塊的情況下&#xff0c;安全、高效地運行自定義程序。eBPF 的出現極大地擴展了 Linux 內核的可編程性&#xff0c;使其…

error:MISCONF Redis is configured to save RDB snapshots

一、背景 在使用redis異步驅動方式下&#xff0c;執行hset指令時&#xff0c;報錯 redisAsyncCommand((redisAsyncContext *)c, dumpReply, "hset role:10001", "hset role:10001 name %s age %d sex %s", "mark", 31, "male");二、原…

Android-Mod-Menu 使用教程

目錄 簡介前提條件安裝步驟1. 下載和解壓項目2. 配置 Android Studio3. 安裝到設備 修改游戲 APK1. 確定游戲主活動2. 集成模組菜單方法 1&#xff1a;通過服務啟動&#xff08;推薦&#xff09;方法 2&#xff1a;通過活動啟動&#xff08;僅在游戲檢測模組時使用&#xff09;…

SpringBoot 自動化部署實戰:從環境搭建到 CI/CD 全流程

SpringBoot 自動化部署全流程實戰 一、環境準備&#xff08;開發側&#xff09; 基礎工具鏈安裝&#xff1a; # JDK 17 brew install openjdk17 # Maven 構建工具 brew install maven # Docker 環境 brew install --cask docker項目配置驗證&#xff1a; <!-- pom.xml 關…

Flutter動畫與交互:打造流暢用戶體驗的完整指南

在移動應用開發中&#xff0c;流暢的動畫和自然的交互是提升用戶體驗的關鍵因素。Flutter作為Google推出的跨平臺UI工具包&#xff0c;提供了一套強大而靈活的動畫系統&#xff0c;使開發者能夠輕松創建專業級的動畫效果。本文將深入探討Flutter中的動畫與交互技術&#xff0c;…

山東大學軟件學院項目實訓:基于大模型的模擬面試系統項目總結(九)

在山東大學軟件學院的項目實訓中&#xff0c;團隊成員們圍繞基于大模型的模擬面試系統展開了一系列開發與優化工作。以下是本周項目的核心進展與成果總結。 前端界面優化與 Bug 修復&#xff08;吳尤&#xff09; Logo 顯示問題修復 在項目開發過程中&#xff0c;團隊發現項…

14.vue.js的watch()的注意事項(1)

一、 Q &#xff1a;因為 state 有內部的屬性 也就是id。 因為要追逐id。所以要寫函數&#xff1f;而不能直接監聽state。 只監聽state &#xff0c;監聽不到id的變化嗎&#xff1f; A&#xff1a; 為什么監聽 state 不等于監聽 state.id&#xff1f; 在 Vue 3 中&#xff0…

強化學習入門:價值、回報、策略概念詳解

前言 最近想開一個關于強化學習專欄&#xff0c;因為DeepSeek-R1很火&#xff0c;但本人對于LLM連門都沒入。因此&#xff0c;只是記錄一些類似的讀書筆記&#xff0c;內容不深&#xff0c;大多數只是一些概念的東西&#xff0c;數學公式也不會太多&#xff0c;還望讀者多多指教…

基于“數智立體化三維架構”框架的醫療數智化機制研究

1 研究背景與框架基礎 當前,全球醫療服務體系正經歷深刻的數智化轉型浪潮,人工智能、大數據、云計算等新一代信息技術與醫療健康領域的融合不斷深入,催生了醫療服務模式的革命性變化。在我國,數智化技術已成為提升基層衛生服務質量、促進醫療服務公平可及、增進百姓健康福…

OpenCV CUDA模塊圖像變形------對圖像進行旋轉操作函數rotate()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于對圖像進行 GPU 加速的旋轉操作&#xff0c;支持指定旋轉角度、縮放中心偏移和插值方法。是 OpenCV CUDA 模塊中用于圖像旋轉的核心函…

【面板數據】中國與世界各國新能源汽車進出口數據-分類別與不分類別(2017-2024年)

新能源汽車作為中國制造高質量發展的重要代表&#xff0c;其進出口數據不僅反映了我國技術實力與產業格局的變化&#xff0c;也是理解全球綠色交通趨勢、制定國家戰略決策的重要依據。目前國內主流定義判斷標準主要參考中國工信部于2009年發布的《新能源汽車生產企業及產品準入…

亞馬遜云服務器(AWS)會限制用戶使用嗎?深度解讀AWS資源政策

一、AWS的資源邏輯&#xff1a;為什么說"不限速"&#xff1f; AWS采用"按需分配"的資源配置模式&#xff0c;其核心限制并非來自人為設定&#xff0c;而是取決于&#xff1a; 實例類型配置&#xff08;如t2.micro默認CPU積分制&#xff09; 賬戶服務配額…