Skip to main content
Glama

SSH MCP Server

A Model Context Protocol server for comprehensive SSH operations

License: MIT Version Docker

Developed by XNet Inc. | Project Lead: Joshua S. Doucette

Overview

SSH MCP Server exposes comprehensive SSH functionality to AI assistants through the Model Context Protocol (MCP). It provides a stateless, production-ready solution for remote system management, file transfers, and secure tunneling.

Version: 0.2.0 (Stateless Design)
License: MIT
Repository: https://github.com/XNet-NGO/ssh-mcp-server

Related MCP server: Simple SSH MCP Server

Key Features

Core Capabilities

  • Connection Management - Stateless SSH connections with base64-encoded session IDs

  • Command Execution - Execute remote commands with full output capture

  • File Operations - SFTP upload/download with directory listing

  • Key Management - Generate, list, and fingerprint SSH keys

  • Port Forwarding - Local, remote, and dynamic SSH tunnels

  • Configuration - Manage SSH client settings and known_hosts

Technical Highlights

  • 🚀 Stateless Architecture - Works with ephemeral Docker containers

  • 🔒 Security First - Built on OpenSSH with comprehensive error handling

  • 📦 Docker Ready - Optimized for Docker MCP Gateway

  • 📚 AI Documentation - Built-in training docs for AI assistants

  • Fast Execution - Sub-500ms command execution

  • 🧪 Well Tested - Unit tests, integration tests, and property-based tests

Quick Start

Installation

npm install @xnet-ngo/ssh-mcp-server

Docker

# From GitHub Container Registry (recommended)
docker pull ghcr.io/xnet-ngo/ssh-mcp-server:0.2.0

# Or use latest
docker pull ghcr.io/xnet-ngo/ssh-mcp-server:latest

Usage with MCP

Add to your MCP configuration:

{
  "mcpServers": {
    "ssh": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-v", "~/.ssh:/root/.ssh:ro",
        "ghcr.io/xnet-ngo/ssh-mcp-server:0.2.0"
      ]
    }
  }
}

Architecture

Stateless Design

The SSH MCP Server uses a stateless wrapper-first approach, designed for ephemeral container environments:

// Session IDs are self-contained
sessionId = base64(JSON.stringify({
  host: "example.com",
  port: 22,
  username: "user",
  privateKey: "...",  // or keyPath
  config: { strictHostKeyChecking: false }
}))

Benefits:

  • ✅ No state persistence required

  • ✅ Works with docker run --rm

  • ✅ Sessions recreate automatically

  • ✅ Compatible with Docker MCP Gateway

Components

ssh-mcp-server/
├── src/
│   ├── core/           # Core functionality
│   │   ├── ConnectionManager.ts    # Session management
│   │   ├── SSHWrapper.ts           # SSH command wrapper
│   │   └── types.ts                # Type definitions
│   ├── tools/          # MCP tool implementations
│   │   ├── ConnectionTools.ts      # Connect/disconnect
│   │   ├── CommandExecutionTools.ts # Execute commands
│   │   ├── FileTransferTools.ts    # SFTP operations
│   │   ├── KeyManagementTools.ts   # Key operations
│   │   ├── PortForwardingTools.ts  # SSH tunnels
│   │   └── ConfigurationTools.ts   # SSH config
│   ├── mcp/            # MCP server setup
│   └── server.ts       # Main entry point
├── tests/              # Test suite
├── docs/               # Documentation
│   ├── AI_USAGE_GUIDE.md          # AI assistant guide
│   └── QUICK_REFERENCE.md         # Quick reference
└── Dockerfile.ssh      # Docker image

Available Tools

Connection Management (3 tools)

  • ssh_connect - Establish SSH connection

  • ssh_disconnect - Close connection

  • ssh_list_sessions - List active sessions

Command Execution (1 tool)

  • ssh_execute - Execute remote commands

