Skip to content

Commit c2db133

Browse files
committed
chore(codersdk/toolsdk): add tool deps in toolbox struct instead of context
1 parent 3857bf0 commit c2db133

File tree

3 files changed

+133
-226
lines changed

3 files changed

+133
-226
lines changed

cli/exp_mcp.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -400,21 +400,21 @@ func mcpServerHandler(inv *serpent.Invocation, client *codersdk.Client, instruct
400400
)
401401

402402
// Create a new context for the tools with all relevant information.
403-
clientCtx := toolsdk.WithClient(ctx, client)
403+
tb := toolsdk.NewToolbox(client)
404404
// Get the workspace agent token from the environment.
405405
var hasAgentClient bool
406406
if agentToken, err := getAgentToken(fs); err == nil && agentToken != "" {
407407
hasAgentClient = true
408408
agentClient := agentsdk.New(client.URL)
409409
agentClient.SetSessionToken(agentToken)
410-
clientCtx = toolsdk.WithAgentClient(clientCtx, agentClient)
410+
tb = tb.WithAgentClient(agentClient)
411411
} else {
412412
cliui.Warnf(inv.Stderr, "CODER_AGENT_TOKEN is not set, task reporting will not be available")
413413
}
414414
if appStatusSlug == "" {
415415
cliui.Warnf(inv.Stderr, "CODER_MCP_APP_STATUS_SLUG is not set, task reporting will not be available.")
416416
} else {
417-
clientCtx = toolsdk.WithWorkspaceAppStatusSlug(clientCtx, appStatusSlug)
417+
tb = tb.WithAppStatusSlug(appStatusSlug)
418418
}
419419

420420
// Register tools based on the allowlist (if specified)
@@ -427,15 +427,15 @@ func mcpServerHandler(inv *serpent.Invocation, client *codersdk.Client, instruct
427427
if len(allowedTools) == 0 || slices.ContainsFunc(allowedTools, func(t string) bool {
428428
return t == tool.Tool.Name
429429
}) {
430-
mcpSrv.AddTools(mcpFromSDK(tool))
430+
mcpSrv.AddTools(mcpFromSDK(tool, tb))
431431
}
432432
}
433433

434434
srv := server.NewStdioServer(mcpSrv)
435435
done := make(chan error)
436436
go func() {
437437
defer close(done)
438-
srvErr := srv.Listen(clientCtx, invStdin, invStdout)
438+
srvErr := srv.Listen(ctx, invStdin, invStdout)
439439
done <- srvErr
440440
}()
441441

@@ -695,7 +695,7 @@ func getAgentToken(fs afero.Fs) (string, error) {
695695

696696
// mcpFromSDK adapts a toolsdk.Tool to go-mcp's server.ServerTool.
697697
// It assumes that the tool responds with a valid JSON object.
698-
func mcpFromSDK(sdkTool toolsdk.Tool[any, any]) server.ServerTool {
698+
func mcpFromSDK(sdkTool toolsdk.Tool[any, any], tb toolsdk.Toolbox) server.ServerTool {
699699
// NOTE: some clients will silently refuse to use tools if there is an issue
700700
// with the tool's schema or configuration.
701701
if sdkTool.Schema.Properties == nil {
@@ -711,8 +711,8 @@ func mcpFromSDK(sdkTool toolsdk.Tool[any, any]) server.ServerTool {
711711
Required: sdkTool.Schema.Required,
712712
},
713713
},
714-
Handler: func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
715-
result, err := sdkTool.Handler(ctx, request.Params.Arguments)
714+
Handler: func(_ context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
715+
result, err := sdkTool.Handler(tb, request.Params.Arguments)
716716
if err != nil {
717717
return nil, err
718718
}

0 commit comments

Comments
 (0)