ChatGPT Remote SSH MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CLOUDFLARED_BIN | No | Path to the cloudflared binary; set when using an official build for other systems or architectures instead of the bundled Linux x86_64 binary. | |
| GITHUB_CLIENT_ID | Yes | GitHub OAuth App client ID, created in GitHub Developer Settings with callback URI https://<public-domain>/oauth/github/callback. | |
| GITHUB_ALLOWED_IDS | Yes | Comma-separated numeric GitHub user IDs allowed to log in. Must be non-empty; the gateway refuses authorization when the allowlist is missing. | |
| GATEWAY_PUBLIC_BASE | Yes | Public HTTPS root address (without /mcp). | |
| SSH_MCP_PROJECT_DIR | No | Project directory used during setup (defaults to $PWD). | |
| GITHUB_CLIENT_SECRET | Yes | GitHub OAuth App client secret, set in the server's private environment. | |
| SSH_MCP_CONDA_PREFIX | No | Actual path of the chatgpt-ssh-mcp Conda environment, overriding the preset absolute path; also used for the gateway. | |
| CHATGPT_OAUTH_CLIENT_ID | No | ChatGPT connector client ID. Defaults to chatgpt-remote-ssh. | chatgpt-remote-ssh |
| CHATGPT_OAUTH_REDIRECT_URI | No | Full callback URI for the ChatGPT connector. The default only matches the previously created connector; for a new connector use the actual value shown on the page. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_serversA | List all configured SSH servers with their groups and descriptions. Args: group: Optional group name to filter by. Shows all servers if omitted. Use list_groups to see available group names. Returns:
Formatted table of servers with name, groups, and description. An
unknown |
| list_groupsB | List all server groups with descriptions and member counts. Returns: Formatted table of groups with name, description, and server count. |
| executeA | Execute a shell command on a single SSH server. Args:
server: Server name (e.g. 'web-prod-01'). Must match a configured server.
Use list_servers to see available servers.
command: Shell command to execute on the remote server (exactly as it
would be typed at a bash prompt). Rejected if it exceeds
Returns:
Formatted command execution result with stdout, stderr, and exit code.
Long output is truncated at |
| execute_on_groupA | Execute a shell command on all servers in a group in parallel. Concurrency is capped by the Args:
group: Group name (e.g. 'production', 'web'). Use list_groups to see
available groups.
command: Shell command to execute on every server in the group.
Rejected if it exceeds Returns: Formatted summary showing per-server results, success/failure counts, and aggregate exit status. |
| upload_fileA | Upload a file to a remote server via SFTP. Files larger than 100 MiB are refused outright — use rsync or scp for those. Args:
server: Server name (e.g. 'pro-dicentra').
local_path: Path to the local file, RELATIVE to the configured
Returns: Confirmation message with file size. |
| download_fileA | Download a file from a remote server via SFTP. Args:
server: Server name (e.g. 'pro-dicentra').
remote_path: Path to the remote file — normally absolute, though a
relative path is not rejected, just resolved by the remote SFTP
server against the SSH login directory. Must be a regular file —
symlinks, devices, FIFOs, and other non-regular remote
files are refused. Rejected if it contains Returns: Confirmation message with file size. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 6 tools
Each tool targets a clearly distinct purpose: group discovery, server discovery, single-host command execution, fleet command execution, upload, and download. There is no meaningful overlap between listing, executing, and transferring operations.
All names are snake_case and follow a readable verb pattern. The main minor deviation is that 'execute' is not verb_noun while 'execute_on_group', 'upload_file', and 'download_file' are more explicitly shaped.
Six tools are well-scoped for an SSH MCP server. Each tool earns its place without redundant coverage or obvious filler.
The surface covers discovery, single and fleet command execution, and both directions of file transfer. Minor gaps remain around remote file management, such as deleting, listing, or creating remote directories.