File Transfer (4 tools)

  • sftp_upload - Upload files

  • sftp_download - Download files

  • sftp_list - List directory contents

  • sftp_delete - Delete remote files

Key Management (3 tools)

  • ssh_keygen - Generate SSH key pairs

  • ssh_list_keys - List available keys

  • ssh_fingerprint - Get key fingerprint

Port Forwarding (2 tools)

  • ssh_port_forward - Create SSH tunnel

  • ssh_close_forward - Close tunnel

Configuration (2 tools)

  • ssh_get_config - Get SSH configuration

  • ssh_set_option - Set SSH option

Usage Examples

Connect and Execute Command

// Connect
const conn = await ssh_connect({
  host: "example.com",
  username: "user",
  privateKeyBase64: keyBase64,
  config: { strictHostKeyChecking: false }
});

// Execute command
const result = await ssh_execute({
  sessionId: conn.sessionId,
  command: "uptime"
});

console.log(result.stdout);
// Output: 08:08:15 up 1 day, 1:43, 2 users, load average: 0.00, 0.00, 0.00

File Transfer

// Upload file
await sftp_upload({
  sessionId: conn.sessionId,
  localPath: "/local/config.json",
  remotePath: "/etc/app/config.json"
});

// Download file
await sftp_download({
  sessionId: conn.sessionId,
  remotePath: "/var/log/app.log",
  localPath: "/tmp/app.log"
});

Port Forwarding

// Create local forward
await ssh_port_forward({
  sessionId: conn.sessionId,
  type: "local",
  localPort: 8080,
  remoteHost: "localhost",
  remotePort: 80
});
// Now access http://localhost:8080 to reach remote port 80

Documentation

Docker MCP Gateway

This server is optimized for use with Docker MCP Gateway:

{
  "mcpServers": {
    "MCP_DOCKER": {
      "command": "docker",
      "args": [
        "mcp", "gateway", "run",
        "--servers=ssh-mcp-server"
      ],
      "autoApprove": ["*"]
    }
  }
}

Note: When using Docker MCP Gateway, use base64-encoded private keys to bypass secret detection:

const keyBase64 = Buffer.from(privateKeyContent).toString('base64');

Development

Prerequisites

  • Node.js >= 18.0.0

  • Docker (for containerized deployment)

  • OpenSSH client tools

Setup

# Clone repository
git clone https://github.com/XNet-NGO/ssh-mcp-server.git
cd ssh-mcp-server

# Install dependencies
npm install

# Build
npm run build

# Run tests
npm test

# Run in development
npm run dev

Testing

# Run all tests
npm test

# Run with coverage
npm run test:coverage

# Run in watch mode
npm run test:watch

# Lint code
npm run lint

# Format code
npm run format

Building Docker Image

# Build image
docker build -f Dockerfile.ssh -t ghcr.io/xnet-ngo/ssh-mcp-server:0.2.0 .

# Run container
docker run --rm -i \
  -v ~/.ssh:/root/.ssh:ro \
  ghcr.io/xnet-ngo/ssh-mcp-server:0.2.0

Security Considerations

Best Practices

  • ✅ Use Ed25519 keys (faster and more secure than RSA)

  • ✅ Rotate keys regularly

  • ✅ Use different keys for different environments

  • ✅ Set appropriate timeouts

  • ✅ Monitor SSH connections and logs

Base64 Encoding

When using Docker MCP Gateway, private keys must be base64-encoded to bypass secret detection. Note: Base64 is NOT encryption - use only in trusted environments.

Performance

  • Connection: ~1s

  • Command Execution: 400-500ms

  • File Operations: Depends on file size and network

  • Session Recreation: < 100ms

Troubleshooting

Common Issues

Permission denied (publickey)

  • Verify private key is correct

  • Ensure public key is in remote ~/.ssh/authorized_keys

  • Check key file permissions (should be 0600)

Host key verification failed

  • Set strictHostKeyChecking: false in config

  • Or add host to known_hosts

