Skip to main content
Glama

ssh_command_alias

Simplify SSH command management by creating, removing, listing, and suggesting aliases for frequently used commands. Streamline remote server tasks with the MCP SSH Manager tool.

Instructions

Manage command aliases for frequently used commands

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
aliasNoAlias name (for add/remove)
commandNoCommand to alias (for add) or search term (for suggest)

Implementation Reference

  • Registration of 'ssh_command_alias' tool in the TOOL_GROUPS.advanced array (advanced features group)
    advanced: [ 'ssh_deploy', 'ssh_execute_sudo', 'ssh_alias', 'ssh_command_alias', 'ssh_hooks', 'ssh_profile', 'ssh_connection_status', 'ssh_tunnel_create', 'ssh_tunnel_list', 'ssh_tunnel_close', 'ssh_key_manage', 'ssh_execute_group', 'ssh_group_manage', 'ssh_history' ]
  • Core helper utilities implementing command alias functionality for the ssh_command_alias MCP tool, including loading from profiles and custom files, expansion, CRUD operations, and suggestions.
    /** * Command Aliases System for MCP SSH Manager * Provides shortcuts for frequently used commands */ import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; import { loadProfile } from './profile-loader.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const ALIASES_FILE = path.join(__dirname, '..', '.command-aliases.json'); // Get aliases from the active profile let profileAliases = {}; try { const profile = loadProfile(); profileAliases = profile.commandAliases || {}; } catch (error) { console.error(`Error loading profile aliases: ${error.message}`); } /** * Load command aliases from file */ export function loadCommandAliases() { try { // Start with profile aliases let aliases = { ...profileAliases }; // Merge with custom aliases from file if (fs.existsSync(ALIASES_FILE)) { const data = fs.readFileSync(ALIASES_FILE, 'utf8'); aliases = { ...aliases, ...JSON.parse(data) }; } return aliases; } catch (error) { console.error(`Error loading command aliases: ${error.message}`); } return profileAliases; } /** * Save command aliases to file */ export function saveCommandAliases(aliases) { try { // Only save custom aliases (not from profile) const customAliases = {}; for (const [key, value] of Object.entries(aliases)) { if (profileAliases[key] !== value) { customAliases[key] = value; } } fs.writeFileSync(ALIASES_FILE, JSON.stringify(customAliases, null, 2)); return true; } catch (error) { console.error(`Error saving command aliases: ${error.message}`); return false; } } /** * Expand command if it's an alias */ export function expandCommandAlias(command) { const aliases = loadCommandAliases(); // Check if the entire command is an alias if (aliases[command]) { return aliases[command]; } // Check if the command starts with an alias const parts = command.split(' '); const firstPart = parts[0]; if (aliases[firstPart]) { parts[0] = aliases[firstPart]; return parts.join(' '); } return command; } /** * Add or update a command alias */ export function addCommandAlias(alias, command) { const aliases = loadCommandAliases(); aliases[alias] = command; return saveCommandAliases(aliases); } /** * Remove a command alias */ export function removeCommandAlias(alias) { const aliases = loadCommandAliases(); // Don't remove profile aliases, just reset them if (profileAliases[alias]) { aliases[alias] = profileAliases[alias]; } else { delete aliases[alias]; } return saveCommandAliases(aliases); } /** * List all command aliases */ export function listCommandAliases() { const aliases = loadCommandAliases(); const result = []; for (const [alias, command] of Object.entries(aliases)) { result.push({ alias, command, isFromProfile: profileAliases[alias] === command, isCustom: profileAliases[alias] !== command }); } return result.sort((a, b) => a.alias.localeCompare(b.alias)); } /** * Get suggested aliases based on command */ export function suggestAliases(command) { const suggestions = []; const aliases = loadCommandAliases(); const commandLower = command.toLowerCase(); for (const [alias, aliasCommand] of Object.entries(aliases)) { if (aliasCommand.toLowerCase().includes(commandLower) || alias.toLowerCase().includes(commandLower)) { suggestions.push({ alias, command: aliasCommand }); } } return suggestions; }

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bvisible/mcp-ssh-manager'

If you have feedback or need assistance with the MCP directory API, please join our Discord server