Skip to main content
Glama

$ tf upload model.gguf
✓ Uploaded  model.gguf  (4.2 GB)  →  https://transfa.sh/f/xK9mRp
  SHA-256    a3f8c2...d91b
  Expires    in 7 days

Why transfa?

Most file-sharing tools are built for humans clicking through UIs. transfa is built for the terminal — designed to be called from shell scripts, CI pipelines, and AI agents (Claude, GPT, Cursor, etc.) that need to move files without friction.

  • No signup required — just install and upload

  • Any format, any size — up to 100 GB; ML models, archives, binaries, code, media

  • Built for agents — JSON API, SHA-256 checksums, idempotent uploads

  • Password protection, download limits, TTL — full control over every link

  • 100+ formats detected — MIME type auto-detection including .gguf, .safetensors, .parquet, .ipynb, and more


Related MCP server: vnsh-mcp

Install

Node.js / CLI

npm install -g transfa

Python SDK

pip install transfa

MCP server (Claude, Cursor, any MCP-compatible agent)

npx -y transfa-mcp

Or use the raw install script:

curl -fsSL https://transfa.sh/install | sh

Quick start

# Upload a file (no account needed)
tf upload photo.jpg

# Upload with custom TTL and password
tf upload secret.zip --ttl 24h --password hunter2

# Upload and pipe the URL to clipboard
tf upload bundle.tar.gz | grep url | awk '{print $2}' | pbcopy

# Download a file
tf download https://transfa.sh/f/xK9mRp

# List your uploads
tf list

# Delete an upload
tf delete xK9mRp

GitHub Actions

Upload build artifacts, coverage reports, and any CI output straight from your workflow:

- uses: colapsis/transfa-action@v1
  id: upload
  with:
    file: ./dist/report.pdf
    api-key: ${{ secrets.TRANSFA_API_KEY }}

- run: echo "${{ steps.upload.outputs.agent-link }}" >> $GITHUB_STEP_SUMMARY

All five outputs are available after the step: id, agent-link, human-link, sha256, expires-at.

See colapsis/transfa-action for the full input reference and more examples (password-protected links, self-hosted instances, single-download limits).


API

transfa is fully REST. Every operation the CLI does, you can do with curl or any HTTP client.

Upload

curl -X POST https://transfa.sh/api/upload \
  -H "Authorization: Bearer $TF_KEY" \
  -F "file=@model.gguf" \
  -F "ttl=7d"
{
  "id": "xK9mRp",
  "url": "https://transfa.sh/f/xK9mRp",
  "download_url": "https://transfa.sh/api/download/xK9mRp",
  "filename": "model.gguf",
  "bytes": 4512345678,
  "sha256": "a3f8c2...d91b",
  "expires_at": "2026-05-21T12:00:00.000Z"
}

Upload options (form fields or headers):

Field

Header

Description

ttl

X-Transfa-TTL

Expiry: 1h, 24h, 7d, 30d

password

Password-protect the download link

max_downloads

Burn after N downloads

filename

X-Transfa-Filename

Override the stored filename

Download

# Direct download (no auth required)
curl -L https://transfa.sh/api/download/xK9mRp -o model.gguf

# Password-protected
curl -L "https://transfa.sh/api/download/xK9mRp?password=hunter2" -o secret.zip

File info

curl https://transfa.sh/api/download/info/xK9mRp
{
  "id": "xK9mRp",
  "filename": "model.gguf",
  "bytes": 4512345678,
  "sha256": "a3f8c2...d91b",
  "mime_type": "application/octet-stream",
  "download_count": 3,
  "has_password": false,
  "expires_at": "2026-05-21T12:00:00.000Z",
  "active": true
}

List uploads

curl https://transfa.sh/api/upload \
  -H "Authorization: Bearer $TF_KEY"

Delete

curl -X DELETE https://transfa.sh/api/upload/xK9mRp \
  -H "Authorization: Bearer $TF_KEY"

Supported formats

Over 100 file types with correct MIME detection — including types not in standard MIME databases:

Category

Formats

ML models

.gguf .ggml .safetensors .onnx .pt .pth .pkl .ckpt .tflite .mlmodel .lora

Data science

.parquet .arrow .feather .h5 .hdf5 .npz .npy .lance .duckdb .ipynb

Code

.py .rs .go .ts .kt .swift .scala .cu .sol .vy .elm .zig

Archives

.zip .tar .gz .bz2 .xz .7z .zst

3D / Design

.glb .gltf .obj .stl .usdz .blend .fig .sketch .psd

Media

.avif .webp .heic .jxl .opus .flac .webm .av1

Config

.toml .hcl .tf .tfvars .nix .dhall .lock .env

Everything else

