@@ -38,11 +38,35 @@ export class McpServerFactory {
3838 const toolDefinitions = this . toolRegistry . getToolDefinitions ( ) ;
3939 for ( const toolDef of toolDefinitions ) {
4040 // Adapt the registry handler to work with the new API signature
41- // The new API expects (parameters, extra) instead of (context, args, extras)
4241 const adaptedHandler = async (
4342 parameters : Record < string , unknown > ,
4443 extra : RequestHandlerExtra < ServerRequest , ServerNotification > ,
45- ) => toolDef . handler ( this . ctx , parameters , extra ) ;
44+ ) => {
45+ // Handle common double-wrapping patterns
46+ const cleanedParameters : Record < string , unknown > = { } ;
47+ for ( const [ key , value ] of Object . entries ( parameters ) ) {
48+ if ( value && typeof value === 'object' ) {
49+ const valueObj = value as Record < string , unknown > ;
50+
51+ // Pattern: Parameter value wrapped in object with same key
52+ // e.g., "currency": {"currency": {...actual data...}}
53+ if ( key in valueObj && Object . keys ( valueObj ) . length === 1 ) {
54+ cleanedParameters [ key ] = valueObj [ key ] ;
55+ } else {
56+ cleanedParameters [ key ] = value ;
57+ }
58+ } else {
59+ cleanedParameters [ key ] = value ;
60+ }
61+ }
62+
63+ const result = await toolDef . handler (
64+ this . ctx ,
65+ cleanedParameters ,
66+ extra ,
67+ ) ;
68+ return result ;
69+ } ;
4670
4771 // Use the new registerTool API with type assertion to avoid deep type recursion
4872 const registerTool = (
0 commit comments