MCPcopy Index your code
hub / github.com/coder/coder / CallTool

Method CallTool

agent/x/agentmcp/manager.go:740–768  ·  view source on GitHub ↗

CallTool proxies a tool call to the appropriate MCP server.

(ctx context.Context, req workspacesdk.CallMCPToolRequest)

Source from the content-addressed store, hash-verified

738
739// CallTool proxies a tool call to the appropriate MCP server.
740func (m *Manager) CallTool(ctx context.Context, req workspacesdk.CallMCPToolRequest) (workspacesdk.CallMCPToolResponse, error) {
741 serverName, originalName, err := splitToolName(req.ToolName)
742 if err != nil {
743 return workspacesdk.CallMCPToolResponse{}, err
744 }
745
746 m.mu.RLock()
747 entry, ok := m.servers[serverName]
748 m.mu.RUnlock()
749
750 if !ok {
751 return workspacesdk.CallMCPToolResponse{}, xerrors.Errorf("%w: %q", ErrUnknownServer, serverName)
752 }
753
754 callCtx, cancel := context.WithTimeout(ctx, toolCallTimeout)
755 defer cancel()
756
757 result, err := entry.client.CallTool(callCtx, mcp.CallToolRequest{
758 Params: mcp.CallToolParams{
759 Name: originalName,
760 Arguments: req.Arguments,
761 },
762 })
763 if err != nil {
764 return workspacesdk.CallMCPToolResponse{}, xerrors.Errorf("call tool %q on %q: %w", originalName, serverName, err)
765 }
766
767 return convertResult(result), nil
768}
769
770// RefreshTools re-fetches tool lists from all connected servers
771// in parallel and rebuilds the cache. On partial failure, tools

Callers 1

TestDifferentialReloadFunction · 0.95

Calls 4

splitToolNameFunction · 0.85
convertResultFunction · 0.85
CallToolMethod · 0.65
ErrorfMethod · 0.45

Tested by 1

TestDifferentialReloadFunction · 0.76