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

  1. Check that the MCP server backing the service is running and reachable from this host
  2. Verify the service's connection config (URL/command, auth) in the MCP service record
  3. Inspect the wrapped cause with errors.Unwrap/As to see the exact transport error
  4. 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

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


AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02). Data as JSON: /api/errors/6eb4d07d60ad0f52. Report an issue: GitHub.