.wasm .sqlite .db .pem .crt .p12 + all standard types

Any other format is accepted as application/octet-stream — nothing is blocked.


Plans

Guest

Free

Pro

Team

Max file size

10 MB

500 MB

50 GB

100 GB

Uploads / day

5

20

500

5,000

Max TTL

24h

48h

30 days

180 days

Storage

Unlimited

Unlimited

Price

Free

Free

$12/mo

$48/mo

Trial

3-day free trial

3-day free trial

→ See full pricing


MCP server (Claude, Cursor, and any MCP-compatible agent)

transfa ships an MCP server that lets Claude, Cursor, and any MCP-compatible agent upload and share files autonomously — no shell commands, no infrastructure setup.

npx -y transfa-mcp

Claude Desktop config

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "transfa": {
      "command": "npx",
      "args": ["-y", "transfa-mcp"],
      "env": {
        "TRANSFA_API_KEY": "your-api-key"
      }
    }
  }
}

The API key is optional — the server works in guest mode without one (10 MB / 24h limit).

Available MCP tools

Tool

Description

upload

Upload a file from the local filesystem. Returns agent_link (direct URL), human_link (share page), and sha256. Accepts run_id, step, consumer, intent for provenance.

file_info

Get metadata about an upload — filename, size, SHA-256, expiry, download count, provenance fields.

list_uploads

List recent uploads (requires API key).

delete_upload

Delete an upload immediately.

run_artifacts

Get all files uploaded under a run_id — the full provenance manifest for a pipeline run or agent session.

Example agent workflow

When Claude has transfa as an MCP tool, it can:

  1. Generate a report → call upload → get a link → paste the link in the conversation

  2. Pass a file to another agent by sharing the agent_link

  3. Clean up with delete_upload when done


Python SDK

import transfa

# Upload
result = transfa.upload("model.pt", ttl="24h", run_id="run-42", artifact=True)
print(result.url, result.sha256)

# Download (SHA-256 verified)
transfa.download(result.id, output="model.pt")

# Provenance manifest for a run
manifest = transfa.run_artifacts("run-42")

# Async
async with transfa.AsyncClient() as client:
    result = await client.upload("model.pt")

See python/README.md for the full API reference.


Use with AI agents (script/subprocess)

transfa is also designed to be called from shell scripts, CI pipelines, and agents that prefer subprocess calls:

import subprocess, json

result = subprocess.run(
    ["tf", "upload", "output.csv"],
    capture_output=True, text=True
)
data = json.loads(result.stdout)
print(data["url"])  # https://transfa.sh/f/xK9mRp

Or use the REST API directly — no SDKs, no auth flows, just HTTP.


Self-hosting

git clone https://github.com/colapsis/transfa.git
cd transfa
cp .env.example .env          # fill in your keys
npm install --prefix server
npm install --prefix cli
npm run build --prefix frontend
pm2 start ecosystem.config.cjs

Requirements: Node.js 18+, nginx (for SSL/proxy)

See nginx/transfa.conf for a production-ready nginx config.

Environment variables

Variable

Description

PORT

Server port (default: 3001)

BASE_URL

Public URL e.g. https://transfa.sh

STRIPE_SECRET_KEY

Stripe secret key for billing

STRIPE_WEBHOOK_SECRET

Stripe webhook signing secret

STRIPE_PRO_PRICE_ID

Stripe price ID for Pro plan

STRIPE_TEAM_PRICE_ID

Stripe price ID for Team plan


Security

Found a vulnerability? Please email tansfa.sh@gmail.com or see SECURITY.md.

Do not open a public issue for security reports.


License

MIT — © 2026 transfa contributors

Available Tools

4 tools
delete_uploadA

Delete an upload immediately. Requires ownership (API key must match the uploader).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUpload ID to delete

TDQS

A4.3/5.0
Behavior4/5

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

Discloses immediate effect and ownership prerequisite. Lacks mention of irreversibility or side effects, but deletion is generally understood.

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 concise sentences with no wasted words. Essential information front-loaded.

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 simple tool with one required param and no output schema, description covers purpose, condition, and parameter usage adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema provides 100% coverage with 'Upload ID to delete'. Description adds no extra parameter semantics beyond schema.

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?

Clearly states action 'Delete an upload' and resource 'upload'. Differentiates from siblings (file_info, list_uploads, upload) by being the deletion tool.

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?

Specifies immediate deletion and ownership requirement ('API key must match the uploader'). Does not mention alternatives for non-owners, but provides clear usage context.

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

file_infoA

Get metadata about an upload without downloading it. Returns filename, size, SHA-256, expiry, download count, active status, and whether the file is in a grace period.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUpload ID (the short code in the URL, e.g. "a7f9k2")

