# Dropl MCP [Health: Active]

**Category:** 🎥 Multimedia Process  
**Repository:** https://github.com/develanet/dropl-mcp  
**GitHub Stars:** 1  
**npm Downloads (last month):** 1268  
**Views:** 1  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/dropl-mcp

## Description
Create client-editable photo and video galleries from Cursor or Claude Code, then embed them.

## Tools
Capabilities this server exposes over MCP:

- **whoami** — Shows the connected Dropl account, user, role, and API key (name, prefix, scopes, site restriction) plus the web app URL. Use it first in a session to confirm which account you're acting on, or when another tool reports a sign-in or permission error. Needs a saved sign-in or DROPL_API_KEY; it never returns the full key.
- **list_sites** — Lists the client sites (one per client website) this connection can reach, with their domains and the plan's site allowance. Use it before creating anything, to find the site id for the client the user means and avoid duplicate sites. Keys restricted to some sites only see those sites.
- **create_site** — Creates a client site: the home for one client website's showcases, videos, collections, and feedback. Use it when the client has no site yet; check list_sites first to avoid duplicates. Only call after showing the plan to the user and getting explicit confirmation. Counts toward the plan's site allowance; safe to retry, since the same name and domain return the same site.
- **list_showcases** — Lists a client site's showcases (embeddable photo and video galleries), newest first, with their type (gallery or projects) and item and project counts. Use it to reuse an existing gallery or portfolio instead of creating a duplicate, or to find a showcase id. Paged: pass nextCursor to get more.
- **create_showcase** — Creates a showcase: an embeddable photo/video gallery the client can update from their phone. Use it when the user wants a gallery, portfolio, project photos, or a section the client can update themselves. Requires a site id from list_sites or create_site. Only call after showing the plan to the user and getting explicit confirmation. Use type: "projects" for a portfolio where each project gets its own page, photos, and details (then create_project for each); the type can't change once the showcase has items. Turn on showCategoryFilters when items or projects will be grouped into categories. Safe to retry with the same arguments.
- **get_showcase** — Summarizes a showcase: type, settings, item counts by status (processing/ready/failed) and kind, project counts and details (projects showcases), categories with counts, photos without alt text, and failed items. Use it to check that an upload finished processing or to review a gallery before changing it. It returns counts, not items: use list_showcase_items for ids, alt text, and categories, or list_projects for projects.
- **list_showcase_items** — Pages through a showcase's items in display order: id, kind, status, file name, the local path it was uploaded from, alt text, and categories. Use it to find item ids for update_items or tag_items, or photos that still need alt text (missingAlt: true). Up to 200 items per call; local paths only appear for files uploaded from this machine.
- **update_items** — Sets alt text and adds/removes categories on many showcase items in one call. Use it after an upload to fix alt text or categories by id (files[].id from upload_photos / upload_videos, library video ids, or ids from list_showcase_items) instead of uploading again. Up to 1000 items per call; category names that don't exist yet are created. Alt text: Write concise, descriptive alt text: what the photo shows (e.g. "Cedar deck with glass railing at dusk"), without "image of" or "photo of". Leave it empty for purely decorative photos. Show the user the alt text you plan to write before saving a large batch.
- **update_showcase** — Changes a showcase's title, layout, grid fit, category filter tabs, or items per page. Use it when the user wants the gallery to look or page differently; embeds pick up the change without new code. Pass only the settings to change; at least one is required.
- **create_category** — Adds a category (a filter tab) to a showcase. Use it to group items, e.g. one category per project type or source folder, before tagging them; upload and tagging tools also create missing categories by name. If one with the same name or slug exists, it's returned instead of creating a duplicate.
- **tag_items** — Adds and/or removes the same categories on many showcase items (photos or videos) at once. Use it to put uploaded items into filter tabs, with itemIds from upload_photos / upload_videos (files[].id; library video ids work too) or list_showcase_items. Up to 1000 items per call; category names that don't exist yet are created. For per-item changes or alt text, use update_items.
- **upload_photos** — Uploads local photos (JPEG, PNG, WebP, AVIF, HEIC; up to 20 MB each) into a showcase, straight to storage. Use it to turn a folder of project photos into a client-editable gallery: pass files, folders (recursive by default), and globs via paths, and per-photo alt text and categories via files. Skips hidden files and validates file contents. Run with dryRun: true first and show the result to the user; Only call after showing the plan to the user and getting explicit confirmation. Resumable: re-running with the same arguments skips files already uploaded (and still applies changed alt text and categories). categoryFromFolder tags each photo with its top-level folder's name; categories tags every photo (both created if missing). In a projects showcase, pass project: the photos join the end of that project (categories belong to the project there, not to photos); the same file can go into several projects. Returns files: each local path with its showcase item id and status, for update_items and tag_items. Alt text: Write concise, descriptive alt text: what the photo shows (e.g. "Cedar deck with glass railing at dusk"), without "image of" or "photo of". Leave it empty for purely decorative photos.
- **list_videos** — Lists videos in a client site's library (newest first), optionally filtered by a title search. Use it to find video ids for get_embed_code or add_videos_to_showcase, or to check a video is already hosted before uploading it again. Paged: pass nextCursor for more.
- **upload_videos** — Uploads local videos (MP4, MOV, WebM, MKV, AVI, MPEG, M4V) to a client site's video library in resumable parts, titled from their file names, for streaming playback without YouTube or Vimeo. Use it to host a hero video or a folder of clips; with showcaseId it also adds them to that showcase (and applies categories / categoryFromFolder), and for a projects showcase to the project you pass. Run with dryRun: true first; Only call after showing the plan to the user and getting explicit confirmation. Re-running with the same arguments resumes interrupted uploads and skips finished ones. Returns files: each local path with its library video id.
- **add_videos_to_showcase** — Adds existing library videos to a showcase, or to one project of a projects showcase. Use it for videos already hosted in Dropl (ids from list_videos or upload_videos) instead of uploading them again. Videos must belong to the showcase's client site; ones already in it are skipped.
- **get_embed_code** — Returns the official embed snippet for a video (videoId) or a showcase (showcaseId, optionally one category by name or slug, or one project's page), plus where and how to paste it (plain HTML, React/Next.js, WordPress, Webflow, Framer). Use it whenever a gallery, portfolio, or video goes onto a page. Always use this instead of writing embed HTML by hand; pass exactly one of videoId or showcaseId. Projects showcases: the main snippet is the projects index; projectUrl links its cards to the website's own project pages, and project returns the snippet for one of those pages.
- **get_usage** — Shows storage and bandwidth used against the plan's limits this period, and whether uploads or playback are suspended. Use it before a large upload, or when the user asks how much space is left. Figures cover the whole account, not one client site.
- **plan_migration** — Scans a local folder without uploading and proposes how to bring it into Dropl: top-level folders become categories (or, for a portfolio, projects), photo/video counts and sizes per folder, unsupported files by reason, upload batches, whether it needs several showcases, remaining storage, and the tool calls to run. Use it first for any folder-to-gallery move or site migration, then show the plan to the user for confirmation. Projects layout (one folder per project, each becoming a project page with a title and slug from its folder name): pass layout: "projects" (each subfolder of path, or of its projects/ folder, is a project); it's also picked on its own when path holds a projects/ folder of project folders, unless you pass layout: "gallery". Works offline; remaining storage is only included when signed in.
- **list_projects** — Lists a projects showcase's projects in order: slug, title, subtitle, a description excerpt, detail values by key, categories, and item counts. With project, it returns that project's full description, labeled details, and its photos and videos in order (ids, local paths, alt text). Use it to find a project's slug for upload_photos and update_project, or item ids for update_items, reorder_project_items, and covers. Paged: pass nextOffset as offset (20 projects or 50 items per page by default).
- **create_project** — Creates a project at the end of a projects showcase: title, subtitle (e.g. type and location), description, detail values by key, and categories. Use it for each job in a portfolio, then upload its photos with upload_photos and project. Only call after showing the plan to the user and getting explicit confirmation. A project with the same title (or slug) is returned instead of a duplicate, and retries are safe; category names that don't exist yet are created.
- **update_project** — Changes a project's title, subtitle, description, slug, detail values, categories, or cover photo. Use it to fill in or correct a project, e.g. with details from the old site. Pass only what changes: details merge (null clears one), categories replace the project's categories, and a new title keeps the slug unless you pass one (changing a slug breaks links to the old project page).
- **reorder_projects** — Sets the order of a projects showcase's projects on the website. Use it when the user wants projects in a specific order, e.g. newest or featured first. Pass projects in the new order; ones you leave out keep their current order after them.
- **reorder_project_items** — Sets the order of the photos and videos inside one project. Use it to choose which photos lead a project page (the cover is set with update_project). Pass item ids in the new order (from list_projects with project; library video ids work too); ones you leave out keep their current order after them.
- **get_project_details** — Reads the details a projects showcase defines for every project (facts like location, year, or square footage): each detail's key, label, type, unit, options, and whether it shows on cards, plus the version plan_project_details needs. Use it right before changing details or filling in values, since teammates edit them in the dashboard. Projects store values by key, and keys and option values never change.
- **plan_project_details** — Dry run: previews changing a projects showcase's details to the full list you pass and returns a plain-text summary, with changes that remove project values marked destructive. Use it whenever the user wants to add, rename, reorder, or remove project details; nothing is saved. Always read the current details with get_project_details right before changing them: teammates edit them in the dashboard, so an earlier copy may be stale. Never revert or overwrite their edits. Send the full list in order: existing details with their key and option values exactly as read (only labels, units, and option labels can be renamed; keys and types never change), new details and options without a key or value. Leaving one out removes it. Show the summary to the user before apply_project_details.
- **apply_project_details** — Saves a change to a projects showcase's details: exactly the fields and expectedVersion you passed to plan_project_details. Use it once the user approved that plan. Only call after showing the plan to the user and getting explicit confirmation. It's refused (SCHEMA_CHANGED) when someone changed the details since you read them, and (CONFIRMATION_REQUIRED) when it removes project values without confirmDestructive.
- **list_collections** — Lists a client site's collections (menus, inventory, events, …) with item counts, when a website last read each one, and the plan's item and collection limits. Use it to find a collection id (a menu, inventory, team, or events) before reading or changing one, and to reuse an existing collection instead of creating a duplicate. Trashed collections only appear with trashed: true.
- **get_collection_schema** — Reads a collection's current fields, schemaVersion, and site time zone, including edits made in the dashboard. Always call this before planning a change and pass its schemaVersion as expectedSchemaVersion. Use it right before any change to a collection or its items, since clients and teammates edit in the dashboard. It returns the schemaVersion that plan_collections needs to change an existing collection.
- **plan_collections** — Dry run: previews creating or changing up to 10 collections on a client site and returns a plain-text diff (fields added, renamed, removed, items affected). Nothing is saved. Use it whenever the user wants content their client can edit (a menu, inventory, events, team) or a field change; nothing is saved. Show the summary to the user before apply_collection_plan.
- **apply_collection_plan** — Creates or changes the collections previewed with plan_collections. Destructive changes are refused unless confirmDestructive is true, and a collection edited since its expectedSchemaVersion is refused as a conflict. Use it with exactly the collections you passed to plan_collections, once the user approved that plan. Only call after showing the plan to the user and getting explicit confirmation.
- **add_collection_items** — Bulk-adds items to a collection with per-item errors keyed by field key. Use it to move a hard-coded list (a menu array in a component, rows from a CSV) into a collection. Run with dryRun: true (the default) first; saving (dryRun: false) needs explicit confirmation. Accepts up to 2000 items, sent in batches; retrying the same call doesn't duplicate items.
- **list_collection_items** — Lists a collection's items, drafts included, with search, status and field filters, sorting, and paging. Use it to check what's already in a collection before importing, or to find items. Up to 100 items per call; page with offset.
- **get_collection_code** — Returns TypeScript types and a Next.js fetch example generated from the collection's current fields, plus its public items URL. Use this instead of guessing the response shape. Use it when wiring a page to read a collection, instead of guessing the response shape. Only published items reach the website.
- **undo_collection_change** — Undoes the most recent schema change of a collection (or the given activity entry) when no data written since would be lost. Use it when the user wants to revert a field or collection change. Only call after showing the plan to the user and getting explicit confirmation.
- **list_feedback** — Lists feedback the client left on their website (comments on elements, text changes, general notes), newest first. Use it when the user asks to fix, review, or triage client feedback or change requests. Defaults to open and in progress. Text changes (type text_change) give the current and the exact new wording; they can usually be applied directly in the code (search the project for currentText). Use get_feedback for the full context of one request.
- **get_feedback** — Gets one feedback request with its full context: page URL, the clicked element (CSS selector, tag, nearby text, position), device and viewport, screenshot and photo URLs, and the thread. Use it before changing code for a request. Text changes (type text_change) give the current and the exact new wording; they can usually be applied directly in the code (search the project for currentText). If a request is ambiguous, reply_to_feedback asking the client to clarify instead of guessing. Screenshot and photo URLs are temporary; fetch them to look.
- **reply_to_feedback** — Replies in a feedback request's thread as the signed-in user; the client gets the reply by email. Use it to ask the client to clarify, or to tell them what changed. If a request is ambiguous, reply_to_feedback asking the client to clarify instead of guessing. Keep replies short and plain (no code). Safe to retry: the same reply isn't posted twice.
- **update_feedback_status** — Sets a feedback request to open, in_progress, done, or wont_do. Use it after fixing a request (done) or deciding not to (wont_do). After fixing a request, mark it done with update_feedback_status and a short note saying what changed (the client gets it by email). Marking done emails the client; only mark done once the fix is in the code (and deployed, if the user says so).

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "dropl-mcp": {
    "command": "npx",
    "args": ["-y","@dropl/mcp"],
    "env": {
      "DROPL_API_KEY": ""
    }
  }
}
```

**Requires environment variables:** `DROPL_API_KEY` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What the Dropl MCP MCP server does

Dropl MCP MCP server gives coding agents access to Dropl, a service for client-editable photo and video galleries, video hosting, and client feedback. It can create client sites and showcases, upload media from local files or folders, organize items into categories or projects, and produce embed snippets for several website platforms.

The server also exposes Dropl collections for use cases such as menus, inventory, and events. Agents can inspect collection schemas, plan field changes, and apply approved updates. For gallery projects, they can create and edit project metadata, manage covers and custom details, and control the order of projects and media.

## How it works

The MCP client runs the package through `npx`, using a standard stdio configuration. Before making changes, the agent is instructed to prepare a plan and request confirmation for operations such as creating resources, uploading files, or changing collection fields.

Local media can be analyzed first with a migration plan. That scan reports folder-level photo and video counts, file sizes, unsupported files, proposed categories, and—when using a projects layout—project names, slugs, and counts. Uploads support dry runs, resumable transfers, and repeatable execution. Video files can be uploaded to the site library and optionally associated with showcases or projects.

After content is in Dropl, agents can inspect item status, categories, alt text, failures, project information, storage usage, and bandwidth usage. The embed tool returns instructions and snippets for HTML, React/Next.js, WordPress, Webflow, and Framer.

## Setup and configuration

Dropl MCP MCP server requires Node.js 20.3 or later. Install it through an MCP client with the command `npx -y @dropl/mcp@latest`; no separate package installation is required. Cursor uses a project or user-level `.cursor/mcp.json` entry, while Claude Code can register the server with `claude mcp add dropl -- npx -y @dropl/mcp@latest`. Other MCP clients can use the same stdio command and arguments.

Authentication can use browser sign-in with `npx -y @dropl/mcp login`, which opens an approval flow and saves a key locally, or an API key stored in the `DROPL_API_KEY` environment variable. An explicitly configured API key takes precedence over the saved sign-in. The `whoami` and `logout` commands report the connected account or remove the local key. API keys can be restricted to client sites and scopes.

## Tools and capabilities

- Inspect accounts, sites, showcases, videos, projects, collections, schemas, and usage.
- Create and update sites, showcases, categories, projects, and collection plans.
- Upload photos and videos, including folder-based uploads, project assignments, categories, dry runs, and resumable transfers.
- Update alt text, add or remove categories, and reorder project content.
- Plan and apply project-detail or collection changes with version checks and destructive-change confirmation.
- Generate embed code and platform-specific placement guidance.

The Dropl MCP MCP server is suited to agencies moving media from local folders or another video workflow into client sites, and to teams that want clients to maintain media or structured content after launch.

## Limitations and notes

Only Dropl account owners and administrators can approve browser sign-ins or create API keys. Credentials should not be committed to project configuration files; the README recommends using a user-level configuration or excluding keyed files from version control. Browser sign-in and API-key access are separate authentication choices, and revoking a key must be done in Dropl settings because `logout` only removes the local copy.

The server requires an active Dropl account and access permitted by the selected key. Uploads and collection changes are subject to the account's storage, bandwidth, plan limits, scopes, and site restrictions. Collection plans based on an outdated schema are refused, and destructive changes require explicit confirmation.

_Full upstream README: https://allmcps.com/mcp/dropl-mcp/readme_

