先日の autodesk fusion for win へ fastapi for python を追加し、add in経由で作画 - end0tknr's kipple - web写経開発 までに、 fusion api経由で描画できましたので、今回は更に mcp.server.fastmcp for python + claude desktop を接続し、描画します。
POINT - claude desktopはSSE(Server-Sent Events)未対応
当初、sseを用いたmcpを考えましたが、 2025/5時点で、claude desktopはsse未対応で、 fusionもmcp.server.fastmcpをsseで上手く動作しませんでしたので、 transport='stdio' で実装しています
mcp_fusion_api.py
from mcp.server.fastmcp import FastMCP import httpx import logging import sys # c:/Users/end0t/AppData/Roaming/Claude/logs 以下にログ出力されます logger = logging.getLogger(__name__) handler = logging.StreamHandler(sys.stderr) formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.DEBUG) mcp = FastMCP("FusionApi", debug=True, log_level="DEBUG") def main(): mcp.run(transport="stdio") @mcp.tool(name="calc_nums",description="calcutation two numbers") def calc_nums(a: int, b: int) -> int: return (a + b) * 10 @mcp.tool(name="draw_box",description="draw box") def draw_box() -> str: logger.debug("start draw_box()") with httpx.Client() as client: data = {"width":2.0,"height":3.0,"depth":1.0} response = client.post("http://localhost:5000/drawbox", json=data) #print("Status:", response.status_code) #print("Response:", response.json()) return "ok" if __name__ == "__main__": main()
c:/Users/end0t/AppData/Roaming/Claude/claude_desktop_config.json
{ "mcpServers": { "fusion": { "command": "C:\\Users\\end0t\\miniconda3\\python.exe", "args": [ "c:\\Users\\end0t\\tmp\\FUSION\\mcp_fusion_api.py" ] } } }