@jclvsh/dropspace 2.27.0 → 2.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -124,6 +124,18 @@ https://api.dropspace.dev/mcp
124
124
  - `create_launch` sends a content-derived `Idempotency-Key`, so a retry after a timeout returns the launch already created instead of creating a second one (the result says so).
125
125
  - Each MCP request counts once against the key's rate limit, and each tool call counts once more when it reaches the REST API.
126
126
 
127
+ ## Agent Skill
128
+
129
+ The package ships `skills/dropspace/SKILL.md`, which teaches an agent the dropspace workflow: check connections and usage, create a launch, review the copy, publish, read analytics, and ask before anything that spends money. Every tool it names is checked against this package's tool table in the test suite.
130
+
131
+ Install it for Claude Code:
132
+
133
+ ```bash
134
+ mkdir -p ~/.claude/skills/dropspace && curl -fsSL https://unpkg.com/@jclvsh/dropspace/skills/dropspace/SKILL.md -o ~/.claude/skills/dropspace/SKILL.md
135
+ ```
136
+
137
+ Other agents that read skill files can use the same file from `node_modules/@jclvsh/dropspace/skills/dropspace/SKILL.md`.
138
+
127
139
  ## Available Tools
128
140
 
129
141
  ### Launches
@@ -81,6 +81,16 @@ export function registerPersonaTools(server, client) {
81
81
  instagram_samples: z.array(z.unknown()).max(50).optional().describe("instagram writing samples (max 50)"),
82
82
  tiktok_samples: z.array(z.unknown()).max(50).optional().describe("tiktok writing samples (max 50)"),
83
83
  linkedin_samples: z.array(z.unknown()).max(50).optional().describe("linkedin writing samples (max 50)"),
84
+ brand_kit: z
85
+ .object({
86
+ text_color: z.string().optional().describe("slide text color, #RRGGBB"),
87
+ outline_color: z.string().optional().describe("slide text outline color, #RRGGBB"),
88
+ logo_url: z.string().url().optional().describe("public http(s) logo image, drawn in a corner"),
89
+ logo_position: z.enum(["top-left", "top-right", "bottom-left", "bottom-right"]).optional(),
90
+ })
91
+ .nullable()
92
+ .optional()
93
+ .describe("how autopilot image slides look when autopilot posts as this persona; null clears it"),
84
94
  }, async ({ id, ...body }) => {
85
95
  try {
86
96
  const result = await client.patch(`/personas/${id}`, body);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jclvsh/dropspace",
3
- "version": "2.27.0",
3
+ "version": "2.29.0",
4
4
  "description": "MCP server and CLI for the Dropspace API",
5
5
  "repository": {
6
6
  "type": "git",
@@ -35,6 +35,7 @@
35
35
  },
36
36
  "files": [
37
37
  "dist",
38
+ "skills",
38
39
  "README.md"
39
40
  ],
40
41
  "scripts": {
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: dropspace
3
+ 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`).
4
+ ---
5
+
6
+ # dropspace
7
+
8
+ 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**.
9
+
10
+ ## Setup
11
+
12
+ - MCP over stdio: `npx -y -p @jclvsh/dropspace dropspace-mcp` with `DROPSPACE_API_KEY=ds_live_...` in the environment. Every tool is available.
13
+ - Hosted MCP: `https://api.dropspace.dev/mcp` (streamable HTTP, POST, `Authorization: Bearer ds_live_...`). Serves a subset: no credits, boosts, API keys, webhooks, or reddit engagement tools.
14
+ - CLI: `npx -y @jclvsh/dropspace <command>` (the same key). `dropspace --help` lists commands.
15
+ - 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.
16
+
17
+ ## Before posting
18
+
19
+ 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.
20
+ 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.
21
+ 3. Optional voice: `list_personas`. A persona carries the user's writing style; pass its id as `persona_id`.
22
+
23
+ ## Launch lifecycle
24
+
25
+ 1. `create_launch` with `product_url` and/or `product_description` and `platforms`. Dropspace reads the product page and writes copy per platform.
26
+ - Use `platform_contents` or `custom_content` when the user already wrote the copy.
27
+ - `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.
28
+ - `scheduled_date` (ISO 8601, at least 15 minutes out) schedules it; without one, the launch waits for `publish_launch`.
29
+ 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`.
30
+ 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"`).
31
+ 4. `publish_launch`, then `get_launch_status` until it settles. Failed platforms: `retry_launch`.
32
+ 5. Results: `get_launch_analytics` (or `get_batch_launch_analytics` for many). `metrics.tracked_clicks` is clicks on the tracked link.
33
+
34
+ ## Ongoing
35
+
36
+ - 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.
37
+ - 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`.
38
+ - Audience: `get_audience` for follower counts on Instagram, TikTok, and YouTube.
39
+
40
+ ## Spending money - confirm first
41
+
42
+ These cost the user money. Get an explicit yes for the amount before calling them:
43
+
44
+ - `activate_boost` starts real ad spend on the user's Meta ad account. `create_boost` makes it paused; activation is the spend.
45
+ - `purchase_credit_pack`.
46
+
47
+ ## Errors that need the user
48
+
49
+ - `BILLING_*`: a plan limit or subscription problem. Report the limit and stop; do not retry.
50
+ - `PLATFORM_002` (a connection expired): the user reconnects that account in the dropspace app. Retrying will not help.
51
+ - `RATE_001`: wait for the `Retry-After` header, then retry once.
52
+ - A response header `X-Dropspace-Notice` announces an API change; mention it to the user when it changes. `get_changelog` has the history.