@@ -25,6 +25,7 @@ import MAX_STEPS from "../session/prompt/max-steps.txt"
2525import { defer } from "../util/defer"
2626import { ToolRegistry } from "../tool/registry"
2727import { MCP } from "../mcp"
28+ import { McpCallContext } from "../mcp/context"
2829import { LSP } from "../lsp"
2930import { ReadTool } from "../tool/read"
3031import { FileTime } from "../file/time"
@@ -111,6 +112,7 @@ export namespace SessionPrompt {
111112 format : MessageV2 . Format . optional ( ) ,
112113 system : z . string ( ) . optional ( ) ,
113114 variant : z . string ( ) . optional ( ) ,
115+ metadata : z . record ( z . string ( ) , z . string ( ) ) . optional ( ) ,
114116 parts : z . array (
115117 z . discriminatedUnion ( "type" , [
116118 MessageV2 . TextPart . omit ( {
@@ -184,7 +186,7 @@ export namespace SessionPrompt {
184186 return message
185187 }
186188
187- return loop ( { sessionID : input . sessionID } )
189+ return loop ( { sessionID : input . sessionID , metadata : input . metadata } )
188190 } )
189191
190192 export async function resolvePromptParts ( template : string ) : Promise < PromptInput [ "parts" ] > {
@@ -273,6 +275,7 @@ export namespace SessionPrompt {
273275 export const LoopInput = z . object ( {
274276 sessionID : SessionID . zod ,
275277 resume_existing : z . boolean ( ) . optional ( ) ,
278+ metadata : z . record ( z . string ( ) , z . string ( ) ) . optional ( ) ,
276279 } )
277280 export const loop = fn ( LoopInput , async ( input ) => {
278281 const { sessionID, resume_existing } = input
@@ -611,6 +614,7 @@ export namespace SessionPrompt {
611614 processor,
612615 bypassAgentCheck,
613616 messages : msgs ,
617+ metadata : input . metadata ,
614618 } )
615619
616620 // Inject StructuredOutput tool if JSON schema mode enabled
@@ -749,6 +753,7 @@ export namespace SessionPrompt {
749753 processor : SessionProcessor . Info
750754 bypassAgentCheck : boolean
751755 messages : MessageV2 . WithParts [ ]
756+ metadata ?: Record < string , string >
752757 } ) {
753758 using _ = log . time ( "resolveTools" )
754759 const tools : Record < string , AITool > = { }
@@ -864,7 +869,12 @@ export namespace SessionPrompt {
864869 always : [ "*" ] ,
865870 } )
866871
867- const result = await execute ( args , opts )
872+ const result = await McpCallContext . provide (
873+ {
874+ metadata : input . metadata ,
875+ } ,
876+ ( ) => execute ( args , opts ) ,
877+ )
868878
869879 await Plugin . trigger (
870880 "tool.execute.after" ,
0 commit comments