WriteHero: LinkedIn post checker
Check, format and preview LinkedIn posts: limits, see-more cut, hooks, AI-sounding phrases.
Should I use this
Quality & Safety
Findings (4)
- HIGH
- MEDIUMin check_linkedin_post
- LOWin generate_linkedin_headlines
- INFOin check_linkedin_post
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"linkedin": {
"url": "https://writehero.io/api/mcp"
}
}
}Remote endpoints
https://writehero.io/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢check_linkedin_post(post)
Check a LinkedIn post before publishing: character count against LinkedIn's 3000-character limit, the text likely shown before "see more" on desktop, a hook score, Markdown that LinkedIn will not render, placeholders, and phrases that read as AI-written. Returns concrete issues to fix.
Input Schema
{
"type": "object",
"properties": {
"post": {
"type": "string",
"minLength": 1,
"description": "The full post text."
}
},
"required": [
"post"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢format_linkedin_post(post, replace_em_dashes)
Convert Markdown into text that pastes cleanly into LinkedIn: **bold** and headings become Unicode bold, *italic* becomes Unicode italic, list markers become bullets, Markdown links become plain URLs. Optionally replaces em dashes.
Input Schema
{
"type": "object",
"properties": {
"post": {
"type": "string",
"minLength": 1,
"description": "Post text, Markdown allowed."
},
"replace_em_dashes": {
"default": false,
"description": "Replace em dashes with commas.",
"type": "boolean"
}
},
"required": [
"post"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢style_linkedin_text(text, style)
Restyle a short piece of text with Unicode letters that keep their look when pasted into LinkedIn (bold, italic, bold italic, serif, cursive, strikethrough, underline). Use sparingly; screen readers may read styled letters poorly.
Input Schema
{
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"description": "The words to restyle."
},
"style": {
"default": "bold-sans",
"description": "Style to apply.",
"type": "string",
"enum": [
"bold-sans",
"bold-serif",
"bold-italic-sans",
"bold-italic-serif",
"bold-script",
"bold-fraktur",
"italic-sans",
"italic-serif",
"script",
"strikethrough",
"short-strike",
"slash",
"underline",
"double-underline"
]
}
},
"required": [
"text"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢generate_linkedin_hooks(topic, audience, result)
Opening-line templates for a LinkedIn post, filled with the user's topic, audience and result. Anything the user has not supplied stays in [brackets] to replace with a real detail; nothing is invented.
Input Schema
{
"type": "object",
"properties": {
"topic": {
"type": "string",
"maxLength": 80,
"description": "What the post is about, e.g. hiring engineers."
},
"audience": {
"default": "",
"description": "Who the post is for, e.g. founders.",
"type": "string",
"maxLength": 80
},
"result": {
"default": "",
"description": "A real result the user can back up, e.g. hired 4 engineers in 30 days.",
"type": "string",
"maxLength": 120
}
},
"required": [
"topic"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢generate_linkedin_headlines(role, audience, outcome, proof, keywords, ...)
Profile headline options built only from the user's role, audience, outcome, proof and keywords. Every option fits LinkedIn's 220-character headline limit. Does not change the profile.
Input Schema
{
"type": "object",
"properties": {
"role": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Current or target job title."
},
"audience": {
"default": "",
"description": "Who the user helps.",
"type": "string",
"maxLength": 180
},
"outcome": {
"default": "",
"description": "The result they deliver, e.g. book more sales calls.",
"type": "string",
"maxLength": 180
},
"proof": {
"default": "",
"description": "A credential or result they can verify.",
"type": "string",
"maxLength": 180
},
"keywords": {
"default": "",
"description": "Skills people search for.",
"type": "string",
"maxLength": 180
},
"goal": {
"default": "general",
"description": "clients: win clients; job: get hired; general: both.",
"type": "string",
"enum": [
"clients",
"job",
"general"
]
},
"tone": {
"default": "plain",
"description": "warm phrases the value as \"Helping...\"; plain and bold as \"I help...\".",
"type": "string",
"enum": [
"plain",
"bold",
"warm"
]
}
},
"required": [
"role"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢preview_linkedin_post(post, author_name, author_headline)
Return a link to an approximate preview of the post in the LinkedIn feed on mobile and desktop, including about where "see more" cuts it. Pass author_name and author_headline when you know them. Opening the link saves and publishes nothing. The post text travels in the link, so share it only with people who should read the draft.
Input Schema
{
"type": "object",
"properties": {
"post": {
"type": "string",
"minLength": 1,
"description": "The post text."
},
"author_name": {
"description": "Name shown on the preview.",
"type": "string",
"maxLength": 80
},
"author_headline": {
"description": "Headline shown under the name.",
"type": "string",
"maxLength": 220
}
},
"required": [
"post"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence