---
name: dropspace
description: Use when the user wants to post or schedule content across social platforms (X/Twitter, LinkedIn, Reddit, Facebook, Instagram, TikTok, YouTube, Snapchat), check how posts performed, run the autopilot content engine, generate AI images or short videos for a post, or boost a Facebook post - through Dropspace's MCP server (`dropspace-mcp`) or CLI (`dropspace`).
---

# dropspace

Dropspace turns one brief into per-platform posts and publishes them on the user's own connected accounts. The unit of work is a **launch**: one brief, many platforms. Each platform's published item is a **post**.

## Setup

- MCP over stdio: `npx -y -p @jclvsh/dropspace dropspace-mcp` with `DROPSPACE_API_KEY=ds_live_...` in the environment. Every tool is available.
- Hosted MCP: `https://api.dropspace.dev/mcp` (streamable HTTP, POST, `Authorization: Bearer ds_live_...`). Serves a subset: no credits, boosts, API keys, webhooks, reddit, media library, comment, destination, disconnect, profile, or billing tools.
- CLI: `npx -y @jclvsh/dropspace <command>` (the same key). `dropspace --help` lists commands.
- No key? The user creates one at https://www.dropspace.dev/settings/api. A key's scopes limit what it can do (`read`, `write`, `generate`, `send`, `admin`); a 403 names the missing scope.

## Before posting

1. `list_connections` - which accounts are connected. Posting goes only to connected accounts; a platform with no connection needs the user to connect it in the dropspace app first. Never guess an account.
2. `get_usage` - what the plan still allows this period (launches, AI images and videos, personas). Plan the batch inside it instead of discovering limits at the error.
3. Optional voice: `list_personas`. A persona carries the user's writing style; pass its id as `persona_id`.

## Launch lifecycle

1. `create_launch` with `product_url` and/or `product_description` and `platforms`. Dropspace reads the product page and writes copy per platform.
   - Use `platform_contents` or `custom_content` when the user already wrote the copy.
   - Reddit: `platform_contents.reddit.metadata.subreddits` (up to 10, no `r/`) posts once per subreddit; `metadata.first_comment` (up to 1,500 characters) is posted as a comment under each reddit post once it is live. `suggest_subreddits` finds communities that fit the product.
   - `track_links: true` posts the product URL as a tracked redirect on X, LinkedIn, Facebook, Reddit, and YouTube; clicks then appear in analytics. Tell the user their posts will show a dropspace.dev link.
   - `save_to_library: true` adds the launch's uploaded photos and videos to the user's media library, where autopilot can post them.
   - `scheduled_date` (ISO 8601, at least 15 minutes out) schedules it; without one, the launch waits for `publish_launch`.
2. Review: `get_launch` shows the generated copy per platform. Show it to the user before publishing anything they have not seen. Edit with `update_launch`; regenerate one platform with `retry_launch_content`.
3. Media (optional): `generate_media` with `type: "image"` and `use_product_image: true` makes an image of the real product from its page; `get_media_job` polls it. Videos are 8-second clips (`type: "video"` or `"script_video"`).
4. `publish_launch`, then `get_launch_status` until it settles. Failed platforms: `retry_launch`. A launch posted to several subreddits reports them all as `reddit` there; `get_launch_destinations` names each subreddit, and `retry_launch` with `subreddit` retries just that one.
5. Results: `get_launch_analytics` (or `get_batch_launch_analytics` for many). `metrics.tracked_clicks` is clicks on the tracked link.
6. Comments (stdio server and CLI only): `list_launch_comments` reads comments per post, newest first. `reply_to_comment` (youtube, instagram), `hide_comment` and `delete_comment` (instagram) act on the platform as the user's account and need the `send` scope; show the user the reply or the comment before you send, hide, or delete. A deleted comment cannot be restored.

## Ongoing

- Recommendations: `list_recommendations` after posts have run a day or two; `apply_recommendation` turns one into a draft launch, an autopilot post, or a paused boost. Nothing publishes or spends on apply.
- Autopilot (pro and premium plans): `get_autopilot`, `configure_autopilot`, `run_autopilot_now`. In review mode it drafts posts for approval: `list_autopilot_review`, `approve_autopilot_draft`, `reject_autopilot_draft`.
  - `media_source`: `ai` (generated slides and video), `library` (only the user's own media), or `mixed` (library first). `product_image_url` makes AI slides show the real product.
  - Media library (stdio server and CLI only): `list_media_library`, `add_to_media_library`, `update_media_library_item`, `delete_media_library_item`. Autopilot chooses items by their description, so describe each one. Items without one are captioned on autopilot's next run (images from the image, videos from their `thumbnail_url`), so a video needs a description or a thumbnail.
  - Brand kit: `update_persona` with `brand_kit` (text and outline colors, a corner logo) styles the image slides autopilot posts as that persona.
- Audience: `get_audience` for follower counts on Instagram, TikTok, and YouTube; its instagram insights option adds Instagram follows and unfollows per day, followers over time, growth velocity, and the non-follower reach share.
- Webhooks: `create_webhook` with a Slack incoming webhook URL (`https://hooks.slack.com/services/...`) posts events to that channel as readable messages.

## Spending money - confirm first

These cost the user money. Get an explicit yes for the amount before calling them:

- `activate_boost` starts real ad spend on the user's Meta ad account. `create_boost` makes it paused; activation is the spend. Offer `max_cpc_cents` so the boost pauses itself if clicks get expensive; `objective: "traffic"` needs a Facebook link post. A boost reports `link_clicks` (clicks through to the link, for traffic boosts), and `stop_reason` says why a stop rule paused it (null while it runs).
- `purchase_credit_pack`.

## Errors that need the user

- `BILLING_*`: a plan limit or subscription problem. Report the limit and stop; do not retry.
- `PLATFORM_002` (a connection expired): the user reconnects that account in the dropspace app. Retrying will not help.
- `RATE_001`: wait for the `Retry-After` header, then retry once.
- A response header `X-Dropspace-Notice` announces an API change; mention it to the user when it changes. `get_changelog` has the history.
