Skip to main content
Glama
nuwainfo

ffl-mcp

Official
by nuwainfo

Fflsharefile

fflShareFile

Share a local file or folder through a clickable link, with optional upload-based async sharing, encryption, and access controls.

Instructions

Share a local file or folder using ffl. Respects ALLOWED_BASE_DIR when configured. Managed-sandbox policy: When running inside ChatGPT Work, Grok Bot, a cloud-hosted Codex sandbox, or a Claude Code cloud session (Claude Code on the web / claude.ai/code, or a remote session started from the Claude app), use relay immediately: forceRelay=True and preferredTunnel="default:web". These environments may only allow outbound HTTPS through a proxy, with no usable UDP/ICE or raw TCP tunnels. Do not apply this rule to local Claude Code CLI, local Codex CLI, local Grok Build, or ordinary user machines.

If qrInTerminal is True, also returns a QR code as ASCII art for terminal display.

IMPORTANT: Always present the returned link so the user can click it to open in a browser. Do not display it as a plain unformatted URL — in some interfaces (such as Claude Dispatch) plain URLs are not auto-linked and will not be clickable.

Input Schema

NameRequiredDescriptionDefault
vfsNoExpose as VFS server (vfs:// URI) instead of regular download
e2eeNoEnable end-to-end encryption (default: False)
nameNoCustom download filename shown to recipient
pathYesPath to file or folder to share
portNo
aliasNoCustom link alias instead of random UID (requires Standard+ account)
pauseNo
proxyNoProxy server URL (e.g. socks5://127.0.0.1:9050)
inviteNo
uploadNoUpload to FFL server for async sharing — recipient doesn't need sender online. Pass duration e.g. '1 day', '6 hours', '1 week' (requires Standard+ account)
excludeNoExclude files matching glob or regex patterns, comma-separated (e.g. '*.log' or 're:\.tmp$')
hookUrlNoCustom webhook URL for events
previewNoOpen recipient's browser directly in preview mode — ideal for folders or multiple files so the recipient sees a file list before downloading (default: False)
receiptNoSend email notification when recipient downloads (pass email address, or empty string for account email)
authUserNoHTTP Basic Auth username to protect the link
transportNo
forceRelayNoDisable direct WebRTC; route all traffic through tunnel
pickupCodeNoSpecific pickup code to use (default: auto-generated)
authPasswordNoHTTP Basic Auth password to protect the link
maxDownloadsNoStop serving after N downloads, P2P only (default: 1)
qrInTerminalNoReturn ASCII QR code art for terminal display
resumeUploadNoResume an interrupted upload (default: False)
recipientAuthNoRecipient authentication mode — pickup (6-digit code), pubkey (RSA challenge), pubkey+pickup (both), email (OTP)
receiptConfirmNoRequire recipient to confirm before download starts; pass confirmation message or empty string for default
recipientEmailNoRecipient email(s) for OTP auth, comma-separated
timeoutSecondsNoStop serving after N seconds of inactivity, P2P only (default: 1800)
enableReportingNo
preferredTunnelNoSet preferred tunnel for this and future runs — cloudflare, ngrok, bore, etc.
recipientPublicKeyNoPath to recipient .fflpub public key file for pubkey auth

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed27 schema fields changedv0.5.1
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / alias / description
      Added value: +"Custom link alias instead of random UID (requires Standard+ account)"
    • addedInput schema / properties / authPassword / description
      Added value: +"HTTP Basic Auth password to protect the link"
    • addedInput schema / properties / authUser / description
      Added value: +"HTTP Basic Auth username to protect the link"
    • addedInput schema / properties / e2ee / description
      Added value: +"Enable end-to-end encryption (default: False)"
    • addedInput schema / properties / exclude / description
      Added value: +"Exclude files matching glob or regex patterns, comma-separated (e.g. '*.log' or 're:\\.tmp$')"
    • addedInput schema / properties / forceRelay / description
      Added value: +"Disable direct WebRTC; route all traffic through tunnel"
    • addedInput schema / properties / hookUrl / description
      Added value: +"Custom webhook URL for events"
    • addedInput schema / properties / maxDownloads / description
      Added value: +"Stop serving after N downloads, P2P only (default: 1)"
    • addedInput schema / properties / name / description
      Added value: +"Custom download filename shown to recipient"
    • addedInput schema / properties / path / description
      Added value: +"Path to file or folder to share"
    • addedInput schema / properties / pickupCode / description
      Added value: +"Specific pickup code to use (default: auto-generated)"
    • addedInput schema / properties / preferredTunnel / description
      Added value: +"Set preferred tunnel for this and future runs — cloudflare, ngrok, bore, etc."
    • addedInput schema / properties / preview / description
      Added value: +"Open recipient's browser directly in preview mode — ideal for folders or multiple files so the recipient sees a file list before downloading (default: False)"
    • addedInput schema / properties / proxy / description
      Added value: +"Proxy server URL (e.g. socks5://127.0.0.1:9050)"
    • addedInput schema / properties / qrInTerminal / description
      Added value: +"Return ASCII QR code art for terminal display"
    • addedInput schema / properties / receipt / description
      Added value: +"Send email notification when recipient downloads (pass email address, or empty string for account email)"
    • addedInput schema / properties / receiptConfirm / description
      Added value: +"Require recipient to confirm before download starts; pass confirmation message or empty string for default"
    • addedInput schema / properties / recipientAuth / description
      Added value: +"Recipient authentication mode — pickup (6-digit code), pubkey (RSA challenge), pubkey+pickup (both), email (OTP)"
    • addedInput schema / properties / recipientEmail / description
      Added value: +"Recipient email(s) for OTP auth, comma-separated"
    • addedInput schema / properties / recipientPublicKey / description
      Added value: +"Path to recipient .fflpub public key file for pubkey auth"
    • addedInput schema / properties / resumeUpload / description
      Added value: +"Resume an interrupted upload (default: False)"
    • addedInput schema / properties / timeoutSeconds / description
      Added value: +"Stop serving after N seconds of inactivity, P2P only (default: 1800)"
    • addedInput schema / properties / transport
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / upload / description
      Added value: +"Upload to FFL server for async sharing — recipient doesn't need sender online. Pass duration e.g. '1 day', '6 hours', '1 week' (requires Standard+ account)"
    • addedInput schema / properties / vfs / description
      Added value: +"Expose as VFS server (vfs:// URI) instead of regular download"
    • removedInput schema / properties / waitLinkSeconds
      Removed value: -{
      -  "default": 20,
      -  "type": "integer"
      -}
  2. First observedv0.2.1

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does add real behavior: it discloses the ALLOWED_BASE_DIR constraint, the sandbox/network posture (outbound HTTPS only, no UDP/ICE or raw TCP), and that qrInTerminal changes the return payload. It stays silent on session lifetime, whether the call blocks, or what happens after maxDownloads/timeout, though those are partly covered in the schema.

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?

Purpose, environment rule, QR note, and output-presentation requirement appear in that order, which is sensible front-loading. The sandbox paragraph is long but earns its length; the trailing formatting instruction is slightly tangential to tool selection yet prevents a real failure mode.

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 29-parameter tool with an output schema, the description supplies the pieces the schema cannot: environment-dependent configuration, the base-directory restriction, and the requirement to surface the returned link clickably. What it omits (duration/serving semantics, upload vs P2P tradeoffs) is largely documented per-parameter in the schema.

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?

Schema coverage is 83%, so the baseline is 3; the description goes beyond by naming concrete values for forceRelay and preferredTunnel and by explaining they must be used together in sandboxed environments. It adds nothing about the other 26 parameters, but the one parameter cluster it does explain is the one with genuine ambiguity.

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?

Opens with a specific verb+resource ('Share a local file or folder using ffl') that is immediately actionable. It does not, however, distinguish itself from the very similar sibling fflShareFiles (plural) or fflShareText/fflShareBase64, so an agent must infer which one to pick.

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?

Contains a strong, explicit environment-based rule (use forceRelay=True and preferredTunnel="default:web" inside ChatGPT Work, Grok Bot, Codex sandbox, Claude Code cloud) with an explicit negative list of local CLIs and user machines. But it gives no guidance on when to choose this tool over fflShareFiles, fflShareText, or fflShareBase64.

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