Connection timeout

  • Verify host is reachable

  • Check firewall rules

  • Increase connectTimeout in config

See Usage Guide for more troubleshooting tips.

Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines.

Ways to Contribute

  • 🐛 Report bugs

  • 💡 Suggest features

  • 📝 Improve documentation

  • 🧪 Add tests

  • 💻 Submit pull requests

License

This project is licensed under the MIT License - see the LICENSE file for details.

Copyright (c) 2026 XNet Inc.
Copyright (c) 2026 Joshua S. Doucette

Acknowledgments

This project builds upon:

  • OpenSSH Portable (BSD License)

  • Model Context Protocol SDK (MIT License)

  • Original SSH MCP Server Contributors (2025)

See CONTRIBUTORS.md for full attribution.

Support

About XNet

XNet Inc. is a non-governmental organization focused on developing open-source tools and infrastructure for secure communications and remote system management.

Website: https://xnet.ngo
GitHub: https://github.com/XNet-NGO


Project: SSH MCP Server
Version: 0.2.0
Copyright: © 2026 XNet Inc., Joshua S. Doucette
License: MIT
Repository: https://github.com/XNet-NGO/ssh-mcp-server

Available Tools

15 tools
sftp_deleteB

Delete a file on remote system

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
remotePathYesRemote file path

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It discloses the destructive nature of deleting but omits critical behavioral details such as irreversibility, error behavior for nonexistent files, permission requirements, or whether directories are supported.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler. It is appropriately sized for a simple delete operation and front-loaded with the action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no annotations and no output schema, the description is too sparse. It fails to mention side effects, whether deletion is recursive or permanent, and how the system handles missing files. The schema covers parameters, but behavioral context is lacking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (both sessionId and remotePath have descriptions), so the baseline is 3. The description adds no additional meaning beyond what the schema already provides, making it adequate but not enhancing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool deletes a file on a remote system, using the specific verb 'Delete' and identifying the resource. This distinguishes it from sibling tools like sftp_upload, sftp_download, and sftp_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when a file needs deletion) but provides no explicit guidance about prerequisites, alternatives, or exclusions. It does not mention that a valid session is required or that this tool is for files only, not directories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sftp_downloadB

Download a file from remote system via SFTP

ParametersJSON Schema
NameRequiredDescriptionDefault
localPathYesLocal file path
sessionIdYesSession ID
remotePathYesRemote file path

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does not disclose whether the download overwrites an existing local file, whether it requires an existing SFTP session, or the format of the result. This is a minimal behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no redundant words. It is appropriately front-loaded and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with fully described parameters, the description is minimally adequate but missing key contextual aspects such as return value expectations and behavioral constraints. It does not mention what the tool returns or potential side effects, leaving some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (all three parameters have descriptions). The tool description adds no parameter-specific meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Download' and the resource 'a file from remote system via SFTP', making the primary purpose obvious. It naturally distinguishes from sibling tools like sftp_upload, though it does not explicitly reference alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like sftp_upload or sftp_list. The description simply states the action without any context about prerequisites (e.g., active session) or scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sftp_listB

List contents of a remote directory

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
remotePathYesRemote directory path

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action, but does not mention that an active SFTP session is required, what the output format is (e.g., array of names), or how errors are handled. This leaves significant behavioral aspects undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no unnecessary words. It is front-loaded with the core action and resource, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description should explain what the return value is. It only says 'List contents' without specifying whether the result is a list of names, includes file sizes, or handles hidden files. Additionally, no usage context or session requirements are mentioned, leaving the description incomplete for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% description coverage for both parameters (sessionId and remotePath). The description adds no additional parameter-level meaning beyond what the schema states, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' and resource 'remote directory', clearly stating the tool's function. It distinguishes itself from sibling tools like sftp_upload, sftp_download, and sftp_delete, which perform different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, nor any prerequisites or context. While siblings are different operations, there is no explicit mention of when listing is appropriate, such as before downloading or after connecting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sftp_uploadB

