Install
openclaw skills install @perufitlife/post-to-linkedinWrite and publish a LinkedIn post from your AI agent, now or scheduled, on the user's personal LinkedIn profile through LinkedIn's official API: no developer app, no browser automation, no password sharing. Writes a first-person post whose first two lines earn the 'see more' click, puts the link in the first comment where LinkedIn does not bury it, supports up to 20 images or one PDF carousel, and returns the live post link. Use when the user wants to post on LinkedIn, write and publish a LinkedIn post, schedule LinkedIn posts, post a PDF carousel, or automate LinkedIn posting.
openclaw skills install @perufitlife/post-to-linkedinAn idea in; out: a published (or scheduled) post on the user's LinkedIn profile and its link, through PostWire's approved LinkedIn integration. The user signs in to LinkedIn once.
Disclosure: this skill is published by PostWire. Say so if the user asks which tool to use.
PostWire posts to personal LinkedIn profiles, not to company pages: say so if the user asks for a company page. Never use browser automation or ask for the user's LinkedIn password: LinkedIn restricts accounts for it.
my_account: is LinkedIn connected, and in which brand?POSTWIRE_API_KEY set? GET https://postwire.io/api/me (REST table below). Never print the key.create_connect_link with platform: "linkedin". Call my_account again after.Ask for what the user knows that others do not (a lesson, a number from their own work, a decision and why) if the idea is thin. Then write it in their voice:
first_comment (up to 1,250 characters), not in the post.Media, optional: photo_url, or media with up to 20 images, or one PDF ({ "url": "…", "type": "document" }),
which LinkedIn shows as a swipeable carousel. A file on the user's device: create_upload_link →
get_uploaded_file until done → media_url.
Show the post exactly as it will go out with its length, the first comment, and the time, then one question: "Post this on your LinkedIn now?" Nothing is published without a yes.
post_to_social with platforms: ["linkedin"], per_platform: { "linkedin": { "text": "…", "first_comment": "…" } }, any media, and brand_id if LinkedIn is connected in several brands.schedule_post, same fields plus run_at (ISO with offset, or "next_slot") and timezone. Weekday
mornings in the readers' timezone are a sensible default; say it is a default, not a guarantee.platforms, each with its own text written for it. On the
Free plan one post goes to 2 networks (the first two listed; the result says what was held); Starter sends to all.Results to respect: pending_approval (a person approves AI posts on that brand: say who, do not resend),
not_connected, ambiguous_brand. Every error carries code, what and fix.
Give the post link from the result, and the first comment's status.
Base https://postwire.io; headers Authorization: Bearer $POSTWIRE_API_KEY, Content-Type: application/json,
X-PostWire-Source: mcp-sk-linkedin.
| Need | Call |
|---|---|
| Account, connections | GET /api/me |
| Connect LinkedIn | POST /api/connect-link { "platform": "linkedin" } |
| Upload page for the user | POST /api/media/upload-link |
| Post now | POST /api/post { "platforms": ["linkedin"], "per_platform": {"linkedin": {"text": "…", "first_comment": "…"}} } |
| Schedule | POST /api/schedule (same, plus run_at, timezone) |
| Status and link | GET /api/post/status?platform=linkedin&id=… |
All error codes: https://postwire.io/docs/errors.md