# Paste MCP Phase 1 Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** Wire the Content Outbox and Call Prep pinboards into the linkedin-post, linkedin-carousel, and pilot-prep skills so every approved draft and call brief lands in Paste automatically. **Architecture:** Two Paste pinboards are created first. Each skill gets one new instruction block at its natural completion point — after copy-review passes (linkedin-post), after final output is rendered (linkedin-carousel), and after the briefing is assembled (pilot-prep). Skills look up pinboard IDs by name via `mcp__paste__list_pinboards` at runtime rather than hardcoding IDs, so the wiring survives pinboard recreation. **Tech Stack:** Paste MCP (`mcp__paste__create_pinboard`, `mcp__paste__list_pinboards`, `mcp__paste__create_item`), skill SKILL.md files (plain markdown instruction files, no code). --- ### Task 1: Create Content Outbox Pinboard **Files:** - No file changes — Paste MCP call only - [ ] **Step 1: Create the pinboard** Call `mcp__paste__create_pinboard` with name `Content Outbox`. Expected response: ```json { "id": "content_outbox_XXXXXXXX-...", "name": "Content Outbox", "itemCount": 0 } ``` - [ ] **Step 2: Record the pinboard ID** Note the `id` returned. It will be referenced in verification steps. - [ ] **Step 3: Verify via list** Call `mcp__paste__list_pinboards`. Confirm `Content Outbox` appears in the list alongside `Useful Links`. --- ### Task 2: Create Call Prep Pinboard **Files:** - No file changes — Paste MCP call only - [ ] **Step 1: Create the pinboard** Call `mcp__paste__create_pinboard` with name `Call Prep`. Expected response: ```json { "id": "call_prep_XXXXXXXX-...", "name": "Call Prep", "itemCount": 0 } ``` - [ ] **Step 2: Verify via list** Call `mcp__paste__list_pinboards`. Confirm both `Content Outbox` and `Call Prep` now appear. - [ ] **Step 3: Commit a note** ```bash cd /Users/sttil-solutions/projects/signal git add docs/superpowers/plans/2026-06-09-paste-phase1.md git commit -m "Add Paste Phase 1 implementation plan" ``` --- ### Task 3: Update linkedin-post Skill **Files:** - Modify: `/Users/sttil-solutions/.claude/skills/linkedin-post/SKILL.md` The current Step 6 handles NocoDB update after Kisa confirms the post is live. A new step goes between Step 5 (Iterate) and Step 6 (Confirm and Update NocoDB) — it fires when the draft is approved, not after posting. The Outbox is a staging layer: Kisa pastes from Paste to LinkedIn, then confirms to Claude, who updates NocoDB. - [ ] **Step 1: Add the Paste push step** In `/Users/sttil-solutions/.claude/skills/linkedin-post/SKILL.md`, insert the following block **between** the `## Step 5: Iterate` section and `## Step 6: Confirm and Update NocoDB`: ```markdown --- ## Step 5.5: Push Approved Draft to Paste Content Outbox When Kisa says the draft is good (approval signals: "that works", "perfect", "use that", "looks good", or similar) — before waiting for posting confirmation: 1. Call `mcp__paste__list_pinboards` to get the current pinboard list. 2. Find the pinboard named `Content Outbox` and get its `id`. 3. Call `mcp__paste__create_item` with: - `content`: the full approved post text (exactly as drafted — no extra formatting) - `list_id`: the Content Outbox id from step 2 4. Confirm with one line: "Draft saved to Paste Content Outbox — paste directly to LinkedIn when ready." Do not push unreviewed drafts. Only push after Kisa signals approval. ``` - [ ] **Step 2: Verify the file change** Read the file. Confirm the new Step 5.5 block appears between Step 5 and Step 6. Confirm Step 6 is unchanged. - [ ] **Step 3: Smoke test** Invoke linkedin-post with a test prompt: "draft a short test post about documentation gaps." After it drafts and copy-review passes, say "that works." Confirm the skill calls `mcp__paste__list_pinboards` and then `mcp__paste__create_item`. Call `mcp__paste__search` with `pinboard_id` set to the Content Outbox id — confirm the test draft appears. Delete the test item via `mcp__paste__delete_item`. - [ ] **Step 4: Confirm file saved** Read the first 10 lines of `/Users/sttil-solutions/.claude/skills/linkedin-post/SKILL.md` to confirm the edit persisted. No git commit needed — `.claude/skills` is not a git repo. --- ### Task 4: Update linkedin-carousel Skill **Files:** - Modify: `/Users/sttil-solutions/.claude/skills/linkedin-carousel/SKILL.md` The carousel output is a rendered PDF. The Paste push captures the text copy (hook, per-slide headlines and body) — not the PDF file. This gives Kisa a reviewable text record and reusable caption copy. - [ ] **Step 1: Find the final output step** Read `/Users/sttil-solutions/.claude/skills/linkedin-carousel/SKILL.md` in full. Identify the last step — the one where the rendered PDF path is reported to Kisa. - [ ] **Step 2: Add the Paste push block** Immediately after the final output/delivery step, append: ```markdown --- ## Final Step: Push Slide Copy to Paste Content Outbox After confirming the PDF has rendered: 1. Assemble the carousel text copy in this format: ``` CAROUSEL: [Title] HOOK: [Hook text from slide 1] SLIDE 2: [Headline] [Body copy if any] SLIDE 3: [Headline] [Body copy if any] [... continue for all slides ...] CTA: [Final slide CTA text] ``` 2. Call `mcp__paste__list_pinboards`. Find `Content Outbox` and get its `id`. 3. Call `mcp__paste__create_item` with: - `content`: the assembled text copy above - `list_id`: the Content Outbox id 4. Confirm with one line: "Carousel copy saved to Paste Content Outbox. PDF at [path]." ``` - [ ] **Step 3: Verify the file change** Read the file. Confirm the new block appears after the final delivery step and the format template is intact. - [ ] **Step 4: Confirm file saved** Read the last 20 lines of `/Users/sttil-solutions/.claude/skills/linkedin-carousel/SKILL.md` to confirm the new block is present. --- ### Task 5: Update pilot-prep Skill **Files:** - Modify: `/Users/sttil-solutions/.claude/skills/pilot-prep/SKILL.md` The current Step 5 is "Offer a Practice Question (Optional)." The Paste push is a new Step 6 that fires after the briefing is assembled and the practice question is offered — so the full briefing is in Paste before the call, not just the summary. - [ ] **Step 1: Add the Paste push step** In `/Users/sttil-solutions/.claude/skills/pilot-prep/SKILL.md`, add the following block **after** `## Step 5: Offer a Practice Question (Optional)`: ```markdown --- ## Step 6: Push Briefing to Paste Call Prep After delivering the briefing and the Step 5 practice question offer: 1. Call `mcp__paste__list_pinboards`. Find `Call Prep` and get its `id`. 2. Call `mcp__paste__create_item` with: - `content`: the full briefing text (all sections from Step 3, exactly as delivered) - `list_id`: the Call Prep id 3. Confirm with one line: "Briefing saved to Paste Call Prep — available in your clipboard on any device before the call." This step is not optional. Push every briefing. Kisa clears the pinboard after the call. ``` - [ ] **Step 2: Verify the file change** Read the file. Confirm Step 6 appears after Step 5. Confirm Steps 1-5 are unchanged. - [ ] **Step 3: Smoke test** Invoke pilot-prep with: "prep for my call with Robert Robinson." After the briefing is delivered, confirm the skill calls `mcp__paste__list_pinboards` and `mcp__paste__create_item`. Call `mcp__paste__search` with `pinboard_id` set to the Call Prep id — confirm the briefing appears. Do not delete the test item — this is a real prep if Robert Robinson's call is upcoming. - [ ] **Step 4: Confirm file saved** Read the last 20 lines of `/Users/sttil-solutions/.claude/skills/pilot-prep/SKILL.md` to confirm Step 6 is present. --- ### Task 6: End-to-End Verification - [ ] **Step 1: Verify pinboard state** Call `mcp__paste__list_pinboards`. Confirm: - `Content Outbox` exists - `Call Prep` exists - `Useful Links` still exists (default pinboard unchanged) - [ ] **Step 2: Verify skill descriptions are updated** Check that the `description:` frontmatter in each updated SKILL.md still accurately describes the skill. No change needed unless the description explicitly said "does not save anywhere." - [ ] **Step 3: Update the spec to mark Phase 1 complete** In `/Users/sttil-solutions/projects/signal/docs/superpowers/specs/2026-06-08-paste-mcp-ambient-layer-design.md`, update the Phase 1 status line to: ```markdown ### Phase 1: Content Outbox + Call Prep **Trigger:** ~~Implement now~~ **COMPLETE — 2026-06-09** ``` - [ ] **Step 4: Final commit** ```bash cd /Users/sttil-solutions/projects/signal git add docs/superpowers/specs/2026-06-08-paste-mcp-ambient-layer-design.md git commit -m "Mark Paste MCP Phase 1 complete" ``` --- ## Notes - Skills are instruction files (markdown), not application code. No unit tests apply. Verification is behavioral: invoke the skill, observe Paste. - The `.claude/skills` directory may not be a git repo. Check with `git -C /Users/sttil-solutions/.claude/skills status` before committing. If not a repo, commits are skipped — file changes are sufficient. - Paste auth must be active for smoke tests to work. If tools are unavailable, re-authenticate via `/mcp` in a separate Claude Code window before running verification steps. - Phase 2 (Brand Vault) does not start until Phase 1 has been used across at least 2-3 real posts and calls and confirmed working.