We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shiguri-01/fusion-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
from typing import TypedDict
import adsk.core
import adsk.fusion
from adsk.fusion import Parameter
from ..errors import FusionExecutionError, InvalidUserInputError
class FusionParameter(TypedDict):
name: str
value: float
unit: str
expression: str
comment: str
def parameter_to_dict(param: Parameter) -> FusionParameter:
"""パラメータを辞書形式に変換する
Args:
param (Parameter): Fusionのパラメータオブジェクト
Returns:
dict: パラメータの情報を含む辞書
"""
param_dict: FusionParameter = {
"name": param.name,
"value": param.value,
"unit": param.unit,
"expression": param.expression,
"comment": param.comment or "",
}
return param_dict
def get_user_parameters() -> list[FusionParameter]:
"""ユーザーパラメータの一覧を取得する
Returns:
list[dict]: ユーザーパラメータのリスト
"""
app = adsk.core.Application.get()
if not app.activeProduct:
raise FusionExecutionError("No active design found")
design = adsk.fusion.Design.cast(app.activeProduct)
if not design:
raise FusionExecutionError("Active product is not a design")
user_params = design.userParameters.asArray()
return [parameter_to_dict(param) for param in user_params]
def set_parameter(param_name: str, expression: str) -> FusionParameter:
"""指定したパラメータの値を設定する
ユーザーパラメータ・モデルパラメータの両方に対応
Args:
param_name (str): 設定するパラメータの名前
expression (str): 設定する値の式(例: "10 cm")
Returns:
dict: 設定後のパラメータ情報
Raises:
InvalidUserInputError: 入力が不正な場合
FusionExecutionError: パラメータの設定に失敗した場合
"""
if not param_name:
raise InvalidUserInputError("Parameter 'param_name' cannot be empty")
if not expression:
raise InvalidUserInputError("Parameter 'expression' cannot be empty")
app = adsk.core.Application.get()
if not app.activeProduct:
raise FusionExecutionError("No active design found")
design = adsk.fusion.Design.cast(app.activeProduct)
if not design:
raise FusionExecutionError("Active product is not a design")
parameter = design.allParameters.itemByName(param_name)
if not parameter:
raise FusionExecutionError(f"Parameter '{param_name}' not found")
try:
parameter.expression = expression
return parameter_to_dict(parameter)
except Exception as e:
raise FusionExecutionError(f"Failed to set parameter '{param_name}': {e}") from e