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
MCP server

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
All reasons and checks

jkawamoto/go-pixeldrain

Install

Manual install

brew tap jkawamoto/pixeldrain && brew install pixeldrain

For macOS and Linux.

Access and checks

How we review

Extended 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_KEY secret
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.

A self-hosted MCP server and web app that keep a project as a task graph shared by people and agents.

MCP serverBroad access200Repository stars

A self-hosted issue tracker and wiki on Cloudflare with MCP: 126 tools, issue leases and file claims for several agents

MCP serverBroad access66Repository stars

A command-line client for personal OneDrive. Its mcp command gives an agent read-only access to the files on the drive.

MCP serverExtended access179Repository stars

An MCP server for Redmine: issues, projects, wikis, time tracking and files, a read-only mode and per-user OAuth2 sign-in

MCP serverBroad access92Repository stars

Comparison with similar tools

Cards that share the main search query, and how they differ.

ToolOfficialAuthenticationRepository starsMain difference
pd: CLI and MCP server for Pixeldrain (this card)nokey is optional75
Timeweb Cloud S3 MCP and CLI: backup size and archivesnoAPI key0works with Timeweb S3 storage; pd sends files to Pixeldrain by link
BearDriveno62file 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.

README badge

Report a problem