Upload a file to remote system via SFTP

ParametersJSON Schema
NameRequiredDescriptionDefault
localPathYesLocal file path
sessionIdYesSession ID
remotePathYesRemote file path

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden of disclosure. It only states the action without mentioning side effects, overwrite behavior, or the need for an active connection, leaving behavioral traits unspecified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, succinct sentence that conveys the core action without extraneous detail, achieving high clarity in very few words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description is too sparse to be fully contextual. It omits critical context such as whether the session must already be connected, overwrite semantics, and error conditions, making it inadequate for an agent to correctly invoke the tool in all scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for all three parameters (100% coverage), so the description adds no additional semantic nuance beyond the schema. The parameter descriptions are minimal but sufficient for identifying each field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Upload') and resource ('a file to remote system') with the method (via SFTP), clearly distinguishing it from sibling tools like sftp_download, sftp_list, and sftp_delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites such as an active session or which sibling tools handle other operations like downloading or listing files.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_close_forwardB

Close an SSH tunnel

ParametersJSON Schema
NameRequiredDescriptionDefault
forwardIdYesPort forward ID

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action without mentioning side effects (e.g., whether the SSH session remains open), reversibility, or any prerequisites. This is a significant gap for a mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence with no extraneous words. Every word earns its place, and it is appropriately sized for a simple operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description is nearly complete. It tells the agent what the tool does, and the schema covers the input. The only deficiency is the lack of behavioral context, but given the simplicity, this is not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage of the single parameter 'forwardId' with a description. The tool description adds no additional meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Close an SSH tunnel' clearly states the action and resource. However, it could be more specific by using 'port forward' instead of 'tunnel', especially to differentiate from ssh_disconnect which likely closes an SSH session. Still, the verb 'close' and resource are clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage as the counterpart to ssh_port_forward, but provides no explicit guidance on when to use it or exclude alternatives. It is a minimal operation with no other close tool, so the intent is understood but not elaborated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_connectC

Establish an SSH connection to a remote host

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYesRemote hostname or IP address
portNoSSH port (default: 22)
keyPathNoPath to private key file (optional)
usernameYesSSH username
useControlMasterNoEnable ControlMaster for connection multiplexing

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Establish' is vague about what actually happens—whether it opens an interactive session, tests connectivity, persists the connection, or requires a subsequent disconnect. It does not mention session lifecycle or side effects like ControlMaster multiplexing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no wasted words. It lacks structured detail but is appropriately sized for a simple tool statement, earning a high score for efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and five parameters, the description is severely incomplete. It fails to explain the return value, session persistence, how to disconnect, or the purpose of useControlMaster. For a tool that likely serves as a prerequisite for other SSH operations, far more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters. The description adds no additional meaning about parameters beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Establish an SSH connection to a remote host' uses a specific verb ('Establish') and resource ('SSH connection'), clearly indicating the tool's function. It does not explicitly differentiate from sibling tools like ssh_execute or sftp_upload, but the resource name 'connection' makes it reasonably distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like ssh_execute or sftp_upload. There is no mention of prerequisites, follow-up commands, or scenarios where this tool is preferred, leaving usage purely implied by the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_disconnectB

Close an SSH connection

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID to disconnect

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only restates the action ('Close an SSH connection') without detailing side effects, reversibility, error conditions, or whether the session is immediately terminated. This is essentially a tautology when compared to the tool name 'ssh_disconnect'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence that contains no unnecessary words. It is extremely concise and front-loaded, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required parameter, no output schema), the description minimally covers the action. However, it lacks usage context, behavioral nuances, and alternative differentiations, leaving the agent to infer too much. It is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage with a clear description of 'sessionId' ('Session ID to disconnect'). The tool description adds no further parameter meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Close') and resource ('SSH connection'), clearly distinguishing this from siblings like ssh_connect (which opens a connection) and ssh_close_forward (which closes a port forward). It is concise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites, conditions, or when not to use it. The only usage cue is the tool's name and the intuitive action, but that is not sufficient for an agent to select it confidently among many ssh-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_executeC

