New:Microsoft Teams Notifications Are Now Available in Socket.Learn more →
Get Started

multi-upload-tool-mcp

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

multi-upload-tool-mcp

Local MCP bridge: lets an AI publish local images and videos to multi-upload-tool without exposing any storage URL.

latest
npmnpm
Version
0.2.1
Version published
Weekly downloads
134
857.14%
Maintainers
1
Weekly downloads
 
Created
Source

multi-upload local MCP bridge

Lets an AI publish local images and videos to multi-upload-tool — without hosting them publicly and without ever exposing a storage URL.

"Publie ~/videos/clip.mp4 sur ma chaîne YouTube, titre : …"

Why it's needed

A remote MCP tool call is JSON only; it can't carry a file. This little server runs on your machine, reads the files off disk, and sends the bytes itself. The AI only ever sees file paths, and never a storage URL.

Images and video take different roads, because a video does not fit in a request body (our edge rejects anything over 100 MB):

  images ──▶  this bridge  ──HTTPS + your token──▶  /mcp/publish
              (your PC)                            upload+publish fused, no URL exists

  video  ──▶  this bridge  ──1──▶  /mcp/presign             (asks for a signed PUT)
              (your PC)    ──2──▶  storage, direct          (the bytes, once, streamed
                                                             from disk — no RAM copy,
                                                             no size ceiling on the way)
                           ──3──▶  create_post              (publishes by reference)

The signed URL lives and dies inside this process; the AI gets post statuses.

Install

Nothing to install: npx fetches it on first run. You only need Node ≥ 20 (for fs.openAsBlob, which streams a video off disk without loading it in RAM) and a multi-upload-tool account. No API key to copy: see Sign-in.

Configure your AI client

Claude Code

claude mcp add multi-upload -- npx -y multi-upload-tool-mcp

Claude Desktop

Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

{
  "mcpServers": {
    "multi-upload": {
      "command": "npx",
      "args": ["-y", "multi-upload-tool-mcp"]
    }
  }
}

Codex CLI

Edit ~/.codex/config.toml:

[mcp_servers.multi-upload]
command = "npx"
args = ["-y", "multi-upload-tool-mcp"]

Anything else that speaks MCP

Cursor (.cursor/mcp.json), Windsurf, VS Code and the rest use the same JSON shape as Claude Desktop above. This is a plain stdio MCP server — if the client can launch one, it works.

MULTI_UPLOAD_API_URL is optional everywhere; it defaults to https://api.multi-upload-tool.com.

Restart the client. Three tools appear: list_accounts, publish_carousel and publish_video.

Sign-in

The first time a tool needs your account, the bridge opens your browser on the multi-upload-tool consent screen (OAuth 2.1 + PKCE, with a callback on 127.0.0.1 and a random port). Approve with Read and publish — a read-only connection can list accounts but not publish. If no browser can open (SSH, container), the link is in the tool result and on stderr; set MULTI_UPLOAD_NO_BROWSER=1 to never try.

Tokens are stored in ~/.config/multi-upload-tool-mcp/oauth.json ($XDG_CONFIG_HOME if set), readable by you only, one entry per API URL. They refresh on their own; disconnect the bridge under API → Connected apps in the dashboard and it will ask you to sign in again.

MULTI_UPLOAD_API_KEY still works and skips the sign-in, but API keys on MCP are deprecated and refused from 12 January 2027, 09:00 UTC (details).

Usage (what you say to the AI)

"Publie les images ~/carousels/slide1.png … slide6.png sur mon compte TikTok en PUBLIC_TO_EVERYONE avec la légende « … »."

"Mets ~/videos/clip.mp4 sur ma chaîne YouTube, titre « Mon test », et sur TikTok en privé."

The AI calls list_accounts to find the account ids, then publish_carousel or publish_video with the paths, the ids, the caption and whatever each target platform requires. Your files are read locally and published. No public hosting, no link exposed.

A large video takes as long as your uplink needs — the bytes go straight to storage, so the transfer is the only slow part.

Limits & rules (enforced both here and server-side)

publish_carousel

  • Images only: JPEG, PNG, WebP
  • Max 20 MB per file, max 35 files per call

publish_video

  • One file per call: MP4, MOV, WebM, M4V
  • Max 5 GB (one signed PUT is all S3 accepts; bigger needs a multipart client)
  • Counts against your plan's monthly presigned-storage allowance

Both

  • privacyLevel is required when any target is TikTok, title when any target is YouTube, boardId when any target is Pinterest
  • You can only publish to your own connected accounts (those of the workspace you picked when signing in)

Test (from a clone of this package)

npm install
node publish-video.test.mjs   # or: bun publish-video.test.mjs

Runs the bridge against a stub backend and checks the whole video path: what we declare at presign, that every byte reaches storage with the signed headers, and that we publish by reference without leaking the URL back to the AI.

Keywords

mcp

FAQs

Package last updated on 23 Sep 2026

Related posts