{
  "markdown": "<p align=\"center\">\n  <a href=\"https://transfa.sh\"><img src=\"https://transfa.sh/brand/logo-wordmark.png\" height=\"52\" alt=\"transfa\" /></a>\n</p>\n\n<p align=\"center\">\n  <strong>Dead-simple file sharing for developers and AI agents.</strong><br/>\n  Upload with one command. Share with a link. No account required.\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/transfa\"><img src=\"https://img.shields.io/npm/v/transfa?color=0ea5e9&label=npm\" alt=\"npm version\" /></a>\n  <a href=\"https://www.npmjs.com/package/transfa\"><img src=\"https://img.shields.io/npm/dm/transfa?color=8b5cf6&label=downloads\" alt=\"npm downloads\" /></a>\n  <img src=\"https://img.shields.io/badge/node-%3E%3D18-brightgreen\" alt=\"node version\" />\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-blue\" alt=\"MIT License\" /></a>\n  <a href=\"https://transfa.sh\"><img src=\"https://img.shields.io/badge/hosted-transfa.sh-ff6b6b\" alt=\"Hosted service\" /></a>\n</p>\n\n---\n\n```\n$ tf upload model.gguf\n✓ Uploaded  model.gguf  (4.2 GB)  →  https://transfa.sh/f/xK9mRp\n  SHA-256    a3f8c2...d91b\n  Expires    in 7 days\n```\n\n---\n\n## Why transfa?\n\nMost 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.\n\n- **No signup required** — just install and upload\n- **Any format, any size** — up to 100 GB; ML models, archives, binaries, code, media\n- **Built for agents** — JSON API, SHA-256 checksums, idempotent uploads\n- **Password protection, download limits, TTL** — full control over every link\n- **100+ formats detected** — MIME type auto-detection including `.gguf`, `.safetensors`, `.parquet`, `.ipynb`, and more\n\n---\n\n## Install\n\n**Node.js / CLI**\n```bash\nnpm install -g transfa\n```\n\n**Python SDK**\n```bash\npip install transfa\n```\n\n**MCP server** (Claude, Cursor, any MCP-compatible agent)\n```bash\nnpx -y transfa-mcp\n```\n\nOr use the raw install script:\n```bash\ncurl -fsSL https://transfa.sh/install | sh\n```\n\n---\n\n## Quick start\n\n```bash\n# Upload a file (no account needed)\ntf upload photo.jpg\n\n# Upload with custom TTL and password\ntf upload secret.zip --ttl 24h --password hunter2\n\n# Upload and pipe the URL to clipboard\ntf upload bundle.tar.gz | grep url | awk '{print $2}' | pbcopy\n\n# Download a file\ntf download https://transfa.sh/f/xK9mRp\n\n# List your uploads\ntf list\n\n# Delete an upload\ntf delete xK9mRp\n```\n\n---\n\n## GitHub Actions\n\nUpload build artifacts, coverage reports, and any CI output straight from your workflow:\n\n```yaml\n- uses: colapsis/transfa-action@v1\n  id: upload\n  with:\n    file: ./dist/report.pdf\n    api-key: ${{ secrets.TRANSFA_API_KEY }}\n\n- run: echo \"${{ steps.upload.outputs.agent-link }}\" >> $GITHUB_STEP_SUMMARY\n```\n\nAll five outputs are available after the step: `id`, `agent-link`, `human-link`, `sha256`, `expires-at`.\n\nSee [colapsis/transfa-action](https://github.com/colapsis/transfa-action) for the full input reference and more examples (password-protected links, self-hosted instances, single-download limits).\n\n---\n\n## API\n\ntransfa is fully REST. Every operation the CLI does, you can do with `curl` or any HTTP client.\n\n### Upload\n\n```bash\ncurl -X POST https://transfa.sh/api/upload \\\n  -H \"Authorization: Bearer $TF_KEY\" \\\n  -F \"file=@model.gguf\" \\\n  -F \"ttl=7d\"\n```\n\n```json\n{\n  \"id\": \"xK9mRp\",\n  \"url\": \"https://transfa.sh/f/xK9mRp\",\n  \"download_url\": \"https://transfa.sh/api/download/xK9mRp\",\n  \"filename\": \"model.gguf\",\n  \"bytes\": 4512345678,\n  \"sha256\": \"a3f8c2...d91b\",\n  \"expires_at\": \"2026-05-21T12:00:00.000Z\"\n}\n```\n\n**Upload options** (form fields or headers):\n\n| Field | Header | Description |\n|---|---|---|\n| `ttl` | `X-Transfa-TTL` | Expiry: `1h`, `24h`, `7d`, `30d` |\n| `password` | — | Password-protect the download link |\n| `max_downloads` | — | Burn after N downloads |\n| `filename` | `X-Transfa-Filename` | Override the stored filename |\n\n### Download\n\n```bash\n# Direct download (no auth required)\ncurl -L https://transfa.sh/api/download/xK9mRp -o model.gguf\n\n# Password-protected\ncurl -L \"https://transfa.sh/api/download/xK9mRp?password=hunter2\" -o secret.zip\n```\n\n### File info\n\n```bash\ncurl https://transfa.sh/api/download/info/xK9mRp\n```\n\n```json\n{\n  \"id\": \"xK9mRp\",\n  \"filename\": \"model.gguf\",\n  \"bytes\": 4512345678,\n  \"sha256\": \"a3f8c2...d91b\",\n  \"mime_type\": \"application/octet-stream\",\n  \"download_count\": 3,\n  \"has_password\": false,\n  \"expires_at\": \"2026-05-21T12:00:00.000Z\",\n  \"active\": true\n}\n```\n\n### List uploads\n\n```bash\ncurl https://transfa.sh/api/upload \\\n  -H \"Authorization: Bearer $TF_KEY\"\n```\n\n### Delete\n\n```bash\ncurl -X DELETE https://transfa.sh/api/upload/xK9mRp \\\n  -H \"Authorization: Bearer $TF_KEY\"\n```\n\n---\n\n## Supported formats\n\nOver 100 file types with correct MIME detection — including types not in standard MIME databases:\n\n| Category | Formats |\n|---|---|\n| **ML models** | `.gguf` `.ggml` `.safetensors` `.onnx` `.pt` `.pth` `.pkl` `.ckpt` `.tflite` `.mlmodel` `.lora` |\n| **Data science** | `.parquet` `.arrow` `.feather` `.h5` `.hdf5` `.npz` `.npy` `.lance` `.duckdb` `.ipynb` |\n| **Code** | `.py` `.rs` `.go` `.ts` `.kt` `.swift` `.scala` `.cu` `.sol` `.vy` `.elm` `.zig` |\n| **Archives** | `.zip` `.tar` `.gz` `.bz2` `.xz` `.7z` `.zst` |\n| **3D / Design** | `.glb` `.gltf` `.obj` `.stl` `.usdz` `.blend` `.fig` `.sketch` `.psd` |\n| **Media** | `.avif` `.webp` `.heic` `.jxl` `.opus` `.flac` `.webm` `.av1` |\n| **Config** | `.toml` `.hcl` `.tf` `.tfvars` `.nix` `.dhall` `.lock` `.env` |\n| **Everything else** | `.wasm` `.sqlite` `.db` `.pem` `.crt` `.p12` + all standard types |\n\nAny other format is accepted as `application/octet-stream` — nothing is blocked.\n\n---\n\n## Plans\n\n| | Guest | Free | Pro | Team |\n|---|---|---|---|---|\n| **Max file size** | 10 MB | 500 MB | 50 GB | 100 GB |\n| **Uploads / day** | 5 | 20 | 500 | 5,000 |\n| **Max TTL** | 24h | 48h | 30 days | 180 days |\n| **Storage** | — | — | Unlimited | Unlimited |\n| **Price** | Free | Free | $12/mo | $48/mo |\n| **Trial** | — | — | 3-day free trial | 3-day free trial |\n\n[→ See full pricing](https://transfa.sh/pricing)\n\n---\n\n## MCP server (Claude, Cursor, and any MCP-compatible agent)\n\ntransfa ships an [MCP server](https://modelcontextprotocol.io) that lets Claude, Cursor, and any MCP-compatible agent upload and share files autonomously — no shell commands, no infrastructure setup.\n\n```bash\nnpx -y transfa-mcp\n```\n\n### Claude Desktop config\n\nAdd to `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"transfa\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"transfa-mcp\"],\n      \"env\": {\n        \"TRANSFA_API_KEY\": \"your-api-key\"\n      }\n    }\n  }\n}\n```\n\nThe API key is optional — the server works in guest mode without one (10 MB / 24h limit).\n\n### Available MCP tools\n\n| Tool | Description |\n|---|---|\n| `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. |\n| `file_info` | Get metadata about an upload — filename, size, SHA-256, expiry, download count, provenance fields. |\n| `list_uploads` | List recent uploads (requires API key). |\n| `delete_upload` | Delete an upload immediately. |\n| `run_artifacts` | Get all files uploaded under a `run_id` — the full provenance manifest for a pipeline run or agent session. |\n\n### Example agent workflow\n\nWhen Claude has transfa as an MCP tool, it can:\n1. Generate a report → call `upload` → get a link → paste the link in the conversation\n2. Pass a file to another agent by sharing the `agent_link`\n3. Clean up with `delete_upload` when done\n\n---\n\n## Python SDK\n\n```python\nimport transfa\n\n# Upload\nresult = transfa.upload(\"model.pt\", ttl=\"24h\", run_id=\"run-42\", artifact=True)\nprint(result.url, result.sha256)\n\n# Download (SHA-256 verified)\ntransfa.download(result.id, output=\"model.pt\")\n\n# Provenance manifest for a run\nmanifest = transfa.run_artifacts(\"run-42\")\n\n# Async\nasync with transfa.AsyncClient() as client:\n    result = await client.upload(\"model.pt\")\n```\n\nSee [python/README.md](python/README.md) for the full API reference.\n\n---\n\n## Use with AI agents (script/subprocess)\n\ntransfa is also designed to be called from shell scripts, CI pipelines, and agents that prefer subprocess calls:\n\n```python\nimport subprocess, json\n\nresult = subprocess.run(\n    [\"tf\", \"upload\", \"output.csv\"],\n    capture_output=True, text=True\n)\ndata = json.loads(result.stdout)\nprint(data[\"url\"])  # https://transfa.sh/f/xK9mRp\n```\n\nOr use the REST API directly — no SDKs, no auth flows, just HTTP.\n\n---\n\n## Self-hosting\n\n```bash\ngit clone https://github.com/colapsis/transfa.git\ncd transfa\ncp .env.example .env          # fill in your keys\nnpm install --prefix server\nnpm install --prefix cli\nnpm run build --prefix frontend\npm2 start ecosystem.config.cjs\n```\n\n**Requirements:** Node.js 18+, nginx (for SSL/proxy)\n\nSee [`nginx/transfa.conf`](nginx/transfa.conf) for a production-ready nginx config.\n\n### Environment variables\n\n| Variable | Description |\n|---|---|\n| `PORT` | Server port (default: `3001`) |\n| `BASE_URL` | Public URL e.g. `https://transfa.sh` |\n| `STRIPE_SECRET_KEY` | Stripe secret key for billing |\n| `STRIPE_WEBHOOK_SECRET` | Stripe webhook signing secret |\n| `STRIPE_PRO_PRICE_ID` | Stripe price ID for Pro plan |\n| `STRIPE_TEAM_PRICE_ID` | Stripe price ID for Team plan |\n\n---\n\n## Security\n\nFound a vulnerability? Please email **tansfa.sh@gmail.com** or see [SECURITY.md](SECURITY.md).\n\nDo **not** open a public issue for security reports.\n\n---\n\n## License\n\n[MIT](LICENSE) — © 2026 transfa contributors\n",
  "bytes": 9693,
  "sha": "7aa29a2272e6c1080e2ba45574ca8ffd69e5704826ae5c3e6e1986ff625e0eae",
  "repo_slug": "colapsis/transfa",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_colapsis_transfa_9a7288de/readme"
}