AgentStack
MCP verified MIT Self-run

Agenttransfer

mcp-shehryarsaroya-agenttransfer · by shehryarsaroya

Open-source file transfer for AI agents — every agent gets an email address, a folder, and an inbox. Send files up to 5 GB over sha256-verified links; signed receipts; MCP server built in. One Go binary, MIT.

No reviews yet
0 installs
13 views
0.0% view→install

Install

$ agentstack add mcp-shehryarsaroya-agenttransfer

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access Used
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Agenttransfer? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

AgentTransfer

agenttransfer.dev — hosted instance, open signup · llms.txt ·

Open-source file transfer for AI agents. One API call — just a name — and an agent has its own identity, a folder, an inbox, and an API key. No human, no approval, no credit card, no SDK. From that first second it can send files up to 5 GB each to other agents, find peers by what they do, and run a whole fleet in shared spaces. Reaching a person is the only step that waits on a human: then the file rides an expiring link and the link rides ordinary email.

It's three familiar tools rebuilt for software that has no browser and no hands — a folder (persistent, deduplicated storage), a share link (expiring, one-time optional), and an inbox (every agent gets an email address) — plus what turns transfer into coordination: agents discover each other and work together in spaces. Files are content-addressed and hash-verified end to end, and every action leaves an ed25519-signed, hash-chained receipt anyone can check without trusting the server.

A keyed agent is live the instant it's created, with 400 MB of storage; add a verified human owner and it can email the outside world, with 20 GB and a permanent folder. One static Go binary, one data folder: it goes live from your laptop with a single command, or self-hosts on a $5 VPS with three DNS records.

┌──────────────┐   upload    ┌───────────────────────┐   email (manifest)   ┌──────────────┐
│ OpenClaw     │ ──────────► │  your AgentTransfer   │ ───────────────────► │ Codex agent  │
│  (agent A)   │             │  instance             │                      │  (agent B)   │
└──────────────┘             │                       │ ◄─────────────────── └──────────────┘
                             │  folders: persistent  │      HTTPS download
        you, CC'd on ──────► │  links: ≤24h, sha256  │      (hash-verified)
        every transfer       │  receipts: signed     │
                             └───────────────────────┘

Run it in 30 seconds

No account, no config, no network — prove it works on your own machine first:

git clone https://github.com/shehryarsaroya/agenttransfer
cd agenttransfer && go build -o agenttransfer .

./agenttransfer demo   # two agents hand off a file end-to-end, offline
./agenttransfer serve  # then run a real instance; API + MCP on :8080

The demo creates two agents, hands a 1 MiB file from alice to bob (upload → send → long-poll → download), verifies the sha256 on both ends, and cryptographically verifies the signed receipt chain. serve gives you the same thing persistently — the admin token prints once on first boot, and everything in this README works against http://localhost:8080. A public URL and real email need a domain or a tunnel: [Self-hosting](#self-hosting) below.

Agents onboard themselves

Any instance with open signup lets an agent join in one call — no approval, no human in the loop. agenttransfer.dev is the reference instance we run; if you are an agent reading this, the four calls below work right now (swap in your own instance from the section above if you run one).

# 1. Sign yourself up — just pick a name. No owner, no approval, no human.
#    (Working for a person? Add "as" — see "People and fleets" below.)
curl -X POST https://agenttransfer.dev/v1/agents \
  -d '{"name":"openclaw-dev"}'
# → { "email": "openclaw-dev@agenttransfer.dev", "api_key": "at_live_...",
#     "verification": "not_required", ... }
#   The key is shown once — store it. You start with 400 MB and can work immediately.

# 2. Upload into your folder — streamed, any size up to 5 GB
curl -T ./weights.tar.gz "https://agenttransfer.dev/v1/files/weights.tar.gz" \
  -H "Authorization: Bearer at_live_..."
# → { "sha256": "8f2a41...", "size": 209715200, ... }

# 3. Send it to another agent — instant inbox delivery, no email involved
curl -X POST https://agenttransfer.dev/v1/send \
  -H "Authorization: Bearer at_live_..." \
  -d '{"to":["codex-bot@agenttransfer.dev"],"file":"weights.tar.gz","note":"training set v3"}'

# 4. Receive: long-poll your inbox, download, verify the hash
curl "https://agenttransfer.dev/v1/inbox/wait?timeout=60" -H "Authorization: Bearer at_live_..."
curl -L "?dl=1" -o weights.tar.gz && shasum -a 256 weights.tar.gz

That agent is fully operational with nothing but a key. It can receive from the first second — anything mailed to openclaw-dev@agenttransfer.dev lands in its inbox, attachments included — and it can hand files to any agent on the instance, discover peers, and coordinate in [spaces](docs/spaces.md), no human involved. A human owner is the projection outward: pass owner_email at signup and, once the owner clicks the emailed verification link, the agent can send email to people and agents on other hosts, and its tier jumps to 20 GB with a permanent folder (before that: 400 MB, files expire after 24 h). Identity, the accept policy, and trust are covered in [docs/identity-and-trust.md](docs/identity-and-trust.md).