Execute a command on a remote system via SSH

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesCommand to execute
timeoutNoTimeout in seconds (optional)
sessionIdYesSession ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for behavioral disclosure. It only states the core function without revealing potential side effects, session requirements, timeout behavior, or output format. For a tool that can execute arbitrary commands, this is a significant transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler words, making it concise and front-loaded. However, it is so brief that it borders on under-specification, which slightly reduces its effectiveness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool lacks both annotations and an output schema, and the description only covers the basic action. It fails to mention prerequisites (session management), the tool's place among sibling tools, or the potential impact of executing commands, making it incomplete for safe and correct use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% parameter description coverage, so the baseline is 3. The description itself adds no additional parameter semantics beyond what the schema already provides, but it doesn't need to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Execute a command') and target ('remote system via SSH'), which distinguishes it from sibling tools like ssh_connect or sftp_upload. However, it doesn't explicitly mention that it requires an existing session, which is a key aspect of its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites like establishing a session with ssh_connect first. It also doesn't clarify that this is for running commands rather than transferring files, which is implied but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_fingerprintC

Get fingerprint of an SSH key

ParametersJSON Schema
NameRequiredDescriptionDefault
keyPathYesPath to key file

TDQS

C2.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only states the action without disclosing output format (e.g., MD5/SHA256), whether it reads from a local file, or error behavior. This is insufficient for a tool with zero annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler words, efficiently stating the core purpose. It is front-loaded with the verb and object. However, the extreme brevity contributes to missing behavioral details, though that is a completeness concern rather than a conciseness issue.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, this description is too sparse to be fully actionable. It lacks information about return values, fingerprint algorithm, and any side effects (e.g., does it rely on local ssh-keygen?). A more complete description would mention output type or usage parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes keyPath as 'Path to key file' with 100% coverage. The description adds no further meaning about the parameter, such as format or constraints. Since schema does the heavy lifting, baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get fingerprint of an SSH key' uses a specific verb ('Get') and clearly identifies the resource ('fingerprint of an SSH key'). It distinguishes itself from siblings like ssh_keygen (generates keys) and ssh_list_keys (lists keys) by focusing solely on fingerprint retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool or any alternatives. There is no mention of prerequisites (e.g., key must exist) or typical scenarios. For a tool with no explicit alternatives, some context about intended use is still expected.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_get_configC

Get SSH configuration for a host

ParametersJSON Schema
NameRequiredDescriptionDefault
hostnameYesHostname to get config for

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for disclosing behavior. It implies a read-only operation but does not explicitly state side effects, permissions, or the format of the returned data. Given it's a getter, some transparency is expected, but the description provides minimal information beyond the tool's name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is efficient and easy to parse. It avoids unnecessary detail. However, it is so terse that it borders on under-specification, but for a simple tool this level of conciseness is acceptable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema and no annotations, the description should clarify what the returned configuration looks like or any important edge cases. It does not. The tool is simple, but the description is insufficient for an agent to fully understand the tool's behavior or response format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the only parameter 'hostname' with a description, achieving 100% schema coverage. The description adds little beyond the schema, merely referencing 'host' in the text. Since the baseline is 3 for high schema coverage, this is a reasonable score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('SSH configuration' for a host). It distinguishes from sibling tools like ssh_connect or ssh_execute by focusing on configuration retrieval. However, it does not specify what 'configuration' includes (e.g., hostname, port, user), leaving some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool vs alternatives. There is no mention of prerequisites, such as whether a host must be defined in an SSH config file, or when it would be more appropriate than ssh_connect. The description simply states what it does.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_keygenB

