( resultContent: PromptMessage['content'], serverName: string, )
| 2478 | * Transform result content from an MCP tool or MCP prompt into message blocks |
| 2479 | */ |
| 2480 | export async function transformResultContent( |
| 2481 | resultContent: PromptMessage['content'], |
| 2482 | serverName: string, |
| 2483 | ): Promise<Array<ContentBlockParam>> { |
| 2484 | switch (resultContent.type) { |
| 2485 | case 'text': |
| 2486 | return [ |
| 2487 | { |
| 2488 | type: 'text', |
| 2489 | text: resultContent.text, |
| 2490 | }, |
| 2491 | ] |
| 2492 | case 'audio': { |
| 2493 | const audioData = resultContent as { |
| 2494 | type: 'audio' |
| 2495 | data: string |
| 2496 | mimeType?: string |
| 2497 | } |
| 2498 | return await persistBlobToTextBlock( |
| 2499 | Buffer.from(audioData.data, 'base64'), |
| 2500 | audioData.mimeType, |
| 2501 | serverName, |
| 2502 | `[Audio from ${serverName}] `, |
| 2503 | ) |
| 2504 | } |
| 2505 | case 'image': { |
| 2506 | // Resize and compress image data, enforcing API dimension limits |
| 2507 | const imageBuffer = Buffer.from(String(resultContent.data), 'base64') |
| 2508 | const ext = resultContent.mimeType?.split('/')[1] || 'png' |
| 2509 | const resized = await maybeResizeAndDownsampleImageBuffer( |
| 2510 | imageBuffer, |
| 2511 | imageBuffer.length, |
| 2512 | ext, |
| 2513 | ) |
| 2514 | return [ |
| 2515 | { |
| 2516 | type: 'image', |
| 2517 | source: { |
| 2518 | data: resized.buffer.toString('base64'), |
| 2519 | media_type: |
| 2520 | `image/${resized.mediaType}` as Base64ImageSource['media_type'], |
| 2521 | type: 'base64', |
| 2522 | }, |
| 2523 | }, |
| 2524 | ] |
| 2525 | } |
| 2526 | case 'resource': { |
| 2527 | const resource = resultContent.resource |
| 2528 | const prefix = `[Resource from ${serverName} at ${resource.uri}] ` |
| 2529 | |
| 2530 | if ('text' in resource) { |
| 2531 | return [ |
| 2532 | { |
| 2533 | type: 'text', |
| 2534 | text: `${prefix}${resource.text}`, |
| 2535 | }, |
| 2536 | ] |
| 2537 | } else if ('blob' in resource) { |
no test coverage detected