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