Skip to main content
ClaudeWave

Lightweight file host and upload tools for coding agents to add artifacts to pull requests. Cloud and self-host options.

MCP ServersRegistry oficial19 estrellas2 forks● TypeScriptApache-2.0Actualizado today
ClaudeWave Trust Score
95/100
✓ Verified
Passed
  • ✓Open-source license (Apache-2.0)
  • ✓Actively maintained (<30d)
  • ✓Clear description
  • ✓Topics declared
  • ✓Documented (README)
Last scanned: 10/4/2026
Install in Claude Code / Claude Desktop
Method: NPX · @buildinternet/uploads
Claude Code CLI
claude mcp add uploads -- npx -y @buildinternet/uploads
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "uploads": {
      "command": "npx",
      "args": ["-y", "@buildinternet/uploads"]
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
Casos de uso

Resumen de MCP Servers

<div align="center">

<img src="docs/assets/readme-home.png" alt="uploads.sh — the missing upload command for coding agents" width="760">

<h1>uploads</h1>

**The missing upload command for coding agents.**

Capture screenshots, recordings, and other artifacts as you work: test
reports, logs, JSON, PDFs, zips. When the pull request opens, uploads.sh puts
them in one tidy comment that updates automatically on each revision. Hosted
uploads.sh is free to start. Connect your own bucket — Cloudflare R2 or any
S3-compatible provider — so storage in that bucket is unmetered, or self-host
the open-source service.

<p>
  <a href="https://uploads.sh"><b>uploads.sh</b></a> &nbsp;·&nbsp;
  <a href="https://uploads.sh/docs"><b>Docs</b></a> &nbsp;·&nbsp;
  <a href="https://www.npmjs.com/package/@buildinternet/uploads"><b>npm →</b></a> &nbsp;·&nbsp;
  <a href="#quick-start">Quick start</a> &nbsp;·&nbsp;
  <a href="#what-it-looks-like">What it looks like</a> &nbsp;·&nbsp;
  <a href="#whats-in-this-repo">What's in this repo</a> &nbsp;·&nbsp;
  <a href="#local-development">Develop</a>
</p>

<p>
  <a href="https://skills.sh/buildinternet/uploads"><img alt="skills.sh" src="https://skills.sh/b/buildinternet/uploads"></a>
  <a href="https://github.com/buildinternet/uploads/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/buildinternet/uploads/actions/workflows/ci.yml/badge.svg"></a>
  <a href="https://www.npmjs.com/package/@buildinternet/uploads"><img alt="npm (CLI)" src="https://img.shields.io/npm/v/@buildinternet/uploads?color=cb3837&label=%40buildinternet%2Fuploads&logo=npm"></a>
  <a href="https://registry.modelcontextprotocol.io/v0.1/servers?search=sh.uploads/mcp"><img alt="MCP server" src="https://img.shields.io/badge/exposes-MCP_server-000"></a>
  <a href="https://github.com/apps/uploads-sh"><img alt="GitHub App: uploads-sh" src="https://img.shields.io/badge/GitHub%20App-uploads--sh-181717?logo=github&logoColor=white"></a>
  <a href="https://deepwiki.com/buildinternet/uploads"><img alt="Ask DeepWiki" src="https://deepwiki.com/badge.svg"></a>
  <a href="LICENSE"><img alt="License: Apache 2.0" src="https://img.shields.io/badge/license-Apache%202.0-blue"></a>
</p>

<p><sub>
  <b>Under active development.</b> uploads.sh is being built in the open, so
  APIs can still change. Feedback is welcome — open an issue.
</sub></p>

</div>

---

## Artifacts ready when the pull request opens

**uploads** hosts the artifacts coding agents produce at stable public URLs
they can use in pull requests and issues: screenshots and screen recordings,
but also test reports, logs, JSON, CSV, Markdown, PDFs, and zip archives
(the full list is under [Plans & limits](https://uploads.sh/docs/limits)). On
a branch, `uploads put` stages each file as soon as it is ready. When the pull
request opens, uploads.sh promotes the staged files into one managed comment.

GitHub's own attachments work from a browser and, since GitHub CLI 2.99
(September 2026), from `gh … --attach`, but only once a pull request or issue
exists, and the files stay behind GitHub's own hosting, where they cannot be
embedded or fetched anywhere else. uploads.sh gives agents a stable
public URL from the same terminal where they build and test the change, while
the branch is still in progress. The hosted MCP server does the same for agents
that cannot run a command at all, taking files as bytes or a URL. GitHub has no
public API (yet) for that.

Keys are hash-free, so re-uploading the same filename overwrites in place and
the URL never changes — every embed of it updates at once. Workspaces keep
tenants (and their budgets and key policies) apart.

This repo is the source of the canonical deployment at
[uploads.sh](https://uploads.sh): the API worker, auth worker, MCP server, the
Astro web app, and the `@buildinternet/uploads` CLI (published to npm from
[`packages/uploads`](packages/uploads)).

## What it looks like

One comment per PR, rewritten in place on every sync. Files tagged
`--state before` and `--state after` pair into a side-by-side table; other
images and video land below it, and non-media files (reports, logs, archives)
list in a file table with their type and size.

<div align="center">
  <a href="https://github.com/buildinternet/uploads/pull/436#issuecomment-5052307515"><img src="docs/assets/readme-comment.png" alt="The managed attachments comment on a pull request, with a before/after pair rendered side by side under Before and After headings" width="760"></a>
</div>

<sub>The real comment on
[#436](https://github.com/buildinternet/uploads/pull/436#issuecomment-5052307515).</sub>

Pairing is by `--meta path=…` when several pairs share a comment (one `before`
and one `after` per path), and falls back to filenames that differ only by a
`before`/`after` token — `hero-before.webp` with `hero-after.webp`.

Everything you attach also lands in your workspace, grouped by where it came
from — pages by `path`, projects by `repo` or `app` — and browsable from one
place.

<div align="center">
  <img src="docs/assets/readme-screenshots.png" alt="The screenshots view in a workspace, with uploads grouped into collapsible sections by project and path" width="760">
</div>

<sub>The screenshots view groups uploads by project and path.</sub>

Open any file for a share page: copy-ready embeds (Markdown, HTML, and more),
the raw URL, and a delete button.

<div align="center">
  <img src="docs/assets/readme-file-page.png" alt="A file share page showing the media preview, a Copy-as embed menu, file details, and a Delete file action" width="760">
</div>

<sub>Each file's share page — copy-ready embeds, details, and delete.</sub>

## Quick start

Install the CLI and sign in once:

```bash
npm install --global @buildinternet/uploads
uploads login
```

Upload a file and tag the page it shows:

```bash
uploads put ./settings.png --meta path=/settings
```

On a branch, `put` stages the file automatically. Open the pull request however
you normally would. The [GitHub App](https://uploads.sh/docs/github-app)
promotes the staged files into one managed attachments comment.

## More ways to upload

Use the same commands for before-and-after evidence, an open pull request, a
browser capture, or an annotated image:

```bash
# Pair two states from the same page in the pull request comment.
uploads put ./before.png --meta path=/settings --state before
uploads put ./after.png --meta path=/settings --state after

# See what this branch will attach when the pull request opens.
uploads staged

# Attach files directly when a pull request or issue is already open.
uploads attach ./before.png ./after.png

# Capture, annotate, and upload a page in one command.
uploads screenshot http://localhost:4321/settings --via local --annotate ./callouts.json
```

`attach` detects the repository and current PR through `gh`, uploads all files,
and creates or updates that same one comment. Without the GitHub App, run
`uploads attach --promote` after opening the pull request to promote files that
you staged earlier. All commands run under `npx @buildinternet/uploads …`
without a global install.

Sign in with GitHub or a magic link, then create your own workspace or accept
an invite into one — see [enrollment](docs/enrollment.md). Hosted files are
public URLs — private-repo attachments get non-guessable links
([how that works](docs/private-attachments.md)), but anyone holding a URL can
view the file. Do not upload secrets or sensitive UI.

## Connect your agent

The hosted MCP server runs at `https://agents.uploads.sh/mcp` and is listed in the
[MCP Registry](https://registry.modelcontextprotocol.io/v0.1/servers?search=sh.uploads/mcp)
as `sh.uploads/mcp`. Local stdio is `uploads mcp` on the same npm package.

```bash
# Claude Code
claude mcp add --transport http uploads https://agents.uploads.sh/mcp

# Codex
codex mcp add uploads --url https://agents.uploads.sh/mcp

# OpenCode
opencode mcp add uploads --url https://agents.uploads.sh/mcp
```

`uploads install` adds the agent skills and the MCP server, so future sessions
can capture each visual milestone without being asked. The skills also install
standalone into any agent runtime:

```bash
npx skills add buildinternet/uploads
```

That installs three skills: `github-screenshots` (visuals → PRs/issues),
`uploads-cli` (full CLI reference), and `annotate-screenshots` (callouts and
redaction on a capture).

On Claude Code or Codex, the [plugin](https://uploads.sh/docs/agents#plugin)
bundles the skills, the MCP server, and a pre-PR screenshot reminder. In
Claude Code it also shows staged screenshots above the prompt and attaches
them when the PR opens. On claude.ai and in Cowork, add uploads from the
[Claude directory](https://claude.ai/directory/uploads).

Full CLI usage, including annotations, managed comments, public galleries,
and change feeds (repo-wide or one pull request), lives in
[docs/cli.md](docs/cli.md).

`uploads feed create` prints a live page of the screenshots on a repo:

<div align="center">
  <img src="https://embed.uploads.sh/default/f/docs/vhs-cli/feed-create.gif" alt="Terminal recording of uploads feed create --repo buildinternet/uploads, which prints a feed URL" width="760">
</div>

<sub>`uploads feed create --repo buildinternet/uploads`.</sub>

REST routes are in [docs/api.md](docs/api.md).

## What's in this repo

| Path                              | What                                                                                                                                                                                                                             |
| --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `apps/`                           | The deployables: the REST API worker (`api.uploads.sh`), the auth worker, the rem
agent-skillsagent-toolsagentsclicloudflarecloudflare-r2file-hostingimage-uploadmcps3screenshots

Lo que la gente pregunta sobre uploads

¿Qué es buildinternet/uploads?

+

buildinternet/uploads es mcp servers para el ecosistema de Claude AI. Lightweight file host and upload tools for coding agents to add artifacts to pull requests. Cloud and self-host options. Tiene 19 estrellas en GitHub y su última actualización registrada es del 2026-10-03.

¿Cómo se instala uploads?

+

Puedes instalar uploads clonando el repositorio (https://github.com/buildinternet/uploads) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.

¿Es seguro usar buildinternet/uploads?

+

Nuestro agente de seguridad ha analizado buildinternet/uploads y le ha asignado un Trust Score de 95/100 (tier: Verified). Revisa el desglose completo de comprobaciones superadas y flags en esta página.

¿Quién mantiene buildinternet/uploads?

+

buildinternet/uploads es mantenido por buildinternet. La última actividad registrada en GitHub es del 2026-10-03, con 72 issues abiertos.

¿Hay alternativas a uploads?

+

Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.

Despliega uploads en tu cloud

Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.

¿Mantienes este repo? Añade un badge a tu README

Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.

Featured on ClaudeWave: buildinternet/uploads
[![Featured on ClaudeWave](https://claudewave.com/api/badge/buildinternet-uploads)](https://claudewave.com/repo/buildinternet-uploads)
<a href="https://claudewave.com/repo/buildinternet-uploads"><img src="https://claudewave.com/api/badge/buildinternet-uploads" alt="Featured on ClaudeWave: buildinternet/uploads" width="320" height="64" /></a>

Más MCP Servers

Alternativas a uploads