npm @yafldev/mcpstdioMITupdated 1mo ago
Your AI agent moves files between machines with one MCP call — encrypted client-side, links gone in 24 hours.
yafl 能做什么?
YAFL — Yet Another File Layer (MCP server + CLI)
Your AI agent moves files between machines with one MCP call — encrypted client-side, links gone in 24 hours.
This repository is the open-source MCP server and CLI client for YAFL. Your agents (Claude Desktop, Claude Code, Cursor, any MCP client — including agents on remote VPSes) hand files across environments — laptop ↔ VPS, agent ↔ agent — with a single tool call, instead of a human dragging files into WeTransfer and copying links around. Files are encrypted on your machine before they leave it; the service only ever sees ciphertext.
The client is open source so you can audit exactly what touches your files. The YAFL service lives at yafl.dev.
Install
Add YAFL to your MCP client config:
{
"mcpServers": {
"yafl": {
"command": "npx",
"args": ["-y", "@yafldev/mcp"],
"env": { "YAFL_API_KEY": "<your key — or leave unset and run yafl login>" }
}
}
}
Works in Claude Desktop, Claude Code, Cursor, and any MCP client. Claude Desktop users can install the one-click .mcpb bundle. Prefer the CLI:
curl -fsSL https://yafl.dev/install.sh | sh
No API key is required to start. On the first tool call the server returns a guided error pointing to yafl login — an RFC 8628 device flow: the agent shows a short code, you approve it in a browser, and the agent holds its own revocable key. Built for headless boxes. Runs via npx (Node.js 18+); no global install needed.
Tools
| Tool | Call | What it does |
|---|---|---|
upload_file |
{ path, password?, oneTime? } |
Encrypts client-side, uploads ciphertext, returns the share link. Zips a directory first. Optional password layer; optional one-time link that burns after the first download. |
download_file |
{ url, destDir?, password? } |
Fetches, decrypts, writes the file to local disk. |
get_status |
{ url } |
Checks liveness and remaining TTL — no bytes downloaded. |
list_files |
{ limit? } |
The caller's own transfers, metadata only. |
delete_file |
{ id | url } |
Revoke one of your transfers before expiry. |
email_link |
{ link, recipient } |
Email a share link straight to a recipient — the agent-to-human handoff without leaving the session. |
login |
device flow | Authorize this agent (RFC 8628); it holds its own revocable key. |
Errors are stable and machine-readable — your agent gets expired or not_found, not a mystery 404.
How encryption works
The file is encrypted with a fresh AES-256-GCM key before upload. The key travels only in the share URL's #fragment — browsers never send fragments to servers, so it is never transmitted to, logged by, or stored on any server. An optional link password adds a second derived layer the server never sees either, and a one-time link self-destructs after the first successful download. File bytes go directly to storage via pre-signed URLs; the app server never handles them, and storage only ever receives ciphertext. Access stops at 24 hours. Free tier: 100 MB per file.
What happens if an agent's key leaks
The API key is not the decryption key. If a machine is compromised and its YAFL key is stolen, the attacker can at most see ciphertext metadata for that key's own transfers — file contents stay unreadable, because decryption keys exist only in the links you exchanged. Revoke the key and move on. This is why the recommended setup is one key per agent, per machine — keys are named and individually revocable.
Links
- Website: https://yafl.dev
- MCP guide: https://yafl.dev/mcp
- Security / threat model: https://yafl.dev/security
- npm:
@yafldev/mcp·@yafldev/cli
License
MIT — see LICENSE.
安装
把 yafl 添加到你的客户端。选择你正在使用的那个。
claude mcp add mcp -- npx -y @yafldev/mcpcodex mcp add mcp -- npx -y @yafldev/mcpamp mcp add mcp -- npx -y @yafldev/mcp{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@yafldev/mcp"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@yafldev/mcp"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"mcp","command":"npx","args":["-y","@yafldev/mcp"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@yafldev/mcp"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@yafldev/mcp"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@yafldev/mcp"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"mcp": {
"type": "local",
"command": "npx",
"args": [
"-y",
"@yafldev/mcp"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"mcp": {
"command": {
"path": "npx",
"args": [
"-y",
"@yafldev/mcp"
]
}
}
}
}Add to your Zed `settings.json`.
npx -y @yafldev/mcpRun `goose configure`, choose **Add Extension → Command-line Extension**, and paste this command.
6 个工具
yafl 向已连接的智能体提供 6 个工具。
- upload_file
- `{ path, password?, oneTime? }`
- download_file
- `{ url, destDir?, password? }`
- get_status
- `{ url }`
- list_files
- `{ limit? }`
- delete_file
- `{ id \
- email_link
- `{ link, recipient }`
评分
72 / 100
良好
- 文档22/25
- 维护16/25
- 可信度16/20
- 能力6/15
- 安装体验12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 30 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 6 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
版本历史
| 版本 | 发布于 |
|---|---|
| 0.1.6最新 | 2026年8月1日 |
| 0.1.0 | 2026年7月9日 |