Power your agents with
persistent storage.

The API to upload, download, and version files from any agent or terminal. Connect via MCP in seconds. Or just curl it.

4.5MB
max file size
uploads/day
250MB
free storage
upload.sh
$echo "hello world" | curl -X POST https://uldl.sh/u -d @-
https://uldl.sh/alex/hello
$curl -X POST https://uldl.sh/u -F file=@notes.md
https://uldl.sh/alex/notes
download.sh
$curl https://uldl.sh/alex/notes
# My Notes
This is a markdown file uploaded via curl.
Access it from anywhere.

Works with Claude, Cursor, and any MCP client

claude_desktop_config.json
{
  "mcpServers": {
    "uldl": {
      "url": "https://uldl.sh/api/mcp"
    }
  }
}

Built for the agent loop. And the command line.

Five MCP tools. Three curl commands. Zero setup.

Terminal Native

Upload and download with curl. Pipe stdout, share files, retrieve configs—all from your terminal.

MCP Server

Connect Claude, Cursor, or any MCP client. Your agent gets full read/write access to your blobs.

Instant Upload

Pipe any output directly to uldl. Logs, configs, code snippets—share in seconds.

Easy Download

Retrieve files with a single curl command or MCP tool call. No auth needed for public blobs.

Private by Default

Control visibility per blob. Keep sensitive data private, share what you want.

Version History

Every update creates a new version. Roll back, compare, or pin a specific revision.

Lightning Fast

Edge-deployed globally. Fast access from local terminals and cloud instances alike.

Clean URLs

Your uploads live at memorable URLs like uldl.sh/username/slug. Human-readable, agent-parseable.

Simple by design

Five tools for agents. Three commands for humans. That's it.

01

Upload Text

stdin
$echo "data" | curl -X POST uldl.sh/username -d @-

Pipe any text directly to uldl. Perfect for sharing logs, configs, or quick notes.

02

Upload File

file
$curl -X POST uldl.sh/username -F file=@doc.md

Upload files up to 4.5MB. Binary or text—we handle it all.

03

Download

download
$curl uldl.sh/user/slug

Retrieve any public blob with a simple GET request. No auth required.

Or let your agent handle it

mcp-tools
# Store a skill file
>upload(content: "# Research Skill\n...", filename: "research.md")
{"slug": "research", "url": "https://uldl.sh/alex/research"}
# Retrieve it later
>download(slug: "research")
{"content": "# Research Skill\n...", "filename": "research.md"}
# Search your blobs
>list(search: "skill", tags: ["config"])
{"blobs": [...], "pagination": {"total": 12}}

Advanced Examples

examples.sh
# Share command output
$ls -la | curl -X POST uldl.sh/username -d @-
# Set title and description
$curl -X POST uldl.sh/username -H "X-Title: My Log" -F file=@app.log
# Private upload
$curl -X POST uldl.sh/username -H "X-Visibility: private" -F file=@secrets.env
# Delete a blob
$curl -X DELETE "uldl.sh/username/slug?key=$ULDL_KEY"
# Agent uploads via MCP, you download on EC2
$curl https://uldl.sh/alex/deploy-config

Simple pricing

Start free. Upgrade when you need more.

Free

$0

For developers and agents getting started

  • 250MB storage
  • 4.5MB max file size
  • 365 day retention
  • Public & private blobs
  • MCP server access
  • Rate limited
Get Started
Coming Soon

Pro

$5/month

For power users and production agents

  • 10GB storage
  • 4.5MB max file size
  • Unlimited retention
  • Public & private blobs
  • MCP server access
  • Priority MCP rate limits
  • Bring your own encryption key
  • Custom slugs
  • Email support