Generate a new SSH key pair

ParametersJSON Schema
NameRequiredDescriptionDefault
bitsYesKey size in bits
pathYesPath to save the key
algorithmYesKey algorithm (rsa, ed25519, ecdsa)
passphraseNoPassphrase (optional)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of disclosing behavior. It only states the action 'generate' but doesn't mention side effects like overwriting existing keys, directory creation, file permissions, or what output is returned. This lack of transparency could lead to unexpected behavior in workflows.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence, front-loaded with the core action and resource. It is highly concise with no wasted words, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a mutation tool with no output schema and no annotations. The description is too sparse to be considered complete: it doesn't explain return values, behavioral constraints, or edge cases like path conflicts. The agent would need additional information to invoke it safely and effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all parameters with descriptions (100% coverage). The description adds no further semantic meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is concise and specific: 'Generate a new SSH key pair' clearly states the action (generate) and resource (SSH key pair). It distinguishes from sibling tools like ssh_list_keys or ssh_fingerprint, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention typical use cases, prerequisites (e.g., needing a passphrase), or situations where another tool might be more appropriate. For a key generation tool, this leaves the agent without context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_list_keysC

List available SSH keys

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryNoDirectory to scan (default: ~/.ssh)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It only says 'List available SSH keys' without explaining what 'available' means, which directory is scanned (beyond the schema default), or whether it returns file paths or key details. This is insufficient for a tool with no other metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear, and efficient sentence. It is front-loaded with the verb and resource, containing no wasted words. Slightly more detail could be added without harming conciseness, but the current form is acceptable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, but with no output schema and no annotations, the description should mention what the output looks like or what 'available' means (e.g., private keys in the directory). The lack of any such context leaves the tool under-specified, especially given the diversity of sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents the 'directory' parameter with a description and default. The description adds no additional semantic information. Since schema coverage is 100%, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and the resource ('available SSH keys'), which distinguishes it from siblings like ssh_keygen or ssh_fingerprint. However, it lacks explicit mention of the directory scope, which is only available in the parameter schema, and does not explicitly contrast with sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as ssh_fingerprint or ssh_keygen. The description is purely the action and resource, leaving the user to infer usage from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_list_sessionsA

List all active SSH sessions

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the operation is read-only via the verb 'list' and specifies the 'active' status of sessions, which adds some behavioral context. However, it does not mention whether the output includes session details, authentication requirements, or any side effects beyond listing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no unnecessary words. It is exceptionally concise and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the tool is simple with no parameters, the description does not explain what the returned list contains (e.g., session IDs, hosts, usernames) or how to interpret 'active'. There is no output schema, so the description should compensate with more detail about the return value, but it remains minimal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema is trivially 100% covered. The description adds no parameter info, but the baseline for 0 params is 4, and there is nothing that requires compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' and a clear resource 'all active SSH sessions'. It distinguishes itself from sibling tools like ssh_list_keys or ssh_get_config by focusing on sessions, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage is implied by the tool name and description: if you need to list active SSH sessions, this is the tool. However, there is no explicit guidance on when to use it versus alternatives like ssh_connect or ssh_disconnect, nor any mention of prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_port_forwardC