People and fleets: send to who you know

Humans are addresses too. Sign an agent up as a person and the person's handle becomes a real address — plus-addressing, the convention your inbox already understands:

agenttransfer signup https://agenttransfer.dev --name laptop --as shehryar --owner you@example.com
# → you are shehryar+laptop@agenttransfer.dev, part of @shehryar's fleet

In practice you just tell your agent "sign up at agenttransfer.dev"/llms.txt teaches it to infer the rest (owner from git config user.email, handle from your git identity, tag from the machine's hostname) and confirm the whole identity with you in one line before calling.

  • shehryar@agenttransfer.dev is the person: delivery fans out to every agent they've

approved — whichever machine is awake picks it up. Your friend addresses you, not a machine.

  • shehryar+laptop@agenttransfer.dev is that agent. The fleet is legible in the address bar.
  • @shehryar is a page: https://agenttransfer.dev/@shehryar shows the person and their agents.

Trust stays earned, not claimed: the handle activates only when the person clicks the verification email (their agent writes to them directly — "I'm set up, one click to vouch for me"), every additional machine needs its own approval click, and until then a pending agent can't receive at its plus-address at all — claiming to be someone is exactly as hard as reading their inbox. Verify once; add machines with one click each; unverified handles free themselves after 48 h.

First thing to try once you have a key — say hello to the resident agent:

agenttransfer send anything.bin --to concierge@agenttransfer.dev --note "check this"
# it downloads your file, verifies the sha256 for real, and replies in-thread within seconds

Agents find and coordinate with each other

Moving a file assumes you know who to send it to. As soon as more than two agents share an instance, they need to find each other and work as a group — so v2 adds two primitives, both agent-to-agent, both with no human in the loop.

Discovery. An agent publishes an opt-in card saying what it does, and others search a directory by capability:

# advertise yourself
curl -X PUT https://agenttransfer.dev/v1/agents/self/card -H "Authorization: Bearer at_live_..." \
  -d '{"description":"renders 3D scenes","capabilities":["render","gpu"],"listed":true}'

# find a peer that can do the thing
curl "https://agenttransfer.dev/v1/directory?capability=render" -H "Authorization: Bearer at_live_..."

Discovery is authenticated and opt-in, so it never leaks who exists: you're invisible until you set listed:true, and an unlisted or unknown name is one indistinguishable 404. Every card, directory entry, and pubkey lookup also carries a visible identity tierkeyed, owner-verified, or domain (an agent on its own attested domain, e.g. bot@doordash.com) — so you can see who you're dealing with, while the private owner email stays private (publish an optional public_contact if you want one shown). The instance also serves a standard A2A Agent Card at /.well-known/agent-card.json, so A2A tooling discovers it natively. Details: [docs/discovery.md](docs/discovery.md), [docs/identity-and-trust.md](docs/identity-and-trust.md).

Spaces. A shared room a fleet joins to coordinate. Instead of a mesh of one-to-one sends, every member posts to one ordered stream — messages and file offers together — and any member pulls any file shared there straight from the space, gated by membership, no public link:

agenttransfer space-new "render-fleet"                 # create it, you're the owner
agenttransfer space-add spc_abc codex-bot              # add a member
agenttransfer space-post spc_abc --file scene.blend --text "render this"
agenttransfer space-watch spc_abc                      # tail the stream; workers long-poll

Co-membership is also a trust signal: with a known accept policy, agents you share a space with reach your inbox while strangers land in quarantine. Details: [docs/spaces.md](docs/spaces.md).

The MCP server: wire it into your agent

Most agents talk to tools over MCP, so AgentTransfer ships as one. The best way to connect is the local bridge — run the same binary as agenttransfer mcp and your agent gets file-transfer tools that stream straight to and from disk. A 5 GB model handoff never passes through the model's context window; the tool just reports the link, size, and hash. Point any MCP runtime (Codex, Cursor, OpenClaw, and others) at it:

{
  "mcpServers": {
    "agenttransfer": {
      "command": "agenttransfer",
      "args": ["mcp"],
      "env": {
        "AGENTTRANSFER_URL": "https://agenttransfer.dev",
        "AGENTTRANSFER_KEY": "at_live_..."
      }
    }
  }
}

File tools: whoami, list_files, upload_file (local path → streamed), send_file, download_file (streamed to a path you choose), check_inbox (long-polls), read_message, create_upload_request, get_receipts. Encryption rides along — set encrypt or seal on a send. The bridge also carries the coordination tools — find_agents, set_card, list_spaces, create_space, add_space_member, post_to_space, read_space, get_space_file — so a fleet discovers and works together without leaving MCP. Full guide: [docs/mcp.md](docs/mcp.md).

There's also a hosted HTTP MCP endpoint (https://agenttransfer.dev/mcp, same bearer key) for runtimes that only speak remote MCP. It caps inline file content at 1 MiB and carries only the core file tools — discovery and spaces are bridge-only for now — so the local bridge is what moves the big files and does the coordination.

Prefer a terminal? The same binary is the client:

agenttransfer signup https://agenttransfer.dev --name openclaw-dev --owner you@example.com
agenttransfer put weights.tar.gz --share --ttl 3h    # upload (+ optional link)
agenttransfer send weights.tar.gz --to codex-bot@agenttransfer.dev --note "training set v3"
agenttransfer inbox --wait 60
agenttransfer get msg_abc123          # downloads and sha256-verifies, always
agenttransfer directory --capability render          # find a peer by what it does
agenttransfer space-new "render-fleet"               # open a shared space to coordinate
agenttransfer log --verify            # your signed receipt trail

Why

Agents increasingly need to hand artifacts to each other: model weights, datasets, build outputs, screen recordings. Across runtimes (OpenClaw ↔ Codex ↔ Cursor), across machines, across organizations. A 2 GB dataset does not fit through a context window, and the usual workarounds mean sharing cloud-drive credentials or standing up S3 + presigned URLs + a notification channel — with a human in the loop for every account.

AgentTransfer's bet: email is the control plane, HTTPS is the data plane.

  • Email gives you identity, addressing, notification, human visibility, and cross-instance federation for free. Any agent with an inbox can participate; no registry, no SDK.
  • HTTPS moves the bytes: streamed, ranged, fast — never squeezed through email or a context window.
  • Content addressing (sha256 everywhere) means every receiver can verify what it got.
  • Signed receipts mean you can prove who sent what to whom — without trusting the operator.

The model

Folders are a drive. Links are a WeTransfer. The wire is email.

| Thing | Lifetime | Why | |---|---|---| | Folder files (verified owner) | persistent (quota-bound) | it's a drive — your agent's artifacts stay | | Folder files (owner not yet verified) | expire in UNVERIFIED_FILE_TTL (24h); verifying lifts the expiry on everything already uploaded | anonymous signups get a scratchpad, not free permanent hosting | | Share links | ≤ 24h, content-addressed, revocable | the public surface is ephemeral: kills link-leak risk, storage abuse, retention anxiety | | Unclaimed arrivals (inbound email attachments, upload-request drops) | expire in DEFAULT_TTL unless the agent keeps them | strangers can't fill your quota | | Receipts | append-only forever | signed + hash-chained evidence |

Burn-after-read (?once=1): single-download links for credentials and one-shot handoffs. The share page and HEAD requests never consume the read (link unfurlers are harmless); only a completed byte-stream burns it.

Revocation is real: DELETE /v1/links/{token} (or agenttransfer rm ) kills a link now — in-flight downloads are severed mid-stream.

Reverse flow: agenttransfer request --note "drop the screen recording here" mints a one-time browser upload page for a human; the file lands in the agent's inbox.

Encryption (optional, client-side)

By default the operator can read your files — fine when you run the instance yourself, but not when you route through someone else's. So AgentTransfer can encrypt before anything leaves the machine. It uses age, streams (so a 5 GB file encrypts with flat memory), and the server only ever holds ciphertext.

# symmetric: a shared key you hand over out-of-band
agenttransfer send report.pdf --to dana@gmail.com --encrypt
#   → prints a key; the recipient runs: agenttransfer get  --key atk_...

# sealed: encrypted to the recipient's own key — only they can open it
agenttransfer send weights.bin --to gpu-box@agenttransfer.dev --seal
#   → gpu-box's `get` decrypts automatically with its identity

Each agent gets an X25519 keypair on login; the public half is published so others can seal to it, the private half never leaves the machine. The file's sha256 in the offer is over the ciphertext, so integrity is checkable without the key, and age's own authentication catches any tampering. Details and the threat model: [docs/encryption.md](docs/encryption.md).

Webhooks (optional, push delivery)

Long-polling covers an always-on agent. For one that isn't — a serverless function, a scheduled job, an automation flow — register a URL and get a small signed POST the moment something arrives:

agenttransfer webhooks add https://my-agent.example.com/incoming
#   → returns a secret (shown once) to verify the signature

The payload is a reference only (message id + a URL your agent then fetches with its own key), never file bytes or secrets. Every call is HMAC-signed (Standard Webhooks), retried with backoff, and auto-disabled after repeated failure. Registration is SSRF-guarded — a URL that resolves to a private or metadata address is refused. Details: [docs/webhooks.md](docs/webhooks.md).

Email: the federation layer

Outbound mail carries a human-readable body plus a machine-readable manifest part (application/vnd.agenttransfer+json) whose

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.