pd: CLI and MCP server for Pixeldrain
go-pixeldrain
The pd command uploads files to Pixeldrain, builds albums and downloads links, and its MCP server does the same for an agent
- 75 ★ on the repository
- Last commit
- MIT
Extended access
Why this level
- An agent sends local files to an external service and gets a public link
- The Pixeldrain API key ties uploads and downloads to an account
Install
- Works in
Manual install
brew tap jkawamoto/pixeldrain && brew install pixeldrainFor macOS and Linux.
Access and checks
How we reviewExtended accessThe tool runs code or makes network calls and only reads external data.
- An agent sends local files to an external service and gets a public link
- The Pixeldrain API key ties uploads and downloads to an account
This is third-party code. Review the repository files before installing.
What it does
pd is a command-line tool, an MCP server and a Go library for the Pixeldrain file host. `pd upload artwork.png` uploads a file and prints a link like pixeldrain.com/u/xxxxxx, and `--album "Name"` joins several files into one album. `pd download` fetches a file or a whole album with the `--all` flag. Data can come from stdin and directories can be streamed: `git diff | pd upload -- -:patch.diff` and `tar zcf - ~/Projects/my-app | pd upload -- -:my-app.tar.gz` need no temporary files. Before upload a file is encrypted on the client side with age keys or SSH public keys. The `pd mcp` command starts an MCP server with the tools `upload_files`, `upload_text`, `download_file` and `list_recipients`. An agent uploads images, archives and text and gets back a link. Without an API key files stay anonymous, and with `PIXELDRAIN_API_KEY` they land in your account.
Who it is for. People who often share logs, diffs and agent-generated images and want a short link straight from a terminal or a chat.
Good fit when
- An agent generated a set of images and they must reach a client as one album by link
- A long build log does not fit in chat: `cat build.log | pd upload -- -:build.log`
- A project folder has to go to a colleague as an archive without temporary files on disk
- Files travel through a service you do not trust and are encrypted with an age key before upload
Not a fit when
- You need a closed team storage: Pixeldrain serves files through a public link
- You need two-way folder sync like cloud drives have
- You do not want to hand files to an external service without encryption
Example request
Upload these three images to Pixeldrain as one album called Neon Dreams and give me the link.MCP
- Transport
- stdio
- Authentication
- key is optional
Environment variables
PIXELDRAIN_API_KEYsecret- Pixeldrain API key that ties uploads to your account
Limitations
Files live on the Pixeldrain service and the link opens for anyone who receives it, so confidential data is encrypted with an age or SSH key before upload. Without `PIXELDRAIN_API_KEY` uploads are anonymous and not tied to an account.
To decrypt downloaded `.age` files, MCP runs as `pd mcp --identity-file /path/to/key`; MCP does not ask for an SSH key passphrase, so an unprotected key is needed. Folders with recipient public keys are set with `--age-recipients-dir` and `--ssh-recipients-dir`. The project is independent and not affiliated with Pixeldrain.
How to disable. Remove the `pixeldrain` server from the client config and uninstall the tool with `brew uninstall pixeldrain`. Uploaded files are deleted on the Pixeldrain side.
FAQ
How do I install pd on macOS?
With Homebrew: `brew tap jkawamoto/pixeldrain`, then `brew install pixeldrain`. Another path is `go install github.com/jkawamoto/go-pixeldrain/cmd/pd@latest`.
How do I connect pd to Claude Desktop or Cursor?
Add a `pixeldrain` server to `claude_desktop_config.json` with the command `pd` and the argument `mcp`; the `PIXELDRAIN_API_KEY` env value is optional.
Is a Pixeldrain account required?
No, uploads work anonymously. An API key from Pixeldrain settings ties files to your account.
How do I encrypt a file before upload?
With age keys or SSH public keys: the tool encrypts the file on the client, and downloaded `.age` files are decrypted through `--identity-file`.
What does `list_recipients` do?
It lists the IDs of public keys from the `--age-recipients-dir` and `--ssh-recipients-dir` folders so you can pick recipients for an encrypted upload.
Discussion
No questions or reviews yet.
Related
MCP serversPaca is a self-hosted task tracker where AI agents work as Scrum team members alongside people
A self-hosted MCP server and web app that keep a project as a task graph shared by people and agents.
A self-hosted issue tracker and wiki on Cloudflare with MCP: 126 tools, issue leases and file claims for several agents
A private email journal with a remote MCP server: Claude searches, analyzes and creates entries after OAuth sign-in
A command-line client for personal OneDrive. Its mcp command gives an agent read-only access to the files on the drive.
Redmine MCP Server: issues and time tracking
Redmine MCP Server
An MCP server for Redmine: issues, projects, wikis, time tracking and files, a read-only mode and per-user OAuth2 sign-in
Comparison with similar tools
Cards that share the main search query, and how they differ.
| Tool | Official | Authentication | Repository stars | Main difference |
|---|---|---|---|---|
| pd: CLI and MCP server for Pixeldrain (this card) | no | key is optional | 75 | |
| Timeweb Cloud S3 MCP and CLI: backup size and archives | no | API key | 0 | works with Timeweb S3 storage; pd sends files to Pixeldrain by link |
| BearDrive | no | 62 | file storage for agents; pd exchanges files through public Pixeldrain links |
README in short
The README goes from a quick start (upload, albums, download) to MCP setup for Claude Desktop and Cursor, stdin work and age encryption. It ends with installation through Homebrew, Go and pre-built binaries and a Go library example.