{
  "schemaVersion": "1.0",
  "item": {
    "slug": "reepl",
    "name": "LinkedIn Content Creation Skill by Reepl",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/abhibavishi/reepl",
    "canonicalUrl": "https://clawhub.ai/abhibavishi/reepl",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/reepl",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=reepl",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/reepl"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/reepl",
    "agentPageUrl": "https://openagent3.xyz/skills/reepl/agent",
    "manifestUrl": "https://openagent3.xyz/skills/reepl/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/reepl/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "LinkedIn Content Creation via Reepl",
        "body": "Full LinkedIn content management through Reepl's MCP integration. Write posts in your authentic voice, schedule content, manage drafts, generate AI images, create carousels, post to Twitter/X, browse your saved content library, and maintain contacts -- all from your AI assistant."
      },
      {
        "title": "Prerequisites",
        "body": "Reepl account -- sign up at reepl.io\nMCP connection -- connect your account via OAuth (see Setup below)\nGemini API key (optional) -- required only for AI image generation, link at Settings > AI Models"
      },
      {
        "title": "Setup",
        "body": "# 1. Visit the OAuth page to connect your Reepl account\nhttps://mcp.reepl.io/oauth/authorize\n\n# 2. Log in with your Reepl credentials (Google or email)\n\n# 3. Copy the API key shown after authorization\n\n# 4. Configure the MCP server endpoint\nhttps://mcp.reepl.io/mcp?key=YOUR_API_KEY\n\nIf you receive authentication errors at any point, re-authenticate at the URL above."
      },
      {
        "title": "Available Tools (31 total)",
        "body": "ToolPurposecreate_draftSave a new LinkedIn post draftget_draftsList and search your draftsupdate_draftEdit an existing draftdelete_draftRemove a draftpublish_to_linkedinPublish a post to LinkedIn immediatelyschedule_postQueue a post for future publishingupdate_scheduled_postChange time, content, or settings of a scheduled postdelete_scheduled_postCancel and delete a scheduled postpublish_nowImmediately publish a scheduled postschedule_draftSchedule an existing draft for publishingget_published_postsView your published LinkedIn postsget_scheduled_postsView your scheduled post queueadd_comment_to_postAdd a comment to a published postget_user_profileGet your Reepl account infoget_voice_profileRead your voice profile (writing style patterns)update_voice_profileUpdate voice profile with learned patternsget_contactsBrowse saved LinkedIn contactsget_listsBrowse your contact listsget_list_contactsGet contacts in a specific listadd_contact_to_listAdd a contact to a listget_collectionsBrowse your saved post collectionsget_saved_postsRead posts from a specific collectionget_templatesBrowse your post templates and ideasgenerate_imageGenerate an AI image for a post (requires Gemini API key)generate_carousel_contentGenerate AI slide content for a carousellist_carousel_draftsList your saved carousel draftsget_carousel_draftFetch a specific carousel draftcreate_carousel_draftSave a new carousel draftupdate_carousel_draftEdit an existing carousel draftdelete_carousel_draftDelete a carousel drafttwitter_create_postCreate or schedule a Twitter/X post or thread"
      },
      {
        "title": "Content Rules",
        "body": "All LinkedIn content MUST be plain text. Never use markdown formatting like bold, italic, or # headings. LinkedIn does not render markdown -- it will appear literally in the feed, looking AI-generated. Use line breaks, spacing, and natural punctuation for structure instead.\n\nLinkedIn posts have a 3,000 character limit."
      },
      {
        "title": "1. Create Draft",
        "body": "Save a post idea for later editing or publishing.\n\n{\n  \"content\": \"Just wrapped up a deep dive into how AI is reshaping B2B sales.\\n\\nHere are 3 things I learned...\",\n  \"title\": \"AI in B2B Sales\",\n  \"mediaUrls\": [\"https://example.com/image.jpg\"]\n}\n\nParameterRequiredDescriptioncontentYesPost text (plain text only)titleNoDraft title for organizationmediaUrlsNoArray of image URLs to attach"
      },
      {
        "title": "2. Get Drafts",
        "body": "List and search your saved drafts.\n\n{\n  \"search\": \"AI sales\",\n  \"limit\": 10\n}\n\nParameterRequiredDescriptionlimitNoNumber of drafts to return (default: 20)searchNoFilter drafts by keyword"
      },
      {
        "title": "3. Update Draft",
        "body": "Edit an existing draft's content, title, or images.\n\n{\n  \"draft_id\": \"abc-123\",\n  \"content\": \"Updated post content here...\",\n  \"title\": \"New Title\"\n}\n\nParameterRequiredDescriptiondraft_idYesID of the draft to updatecontentNoUpdated post texttitleNoUpdated titlemediaUrlsNoUpdated image URLs (replaces existing)"
      },
      {
        "title": "4. Delete Draft",
        "body": "{\n  \"draft_id\": \"abc-123\"\n}\n\nParameterRequiredDescriptiondraft_idYesID of the draft to delete"
      },
      {
        "title": "5. Publish to LinkedIn",
        "body": "Publish a post to LinkedIn immediately. This action is irreversible -- always confirm with the user before calling.\n\n{\n  \"content\": \"Excited to share that we just hit 10,000 users on Reepl!\\n\\nBuilding in public has been one of the best decisions we made.\\n\\nHere's what I'd tell founders who are hesitant to share their journey...\",\n  \"visibility\": \"PUBLIC\"\n}\n\nParameterRequiredDescriptioncontentYesPost text (plain text only, max 3000 chars)mediaUrlsNoArray of image URLs to includevisibilityNoPUBLIC (default) or CONNECTIONS"
      },
      {
        "title": "6. Schedule Post",
        "body": "Queue a post for future publishing. Times are rounded to 15-minute intervals.\n\n{\n  \"content\": \"Monday motivation: the best time to start was yesterday. The second best time is now.\",\n  \"scheduledFor\": \"2026-02-17T08:00:00Z\",\n  \"visibility\": \"PUBLIC\"\n}\n\nParameterRequiredDescriptioncontentYesPost text (plain text only, max 3000 chars)scheduledForYesISO 8601 timestamp (e.g. 2026-02-17T08:00:00Z)mediaUrlsNoArray of image URLsvisibilityNoPUBLIC (default) or CONNECTIONS\n\nScheduling tips:\n\nAsk the user for their preferred time rather than picking one yourself.\nIf they want suggestions, recommend varied slots: early morning (7-8 AM), lunch (12-1 PM), or end of day (5-6 PM) in their timezone.\nAvoid scheduling all posts at the same time -- spread them for better engagement."
      },
      {
        "title": "7. Update Scheduled Post",
        "body": "Change the time, content, visibility, or images on a post that's already scheduled.\n\n{\n  \"post_id\": \"post-456\",\n  \"scheduledFor\": \"2026-02-18T12:30:00Z\",\n  \"content\": \"Updated content for the scheduled post...\"\n}\n\nParameterRequiredDescriptionpost_idYesID of the scheduled postscheduledForNoNew ISO 8601 timestampcontentNoUpdated post textvisibilityNoUpdated visibilitymediaUrlsNoUpdated image URLs (replaces existing)"
      },
      {
        "title": "8. Delete Scheduled Post",
        "body": "Cancel and remove a scheduled post. Only works on posts with status scheduled, failed, or pending_approval. Published posts cannot be deleted this way.\n\n{\n  \"post_id\": \"post-456\"\n}\n\nParameterRequiredDescriptionpost_idYesID of the scheduled post to delete"
      },
      {
        "title": "9. Publish Now",
        "body": "Immediately queue a scheduled post for publishing by rescheduling it to now. The post will be picked up by the scheduler within a few minutes. Only works on scheduled posts.\n\n{\n  \"post_id\": \"post-456\"\n}\n\nParameterRequiredDescriptionpost_idYesID of the scheduled post to publish immediately"
      },
      {
        "title": "10. Schedule Draft",
        "body": "Schedule an existing draft for LinkedIn publishing. Fetches the draft content and creates a new scheduled post. The original draft remains as a draft.\n\n{\n  \"draft_id\": \"abc-123\",\n  \"scheduledFor\": \"2026-02-17T08:00:00Z\"\n}\n\nParameterRequiredDescriptiondraft_idYesID of the draft to schedule (use get_drafts to find IDs)scheduledForYesISO 8601 timestamp for when to publish"
      },
      {
        "title": "11. Get Published Posts",
        "body": "View the user's published LinkedIn posts. Supports keyword search and pagination.\n\n{\n  \"limit\": 10,\n  \"search\": \"AI\"\n}\n\nParameterRequiredDescriptionlimitNoNumber of posts to return (default: 20)searchNoFilter posts by keyword (case-insensitive content search)nextTokenNoCursor for pagination -- use the nextToken from a previous response"
      },
      {
        "title": "12. Get Scheduled Posts",
        "body": "View posts currently queued for future publishing. Supports status filtering, keyword search, and pagination.\n\n{\n  \"limit\": 10,\n  \"status\": \"scheduled\"\n}\n\nParameterRequiredDescriptionlimitNoNumber of posts to return (default: 20)statusNoFilter by status: scheduled (default), failed, pending_approval, changes_requestedsearchNoFilter posts by keyword (case-insensitive content search)nextTokenNoCursor for pagination -- use the nextToken from a previous response"
      },
      {
        "title": "13. Add Comment to Post",
        "body": "Add a comment to a published LinkedIn post. Some post types (reshares, restricted posts) may reject comments -- this is a LinkedIn limitation.\n\n{\n  \"post_id\": \"post-456\",\n  \"comment_text\": \"Great insights! This resonates with what I've seen in enterprise sales.\"\n}\n\nParameterRequiredDescriptionpost_idYesThe postId of the published post (from get_published_posts)comment_textYesComment text (plain text only, max 1250 characters)"
      },
      {
        "title": "14. Get User Profile",
        "body": "Returns the user's name, email, and LinkedIn URL. No parameters required."
      },
      {
        "title": "15. Get Voice Profile",
        "body": "Read the user's voice profile -- writing style patterns learned from their published posts. No parameters required.\n\nReturns:\n\nuserInstructions -- guidelines the user has set (topics to avoid/emphasize, brand keywords, custom rules, writing samples)\ngeneratedProfile -- LLM-learned patterns (tone dimensions, vocabulary preferences, hook styles, structure patterns, anti-patterns)\nallowAutoUpdate -- whether the generated profile can be updated automatically\nisActive -- whether the voice profile is active\n\nAlways read the voice profile before generating content. This is the key to writing posts that sound like the user, not like an AI."
      },
      {
        "title": "16. Update Voice Profile",
        "body": "Update the voice profile with newly learned patterns after analyzing the user's posts.\n\n{\n  \"generatedProfile\": {\n    \"schema_version\": \"1.0\",\n    \"tone\": { \"primary\": \"conversational-authoritative\" },\n    \"vocabulary\": { \"signature_phrases\": [\"here's the thing\", \"let me break this down\"] },\n    \"structure\": { \"hook_patterns\": [{ \"type\": \"bold-statement\" }, { \"type\": \"question\" }] },\n    \"anti_patterns\": { \"never_do\": [\"use corporate jargon\", \"start with 'I'm excited to announce'\"] }\n  }\n}\n\nParameterRequiredDescriptionallowAutoUpdateNoOnly change if user explicitly requestsisActiveNoToggle voice profile on/offuserInstructionsNoUser-controlled guidelines -- only modify if user explicitly asksgeneratedProfileNoLLM-learned patterns from analyzing posts\n\nImportant: Before updating generatedProfile, always check that allowAutoUpdate is true. If the user has locked their profile, do not update it."
      },
      {
        "title": "17. Get Contacts",
        "body": "Browse saved LinkedIn contacts and profiles. Supports pagination.\n\n{\n  \"search\": \"product manager\",\n  \"limit\": 20\n}\n\nParameterRequiredDescriptionlimitNoNumber of contacts (default: 20)searchNoFilter by name, headline, or keywordnextTokenNoCursor for pagination -- use the nextToken from a previous response"
      },
      {
        "title": "18. Get Lists",
        "body": "Browse the user's contact lists (curated groups of contacts).\n\n{\n  \"search\": \"leads\",\n  \"limit\": 10\n}\n\nParameterRequiredDescriptionsearchNoFilter lists by namelimitNoNumber of lists (default: 20)"
      },
      {
        "title": "19. Get List Contacts",
        "body": "Get all contacts in a specific contact list. Use get_lists to find list IDs.\n\n{\n  \"list_id\": \"list-123\",\n  \"limit\": 20\n}\n\nParameterRequiredDescriptionlist_idYesThe ID of the list to fetch contacts fromlimitNoNumber of contacts (default: 20)nextTokenNoCursor for pagination -- use the nextToken from a previous response"
      },
      {
        "title": "20. Add Contact to List",
        "body": "Add an existing contact to a contact list. Use get_contacts to find profile IDs and get_lists to find list IDs.\n\n{\n  \"profile_id\": \"profile-abc\",\n  \"list_id\": \"list-123\"\n}\n\nParameterRequiredDescriptionprofile_idYesThe profileID of the contact to addlist_idYesThe ID of the list to add the contact to"
      },
      {
        "title": "21. Get Collections",
        "body": "Browse saved post collections (groups of bookmarked LinkedIn posts).\n\n{\n  \"search\": \"inspiration\",\n  \"limit\": 10\n}\n\nParameterRequiredDescriptionsearchNoFilter collections by namelimitNoNumber of collections (default: 20)"
      },
      {
        "title": "22. Get Saved Posts",
        "body": "Read posts from a specific collection. Use get_collections first to find the collection ID.\n\n{\n  \"collectionID\": \"col-789\",\n  \"search\": \"storytelling\",\n  \"limit\": 10\n}\n\nParameterRequiredDescriptioncollectionIDYesThe collection to fetch fromlimitNoNumber of posts (default: 20)searchNoFilter posts by keyword"
      },
      {
        "title": "23. Get Templates",
        "body": "Browse post templates and content ideas saved in the user's library.\n\n{\n  \"search\": \"product launch\",\n  \"limit\": 10\n}\n\nParameterRequiredDescriptionlimitNoNumber of templates (default: 20)searchNoFilter by keywordcatalogIDNoFilter by specific catalog"
      },
      {
        "title": "24. Generate Image",
        "body": "Generate an AI image for a LinkedIn post using Google Gemini. Requires the user to have linked their Gemini API key in Reepl settings.\n\n{\n  \"style\": \"infographic\",\n  \"postContent\": \"3 ways AI is changing B2B sales in 2026...\"\n}\n\nParameterRequiredDescriptionstyleYesImage style (see table below)postContentNoPost content for contextcustomPromptIf style is customYour own image prompt\n\nAvailable styles:\n\nStyleOutputinfographicProfessional data visuals and chartsminimal-illustrationClean line art illustrationsbold-textTypography and quote cardsscreenshot-social-proofMockup screenshotscomic-storyboardComic-style panelsrealistic-portraitPhotorealistic scenesdiagram-flowchartDiagrams and process flowscustomYour own prompt (requires customPrompt)\n\nAlways show the generated image to the user for approval before publishing. Pass the returned URL as mediaUrls when calling publish_to_linkedin or schedule_post."
      },
      {
        "title": "25. Generate Carousel Content",
        "body": "Generate AI slide content for a LinkedIn carousel. Supports plain text topics, YouTube URLs, and article URLs. Returns slide headlines and body text to pass into create_carousel_draft.\n\nNote: the API adds a hook slide and CTA slide automatically, so the actual slide count will be number_of_slides + 2.\n\n{\n  \"topic\": \"remote work productivity tips\",\n  \"number_of_slides\": 5\n}\n\n{\n  \"url\": \"https://youtube.com/watch?v=...\",\n  \"number_of_slides\": 6\n}\n\nParameterRequiredDescriptiontopicNoTopic or subject for the carousel (use for plain text topics)urlNoYouTube or article URL to extract content fromnumber_of_slidesNoNumber of content slides to generate (1-10, default: 5)"
      },
      {
        "title": "26. List Carousel Drafts",
        "body": "List the user's carousel drafts saved in Reepl.\n\n{\n  \"search\": \"productivity\",\n  \"limit\": 10\n}\n\nParameterRequiredDescriptionsearchNoFilter drafts by titlelimitNoNumber of drafts to return (default: 20)"
      },
      {
        "title": "27. Get Carousel Draft",
        "body": "Fetch a single carousel draft by ID, including all slide content, theme, and styling.\n\n{\n  \"draft_id\": \"carousel-abc\"\n}\n\nParameterRequiredDescriptiondraft_idYesThe draft ID (use list_carousel_drafts to find IDs)"
      },
      {
        "title": "28. Create Carousel Draft",
        "body": "Save a new carousel draft in Reepl. Pass slides from generate_carousel_content or write your own. If no theme or colors are specified, your saved brand kit styling is applied automatically.\n\n{\n  \"title\": \"5 Remote Work Tips\",\n  \"slides\": [\n    { \"headline\": \"Stop working from the couch\", \"body\": \"Your brain associates spaces with activities. Create a dedicated workspace.\" },\n    { \"headline\": \"Time-block your deep work\", \"body\": \"90-minute focus blocks beat 8 hours of fragmented attention every time.\" }\n  ],\n  \"theme\": \"3\"\n}\n\nParameterRequiredDescriptiontitleYesTitle for this carousel draftslidesYesArray of slides, each with a headline (required) and optional bodythemeNoTheme preset ID ('1' through '22'). Leave unset to use brand kit defaulttitle_font_sizeNoFont size for slide titles: lg, md (default), or smbody_font_sizeNoFont size for slide body text: lg, md (default), or sm"
      },
      {
        "title": "29. Update Carousel Draft",
        "body": "Update an existing carousel draft. Only provide the fields you want to change -- unspecified fields are left as-is. Note: providing slides replaces ALL slides in the carousel.\n\n{\n  \"draft_id\": \"carousel-abc\",\n  \"title\": \"Updated Title\",\n  \"slides\": [\n    { \"headline\": \"New headline\", \"body\": \"New body text\" }\n  ]\n}\n\nParameterRequiredDescriptiondraft_idYesThe ID of the draft to updatetitleNoNew titleslidesNoReplacement slides (replaces ALL existing slides)themeNoNew theme preset ID ('1' through '22')title_font_sizeNolg, md, or smbody_font_sizeNolg, md, or sm"
      },
      {
        "title": "30. Delete Carousel Draft",
        "body": "Permanently delete a carousel draft. This cannot be undone.\n\n{\n  \"draft_id\": \"carousel-abc\"\n}\n\nParameterRequiredDescriptiondraft_idYesThe ID of the carousel draft to delete"
      },
      {
        "title": "31. Twitter/X: Create Post",
        "body": "Create or schedule a Twitter/X post or thread. Requires a Twitter account connected in Reepl Settings > Integrations and an active Premium subscription.\n\nFor a single tweet, pass an array with one item. For a thread, pass multiple items in order.\n\n{\n  \"threadTweets\": [\n    { \"index\": 0, \"text\": \"I spent 6 months studying how top creators grow on LinkedIn. Here's what actually works (thread):\" },\n    { \"index\": 1, \"text\": \"1/ Consistency beats virality. Posting 3x/week for 6 months outperforms a single viral post every time.\" },\n    { \"index\": 2, \"text\": \"2/ Comments matter more than posts. Thoughtful replies on big accounts drive more followers than original posts.\" }\n  ],\n  \"scheduledFor\": \"2026-03-15T14:00:00Z\"\n}\n\nParameterRequiredDescriptionthreadTweetsYesArray of tweet objects with index (0-based position) and text (max 280 chars each)scheduledForNoISO 8601 timestamp. If omitted, post is saved as a draft (status: pending)linkedPostIdNoThe postId of a LinkedIn post this thread was cross-posted from"
      },
      {
        "title": "Pattern 1: Write a Post in the User's Voice",
        "body": "1. get_voice_profile          -- read their writing style\n2. Ask user for topic          -- what do they want to write about?\n3. Write draft (plain text!)   -- match their tone, hooks, vocabulary\n4. Show draft, get feedback    -- iterate until they're happy\n5. create_draft OR publish     -- save or go live"
      },
      {
        "title": "Pattern 2: Schedule a Week of Content",
        "body": "1. get_voice_profile           -- read writing style\n2. get_templates               -- browse content ideas\n3. get_saved_posts             -- browse inspiration from collections\n4. Write 3-5 posts             -- vary topics, hooks, formats\n5. schedule_post (x5)          -- spread across Mon-Fri at varied times"
      },
      {
        "title": "Pattern 3: Repurpose Saved Content",
        "body": "1. get_collections             -- find the right collection\n2. get_saved_posts             -- browse posts in it\n3. Pick a post, rewrite it     -- new angle, user's voice\n4. create_draft or publish     -- save or go live"
      },
      {
        "title": "Pattern 4: Post with AI-Generated Image",
        "body": "1. Write the post content first\n2. generate_image              -- use post content as context\n3. Show the image to user      -- get approval\n4. publish_to_linkedin         -- pass image URL in mediaUrls"
      },
      {
        "title": "Pattern 5: Analyze and Update Voice Profile",
        "body": "1. get_published_posts         -- fetch recent posts (limit: 20)\n2. Analyze patterns            -- tone, hooks, vocabulary, structure\n3. get_voice_profile           -- check if allowAutoUpdate is true\n4. update_voice_profile        -- save learned patterns to generatedProfile"
      },
      {
        "title": "Pattern 6: Create a LinkedIn Carousel",
        "body": "1. Read carousel_guidelines prompt  -- understand content and styling rules\n2. generate_carousel_content        -- provide topic or URL\n3. Review slides with user          -- adjust if needed\n4. create_carousel_draft            -- save with brand kit styling\n5. Share the deep link              -- user fine-tunes in Reepl editor\n6. update_carousel_draft            -- apply any requested edits"
      },
      {
        "title": "Pattern 7: Cross-Post to Twitter/X",
        "body": "1. Write or retrieve the LinkedIn post content\n2. Adapt for Twitter format           -- split into 280-char chunks for threads\n3. twitter_create_post                -- schedule or save as draft\n4. Pass linkedPostId if cross-posting -- links the Twitter thread to the LinkedIn post"
      },
      {
        "title": "Pattern 8: Schedule a Draft",
        "body": "1. get_drafts                  -- find the draft to publish\n2. Ask user for preferred time -- or suggest morning/lunch/evening slots\n3. schedule_draft              -- pass draft_id and scheduledFor"
      },
      {
        "title": "Error Handling",
        "body": "ErrorCauseSolutionSession expired or invalidOAuth token expiredRe-authenticate at https://mcp.reepl.io/oauth/authorizeContent exceeds 3000 character limitPost too longShorten the contentdraft_id is requiredMissing draft IDCall get_drafts first to find the IDcollectionID is requiredMissing collection IDCall get_collections first to find the IDGEMINI_NOT_LINKEDNo Gemini API keyUser must link key at https://app.reepl.io/settings/ai-models-apiRate limit exceededToo many requestsWait a moment and retryResource not foundInvalid IDThe draft/post/collection may have been deletedCouldn't comment on this postReshare or restricted postLinkedIn limitation, not a bug -- try a different post"
      },
      {
        "title": "Best Practices",
        "body": "Always read the voice profile first. Before writing any content, call get_voice_profile to understand the user's writing style. Posts should sound like them, not like an AI.\nPlain text only. Never use markdown in post content. No **bold**, no *italic*, no # headings. LinkedIn renders these literally.\nConfirm before publishing. Always show the final content and get explicit confirmation before calling publish_to_linkedin, schedule_post, or publish_now. These affect the user's real LinkedIn profile.\nVary scheduling times. Don't default to 9 AM for every post. Ask the user, or suggest varied slots across mornings, lunch, and end of day.\nNever fabricate data. Don't invent engagement metrics, analytics, or post performance numbers. Only report what the API returns.\nRespect voice profile locks. If allowAutoUpdate is false, do not modify generatedProfile. The user has intentionally locked their voice profile.\nUse the library. Before writing from scratch, check templates and saved posts for inspiration. The user has curated these for a reason.\nRead carousel guidelines before creating carousels. Call the carousel_guidelines prompt to understand content rules and the slide structure before generating or saving carousel content."
      },
      {
        "title": "See Also",
        "body": "Reepl -- AI-powered LinkedIn content management platform\nReepl Help Center -- Documentation and guides\nMCP Setup Guide -- Connect your Reepl account to Claude\nReepl Chrome Extension -- AI writing assistant for LinkedIn"
      }
    ],
    "body": "LinkedIn Content Creation via Reepl\n\nFull LinkedIn content management through Reepl's MCP integration. Write posts in your authentic voice, schedule content, manage drafts, generate AI images, create carousels, post to Twitter/X, browse your saved content library, and maintain contacts -- all from your AI assistant.\n\nPrerequisites\nReepl account -- sign up at reepl.io\nMCP connection -- connect your account via OAuth (see Setup below)\nGemini API key (optional) -- required only for AI image generation, link at Settings > AI Models\nSetup\n# 1. Visit the OAuth page to connect your Reepl account\nhttps://mcp.reepl.io/oauth/authorize\n\n# 2. Log in with your Reepl credentials (Google or email)\n\n# 3. Copy the API key shown after authorization\n\n# 4. Configure the MCP server endpoint\nhttps://mcp.reepl.io/mcp?key=YOUR_API_KEY\n\n\nIf you receive authentication errors at any point, re-authenticate at the URL above.\n\nAvailable Tools (31 total)\nTool\tPurpose\ncreate_draft\tSave a new LinkedIn post draft\nget_drafts\tList and search your drafts\nupdate_draft\tEdit an existing draft\ndelete_draft\tRemove a draft\npublish_to_linkedin\tPublish a post to LinkedIn immediately\nschedule_post\tQueue a post for future publishing\nupdate_scheduled_post\tChange time, content, or settings of a scheduled post\ndelete_scheduled_post\tCancel and delete a scheduled post\npublish_now\tImmediately publish a scheduled post\nschedule_draft\tSchedule an existing draft for publishing\nget_published_posts\tView your published LinkedIn posts\nget_scheduled_posts\tView your scheduled post queue\nadd_comment_to_post\tAdd a comment to a published post\nget_user_profile\tGet your Reepl account info\nget_voice_profile\tRead your voice profile (writing style patterns)\nupdate_voice_profile\tUpdate voice profile with learned patterns\nget_contacts\tBrowse saved LinkedIn contacts\nget_lists\tBrowse your contact lists\nget_list_contacts\tGet contacts in a specific list\nadd_contact_to_list\tAdd a contact to a list\nget_collections\tBrowse your saved post collections\nget_saved_posts\tRead posts from a specific collection\nget_templates\tBrowse your post templates and ideas\ngenerate_image\tGenerate an AI image for a post (requires Gemini API key)\ngenerate_carousel_content\tGenerate AI slide content for a carousel\nlist_carousel_drafts\tList your saved carousel drafts\nget_carousel_draft\tFetch a specific carousel draft\ncreate_carousel_draft\tSave a new carousel draft\nupdate_carousel_draft\tEdit an existing carousel draft\ndelete_carousel_draft\tDelete a carousel draft\ntwitter_create_post\tCreate or schedule a Twitter/X post or thread\nContent Rules\n\nAll LinkedIn content MUST be plain text. Never use markdown formatting like bold, italic, or # headings. LinkedIn does not render markdown -- it will appear literally in the feed, looking AI-generated. Use line breaks, spacing, and natural punctuation for structure instead.\n\nLinkedIn posts have a 3,000 character limit.\n\nTool Reference\n1. Create Draft\n\nSave a post idea for later editing or publishing.\n\n{\n  \"content\": \"Just wrapped up a deep dive into how AI is reshaping B2B sales.\\n\\nHere are 3 things I learned...\",\n  \"title\": \"AI in B2B Sales\",\n  \"mediaUrls\": [\"https://example.com/image.jpg\"]\n}\n\nParameter\tRequired\tDescription\ncontent\tYes\tPost text (plain text only)\ntitle\tNo\tDraft title for organization\nmediaUrls\tNo\tArray of image URLs to attach\n2. Get Drafts\n\nList and search your saved drafts.\n\n{\n  \"search\": \"AI sales\",\n  \"limit\": 10\n}\n\nParameter\tRequired\tDescription\nlimit\tNo\tNumber of drafts to return (default: 20)\nsearch\tNo\tFilter drafts by keyword\n3. Update Draft\n\nEdit an existing draft's content, title, or images.\n\n{\n  \"draft_id\": \"abc-123\",\n  \"content\": \"Updated post content here...\",\n  \"title\": \"New Title\"\n}\n\nParameter\tRequired\tDescription\ndraft_id\tYes\tID of the draft to update\ncontent\tNo\tUpdated post text\ntitle\tNo\tUpdated title\nmediaUrls\tNo\tUpdated image URLs (replaces existing)\n4. Delete Draft\n{\n  \"draft_id\": \"abc-123\"\n}\n\nParameter\tRequired\tDescription\ndraft_id\tYes\tID of the draft to delete\n5. Publish to LinkedIn\n\nPublish a post to LinkedIn immediately. This action is irreversible -- always confirm with the user before calling.\n\n{\n  \"content\": \"Excited to share that we just hit 10,000 users on Reepl!\\n\\nBuilding in public has been one of the best decisions we made.\\n\\nHere's what I'd tell founders who are hesitant to share their journey...\",\n  \"visibility\": \"PUBLIC\"\n}\n\nParameter\tRequired\tDescription\ncontent\tYes\tPost text (plain text only, max 3000 chars)\nmediaUrls\tNo\tArray of image URLs to include\nvisibility\tNo\tPUBLIC (default) or CONNECTIONS\n6. Schedule Post\n\nQueue a post for future publishing. Times are rounded to 15-minute intervals.\n\n{\n  \"content\": \"Monday motivation: the best time to start was yesterday. The second best time is now.\",\n  \"scheduledFor\": \"2026-02-17T08:00:00Z\",\n  \"visibility\": \"PUBLIC\"\n}\n\nParameter\tRequired\tDescription\ncontent\tYes\tPost text (plain text only, max 3000 chars)\nscheduledFor\tYes\tISO 8601 timestamp (e.g. 2026-02-17T08:00:00Z)\nmediaUrls\tNo\tArray of image URLs\nvisibility\tNo\tPUBLIC (default) or CONNECTIONS\n\nScheduling tips:\n\nAsk the user for their preferred time rather than picking one yourself.\nIf they want suggestions, recommend varied slots: early morning (7-8 AM), lunch (12-1 PM), or end of day (5-6 PM) in their timezone.\nAvoid scheduling all posts at the same time -- spread them for better engagement.\n7. Update Scheduled Post\n\nChange the time, content, visibility, or images on a post that's already scheduled.\n\n{\n  \"post_id\": \"post-456\",\n  \"scheduledFor\": \"2026-02-18T12:30:00Z\",\n  \"content\": \"Updated content for the scheduled post...\"\n}\n\nParameter\tRequired\tDescription\npost_id\tYes\tID of the scheduled post\nscheduledFor\tNo\tNew ISO 8601 timestamp\ncontent\tNo\tUpdated post text\nvisibility\tNo\tUpdated visibility\nmediaUrls\tNo\tUpdated image URLs (replaces existing)\n8. Delete Scheduled Post\n\nCancel and remove a scheduled post. Only works on posts with status scheduled, failed, or pending_approval. Published posts cannot be deleted this way.\n\n{\n  \"post_id\": \"post-456\"\n}\n\nParameter\tRequired\tDescription\npost_id\tYes\tID of the scheduled post to delete\n9. Publish Now\n\nImmediately queue a scheduled post for publishing by rescheduling it to now. The post will be picked up by the scheduler within a few minutes. Only works on scheduled posts.\n\n{\n  \"post_id\": \"post-456\"\n}\n\nParameter\tRequired\tDescription\npost_id\tYes\tID of the scheduled post to publish immediately\n10. Schedule Draft\n\nSchedule an existing draft for LinkedIn publishing. Fetches the draft content and creates a new scheduled post. The original draft remains as a draft.\n\n{\n  \"draft_id\": \"abc-123\",\n  \"scheduledFor\": \"2026-02-17T08:00:00Z\"\n}\n\nParameter\tRequired\tDescription\ndraft_id\tYes\tID of the draft to schedule (use get_drafts to find IDs)\nscheduledFor\tYes\tISO 8601 timestamp for when to publish\n11. Get Published Posts\n\nView the user's published LinkedIn posts. Supports keyword search and pagination.\n\n{\n  \"limit\": 10,\n  \"search\": \"AI\"\n}\n\nParameter\tRequired\tDescription\nlimit\tNo\tNumber of posts to return (default: 20)\nsearch\tNo\tFilter posts by keyword (case-insensitive content search)\nnextToken\tNo\tCursor for pagination -- use the nextToken from a previous response\n12. Get Scheduled Posts\n\nView posts currently queued for future publishing. Supports status filtering, keyword search, and pagination.\n\n{\n  \"limit\": 10,\n  \"status\": \"scheduled\"\n}\n\nParameter\tRequired\tDescription\nlimit\tNo\tNumber of posts to return (default: 20)\nstatus\tNo\tFilter by status: scheduled (default), failed, pending_approval, changes_requested\nsearch\tNo\tFilter posts by keyword (case-insensitive content search)\nnextToken\tNo\tCursor for pagination -- use the nextToken from a previous response\n13. Add Comment to Post\n\nAdd a comment to a published LinkedIn post. Some post types (reshares, restricted posts) may reject comments -- this is a LinkedIn limitation.\n\n{\n  \"post_id\": \"post-456\",\n  \"comment_text\": \"Great insights! This resonates with what I've seen in enterprise sales.\"\n}\n\nParameter\tRequired\tDescription\npost_id\tYes\tThe postId of the published post (from get_published_posts)\ncomment_text\tYes\tComment text (plain text only, max 1250 characters)\n14. Get User Profile\n\nReturns the user's name, email, and LinkedIn URL. No parameters required.\n\n15. Get Voice Profile\n\nRead the user's voice profile -- writing style patterns learned from their published posts. No parameters required.\n\nReturns:\n\nuserInstructions -- guidelines the user has set (topics to avoid/emphasize, brand keywords, custom rules, writing samples)\ngeneratedProfile -- LLM-learned patterns (tone dimensions, vocabulary preferences, hook styles, structure patterns, anti-patterns)\nallowAutoUpdate -- whether the generated profile can be updated automatically\nisActive -- whether the voice profile is active\n\nAlways read the voice profile before generating content. This is the key to writing posts that sound like the user, not like an AI.\n\n16. Update Voice Profile\n\nUpdate the voice profile with newly learned patterns after analyzing the user's posts.\n\n{\n  \"generatedProfile\": {\n    \"schema_version\": \"1.0\",\n    \"tone\": { \"primary\": \"conversational-authoritative\" },\n    \"vocabulary\": { \"signature_phrases\": [\"here's the thing\", \"let me break this down\"] },\n    \"structure\": { \"hook_patterns\": [{ \"type\": \"bold-statement\" }, { \"type\": \"question\" }] },\n    \"anti_patterns\": { \"never_do\": [\"use corporate jargon\", \"start with 'I'm excited to announce'\"] }\n  }\n}\n\nParameter\tRequired\tDescription\nallowAutoUpdate\tNo\tOnly change if user explicitly requests\nisActive\tNo\tToggle voice profile on/off\nuserInstructions\tNo\tUser-controlled guidelines -- only modify if user explicitly asks\ngeneratedProfile\tNo\tLLM-learned patterns from analyzing posts\n\nImportant: Before updating generatedProfile, always check that allowAutoUpdate is true. If the user has locked their profile, do not update it.\n\n17. Get Contacts\n\nBrowse saved LinkedIn contacts and profiles. Supports pagination.\n\n{\n  \"search\": \"product manager\",\n  \"limit\": 20\n}\n\nParameter\tRequired\tDescription\nlimit\tNo\tNumber of contacts (default: 20)\nsearch\tNo\tFilter by name, headline, or keyword\nnextToken\tNo\tCursor for pagination -- use the nextToken from a previous response\n18. Get Lists\n\nBrowse the user's contact lists (curated groups of contacts).\n\n{\n  \"search\": \"leads\",\n  \"limit\": 10\n}\n\nParameter\tRequired\tDescription\nsearch\tNo\tFilter lists by name\nlimit\tNo\tNumber of lists (default: 20)\n19. Get List Contacts\n\nGet all contacts in a specific contact list. Use get_lists to find list IDs.\n\n{\n  \"list_id\": \"list-123\",\n  \"limit\": 20\n}\n\nParameter\tRequired\tDescription\nlist_id\tYes\tThe ID of the list to fetch contacts from\nlimit\tNo\tNumber of contacts (default: 20)\nnextToken\tNo\tCursor for pagination -- use the nextToken from a previous response\n20. Add Contact to List\n\nAdd an existing contact to a contact list. Use get_contacts to find profile IDs and get_lists to find list IDs.\n\n{\n  \"profile_id\": \"profile-abc\",\n  \"list_id\": \"list-123\"\n}\n\nParameter\tRequired\tDescription\nprofile_id\tYes\tThe profileID of the contact to add\nlist_id\tYes\tThe ID of the list to add the contact to\n21. Get Collections\n\nBrowse saved post collections (groups of bookmarked LinkedIn posts).\n\n{\n  \"search\": \"inspiration\",\n  \"limit\": 10\n}\n\nParameter\tRequired\tDescription\nsearch\tNo\tFilter collections by name\nlimit\tNo\tNumber of collections (default: 20)\n22. Get Saved Posts\n\nRead posts from a specific collection. Use get_collections first to find the collection ID.\n\n{\n  \"collectionID\": \"col-789\",\n  \"search\": \"storytelling\",\n  \"limit\": 10\n}\n\nParameter\tRequired\tDescription\ncollectionID\tYes\tThe collection to fetch from\nlimit\tNo\tNumber of posts (default: 20)\nsearch\tNo\tFilter posts by keyword\n23. Get Templates\n\nBrowse post templates and content ideas saved in the user's library.\n\n{\n  \"search\": \"product launch\",\n  \"limit\": 10\n}\n\nParameter\tRequired\tDescription\nlimit\tNo\tNumber of templates (default: 20)\nsearch\tNo\tFilter by keyword\ncatalogID\tNo\tFilter by specific catalog\n24. Generate Image\n\nGenerate an AI image for a LinkedIn post using Google Gemini. Requires the user to have linked their Gemini API key in Reepl settings.\n\n{\n  \"style\": \"infographic\",\n  \"postContent\": \"3 ways AI is changing B2B sales in 2026...\"\n}\n\nParameter\tRequired\tDescription\nstyle\tYes\tImage style (see table below)\npostContent\tNo\tPost content for context\ncustomPrompt\tIf style is custom\tYour own image prompt\n\nAvailable styles:\n\nStyle\tOutput\ninfographic\tProfessional data visuals and charts\nminimal-illustration\tClean line art illustrations\nbold-text\tTypography and quote cards\nscreenshot-social-proof\tMockup screenshots\ncomic-storyboard\tComic-style panels\nrealistic-portrait\tPhotorealistic scenes\ndiagram-flowchart\tDiagrams and process flows\ncustom\tYour own prompt (requires customPrompt)\n\nAlways show the generated image to the user for approval before publishing. Pass the returned URL as mediaUrls when calling publish_to_linkedin or schedule_post.\n\n25. Generate Carousel Content\n\nGenerate AI slide content for a LinkedIn carousel. Supports plain text topics, YouTube URLs, and article URLs. Returns slide headlines and body text to pass into create_carousel_draft.\n\nNote: the API adds a hook slide and CTA slide automatically, so the actual slide count will be number_of_slides + 2.\n\n{\n  \"topic\": \"remote work productivity tips\",\n  \"number_of_slides\": 5\n}\n\n{\n  \"url\": \"https://youtube.com/watch?v=...\",\n  \"number_of_slides\": 6\n}\n\nParameter\tRequired\tDescription\ntopic\tNo\tTopic or subject for the carousel (use for plain text topics)\nurl\tNo\tYouTube or article URL to extract content from\nnumber_of_slides\tNo\tNumber of content slides to generate (1-10, default: 5)\n26. List Carousel Drafts\n\nList the user's carousel drafts saved in Reepl.\n\n{\n  \"search\": \"productivity\",\n  \"limit\": 10\n}\n\nParameter\tRequired\tDescription\nsearch\tNo\tFilter drafts by title\nlimit\tNo\tNumber of drafts to return (default: 20)\n27. Get Carousel Draft\n\nFetch a single carousel draft by ID, including all slide content, theme, and styling.\n\n{\n  \"draft_id\": \"carousel-abc\"\n}\n\nParameter\tRequired\tDescription\ndraft_id\tYes\tThe draft ID (use list_carousel_drafts to find IDs)\n28. Create Carousel Draft\n\nSave a new carousel draft in Reepl. Pass slides from generate_carousel_content or write your own. If no theme or colors are specified, your saved brand kit styling is applied automatically.\n\n{\n  \"title\": \"5 Remote Work Tips\",\n  \"slides\": [\n    { \"headline\": \"Stop working from the couch\", \"body\": \"Your brain associates spaces with activities. Create a dedicated workspace.\" },\n    { \"headline\": \"Time-block your deep work\", \"body\": \"90-minute focus blocks beat 8 hours of fragmented attention every time.\" }\n  ],\n  \"theme\": \"3\"\n}\n\nParameter\tRequired\tDescription\ntitle\tYes\tTitle for this carousel draft\nslides\tYes\tArray of slides, each with a headline (required) and optional body\ntheme\tNo\tTheme preset ID ('1' through '22'). Leave unset to use brand kit default\ntitle_font_size\tNo\tFont size for slide titles: lg, md (default), or sm\nbody_font_size\tNo\tFont size for slide body text: lg, md (default), or sm\n29. Update Carousel Draft\n\nUpdate an existing carousel draft. Only provide the fields you want to change -- unspecified fields are left as-is. Note: providing slides replaces ALL slides in the carousel.\n\n{\n  \"draft_id\": \"carousel-abc\",\n  \"title\": \"Updated Title\",\n  \"slides\": [\n    { \"headline\": \"New headline\", \"body\": \"New body text\" }\n  ]\n}\n\nParameter\tRequired\tDescription\ndraft_id\tYes\tThe ID of the draft to update\ntitle\tNo\tNew title\nslides\tNo\tReplacement slides (replaces ALL existing slides)\ntheme\tNo\tNew theme preset ID ('1' through '22')\ntitle_font_size\tNo\tlg, md, or sm\nbody_font_size\tNo\tlg, md, or sm\n30. Delete Carousel Draft\n\nPermanently delete a carousel draft. This cannot be undone.\n\n{\n  \"draft_id\": \"carousel-abc\"\n}\n\nParameter\tRequired\tDescription\ndraft_id\tYes\tThe ID of the carousel draft to delete\n31. Twitter/X: Create Post\n\nCreate or schedule a Twitter/X post or thread. Requires a Twitter account connected in Reepl Settings > Integrations and an active Premium subscription.\n\nFor a single tweet, pass an array with one item. For a thread, pass multiple items in order.\n\n{\n  \"threadTweets\": [\n    { \"index\": 0, \"text\": \"I spent 6 months studying how top creators grow on LinkedIn. Here's what actually works (thread):\" },\n    { \"index\": 1, \"text\": \"1/ Consistency beats virality. Posting 3x/week for 6 months outperforms a single viral post every time.\" },\n    { \"index\": 2, \"text\": \"2/ Comments matter more than posts. Thoughtful replies on big accounts drive more followers than original posts.\" }\n  ],\n  \"scheduledFor\": \"2026-03-15T14:00:00Z\"\n}\n\nParameter\tRequired\tDescription\nthreadTweets\tYes\tArray of tweet objects with index (0-based position) and text (max 280 chars each)\nscheduledFor\tNo\tISO 8601 timestamp. If omitted, post is saved as a draft (status: pending)\nlinkedPostId\tNo\tThe postId of a LinkedIn post this thread was cross-posted from\nCommon Patterns\nPattern 1: Write a Post in the User's Voice\n1. get_voice_profile          -- read their writing style\n2. Ask user for topic          -- what do they want to write about?\n3. Write draft (plain text!)   -- match their tone, hooks, vocabulary\n4. Show draft, get feedback    -- iterate until they're happy\n5. create_draft OR publish     -- save or go live\n\nPattern 2: Schedule a Week of Content\n1. get_voice_profile           -- read writing style\n2. get_templates               -- browse content ideas\n3. get_saved_posts             -- browse inspiration from collections\n4. Write 3-5 posts             -- vary topics, hooks, formats\n5. schedule_post (x5)          -- spread across Mon-Fri at varied times\n\nPattern 3: Repurpose Saved Content\n1. get_collections             -- find the right collection\n2. get_saved_posts             -- browse posts in it\n3. Pick a post, rewrite it     -- new angle, user's voice\n4. create_draft or publish     -- save or go live\n\nPattern 4: Post with AI-Generated Image\n1. Write the post content first\n2. generate_image              -- use post content as context\n3. Show the image to user      -- get approval\n4. publish_to_linkedin         -- pass image URL in mediaUrls\n\nPattern 5: Analyze and Update Voice Profile\n1. get_published_posts         -- fetch recent posts (limit: 20)\n2. Analyze patterns            -- tone, hooks, vocabulary, structure\n3. get_voice_profile           -- check if allowAutoUpdate is true\n4. update_voice_profile        -- save learned patterns to generatedProfile\n\nPattern 6: Create a LinkedIn Carousel\n1. Read carousel_guidelines prompt  -- understand content and styling rules\n2. generate_carousel_content        -- provide topic or URL\n3. Review slides with user          -- adjust if needed\n4. create_carousel_draft            -- save with brand kit styling\n5. Share the deep link              -- user fine-tunes in Reepl editor\n6. update_carousel_draft            -- apply any requested edits\n\nPattern 7: Cross-Post to Twitter/X\n1. Write or retrieve the LinkedIn post content\n2. Adapt for Twitter format           -- split into 280-char chunks for threads\n3. twitter_create_post                -- schedule or save as draft\n4. Pass linkedPostId if cross-posting -- links the Twitter thread to the LinkedIn post\n\nPattern 8: Schedule a Draft\n1. get_drafts                  -- find the draft to publish\n2. Ask user for preferred time -- or suggest morning/lunch/evening slots\n3. schedule_draft              -- pass draft_id and scheduledFor\n\nError Handling\nError\tCause\tSolution\nSession expired or invalid\tOAuth token expired\tRe-authenticate at https://mcp.reepl.io/oauth/authorize\nContent exceeds 3000 character limit\tPost too long\tShorten the content\ndraft_id is required\tMissing draft ID\tCall get_drafts first to find the ID\ncollectionID is required\tMissing collection ID\tCall get_collections first to find the ID\nGEMINI_NOT_LINKED\tNo Gemini API key\tUser must link key at https://app.reepl.io/settings/ai-models-api\nRate limit exceeded\tToo many requests\tWait a moment and retry\nResource not found\tInvalid ID\tThe draft/post/collection may have been deleted\nCouldn't comment on this post\tReshare or restricted post\tLinkedIn limitation, not a bug -- try a different post\nBest Practices\nAlways read the voice profile first. Before writing any content, call get_voice_profile to understand the user's writing style. Posts should sound like them, not like an AI.\nPlain text only. Never use markdown in post content. No **bold**, no *italic*, no # headings. LinkedIn renders these literally.\nConfirm before publishing. Always show the final content and get explicit confirmation before calling publish_to_linkedin, schedule_post, or publish_now. These affect the user's real LinkedIn profile.\nVary scheduling times. Don't default to 9 AM for every post. Ask the user, or suggest varied slots across mornings, lunch, and end of day.\nNever fabricate data. Don't invent engagement metrics, analytics, or post performance numbers. Only report what the API returns.\nRespect voice profile locks. If allowAutoUpdate is false, do not modify generatedProfile. The user has intentionally locked their voice profile.\nUse the library. Before writing from scratch, check templates and saved posts for inspiration. The user has curated these for a reason.\nRead carousel guidelines before creating carousels. Call the carousel_guidelines prompt to understand content rules and the slide structure before generating or saving carousel content.\nSee Also\nReepl -- AI-powered LinkedIn content management platform\nReepl Help Center -- Documentation and guides\nMCP Setup Guide -- Connect your Reepl account to Claude\nReepl Chrome Extension -- AI writing assistant for LinkedIn"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/abhibavishi/reepl",
    "publisherUrl": "https://clawhub.ai/abhibavishi/reepl",
    "owner": "abhibavishi",
    "version": "1.3.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/reepl",
    "downloadUrl": "https://openagent3.xyz/downloads/reepl",
    "agentUrl": "https://openagent3.xyz/skills/reepl/agent",
    "manifestUrl": "https://openagent3.xyz/skills/reepl/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/reepl/agent.md"
  }
}