Skip to main content
Glama
nuwainfo

ffl-mcp

Official
by nuwainfo

Fflsharefiles

fflShareFiles

Share multiple local files at once by auto-zipping them into a single downloadable package and returning a clickable link.

Instructions

Share multiple local files at once using ffl. ffl auto-zips them into a single download. 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.

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
e2eeNoEnable end-to-end encryption (default: False)
nameNoCustom download filename shown to recipient (e.g. 'release-v2.0.zip')
portNo
aliasNoCustom link alias instead of random UID (requires Standard+ account)
pathsYesList of local file paths to share together (auto-zipped by ffl)
pauseNo
proxyNoProxy server URL (e.g. socks5://127.0.0.1:9050)
inviteNo
uploadNoUpload to FFL server for async sharing — e.g. '1 day', '6 hours' (requires Standard+ account)
excludeNoExclude files matching glob or regex patterns, comma-separated
hookUrlNoCustom webhook URL for events
previewNoOpen recipient's browser directly in preview mode — shows a file list before downloading (default: False). Recommended when sharing multiple files so the recipient can inspect contents first.
receiptNoSend email notification when recipient downloads
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, pubkey, pubkey+pickup, email
receiptConfirmNoRequire recipient to confirm before download starts
recipientEmailNoRecipient email(s) for OTP auth, comma-separated
timeoutSecondsNoStop serving after N seconds of inactivity, P2P only (default: 1800)
enableReportingNo
preferredTunnelNoSet preferred tunnel — 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. Changed26 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"
    • 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 (e.g. 'release-v2.0.zip')"
    • addedInput schema / properties / paths / description
      Added value: +"List of local file paths to share together (auto-zipped by ffl)"
    • 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 — cloudflare, ngrok, bore, etc."
    • addedInput schema / properties / preview / description
      Added value: +"Open recipient's browser directly in preview mode — shows a file list before downloading (default: False). Recommended when sharing multiple files so the recipient can inspect contents first."
    • 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"
    • addedInput schema / properties / receiptConfirm / description
      Added value: +"Require recipient to confirm before download starts"
    • addedInput schema / properties / recipientAuth / description
      Added value: +"Recipient authentication mode — pickup, pubkey, pubkey+pickup, email"
    • 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 — e.g. '1 day', '6 hours' (requires Standard+ account)"
    • removedInput schema / properties / waitLinkSeconds
      Removed value: -{
      -  "default": 20,
      -  "type": "integer"
      -}
  2. First observedv0.2.1

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries real weight: it discloses auto-zipping into one download, the networking constraint of managed sandboxes (no UDP/ICE or raw TCP), and the presentation requirement for the returned link. It stops short of disclosing lifecycle/security defaults such as the link remaining live with no auth and E2EE off by default, which matters for a tool that exposes local paths over the network.

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?

Front-loads purpose in the first sentence, then the policy block, then the output-presentation rule — a sensible order with no filler. The policy paragraph is verbose for what amounts to one conditional instruction, and the all-caps IMPORTANT block would be better placed with the return-value guidance.

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 28-parameter, annotation-free tool with an output schema, the description covers the three things an agent can't infer: auto-zip grouping, sandbox relay configuration, and clickable-link presentation. It leaves the auth/encryption/upload mode choices to schema descriptions, which is acceptable given the 82% coverage but is the remaining gap.

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 82%, so the baseline is 3, but the description adds genuine meaning beyond the schema by prescribing the exact forceRelay=True plus preferredTunnel="default:web" pairing for sandboxed environments, which the schema describes only generically. The many advanced params (upload, e2ee, alias, auth*) get no narrative guidance and rely on their schema descriptions.

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 with scope: 'Share multiple local files at once using ffl', plus the key behavior 'ffl auto-zips them into a single download'. The word 'multiple' implicitly separates it from the sibling fflShareFile, and 'local files' separates it from fflShareText/fflShareBase64.

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

Usage Guidelines4/5

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

Gives an explicit conditional rule with an explicit exclusion: force relay when inside ChatGPT Work / Grok Bot / Codex sandbox / Claude Code cloud, and 'Do not apply this rule to local Claude Code CLI, local Codex CLI... or ordinary user machines'. It does not, however, say when to pick this over fflShareFile or fflShareText, so sibling selection is left to inference.

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