Tencent/WeKnora · error
failed to get MCP client: %w
Error message
failed to get MCP client: %w
What it means
GetMCPServiceResources could not obtain an MCP client for the configured service. The MCP manager's GetOrCreateClient failed while establishing a connection or session with the MCP server backing this service. The underlying cause is wrapped with %w so errors.As/Is can inspect it.
Source
Thrown at internal/application/service/mcp_service.go:605
// GetMCPServiceResources retrieves the list of resources from an MCP service
func (s *mcpServiceService) GetMCPServiceResources(
ctx context.Context,
tenantID uint64,
id string,
) ([]*types.MCPResource, error) {
// Get service
service, err := s.mcpServiceRepo.GetByID(ctx, tenantID, id)
if err != nil {
return nil, fmt.Errorf("failed to get MCP service: %w", err)
}
if service == nil {
return nil, fmt.Errorf("MCP service not found")
}
// Get or create client
client, err := s.mcpManager.GetOrCreateClient(ctx, service)
if err != nil {
return nil, fmt.Errorf("failed to get MCP client: %w", err)
}
// List resources
resources, err := client.ListResources(ctx)
if err != nil {
return nil, fmt.Errorf("failed to list resources: %w", err)
}
return resources, nil
}
View on GitHub (pinned to 988cbb0330)
Solutions
- Check that the MCP server backing the service is running and reachable from this host
- Verify the service's connection config (URL/command, auth) in the MCP service record
- Inspect the wrapped cause with errors.Unwrap/As to see the exact transport error
- Restart or recreate the MCP service connection to clear any stale cached client
Example fix
// before
resources, err := svc.GetMCPServiceResources(ctx, tenantID, serviceID)
// after
resources, err := svc.GetMCPServiceResources(ctx, tenantID, serviceID)
if err != nil {
var transportErr *net.OpError
if errors.As(err, &transportErr) {
// retry once after checking server health
}
} Defensive patterns
Strategy: retry
Validate before calling
// probe the service before calling
svc, err := mcpServiceClient.Get(ctx, tenantID, serviceID)
if err != nil || svc == nil { return err }
// optionally ping the MCP server endpoint first
if err := pingMCPServer(svc.Endpoint); err != nil {
return fmt.Errorf("MCP server unreachable: %w", err)
} Type guard
func isMCPClientErr(err error) bool {
return err != nil && strings.Contains(err.Error(), "failed to get MCP client")
} Try / catch
resources, err := svc.GetMCPServiceResources(ctx, tenantID, serviceID)
if err != nil {
if isMCPClientErr(err) {
// backoff-retry; connection issues are often transient
return retryWithBackoff(ctx, 3, func() error {
_, err = svc.GetMCPServiceResources(ctx, tenantID, serviceID)
return err
})
}
return err
} Prevention
- Health-check the MCP server before invoking resource operations
- Keep MCP server processes supervised (systemd/k8s) so crashes restart them
- Pin and validate server endpoints/commands in service config
- Clear stale cached clients after server restarts or credential rotation
When it happens
Trigger: Calling GetMCPServiceResources for an existing MCP service whose server is unreachable, misconfigured (bad URL/command), or whose connection handshake fails inside s.mcpManager.GetOrCreateClient.
Common situations: MCP server process not running or crashed; wrong server endpoint or stdio command configured for the tenant's MCP service; network/firewall blocking the MCP endpoint; server restarted with new credentials and client cache holds stale state.
Related errors
- failed to start client: %w
- failed to connect to MCP service: %w
- rerank call failed: %w
- failed to do bulk: %w
- failed to delete by query: %w
AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02).
Data as JSON: /api/errors/6eb4d07d60ad0f52.
Report an issue: GitHub.