@@ -57,7 +57,7 @@ func main() {
5757 }
5858}
5959
60- func helloHandler (ctx context .Context , request mcp .CallToolRequest ) (*mcp .CallToolResult , error ) {
60+ func helloHandler (ctx context .Context , requestContext server . RequestContext , request mcp .CallToolRequest ) (*mcp .CallToolResult , error ) {
6161 name , err := request.RequireString (" name" )
6262 if err != nil {
6363 return mcp.NewToolResultError (err.Error ()), nil
@@ -92,6 +92,7 @@ MCP Go handles all the complex protocol details and server management, so you ca
9292 - [ Resources] ( #resources )
9393 - [ Tools] ( #tools )
9494 - [ Prompts] ( #prompts )
95+ - [ RequestContext] ( #RequestContext )
9596- [ Examples] ( #examples )
9697- [ Extras] ( #extras )
9798 - [ Transports] ( #transports )
@@ -153,7 +154,7 @@ func main() {
153154 )
154155
155156 // Add the calculator handler
156- s.AddTool (calculatorTool, func (ctx context.Context , request mcp.CallToolRequest ) (*mcp.CallToolResult , error ) {
157+ s.AddTool (calculatorTool, func (ctx context.Context , requestContext server. RequestContext , request mcp.CallToolRequest ) (*mcp.CallToolResult , error ) {
157158 // Using helper functions for type-safe argument access
158159 op , err := request.RequireString (" operation" )
159160 if err != nil {
@@ -251,7 +252,7 @@ resource := mcp.NewResource(
251252)
252253
253254// Add resource with its handler
254- s.AddResource (resource, func (ctx context.Context , request mcp.ReadResourceRequest ) ([]mcp.ResourceContents , error ) {
255+ s.AddResource (resource, func (ctx context.Context , requestContext server. RequestContext , request mcp.ReadResourceRequest ) ([]mcp.ResourceContents , error ) {
255256 content , err := os.ReadFile (" README.md" )
256257 if err != nil {
257258 return nil , err
@@ -279,7 +280,7 @@ template := mcp.NewResourceTemplate(
279280)
280281
281282// Add template with its handler
282- s.AddResourceTemplate (template, func (ctx context.Context , request mcp.ReadResourceRequest ) ([]mcp.ResourceContents , error ) {
283+ s.AddResourceTemplate (template, func (ctx context.Context , requestContext server. RequestContext , request mcp.ReadResourceRequest ) ([]mcp.ResourceContents , error ) {
283284 // Extract ID from the URI using regex matching
284285 // The server automatically matches URIs to templates
285286 userID := extractIDFromURI (request.Params .URI )
@@ -328,7 +329,7 @@ calculatorTool := mcp.NewTool("calculate",
328329 ),
329330)
330331
331- s.AddTool (calculatorTool, func (ctx context.Context , request mcp.CallToolRequest ) (*mcp.CallToolResult , error ) {
332+ s.AddTool (calculatorTool, func (ctx context.Context , requestContext server. RequestContext , request mcp.CallToolRequest ) (*mcp.CallToolResult , error ) {
332333 args := request.GetArguments ()
333334 op := args[" operation" ].(string )
334335 x := args[" x" ].(float64 )
@@ -372,7 +373,7 @@ httpTool := mcp.NewTool("http_request",
372373 ),
373374)
374375
375- s.AddTool (httpTool, func (ctx context.Context , request mcp.CallToolRequest ) (*mcp.CallToolResult , error ) {
376+ s.AddTool (httpTool, func (ctx context.Context , requestContext server. RequestContext , request mcp.CallToolRequest ) (*mcp.CallToolResult , error ) {
376377 args := request.GetArguments ()
377378 method := args[" method" ].(string )
378379 url := args[" url" ].(string )
@@ -440,7 +441,7 @@ s.AddPrompt(mcp.NewPrompt("greeting",
440441 mcp.WithArgument (" name" ,
441442 mcp.ArgumentDescription (" Name of the person to greet" ),
442443 ),
443- ), func (ctx context.Context , request mcp.GetPromptRequest ) (*mcp.GetPromptResult , error ) {
444+ ), func (ctx context.Context , requestContext server. RequestContext , request mcp.GetPromptRequest ) (*mcp.GetPromptResult , error ) {
444445 name := request.Params .Arguments [" name" ]
445446 if name == " " {
446447 name = " friend"
@@ -464,7 +465,7 @@ s.AddPrompt(mcp.NewPrompt("code_review",
464465 mcp.ArgumentDescription (" Pull request number to review" ),
465466 mcp.RequiredArgument (),
466467 ),
467- ), func (ctx context.Context , request mcp.GetPromptRequest ) (*mcp.GetPromptResult , error ) {
468+ ), func (ctx context.Context , requestContext server. RequestContext , request mcp.GetPromptRequest ) (*mcp.GetPromptResult , error ) {
468469 prNumber := request.Params .Arguments [" pr_number" ]
469470 if prNumber == " " {
470471 return nil , fmt.Errorf (" pr_number is required" )
@@ -495,7 +496,7 @@ s.AddPrompt(mcp.NewPrompt("query_builder",
495496 mcp.ArgumentDescription (" Name of the table to query" ),
496497 mcp.RequiredArgument (),
497498 ),
498- ), func (ctx context.Context , request mcp.GetPromptRequest ) (*mcp.GetPromptResult , error ) {
499+ ), func (ctx context.Context , requestContext server. RequestContext , request mcp.GetPromptRequest ) (*mcp.GetPromptResult , error ) {
499500 tableName := request.Params .Arguments [" table" ]
500501 if tableName == " " {
501502 return nil , fmt.Errorf (" table name is required" )
@@ -530,6 +531,9 @@ Prompts can include:
530531
531532</details >
532533
534+ ### RequestContext
535+
536+
533537## Examples
534538
535539For examples, see the [ ` examples/ ` ] ( examples/ ) directory.
@@ -723,7 +727,7 @@ s := server.NewMCPServer(
723727The session context is automatically passed to tool and resource handlers:
724728
725729``` go
726- s.AddTool (mcp.NewTool (" session_aware" ), func (ctx context.Context , req mcp.CallToolRequest ) (*mcp.CallToolResult , error ) {
730+ s.AddTool (mcp.NewTool (" session_aware" ), func (ctx context.Context , requestContext server. RequestContext , req mcp.CallToolRequest ) (*mcp.CallToolResult , error ) {
727731 // Get the current session from context
728732 session := server.ClientSessionFromContext (ctx)
729733 if session == nil {
0 commit comments