Skip to main content
Glama
README.md
# drop-mcp

A tiny remote MCP server with a single tool, `drop`, that saves a file — from
local content or a URL — into a directory it has mounted. It doesn't know or
care what happens to the file afterward; that's the mounted directory owner's
job (e.g. a watch-folder importer).

## Tool

### `drop`

| Parameter | Required | Description |
| --- | --- | --- |
| `filename` | yes | Destination filename, e.g. `example.epub`. No path separators. |
| `content_base64` | one of these two | Base64-encoded file content. |
| `source_url` | one of these two | URL to fetch server-side. |

Returns `{ status: "dropped", filename, bytes }` on success.

## Configuration

See `.env.example`. `DROP_MCP_TOKEN` is required — the server checks
`Authorization: Bearer <token>` on every `/mcp` request. `DROP_DIR` is where
the mounted target directory should be pointed to inside the container.

## Run

### Prebuilt image (recommended for deployment)

Every [GitHub release](https://github.com/Transmitt0r/drop-mcp/releases) publishes a
container image to GHCR via `.github/workflows/release.yml` — no local build needed:

```bash
docker run -p 3000:3000 \
  -e DROP_MCP_TOKEN=... \
  -v /host/path/to/target/dir:/drop \
  ghcr.io/transmitt0r/drop-mcp:latest   # or a pinned version, e.g. :v0.1.0
```

Or in a `docker-compose.yml`:

```yaml
services:
  drop-mcp:
    image: ghcr.io/transmitt0r/drop-mcp:v0.1.0
    restart: unless-stopped
    environment:
      DROP_MCP_TOKEN: "..."
      DROP_DIR: /drop
    volumes:
      - /host/path/to/target/dir:/drop
    ports:
      - "3000:3000"
```

### From source

```bash
pnpm install
pnpm run build
DROP_MCP_TOKEN=... DROP_DIR=/drop pnpm start
```

Or build the image yourself:

```bash
docker build -t drop-mcp .
docker run -p 3000:3000 \
  -e DROP_MCP_TOKEN=... \
  -v /host/path/to/target/dir:/drop \
  drop-mcp
```