@@ -167,12 +167,14 @@ func savePayload(baseDir, sessionID, queryID string, payload []byte) (string, er
167167// This middleware:
168168// 1. Generates a random ID for the query
169169// 2. Extracts session ID from context (or uses "default")
170- // 3. Saves the response payload to {baseDir}/{sessionID}/{queryID}/payload.json
171- // 4. Returns first 500 chars of payload + jq inferred schema
170+ // 3. If payload size > sizeThreshold: saves to {baseDir}/{sessionID}/{queryID}/payload.json and returns metadata
171+ // 4. If payload size <= sizeThreshold: returns original response directly (no file storage)
172+ // 5. For large payloads: returns first 500 chars of payload + jq inferred schema
172173func WrapToolHandler (
173174 handler func (context.Context , * sdk.CallToolRequest , interface {}) (* sdk.CallToolResult , interface {}, error ),
174175 toolName string ,
175176 baseDir string ,
177+ sizeThreshold int ,
176178 getSessionID func (context.Context ) string ,
177179) func (context.Context , * sdk.CallToolRequest , interface {}) (* sdk.CallToolResult , interface {}, error ) {
178180 return func (ctx context.Context , req * sdk.CallToolRequest , args interface {}) (* sdk.CallToolResult , interface {}, error ) {
@@ -224,12 +226,24 @@ func WrapToolHandler(
224226 }
225227
226228 payloadSize := len (payloadJSON )
227- logger .LogInfo ("payload" , "Response data marshaled to JSON: tool=%s, queryID=%s, size=%d bytes (%.2f KB, %.2f MB)" ,
228- toolName , queryID , payloadSize , float64 (payloadSize )/ 1024 , float64 (payloadSize )/ (1024 * 1024 ))
229+ logger .LogInfo ("payload" , "Response data marshaled to JSON: tool=%s, queryID=%s, size=%d bytes (%.2f KB, %.2f MB), threshold=%d bytes" ,
230+ toolName , queryID , payloadSize , float64 (payloadSize )/ 1024 , float64 (payloadSize )/ (1024 * 1024 ), sizeThreshold )
231+
232+ // Check if payload size is within threshold - if so, return original response directly
233+ if payloadSize <= sizeThreshold {
234+ logger .LogInfo ("payload" , "Payload size (%d bytes) is within threshold (%d bytes), returning inline without file storage: tool=%s, queryID=%s" ,
235+ payloadSize , sizeThreshold , toolName , queryID )
236+ logMiddleware .Printf ("Payload within threshold: tool=%s, queryID=%s, size=%d bytes, threshold=%d bytes, returning inline" ,
237+ toolName , queryID , payloadSize , sizeThreshold )
238+ // Return the original result without modification
239+ return result , data , err
240+ }
229241
230- // Save the payload
231- logger .LogInfo ("payload" , "Starting payload storage to filesystem: tool=%s, queryID=%s, session=%s, baseDir=%s" ,
232- toolName , queryID , sessionID , baseDir )
242+ // Payload is larger than threshold - save to filesystem
243+ logger .LogInfo ("payload" , "Payload size (%d bytes) exceeds threshold (%d bytes), saving to filesystem: tool=%s, queryID=%s, session=%s, baseDir=%s" ,
244+ payloadSize , sizeThreshold , toolName , queryID , sessionID , baseDir )
245+ logMiddleware .Printf ("Payload exceeds threshold: tool=%s, queryID=%s, size=%d bytes, threshold=%d bytes, saving to disk" ,
246+ toolName , queryID , payloadSize , sizeThreshold )
233247
234248 filePath , saveErr := savePayload (baseDir , sessionID , queryID , payloadJSON )
235249 if saveErr != nil {
0 commit comments