You can. MSDN actually has an example of how to do this with JavaScript CSOM. You can add this thru SharePoint Designer and embed directly in a page, reference it as a file, or you can even just drop it into a script web part.
MSDN: https://msdn.microsoft.com/en-us/library/office/hh185004%28v=office.14%29.aspx
function createUserCustomActionSite() {
var clientContext = new SP.ClientContext(siteUrl);
this.oWebsite = clientContext.get_web();
var collUserCustomAction = oWebsite.get_userCustomActions();
var oUserCustomAction = collUserCustomAction.add();
oUserCustomAction.set_location('Microsoft.SharePoint.StandardMenu');
oUserCustomAction.set_group('SiteActions');
oUserCustomAction.set_sequence(101);
oUserCustomAction.set_title('ECMA Website User Custom Action ECMA');
oUserCustomAction.set_description('This description appears on the Site Actions menu.');
oUserCustomAction.set_url(siteUrl + '/_layouts/jstest2.aspx');
oUserCustomAction.update();
clientContext.load(oWebsite, 'Title', 'UserCustomActions');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
alert('Custom action created for ' + this.oWebsite.get_title());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}