Record Post Published
record_post_publishedRecords that an approved post Mark doesn't publish itself is live: a LinkedIn Article (channel linkedin_article), or a website post (blog, faq, competitor_page) whose post type no CMS connection maps (get_post handoff reads publish_by_hand). Pass its id and its live URL: for an Article, the https linkedin.com URL LinkedIn shows for it; for a website post, the page's https address on any host. The post becomes published with publishedAt now and externalUrl the URL, the same as a post Mark published, and Mark sends post_published to the workspace's PostHog project once, on the first recording. For an Article, Mark reads its LinkedIn metrics daily for 30 days, then weekly until 90 days, through the connected LinkedIn account. Mark never publishes an Article itself, since LinkedIn has no API for them; a person copies the approved Article into LinkedIn at its slot time (get_post handoff reads publish_by_hand, then publish_now), then this records it. A website post with no CMS mapping is copied onto the site by hand (title, Markdown body, slug, SEO title and description from get_post), then recorded here. Calling again with the same URL succeeds and changes nothing. Refused for a post that isn't approved, another channel, a website post whose post type a CMS maps (Mark publishes those through the CMS), a URL that isn't https, an Article URL that isn't on linkedin.com or has no urn:li:share: or urn:li:ugcPost: post URN (a /pulse/ address), or a published post with a different URL. To help the person copy an Article, get_post gives the headline (meta.title) and the Markdown body; the cover is the asset meta.cover.assetId names, whose URL get_asset returns. Only use it once the user says the post is live. Related: get_post, get_asset, approve_posts, get_calendar.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"postId": "<postId>",
"url": "<url>"
},
"name": "record_post_published"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The live post's https address. For an Article, its post address from LinkedIn with its post URN in it, such as https://www.linkedin.com/feed/update/urn:li:ugcPost:7518698639439978496/ (LinkedIn's … > Embed this post shows it); a /pulse/ address is refused: it has no post URN, so Mark couldn't read the Article's metrics. For a website post, the page's address on your site, any host. | |
| postId | Yes | The approved LinkedIn Article, or approved website post with no CMS mapping. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| appUrl | Yes | ||
| postId | Yes | ||
| status | Yes | ||
| externalUrl | Yes | ||
| publishedAt | Yes |