Skip to main content
Glama
nuwainfo

ffl-mcp

Official
by nuwainfo

Fflsharebase64

fflShareBase64

Share base64-encoded binary data by creating a session and clickable link recipients can open, with options for encryption, QR display, and download limits.

Instructions

Share arbitrary binary data (base64-encoded) using ffl. Returns a sessionId and link. 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
e2eeNoEnable end-to-end encryption (default: False)
nameNoDownload filename shown to recipient (default: data.bin)data.bin
portNoLocal HTTP server port (default: auto-detect)
aliasNoCustom link alias instead of random UID (requires Standard+ account)
proxyNoProxy server URL (e.g. socks5://127.0.0.1:9050)
inviteNoOpen invite page in browser with the sharing link
dataB64YesBase64-encoded binary data to share
hookUrlNoCustom webhook URL for events
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 (default: 1)
qrInTerminalNoReturn ASCII QR code art for terminal display
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 (default: 1800)
enableReportingNoEnable ffl error reporting for diagnostics (disabled by default)
preferredTunnelNo
recipientPublicKeyNoPath to recipient .fflpub public key file for pubkey auth

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed25 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 / dataB64 / description
      Added value: +"Base64-encoded binary data to share"
    • addedInput schema / properties / e2ee / description
      Added value: +"Enable end-to-end encryption (default: False)"
    • addedInput schema / properties / enableReporting / description
      Added value: +"Enable ffl error reporting for diagnostics (disabled by default)"
    • 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 / invite / description
      Added value: +"Open invite page in browser with the sharing link"
    • addedInput schema / properties / maxDownloads / description
      Added value: +"Stop serving after N downloads (default: 1)"
    • addedInput schema / properties / name / description
      Added value: +"Download filename shown to recipient (default: data.bin)"
    • addedInput schema / properties / pickupCode / description
      Added value: +"Specific pickup code to use (default: auto-generated)"
    • addedInput schema / properties / port / description
      Added value: +"Local HTTP server port (default: auto-detect)"
    • addedInput schema / properties / preferredTunnel
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • 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 / timeoutSeconds / description
      Added value: +"Stop serving after N seconds of inactivity (default: 1800)"
    • addedInput schema / properties / transport
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • removedInput schema / properties / waitLinkSeconds
      Removed value: -{
      -  "default": 20,
      -  "type": "integer"
      -}
  2. First observedv0.2.1

TDQS

A4.4/5.0
Behavior4/5

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

No annotations, so the description must carry the load — and it does disclose what a caller otherwise could not guess: environment-dependent network behavior, forced relay semantics, that qrInTerminal adds ASCII art to the result, and an imperative about link presentation. It stops short of describing session lifetime or the local-server serving model, but the output schema covers the return shape.

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?

Front-loaded with the core action in one sentence, followed by a clearly labeled policy block and a single imperative note. Despite the length forced by 23 parameters, no sentence is redundant and the operational payload is easy to locate.

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 23-parameter tool with an output schema, the description supplies the highest-value missing context: the sandbox networking policy that would otherwise cause silent failures, and the link-presentation requirement. Minor gap is the absence of framing relative to fflShareFile/fflShareFiles and of session lifecycle expectations.

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 91%, so the baseline is 3; the description earns above that by explaining the two least self-explanatory parameters (forceRelay, preferredTunnel) with the concrete policy and rationale behind their values. The remaining 22 parameters are adequately covered by the schema alone.

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?

Opens with a specific verb+resource+format: 'Share arbitrary binary data (base64-encoded) using ffl', plus the return contract (sessionId and link). Against siblings fflShareText/fflShareFile/fflShareFiles, the 'base64-encoded binary data' framing makes the distinction clear.

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 when-to-use rule for a real ambiguity: inside managed sandboxes (ChatGPT Work, Codex sandbox, Claude Code cloud) use forceRelay=True and preferredTunnel='default:web', with an explicit exclusion list for local CLI environments. It does not, however, say when to pick this tool over fflShareFile or fflShareFiles, so selection among siblings is left implicit.

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