{"name":"io.dropl/mcp","slug":"dropl-mcp","title":"Dropl MCP","description":"Create client-editable photo and video galleries from Cursor or Claude Code, then embed them.","url":"https://mcp.market/server/dropl-mcp","rating":null,"grade":"B","score":82,"certified":false,"status":"active","category":"media","tags":["media"],"presence":{"score":30,"stars":1,"forks":0,"downloads_week":81,"last_push_at":"2026-10-05T09:48:11.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/develanet/dropl-mcp","website":"https://www.dropl.io/mcp","version":"0.6.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@dropl/mcp","version":"0.6.0","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Optional. Dropl API key; overrides the saved browser sign-in.","isSecret":true,"name":"DROPL_API_KEY"}]}],"tools":[{"name":"add_collection_items","description":"… 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 … items, sent in batches; retrying the same call doesn't duplicate items.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_videos_to_showcase","description":"Adds existing library videos to a 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apply_collection_plan","description":"… Use it with exactly the collections you passed to plan_collections, once the user approved that plan. …","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_category","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_showcase","description":"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. … Turn on showCategoryFilters when items will be grouped into categories. Safe to retry with the same arguments.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_site","description":"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. … Counts toward the plan's site allowance; safe to retry, since the same name and domain return the same site.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_collection_code","description":"… Use it when wiring a page to read a collection, instead of guessing the response shape. Only published items reach the website.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_collection_schema","description":"… 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_embed_code","description":"Returns the official embed snippet for a video (videoId) or a showcase (showcaseId, optionally one category by name or slug), plus where and how to paste it (plain HTML, React/Next.js, WordPress, Webflow, Framer). Use it whenever a gallery or video goes onto a page. Always use this instead of writing embed HTML by hand; pass exactly one of videoId or showcaseId.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_feedback","description":"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. … … Screenshot and photo URLs are temporary; fetch them to look.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_showcase","description":"Summarizes a showcase: settings, item counts by status (processing/ready/failed) and kind, 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_usage","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_collection_items","description":"… Use it to check what's already in a collection before importing, or to find items. Up to … items per call; page with offset.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_collections","description":"… 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_feedback","description":"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. … Use get_feedback for the full context of one request.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_showcase_items","description":"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 … items per call; local paths only appear for files uploaded from this machine.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_showcases","description":"Lists a client site's showcases (embeddable photo and video galleries), newest first, with item counts. Use it to reuse an existing gallery instead of creating a duplicate, or to find a showcase id. Paged: pass nextCursor to get more.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_sites","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_videos","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plan_collections","description":"… 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plan_migration","description":"Scans a local folder without uploading and proposes how to bring it into Dropl: top-level folders become categories, 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. Wor","write_action":false,"price_micros":0,"input_schema":null},{"name":"reply_to_feedback","description":"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. … Keep replies short and plain (no code). Safe to retry: the same reply isn't posted twice.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tag_items","description":"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 … items per call; category names that don't exist yet are created. For per-item changes or alt text, use update_items.","write_action":false,"price_micros":0,"input_schema":null},{"name":"undo_collection_change","description":"… Use it when the user wants to revert a field or collection change. …","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_feedback_status","description":"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). … Marking done emails the client; only mark done once the fix is in the code (and deployed, if the user says so).","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_items","description":"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 … items per call; category names that don't exist yet are created. Alt text: … Show the user the alt text you plan to write befor","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_showcase","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"upload_photos","description":"","write_action":true,"price_micros":0,"input_schema":null},{"name":"upload_videos","description":"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). Run with dryRun: true first; … Re-running with the same argum","write_action":true,"price_micros":0,"input_schema":null},{"name":"whoami","description":"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.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":82,"grade":"B","scanned_at":"2026-10-14T12:23:39.186Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-14T12:23:39.094Z","components":{"code":{"score":25,"max":25,"notes":["2 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 9 days ago"]},"identity":{"score":7,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@dropl/mcp","version":"0.6.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-10-04T03:46:08.954Z","repositoryUrl":"git+https://github.com/develanet/dropl-mcp.git","weeklyDownloads":81}],"repo":{"found":true,"owner":"develanet","repo":"dropl-mcp","archived":false,"pushedAt":"2026-10-05T09:48:11Z","stars":1,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/9738420?v=4","ownerCreatedAt":"2014-11-14T06:36:39Z","license":"MIT"},"icon":{"url":"https://www.dropl.io/favicon.ico?favicon.2670dtc9t30ar.ico","source":"site","width":48,"height":48},"presence":{"stars":1,"forks":0,"downloadsWeek":81,"license":"MIT","lastPushAt":"2026-10-05T09:48:11.000Z","score":30}}}},"grade_history":[],"reviews":[]}