Blender-MCP服務源碼2-依賴分析
有個大佬做了一個Blender-MCP源碼,第一次提交代碼是【2025年3月7號】今天是【2025年月15日】也就是剛過去一周的時間,所以想從0開始學習這個代碼,了解一下大佬們的開發思路
1-核心知識點
from mcp.server.fastmcp import FastMCP, Context, Image
import socket
import json
import asyncio
import logging
from dataclasses import dataclass
from contextlib import asynccontextmanager
from typing import AsyncIterator, Dict, Any, List
- 1)Blender代碼中核心代碼和依賴的功能是什么?
- 2)socket長連接服務->用于Claude與插件之間通訊->那Blender和LLM之間在通訊什么內容?
- 3)為什么LLM通訊后就完成了3D的建模,原理是什么?->是不是我把請求方法抽取出來就可以用編碼的方式完成Blender的建模了(MCP貌似就是通過請求API傳遞對應的參數來完成建模)
- 4)猜想內容已經實現
2-思路整理
- 1)【必選】MCP的mcp.server.fastmcp服務依賴
- 2)【核心】socket長連接服務->用于Claude與插件之間通訊
- 3)
socket到底做了什么?->我如果做一個類似的MCP,我要做什么?
3-參考網址
- Blender-MCP-Github地址:https://github.com/ahujasid/blender-mcp
- B站大佬開源Blender開發框架:https://github.com/xzhuah/BlenderAddonPackageTool
- B站大佬開源Blender開發框架教程
4-依賴分析
以下是對這些導入語句及其依賴的詳細分析:
1. from mcp.server.fastmcp import FastMCP, Context, Image
- 來源:這是從
mcp.server.fastmcp
模塊中導入特定的類。mcp
可能是某個自定義的 Python 包,server
可能是該包下的一個子模塊,fastmcp
則是子模塊中的一個 Python 文件。 - 功能:
FastMCP
:通常代表某種快速的消息處理或通信協議相關的類。可能用于高效地處理消息、請求和響應,在服務器端的應用中可能用于快速處理客戶端的連接和數據交互。Context
:這個類一般用于保存上下文信息。在編程中,上下文信息可以包含當前操作的相關狀態、配置等數據,以便在不同的函數或方法之間共享和傳遞。Image
:可能是用于處理圖像的類。它可能包含圖像的加載、保存、轉換等操作,可用于圖像處理相關的任務。
2. import socket
- 來源:
socket
是 Python 標準庫中的一個模塊。 - 功能:
socket
模塊提供了創建網絡套接字的功能,用于實現網絡通信。它可以創建 TCP 或 UDP 套接字,通過網絡發送和接收數據。常用于構建客戶端 - 服務器應用程序,允許不同的計算機之間進行數據交換。
3. import json
- 來源:
json
是 Python 標準庫中的一個模塊。 - 功能:
json
模塊用于處理 JSON(JavaScript Object Notation)數據。JSON 是一種輕量級的數據交換格式,易于人類閱讀和編寫,也易于機器解析和生成。json
模塊提供了將 Python 對象(如字典、列表)轉換為 JSON 字符串(json.dumps()
),以及將 JSON 字符串轉換為 Python 對象(json.loads()
)的功能。
4. import asyncio
- 來源:
asyncio
是 Python 標準庫中的一個模塊,用于支持異步編程。 - 功能:異步編程允許程序在等待某些操作(如網絡請求、文件讀寫)完成時,繼續執行其他任務,從而提高程序的并發性能。
asyncio
提供了協程、事件循環等機制,使得開發者可以編寫高效的異步代碼。例如,可以使用async/await
關鍵字定義協程函數,使用事件循環來調度和執行這些協程。
5. import logging
- 來源:
logging
是 Python 標準庫中的一個模塊,用于實現日志記錄功能。 - 功能:日志記錄是程序開發和調試過程中非常重要的一部分。
logging
模塊提供了靈活的日志記錄功能,可以將程序運行過程中的信息(如調試信息、錯誤信息、警告信息等)輸出到控制臺、文件或其他目標。通過設置不同的日志級別(如DEBUG
、INFO
、WARNING
、ERROR
、CRITICAL
),可以控制日志的詳細程度。
6. from dataclasses import dataclass
- 來源:
dataclasses
是 Python 3.7 及以上版本引入的標準庫模塊。 - 功能:
dataclass
是一個裝飾器,用于簡化類的定義。使用@dataclass
裝飾的類可以自動生成一些特殊方法,如__init__()
、__repr__()
、__eq__()
等,從而減少了樣板代碼的編寫。通常用于定義簡單的數據容器類。
7. from contextlib import asynccontextmanager
- 來源:
contextlib
是 Python 標準庫中的一個模塊,提供了上下文管理器相關的工具。 - 功能:
asynccontextmanager
是一個裝飾器,用于創建異步上下文管理器。異步上下文管理器可以在異步代碼中使用async with
語句,確保在進入和退出上下文時執行特定的操作,如資源的分配和釋放。
8. from typing import AsyncIterator, Dict, Any, List
- 來源:
typing
是 Python 標準庫中的一個模塊,用于提供類型提示功能。 - 功能:
AsyncIterator
:用于表示異步迭代器,即可以在異步代碼中使用async for
語句進行迭代的對象。Dict
:用于表示字典類型的提示,指定字典的鍵和值的類型。Any
:表示任意類型,當無法確定或不關心某個變量的具體類型時,可以使用Any
進行類型提示。List
:用于表示列表類型的提示,指定列表中元素的類型。
綜上所述,這些導入語句涵蓋了自定義模塊、標準庫模塊,用于實現網絡通信、數據處理、異步編程、日志記錄、數據類定義、上下文管理和類型提示等功能。