@@ -6,6 +6,10 @@ import { CoreMessage } from '@mastra/core/llm';
66import { RequestContext } from '@mastra/core/request-context' ;
77import { Observable } from 'rxjs' ;
88
9+ import {
10+ getMcpAppToolMetadata ,
11+ type McpAppToolMetadata ,
12+ } from './mcp-apps-registry.js' ;
913import { Store } from './memory-store.js' ;
1014import { defaultStore } from './memory-store.js' ;
1115
@@ -56,6 +60,36 @@ function createToolCallCacheKey(
5660 return `${ agentId } :${ threadId } :${ toolCallId } ` ;
5761}
5862
63+ function buildMcpAppsActivityContent (
64+ metadata : McpAppToolMetadata ,
65+ toolInput : unknown ,
66+ result : unknown ,
67+ ) : Record < string , unknown > {
68+ const input = asRecord ( toolInput ) ?? { } ;
69+ const resultRecord = asRecord ( result ) ;
70+ const hasContentArray =
71+ resultRecord !== undefined && Array . isArray ( resultRecord [ 'content' ] ) ;
72+
73+ const shapedResult : Record < string , unknown > = hasContentArray
74+ ? ( resultRecord as Record < string , unknown > )
75+ : {
76+ content : [
77+ {
78+ type : 'text' ,
79+ text : JSON . stringify ( result ?? null ) ,
80+ } ,
81+ ] ,
82+ structuredContent : resultRecord ?? result ,
83+ } ;
84+
85+ return {
86+ serverId : metadata . serverId ,
87+ resourceUri : metadata . resourceUri ,
88+ toolInput : input ,
89+ result : shapedResult ,
90+ } ;
91+ }
92+
5993function readThoughtSignature ( value : unknown ) : string | undefined {
6094 const record = asRecord ( value ) ;
6195 const googleMetadata = getNestedRecord (
@@ -344,6 +378,15 @@ export class ExtendedMastraAgent extends AbstractAgent {
344378 } ;
345379 observer . next ( resultEvent ) ;
346380 } ,
381+ onActivitySnapshot : ( { messageId, activityType, content } ) => {
382+ const activityEvent : BaseEvent = {
383+ type : EventType . ACTIVITY_SNAPSHOT ,
384+ messageId,
385+ activityType,
386+ content,
387+ } as BaseEvent ;
388+ observer . next ( activityEvent ) ;
389+ } ,
347390 onRunFinished : ( ) => {
348391 const finishedEvent : BaseEvent = {
349392 type : EventType . RUN_FINISHED ,
@@ -374,10 +417,19 @@ export class ExtendedMastraAgent extends AbstractAgent {
374417 toolCallId : string ;
375418 result : unknown ;
376419 } ) => void ;
420+ onActivitySnapshot : ( value : {
421+ messageId : string ;
422+ activityType : string ;
423+ content : Record < string , unknown > ;
424+ } ) => void ;
377425 onRunFinished : ( ) => void ;
378426 onError : ( error : unknown ) => void ;
379427 } ,
380428 ) : Promise < void > {
429+ const pendingToolCalls = new Map <
430+ string ,
431+ { toolName : string ; args : unknown }
432+ > ( ) ;
381433 const mastraMessages = convertAGUIMessagesToMastra ( input . messages as never ) ;
382434 const rehydratedToolResultNames = rehydrateToolResultNames (
383435 this . store ,
@@ -433,6 +485,10 @@ export class ExtendedMastraAgent extends AbstractAgent {
433485 input . threadId ,
434486 payload . payload ,
435487 ) ;
488+ pendingToolCalls . set ( payload . payload . toolCallId , {
489+ toolName : payload . payload . toolName ,
490+ args : payload . payload . args ,
491+ } ) ;
436492 handlers . onToolCallPart ( payload . payload ) ;
437493 break ;
438494 }
@@ -444,6 +500,23 @@ export class ExtendedMastraAgent extends AbstractAgent {
444500 } ;
445501 } ;
446502 handlers . onToolResultPart ( payload . payload ) ;
503+
504+ const pending = pendingToolCalls . get ( payload . payload . toolCallId ) ;
505+ if ( pending ) {
506+ const metadata = getMcpAppToolMetadata ( pending . toolName ) ;
507+ if ( metadata ) {
508+ handlers . onActivitySnapshot ( {
509+ messageId : assistantMessageId ,
510+ activityType : 'mcp-apps' ,
511+ content : buildMcpAppsActivityContent (
512+ metadata ,
513+ pending . args ,
514+ payload . payload . result ,
515+ ) ,
516+ } ) ;
517+ }
518+ pendingToolCalls . delete ( payload . payload . toolCallId ) ;
519+ }
447520 break ;
448521 }
449522 case 'error' : {
0 commit comments