FTP / FTPS file-integration backend binding plugin for mcpg. Lists a directory, gets a file, or puts a file over FTP — with explicit AUTH-TLS (FTPS) required by default — as MCP tools/resources, with path-traversal defense and a size cap. The transport is suppaftp on a pure-Rust rustls (ring) TLS stack; no openssl / native-tls. Complements the sftp backend.
Three tools with clear verb-noun naming (fs.list, fs.get, fs.put) and documented input schemas. Descriptions are present but brief (18 - 48 chars), below the 50 - 200 char LLM-optimized baseline. All parameters have type and description. Path-traversal defense documented. No output schema visible in source; error handling and recovery guidance absent. Schemas are minimal but present.
Read a file's contents over FTP/FTPS (capped at max_bytes)
List a directory's entries over FTP/FTPS
Write a file over FTP/FTPS (truncate/create)
Tool descriptions are too brief (18 - 48 chars). LLM-optimized descriptions should be 50 - 200 chars and answer WHAT, WHEN, and WHAT IT RETURNS. Current descriptions lack context for tool selection and downstream planning.
No output schema documented in source. LLMs cannot plan downstream calls or extract required fields (e.g., file size, entry metadata, bytes written) without knowing response structure. FtpOutcome struct exists but is not exposed in tool definitions.
No error handling guidance visible. Tools do not document what errors are retryable, user-fixable, or fatal. No recovery hints (e.g., 'Check credentials' or 'Verify path exists'). Agents cannot self-correct on failure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
fs.put accepts both 'content' (base64) and 'text' (plaintext) but does not document mutual exclusivity or precedence. LLMs may pass both, causing ambiguous behavior.
No size limits or pagination documented for fs.list. Large directories could return unbounded results, exhausting context windows. No mention of max_bytes cap for fs.get in tool description.