end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

mcp.server.fastmcp for python + claude desktop によるautodesk fusionへの描画

先日の 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"
      ]
    }
  }
}