TDQS

A4.2/5.0
Behavior4/5

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

Lists specific returned fields but lacks behavioral details like side effects or permissions; no annotations provided to compensate.

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?

One clear sentence plus a list of fields; every part adds value, no fluff.

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 simple tool with one parameter and no output schema, the description is mostly complete; omits error handling or prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description covers 100% of parameters; the tool description adds no extra parameter info beyond the schema.

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?

The description clearly states the action ('Get metadata') and the resource ('an upload'), distinguishing it from siblings like delete_upload and list_uploads.

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?

The phrase 'without downloading it' implies a use case, but no explicit when-to-use or when-not-to-use compared to alternatives.

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

list_uploadsA

List your recent uploads. Requires TRANSFA_API_KEY or a key saved by tf auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results (1–100, default 10)

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the auth requirement but does not mention behavioral traits like idempotency, side effects, or data scope beyond 'recent uploads'. This is adequate for a simple list tool, but minimal.

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 with zero superfluous words. Front-loaded with the core action, followed by a critical prerequisite. Highly efficient.

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?

Given the single parameter and no output schema, the description covers purpose and authentication. It does not detail response format or pagination, but for a simple listing tool, these omissions are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, 'limit', is fully described in the input schema with details on range and default. The description adds no additional meaning, so baseline 3 applies due to 100% schema coverage.

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?

The description states a specific action and resource: 'List your recent uploads'. This clearly distinguishes it from siblings like delete_upload, file_info, and upload.

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?

The description includes authentication requirements ('Requires TRANSFA_API_KEY...'), providing clear precondition. However, it lacks explicit guidance on when not to use or comparison to siblings, though the purpose is self-evident.

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

uploadA

Upload a file from the local filesystem and get a signed link. Returns an agent_link (direct download URL for scripts/agents) and a human_link (browser-friendly share page). SHA-256 is always computed and returned for integrity checks. Works without an API key (guest mode, 10 MB limit). Set TRANSFA_API_KEY for larger files and longer TTLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the file to upload
expiresNoTTL: "1h", "24h", "7d", "30d". Default: 7d
nameNoOverride filename shown to recipient
passwordNoPassword-protect the link
onceNoDelete after first download
max_downloadsNoMax download count
graceNoGrace period after expiry, e.g. "12h" — keeps file downloadable this long after TTL ends

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that a signed link is returned, SHA-256 is computed, guest mode works without API key (10 MB limit), and larger files need an API key. It also mentions both agent_link and human_link outputs. Does not cover error cases, but overall transparent.

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, no extra words. First sentence states main action and return type. Second sentence adds SHA-256 and authentication mode with limits. Information is front-loaded and every sentence contributes.

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?

Without an output schema, the description effectively explains the two return link types and integrity check. For a 7-parameter tool, it covers authentication modes and limits. It lacks error handling details, but overall provides a complete enough picture for a typical upload scenario.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all 7 parameters, so the schema already explains each parameter. The description adds value by explaining return format and authentication context, but does not add deeper semantic meaning to individual parameters beyond the schema.

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?

Description clearly states 'Upload a file from the local filesystem and get a signed link.' It specifies the verb (upload) and the resource (file), and differentiates from sibling tools like delete_upload, file_info, and list_uploads by being the only upload action.

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?

Provides clear guidance on when to use: for uploading files. It explains guest mode vs. API key mode, file size limits, and hints at TTL options. Though it doesn't explicitly contrast with siblings, the context is sufficient for an agent to decide when to invoke.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.0
    • First observeddelete_upload
    • First observedfile_info
    • First observedlist_uploads
    • First observedupload

TDQS

A4.3/5.0
Disambiguation5/5

Each tool has a distinct purpose: uploading, listing, getting file info, and deleting. There is no overlap or ambiguity.

Naming Consistency5/5

All tools use consistent snake_case with a verb_noun pattern (delete_upload, file_info, list_uploads, upload).

Tool Count5/5

Four tools is well-scoped for a file upload service, covering essential operations without being too few or excessive.

Completeness4/5

Basic CRUD operations are covered (upload, list, info, delete). Minor gaps like update or TTL management exist but are not critical for the core functionality.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    File uploads for AI agents. Upload, list, and manage files from AI coding assistants like Claude, Cursor, Windsurf, and VS Code Copilot with no signup required.
    1
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables sharing and reading encrypted files (text, images, logs) for AI workflows, with automatic 24-hour expiration and host-blind security.
    35
    156
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to securely transfer files between machines via encrypted, expiring share links, with tools for upload, download, status checks, and link management.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/colapsis/transfa'

If you have feedback or need assistance with the MCP directory API, please join our Discord server