Files
skald-connectors/connectors/ssh/connector.json
T
dguiducci 1caba6946c Add Email (IMAP/SMTP) and SSH Remote Access connectors
- CLAUDE.md: developer guide for the marketplace repo
- email/: generic IMAP+SMTP connector (stdlib only, config via env)
  - env[] array, auth.type: password, verify.py (IMAP+SMTP probe)
- ssh/: SSH Remote Access connector ported from Skald, modified
  - ALIASES_FILE → ~/.ssh_aliases.json (was ./secrets/...)
  - optional env[] (TTL/timeout tunables)
  - auth.type: none (per-alias auth at runtime via elicitation)
- tavily/: restructured with env[] (tavilyApiKey), verify.py, auth block
- connectors.json: added email, ssh, and tavily verify.py entries
- SKALD.md: documented env[], verify, password auth, SSH connector
2026-07-16 22:29:33 +01:00

114 lines
4.0 KiB
JSON

{
"id": "ssh",
"name": "SSH Remote Access",
"version": "1.0.0",
"type": "mcp_local",
"launch_command": "python3 ssh_mcp_server.py",
"transport": "stdio",
"requires": [
"PYTHON"
],
"dependencies": [
"paramiko>=3.4"
],
"env": [
{
"name": "SSH_MCP_POOL_TTL",
"label": "Connection pool TTL (seconds)",
"description": "How long an idle SSH connection stays open before being closed. Default: 300 (5 min).",
"required": false,
"secret": false,
"default": "300",
"example": "300"
},
{
"name": "SSH_MCP_COMMAND_TIMEOUT",
"label": "Command timeout (seconds)",
"description": "Max time a remote command can run before being killed. Default: 120.",
"required": false,
"secret": false,
"default": "120",
"example": "120"
},
{
"name": "SSH_MCP_CONNECT_TIMEOUT",
"label": "Connect timeout (seconds)",
"description": "Max time to wait for the SSH handshake. Default: 15.",
"required": false,
"secret": false,
"default": "15",
"example": "15"
},
{
"name": "SSH_MCP_LOGIN_PW_TTL",
"label": "Login password cache TTL (seconds)",
"description": "How long an elicited login password stays cached in RAM. Default: 300.",
"required": false,
"secret": false,
"default": "300",
"example": "300"
},
{
"name": "SSH_MCP_SUDO_PW_TTL",
"label": "Sudo password cache TTL (seconds)",
"description": "How long an elicited sudo password stays cached in RAM. Default: 300.",
"required": false,
"secret": false,
"default": "300",
"example": "300"
},
{
"name": "SSH_MCP_KEY_PASSPHRASE",
"label": "SSH key passphrase (non-interactive override)",
"description": "Passphrase for an encrypted private key. Overrides elicitation. Use only in automated environments.",
"required": false,
"secret": true,
"example": ""
}
],
"setup_instructions": [
"Install dependencies: pip install -r requirements.txt",
"No OAuth or API key needed: host authentication is managed at runtime via add_alias.",
"Add an alias: mcp__ssh__add_alias(alias=\"my-server\", hostname=\"...\", username=\"...\", auth=\"key\")",
"The server stores aliases in ~/.ssh_aliases.json (auto-managed, never hand-edit).",
"Optional: tune TTLs via SSH_MCP_* environment variables (see env[] above)."
],
"docs": [
{
"lang": "en",
"description": "Full SSH remote server access: read/write files, grep, execute commands, manage systemd services, upload/download files and directories, and probe system info — all over SFTP and SSH with the same output format as Skald's native tools. Aliases manage host config (hostname, port, user, auth method, sudo policy). Login passwords and sudo passwords are elicited on demand and kept only in RAM with configurable TTL. No OAuth, no API keys, no secrets on disk.",
"llm_short_description": "SSH MCP server: 13 tools (list/add/remove_alias, read_file, list_files, grep_files, edit_file, replace_lines, exec, upload, download, sysinfo, systemd). Auth via key/agent or elicited password. Sudo via nopasswd or elicited password. Connection pooling with lazy TTL eviction."
}
],
"mcp_config": {
"command": "python3",
"args": [
"ssh_mcp_server.py"
],
"env": {
"SSH_MCP_POOL_TTL": "{ENV:SSH_MCP_POOL_TTL}",
"SSH_MCP_COMMAND_TIMEOUT": "{ENV:SSH_MCP_COMMAND_TIMEOUT}",
"SSH_MCP_CONNECT_TIMEOUT": "{ENV:SSH_MCP_CONNECT_TIMEOUT}",
"SSH_MCP_LOGIN_PW_TTL": "{ENV:SSH_MCP_LOGIN_PW_TTL}",
"SSH_MCP_SUDO_PW_TTL": "{ENV:SSH_MCP_SUDO_PW_TTL}",
"SSH_MCP_KEY_PASSPHRASE": "{SECRET:SSH_MCP_KEY_PASSPHRASE}"
}
},
"homepage": "",
"icon_small": "icon_sm.svg",
"icon_large": "icon_lg.svg",
"scope": "user",
"tags": [
"ssh",
"mcp",
"local",
"remote",
"server",
"terminal",
"sysadmin"
],
"auth": {
"type": "none"
}
}