Self-hosted file host: upload a file, get a public URL an agent can paste into a pull request.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Upload a file, get a hard-to-guess URL.
A drop box your coding agents can use: one Go binary, no database, your disk.
That is the whole idea. Downloads need no token; uploads and deletes do.
Coding agents write the code, run the tests and open the pull request. Asking them for a screenshot is the cheapest way to review the branches you are never going to check out and run yourself. They can take one: they start the app, drive a browser and capture the page. Then they cannot attach it.
GitHub has no supported API for attaching an image to a pull request. The web interface takes a drag and drop, and that is the whole of it (cli/cli#4228, #1895, #12960 "critical for agentic workflows", community#28219). What is left is committing binaries into the repository, an undocumented upload endpoint that can stop working on any deploy, or a bucket with a policy, a key and a bill attached to it.
An agent that can run curl can do this instead:
The identifier carries 128 random bits and the URL needs no token to open, so
GitHub renders it inline for everyone on the thread. The file itself is on your
own disk, which is where a picture of your unreleased work belongs, and it can
delete itself: -H "X-Expires-In: 30d".
Nothing about this is specific to screenshots. It is the same three lines for a video of a flaky test, a profile, a build log too long for a comment, or a generated report. What an agent needs to do it by itself, including a skill it can install, is in For AI agents.
The script picks the right binary for your machine, verifies its SHA-256
checksum against the published SHA256SUMS, installs it, and hands over to a
setup wizard that writes your configuration, creates your first token and
checks that the internet can actually reach you.
No root anywhere. The binary goes to ~/.local/bin, the configuration to
~/.godrop, and the uploads into a docker volume, so updating and removing
GoDrop later are the work of the same account. Run it as root, or set
GODROP_BIN_DIR=/usr/local/bin, to install it for everybody instead. The one
thing that does need root, once, is being in the docker group; setup checks
that before it writes anything.
Other ways:
Every package, archive and checksum is on the releases page, and the container image is at ghcr.io/fatihbaltaci/godrop.
| Server | CLI | Notes | |
|---|---|---|---|
| Linux (amd64, arm64) | β | β | Where it is meant to run: .deb, .rpm, .apk, container image, systemd unit |
| macOS (Intel, Apple silicon) | β | β | Fine for development and small installs; no systemd, so use Docker or start it yourself |
| Windows (amd64, arm64) | β οΈ | β | The binary works and is tested in CI, but there is no service wrapper, no installer script and no firewall guidance. Take the zip from Releases |
| FreeBSD | π§ | π§ | Compiles and passes tests; no binaries published |
The suite runs on Linux, macOS and Windows for every change, and each release artefact carries signed build provenance:
Four questions, and the last one is a choice between the recommended limits and setting them yourself. Everything the answers depend on is checked before a single file is written, so a setup that cannot work says so at the start rather than at the end, and the service is started and verified here rather than left as a command to paste. The picture is there so that the first command you paste uploads a real file.
Answering "GoDrop gets one from Let's Encrypt" is all HTTPS takes: it obtains the certificate itself and renews it, so there is no proxy to install and nothing to configure. The question only offers it for a name Let's Encrypt can actually issue for, and the listen port question disappears, because serving TLS means 443.
Changing your mind later is the same command with the setting on it. The token, the uploads and every answer you do not mention stay where they are, and the service restarts into the change:
Every question shows its default and can be answered with a flag instead, so CI
and agents run the same code path without a terminal. Prompts are skipped
automatically when there is no TTY; --no-input makes that explicit:
The wizard only offers what the host can do: systemd appears on Linux, not on macOS or Windows, and the commands it prints use the right shell.
Nine endpoints, no SDK, no client library: an agent that can call curl has
everything, and GET /llms.txt describes this exact instance in plain text.
| Method | Path | Auth | Purpose |
|---|---|---|---|
POST | /upload | β | multipart, one or more file fields |
PUT | /upload/{name} | β | raw request body |
GET/HEAD | /f/{id}/{name} Β· /f/{id}.{ext} | download; supports Range and ETag | |
DELETE | /f/{id}/{name} Β· /f/{id}.{ext} | β | delete |
GET | /healthz | liveness | |
GET | /readyz | readiness: is storage writable | |
GET | /stats | β | file count, bytes, quota, uptime |
GET | /llms.txt Β· /openapi.yaml | machine-readable description | |
GET | /skill.md | the agent skill, installable by URL |
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/godrop)<a href="https://allmcps.com/mcp/godrop"><img src="https://allmcps.com/api/badge/godrop?style=directory" alt="GoDrop on AllMCPs" /></a>