Skip to main content
Glama
alebgl77

ftp-deploy-mcp

by alebgl77

List configured servers

ftp_list_servers
Read-onlyIdempotent

Lists all configured FTP/FTPS/SFTP servers with protocol, host, port, root, read-only status, auth kind, and default selection, without exposing passwords or keys.

Instructions

List all configured FTP/FTPS/SFTP servers (name, protocol, host, port, root, read-only, auth kind) and which is default. Never reveals passwords or keys.

Input Schema

NameRequiredDescriptionDefault

No arguments

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.3.2
    • changedOutput schema / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "configured_count": {
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "default_server": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "errors": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "message": {
      -              "type": "string"
      -            },
      -            "server": {
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            }
      -          },
      -          "required": [
      -            "server",
      -            "message"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "errors_omitted": {
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "invalid_count": {
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "servers": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "auth": {
      -              "enum": [
      -                "key",
      -                "password"
      -              ],
      -              "type": "string"
      -            },
      -            "connection_refused": {
      -              "type": "boolean"
      -            },
      -            "host": {
      -              "type": "string"
      -            },
      -            "is_default": {
      -              "type": "boolean"
      -            },
      -            "local_root_status": {
      -              "type": "string"
      -            },
      -            "name": {
      -              "type": "string"
      -            },
      -            "port": {
      -              "exclusiveMinimum": 0,
      -              "type": "integer"
      -            },
      -            "protocol": {
      -              "enum": [
      -                "ftp",
      -                "ftps",
      -                "sftp"
      -              ],
      -              "type": "string"
      -            },
      -            "read_only": {
      -              "type": "boolean"
      -            },
      -            "root": {
      -              "type": "string"
      -            },
      -            "security_warning": {
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "protocol",
      -            "host",
      -            "port",
      -            "root",
      -            "read_only",
      -            "auth",
      -            "is_default",
      -            "local_root_status",
      -            "connection_refused",
      -            "security_warning"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "servers_omitted": {
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "status": {
      -        "enum": [
      -          "configured",
      -          "missing",
      -          "invalid"
      -        ],
      -        "type": "string"
      -      },
      -      "valid_count": {
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "status",
      -      "configured_count",
      -      "valid_count",
      -      "invalid_count",
      -      "default_server",
      -      "servers",
      -      "servers_omitted",
      -      "errors",
      -      "errors_omitted"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "code": {
      -            "enum": [
      -              "CONFIG_REQUIRED",
      -              "CONFIG_INVALID",
      -              "SERVER_REQUIRED",
      -              "SERVER_UNKNOWN",
      -              "INVALID_ARGUMENT",
      -              "READ_ONLY",
      -              "TRANSPORT_POLICY",
      -              "HOST_KEY_REJECTED",
      -              "REMOTE_ROOT_REJECTED",
      -              "PATH_REJECTED",
      -              "NOT_FOUND",
      -              "ALREADY_EXISTS",
      -              "TRANSFER_LIMIT",
      -              "TRANSFER_VERIFY",
      -              "TARGET_CHANGED",
      -              "CANCELLED",
      -              "TIMEOUT",
      -              "DEPLOY_PARTIAL",
      -              "TRANSPORT_ERROR",
      -              "OUTPUT_LIMIT",
      -              "INTERNAL_ERROR",
      -              "SCAN_LIMIT",
      -              "CAPACITY_LIMIT"
      -            ],
      -            "type": "string"
      -          },
      -          "effects": {
      -            "enum": [
      -              "none",
      -              "possible",
      -              "confirmed"
      -            ],
      -            "type": "string"
      -          },
      -          "message": {
      -            "type": "string"
      -          },
      -          "next_action": {
      -            "enum": [
      -              "fix_input",
      -              "fix_config",
      -              "select_server",
      -              "inspect_target",
      -              "retry",
      -              "contact_operator",
      -              "none"
      -            ],
      -            "type": "string"
      -          },
      -          "partial": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "completed_bytes": {
      -                "maximum": 9007199254740991,
      -                "minimum": 0,
      -                "type": "integer"
      -              },
      -              "completed_files": {
      -                "maximum": 9007199254740991,
      -                "minimum": 0,
      -                "type": "integer"
      -              },
      -              "failed_files": {
      -                "maximum": 9007199254740991,
      -                "minimum": 0,
      -                "type": "integer"
      -              },
      -              "final": {
      -                "type": "boolean"
      -              },
      -              "total_files": {
      -                "maximum": 9007199254740991,
      -                "minimum": 0,
      -                "type": "integer"
      -              }
      -            },
      -            "required": [
      -              "completed_files",
      -              "completed_bytes",
      -              "failed_files",
      -              "final"
      -            ],
      -            "type": "object"
      -          },
      -          "request_id": {
      -            "format": "uuid",
      -            "type": "string"
      -          },
      -          "retryable": {
      -            "type": "boolean"
      -          },
      -          "schema_version": {
      -            "const": 1,
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "schema_version",
      -          "code",
      -          "message",
      -          "retryable",
      -          "request_id",
      -          "next_action",
      -          "effects"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "configured_count": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "default_server": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "errors": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "message": {
      +              "type": "string"
      +            },
      +            "server": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "server",
      +            "message"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "errors_omitted": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "invalid_count": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "servers": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "auth": {
      +              "enum": [
      +                "key",
      +                "password"
      +              ],
      +              "type": "string"
      +            },
      +            "connection_refused": {
      +              "type": "boolean"
      +            },
      +            "host": {
      +              "type": "string"
      +            },
      +            "is_default": {
      +              "type": "boolean"
      +            },
      +            "local_root_status": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            },
      +            "port": {
      +              "exclusiveMinimum": 0,
      +              "maximum": 9007199254740991,
      +              "type": "integer"
      +            },
      +            "protocol": {
      +              "enum": [
      +                "ftp",
      +                "ftps",
      +                "sftp"
      +              ],
      +              "type": "string"
      +            },
      +            "read_only": {
      +              "type": "boolean"
      +            },
      +            "root": {
      +              "type": "string"
      +            },
      +            "security_warning": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "protocol",
      +            "host",
      +            "port",
      +            "root",
      +            "read_only",
      +            "auth",
      +            "is_default",
      +            "local_root_status",
      +            "connection_refused",
      +            "security_warning"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "servers_omitted": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "status": {
      +        "enum": [
      +          "configured",
      +          "missing",
      +          "invalid"
      +        ],
      +        "type": "string"
      +      },
      +      "valid_count": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "status",
      +      "configured_count",
      +      "valid_count",
      +      "invalid_count",
      +      "default_server",
      +      "servers",
      +      "servers_omitted",
      +      "errors",
      +      "errors_omitted"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "code": {
      +            "enum": [
      +              "CONFIG_REQUIRED",
      +              "CONFIG_INVALID",
      +              "SERVER_REQUIRED",
      +              "SERVER_UNKNOWN",
      +              "INVALID_ARGUMENT",
      +              "READ_ONLY",
      +              "TRANSPORT_POLICY",
      +              "HOST_KEY_REJECTED",
      +              "REMOTE_ROOT_REJECTED",
      +              "PATH_REJECTED",
      +              "NOT_FOUND",
      +              "ALREADY_EXISTS",
      +              "TRANSFER_LIMIT",
      +              "TRANSFER_VERIFY",
      +              "TARGET_CHANGED",
      +              "CANCELLED",
      +              "TIMEOUT",
      +              "DEPLOY_PARTIAL",
      +              "TRANSPORT_ERROR",
      +              "OUTPUT_LIMIT",
      +              "INTERNAL_ERROR",
      +              "SCAN_LIMIT",
      +              "CAPACITY_LIMIT"
      +            ],
      +            "type": "string"
      +          },
      +          "effects": {
      +            "enum": [
      +              "none",
      +              "possible",
      +              "confirmed"
      +            ],
      +            "type": "string"
      +          },
      +          "message": {
      +            "type": "string"
      +          },
      +          "next_action": {
      +            "enum": [
      +              "fix_input",
      +              "fix_config",
      +              "select_server",
      +              "inspect_target",
      +              "retry",
      +              "contact_operator",
      +              "none"
      +            ],
      +            "type": "string"
      +          },
      +          "partial": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "completed_bytes": {
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "completed_files": {
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "failed_files": {
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "final": {
      +                "type": "boolean"
      +              },
      +              "total_files": {
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "completed_files",
      +              "completed_bytes",
      +              "failed_files",
      +              "final"
      +            ],
      +            "type": "object"
      +          },
      +          "request_id": {
      +            "format": "uuid",
      +            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +            "type": "string"
      +          },
      +          "retryable": {
      +            "type": "boolean"
      +          },
      +          "schema_version": {
      +            "const": 1,
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "schema_version",
      +          "code",
      +          "message",
      +          "retryable",
      +          "request_id",
      +          "next_action",
      +          "effects"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed2 schema fields changedv0.2.0
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "oneOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "configured_count": {
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "default_server": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "errors": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "message": {
      +                "type": "string"
      +              },
      +              "server": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "server",
      +              "message"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "errors_omitted": {
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "invalid_count": {
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "servers": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "auth": {
      +                "enum": [
      +                  "key",
      +                  "password"
      +                ],
      +                "type": "string"
      +              },
      +              "connection_refused": {
      +                "type": "boolean"
      +              },
      +              "host": {
      +                "type": "string"
      +              },
      +              "is_default": {
      +                "type": "boolean"
      +              },
      +              "local_root_status": {
      +                "type": "string"
      +              },
      +              "name": {
      +                "type": "string"
      +              },
      +              "port": {
      +                "exclusiveMinimum": 0,
      +                "type": "integer"
      +              },
      +              "protocol": {
      +                "enum": [
      +                  "ftp",
      +                  "ftps",
      +                  "sftp"
      +                ],
      +                "type": "string"
      +              },
      +              "read_only": {
      +                "type": "boolean"
      +              },
      +              "root": {
      +                "type": "string"
      +              },
      +              "security_warning": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "name",
      +              "protocol",
      +              "host",
      +              "port",
      +              "root",
      +              "read_only",
      +              "auth",
      +              "is_default",
      +              "local_root_status",
      +              "connection_refused",
      +              "security_warning"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "servers_omitted": {
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "status": {
      +          "enum": [
      +            "configured",
      +            "missing",
      +            "invalid"
      +          ],
      +          "type": "string"
      +        },
      +        "valid_count": {
      +          "minimum": 0,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "status",
      +        "configured_count",
      +        "valid_count",
      +        "invalid_count",
      +        "default_server",
      +        "servers",
      +        "servers_omitted",
      +        "errors",
      +        "errors_omitted"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "error": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "code": {
      +              "enum": [
      +                "CONFIG_REQUIRED",
      +                "CONFIG_INVALID",
      +                "SERVER_REQUIRED",
      +                "SERVER_UNKNOWN",
      +                "INVALID_ARGUMENT",
      +                "READ_ONLY",
      +                "TRANSPORT_POLICY",
      +                "HOST_KEY_REJECTED",
      +                "REMOTE_ROOT_REJECTED",
      +                "PATH_REJECTED",
      +                "NOT_FOUND",
      +                "ALREADY_EXISTS",
      +                "TRANSFER_LIMIT",
      +                "TRANSFER_VERIFY",
      +                "TARGET_CHANGED",
      +                "CANCELLED",
      +                "TIMEOUT",
      +                "DEPLOY_PARTIAL",
      +                "TRANSPORT_ERROR",
      +                "OUTPUT_LIMIT",
      +                "INTERNAL_ERROR",
      +                "SCAN_LIMIT",
      +                "CAPACITY_LIMIT"
      +              ],
      +              "type": "string"
      +            },
      +            "effects": {
      +              "enum": [
      +                "none",
      +                "possible",
      +                "confirmed"
      +              ],
      +              "type": "string"
      +            },
      +            "message": {
      +              "type": "string"
      +            },
      +            "next_action": {
      +              "enum": [
      +                "fix_input",
      +                "fix_config",
      +                "select_server",
      +                "inspect_target",
      +                "retry",
      +                "contact_operator",
      +                "none"
      +              ],
      +              "type": "string"
      +            },
      +            "partial": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "completed_bytes": {
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "completed_files": {
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "failed_files": {
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "final": {
      +                  "type": "boolean"
      +                },
      +                "total_files": {
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "completed_files",
      +                "completed_bytes",
      +                "failed_files",
      +                "final"
      +              ],
      +              "type": "object"
      +            },
      +            "request_id": {
      +              "format": "uuid",
      +              "type": "string"
      +            },
      +            "retryable": {
      +              "type": "boolean"
      +            },
      +            "schema_version": {
      +              "const": 1,
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "schema_version",
      +            "code",
      +            "message",
      +            "retryable",
      +            "request_id",
      +            "next_action",
      +            "effects"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "error"
      +      ],
      +      "type": "object"
      +    }
      +  ],
      +  "type": "object"
      +}
  3. First observedv0.1.0

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds a genuinely new behavioral guarantee not present in structured fields — 'Never reveals passwords or keys' — which tells the agent the output is sanitized. It does not, however, say anything about pagination or how default selection is determined.

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?

Two sentences, zero filler. The core purpose and returned fields come first, and the security caveat is placed as a short trailing clause where it cannot obscure the main statement.

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

Completeness5/5

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

For a zero-parameter read-only listing tool, the definition covers purpose, scope, returned fields, and the one non-obvious risk (credential exposure). An output schema exists to document the return shape and annotations carry the safety profile, so nothing essential is missing.

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 takes zero parameters, so the baseline is 4. There is nothing parameter-related the description could clarify, and it correctly avoids inventing filter semantics that don't exist.

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?

States a specific verb and resource ('List all configured FTP/FTPS/SFTP servers') and enumerates the fields returned, which distinguishes it from file-oriented siblings like ftp_list and ftp_read. An agent can tell it apart from every sibling without opening a schema.

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 the tool is for inventorying server configurations ('which is default'), but it never states when to prefer it over ftp_list, ftp_test, or the transfer tools, nor any prerequisites. Usage is inferable from the purpose rather than explicitly guided.

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