Create an SSH tunnel for port forwarding

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesForward type
localPortNoLocal port
sessionIdYesSession ID
remoteHostNoRemote host (for local/remote)
remotePortNoRemote port (for local/remote)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose side effects, prerequisites, and state changes. It only says 'create a tunnel' without explaining that it establishes a persistent forwarding, requires an active SSH session, or may modify session state. No return value or error behavior is mentioned. Lacks transparency for a mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the action and purpose. It contains no fluff, repetition, or unnecessary detail. Efficient and appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, no output schema, and no annotations. The description is too minimal to support correct invocation in all cases: it fails to mention that sessionId must refer to an existing session, that type determines the direction of forwarding, or what a successful creation returns. While the schema provides parameter names, it does not explain the operational context needed for an agent to confidently use the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with each parameter having a brief description. The tool description adds no additional meaning beyond the schema's parameter titles and basic details. It does not clarify the interplay between type, localPort, remoteHost, and remotePort (e.g., which are required for each type). Baseline of 3 is appropriate since the schema covers all parameters, but the description adds minimal value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Create) and target (SSH tunnel) with the purpose (port forwarding), distinguishing it from sibling tools like ssh_connect and ssh_execute. It does not explicitly differentiate from ssh_close_forward but the verb 'create' makes that clear. Slightly generic but sufficient.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as ssh_connect, sftp_upload, or ssh_close_forward. The description does not mention prerequisites (e.g., an existing session via sessionId) or whether local/remote/dynamic types require different usage contexts. There is no 'when-to-use' or exclusion language.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_set_optionC

Set an SSH configuration option

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesConfiguration option name
valueYesConfiguration option value

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full burden of behavioral disclosure. It indicates a mutation ('set') but does not disclose whether the change persists, affects only the current session, requires specific privileges, or what happens to existing options. No side effects or usage details are mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that is front-loaded and contains no fluff. It is efficient, though it provides minimal additional value beyond the tool name itself.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is too sparse. It does not explain the return value, the scope of change (persistent vs. session-only), or relate to sibling tools like ssh_get_config. However, the parameter schema is fully described and the operation is simple, preventing a score of 1.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes both parameters (key, value) with 100% coverage. The description adds no extra semantic information about valid keys, value formats, or examples, so it does not go beyond the baseline for well-covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Set an SSH configuration option' with a specific verb (set) and resource (SSH configuration option). It is clear and unambiguous, but it does not explicitly differentiate from sibling tools beyond the verb, and it largely restates the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like ssh_get_config, or any context about session requirements or scope. There is no mention of exclusions or alternative approaches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 15 tool updatesv0.2.1
    • First observedsftp_delete
    • First observedsftp_download
    • First observedsftp_list
    • First observedsftp_upload
    • First observedssh_close_forward
    • First observedssh_connect
    • First observedssh_disconnect
    • First observedssh_execute
    • First observedssh_fingerprint
    • First observedssh_get_config
    • First observedssh_keygen
    • First observedssh_list_keys
    • First observedssh_list_sessions
    • First observedssh_port_forward
    • First observedssh_set_option

TDQS

A3.5/5.0
Disambiguation5/5

Each tool targets a distinct resource/action: connection lifetime, session management, command execution, SFTP file operations, key management, port forwarding, and configuration. No two tools overlap in purpose, making selection unambiguous.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern, with 'ssh_' prefix for most operations and 'sftp_' for file transfers. The naming convention is predictable and clearly indicates the action and target.

Tool Count5/5

15 tools cover a comprehensive SSH toolkit without bloat. Each tool earns its place, spanning connection, execution, file transfer, key management, tunneling, and configuration.

Completeness4/5

Core SSH workflows are well covered: connect/disconnect, execute, SFTP operations, key generation/listing/fingerprint, port forward setup/teardown, and config read/write. Minor gaps like listing active port forwards or deleting keys exist but do not break common workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables remote SSH command execution and bidirectional file transfers through a standardized interface. It allows AI assistants to securely manage remote servers while keeping credentials isolated and applying command-level security controls.
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that gives AI assistants full SSH/SFTP remote operations — session management, command execution, interactive shells, file transfers, port forwarding, and system diagnostics.
    2
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server enabling AI assistants to securely operate remote servers via persistent SSH sessions, with tools for command execution, file transfer, directory listing, and system monitoring.
    4
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI tools to manage SSH connections, execute commands, transfer files, and perform remote server diagnostics via MCP protocol.
    17
    13
    MIT

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/XNet-NGO/ssh-mcp-server'

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