@@ -101,29 +101,33 @@ def _generate_mcp_server_code(self, _code, params):
101101 imports .append (ast .unparse (node ))
102102 elif isinstance (node , ast .FunctionDef ):
103103 # 修改函数参数以包含 params 中的默认值
104- func_name = node .name
105- if func_name in params :
106- func_params = params [func_name ]
107- # 为函数参数设置默认值
108- for i , arg in enumerate (node .args .args ):
109- arg_name = arg .arg
110- if arg_name in func_params :
111- # 创建默认值节点
112- default_value = func_params [arg_name ]
113- if isinstance (default_value , str ):
114- default_node = ast .Constant (value = default_value )
115- elif isinstance (default_value , (int , float , bool )):
116- default_node = ast .Constant (value = default_value )
117- else :
118- default_node = ast .Constant (value = str (default_value ))
119-
120- # 添加到defaults列表
121- if not hasattr (node .args , 'defaults' ) or node .args .defaults is None :
122- node .args .defaults = []
123- # 确保defaults列表长度正确
124- while len (node .args .defaults ) < len (node .args .args ):
125- node .args .defaults .insert (0 , None )
126- node .args .defaults [i ] = default_node
104+ arg_names = [arg .arg for arg in node .args .args ]
105+
106+ # 为有默认值的参数添加默认值
107+ defaults = []
108+ for arg_name in arg_names :
109+ if arg_name in params :
110+ # 将参数值转换为 AST 节点
111+ default_value = params [arg_name ]
112+ if isinstance (default_value , str ):
113+ defaults .append (ast .Constant (value = default_value ))
114+ elif isinstance (default_value , (int , float , bool )):
115+ defaults .append (ast .Constant (value = default_value ))
116+ elif default_value is None :
117+ defaults .append (ast .Constant (value = None ))
118+ else :
119+ # 对于复杂类型,使用字符串表示
120+ defaults .append (ast .Constant (value = str (default_value )))
121+ else :
122+ defaults .append (None )
123+
124+ # 只保留非 None 的默认值(从右到左)
125+ while defaults and defaults [- 1 ] is None :
126+ defaults .pop ()
127+
128+ # 更新函数的默认参数
129+ if defaults :
130+ node .args .defaults = [d for d in defaults if d is not None ]
127131
128132 func_code = ast .unparse (node )
129133 functions .append (f"@mcp.tool()\n { func_code } \n " )
0 commit comments