16
16
from .openapi_utils import (
17
17
clean_schema_for_display ,
18
18
generate_example_from_schema ,
19
- parse_param_schema_for_python_type_and_default ,
19
+ get_python_type_and_default ,
20
+ get_single_param_type_from_schema ,
20
21
resolve_schema_references ,
21
22
PYTHON_TYPE_IMPORTS ,
22
23
)
@@ -101,18 +102,22 @@ def create_mcp_tools_from_openapi(
101
102
102
103
def _create_http_tool_function (function_template : Callable , properties : Dict [str , Any ], additional_variables : Dict [str , Any ]) -> Callable :
103
104
# Build parameter string with type hints
104
- param_list = []
105
- param_list_with_defaults = []
106
- for name , schema in properties .items ():
107
- type_hint , has_default_value = parse_param_schema_for_python_type_and_default ( schema )
105
+ parsed_parameters = {}
106
+ parsed_parameters_with_defaults = {}
107
+ for param_name , parsed_param_schema in properties .items ():
108
+ type_hint , has_default_value = get_python_type_and_default ( parsed_param_schema )
108
109
if has_default_value :
109
- param_list_with_defaults . append ( f"{ name } : { type_hint } " )
110
+ parsed_parameters_with_defaults [ param_name ] = f"{ param_name } : { type_hint } "
110
111
else :
111
- param_list .append (f"{ name } : { type_hint } " )
112
- parameters_str = ", " .join (param_list + param_list_with_defaults )
112
+ parsed_parameters [param_name ] = f"{ param_name } : { type_hint } "
113
+
114
+ parsed_parameters_keys = list (parsed_parameters .keys ()) + list (parsed_parameters_with_defaults .keys ())
115
+ parsed_parameters_values = list (parsed_parameters .values ()) + list (parsed_parameters_with_defaults .values ())
116
+ parameters_str = ", " .join (parsed_parameters_values )
117
+ kwargs_str = ', ' .join ([f"'{ k } ': { k } " for k in parsed_parameters_keys ])
113
118
114
119
dynamic_function_body = f"""async def dynamic_http_tool_function({ parameters_str } ):
115
- kwargs = {{{ ', ' . join ([ f"' { k } ': { k } " for k in properties . keys ()]) } }}
120
+ kwargs = {{{ kwargs_str } }}
116
121
return await http_tool_function_template(**kwargs)
117
122
"""
118
123
@@ -302,7 +307,6 @@ def create_http_tool(
302
307
query_params = []
303
308
header_params = []
304
309
body_params = []
305
-
306
310
for param in parameters :
307
311
param_name = param .get ("name" )
308
312
param_in = param .get ("in" )
@@ -360,10 +364,12 @@ def create_http_tool(
360
364
param_required = param .get ("required" , False )
361
365
362
366
properties [param_name ] = {
363
- "type" : param_schema . get ( "type" , "string" ),
367
+ "type" : get_single_param_type_from_schema ( param_schema ),
364
368
"title" : param_name ,
365
369
"description" : param_desc ,
366
370
}
371
+ if "default" in param_schema :
372
+ properties [param_name ]["default" ] = param_schema ["default" ]
367
373
368
374
if param_required :
369
375
required_props .append (param_name )
@@ -373,8 +379,13 @@ def create_http_tool(
373
379
param_schema = param .get ("schema" , {})
374
380
param_required = param .get ("required" , False )
375
381
376
- properties [param_name ] = param_schema
377
- properties [param_name ]["title" ] = param_name
382
+ # properties[param_name] = param_schema
383
+ properties [param_name ] = {
384
+ "type" : get_single_param_type_from_schema (param_schema ),
385
+ "title" : param_name ,
386
+ }
387
+ if "default" in param_schema :
388
+ properties [param_name ]["default" ] = param_schema ["default" ]
378
389
379
390
if param_required :
380
391
required_props .append (param_name )
0 commit comments