WriteHero: LinkedIn post checker

Check, format and preview LinkedIn posts: limits, see-more cut, hooks, AI-sounding phrases.

Should I use this

Quality & Safety

A
Description quality
92%
Schema completeness
100%
Naming quality
97%
Poisoning risk
80%
Permission match
100%
Protocol compliance
100%

Findings (4)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool 'check_linkedin_post' description contains placeholder textin check_linkedin_post
  • LOWTool 'generate_linkedin_headlines' description lacks action verbin generate_linkedin_headlines
  • INFOTool description contains placeholder or incomplete textin check_linkedin_post

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,254Tokens (tool definitions)
~1.3 KBTypical response size
Moderate attention impact (0.98% of 128k context)

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-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools